【发布时间】:2019-04-09 23:30:44
【问题描述】:
在 Windows 7 中,我有一个自定义 USB HID 设备的句柄。我正在尝试确定手柄是否不再能够访问设备,因为设备已被拔出并重新插入。发生这种情况时,使用 WriteFile 的 I/O 尝试会失败。但是,我正在寻找一种在执行任何 I/O 以确定 HID 设备句柄是否仍然有效之前测试句柄的方法。当我说有效时,我的意思是句柄连接到设备,这样我就可以对设备进行 I/O。我了解从技术上讲,即使手柄与物理设备失去连接,手柄本身也可能有效。我的代码中的当前方法是通过尝试打开设备的新句柄来进行测试,如果成功则句柄有效,如果失败则句柄无效。如果设备在测试时被拔出,这会按预期检测断开连接。这样做的问题是,如果设备已重新插入,则测试打开成功,但用于执行 I/O 的实际句柄(在断开/重新连接之前打开)不再连接到设备。我正在寻找一个可以使用实际 I/O 句柄进行的良性调用,它会告诉我设备是否已连接,但无需执行任何实际 I/O。
到目前为止,我已经尝试了几个调用,但没有一个返回我需要的设备连接指示。
DWORD handleInformation;
LARGE_INTEGER size = { 0, 0 };
BOOL isConnected;
isConnected = GetFileSizeEx(m_HidWriteHandle, &size);
isConnected = GetHandleInformation(m_HidWriteHandle, &handleInformation);
GetFileSizeEx 总是失败,GetLastError() 报告 (1) Invalid Function
即使设备已断开/重新连接并且句柄无法访问设备,GetHandleInformation 也始终成功。
【问题讨论】:
-
您是否使用 CreateFile 创建了句柄?如果是这样,您可以尝试 GetFileInformationByHandle。
-
@TonyJ 是的,它是使用 CreateFile 创建的,但是我已经尝试使用 GetFileInformationByHandle,它总是返回 0(失败),GetLastError() = 1 Invalid Function。句柄好和无效时都返回0
标签: c++ windows usb handle hid