gpt4 book ai didi

c++ - C++如何判断一个驱动是软盘还是可移动闪存盘?

转载 作者:可可西里 更新时间:2023-11-01 14:20:20 24 4
gpt4 key购买 nike

windows下有没有区分软盘和闪存盘的API,C++是否可以将闪存盘链接到 A:\?非常感谢!

最佳答案

首先,您需要获取驱动器的类型 (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 参数。如果你有问题,我可以给你完整的代码。

关于c++ - C++如何判断一个驱动是软盘还是可移动闪存盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com