Как определить, является ли драйвер дискетой или съемной флешкой в ​​C ++? - PullRequest
4 голосов
/ 01 февраля 2010

Интересно, есть ли API для различения дискет и флешек в Windows, C ++? И можно ли привязать флешку к A: \? Большое спасибо 100

Ответы [ 3 ]

2 голосов
/ 01 февраля 2010

Во-первых, вам нужно получить тип диска (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. Если у вас есть проблемы с этим, я могу дать вам весь код.

0 голосов
/ 01 февраля 2010

Можно подключить флэш-диск к A :, но только если у вас нет дисководов.
См. Определение имени устройства MS-DOS для получения информации о том, как сделать это в программе.

Вы можете определить, отображается ли буква диска на дискету, используя QueryDosDevice в букве диска. Дисковод гибких дисков возвратит "\ Device \ Floppy0" или "\ Device \ Floppy1"

0 голосов
/ 01 февраля 2010

Вы можете изменить буквы, назначенные вашим дискам где-нибудь в System Control, так что флэш-диск может быть A:.

Используйте OS API для запроса, например. размер диска, которого должно быть достаточно для различения дискеты и флэш-диска.

...