Связать устройство CDRom с буквой диска - PullRequest
0 голосов
/ 15 июня 2019

Я пишу программу, которая создает образы дисков для привода CD-ROM. Мне нужно создать полный образ диска, а не просто образ тома, но мне нужно имя тома, чтобы я мог соответствующим образом назвать полученный файл.

В основном мне нужно это:

image

Я знаю, что мой привод CD-ROM - это CD-ROM 0, и мне нужно знать, какие там тома.

Я пытался запросить WMI из PowerShell, но безуспешно.

Get-WMIObject -Class Win32_LogicalDisk дает мне все буквы дисков и метки тома.

Get-WmiObject Win32_DiskPartition дает мне список разделов без каких-либо меток / букв.

Get-WMIObject -Class Win32_PhysicalMedia - это адрес устройства (?), Например \\.\CDROM0.

Get-WMIObject -Class Win32_DiskDrivePhysicalMedia бесполезен, просто в нем есть жесткие диски, нет CD-ROM.

Чего мне не хватает?

Я хочу, чтобы у \\.\CDROM0 был том с буквой D и любым другим ярлыком. Есть ли способ сделать это? Может быть, некоторые функции kernel32?

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Согласно некоторым предыдущим сведениям, имена устройств нескольких CD-ROM могут быть изменены после перезагрузки (я их не тестировал).

Ссылка: Первое устройство CD-ROM: CdRom0 или CdRom1?

Поэтому я рекомендую сопоставлять буквы дисков с GUID CD-ROM.

  1. Получите GUID каждого CD-ROM через GetVolumeNameForVolumeMountPoint

    GUID, такой как: VolumeName: \? \ Volume {f3b89248-8457-1ae3-9f8c-806e6f6b6923} \

    Отсюда вы можете использовать подстроку или регулярное выражение, чтобы вырезать часть, содержащую GUID.

  2. Получить букву диска CD-ROM через GetLogicalDrives и GetDriveType.

  3. Получите GUID каждой буквы дисковода CD-ROM, полученной на шаге 2, сравните GUID с GUID из GetVolumeNameforVolumeMountPoint на шаге 1, и два идентификатора GUID совпадут, если они совпадают.

0 голосов
/ 15 июня 2019

Класс WMI Win32_LogicalDisk имеет свойство VolumeName, которое дает имя вставленного диска (если он есть). Это соответствует тому, что вы выделили на скриншоте.

...