我正在使用 RegisterDeviceNotification 来监视 USB 设备的更改,使用 WM_DEVICECHANGE 事件。但是,当我调用 RegisterDeviceNotification() 时,它会为通知句柄返回 NULL,这应该表明它失败了。但是 GetLastError() 返回 ERROR_SUCCESS 并且通知实际上会通过。
当我稍后需要取消注册通知然后重新注册时,这会造成真正的麻烦。由于它返回的句柄为 NULL,我实际上无法重新注册。如果我尝试,RegisterDeviceNotification() 就会挂起。
我的代码如下:
DEV_BROADCAST_HANDLE devBrHdr;
::ZeroMemory( &devBrHdr,sizeof( DEV_BROADCAST_HANDLE ) );
devBrHdr.dbch_size = sizeof( DEV_BROADCAST_HANDLE );
devBrHdr.dbch_devicetype = DBT_DEVTYP_HANDLE;
devBrHdr.dbch_handle = m_hDriver;
m_hDevNotify = ::RegisterDeviceNotification( hWnd,&devBrHdr,DEVICE_NOTIFY_WINDOW_HANDLE );
m_hDriver 是我之前打开的驱动程序的句柄,在连接到设备(USB 条形码扫描仪)时。
有什么想法我在这里做错了吗?