代码之家  ›  专栏  ›  技术社区  ›  Jeff Morrow

Windows:USB设备上的CreateFile不会唤醒挂起的设备

  •  0
  • Jeff Morrow  · 技术社区  · 1 年前

    作为许可机制,我们的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,则可获得加分。)

    0 回复  |  直到 1 年前