如何获取DevicePath的驱动器号

时间:2010-06-08 09:00:31

标签: c++ winapi

我正在使用Win32 API。

真的我不明白如何获取USB记忆棒的DevicePath驱动器号。

你能解释一下吗

(我所拥有的是SP_DEVICE_INTERFACE_DETAIL_DATA DevicePath

使用此设备路径获取USB设备的VID和PID

我的设备路径如下所示

“\ \ USB#vid_1a8d&安培; pid_1000#358094020874450#{a5dcbf10-6530-11d2-901f-00c04fb951ed}”

有没有办法将DRIVE LETTER映射到我的DEVICE PATH

所以请帮我把驱动器号映射到DevicePath)

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

我在您的其他问题中提供的link为您提供了执行此操作所需的所有信息。在半伪代码中:

DiskDevice = CreateFile(DiskDevicePath);
DiskDeviceNumber = DeviceIoControl(DiskDevice, IOCTL_STORAGE_GET_DEVICE_NUMBER);
for each VolumeDevicePath in GetLogicalDriveStrings
    VolumeDevice = CreateFile(VolumeDevicePath);
    VolumeDeviceNumber = DeviceIoControl(VolumeDevice, IOCTL_STORAGE_GET_DEVICE_NUMBER);
    if(VolumeDeviceNumber == DiskDeviceNumber)
        // volume (i.e. "G:") corresponding to VolumeDevicePath resides on disk (i.e. "XYZ USB Storage Device") corresponding to DiskDevicePath

我不是100%肯定(已经有一段时间了),但我认为磁盘设备(GUID_DEVINTERFACE_DISK)是USB设备的子设备(GUID_DEVINTERFACE_USB_DEVICE)。无论如何,我认为DiskDevicePath需要是磁盘设备的路径(而不是USB设备)。

答案 1 :(得分:1)

看看这个,也许它会有所帮助(我认为没有一种简单的方法可以做到这一点......)

http://msdn.microsoft.com/en-us/library/cc542456(VS.85).aspx