在Windows上插入未知(未安装驱动程序)USB设备时获得通知

时间:2019-01-26 06:08:28

标签: c++ c windows

当插入新的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上获得通知?

谢谢!

0 个答案:

没有答案