【问题标题】:Programmatically differentiating between USB Floppy Drive and USB Flash Drive in Windows在 Windows 中以编程方式区分 USB 软盘驱动器和 USB 闪存驱动器
【发布时间】:2009-11-25 14:07:30
【问题描述】:

在 Windows (XP-7) 上,是否有可靠的方法以编程方式区分 C++ 中的 USB 软盘驱动器和 USB 闪存驱动器?

目前,我正在使用 WMI 在检测到新的 Win32_LogicalDisk 实例时获取更新,然后使用 LogicalDisk 对象的 DriveType 属性来确定基本类型。这很好用,除了软盘驱动器和 USB 闪存驱动器都是 DriveType DRIVE_REMOVABLE,因此为了区分它们(软盘与闪存),我使用 IOCTL_STORAGE_GET_HOTPLUG_INFO 接口来确定设备是否可热插拔,并且正在研究这意味着它是闪存驱动器而不是软盘的主体。再一次,我认为这在内部软盘驱动器的情况下非常有效(如果效率有点低,使用 WDK API 和 WMI 来获取信息),但不幸的是 USB 软盘驱动器在很多时候也是热插拔的,所以有我可以看到,没有明确的方法可以区分闪存和 USB 软盘驱动器。我知道有一些属性可能起作用,比如检查它是否映射到保留驱动器 A: 或 B(编辑:仅当机器肯定有软盘驱动器时才相关 - 请参阅 MS-KB: How to change drive letter assignments in Windows XP),或看着描述,但我真的想要更可靠的东西。

对不起,解释太长了,但只是想清楚一点!谢谢

【问题讨论】:

  • A: 和 B: 为软盘保留?来源?
  • 我是从MS-KB:How to change drive letter assignments in Windows XP 那里得到的,这是他们的措辞,但正如它也指出的那样,如果机器没有软盘驱动器,那么它们可以用于其他驱动器,因此可以说它是用词不当,当然也不能表明该驱动器是否是软盘驱动器。我将改写问题以使其更清楚。
  • 啊,从用户的角度来看,当您手动更改驱动器号时。有道理,我是从操作系统的角度思考的。

标签: c++ wmi usb wdk floppy


【解决方案1】:

您尝试过 Win32_LogicalDisk.MediaType 吗?它具有针对软盘的特定枚举。确保在驱动器中没有磁盘时尝试它。

【讨论】:

  • 万一其他人需要这个,我的测试发现,当没有媒体存在时,它确实正确返回了一个近似的媒体类型(对于 USB 软盘与闪存驱动器来说肯定足够好),但这不是保证 - 来自docs:“Win32_LogicalDisk.Media 类型:当前存在于逻辑驱动器中的媒体类型。此值将是 Winioctl.h 中定义的 MEDIA_TYPE 枚举的值之一。对于可移动设备,该值可能不准确如果当前驱动器中没有媒体,则驱动器。"
  • 当然,“驱动器中没有媒体”的情况意味着它是一个媒体加载驱动器,因此不是 USB 闪存驱动器。
  • 见下面我的回复。此外,许多 USB 闪存盘将开始声明自己为“可移动媒体”并以“驱动器中没有媒体”开头(一旦准备好接受命令,就会发出插入媒体的信号)
【解决方案2】:

在 USB 级别上,无法区分传统的 Disk on Key 和 USB 软盘。这意味着 windows 本身无法可靠地分辨出什么是什么。

您可以收集一些提示: 软盘应该: 一种。拥有海量存储协议 CBI/CB 湾。 SCSI UFI

但是,在 USB 设备的世界中,每个人都可以为所欲为。唯一的测试是:“它是否适用于 Windows”。 Windows 只是检查大小,如果它是带有可移动媒体集和传统软盘大小的 USB 设备,它会认为它是软盘。

不能说“真正的”软盘,但是连接了 USB,没有确定的方法。

【讨论】:

    【解决方案3】:

    你可以使用 Size 属性(USB > 1.4MB),这并不意味着很快就会遇到 1.4MB 的闪存驱动器。

    【讨论】:

    • 最好是 2.88 MB,尽管我相信软盘格式在日本以外并不常见。
    • 如果所有的 Zip 驱动器(最高支持 750MB)也不被认为是软盘,我不会这样做。
    【解决方案4】:

    要检查的明显属性是IOCTL_DISK_GET_DRIVE_GEOMETRY。这让你(除其他外)MEDIA_TYPE。除了RemovableMediaFixedMedia 之外的任何东西都是软盘。

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2017-01-27
      • 2012-08-07
      • 2021-03-22
      • 2010-10-03
      相关资源
      最近更新 更多