Я использую 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).
Есть идеи, что я здесь делаю не так?