2009-04-01 16 views
7

Actualmente tengo un código que configura las notificaciones de los dispositivos USB HID conectados dentro de un Servicio de Windows (escrito en C++). El código es el siguiente:Use RegisterDeviceNotification() para TODOS los dispositivos USB

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

Una notificación es recibida luego por el evento SERVICE_CONTROL_DEVICEEVENT. (Recuerde, este es un servicio así que no WM_DEVICECHANGE).

Pensé que podría simplemente especificar el indicador DEV_BROADCAST_DEVICEINTERFACE en la llamada RegisterDeviceNotification() para que invalide dbcc_classguid y obtenga todos los dispositivos, pero resulta que ese indicador no es compatible con Windows 2000, lo cual es un obstáculo para mí. Además, supongo que devolvería algo más que dispositivos USB.

¿Cómo debo modificar esto para obtener todos los dispositivos USB, no solo USB HID? ¿Debería ser tan simple como simplemente dar un GUID diferente? ¿Hay incluso un GUID para todos los USB?

Respuesta

5

GUID_DEVINTERFACE_USB_DEVICE Usado (en "usbiodef.h") para vigilar todos los dispositivos USB.

DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; 
    ZeroMemory(&NotificationFilter, sizeof(NotificationFilter)); 

    NotificationFilter.dbcc_size = sizeof(NotificationFilter); 
    NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; 
    NotificationFilter.dbcc_reserved = 0; 

    NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE; 

    HDEVNOTIFY hDevNotify = RegisterDeviceNotification(hwnd, &NotificationFilter, DEVICE_NOTIFY_SERVICE_HANDLE); 
Cuestiones relacionadas