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



我使用Windows API构建了一个程序,用于检测某些媒体(cd, usb…)的插入。程序返回设备路径:

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

我使用GetVolumeNameForVolumeMountPoint函数通过解析这里报告的设备接口路径来获取卷名,但似乎此功能不适用于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
}