在 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:如何更改 Windows XP 中的驱动器盘符分配),或者查看描述,但我真的想要更可靠的东西。

抱歉解释太长,但只是想弄清楚!谢谢

有帮助吗?

解决方案

您尝试过 Win32_LogicalDisk.MediaType 吗?它有软盘的特定枚举。确保在驱动器中没有磁盘的情况下尝试该操作。

其他提示

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

您可以收集一些提示:软盘应该:A。具有质量存储协议CBI/CB b。SCSI UFI

但是,在 USB 设备的世界里,每个人都可以为所欲为。唯一的测试是:“它在 Windows 上运行吗”。Windows 仅检查大小,如果它是具有可移动介质集且具有传统软盘大小的 USB 设备,它将认为它是软盘。

不能说“真正的”软盘,但对于连接的 USB,没有明确的方法。

您可以使用“大小”属性(USB > 1.4MB),但短期内不太可能遇到 1.4MB 闪存驱动器。

要检查的明显属性是 IOCTL_DISK_GET_DRIVE_GEOMETRY. 。这让你(除其他外) MEDIA_TYPE. 。除了 RemovableMediaFixedMedia 是一张软盘。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top