1

我已经设法检查是否通过WM_DEVICECHANGE.

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 设备上的可用空间。

我可以告诉的一种解决方案是遍历所有硬件设备,直到其中一个与信息匹配。

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

4

1 回答 1

4

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

连接时媒体不需要可用。考虑一下读卡器,它会注册驱动器号,但在您插入卡并且 Windows 生成GUID_IO_MEDIA_ARRIVAL 设备事件之前,驱动器不会准备好。然后,您可以在驱动器号上调用 GetDiskFreeSpaceEx 以获取可用空间。

于 2011-08-25T23:04:05.360 回答