BOOL WINAPI DeviceIoControl(//向设备驱动发送控制码,使设备执行相应操作。
_In_ HANDLE hDevice,//设备句柄句柄
_In_ DWORD dwIoControlCode,//控制码,用以区别设备不同的控制行为。
_In_opt_ LPVOID lpInBuffer,//指向输入数据缓存的指针,其数据格式与dwIoControlCode参数有关,设备接收命令后将对此数据进行处理。。
_In_ DWORD nInBufferSize,//输入数据缓存的大小
_Out_opt_ LPVOID lpOutBuffer,//指向输出缓存的指针,该缓存用于存放IO操作返回的数据。其格式与dwIoControlCode有关。
_In_ DWORD nOutBufferSize,//输出数据字节数
_Out_opt_ LPDWORD lpBytesReturned,//指向用于存储输出的数据的多少的变量的指针。
_Inout_opt_ LPOVERLAPPED lpOverlapped//指向OVERLAPPED结构的指针。
);
注意:如果输出缓存太小,不能接收任何数据,那么本函数调用将失败,GetLastError会返回ERROR_INSUFFICIENT_BUFFER
pBytesReturned大小将为0.如果输出缓存能接收部分数据那么GetLastError会返回ERROR_MORE_DATA,pBytesReturned大小将为
驱动程序接收到数据的大小。lpOverlapped为空时,lpBytesReturned不能为空,反之,lpBytesReturned可以为空。此时,lpBytesReturned
如果不为空,那么在lpOverlapped操作结束之前,其值无效。如果设备以FILE_FLAG_OVERLAPPED方式打开,lpOverlapped无效
CTL_CODE(//创建IO控制码
DeviceType,//设备类型,0~32767微软有定义,32768~65535可以用户自定义,
Function,//功能码,0-2047微软有定义, 2048-4095用户可自定义含义。
Method,//指定传输缓存数据的方式,微软有定义。
Access//指定操作访问权限,一般设为所有操作都可以访问
);