检查软盘驱动器

时间:2010-07-01 08:53:52

标签: c++ winapi msdn

要获取可移动驱动器,我使用了 GetDriveType ()函数

是否可以检查驱动器是否为软盘驱动器?

请告诉我你对此的建议......

谢谢你的任何帮助

3 个答案:

答案 0 :(得分:4)

内部Microsoft Windows为每个设备保留如此命名的特征标志(在wdm.h中定义)。如果对应驱动器号的设备具有标志FILE_FLOPPY_DISKETTE,则驱动器是软盘驱动器:

//
// Define the various device characteristics flags (defined in wdm.h)
//
#define FILE_REMOVABLE_MEDIA                    0x00000001
#define FILE_READ_ONLY_DEVICE                   0x00000002
#define FILE_FLOPPY_DISKETTE                    0x00000004
#define FILE_WRITE_ONCE_MEDIA                   0x00000008
#define FILE_REMOTE_DEVICE                      0x00000010
#define FILE_DEVICE_IS_MOUNTED                  0x00000020
#define FILE_VIRTUAL_VOLUME                     0x00000040
#define FILE_AUTOGENERATED_DEVICE_NAME          0x00000080
#define FILE_DEVICE_SECURE_OPEN                 0x00000100
#define FILE_CHARACTERISTIC_PNP_DEVICE          0x00000800
#define FILE_CHARACTERISTIC_TS_DEVICE           0x00001000
#define FILE_CHARACTERISTIC_WEBDAV_DEVICE       0x00002000

要获取驱动器的特征标志,您可以使用不同的API函数。我发现从ntdll.dll使用NtQueryVolumeInformationFile函数是一种最有效和最简单的方法。在Get information about disk drives result on windows7 - 32 bit system下,您会找到使用此API的示例。

更新:您可以直接使用NtQueryVolumeInformationFile功能而无需事先调用IOCTL_STORAGE_GET_DEVICE_NUMBERIOCTL_STORAGE_QUERY_PROPERTY,原因是其他原因。

更新2:顺便使用GetDriveType来测试驱动器是否可移除是不安全的。我有许多可移动硬件,其中GetDriveType将驱动器显示为不可移除,但特征标志已设置FILE_REMOVABLE_MEDIA位。 SetupDiGetDeviceRegistryPropertySPDRP_REMOVAL_POLICY的使用也是安全的。在最后一种情况下,您应该像我在示例Get information about disk drives result on windows7 - 32 bit system中那样测试CM_REMOVAL_POLICY_EXPECT_SURPRISE_REMOVALCM_REMOVAL_POLICY_EXPECT_ORDERLY_REMOVAL

答案 1 :(得分:2)

有可能 - 看一下以下Microsoft Knowledge Base Article

答案 2 :(得分:-1)

我知道的最好的机会是检查驱动器号是A:还是B:。我没有尝试将三个USB软盘驱动器连接到一台PC,所以我不知道软盘是否可能有更高的驱动器号。其他怪癖也是可能的。但是这个测试几乎可以用于某些目的。