作为许可机制,我们的C++应用程序会定期检查USB设备的存在。但是,在Win11上,USB设备现在默认为“允许计算机关闭此设备以节省电源”。这导致所需的USB设备对我们的应用程序不可见,即使它仍然插着。
为了定位设备,我们正在这样做:
for ( int i = 0; i < NUM_HOST_CONTROLLERS; i++ )
{
swprintf_s ( hCName, BUFF_SIZE, L"\\\\.\\HCD%d", i );
hDevice = CreateFileW (
hCName,
0,
FILE_SHARE_WRITE | FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
NULL );
if ( hDevice != INVALID_HANDLE_VALUE )
{
// Do stuff here
}
}
这最初是有效的,但一旦Windows决定挂起USB设备,随后对该设备的CreateFileW的调用将返回INVALID_HANDLE_VALUE。我原本以为CreateFileW调用本身会唤醒设备,但显然事实并非如此。
正确的方法是什么?(如果该解决方案在Windows版本上运行到Win7,则可获得加分。)