gpt4 book ai didi

c++ - 由于重新插入设备,如何将 USB HID 句柄测试为无效

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:47 27 4
gpt4 key购买 nike

在 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 始终成功,即使设备已断开/重新连接并且句柄无法访问设备。

最佳答案

使用的调用是HidD_GetAttributes(handle, &attributes)

// Try to get the HID attributes.  This will fail if device is
// unplugged or has been unplugged since CreateFile() call that
// created m_HidWritehandle
HIDD_ATTRIBUTES Attributes;
Attributes.Size = sizeof(Attributes);
m_HidPresent = HidD_GetAttributes(m_HidWriteHandle, &Attributes) != 0;

即使设备已重新插入,这也将返回 false,因此可用作需要重新连接到 HID 设备的指示器。

关于c++ - 由于重新插入设备,如何将 USB HID 句柄测试为无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55602693/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com