获取有关插入的USB设备的信息

时间:2011-08-25 22:28:33

标签: c++ winapi hardware-id

我已设法检查是否通过WM_DEVICECHANGE插入了USB设备。

case WM_DEVICECHANGE:
{
    PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;

    switch(wParam)
    {
        case DBT_DEVICEARRIVAL:
        {
            if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
            {
                  // Get Information about the usb device inserted
            }
            return TRUE;
        }
    }
}

现在,我想确保通过匹配某种ID来插入正确的USB设备,并且我还需要检查USB设备上的可用空间。

我能说的一个解决方案是迭代所有硬件设备,直到一个与信息匹配。

还有其他方法可以在插入时识别设备吗?

1 个答案:

答案 0 :(得分:3)

使用DBT_DEVTYP_DEVICEINTERFACE消息发送VID和PID。然后,您可以通过SetupDiGetClassDevs / SetupDiEnumDeviceInfo / SetupDiGetDeviceInstanceId / SetupDiGetDeviceRegistryProperty查看设备驱动程序以获取更多信息。

连接时无需提供媒体。考虑一下读卡器,它会注册驱动器号,但是在插入卡并且Windows生成GUID_IO_MEDIA_ARRIVAL device event之前,驱动器将不会准备就绪。然后,您可以在驱动器号上调用GetDiskFreeSpaceEx以获得可用空间。