2009-04-01 33 views
7

Tôi hiện có một số mã thiết lập thông báo kết nối thiết bị USB HID trong Dịch vụ Windows (được viết bằng C++). Mã như sau:Sử dụng RegisterDeviceNotification() cho TẤT CẢ thiết bị 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); 

Thông báo sau đó sẽ được nhận qua sự kiện SERVICE_CONTROL_DEVICEEVENT. (Hãy nhớ rằng, đây là một Dịch vụ để không có WM_DEVICECHANGE). Tôi nghĩ tôi có thể chỉ định cờ DEV_BROADCAST_DEVICEINTERFACE trong cuộc gọi RegisterDeviceNotification() để nó ghi đè lên dbcc_classguid và nhận tất cả các thiết bị, nhưng hóa ra lá cờ đó không được hỗ trợ trên Windows 2000, đó là một giao dịch cho tôi. Ngoài ra, tôi đoán rằng điều đó sẽ trở lại nhiều hơn chỉ là thiết bị USB.

Tôi nên sửa đổi điều này như thế nào để nhận được tất cả Thiết bị USB, không chỉ USB HID? Nó có nên đơn giản như chỉ cho một GUID khác nhau không? Thậm chí có GUID cho tất cả USB không?

Trả lời

5

GUID_DEVINTERFACE_USB_DEVICE qua sử dụng (trong "usbiodef.h") để xem cho tất cả các thiết bị 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); 
Các vấn đề liên quan