-
Доброго времени суток!
Открыть устройство через CreateFile('\\.\PhysicalDrive<номер>...) с конкретным номером для дальнейшей работы с ним через ReadFile/WrteFile проблем не составляет. Но дальше этого не приходилось углубляться. Ведь кроме винтов в системе могут быть подключены, к примеру, карты памяти и/или виртуальные диски .vhd (в моем случае, прочая экзотика исключена). Возник вопрос - как определить что за устройство под указанным номером мы открываем? Мне нужно составить список устройств для выбора пользователем с каким устройством работать. К примеру:
1 - HDD #1 (объем такой-то) 2 - HDD #2 (объем такой-то) 3 - виртуальный диск (объем такой-то) 4 - карта памяти (объем такой-то) 5 - USB-флэш (объем такой-то)
Порылся в добрых ламповых IOCTL-кодах - по коду IOCTL_STORAGE_GET_MEDIA_TYPES_EX в возвращаемой структуре есть поле типа девайсов, где для него определено море всяческих типов (включая виртуальные диски и mass storage). Но для винтов, USB-флэшек и подключенных vhd возращает всегда FILE_DEVICE_DISK (0х7). А по IOCTL_STORAGE_GET_MEDIA_TYPES в структуре DISK_GEOMETRY винт/vhd имеет тип 12 (FixedMedia), а флэшка - 11 (RemovableMedia), что мало информативно.
1) Есть еще какие-то способы получения более подробной информации? 2) Как программно можно распознать примонтирован ли vhd в системе по пути и имени файла?
-
Никогда такого не делал, но отвечу из общих соображений - искать нужно на другом уровне абстракции. Если в Device manager-е Вы видите в разделе "диски" нужную информацию, можно попробовать использовать SetupDI API. Но вообще, как я понимаю, идея виртуальных дисков именно в том, чтобы для пользователя они выглядели как физические, поэтому, вполне вероятно, что решение проблемы может быть не очень простым.
-
В SetupDI API уже параллельно копаюсь, но для меня там пока темный лес - ни разу не приходилось сталкиваться.
-
Так а в Device mabager-то виртуальный диск как выглядит?
-
Как "Msft Virtual Disk SCSI Disk Device" в разделе дисковых накопителей.
-
https://yadi.sk/d/y_A6Xqb_xr2T2wВот код определяет USB диски, всё что не USB то виртуальный диск. > 4 - карта памяти (объем такой-то) > 5 - USB-флэш (объем такой-то)
Эти только геометрическими размерами отличаются логически или цифровые интерфейсы у них одинаковые и вы их не отличите. Вы можете попробовать считать 0 сектор если не читается то это картиридер либо сломаная флешка
|