内核层
用户层与内核层通信可以使用IoCreateDeviceSecure
函数创建的设备(Device)作为中间媒介IoCreateDeviceSecure
在成功情况下会通过参数返回一个DeviceObject,此时的设备还不能直接被用户层程序使用,需要为其创建一个符号链接(Symbolic Link).
创建好符号链接后可以被用户层程序使用.设备本身有自己的名字,比如\\Device\\mydevice_1tyuf2uhiu
,符号链接可以理解为是供用户层使用的别名,比如\\??\\mydevice_sym_1tyuf2uhiu
.
另外,内核层的符号链接和用户层的符号链接也不太一样,比如对于\\??\\mydevice_sym_1tyuf2uhiu
这个内核层的符号链接,在用户层访问需要改成\\\\.\\mydevice_sym_1tyuf2uhiu
才能正确访问设备.
根据MSDN的说法,通过IO请求传输数据给驱动需要使用IRP作为信息的载体,为驱动(Driver)设置Major Function的Dispatcher是因为IO请求包括许多类操作,包括从设备读取数据、向设备写入数据、开启/关闭设备等,这样就可以编写不同的Dispatcher函数来处理不同的IO请求.
1 |
|
用户层
1 |
|