Я использую RegisterDeviceNotification для отслеживания изменений на устройстве USB, используя событие WM_DEVICECHANGE. Тем не менее, когда я вызываю RegisterDeviceNotification (), он возвращает NULL для дескриптора уведомления, который должен указывать, что это не удалось. Но GetLastError () возвращает ERROR_SUCCESS, и уведомления действительно проходят.
Это вызывает большие проблемы, когда мне позже необходимо отменить регистрацию для уведомлений, а затем заново зарегистрироваться. Поскольку дескриптор, который он возвратил, был НЕДЕЙСТВИТЕЛЕН, я фактически не могу перерегистрировать. Если я попробую, 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-сканер штрих-кода).
Есть идеи, что я здесь не так делаю?