Но перед тем как начать описание интерфейса и возможностей новой операционной системы, рассмотрим несколько вопросов, которые могут быть вам интересны.
Настройка загрузочного меню
Вы, наверное, уже заметили, что операционная система Windows Vista обзавелась не только новым интерфейсом, но и новым загрузочным меню (рис. 2.8).
Рис. 2.8. Новое загрузочное меню Windows Vista
Если вы устанавливали Windows Vista на компьютер, уже имеющий несколько других установленных операционных систем, то не ужасайтесь – к ним по-прежнему можно будет получить доступ, если выбрать элемент Earlier version of Windows загрузочного меню. После выбора данного элемента будет выполнена обработка файла boot. ini, который как раз и содержал ранее загрузочное меню. Сама же операционная система Windows Vista больше не использует файл boot. ini и все сведения о загрузочном меню хранит в реестре. Единственным способом получения доступа к ним является программа командной строки bcdedit.ехе. С ее помощью вы можете как редактировать текущие элементы загрузочного меню, так и создавать новые. Особенно это необходимо при установке на компьютер нескольких версий операционной системы Windows Vista – в этом случае в списке загрузочного меню все они будут иметь название Microsoft Windows, и будет довольно трудно понять, какая именно версия операционной системы скрывается за конкретным пунктом списка загрузочного меню. Программа bcdedit.exe В качестве примера рассмотрим некоторые команды bcdedit.ехе, которые могут вам понадобиться. Например, если вы просто введете в командной строке cmd.ехе строку bcdedit, то сможете просмотреть текущее содержимое загрузочного меню Windows (для примера выводимых данных посмотрите листинг 2.1). При этом следует заметить, что вы сможете воспользоваться программой bcdedit, только если зайдете в систему под учетной записью Администратор. В противном случае вы не сможете запустить программу bcdedit. Чтобы заново не входить в систему под учетной записью администратора, можно просто запустить командный интерпретатор cmd.ехе от его имени. Для этого достаточно воспользоваться командой runas /user: administrator cmd.ехе. Система попросит вас ввести пароль для учетной записи администратора, после чего отобразится окно cmd.ехе, и вы сможете воспользоваться программой bcdedit.ехе.
Листинг 2.1. Пример вывода содержимого загрузочного меню командой bcdedit Windows Boot Manager
–
identifier {bootmgr}
device partition=D:
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {default}
resumeobject {50c73d4d-e6b3-11da-bc73-d30cdb1ce216}
displayorder {ntldr}
{default}
{current}
toolsdisplayorder {memdiag}
timeout 30
Windows Legacy OS Loader
–
identifier {ntldr}
device partition=D:
path \ntldr
description Earlier version of Windows
Windows Boot Loader
–
identifier {default}
device partition=F:
path \Windows\system32\winload.exe
description Microsoft Windows
locale en-US
inherit {bootloadersettings}
osdevice partition=F:
systemroot \Windows
resumeobject {50c73d4d-e6b3-11da-bc73-d30cdb1ce216}
nx OptIn
Windows Boot Loader
–
identifier {current}
device partition=C:
path \Windows\system32\winload.exe
description Windows (TM) Vista Ultimate (recovered)
osdevice partition=C:
systemroot \Windows
resumeobject {5f951ca4-31a7-11db-8615-806e6f6e6963}Как можно заметить из листинга 2.1, сначала bcdedit отображает сведения о настройке самого загрузочного меню (блок данных Windows Boot Manager), а потом сведения об элементах этого меню. Причем сведения об элементе списка, с помощью которого можно отобразить меню для выбора ранее установленных операционных систем (то есть для загрузки содержимого файла boot. ini), отображаются первыми (блок данных Windows Legacy OS Loader), а потом уже сведения об остальных элементах меню (блоки данных под заголовками Windows Boot Loader).
Отображаемые сведения о загрузочных разделах
Каждый из этих блоков данных может содержать следующие наиболее интересные сведения.
• identifier – определяет идентификатор элемента загрузочного меню и может принимать следующие значения:
– {current} – говорит о том, что операционная система, определяемая этим элементом меню, загружена в данный момент;
– {default} – означает, что операционная система, определяемая этим элементом меню, загружается по умолчанию;
– {ntldr} – определяет элемент загрузочного меню, с помощью которого можно загрузить содержимое файла boot. ini (фактически определяет название файла ntldr, расположенного на системном диске, который раньше применялся в качестве загрузчика);
– {bootmgr} – данный идентификатор говорит о том, что этот блок данных определяет параметры самого загрузочного меню (фактически определяет название файла bootmgr, расположенного на системном диске, который применяется в качестве загрузчика для операционной системы Windows Vista);
– {memdiag} – определяет элемент загрузочного меню, с помощью которого можно выполнить диагностику состояния оперативной памяти компьютера;
– {CLSID-номер элемента меню} – данный идентификатор присваивается элементу загрузочного меню, если ни один из предыдущих идентификаторов ему не подходит.
Примечание
Это не полный список доступных значений поля identifier. Чтобы просмотреть полный список, воспользуйтесь командой bcdedit —? ID.
• device – определяет раздел диска (букву диска), который содержит загрузочные файлы операционной системы, запускаемой с помощью данного элемента меню.
• path – если device определял раздел диска, который содержит файлы операционной системы, то это поле определяет остальной путь к загрузчику операционной системы Windows Vista (в Windows Vista он называется winload.ехе) или к старому загрузчику ntldr.
• description – определяет название элемента загрузочного меню.
• osdevice – определяет раздел диска (букву диска), который включает в себя системные файлы операционной системы. Как правило, в Windows Vista данное поле соответствует полю device.
• systemroot – определяет папку, содержащую системные файлы операционной системы.
• locale – определяет язык операционной системы.
• displayorder – определяет порядок расположения элементов загрузочного меню и присутствует только в блоке данных Windows Boot Manager. Обратите внимание, что порядок расположения определяется на основе поля identifier.
• timeout – определяет количество секунд, в течение которых система будет ждать от пользователя каких-либо действий (во время отображения загрузочного меню). После истечения данного промежутка времени будет загружена операционная система по умолчанию.
• nx – определяет используемый операционной системой вариант работы механизма DEP.
Основные команды программы bcdedit.exe
Теперь, когда вы научились разбираться в выводе команды bcdedit и определять текущие параметры загрузочного меню, рассмотрим другие ее команды.
Экспорт и импорт загрузочного меню. Самой первой командой, которой желательно воспользоваться, является команда bcdedit /export <путь к файлу и его название без расширениях С ее помощью вы создаете копию загрузочного меню, которую потом сможете использовать для его восстановления, если нечаянно испортите текущее загрузочное меню. После выполнения экспортирования загрузочного меню в указанном вами каталоге будут созданы два файла – один с расширением LOG, а другой вообще без расширения. Файл без расширения как раз и хранит сведения о загрузочном меню. По сути, данный файл является просто разделом реестра и с помощью команды Файл → Загрузить куст редактора реестра regedit.ехе вы сможете загрузить его в реестр и просмотреть содержимое.
Для восстановления загрузочного меню из экспортированного файла достаточно воспользоваться командой bcdedit /import <путь к файлу и его название без расширениях
Переименование элементов загрузочного меню. Итак, мы хотели переименовать какой-нибудь элемент загрузочного меню. Для этого нужно воспользоваться командой вида bcdedit /set [содержимое поля identifier данного элемента меню] description <новое название элемента меню>. Если вы не укажете содержимое поля identifier, то будет переименован элемент меню, имеющий значение {current} поля identifier. Например, bcdedit /set description «Vista Build 5384» или bcdedit /set {default} description «Vista Build 5384 (TEST)».
Обратите внимание на то, что в предыдущей команде после содержимого поля identifier идет ключевое слово description. Если еще раз перечитать описание вывода команды bcdedit, то можно заметить, что такое же слово встречается среди полей блоков данных (см. листинг 2.1). Это не просто совпадение – именно название поля и нужно указывать в данной команде. Например, вы можете изменить значение поля systemroot с помощью команды bcdedit /set "содержимое поля identifier данного элемента меню] systemroot <новый каталог, содержащий файлы Windows>.
Изменение запускаемой по умолчанию операционной системы и таймаута. Еще одной возможностью, которая может вам пригодиться, является изменение операционной системы, запускаемой по умолчанию. Для этого нужно воспользоваться командой bcdedit /default <содержимое поля identifier данного элемента меню>. Например, команда bcdedit /default {ntldr} устанавливает по умолчанию загрузку файла boot. ini для выбора операционной системы более ранней версии, чем Windows Vista.
Можно также изменить время ожидания выбора операционной системы пользователем (содержимое поля timeout блока данных Windows Boot Manager). Для этого нужно воспользоваться командой bcdedit /timeout <новое время ожидания в секундах>.
Удаление и создание элемента загрузочного меню. Если же вы хотите удалить какой-либо элемент загрузочного меню, то это можно сделать с помощью команды bcdedit /delete <содержимое поля identifier данного элемента меню>. Например, чтобы удалить элемент Microsoft Windows из загрузочного меню (см. листинг 2.1), нужно воспользоваться командой bcdedit /delete {default}.
Естественно, что, кроме удаления элемента загрузочного меню, вы можете создать свой элемент меню. Проще всего для этого выполнить копирование уже существующего элемента меню. Чтобы это сделать, нужно воспользоваться командой bcdedit /сору <содержимое поля identifier элемента меню, который вы будете копировать> /d <значение поля description нового элемента загрузочного меню>.
Изменение порядка загрузочного меню. И последней командой, которую мы рассмотрим, будет команда изменения порядка отображения элементов загрузочного меню Windows Vista: bcdedit /displayorder <дальнейшие параметры>. Она имеет несколько разновидностей, поэтому рассмотрим каждую из них отдельно.
• bcdedit /displayorder <содержимое поля identifier 1> <содержимое поля identifier 2>… <содержимое поля identifier N> – с помощью данной команды вы полностью изменяете порядок отображения элементов загрузочного меню. Например, bcdedit /displayorder {current} {default} {ntldr}.
• bcdedit /displayorder <содержимое поля identifier> /addfirst – команда перемещает на первое место загрузочного меню элемент с указанным значением поля identif ier. Например, bcdedit /displayorder {ntldr} /addf irst.
• bcdedit /displayorder <содержимое поля identifier> /addlast – перемещает на последнее место загрузочного меню элемент с указанным значением поля identifier.
• bcdedit /displayorder <содержимое поля identifier> /remove – команда удаляет из загрузочного меню элемент с указанным значением поля identifier.
Дополнительные параметры команды bcdedit.exe
В общем, вы поняли принцип работы с программой bcdedit.ехе, а теперь вкратце опишу остальные команды этой программы, которые вам могут понадобиться.
• /enum – отображает настройки элемента меню, содержимое поля identifier которого указано в параметре команды. Фактически команда выводит сведения о конкретном блоке данных, также отображаемые при вводе команды bcdedit без параметров. Однако с помощью данной команды можно просмотреть сведения о любом идентификаторе, даже если он не отображается в загрузочном меню. Например, об идентификаторе {memdiag} или {dbgsettings}.
• /create – позволяет создать новый элемент загрузочного меню.
• /toolsdisplayorder – дает возможность изменять последовательность отображения элементов нижнего загрузочного меню (по умолчанию в нем используется только один элемент – Windows Memory Diagnostic). Параметры данной команды аналогичны параметрам команды /displayorder.
Более подробную информацию о командах можно просмотреть, воспользовавшись синтаксисом вида bcdedit <команда> —?.
Примечание
На сайте компании Microsoft можно найти файл BCD.doc, содержащий описание работы с новым загрузочным меню (на английском языке). Если эта информация вам интересна, то попытайтесь воспользоваться ссылкой http://download.microsoft.com/download/a/f/7/af7777e5-7dcd-4800-8a0a-b18336565f5b/BCD.doc.
Классы репозитария CIM
Работать с новым загрузочным меню операционной системы Windows Vista можно и с помощью набора новых классов, хранящихся в пространстве имен \ \. \root\wmi. Непосредственно к свойствам описанных ниже классов обратиться нельзя, однако можно выполнять методы данных классов – результаты некоторых из них возвращают экземпляры на другие классы, свойства которых разрешено модифицировать.
Примечание
В книге предполагается, что вы уже имеете представление о WMI и репозитарии CIM. Если это не так, то в приложении 2 описаны некоторые примеры работы с пространствами имен, классами и их свойствами и методами.
Класс BcdStore
Данный класс представляет собой коллекцию объектов загрузочного меню. Он поддерживает одно свойство, доступное только для чтения, – FilePath, тип: string. Свойство является ключевым. Оно уникально идентифицирует путь к объекту.
Класс также поддерживает следующие методы.
• CopyObject – копирует объект.
Входящие параметры.
– Строковый параметр, определяющий файл загрузочного меню.
– Строковый параметр, определяющий идентификатор загрузочного меню.
– Флаг копирования. Имеет тип uint32. Если значение флага равно 1, то будет создан новый идентификатор для копируемого объекта. Если значение флага равно 2, то существующий объект будет удален. Если же значение данного флага равно 3, то существующий объект будет удален, а создаваемому объекту будет присвоен новый идентификатор.
Возвращаемый параметр: указатель на класс BcdObject.
• CopyObjects – копирует несколько объектов.
Входящие параметры.
– Первый – строковый – параметр, определяющий файл загрузочного меню.
– Второй параметр определяет тип объекта. Он имеет тип uint32.
– Флаги копирования. Имеет тип uint32. Если значение флага равно 1, то будет создан новый идентификатор для копируемого объекта. Если значение флага равно 2, то существующий объект будет удален. Если же значение данного флага равно 3, то существующий объект будет удален, а создаваемому объекту будет присвоен новый идентификатор.
Возвращаемый параметр: строковый.
• CreateObject – создает объект.
Входящие параметры.
– Строковый параметр, определяющий идентификатор объекта.
– Второй параметр определяет тип объекта. Он имеет тип uint32.
Возвращаемый параметр: указатель на класс BcdObject.
• CreateStore – создает новую коллекцию объектов (загрузочное меню). Входящий параметр: строковый параметр, определяющий путь к файлу. Возвращаемый параметр: указатель на класс BcdStore.
• DeleteObject – удаляет объект.
Входящий параметр: строковый параметр, определяющий идентификатор объекта.
Возвращаемые параметры: нет.
• DeleteSystemStore – удаляет основную коллекцию объектов загрузочного меню.
Входящие параметры: нет.
Возвращаемые параметры: нет.
• EnumerateOb j ects – возвращает пути ко всем объектам, находящимся в данном хранилище объектов загрузочного меню.
Входящий параметр: определяет тип объекта. Он имеет тип uint32.
Возвращаемый параметр: массив указателей на класс BcdObject.
• ExportStore – выполняет экспорт содержимого загрузочного меню в файл.
Входящий параметр: путь к файлу, в который нужно экспортировать данное хранилище объектов загрузочного меню.
Возвращаемые параметры: нет.
• GetSystemDisk – возвращает название системного раздела.
Входящий параметр: строковый параметр, который содержит название системного раздела.
Возвращаемые параметры: нет.
• GetSystemPartition – возвращает номер партиции, которая соответствует системному разделу.
Входящие параметры: нет.
Возвращаемый параметр: строковый параметр, содержащий номер партиции диска, которая соответствует системному разделу.
• ImportStore – импортирует загрузочное меню из файла.
Входящий параметр: путь к файлу, из которого нужно импортировать хранилище объектов загрузочного меню.
Возвращаемые параметры: нет.
• OpenObject – возвращает указатель на класс BcdOb j ect, хранящий сведения о данном объекте.
Входящий параметр: строковый параметр, определяющий идентификатор объекта.