RegisterDeviceNotification返回NULL但仍收到通知

时间:2009-03-18 16:23:42

标签: c++ winapi usb drivers

我正在使用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条形码扫描仪)。

我在这里做错了什么想法?

1 个答案:

答案 0 :(得分:0)

  1. 确保您没有在RegisterDeviceNotificationGetLastError之间进行另一次Win32 API调用。

  2. 检查devBrHdr.dbch_hdevnotify的值。它应包含RegisterDeviceNotification返回的相同句柄。

  3. 通过调用m_hDriver获得CreateFile值?