проверьте дисковод - PullRequest
3 голосов
/ 01 июля 2010

Чтобы получить съемные диски, я использовал GetDriveType () функция

Можно ли проверить, является ли дисковод гибких дисков или нет?

Пожалуйста, дайте мне знать ваши предложения по этому ...

Спасибо за любую помощь

Ответы [ 3 ]

4 голосов
/ 01 июля 2010

Внутренне 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.Я считаю наиболее эффективным и простым способом использования функции NtQueryVolumeInformationFile из ntdll.dll.В разделе Получить информацию о результате работы дисков в Windows7 - 32-битная система вы найдете пример использования этого API.

ОБНОВЛЕНИЕ: Вы можете использовать NtQueryVolumeInformationFileработать напрямую без предыдущих вызовов IOCTL_STORAGE_GET_DEVICE_NUMBER и IOCTL_STORAGE_QUERY_PROPERTY, которые были вызваны в примере по другим причинам.

ОБНОВЛЕНО 2: Кстати, использование GetDriveType для проверкидиск удаляется небезопасно.У меня есть много съемных аппаратных средств, где GetDriveType показывает диск как несъемный, но у флагов характеристик есть установленный FILE_REMOVABLE_MEDIA бит.Использование SetupDiGetDeviceRegistryProperty с SPDRP_REMOVAL_POLICY также безопасно.В последнем случае вы должны проверить на CM_REMOVAL_POLICY_EXPECT_SURPRISE_REMOVAL или CM_REMOVAL_POLICY_EXPECT_ORDERLY_REMOVAL, как я делаю это в примере Получить информацию о результате на дисках в windows7 - 32-битной системе .

2 голосов
/ 01 июля 2010

Это возможно - взгляните на следующую статью базы знаний Майкрософт .

0 голосов
/ 01 июля 2010

Лучший шанс, который я знаю, это проверить, является ли буква диска A: или B :. Я не пытался подключить три USB-дисковода гибких дисков к одному ПК, поэтому я не знаю, может ли дискета иметь более высокую букву. Возможны и другие причуды. Но этот тест почти достаточно надежен для некоторых целей.

...