我正在使用RegisterDeviceNotification来监视使用WM_DEVICECHANGE事件对USB设备的更改。但是,当我调用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条形码扫描仪)。
我在这里做错了什么想法?
答案 0 :(得分:0)
确保您没有在RegisterDeviceNotification
和GetLastError
之间进行另一次Win32 API调用。
检查devBrHdr.dbch_hdevnotify
的值。它应包含RegisterDeviceNotification
返回的相同句柄。
通过调用m_hDriver
获得CreateFile
值?