windows驱动开发入门(1)——内核编程的环境
(一)用户空间和内核空间大家都知道,每个进程的内存空间是相互隔离的,也就是在各自相对独立的地址空间内运行。但是,我们的进程需要调用操作系统给我提供的一些功能,他才能够正确的被执行。所以,进程的空间实际上被分成了2部分,一部分供进程自己独立使用,叫做“用户空间”。还有一部分就是容纳操作系统的内核。叫做“内核空间”。对于4G的内存。低2G是用户空间,高2G是内核空间。(其中采用的虚拟内存技术)
用户空间是各个进程隔离的。但是我们编写的驱动是运行在高2GB的内核空间的。内核空间是共享的。
这个图片对于解释内核空间和用户空间感觉挺合适。我们用户空间的进程可以共享内核空间的数据
(二)从应用程序到驱动程序,我们的操作系统大致做了什么
在win32 API中有一个大家都知道的API。。CreateFile()。用这个函数来说明我们的CreateFile是怎么样一步一步通过驱动程序对我们存放在硬盘上的文件进行读写的。
还是先找一个经典的图片。。
(1)首先,应用程序调用CreateFile API。这个API是由win32子系统中的kernel32.dll来实现的。CreateFile函数会调用NtCreateFile。这个函数可以让我们穿越到内核模式。这个穿越的步骤通过软件中断实现(在DISPATH_LEVEL层)。
(2)进入内核之后,一路向下,然后由IO管理器,创建并且发送IRP到我们的设备驱动。IRP是一个数据结构,其中就包含有我们有关CreateFile的的一些信息。这个也可以看作是MFC中的消息。理解上差不多。这个IRP告诉驱动。用户层的请求是读数据呢?还是写数据。
(3)驱动程序(具体就是派遣函数)根据这个IRP的请求。做出相应的处理。把处理结果一层一层返回去。
永不止步 nowayings
于2015-03-28晚上
页:
[1]