DeviceIoControl的使用说明
生活随笔
收集整理的这篇文章主要介绍了
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返回的设备句柄)Return Values(返回值)
Nonzero indicates success. 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, //没有返回的数据,置为NULL0, //没有返回的数据,置为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, //没有向设备传递的数据,置为NULL0, //没有向设备传递的数据,置为NULLbTemp, //读取设备的数据返回地址iSize, //读取数据的字节数&nOutput,NULL)) {return false; } //放置到公用数组 memcpy(&bData[0],&bTemp[0],iSize); return true; }总结
以上是生活随笔为你收集整理的DeviceIoControl的使用说明的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Nagios 配置文件介绍
- 下一篇: openfire + spark + s