Получить Volume Guid раздела EFI на Windows 2012 R2 - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь извлечь VolumeGuid из EFI-раздела . Я смог сделать это успешно на Windows 10 машине, используя запрос WMI и через код, используя C# ManagementObjectSearcher . Я создал виртуальный жесткий диск с типом раздела GPT, в котором я создал следующее: раздел восстановления, системный раздел EFI и основной раздел данных c. Ниже приведен запрос WMI, который я запускаю в powershell после монтирования виртуального жесткого диска. Я не могу извлечь то же самое на машине Windows 2012 R2 . Гид тома остальных разделов, который я могу извлечь на компьютере с Windows 2012 R2.

Пример сценария DiskPart

CREATE PARTITION PRIMARY SIZE=450 OFFSET=1024 ID=de94bba4-06d1-4d40-a16a-bfd50179d6ac
FORMAT FS=NTFS LABEL="Recovery" UNIT=4096 QUICK 
CREATE PARTITION PRIMARY SIZE=99 OFFSET=461824 ID=c12a7328-f81f-11d2-ba4b-00a0c93ec93b
FORMAT FS=FAT32 LABEL="" UNIT=512 QUICK 
CREATE PARTITION PRIMARY SIZE=129481 OFFSET=579584 ID=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
FORMAT FS=NTFS LABEL="" UNIT=4096 QUICK 

WMI Query

"Get-WmiObject -Query "SELECT * FROM Msft_Volume"  -Namespace Root/Microsoft/Windows/Storage"

В PowerShell на windows 10 я могу видеть раздел EFI, как показано ниже.

__GENUS              : 2
__CLASS              : MSFT_Volume
__SUPERCLASS         : MSFT_StorageObject
__DYNASTY            : MSFT_StorageObject
__RELPATH            : MSFT_Volume.ObjectId="{1}\\\\computer\\root/Microsoft/Windows/Storage/Providers_v2\\WSP_Volume
                       .ObjectId=\"{efe10384-2fc4-11e9-bb16-806e6f6e6963}:VO:\\\\?\\Volume{f2f37b30-47b8-4553-804d-9b14
                       f6b32e1b}\\\""
__PROPERTY_COUNT     : 18
__DERIVATION         : {MSFT_StorageObject}
__SERVER             : computer
__NAMESPACE          : Root\Microsoft\Windows\Storage
__PATH               : \\computer\Root\Microsoft\Windows\Storage:MSFT_Volume.ObjectId="{1}\\\\computer\\root/Micros
                       oft/Windows/Storage/Providers_v2\\WSP_Volume.ObjectId=\"{efe10384-2fc4-11e9-bb16-806e6f6e6963}:V
                       O:\\\\?\\Volume{f2f37b30-47b8-4553-804d-9b14f6b32e1b}\\\""
AllocationUnitSize   : 512
DedupMode            : 4
DriveLetter          :
DriveType            : 3
FileSystem           : FAT32
FileSystemLabel      :
FileSystemType       : 6
HealthStatus         : 0
ObjectId             : {1}\\computer\root/Microsoft/Windows/Storage/Providers_v2\WSP_Volume.ObjectId="{efe10384-2fc4-
                       11e9-bb16-806e6f6e6963}:VO:\\?\Volume{f2f37b30-47b8-4553-804d-9b14f6b32e1b}\"
OperationalStatus    : {2}
PassThroughClass     :
PassThroughIds       :
PassThroughNamespace :
PassThroughServer    :
Path                 : \\?\Volume{f2f37b30-47b8-4553-804d-9b14f6b32e1b}\
Size                 : 99614720
SizeRemaining        : 99613696
UniqueId             : **\\?\Volume{f2f37b30-47b8-4553-804d-9b14f6b32e1b}\**
PSComputerName       : computer

Однако приведенный выше запрос WMI не возвращает подробности для раздела EFI, когда работает на "Windows 2012 R2". Даже тот же запрос, выполняемый с использованием кода c#, не работает.

  1. Есть ли какие-либо ограничения на Windows 2012 R2, которые не позволяют отображать сведения о разделе EFI?
  2. Есть ли другой способ извлечь guid тома раздела EFI?
  3. В настоящее время мне пришлось назначить букву диска разделу EFI, чтобы прочитать его, я бы предпочел использовать \? Синтаксис \ Volume {guid}, чтобы открыть диск и прочитать его программно, чтобы избежать ненужного назначения буквы диска.

Пожалуйста, предложите.

...