我使用Windows API构建了一个程序,可以检测某些媒体的插入(cd,usb ...)。程序返回设备路径:
\\\\?\\usb#vid_vvvv&pid_pppp#aaaaaaaaaaaaaaaa#{gggggggg-gggg-gggg-gggg-gggggggggggg}
我使用函数GetVolumeNameForVolumeMountPoint
通过解析设备接口路径here来获取卷名,但似乎此功能对USB设备不起作用。
如果使用USB设备,如何从设备路径获取卷名?
答案 0 :(得分:3)
//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
}