在Windows中,使用DeviceIoControl函数来与设备进行通信。DeviceIoControl函数的调用方式如下:
打开设备句柄:
HANDLE hDevice = CreateFile(
L"\\\\.\\DeviceName", // 设备名称,如\\\\.\\COM1
GENERIC_READ | GENERIC_WRITE, // 访问权限
0, // 共享模式,一般设置为0
NULL, // 安全描述符,一般设置为NULL
OPEN_EXISTING, // 打开现有设备
FILE_ATTRIBUTE_NORMAL, // 文件属性
NULL); // 模板句柄,一般设置为NULL
其中,DeviceName
是设备的名称,可以是串口(COM1, COM2, 等等)、磁盘(\Device\Harddisk0\Partition1)等。
设置或获取设备的控制命令:
DWORD dwBytesReturned;
BOOL bResult = DeviceIoControl(
hDevice, // 设备句柄
dwIoControlCode, // 控制代码,如IOCTL_DISK_GET_DRIVE_GEOMETRY
lpInBuffer, // 输入缓冲区,可选
nInBufferSize, // 输入缓冲区大小,可选
lpOutBuffer, // 输出缓冲区,可选
nOutBufferSize, // 输出缓冲区大小,可选
&dwBytesReturned, // 返回的字节数
NULL); // 异步操作句柄,一般设置为NULL
其中,dwIoControlCode
是设备的控制命令,可以是IOCTL_DISK_GET_DRIVE_GEOMETRY等。lpInBuffer
和nInBufferSize
是输入缓冲区和大小,用于传递命令所需的参数。lpOutBuffer
和nOutBufferSize
是输出缓冲区和大小,用于接收设备返回的信息。&dwBytesReturned
用于返回实际传输的字节数。
关闭设备句柄:
CloseHandle(hDevice);
使用完DeviceIoControl函数后,需要关闭设备句柄以释放资源。
注意事项:
windows.h
头文件。