【问题标题】:How to get the Drive Letter for the DevicePath如何获取 DevicePath 的驱动器号
【发布时间】:2010-06-12 16:20:33
【问题描述】:

我正在使用 Win32 API。

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

你能给我解释一下吗

(我拥有的是 SP_DEVICE_INTERFACE_DETAIL_DATA 设备路径

使用这个设备路径我得到了 USB 设备的 VID 和 PID

我的设备路径如下所示

"\?\usb#vid_1a8d&pid_1000#358094020874450#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"

有什么方法可以将 DRIVE LETTER 映射到我的设备路径

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

感谢您的帮助。

【问题讨论】:

标签: c++ winapi


【解决方案1】:

我在您的其他问题中提供的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 设备)的路径。

【讨论】:

  • 他如何获取设备路径,我是从驱动器号SP_DEVICE_INTERFACE_DETAIL_DATA获取的,没有vid和pid。我得到了像"\\?\usbstor#disk&ven_usb&prod_sg_flash&rev_1.00#________________&0#{53f56307-b6bf-11d0-94f2-00a0c91e"这样的字符串
  • 我正在使用 GUID_DEVINTERFACE_DISK,所以无法获取 vid pid,但我需要从驱动器号到 vid pid。
  • GUID_DEVINTERFACE_DISK 确实是 GUID_DEVINTERFACE_USB_DEVICE 的子级。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多