近日在做关于windows插拔usb摄像头设备的检测功能,期间碰到一些坑,现总结如下:
1、首先几个关于windows插拔usb设备检测的几个链接为:
https://blog.csdn.net/explorer114/article/details/50563051
https://blog.csdn.net/chrovery/article/details/52402350#comments
https://blog.csdn.net/HeathLedger1990/article/details/51968723
https://blog.csdn.net/wzy198852/article/details/52343819
2、第一个链接中有关于拿到系统的消息和获得插入和拔出usb设备的注册信息;
第二个链接为在获取的usb设备中识别usb设备的信息;
第三个链接为注册时用guid信息分类说明;
第四个链接为usb冷插拔和热插拔的大致原理说明;
3、了解了上面的基本知识就可以做usb摄像头的插拔检测功能了:
a、首先注册信息,将链接1中的usb的注册信息改为camera的注册信息,第一个的注册信息就是camera设备的注册信息;
static const GUID GUID_DEVINTERFACE_LIST[] =
{
// GUID_DEVINTERFACE_CAMERA_DEVICE
{ 0x65E8773D, 0x8F56, 0x11D0, { 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 } },
// GUID_DEVINTERFACE_USB_DEVICE
{ 0xA5DCBF10, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } },
// GUID_DEVINTERFACE_DISK
{ 0x53f56307, 0xb6bf, 0x11d0, { 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } },
// GUID_DEVINTERFACE_HID,
{ 0x4D1E55B2, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } },
// GUID_NDIS_LAN_CLASS
{ 0xad498944, 0x762f, 0x11d0, { 0x8d, 0xcb, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c } },
GUID_DEVINTERFACE_COMPORT
{ 0x86e0d1e0, 0x8089, 0x11d0, { 0x9c, 0xe4, 0x08, 0x00, 0x3e, 0x30, 0x1f, 0x73 } },
GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR
{ 0x4D36E978, 0xE325, 0x11CE, { 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 } },
GUID_DEVINTERFACE_PARALLEL
{ 0x97F76EF0,