1

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

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

4

1 回答 1

0
  1. 确保您没有在 和 之间进行另一个 Win32 APIRegisterDeviceNotification调用GetLastError

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

  3. 值是m_hDriver从调用中获得的CreateFile吗?

于 2009-03-18T18:40:01.307 回答