如何通过重新插入设备来测试USB HID句柄是否无效

问题描述 投票:0回答:1

在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)无效的函数

即使设备已断开/重新连接且句柄无法访问设备,GetHandleInformation仍会成功。

c++ windows usb handle hid
1个回答
0
投票

要求使用的是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设备的指示符。

© www.soinside.com 2019 - 2024. All rights reserved.