从 USB 设备中的设备路径获取卷名

Getting Volume Name from Device Path in USB devices

我已经使用 Windows API 构建了一个程序来检测某些媒体(cd、usb...)的插入。程序returns设备路径:

\\?\usb#vid_vvvv&pid_pppp#aaaaaaaaaaaaaaaa#{gggggggg-gggg-gggg-gggg-gggggggggggg}

我正在使用函数 GetVolumeNameForVolumeMountPoint 通过解析报告的设备接口路径来获取卷名称 here,但似乎此功能不适用于 USB 设备。

知道在使用 USB 设备时如何从设备路径获取卷名吗?

//First get GUID
guid = GUID_DEVINTERFACE_VOLUME
//and get handle for Device information.

hDevInfo = SetupDiGetClassDevs(&guid, NULL, NULL,DIGCF_DEVICEINTERFACE|DIGCF_PRESENT); // Get device Information handle for Volume interface

//After that loop through SetupDiEnumDeviceInterfaces() and you will get the usb drive storage volume path

    for(dwIndex = 0; ;dwIndex ++) // Loop until device interfaces are found.
    { 
        ZeroMemory(&devInterfaceData, sizeof(devInterfaceData));
        devInterfaceData.cbSize = sizeof(devInterfaceData);

        if(!SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &guid,dwIndex,&devInterfaceData))// Get device Interface data.
        {
            break;
        }
        ZeroMemory(&devInfoData, sizeof(devInfoData));
        devInfoData.cbSize = sizeof(devInfoData);

        pDevDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)buffer;
        pDevDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);



        SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInterfaceData,pDevDetail,BUFFER_SIZE,&dwRequiredSize,&devInfoData); // SP_DEVINFO_DATA

        CM_Get_Parent(&devInstParent,devInfoData.DevInst, 0); // Get the device instance of parent. This points to USBSTOR.
        CM_Get_Device_ID(devInstParent, buf, BUFFER_SIZE,0);

nLength = strlen(pDevDetail->DevicePath);
            pDevDetail->DevicePath[nLength] = '\';
            pDevDetail->DevicePath[nLength+1] = 0;  

if(GetVolumeNameForVolumeMountPoint(pDevDetail->DevicePath, volume,BUFFER_SIZE))
            {   
//Here you will get the volume corresponding to the usb
}