deviceiocontrolDeviceIoControl这个函数的使用

deviceiocontrol  时间:2021-06-26  阅读:()

USB之WDM架构驱动中DeviceIoControl读取细节

DeviceIoControl是WIN32子系统向内核发送控制函数。

驱动程序在IRP_MJ_DEVICE_CONTROL这个IRP派遣函数中对DeviceIoControl发送的控制进行处理。

进行何种控制就靠控制码来识别。

也就是说在IRP_MJ_DEVICE_CONTROL派遣函数中应该取用一个switch结构进行判断是何种控制。

DeviceIoControl的具体使用参数你可以在BAIDU上查到。

其第二个参数就为控制码。

IOCTL_CODE是一个宏定义。

该宏定义了控制码。

IOCTL_CODE(FILE_DEVICE_UNKNOW,Ox800,METHOD_BUFFED,ACCESS_ANY)
第一个参数是设备类型

FILE_DEVICE_UNKNOW是未知文件设备。

对于没有硬件支持的功能驱动程序一般定义为FILE_DEVICE_UNKNOW。

第二个参数是IOCTL码

0X800是驱动程序定义的IOCTL码

0x0000-0X7FFF为微软使用

0x800-0xFFF为用户使用

第三个参数是操作模式

METHOD_BUFFED使用缓存区方式操作。

WIN32子系统下的应用程序在和内核模式下的驱动通信时,通信数据会被操作系统复制一份,再传递到内核中。

应为WINDOWS是一个多任务的操作系统,线程使用的内存可能随时被替换掉,还有WIN32程序使用的内存段和内核模式使用的内存段是不一样的。

使用METHOD_BUFFED保证了WINDOWS线程切换时WIN32程序和驱动程序的通信数据安全。

还有几种其他的操作模式你可以在BAIDU上查到。

第四个参数是读取权限

ACCESS_ANY就可以了。

我想知道我手机的device ID是什么?

安卓系统手机的DEVICE ID只要很简单的一个命令就可以查看: 1、点击电话,启动拨号界面,然后输入“*#*#8255#*#*”即可进入GTalk Service Monitor界面了。

GTalk Service Monitor界面 2、红圈圈便是Device ID了。

devicevm 是什么意思

快速启动上网的小型操作系统,能够实现秒及启动开始网上冲浪。

DeviceVM 基本参数 产品类型 Linux 产品概述 是由厂商预安装在新电脑和主板的硬盘或闪存里。

是一个纯软件解决方案,无需额外的硬件安装。

的其中一部分内置在电脑的BIOS里 - BIOS即您一按下电源开关运行的那部分。

有了,您就可以选择先运行某个程序,比如网页浏览器,还是先启动您的主操作系统。

与任何操作系统兼容,包括Windows和Linux系统。

有着和其他操作系统相类似的网络功能。

可以通过WiFi、LAN、xDSL和Cable上网,并且支持WEP、WPA和WPA2无线安全标准。

如何用DeviceIOControl读取并口信息

应用程序和驱动程序的通信过程是:应用程序使用CreateFile函数打开设备,然后用DeviceIoControl与驱动程序进行通信,包括读和写两种操作。

还可以用ReadFile读数据用WriteFile写数据。

操作完毕时用CloseHandle关闭设备。

我们比较常用的就是用DeviceIoControl对设备进行读写操作。

