当插入新的USB设备或删除现有的USB设备时,我的应用程序使用RegisterDeviceNotification获取通知。
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的OS上,在Win10上,相同的设备插入将触发 DBT_DEVICEARRIVAL 事件,我猜这是因为Win10预先安装了设备驱动程序,而win7 / xp尚未安装。
也许未知设备没有注册接口? (根据本文:device class GUID vs device interface GUID,by A MSFT developer)。
因此,当插入没有找到驱动程序的设备时,是否有办法在Win7 / xp上获得通知?
谢谢!