【问题标题】:How to determine the type of a drive?如何确定驱动器的类型?
【发布时间】:2011-05-06 08:44:46
【问题描述】:

我正在尝试找出特定驱动器的设备类型。我也想知道如何在 Mac OS X 和 Linux 上做到这一点,但现在如果这太多了,Windows 解决方案就足够了。

所以,假设我有一个驱动器 H。我可以通过 Win32 API 函数 GetDriveType() 确定该设备是否是可移动驱动器。我也可以在 Mac OS X 上找到它。

但我似乎无法以可靠的方式找到设备类型。比如,它是 USB 闪存驱动器、便携式硬盘驱动器 (PHD) 等吗?

浏览 Windows 中的注册表,我似乎也找不到太多信息。如果可能的话,我更愿意为此使用一些 API,但如果需要,我会使用注册表。

现在,我感兴趣的是.. 驱动器是闪存驱动器(因此我可以在我的程序中显示 USB 闪存驱动器图标)还是便携式硬盘驱动器(因此,将显示 PHD 图标) .

【问题讨论】:

    标签: c++ windows


    【解决方案1】:

    对于 Windows,SHGetFileInfo 似乎可以解决问题。也许您可以在驱动器的根文件夹中调用它?见http://msdn.microsoft.com/en-us/library/bb762179(VS.85).aspx

    SH... 功能通常是资源管理器使用的功能,因此(假设它有效)这应该会为您提供在 Windows 资源管理器中看到的确切图标...

    【讨论】:

    • 谢谢兄弟,但问题是要以某种方式确定它......所以我可以使用自定义图标。我正在开发的应用程序不像资源管理器,但它在一个对话框中显示音量信息。奇怪的是,虽然资源管理器确实为 USB 闪存驱动器和 phd 使用了不同的图标,但我没有看到任何 win32 api 函数来确定它。
    【解决方案2】:

    device class 是您想要的吗?如果是这样,您可以尝试libusbavailable for win32)。使用libusb_get_device_descriptor函数。

    【讨论】:

      【解决方案3】:

      您可能想查看DeviceIoControlIOCTL_STORAGE_QUERY_PROPERTY。例如,您可以通过指定StorageDeviceProperty 并查看BusType 成员来判断设备是否为USB。 “设备类型”成员也很有趣。

      如果您不介意放弃 XP 支持,我相信 Virtual Disk Service 可以提供此类信息。

      【讨论】:

      • 感谢 asveikau 的提示,但问题是它是什么类型的 USB 设备.. 不是它是否在 USB 接口上。我已经确定安装的卷是否确实是 USB 设备。现在,查看我得到的 invo,我有类似的东西: VendorId: "FLASH" ProductId: "Drive AU_USB20" 或者,对于 PHD: VendorId: "SPCC" ProductId: "PHD" 但这些是(我相信)供应商具体的,所以它们似乎不是确定我要找出什么的可靠方法
      【解决方案4】:

      使用前面提到的 IOCTL_STORAGE_QUERY_PROPERTY 控制代码来检索STORAGE_DEVICE_DESCRIPTOR 结构。结构的一部分是STORAGE_BUS_TYPE 枚举,它将告诉您驱动器所在的总线(USB、1394、RAID、ATAPI、SCSI 等)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-22
        • 2016-07-10
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        相关资源
        最近更新 更多