В настоящее время у меня есть код, который настраивает уведомления о подключенных USB-устройствах HID в службе Windows (написан на C++). Код выглядит следующим образом:
GUID hidGuid;
HidD_GetHidGuid(&hidGuid);
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
ZeroMemory(&NotificationFilter, sizeof(NotificationFilter));
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = hidGuid;
HDEVNOTIFY deviceNotify = RegisterDeviceNotification(StatusHandle, &NotificationFilter, DEVICE_NOTIFY_SERVICE_HANDLE);
Затем уведомление поступает через событие SERVICE_CONTROL_DEVICEEVENT. (Помните, что это служба, поэтому WM_DEVICECHANGE не требуется).
Я думал, что могу просто указать флаг DEV_BROADCAST_DEVICEINTERFACE в вызове RegisterDeviceNotification(), чтобы он переопределял dbcc_classguid и получал все устройства, но оказалось, что этот флаг не поддерживается в Windows 2000, что для меня является нарушением условий сделки. Кроме того, я предполагаю, что это вернет не только USB-устройства.
Как мне изменить это, чтобы получить все USB-устройства, а не только USB HID? Должно ли быть так же просто, как просто указать другой GUID? Есть ли вообще GUID для всех USB?