繁体   English   中英

以编程方式区分Windows中的USB软盘驱动器和USB闪存驱动器

[英]Programmatically differentiating between USB Floppy Drive and USB Flash Drive in Windows

在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级别上,无法区分传统的磁盘密钥和USB软盘。 这意味着Windows本身,无法可靠地分辨出什么是什么。

你可以收集一些提示:Floppies应该:a。 有大容量存储协议CBI / CB b。 SCSI UFI

但是,在USB设备的世界里,每个人都做他们想做的事。 唯一的测试是:“它是否适用于Windows”。 Windows只是检查大小,如果它是带有可移动媒体设置的USB设备和传统的软盘大小,它会认为它是一张软盘。

不能说“真正的”软盘,但随着USB附加,没有明确的方法。

你可以使用Size属性(USB> 1.4MB),它不会有任何机会在短时间内满足1.4MB的闪存驱动器。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM