Создание настраиваемой сборки Windows PE

В данной статье будет рассказано, как вручную создать собственную сборку Windows PE, содержащую те возможности и компоненты, которые отсутствуют там по умолчанию, но их наличие необходимо в подобном инструменте. Также дам важный совет – не бойтесь отходить от данной инстукции. Воображайте. Находите нестандартные методы решения проблемы. Именно благодаря такому подходу вы сможете создать наиболее функциональную сборку.

Ядро

Начинать создание сборки следует с ядра. Ядро Windows PE содержится в пакете Windows AIK для Windows 7.
Далее необходимо запустить командную строку средств развертывания и выполнить команду
    copype.cmd <архитектура> <путь>
При том каталог, указанный в качестве аргумента copype.cmd, не должен существовать.
Вы можете создать сборки для архитектур x86,x64 и Itanium(x86,amd64,ia64)

Структура сборки


Проще говоря, сборка – это то, что вы получили в целевой папке после работы сценария copype.cmd. Работать сборка не может, ее необходимо прежде всего поместить на носитель и написать загрузчик. После этого ее уже можно будет назвать пользовательски настроенной системой Windows PE 3.0.

Сборка состоит из папок ISO, в которой находится содержимое, копируемое на носитель при подготовке загрузочного накопителя, а именно основа загрузчика – папки boot, efi, sources, файл bootmgr.
Также есть пустая папка mount, предназначенная для монтирования образа.
Еще там хранится файл etfsboot.com, предназначенный для создания загрузчика на CD\DVD диске
И самое главное, это файл winpe.wim, хранящий собственно систему Windows PE
Итак, создание настроенной системы Windows PE 3.0 представляет собой задачу из двух этапов.
  1. Редактирование файла winpe.wim (создание сборки)
  2. Создание загрузчика

Алгоритм создания сборки


Монтирование winpe.wim

Начнем создание сборки с монтирования образа winpe.wim, который содержит в себе систему Windows PE.
Под монтированием подразумевается, что образу в wim-файле ставится в соответствие некоторая папка в файловой системе.
При монтировании все содержимое образа оказывается связанным с папкой, но физически не копируется.
Для монтирования образа используется соответствующая команда
    Dism /Mount-Wim /WimFile:<Путь>\winpe.wim /index:<индекс образа в wim-файле> /MountDir:<Путь>\mount


Таким образом, указывается необходимая информация об монтировании образа: имя и путь к wim-файлу, номер образа в файле, путь для монтирования.

Пакеты Windows PE

Windows AIK содержит в себе компоненты, которые используются для расширения функционала Windows PE. Они называются пакетами. Существует множество пакетов, при помощи которых можно создать образ, с которого происходит загрузка при установке ОС, также есть компоненты предназначенные для поддержки доступа к данным, средств восстановления, а также для инструментария WMI.
Имя пакета Описание
WinPE-FONTSupport-<region> Дополнительная поддержка шрифтов для следующих языков: ja-JP, ko-KR, zh-CN, zh-HK и zh-TW.
WinPE-HTAПоддержка HTML-приложений. Позволяет создавать приложения с графическим интерфейсом пользователя, используя обработчик сценариев Internet Explorer и службы HTML.
Winpe-LegacySetupПакет компонента программы установки Media. Все файлы программы установки из папки \Sources на носителе с Windows. Добавьте этот пакет при обслуживании установки или папки \Sources на носителе с Windows. Он должен добавляться с пакетом компонента программы установки (Setup). Чтобы добавить новый файл Boot.wim на носитель, дополнительно к пакетам Setup и Media добавьте любой дочерний пакет. Данный пакет необходим для поддержки установки Windows Server® 2008 R2.
WinPE-MDACПоддержка компонентов доступа к данным MDAC Microsoft®. Позволяет отправлять запросы к серверам SQL с объектами Active Directory (ADO). Пример использования: создание динамического файла автоматического запуска на основе уникальных системных сведений.
WinPE-PPPoEВключает поддержку протокола PPPoE. Позволяет создавать, подключать, отключать и удалять подключения по протоколу PPPoE из среды предустановки Windows.
WinPE-ScriptingПоддержка сервера сценариев Windows (WSH). Позволяет производить пакетную обработку файлов с помощью объектов сценариев сервера сценариев Windows.
WinPE-SetupПакет компонента программы установки (родительский). Все файлы программы установки из папки \Sources, общей для клиента и сервера.
WinPE-Setup-ClientПакет компонента программы установки клиента (дочерний). Файлы фирменной символики клиента для программы установки. Необходимо добавить после пакета компонента программы установки.
WinPE-Setup-ServerПакет компонента программы установки сервера (дочерний). Файлы фирменной символики сервера для программы установки. Необходимо добавить после пакета компонента программы установки.
WinPE-SRTПакет компонента среды восстановления Windows. Предоставляет платформу восстановления для автоматической диагностики и восстановления системы, а также создания специализированных решений по восстановлению.
WinPE-WMIПоддержка инструментария управления Windows (WMI). Подмножество поставщиков WMI, обеспечивающее минимальную диагностику системы.
WinPE-WDS-ToolsПакет средств служб развертывания Windows. Содержит интерфейсы API, предоставляющие многоадресный сценарий с использованием пользовательского клиента служб развертывания Windows и служебную программу создания образов.

Для добавления пfкета существует команда:
Dism /image:<путь >\mount /Add-Package /PackagePath:
"C:\Program Files\Windows AIK\Tools\PETools\<архитектура>\WinPE_FPs\<имя пакета>.cab"

Профилирование

Профилирование – это процесс уменьшения размера образа за счет неиспользуемых компонентов
Профилирование выполняется следующим образом: сначала оно включается через программу DISM, затем сборка запускается, в ней выполняют требуемые от неё операции, сохраняют профиль, далее сборка подключается через программу DISM и применяется профиль.
Такой метод довольно эффективно снижает размер образа, но его полезно применять в узкой корпоративной среде. В данной инструкции же я создаю УНИВЕРСАЛЬНУЮ сборку, поэтому профилирование будет выполняться несколько иначе.
Оно будет заключаться в РУЧНОМ удалении некоторых компонентов, а именно языковых пакетов, кроме русского и английского.
Также на завершающем этапе будет выполнено экспортирование wim-образа в другой файл с целью очистки индексов устаревших файлов(об этом позднее)
Таким образом, в каталоге mount\Windows\System32 необходимо удалить все каталоги с именами языковых пакетов, кроме ru-ru и en-us.

Добавление компонентов из Windows 7

После добавления пакетов функционал Windows PE расширяется, но недостаточно для выполнения большей части административных задач.
Поэтому я предлагаю расширить возможности путем добавления некоторых компонентов из Windows 7, а именно
  1. Компоненты Проводника – дают возможность вызвать диалоговое окно «Открыть» из диспетчера задач.
  2. Nslookup – утилита для тестирования DNS-серверов
  3. Fc – утилита для сравнения файлов
  4. Diskcomp – утилита для сравнения дискет
  5. Diskcopy – утилита для копирования дискет
  6. Mstsc.exe – программа «Подключение к удаленному рабочему столу», таким образов, Windows PE превращается в «тонкий клиент»

Для этого необходимо установить систему Windows 7 Максимальная (той же архитектуры, что и сборка Windows PE)и SP1 на виртуальную машину. После этого подключите виртуальный жесткий диск от этой ВМ в консоли diskmgmt.msc.
Таким образом, вы будете копировать файлы с этого VHD в сборку
Копируйте указанные в таблице файлы.
Всегда оставляйте для файла то же местоположение, что и на VHD! То есть, если файл находился в каталоге %systemroot%/system32/ru-ru, то вы должны скопировать его в тот же подкаталог каталога mount сборки.
Имя файлаРасположение
Компоненты проводника
Explorer.exe%systemroot%
Shell32.dll%systemroot%/system32
SHELL.dll%systemroot%/system32
Shellstyle.dll%systemroot%/system32
Nslookup
Nslookup.exe%systemroot%/system32
Fc,diskcomp,diskcopy
Fc.exe%systemroot%/system32
Diskcomp.exe%systemroot%/system32
Diskcopy.dll%systemroot%/system32
Diskcopy.exe%systemroot%/system32
Клиент RDC
Mstsc.exe%systemroot%/system32
Mstscax.dll%systemroot%/system32
Msacm32.dll%systemroot%/system32
d3d10core.dll%systemroot%/system32
d3d10.dll%systemroot%/system32
Dxgi.dll%systemroot%/system32
mcm32.dll.mui%systemroot%/system32/ru-ru
mstscax.dll.mui%systemroot%/system32/ru-ru
mstsc.exe.mui%systemroot%/system32/ru-ru


