4

我想知道windows,C++中是否有区分软盘和闪存盘的API以及是否可以将闪存盘链接到A:\?非常感谢!</p>

4

3 回答 3

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 参数。如果你有问题,我可以给你整个代码。

于 2010-02-01T14:05:58.113 回答
0

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

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

于 2010-02-01T09:55:47.967 回答
0

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

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

于 2010-02-01T09:27:22.013 回答