Получить уведомление, когда неизвестно (драйвер не установлен) USB-устройство подключено в Windows - PullRequest
0 голосов
/ 26 января 2019

Мое приложение использует RegisterDeviceNotification для получения уведомления, когда новое USB-устройство вставлено или существующее устройство было удалено.

DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) );
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE;

HWND hWnd = this->window()->winId();
HDEVNOTIFY hDevNotify;
hDevNotify = RegisterDeviceNotification(hWnd, &NotificationFilter,
                                   DEVICE_NOTIFY_ALL_INTERFACE_CLASSES);

Он получает уведомление правильно с USB-клавиатуры, USB-мыши, USB-накопителя и других устройств, на которых Windows имеет предустановленный драйвер.

Моя проблема в том, что когда я вставляю \ удаляю необычное USB-устройство, например USB WLAN NIC, мое приложение получает только событие DBT_DEVNODES_CHANGED (сообщение 537, lParam 0, wParam 7), но нет DBT_DEVICEARRIVAL или DBT_DEVICEREMOVECOMPLETE .
Проблема возникает в ОС меньше, чем Win 10, на Win10 эта же вставка устройства вызовет событие DBT_DEVICEARRIVAL , я думаю, это потому, что в Win10 предустановлен драйвер устройства, а в win7 / xp нет.
Может быть, неизвестное устройство не имеет зарегистрированного интерфейса? (согласно этой статье: GUID класса устройства против GUID интерфейса устройства, разработчик MSFT ).

Так есть ли способ получить уведомление на Win7 / XP, когда вставлено устройство, драйвер которого не найден?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...