Либо вы можете скачать все эти файлы отсюда. Содержимое рассортировано по каталогам

Добавление стороннего ПО

Будет добавлено следующие программы и сценарии:
Название ПОКоманда запускаОписание
CPU-Z 1.57cpuzИспользуется для получения информации об аппаратном обеспечении
DnsDataView 1.15 dnsdataviewИспользуется для получения информации с DNS-серверов
EasyTerm 4.3easytermTelnet-клиент
Everest 5.02everestИспользуется для получения подробной информации об аппаратном обеспечении и проведения его тестов
Free Commander 2008fcomДвухпанельный NC-образный файловый менеджер
FirefoxPortable4.01firefoxportableПортативная версия популярного интернет-браузера
HDDScan 2.8HddscanУтилита для проверки качества поверхности жёстких дисков
HD_SpeedHddУтилита для проверки скорости работы жесткого диска
ImageXimagexУтилита от Microsoft, предназначенная для работы с WIM-файлами
IpTools 2.58ip_toolsНабор сетевых утилит
Macview 1.13macviewПрограмма для определения производителя устройства по его MAC-адресу
MemTestmemtestУтилита для проверки оперативной памяти
Netagent 3.2netagentНабор сетевых утилит
NmapW 2.0.0.1nmap(консольный интерфейс), nmpw32(графический интерфес)Мощный сканер портов
PortScanner 1.0portscannerСканер портов
PuttyputtySSH и Telnet-клиент
Radmin Viewer 3.4radminУтилита для подключения к серверной части приложения Radmin
Recuva 1.19recuvaВосстановление удаленных файлов
Smart SniffersmsniffПростой и удобный сниффер
Space Monger 1.4spacemongerАнализатор дискового пространства. Работает в удобном графическом режиме
Sysinternals----Ограниченный набор утилит sysinternal от Марка Руссиновича. Сохранены оригинальные названия программ
Undelete PlusundeleteПрограмма для восстановления удаленных файлов.
WdsmcastwdsmcastКонсольная утилита от Microsoft, предназначенная для работы с WDS-сервером
WIM2VHD.wsfcscript “Z:\Program Files\soft\wim2vhd.wsf”Сценарий для конвертации образов из WIM файлов в файлы виртуального жесткого диска
WinRar 3.71winrarМногофункциональный архиватор


