如何判断驱动程序是C ++中的软盘还是可移动闪存盘?

时间:2010-02-01 09:16:48

标签: c++ windows floppy

我想知道在Windows,C ++中是否存在区分软盘和闪存盘的API 是否可以将闪存盘链接到A:\? 非常感谢!

3 个答案:

答案 0 :(得分:2)

首先,您需要获取驱动器的类型(GetDriveTypeA)。如果结果等于DRIVE_REMOVABLE,则字母驱动器将指向可移动闪存驱动器的软盘(或者可能是其他类型的可移动磁盘)。如果结果不是DRIVE_REMOVABLE,则不可能是可移动闪存驱动器。但是,从Window的角度来看,外部USB硬盘和可移动闪存盘之间没有什么区别(我认为唯一的区别是可移动闪存盘没有分区表,所以它只有一个分区 - 虽然我不太确定。)

无论如何,对于DRIVE_REMOVABLE类型,您需要查询设备的更高级属性。为了做到这一点,首先你需要像这样打开物理设备:


hDevice = CreateFileA("\\\\?\\X:", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, NULL)

如果打开成功,则需要向此设备发出DeviceIoControl命令:


STORAGE_PROPERTY_QUERY Query;
Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;

bResult = DeviceIoControl(
    hDevice, // device handle
    IOCTL_STORAGE_QUERY_PROPERTY, // info of device property
    &Query, sizeof(STORAGE_PROPERTY_QUERY), // input data buffer
    pDevDesc, pDevDesc->Size, // output data buffer
    &dwOutBytes, // out's length
    (LPOVERLAPPED)NULL
    );


如果pDevDesc-> BusType == BusTypeUsb,则X:指向可移动闪存驱动器。代码有效,但是您需要阅读DeviceIoControl的文档才能设置pDevDesc参数。如果你有问题,我可以给你整个代码。

答案 1 :(得分:0)

您可以在系统控制中的某处更改分配给驱动器的字母,因此闪存盘可以是A :.

使用OS API查询例如。磁盘的大小,应该足以区分软盘和闪存盘。

答案 2 :(得分:0)

可以将闪存盘链接到A:,但前提是您没有软盘驱动器 有关如何在程序中执行此操作的信息,请参阅Defining an MS-DOS Device Name

您可以使用驱动器号上的QueryDosDevice来确定驱动器号是否映射到软盘设备。软盘驱动器将返回“\ Device \ Floppy0”或“\ Device \ Floppy1”