更新时间:2022-08-30 12:39:17
大家好,小勉来为大家解答以上的问题。设备输入这个很多人还不知道,现在让我们一起来看看吧!
1、DeviceIoControl是WIN32子系统向内核发送控制函数。
2、驱动程序在IRP_MJ_DEVICE_CONTROL这个IRP派遣函数中对DeviceIoControl发送的控制进行处理。
3、进行何种控制就靠控制码来识别。
4、也就是说在IRP_MJ_DEVICE_CONTROL派遣函数中应该取用一个switch结构进行判断是何种控制。
5、DeviceIoControl的具体使用参数你可以在BAIDU上查到。
6、其第二个参数就为控制码。
7、 IOCTL_CODE是一个宏定义。
8、该宏定义了控制码。
9、IOCTL_CODE(FILE_DEVICE_UNKNOW,Ox800,METHOD_BUFFED,ACCESS_ANY)第一个参数是设备类型FILE_DEVICE_UNKNOW是未知文件设备。
10、对于没有硬件支持的功能驱动程序一般定义为FILE_DEVICE_UNKNOW。
11、第二个参数是IOCTL码0X800是驱动程序定义的IOCTL码0x0000-0X7FFF为微软使用0x800-0xFFF为用户使用第三个参数是操作模式METHOD_BUFFED使用缓存区方式操作。
12、WIN32子系统下的应用程序在和内核模式下的驱动通信时,通信数据会被操作系统复制一份,再传递到内核中。
13、应为WINDOWS是一个多任务的操作系统,线程使用的内存可能随时被替换掉,还有WIN32程序使用的内存段和内核模式使用的内存段是不一样的。
14、使用METHOD_BUFFED保证了WINDOWS线程切换时WIN32程序和驱动程序的通信数据安全。
15、还有几种其他的操作模式你可以在BAIDU上查到。
16、第四个参数是读取权限ACCESS_ANY就可以了。
本文到此分享完毕,希望对大家有所帮助。