Список программ из набора sysinternals(о их назначении вы можете прочитать на сайте http://technet.microsoft.com/ru-ru/sysinternals)

• Accesschk
• AccessEnum
• Clockers
• Contig
• Dbgview
• Diskext
• DiskView
• Du
• Efsdumpo
• Handle
• Listdlls
• Loadord
• Ntfsinfo
• Procexp
• Procfeatures
• Procmon
• Sdelete
• Streams
• Strings
• Tcpvcon
• Tcpview
• Volumeid
• Whois
• Psexec
• Psfile
• Psgetsid
• Psinfo
• Pskill
• Pslist
• Psloggedon
• Psloglist
• Pspasswd
• Psservice
• Psshutdown
• Pssuspend


Все это ПО должно быть помещено в папку \mount\Program Files\soft\
Скачать подборку можно отсюда.
И помимо этого, я решил изменить стандартный фон «рабочего стола». Я указал этот термин в кавычках, поскольку помимо фонового рисунка он ничего не содержит, вследствие отсутствия графической оболочки.
Фоновое изображение берется из файла winpe.bmp из каталога %systemroot%/system32
Скачать его можно отсюда

Редактирование реестра Windows PE


Как известно, в ОС Windows файлы реестра хранятся в папке %systemroot%/system32/config
Для их редактирования используется редактор реестра regedit.exe
Чтобы подключить реестр сборки Windows PE, необходимо выполнить команду «Подключить куст» из меню файл программы «Редактор реестра». В диалоговом окне указать файл реестра сборки, ввести имя раздела.
После этого можно редактировать любые параметры реестра Windows PE, учитывая ее функциональные ограничения.

Настройка Windows PE

Windows PE может быть настроена так, как необходимо администратору. Для этого существует несколько средств.
Вы можете изменить путь к рабочей зоне и ее размер, настроить автоматически выполняемый командный сценарий и прочее.
Одним из средств настройки является файл Winpeshl.ini
Этот INI-файл предназначен для настройки программы оболочки.
По умолчанию не существует, в качестве оболочки используется cmd.exe
Довольно хорошей идеей является настройка в качестве оболочки файл-менеджера FreeCommander, однако я не буду этого делать, так как на мой взгляд, командно-ориентированный интерфейс ближе и удобнее для администратора, и а графический файл-менеджер нужен лишь для решения объемных задач, когда cmd тормозит работу.
Поэтому я не буду создавать файл winpeshl.ini, однако дам обзор его синтаксиса
Обратите внимание, что если вы настроите собственную программу оболочку, то не будет выполняться файл startnet.cmd! Поэтому для увеличения функциональности среды(поддержка сети и Plug and Play) следует добавить команду wpeinit в раздел LaunchApps.
Вообще, благоразумнее использовать раздел LaunchApps, так как он позволяет использовать параметры командной строки и выполнять несколько команд. При этом не стоит использовать оба раздела одновременно, так как это приведет к неработоспособности конфигурационного файла.
[LaunchApp]
AppPath = %SYSTEMDRIVE%\myshell.exe
[LaunchApps] 
%SYSTEMDRIVE%\mydir\application1.exe, {option}

Выход из программы оболочки ведет к перезагрузке ПК.Файл winpeshl.ini должен хранится в каталоге %systemroot%/system32
Для автозапуска приложений либо для автоматизации каких-либо иных действий в Windows PE существует файл startnet.cmd. По умолчанию содержит строку запуска программы wpeinit, предназначенной для окончательной инициализации среды Windows PE, добавляя сетевые возможности и поддержку самонастраиваемых устройств. Файл startnet.cmd хранится в каталоге %systemroot%/system32 Его синтаксис стандартен для cmd-файлов.

Также при помощи программы DISM вы можете изменить параметры рабочей зоны, т.е. виртуального диска, создаваемого при загрузке Windows PE Иными словами, рабочая зона – это то же самое что и RAM-диск в системе MS-DOS
DISM /image:<путь >\mount /Set-TargetPath:<буква>:\  
- устанавливает путь к рабочей зоне. По умолчанию – X:
DISM /image:<путь >\mount /Set-ScratchSpace:64
- установка размера рабочей зоны. По умолчанию - 32 Мб.
Стоит отметить, что в качестве размера рабочей зоны можно задавать значения 32,64,256 и 512
Также существует несколько других команд DISM для работы со смонитрованным образом Windows PE:
Dism /image:<путь>\mount /Get-Packages
– отобразить включенные в образ пакеты
Dism /image:<путь>\mount /Get-Drivers
– отобразить включенные в образ пакеты
Dism /image:<путь>\mount /Get-Intl
– отобразить язык по умолчанию для смонтированного образа
Dism /image:<путь>\mount /Get-PESettings
- отобразить инфомция о настройках Windows PE
Dism /image:<путь >\mount /Add-Driver /driver:<путь к драйверу>
– добавить в образ драйвер

Добавление драйверов


Чтобы добавить в сборку драйвер в более удобном графическом режиме, необходимо воспользоваться Windows Deployment Services
Для этого необходимо:
  1. Открыть консоль управления WDS
  2. Выполнить команду «Добавить загрузочный образ» из контекстного меню элемента «Образы загрузки» дерева консоли
  3. В открывшемся диалоговом окне выбрать образ
  4. Изменить имя образа и его описание, если требуется. Я всегда указываю в описании назначение конкретной сборки и включенные в нее программные средства
  5. По окончании процесса добавления образа, из контекстного меню добавленного образа вызвать команду «Добавить пакеты драйверов к образу»
  6. Задать условия отбора драйверов, выбрать требуемые драйвера(имеется в виду, что они уже добавлены в хранилище)
  7. По окончании процесса добавления выполнить команду «Экспортировать образ» из контекстного меню данного образа. Указать путь и имя образа, нажать кнопку «Сохранить».

Экспортированный образ будет содержать все добавленные драйвера.
Я рекомендую добавлять драйвера сетевых адаптеров, используемых в вашей организации, особенно если они были выпущены сравнительно недавно. Однако предварительно протестируйте сборку без драйверов. Если сетевые адаптеры «видны» и так, то не стоит добавлять драйвера, увеличивая тем самым размер образа.

Размонтирование и оптимизация образа

После выполнения всех вышеперечисленных этапов вы имеете универсальную сборку Windoiws PE, которую вы можете использовать для различных целей, включая использование в качестве тонкого клиента.
Но для того, чтобы изменения, внесенные в содержимое папки mount были применены к образу, необходимо размонтировать образ с подтверждением изменений.
Это делается при помощи команды
DISM /Unmount-Wim /MountDir:<путь>\mount /Commit
Процесс размонтирования состоит из двух этапов – запись изменений в образ, и очистка папки монтирования.
По окончании процесса редактирования размер wim-файла увеличится, однако его можно оптимизировать, путем обновления индексов содержимого в wim-файле.
Делается это при помощи команды
imagex /export <путь>\winpe.wim 1 <путь>\ISO\sorces\boot.wim «Windows PE 3.0»

Работа с Windows PE

Обратите внимание, что Windows PE отличается от обычной версии Windows в первую очередь, своим командно-ориентированным интерфейсом. Не закрывайте окно командной строки. Это приведет к перезагрузке ПК. Диспетчер задач вы можете вызвать путем ввода команды taskmgr, комбинация CtrlAltDelete не работает. Отсутствует стандартный проводник. Однако, если вы добавляли все библиотеки, указанные выше, вы можете использовать диалоговое окно «Открыть» из диспетчера задач. В Windows PE отсутствует консоль mmc и оснастки. Поэтому стоит привыкнуть работать в консольном режиме, либо использовать стороннее ПО.
Размер образа, созданного по моей инструкции – 220Мб, если удалить что-то ненужное вам, то образ может поместиться на mini-CD диск. Также вы можете поместить его на загрузочный флэш-накопитель или использовать WDS для удаленной загрузки. Если Windows PE будет использоваться как тонкий клиент, то вы можете спокойно использовать бездисковые рабочие станции для работы.
В Windows PE содержится команда wpeutil, при помощи которой вы можете:
• Изменить размер файла подкачки.(по умолчанию, C:\pagefile.sys, 64 Мб)
wpeutil CreatePageFile /path=<path> /size=<размер>

Обратите внимание, что если в указанном есторасположении уже имеется файл подкачки, и команда создает файл подкачки меньший по размеру, чем существующий, то это может вызвать ошибку
• Отключить или включить брандмауэр.
wpeutil DisableFirewall|EnableFirewall

• Реинициализировать сеть.
wpeutil InitializeNetwork

• Задать раскладку клавиатуры
wpeutil SetKeyboardLayout <код раскладки клавиатуры>

• Задать язык
wpeutil SetMuiLanguage <язык>[;<язык>]

Можно задать несколько языков в приоритетном порядке.
• Задать региональные настройки пользователя.
wpeutil SetUserLocale <язык>[;<язык>]

Можно задать несколько региональных настроек в приоритетном порядке.
• Выключить компьютер
wpeutil shutdown

• Перезагрузить компьютер
wpeutil reboot


На этом я закончу рассмотрение команд wpeutil. Более подробную информацию можно получить в справке по этой команд, вызываемой путем ввода wpeutil /?

Итог

На этом процесс создания сборки завершен.
Системные требования для данной сборки минимальны

Процессор – 1 Ггц.
ОЗУ –384 Мб.
Сборку, созданную при написании этой статьи можно скачать отсюда.

Повторюсь, напомнив вам – данная статья – не строгая инструкция. Это основа для дальнейшего творчества. Единственное, чего вы не имеете права делать – это дизассемблировать и переписывать код ядра Windows PE. В остальном, всё зависит от вашей фантазии и запросов. Я продолжаю вести работу над совершенствованием и увеличением функционала с целью расширить область применения среды. Так, на ближайшей повестке дня:
  • Разблокировка поддержки WiFI
  • Интеграция IE9, дабы не пользоваться Firefox
  • Наведение порядка в системных библиотеках, так как многие программы сторонних разработчиков не работают в Windows PE
  • Написание удобной графической оболочки, аналогичной GNOME, но удобной и содержащей только то, что необходимо администратору, либо частичная интеграция оболочки explorer.exe
  • Интеграция консоли управления mmc.exe
  • Создание мультизагрузочного дистрибутива Windows PE, то есть вы сможете выбрать, что загружать – определенную сборку Windows PE,либо же setup.exe для установки полнофункциональной Windows