【发布时间】:2014-10-22 13:28:58
【问题描述】:
当我对 CreateFile(HID_DEVICE_NAME,...) 提供的句柄执行 ReadFile/WriteFile 时,在 HID 操作方面会发生什么?
它是向 HID 设备(在我的例子中是 USB)发出直接写入/读取请求,还是在底层驱动程序中的某处转换以读取具有该 ID 的最后缓存的 HID 报告?
ReadFile 调用:
syncDevice.OutputReportBuffer[0] = 0;
syncDevice.OutputReportBuffer[1] = reportID;
HANDLE writeHandle = CreateFile(pDevice->DevicePath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
HANDLE readHandle = CreateFile(pDevice->DevicePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
success = WriteFile(writeHandle, (void*) syncDevice.OutputReportBuffer, syncDevice.Caps.OutputReportByteLength, &bytecnt, 0);
success = ReadFile(readHandle, syncDevice.InputReportBuffer, syncDevice.Caps.InputReportByteLength, &bytecnt, 0);
【问题讨论】:
-
我希望 CreateFile 调用失败;据我了解,Windows 会保持 HID 设备开放以进行独占访问。无论如何,这不太可能做任何明智的事情。
-
@HarryJohnston 但它有效
-
@HarryJohnston 也可以查看stackoverflow.com/questions/11691619/…
-
这是鼠标、键盘还是其他什么东西?
-
@HarryJohnston 它是一个基于 AVR 的设备,可作为 HID 设备可见。