Невозможно установить DeviceElements для BCD Windows с WMI
Я пытаюсь программно создать Windows 7 BCD Store, используя VBScript. Создание самого магазина, BootMgr и загрузчика ОС, кажется, идет гладко, как и заполнение большинства элементов для каждого из объектов. Я сталкиваюсь с проблемами при заполнении устройства и элементов устройства. Вот код, который работает:
Const BootMgrId = "{9dea862c-5cdd-4e70-acc1-f32b344d4795}"
BootLdrId = Left(CreateObject("Scriptlet.TypeLib").Guid,38)
Set objStoreClass = GetObject("winmgmts:{(Backup,Restore)}\\.\root\wmi:BcdStore")
objStoreClass.CreateStore "m:\boot\BCD", objStore
objStore.CreateObject BootMgrId, &h10200002, objBootMgr
objStore.CreateObject BootLdrId, &h10200003, objBootLdr
objBootLdr.SetStringElement &h12000002, "\windows\system32\boot\winload.exe"
objBootLdr.SetStringElement &h12000004, "DiskWipe"
objBootLdr.SetStringElement &h22000002, "\windows"
objBootLdr.SetBooleanElement &h26000022, True
Код, с которым у меня возникают проблемы:
objBootMgr.SetPartitionDeviceElement &h11000001, 2, "", "m:"
objBootLdr.SetPartitionDeviceElement &h11000001, 2, "", "m:"
objBootLdr.SetPartitionDeviceElement &h21000001, 2, "", "m:"
Я попробовал несколько вариантов пути к разделу в конце оператора, чтобы включить DeviceId раздела, как сообщается из win32_Volume, старый путь ARC в стиле boot.ini, "partition=" и другой синтаксис, который, кажется, работает в bcdedit.
Пара заметок. Конечная цель - использовать другой раздел на том же физическом диске. Я не уверен, что SetPartitionDeviceElement является правильным методом для использования (кажется, что это исключительно для VHS). Если вместо этого я использую:
objBootMgr.SetDeviceElement &h11000001, 1, ""
objBootLdr.SetDeviceElement &h11000001, 1, ""
objBootLdr.SetDeviceElement &h21000001, 1, ""
элементы device и osdevice, кажется, заполняются правильно и отражают текущий загрузочный раздел, но когда я изменяю активный раздел на раздел, этот новый BCD включается и перезагружается, хотя, к счастью, без ошибок, он не загружается. Не удивительно, поскольку этот метод не позволяет задавать конкретный раздел. Я могу заставить его работать, используя bcdedit с
bcdedit -store m:\boot\bcd -set {bootmgr} device partition=m:
а также
bcdedit -store m:\boot\bcd -set %guid% osdevice partition=m:
bcdedit -store m:\boot\bcd -set %guid% device partition=m:
где %guid% - это GUID загрузчика ОС.
Полезная информация об этом довольно тонкая на земле. Я был по уши на страницах MSDN провайдера BCD WMI и старого документа MS Word на BCD. Я также обнаружил, что редактор Visual BCD полезен при сортировке типов объектов и элементов, но я действительно застрял на этом. Кто-нибудь?
1 ответ
ХОРОШО. Я понял это. Возможны следующие варианты:
objBootMgr.SetPartitionDeviceElement &h11000001, 2, "", "\Device\Harddisk0\Partition3"
для диска / раздела зависит от синтаксиса, или
objBootMgr.SetPartitionDeviceElement &h11000001, 2, "", "\Device\HarddiskVolume3"
для дискового независимого синтаксиса тома.