在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
頭文件。