2009-04-01 18 views
7

Ich habe derzeit einen Code, der Benachrichtigungen von angeschlossenen USB-HID-Geräten innerhalb eines Windows-Dienstes (in C++ geschrieben) erstellt. Der Code lautet wie folgt:Verwenden Sie RegisterDeviceNotification() für alle USB-Geräte

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); 

Eine Meldung wird dann über den SERVICE_CONTROL_DEVICEEVENT Ereignis empfangen. (Denken Sie daran, das ist ein Service, also kein WM_DEVICECHANGE).

Ich dachte, ich könnte nur die DEV_BROADCAST_DEVICEINTERFACE Flag im RegisterDeviceNotification() Aufruf angeben, so würde es dbcc_classguid überschreiben und alle Geräte abrufen, aber es stellt sich heraus, dass dieses Flag unter Windows 2000 nicht unterstützt wird, das ist ein Dealbreaker für mich. Ich vermute, dass das mehr als nur USB-Geräte zurückgeben würde.

Wie soll ich dies ändern, um alle USB-Geräte zu bekommen, nicht nur USB HID? Sollte es so einfach sein, nur eine andere GUID zu geben? Gibt es überhaupt eine GUID für alle USB?

Antwort

5

Gebrauchte GUID_DEVINTERFACE_USB_DEVICE (in "usbiodef.h") für alle USB-Geräte zu sehen.

Verwandte Themen