<b>文件系统驱动编程底子篇之3——Ioctl掌握操作</b>[VC/C++编程]
本文“<b>文件系统驱动编程底子篇之3——Ioctl掌握操作</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
2、对象管理与命名空间(Namespace)
内核空间中差别范例的对象都通过对象管理器统一管理,并通过命名空间这一逻辑上的概念来组织各个对象,近似于资源管理器.Device目录存放着通过IoCreateDevice成立的各种设备对象,包含文件系统驱动下成立的卷对象.FileSystem目录存放着文件系统驱动对象和文件系统辨认器设备对象(这些内容将在进阶篇论述).更具体的描写请参看资料2.
到目前为止,我们还未谈论过用户情势下的利用程序若何与驱动程序发生交互,请暂时忘掉“中止门”、“陷阱门”这类“高深莫测”的术语(大举宣扬这些术语反而有引入歧途的动机),这些包含在CPU硬件理论中的底子知识不会对我们学习驱动编程有直接的影响,相反,值得一提的倒是CreateFile函数.文件是一个高度抽象的概念,既然内核中的对象可以被统一管理,外部的各种设备自然也不例外,它们都可以用文件来加以描写.从图中我们看到计算机中的串口COM1,它对应着设备对象Serial0,而C:盘,对应着是卷设备对象HarddiskVolume4,这是一种称为“标记链接”的映射,通过这个映射,用户情势下的程序才能看到内核中的设备对象,也才可以通过CreateFile翻开它们.形象的说,标记链接近似于小名,如大狗普通就称为“旺财”,小狗就叫做“小白”.在内核中成立标记衔接可以利用IoCreateSymbolicLink,用户情势下可用DefineDosDevice.
CreateFile的利用示例,注意“.”对应着命名空间里的“GLOBAL??”:
if ((hDevice = CreateFile( "\\\\.\\IoctlTest",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL)) == INVALID_HANDLE_VALUE) {
另一种途径就是Ioctl掌握操作.
3、Ioctl掌握码
Ioctl掌握码的构造近似于消息(如WM_XXX)或NTSTATUS的定义方法,它是一个驱动程序预定义的4字节整数,定义它的宏为:
#define IOCTL_Device_Function CTL_CODE(DeviceType, Function, Method, Access)
16-31 2-13 0-1 14-15
通过供应设备范例、功效码(可看做函数的序号)、缓冲方法和存取权限,该宏就成立了一个Ioctl码.设备驱动可以定义多个Ioctl码(通过差别的功效码来辨别差别的功效函数)以供应差别的掌握功效.
以上是“<b>文件系统驱动编程底子篇之3——Ioctl掌握操作</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |