DeviceIoControl是Windows操作系统中的一个系统服务函数,用于在用户模式和内核模式之间传递数据。
DeviceIoControl
是一个 Windows API 函数,用于发送控制代码到设备驱动程序,这个函数允许应用程序与设备驱动程序进行底层通信,以执行特定的操作或获取设备信息。

(图片来源网络,侵删)
函数原型:
BOOL DeviceIoControl( HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped );
参数说明:
hDevice
:设备句柄,由CreateFile
、CreateFileMapping
、OpenFile
等函数返回。
dwIoControlCode
:控制代码,指定要执行的操作,这些代码通常由设备驱动程序定义。
lpInBuffer
:指向输入缓冲区的指针,包含要传递给设备驱动程序的数据,如果不需要输入数据,可以设置为NULL
。
nInBufferSize
:输入缓冲区的大小(以字节为单位),如果不需要输入数据,可以设置为0
。
lpOutBuffer
:指向输出缓冲区的指针,用于接收设备驱动程序返回的数据,如果不需要输出数据,可以设置为NULL
。
nOutBufferSize
:输出缓冲区的大小(以字节为单位),如果不需要输出数据,可以设置为0
。

(图片来源网络,侵删)
lpBytesReturned
:指向一个变量的指针,该变量接收实际从设备驱动程序返回的字节数,如果不需要此信息,可以设置为NULL
。
lpOverlapped
:指向一个OVERLAPPED
结构的指针,用于异步操作,如果不需要异步操作,可以设置为NULL
。
返回值:
如果函数成功,返回值为非零(TRUE);否则返回值为零(FALSE),要获取扩展的错误信息,可以调用GetLastError
函数。
使用示例:
#include <Windows.h> #include <iostream> int main() { HANDLE hDevice = CreateFile("\\.\MyDevice", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hDevice == INVALID_HANDLE_VALUE) { std::cerr << "Failed to open device: " << GetLastError() << std::endl; return 1; } DWORD controlCode = 0x80000000; // Example control code DWORD bytesReturned; BOOL result = DeviceIoControl(hDevice, controlCode, NULL, 0, NULL, 0, &bytesReturned, NULL); if (!result) { std::cerr << "DeviceIoControl failed: " << GetLastError() << std::endl; CloseHandle(hDevice); return 1; } std::cout << "DeviceIoControl succeeded." << std::endl; CloseHandle(hDevice); return 0; }

(图片来源网络,侵删)
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复