先看看DeviceIoControl是怎么定义的: BOOL DeviceIoControl( HANDLE hDevice, // (CreateFile返回的设备句柄) DWORD dwIoControlCode, // (应用程序调用驱动程序的控制命令,就是IOCTL_XXX IOCTLs ) LPVOID lpInBuffer, //(应用程序传递给驱动程序的数据缓冲区地址) DWORD nInBufferSize, //(应用程序传递给驱动程序的数据缓冲区大小,字节数) LPVOID lpOutBuffer, //(驱动程序返回给应用程序的数据缓冲区地址) DWORD nOutBufferSize, //(驱动程序返回给应用程序的数据缓冲区大小,字节数) LPDWORD lpBytesReturned, //(驱动程序实际返回给应用程序的数据字节数地址) LPOVERLAPPED lpOverlapped // (重叠操作结构) ); Parameters(参数) hDevice (CreateFile返回的设备句柄) [in] Handle to the device that is to perform the operation. To obtain a device handle, call the CreateFile function. dwIoControlCode (应用程序调用驱动程序的控制命令,就是IOCTL_XXX IOCTLs ) [in] IOCTL for the operation. This value identifies the specific operation to perform and the type of device on which to perform the operation. There are no specific values defined for the dwIoControlCode parameter. However, you can define custom IOCTL_XXX IOCTLs with the CTL_CODE macro. You can then advertise these IOCTLs and an application can use these IOCTLs with DeviceIoControl to perform the driver-specific functions. lpInBuffer (应用程序传递给驱动程序的数据缓冲区地址) [in] Long pointer to a buffer that contains the data required to perform the operation. Set to NULL if the dwIoControlCode parameter specifies an operation that does not require input data. nInBufferSize (应用程序传递给驱动程序的数据缓冲区大小,字节数) [in] Size, in bytes, of the buffer pointed to by lpInBuffer. lpOutBuffer (驱动程序返回给应用程序的数据缓冲区地址) [out] Long pointer to a buffer that receives the output data for the operation. Set to NULL if the dwIoControlCode parameter specifies an operation that does not produce output data. nOutBufferSize (驱动程序返回给应用程序的数据缓冲区大小,字节数) [out] Size, in bytes, of the buffer pointed to by lpOutBuffer. lpBytesReturned (驱动程序实际返回给应用程序的数据字节数地址) [out] Long pointer to a variable that receives the size, in bytes, of the data stored in lpOutBuffer. The DeviceIoControl function may unnecessarily use this parameter. For example, if an operation does not produce data for lpOutBuffer and lpOutBuffer is NULL, the value of lpBytesReturned is meaningless. lpOverlapped (重叠操作结构) [in] Ignored; set to NULL. Return Values(返回值) Nonzero indicates ess. Zero indicates failure. To obtain extended error information, call the GetLastError function. (非0成功,0失败) 具体使用我们看看列子: 1,向设备传递数据,我们定义一个函数来实现 bool CDeviceOperDlg::SendKeyData(HANDLE handle, BYTE *bData, int iSize) { ULONG nOutput; BYTE bTemp[512]; //将数据放置到发送数组 memset(bTemp,0,sizeof(bTemp)); memcpy(bTemp,&bData[0],iSize); //向设备发送 if (!DeviceIoControl(handle, ATST2004_IOCTL_WRITE, //根据具体的设备有相关的定义 bTemp, //向设备传递的数据地址 iSize, //数据大小,字节数 NULL, //没有返回的数据,置为NULL 0, //没有返回的数据,置为0 &nOutput, NULL) ) { return false; } return true; } 2,从设备读取数据 bool CDeviceOperDlg::ReviceKeyData(HANDLE handle, BYTE *bData, int iSize) { ULONG nOutput; BYTE bTemp[512]; //数组清零 memset(bTemp,0,sizeof(bTemp)); //向设备发送 if (!DeviceIoControl(handle, ATST2004_IOCTL_READ, //根据具体的设备有相关的定义 NULL, //没有向设备传递的数据,置为NULL 0, //没有向设备传递的数据,置为NULL bTemp, //读取设备的数据返回地址 iSize, //读取数据的字节数 &nOutput, NULL) ) { return false; } //放置到公用数组 memcpy(&bData[0],&bTemp[0],iSize); return true; }

C#怎么使用DeviceIoControl控制端口输出

//开始输出数据 do{ inputBuffer[0] = 0x00600378; //Output Data Register DeviceIoControl(hDevice, WRITE_PORT, inputBuffer, sizeof(inputBuffer), NULL, 0, &dwOutput, NULL); for (i=0;i<850;i++){;}

DeviceIoControl这个函数的使用

用CreateFile打开驱动,路径是Device,例如驱动名是MyDriver,则打开DeviceMyDriver即可。

然后利用返回的句柄发送控制码

bgpto:独立服务器夏季促销,日本机器6.5折、新加坡7.5折,20M带宽,低至$93/月

bgp.to对日本机房、新加坡机房的独立服务器在搞特价促销,日本独立服务器低至6.5折优惠,新加坡独立服务器低至7.5折优惠,所有优惠都是循环的,终身不涨价。服务器不限制流量,支持升级带宽,免费支持Linux和Windows server中文版(还包括Windows 10). 特色:自动部署,无需人工干预,用户可以在后台自己重装系统、重启、关机等操作!官方网站:https://www.bgp.to...

vpsdime:夏日促销活动,美国达拉斯VPS,2G内存/2核/20gSSD/1T流量,$20/年

vpsdime怎么样?vpsdime是2013年注册的国外VPS主机商,实际上他还有一系列的其他域名站点如Winity.io, Backupsy,Cloudive, Virtora等等,母公司“Nodisto IT”相对来说还是很靠谱了的商家。VPSDime主要提供各种高配低价VPS套餐,其中Linux VPS和存储VPS基于OpenVZ架构,高级VPS基于KVM。VPSDime在上个季度的Low...

LOCVPS:美国XEN架构VPS七折,全场八折,日本/新加坡XEN架构月付29.6元起

LOCVPS发来了针对XEN架构VPS的促销方案,其中美国洛杉矶机房7折,其余日本/新加坡/中国香港等机房全部8折,优惠后日本/新加坡机房XEN VPS月付仅29.6元起。这是成立较久的一家国人VPS服务商,目前提供美国洛杉矶(MC/C3)、和中国香港(邦联、沙田电信、大埔)、日本(东京、大阪)、新加坡、德国和荷兰等机房VPS主机,基于XEN或者KVM虚拟架构,均选择国内访问线路不错的机房,适合建...

deviceiocontrol为你推荐
存储区域网络什么是存储局域网?组建它需要哪些内容?youtube创始人世界第一大网站是什么?netbios协议NETBEUI协议有什么用?云输入法QQ云输入法的候选窗口是什么样的?cursorlocation在ENVI中双击遥感图像出来个CURSOR LOCATION/value对话框。下面有个LL : 31?6'21.84"N, 117?9'11.78"E动画分镜头脚本请问什么是动画分镜头脚本,什么是电影分镜头脚本以及什么是广告分镜头脚本?怎么查微信注册时间怎么知道微信上次登录时间flash序列号flash激活序列号是?flash序列号求flash的序列号idataparameterinvalid parameter是什么意思
域名服务器 双线服务器租用 重庆服务器租用 电信服务器租赁 美国加州vps hostigation 站群服务器 腾讯云数据库 阿里云代金券 国内php空间 英文站群 e蜗牛 php空间申请 国外免费全能空间 网站cdn加速 699美元 web应用服务器 smtp服务器地址 新加坡空间 lamp怎么读 更多