Загрузочный диск windows pe своими руками

Сисадмину или мастеру сервисного центра, да и просто в хозяйстве на всякий случай помогает в работе загрузочная флешка с набором полезных программ, и в интернете...

Сисадмину или мастеру сервисного центра, да и просто в хозяйстве на всякий случай помогает в работе загрузочная флешка с набором полезных программ, и в интернете можно найти полно готовых решений с «кучей» софта на все случаи в жизни. Но каждый, кто пользовался чужими готовыми вариантами LiveCD, рано или поздно задумывался о том, что по факту используется лишь малая часть приложений. Весь же остальной ненужный груз софта, который порой может составлять более 98% всего набора LiveCD, лишь мешает работать. Почему? Потому что LiveCD загружается прямиком в оперативную память, и чем больше объем LiveCD, тем больше ожидания загрузки, а если ещё и попался древний компьютер, то LiveCD может и вовсе не загрузится от нехватки памяти. И что же делать? Сделать свой собственный LiveCD! В этой статье я расскажу то, чего вы не найдете даже в гугле.

image

Начиная читать эту статью, можно подумать, что в интернете есть полно инструкций как это сделать, но не всё так просто. В этих инструкциях либо чего-то не хватает (как будто намеренно), либо наоборот наворочено очень много ненужного и непонятно что из этого можно было бы убрать, либо инструкции устарели и не работают на последних версиях Windows PE. Но самое главное, с чем я регулярно сталкиваюсь, так это с тем, что в инструкциях написано всё на столько кратко, что в них не всегда разберется даже продвинутый пользователь, и в редких случаях даже я, специалист с опытом, не с первого раза понимаю, что имел в виду автор. Я понимаю, что это сделано, чтобы отсеять всех, кроме просвещенных, но тогда зачем вообще писать такие инструкции, где ничего непонятно, из-за которых приходится перечитать лишние 100 статей, потратить лишние 2 недели на проверку в практике, ради того, чтобы выяснить какую-то мелочь, которую могли написать в трех предложениях. Так что в какой-то степени эта инструкция на зло всем тем, кто пожадничал и не написал несколько лишних строк.
Даже если вы найдёте какую-то инструкцию по этой теме, то не факт, что она будет подробна и понятна, особенно учитывая, как быстро всё меняется и устаревает.

Небольшой спойлер, загуглите запрос IConflictInterrupt и вы не найдете в интернете ни одной статьи или инструкции, а это один из ключевых моментов в работе функционала окна процесса копирования/перемещения/удаления файлов, без которой не так удобно использовать Windows PE. Что делает эту статью уникальной и крайне полезной.

В этой статье я ОЧЕНЬ ПОДРОБНО расскажу, как собрать Windows PE с минимальным набором самых нужных функций без лишнего хлама. Я намеренно написал даже некоторые почти примитивные шаги, дабы любой новичок мог быстро освоиться. Так что не кидайте тапками за занудность (:

Предисловие

Я начал этот путь ещё со времен Windows 98, когда уже в те времена иногда требовалось выгрузить данные с ПК, у которого не загружалась ОС. Флешки в тот период уже были, хоть и не были распространены, т.к. были очень дорогие. Загрузить с них минимальную Windows 98 было не так просто, потому что Windows 98 не умела загружаться с внешних накопителей, и приходилось самому писать драйвер с указанием серийного номера флешки, чтобы именно эта флешка воспринималась операционной системой как жёсткий диск. Даже несмотря на это, ОС не загружалась, если объем оперативной памяти превышал 512Мб.

Потом, конечно, вышла Windows 2000/XP, и ситуация в корне изменилась, появлялись готовые решения вроде Hiren (DOS+Windows XP), которые уже на тот момент работали очень медленно. Например, у Hiren виртуальная img FDD весила аш ~41Мб и могла загружаться по более 30-40 минут на особо медленных ПК с USB1.0.

Уже в те времена готовые решения работали не так как хотелось и имели в арсенале полно ненужных приложений. Тогда-то я и начал для своих личных нужд активно собирать свои собственные LiveCD на DOS и Windows. Когда мой img FDD весил всего около 2Мб вместо 41Мб у Hiren, и вмещал всё необходимое (MHDD, Victoria, Volkov Commander и немного мелочи), с годами туда конечно добавились DiscGenius, HWinfo и некоторые другие, но суть остаётся прежней, в арсенале только самое нужное, лёгкое и быстро загружающееся.

Времена идут и Microsoft достаточно часто выпускает новые версии Windows 10, а теперь ещё и Windows 11. После почти каждого выхода новой версии ОС приходится создавать новый образ, т.к. только он имеет нативную поддержку нового железа. Например, встречаются современные ноутбуки, у которых даже сенсорная панель не работает на старых версиях Windows 10 PE, не говоря уже о сенсорных экранах.

Я расскажу, как сделать образ на основе Windows 10 1507 x32 и Windows 10 21H2 x64. Почему такой разброс в версиях? Потому что версия x32 нужна как правило для старых устройств с минимальными ресурсами, а версия Windows 10 1507 является самой лёгкой по объему и запустится везде, где только можно, особенно на планшетах с ЦП Intel, у которых нет поддержки x64. Почему именно версия 1507 x32, а не 21H2 x32? Потому что опыт показывает что устройства, как правило планшеты и трансформеры, у которых нет поддержки x64, вышли во время Windows 8 (2012-2015год), и некоторые из этих устройств не способны загрузить последние версии Windows 10 21H2 x32 (как минимум на стоковых версиях UEFI), потому что предназначались для Windows 8, но они все без исключения (по моему опыту) отлично загружают Windows 10 1507 x32. Версия Windows 10 21H2 x64 нужна для современных устройств и тут уже НУЖНО выбирать только самую последнюю версию Windows PE. Перед написанием статьи я применил свою же инструкцию к Windows 11 PE (22000.XXX) и всё замечательно работает, так что в дальнейших шагах вместо Windows 10 21H2 x64 можете смело использовать Windows 11 (22000.XXX).

Итак, начнём.

I. Подготовительный этап

1. Windows ADK

Для начала нам понадобится скачать и установить комплект средств для развертывания и оценки для Windows ADK.

Во время установки при выборе компонентов достаточно выбрать лишь средства развертывания (Система обслуживания образов и развертывания и управления или (DISM)).

image

Примечание: у Microsoft имеется надстройка Windows PE для Windows ADK, где имеются дополнительные компоненты для интеграции в Windows PE, но нам эти компоненты не понадобятся, однако, как их установить я тоже ниже распишу, так что если интересно, то можете скачать и дополнительно установить надстройку Windows PE для Windows ADK. Скачать её можно на той же странице что указана выше.

2. Дерево каталогов

Необходимо создать каталоги, в которой будут проходить все работы. У каждого свои предпочтения по используемому диску D, E, F и т.д., так что я буду на примере диска C, а там уже делайте как вам удобно. Нам нужны будут следующие каталоги, но дабы не утруждать себя их созданием вручную, введите следующие команды в командную строку, запущенную от имени администратора:


mkdir "C:BuildPEAddFilesx32Program Files"
mkdir "C:BuildPEAddFilesx32WindowsSystem32"
mkdir "C:BuildPEAddFilesx64Program Files"
mkdir "C:BuildPEAddFilesx64WindowsSystem32"
mkdir "C:BuildPECOMPLETE32"
mkdir "C:BuildPECOMPLETE64"
mkdir "C:BuildPEISO"
mkdir "C:BuildPEMount"
mkdir "C:BuildPEoriginalWIMx32"
mkdir "C:BuildPEoriginalWIMx64"
mkdir "C:BuildPEutil"

На выходе у вас будет готово дерево каталогов для дальнейших шагов.

3. Свой софт

Для каждого набор приложений индивидуален, я же буду расписывать свой вариант как пример, а вы можете его как пополнить, так и убавить. Windows PE x64 имеет поддержку ТОЛЬКО x64 приложений, и запустить x32 она не сможет без добавления дополнительных файлов для их поддержки, но раз уж мы делаем легкий образ, то поддержку x32 мы обеспечивать не будем, а это значит, что потребуется скачать только x64 приложения для x64 образа, и x32 приложения только для x32 образа. Я не буду оглашать весь список своих приложений, если вы понимаете о чем я :), но вот базовая часть:

У ниже указанных программ есть как x64, так и x32 версии, нам нужны обе:

  • 7-Zip
  • Autoruns
  • CLaunch
  • Explorer++ (Языковые пакеты можете найти на странице релизов GitHub нужен лишь .dll файл рядом с .exe файлом программы)
  • HWiNFO
  • Notepad++
  • ProcessExplorer
  • produkey
  • WinXShell

Эксклюзивно для x32:

  • ExplorerXP
  • Victoria

Вы можете обратить внимание, что в списке присутствует CLaunch как альтернатива меню Пуск, и WinXShell как альтернатива всей графической оболочке explorer, в которой есть своё меню Пуск. Так зачем же два меню пуск? Дело в том, что наличие WinXShell в образе — это просто запас, на случай если остро необходима панель задач в то время, когда открыто множество окон, в которых можно потеряться, не имея панели задач. При этом если используется лишь одно окно, например для диагностики жесткого диска через Victoria, или для определения конфигурации ПК через HWiNFO, то достаточно одного окна без необходимости включать графический интерфейс. К тому же если на компе поврежденный жесткий диск, то лучше, чтобы было включено как можно меньше программ, которые обращаются к жесткому диску, а WinXShell как минимум строит дерево каталогов всех накопителей, что уже плохо в таком сценарии.

Почти все те программы что я выбрал (за исключением, например, Victoria и ExplorerXP), имеют как x32, так и x64 версии, но самое главное, что они не требовательны к наличию NetFX, который достаточно тяжелый. Если же ваш софт требует NetFX или какой-либо другой компонент, то придётся всё-таки его интегрировать, от чего образ значительно вырастет в объеме, но если это нужно, то почему бы и нет, главное, что не бесполезным софтом, а тем, что действительно нужно.

4. Подготовка софта

Не все вышеуказанные программы имеют portable версии, ваша задача получить каталог с программой — это можно сделать распаковкой установочного файла, как в случае с 7-Zip (через 7-Zip открыть дистрибутив 7-Zip, чтобы извлечь 7-Zip), или инсталировать программу на свой ПК, а потом скопировать целиком каталог с программой в отдельный каталог для дальнейшего копирования в образ:

Программы x32 для Windows 10 1507 x32 перемещаем в C:BuildPEAddFilesx32Program Files
Программы x64 для Windows 10 21H2 x64 перемещаем в C:BuildPEAddFilesx64Program Files

Немного подсказок:

WinXShell — в этой программе я удаляю китайский язык (файлы WinXShell.zh-CN.jcfg и WinXShell.zh-CN.lua) и переименовываю WinXShell_x86.exe в WinXShell.exe, аналогично и с x64, а также удаляю файл wxsStub32.dll для версии x64, а для x32 удаляю wxsStub.dll.

CLaunch — отличная альтернатива меню Пуск для ОС, у которой нет ничего кроме CMD, и дабы эта альтернатива работала как надо, то необходимо присвоить ей горячую клавишу для вызова (в моём случае Win+Z, т.к. просто Win будет использоваться для WinXShell). Настроить CLaunch можно и на своей ОС, а потом перекинуть файл с настройками в Windows PE для дальнейшей ДОнастройки, но, чтобы вас лишний раз не утруждать, и как минимум дать стартовый вариант настроек этой программы, я подготовил готовый комплект файлов, но о нём чуть ниже.

Получив набор каталогов с программами очень важно очистить их от лишнего (для достижения малого объема образа на выходе), поэтому можно смело удалять деинсталляционные файлы, лишние языки, скины, плагины и всё то, что 100% не понадобится в работе. Некоторые из этих программ требуют настройки, но об этом чуть позже. Желательно пока их даже не запускать дабы внутри программ не создавались лишние файлы настроек и т.д.

В моём образе Explorer++ хранится прямо в папке System32:


C:BuildPEAddFilesx64WindowsSystem32Explorer++.exe
C:BuildPEAddFilesx64WindowsSystem32Explorer++RU.dll

Советую сохранить Explorer++ в том же месте, т.к. его удобно вызывать из командной строки, а также мои настройки, которые вы встретите в следующих пунктах рассчитаны на то, что он будет находится именно в System32. Когда освоитесь, можете сменить ему местоположение изменив параметры в реестре, CLaunch и ярлык для WinXShell.

5. Скачать инструменты и оригинальный дистрибутив ОС

Оригинальное средство Microsoft для скачивания образа Windows — MediaCreationTool, не умеет скачивать старые версии Windows, и качает лишь последнюю поддерживаемую Microsoft, нам такая и нужна, но нам нужна ещё и самая первая версия Windows 10 1507, которую без труда можно скачать с торрентов с помощью удобного средства, которое уже обсуждалось здесь на хабре, или сразу на GitHub. Качаем с помощью него Windows 10 21H2 x64 и Windows 10 1507 x32 — нам нужны ISO файлы, а не запись на DVD или флешку.

Для работы нам также потребуются следующие программы:

  • 7-Zip.
  • Блокнот или любой другой текстовый редактор, в моём случае Notepad++.
  • Редактор ISO файлов, в моём случае UltraISO.
  • offlinereg необязателен, но желателен

Архив с программой offlinereg можно распаковать в C:BuildPEutil

5. Подготовка WIM файлов

Чтобы сделать свой вариант Widnows PE, нам нужен оригинальный образ, который можно взять из скачанных ISO дистрибутивов.

Через 7-Zip или проводник откройте скачанные два ISO файла (Windows 10 1507 x32 и Windows 10 21H2 x64), откройте папку sources и извлеките из него файл boot.wim:
Из образа Windows 10 1507 x32 в папку C:BuildPEoriginalWIMx32
Из образа Windows 10 21H2 x64 в папку C:BuildPEoriginalWIMx64

6. Подготовка файлов ОС

Оригинальная Windows PE не имеет очень важных файлов, без которых не работает диалоговое окно копирования файлов, не работает Drag&Drop и многие другие функции, включая даже те программы, что мы скачали ранее, они не запустятся без некоторых файлов ОС. Наша задача дополнить ОС нужными файлами. Через 7-Zip откройте скачанные два ISO файла (Windows 10 1507 x32 и Windows 10 21H2 x64), откройте папку sources и прямо в архиваторе откройте файл install.wim или install.esd — формат неважен. Форматы .wim или .esd встречается в разных образах, в одном может быть .wim, в другом .esd, но сути не меняет — это просто архив с ОС.

Внутри архива install как правило должно быть несколько папок с номерами — это разные редакции ОС (Home, Single Language, Pro и т.д.), в каждой редакции имеется полный набор файлов ОС с незначительными отличиями в наборе функционала. Не важно какую именно редакцию вы откроете, потому что набор нужных нам файлов есть в каждом из них.

В архиве переходим в папку install.esd1WindowsSystem32 из которого нужно выгрузить только определенные файлы.

Из образа Windows 10 1507 x32 извлекаем следующие файлы в папку C:BuildPEAddFilesx32WindowsSystem32:


en-USshellstyle.dll.mui
ru-RUexplorerframe.dll.mui
ru-RUole32.dll.mui
ru-RUoledlg.dll.mui
ru-RUshell32.dll.mui
ru-RUtaskkill.exe.mui
ru-RUtwinapi.appcore.dll.mui
ru-RUtwinapi.dll.mui
ru-RUtwinui.appcore.dll.mui
ru-RUtwinui.dll.mui
actxprxy.dll
chartv.dll
d3d11.dll
DataExchange.dll
dcomp.dll
ddraw.dll
DXCore.dll (этого файла нет в версии 1507, но его можно взять из свежих версий Windows 10, например 21H2)
dxgi.dll
ExplorerFrame.dll
glu32.dll
ksuser.dll
oledlg.dll
opengl32.dll
pdh.dll
pdhui.dll
shellstyle.dll
shfolder.dll
taskkill.exe
thumbcache.dll
timeout.exe
twinapi.appcore.dll
twinapi.dll
twinui.appcore.dll
twinui.dll

Из образа Windows 10 21H2 x64 извлекаем следующие файлы в папку C:BuildPEAddFilesx64WindowsSystem32:


en-USshellstyle.dll.mui
ru-RUexplorerframe.dll.mui
ru-RUole32.dll.mui
ru-RUoledlg.dll.mui
ru-RUshell32.dll.mui
ru-RUtaskkill.exe.mui
ru-RUtwinapi.appcore.dll.mui
ru-RUtwinapi.dll.mui
ru-RUtwinui.appcore.dll.mui
ru-RUtwinui.dll.mui
actxprxy.dll
chartv.dll
d3d11.dll
DataExchange.dll
dcomp.dll
dxgi.dll
ExplorerFrame.dll
glu32.dll
ksuser.dll
oledlg.dll
OneCoreUAPCommonProxyStub.dll
opengl32.dll
pdh.dll
pdhui.dll
shellstyle.dll
shfolder.dll
taskkill.exe
thumbcache.dll
timeout.exe
twinapi.appcore.dll
twinapi.dll
twinui.appcore.dll
twinui.dll

7. Подготовка ISO

В виртуальной машине мы будем тестировать наши образы Windows PE, но чтобы запустить виртуальную машину, нужно подключить к ней ISO файл со своей Windows PE. Физически невозможно с первого раза создать идеальную Windows PE, т.к. не будут готовы ни ярлыки программам, ни настройки программ, которые делаются после первого запуска Windows PE, потом извлекаются и вносятся во вторую версию, которая уже, может быть, релизной при идеальных обстоятельствах. Каждый раз редактировать тяжелый ISO образ с полноценной ОС — это отнимает больше времени, проще сделать отдельные ISO файлы для дальнейшего неоднократного редактирования, в которых не будет дистрибутива ОС. Через UltraISO открываем скачанные ISO файлы Windows 10 1507 x32 и Windows 10 21H2 x64 и полностью очищаем папку sources. В будущем мы добавим в неё уже отредактированный файл boot.wim. А пока что очищенные ISO файлы сохраняем в папку C:BuildPEISO с именами, например, MyPE1507x32.iso и MyPE21H2x64.iso.

8. Подготовка файла реестра

Некоторые извлеченные файлы из оригинальной ОС не будут работать без определённых ключей в реестре, так что эти файлы бесполезны пока не будут зарегистрированы в реестре и не только (нужно ещё прописать некоторые CLSID и Interface).

Качаем мой набор файлов с github и помещаем содержимое архива в C:BuildPEAddFiles, чтобы каталоги x32 и x64 слились с теми, что были в архиве.

В этом же наборе будут настроенные CLaunch (о чем я писал выше), Explorer++, startnet.cmd, а также пара батников для удобства.

В обоих вариантах (x64 и x32) у нас следующий набор файлов:
Файлы настроек CLaunch:


Program FilesCLaunchDataСИСТЕМАClassic.csd
Program FilesCLaunchDataСИСТЕМАCLaunch.ini
Program FilesCLaunchDataСИСТЕМАClIcons.bin
Program FilesCLaunchDataСИСТЕМАDesign.ini

Ярлыки программ для меню пуск WinXShell:


ProgramDataMicrosoftWindowsStart Menu7zFM.lnk
ProgramDataMicrosoftWindowsStart MenuAutoruns.lnk
ProgramDataMicrosoftWindowsStart MenuExplorer++.lnk
ProgramDataMicrosoftWindowsStart MenuHWiNFO32.lnk
ProgramDataMicrosoftWindowsStart Menuprocexp.lnk
ProgramDataMicrosoftWindowsStart MenuProduKey.lnk
ProgramDataMicrosoftWindowsStart MenuProgramscmd.lnk
ProgramDataMicrosoftWindowsStart MenuProgramsMdSched.lnk
ProgramDataMicrosoftWindowsStart MenuProgramsnotepad.lnk
ProgramDataMicrosoftWindowsStart MenuProgramsregedit.lnk
ProgramDataMicrosoftWindowsStart MenuProgramstaskmgr.lnk

Ярлыки программ для меню пуск WinXShell эксклюзивно для x32, т.к. этих программ нет в x64 версии:


ProgramDataMicrosoftWindowsStart MenuVictoria.lnk
ProgramDataMicrosoftWindowsStart MenuExplorerXP.lnk

Файлы System32:
WindowsSystem32config.xml — файл настроек Explorer++
WindowsSystem32spectraconfig.reg — файл реестра, который настроит ОС и который активирует работу диалоговых окон прогресса копирования и не только
WindowsSystem32startnet.cmd — файл, который Windows PE запустит сразу после запуска, этот файл применит файл реестра, а также запустит CLaunch для удобного запуска своих приложений
WindowsSystem32UI.bat — удобный запуск WinXShell через командную строку при необходимости

По поводу файла startnet.cmd — он уже настроен так, чтобы при запуске показать основные характеристики железа, на котором запущена Windows PE, для стартового понимания за каким железом приходится работать, без необходимости включать HWiNFO. Вы можете обратить внимание что в startnet.cmd какие-то кракозябры, а не кириллица. Дело в том, что если вы хотите, чтобы командная строка показывала вам кириллицу, то нужно перед редактированием этого файла сменить кодировку на OEM 866 (в Notepad++ это: Кодировки > Кириллица > OEM 866), и только после этого набирать текст русскими буквами, в противном случае, не сменив кодировку и написав на кириллице, в cmd вы увидите кракозябры.

Что касаемо файла spectraconfig.reg — он тут ключевой, без него не будут работать Drag&Drop и диалоговые окна проводника. Из-за его длины, я не стал писать его содержимое в теле статьи, к тому же две версии этого файла (x64 и x32), а вывел его на отдельный ресурс, но объяснить его строение вам всё-таки нужно. Для тех, кому интересно, информация ниже в спойлере:

Путеводитель по spectraconfig.reg

Начну с конца файла:
Внутри комментария «Каталог по умолчанию для пользователя СИСТЕМА X:UsersDefault» имеются ключи реестра для переназначения папок пользователя по умолчанию. В Windows PE используется пользователь СИСТЕМА, который хранится в каталоге пользователя WindowsSystem32configsystemprofile, где должен быть каталог Desktop и остальные (которых нет), и без этих каталогов программы выдают ошибки, пытаясь обратиться к несуществующим каталогам, например, к Desktop, чтобы отобразить его в дереве каталогов. Поэтому я сменил путь к пользовательским папкам с %userprofile%Desktop (коим является фактический путь X:WindowsSystem32configsystemprofileDesktop) на X:UsersDefaultDesktop, и по образу и подобию остальные папки пользователя.

Внутри комментария «Твики для удобства» и так всё понятно, т.к. я прокомментировал их в .reg файле. Но как пример, пункт «Отобразить значок „Этот компьютер“ на рабочем столе» очень полезен для WinXShell, чтобы при его включении значок «Этот компьютер» был на своём месте.
Внутри комментария «Ассоциация с 7z» я добавил 7-Zip в качестве приложения по умолчанию для всех типов архивов, которые поддерживает 7-Zip.

Внутри комментария «Notepad++» всё аналогично, как и в 7-Zip. В x32 версию PE я не интегрировал Notepad++ и там нет ассоциации с Notepad++.

Комментарий «Explorer++ проводник по умолчанию» говорит сам за себя).

Внутри комментария «Drag&Drop и окна проводника» я добавил поддержку тем самых полезных функций, без которых Windows PE использовать очень неудобно. Подробнее о них в спойлере ниже.

Я прекрасно понимаю, что статья устареет и для новых версий Windows 10/11 она может быть неактуальной, поэтому для тех, кто хочет понять суть того, как включить Drag&Drop и диалоговые окна проводника, я расскажу по подробней в спойлере:

Как включить Drag&Drop и диалоговые окна проводника

Есть определённые диалоговые окна, например окно процесса копирования/перемещения/удаления файлов. Я постараюсь примитивным языком объяснить, как это работает. Что есть это окно? Это не часть приложения explorer.exe, это какое-то окно, которое хранится в каком-то .dll файла, но даже если вы этот .dll файл скопируете в свою Windows PE, то ОС не будет знать, что с ним делать, почему? Потому что в этом файле есть десятки, а то и сотни, если не тысячи разных окон для разных целей. Нужно дать понять Windows PE что имеется в этом файле. Это делается в 3 этапа:

  1. Устанавливаем на локальный компьютер или виртуальную машину самую свежую версию ОС Windows 10, открываем реестр и для удобства делаем в файлы .reg экспорт двух веток:
    HKEY_LOCAL_MACHINESOFTWAREClassesCLSID
    HKEY_LOCAL_MACHINESOFTWAREClassesInterface
    На выходе будет два файла .reg которые можно открыть через Notepad++ и выполнять поиск нужных ключей.
  2. Находясь в реестре или в Notepad++ (я использую Notepad++ потому что через него удобно копировать ветку, и нет необходимости экспортировать в файл, потом открывать его и копировать…), поочередно запускаем поиск нужных нам Interface (если вы работаете через Notepad++ то вам нужен тот .reg файл который вы экспортировали из ветки HKEY_LOCAL_MACHINESOFTWAREClassesInterface):


    IInterruptedOperationHandler
    IFileOperationProgressSink
    IOperationsProgressDialog
    IOperationStatusTile
    IOperationStatusService
    IOperationStatusSink
    IOperationInterrupt
    IObjectWithCachedState
    IConflictInterrupt

    И находим следующие ветки с их содержимым:


    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}]
    @="IInterruptedOperationHandler"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}]
    @="IFileOperationProgressSink"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}]
    @="IOperationsProgressDialog"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}]
    @="IOperationStatusTile"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1}]
    @="IOperationStatusService"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}]
    @="IOperationStatusSink"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F}]
    @="IConflictInterrupt"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F}ProxyStubClsid32]
    @="{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797}]
    @="IOperationInterrupt"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}]
    @="IObjectWithCachedState"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    Вы можете обратить внимание, что все эти Interface ссылаются на два CLSID: {95E15D0A-66E6-93D9-C53C-76E6219D3341} и {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}. В версии x32 только лишь {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}.

  3. Находясь в реестре или в Notepad++, открываем две ветки тех CLSID, на которые ссылались предыдущие пункты, и находим следующее:


    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}]
    @="PSFactoryBuffer"
    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}InProcServer32]
    @="C:\Windows\System32\OneCoreUAPCommonProxyStub.dll"
    "ThreadingModel"="Both"

    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}]
    @="PSFactoryBuffer"
    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32]
    @="X:\Windows\System32\ActXPrxy.dll"
    "ThreadingModel"="Both"

В итоге нам известны нужные нам файлы для извлечения из полноценной ОС в Windows PE, а так же у нас есть куски реестра которые нужно внести в Windows PE.

Так вот, в будущем, могут изменится адреса, например, IOperationStatusService располагался по адресу {0C3C904A-AD89-4851-9C3D-210C080CEE18}, потом уже {61A969EF-64EA-4C48-BBF5-EEDE3B32BF86}, а сейчас {6D5174EC-F425-4CD9-8643-CF36042987F1}. И если он снова изменится, то вам нужно в реестре запустить поиск IOperationStatusService и найти его по новому адресу, который потребуется вписать вместо того, что указан у меня. Тоже самое касается и остальных. Но и это не всё. Вы можете обратить внимание что все перечисленные Interface (за исключением IConflictInterrupt) ссылаются на CLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}, к которому привязан файл OneCoreUAPCommonProxyStub.dll, а в следующей версии там может быть другой файл, или наоборот, файл тот же, но адрес CLSID уже быть другой, или и файл новый, и адрес. Так что не теряйтесь и ищите если что-то изменилось. Но в худшем случае, может потребоваться новый Interface которого нет в моём списке, тогда уже есть небольшая проблема, найти его будет не просто. И тут остаётся или гуглить, или искать методом тыка. Есть ещё более правильный вариант, зная на какой .dll файл ссылаются Interface, раньше можно было вскрыть файл через программу Resource Hacker или Restorator, и в нём найти все варианты диалоговых окон с их описанием, но, сейчас эти программы не могут вскрыть файлы последних ОС, других программ я не гуглил, да и сам я уже стар для таких расследований.

Интересный факт: если вы загуглите IConflictInterrupt, то

не найдёте ни одной статьи

с упоминанием этого файла (гугл показывает всего одну ссылку на страницу с упоминанием этой строки в .dll файле), а без него, между прочим, не открывается окно замены файлов с одинаковыми именами, и если не прописать IConflictInterrupt, то при конфликте файлов с одинаковыми именами на экране ничего не произойдёт, ОС просто проигнорирует ваш запрос на копирование файлов. Так что IConflictInterrupt очень важен, как минимум его наличие здесь, делает эту статью уникальной.

Немного справки по файлам .dll и реестру:
Для функционирования Drag&Drop обязательно требуются файлы twinapi.dll и DataExchange.dll, CLSID с привязкой к этим .dll, и ключ реестра DragDropExtension.

Для функционирования приложений которые мы собираемся интегрировать в Widnows PE, а также окна прогресса копирования/удаления/перемещения файлов включая окна замены/пропуска файлов с одинаковыми именами обязательно требуются, CLSID с привязкой к .dll и Interface указанные выше, а также почти все те файлы что я указал в начале статьи, возможно, я переборщил и пару «уже ненужных» файлов всё ещё копирую из основной ОС в Widnows PE, и честно признаюсь что не проверял работоспособность нужных мне функций ОС без тех или иных файлов, а всё потому что, что бы проверить это, надо выпилить один файлик, а потом провести проверочных работ на 20 минут, и так с каждым файлом, на что у меня просто нет времени.

9. Подготовка файла редактирования реестра

Этот пункт можно пропустить, он лишь для подстраховки. Лично мне спокойней, когда ряд параметров реестра изменены до включения ОС. Поэтому я вношу самые важные изменения реестра ещё до первого запуска.

Для этого создаём два текстовых файла (для x32 и x64 по отдельности) и вписываем туда следующее:

regexportX64.txt


ClassesCLSID{07fc2b94-5285-417e-8ac3-c2ce5240b0fa}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{07fc2b94-5285-417e-8ac3-c2ce5240b0fa}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{34568a1f-8d5a-4080-99c7-464e2cb40008} setvalue " " "PSFactoryBuffer"
ClassesCLSID{34568a1f-8d5a-4080-99c7-464e2cb40008}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{34568a1f-8d5a-4080-99c7-464e2cb40008}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{53067330-01CE-4027-947F-FF8580E92463}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{53067330-01CE-4027-947F-FF8580E92463}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{6B273FC5-61FD-4918-95A2-C3B5E9D7F581}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{6B273FC5-61FD-4918-95A2-C3B5E9D7F581}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{A1103531-6B1C-425F-A8C9-671616E40FA9}InProcHandler32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{B1AEC16F-2383-4852-B0E9-8F0B1DC66B4D}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{B1AEC16F-2383-4852-B0E9-8F0B1DC66B4D}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{D648FEA1-EA00-4FF4-B8BD-034BD2B25A23}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{D648FEA1-EA00-4FF4-B8BD-034BD2B25A23}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.dll"
ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{B52D54BB-4818-4EB9-AA80-F9EACD371DF8} setvalue " " "Windows Search Platform"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F} setvalue " " "Local Thumbnail Cache"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f} setvalue " " "CLSID_LocalIconCache"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InProcServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2} setvalue " " "CLSID_UIThreadThumbnailCache"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InProcServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6} setvalue " " "PSFactoryBuffer"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue " " "X:WindowsSystem32ActXPrxy.dll"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6} setvalue " " "Shell Name Space ListView"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue " " "%SystemRoot%System32explorerframe.dll"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue " " "%SystemRoot%System32dataexchange.dll"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721} setvalue " " "IInterruptedOperationHandler"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2} setvalue " " "IFileOperationProgressSink"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C} setvalue " " "IOperationsProgressDialog"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8} setvalue " " "IOperationStatusTile"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1} setvalue " " "IOperationStatusService"
ClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82} setvalue " " "IObjectWithCachedState"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C} setvalue " " "IImmersiveShellBroker"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61} setvalue " " "IOperationStatusSink"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F} setvalue " " "IConflictInterrupt"
ClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797} setvalue " " "IOperationInterrupt"
ClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
MicrosoftOleExtensions setvalue "DragDropExtension" "{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}"
ClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341} setvalue " " "PSFactoryBuffer"
ClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}InProcServer32 setvalue " " "X:WindowsSystem32OneCoreUAPCommonProxyStub.dll"

regexportX32.txt

ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.dll"
ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{B52D54BB-4818-4EB9-AA80-F9EACD371DF8} setvalue " " "Windows Search Platform"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F} setvalue " " "Local Thumbnail Cache"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f} setvalue " " "Local Icon Cache"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InprocServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2} setvalue " " "Local Thumbnail Cache"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InprocServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6} setvalue " " "PSFactoryBuffer"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue " " "X:WindowsSystem32ActXPrxy.dll"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6} setvalue " " "Shell Name Space ListView"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue " " "%SystemRoot%System32explorerframe.dll"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue " " "%SystemRoot%System32dataexchange.dll"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721} setvalue " " "IInterruptedOperationHandler"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2} setvalue " " "IFileOperationProgressSink"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C} setvalue " " "IOperationsProgressDialog"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8} setvalue " " "IOperationStatusTile"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{0C3C904A-AD89-4851-9C3D-210C080CEE18} setvalue " " "IOperationStatusService"
ClassesInterface{0C3C904A-AD89-4851-9C3D-210C080CEE18}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82} setvalue " " "IObjectWithCachedState"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C} setvalue " " "IImmersiveShellBroker"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61} setvalue " " "IOperationStatusSink"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{7CCBC4D6-7AC7-415C-B5BE-FAF75D8A1E85} setvalue " " "IConflictInterrupt"
ClassesInterface{7CCBC4D6-7AC7-415C-B5BE-FAF75D8A1E85}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{FEE9E8EA-1D4B-4076-88B1-CCCAAEC1C8AA} setvalue " " "IOperationInterrupt"
ClassesInterface{FEE9E8EA-1D4B-4076-88B1-CCCAAEC1C8AA}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
MicrosoftOleExtensions setvalue "DragDropExtension" "{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}"

И сохраняем эти файлы в папке C:BuildPEutil

10. Подготовка виртуальной машины

Необходимо скачать и установить виртуальную машину. Учитывая что нам необходима лишь одновременно запущенная одна виртуальная машина, то достаточно будет VMware Workstation Player, но вы можете использовать и другую на своё усмотрение, например, VirtualBox.

Я не буду расписывать как устанавливать виртуальную машину, думаю тут ничего сложного несколько раз нажать «Далее», а вот как её настроить:

  • Запускаем VMware Workstation Player и нажимаем Create a New Virtual Machine.
  • Пропускаем выбор установочного носителя нажав I will install the operating system later.
  • Выбираем Windows 10 and later x64 и нажимаем Next. Примечание: при создании образа x32 вы можете использовать эту же виртуальную машину, в настройках поменяв с Windows 10 and later x64 на Windows 10.
  • На своё усмотрение указываем имя виртуальной машины и путь, где она будет хранится.
  • На своё усмотрение указываем объем виртуального диска, нам потребуется буквально несколько мегабайт, но на всякий случай лучше указать, например, 2Гб. При указании объема лучше всего выбрать Store virtual disk as a single file, это облегчит задачу, когда мы будем извлекать из диска нужные файлы.
  • На этом этапе виртуальная машина готова, но надо её ещё настроить. Итак, в списке виртуальных машин выберите только что созданную и нажмите на Edit virtual machine settings.

Укажите следующие параметры:

  • Объем оперативной памяти на своё усмотрение, для комфортной работы желательно не менее 2-4Гб, у меня стоит 6Гб.
  • Количество выделяемых потоков для виртуальной машины, для комфортной работы желательно не менее двух, у меня стоит 4.
  • В CD/DVD выбираем Use ISO image file и указываем файл C:BuildPEISOMyPE21H2x64.iso

Машина готова для запуска, но подключенный к ней .iso файл пока не готов. И об этом в следующем разделе. Начинается самое интересное.

Итак, у нас всё готово для начала сборки своего PE образа!

II. Редактирование WIM и ISO

1. Редактирование WIM

Открываем от имени администратора Среду средств развертывания и работы с образами и списываем следующие команды:

*для новичков* отобразить редакции в .wim файле чтобы понимать с чем вы работаете
Dism /Get-WimInfo /WimFile:"C:BuildPEoriginalWIMx64boot.wim"
на всякий случай отключаем .wim файлы если они ранее были подключены
DISM /Cleanup-Wim
в отдельный файл экспортируем из boot.wim вторую редакцию которой является Microsoft Windows Setup (x86), наличие второго файла сохраняет оригинал на всякий случай для дальнейших повторных сборок, а их будет не мало — работа над ошибками
Dism /export-image /SourceImageFile:C:BuildPEoriginalWIMx64boot.wim /SourceIndex:2 /DestinationImageFile:C:BuildPEedit.wim /Compress:max /CheckIntegrity
монтируем образ для внесения изменений
dism.exe /mount-wim /wimfile:C:BuildPEedit.wim /mountdir:C:BuildPEMount /index:1
на этом этапе сворачиваем «Среду средств развертывания и работы с образами», но не в коем случае не закрываем!

прав администратора недостаточно для удаления лишних файлов в образе. чтобы повысить себе плава ещё выше, я обычно запускаю от имени администратора Explorer++, открываю папку, например, C:BuildPE и находясь в ней нажимаю на , после чего у меня открывается командная строка в которой я ввожу следующие команды:

удаляем программу установки ОС


erase C:BuildPEMountSetup.exe
takeown /F C:BuildPEMountsources*.* /A
rd C:BuildPEMountsources /s/q

создаём каталог «Рабочий стол» для пользователя СИСТЕМА без которого Explorer++ может выдавать ошибку
mkdir C:BuildPEMountWindowsSystem32configsystemprofileDesktop
удаляем ненужные ярлыки из меню Пуск чтобы не видеть их в меню WinXShell

rd "C:BuildPEMountProgramDataMicrosoftWindowsStart MenuPrograms" /s/q
rd "C:BuildPEMountUsersDefaultAppDataRoamingMicrosoftWindowsStart MenuPrograms" /s/q

переходим в каталог, где хранится offlinereg и вносим изменения в реестр

cd /d C:BuildPEutilofflinereg
offlinereg-win64 C:BuildPEMountWindowsSystem32configSOFTWARE " " run C:BuildPEutilregexportX64.txt

копируем весь набор своего софта+доп файлы для ОС
xcopy /y /o /e "C:BuildPEAddFilesx64*.*" "C:BuildPEMount*.*"
удаляем лишние логи [дело привычки]


CD /D C:BuildPEMountWindowsSystem32config
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountWindowsSystem32SMIStoreMachine
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountUsersDefault
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F

возвращаемся в «Среду средств развертывания и работы с образами»
размонтируем образ
Dism /Unmount-Image /MountDir:"C:BuildPEMount" /commit
отключаем .wim файл
DISM /Cleanup-Wim
экспортируем готовый образ в новый .wim файл с целью избавится от папки [DELETED] который создаётся после редактирования .wim файла
DISM /export-image /sourceimagefile:C:BuildPEedit.wim /sourceindex:1 /destinationimagefile:C:BuildPECOMPLETE64boot.wim /compress:maximum
удаляем .wim файл в котором происходили изменения
erase C:BuildPEedit.wim

Те же команды для удобства копипаста

В «Среде средств развертывания и работы с образами»

Dism /Get-WimInfo /WimFile:"C:BuildPEoriginalWIMx64boot.wim"
DISM /Cleanup-Wim
Dism /export-image /SourceImageFile:C:BuildPEoriginalWIMx64boot.wim /SourceIndex:2 /DestinationImageFile:C:BuildPEedit.wim /Compress:max /CheckIntegrity
dism.exe /mount-wim /wimfile:C:BuildPEedit.wim /mountdir:C:BuildPEMount /index:1

В cmd Explorer++

erase C:BuildPEMountSetup.exe
takeown /F C:BuildPEMountsources*.* /A
rd C:BuildPEMountsources /s/q
mkdir C:BuildPEMountWindowsSystem32configsystemprofileDesktop
rd "C:BuildPEMountProgramDataMicrosoftWindowsStart MenuPrograms" /s/q
rd "C:BuildPEMountUsersDefaultAppDataRoamingMicrosoftWindowsStart MenuPrograms" /s/q
cd /d C:BuildPEutilofflinereg
offlinereg-win64 C:BuildPEMountWindowsSystem32configSOFTWARE " " run C:BuildPEutilregexportX64.txt
xcopy /y /o /e "C:BuildPEAddFilesx64*.*" "C:BuildPEMount*.*"
CD /D C:BuildPEMountWindowsSystem32config
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountWindowsSystem32SMIStoreMachine
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountUsersDefault
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F

В «Среде средств развертывания и работы с образами»

Dism /Unmount-Image /MountDir:"C:BuildPEMount" /commit
DISM /Cleanup-Wim
DISM /export-image /sourceimagefile:C:BuildPEedit.wim /sourceindex:1 /destinationimagefile:C:BuildPECOMPLETE64boot.wim /compress:maximum
erase C:BuildPEedit.wim

Готово! .WIM образ Windows 10 PE 21H2 x64 создан, осталось лишь занести его в .iso файл и можно пробовать первую заготовку. Теперь тоже самое можно повторить и для Windows 10 PE 1507 x32, но на этот раз я уберу комментарии дабы проще было копировать:

В «Среде средств развертывания и работы с образами»

Dism /Get-WimInfo /WimFile:"C:BuildPEoriginalWIMx32boot.wim"
DISM /Cleanup-Wim
Dism /export-image /SourceImageFile:C:BuildPEoriginalWIMx32boot.wim /SourceIndex:2 /DestinationImageFile:C:BuildPEedit.wim /Compress:max /CheckIntegrity
dism.exe /mount-wim /wimfile:C:BuildPEedit.wim /mountdir:C:BuildPEMount /index:1

В cmd Explorer++


erase C:BuildPEMountSetup.exe
takeown /F C:BuildPEMountsources*.* /A
rd C:BuildPEMountsources /s/q
mkdir C:BuildPEMountWindowsSystem32configsystemprofileDesktop
rd "C:BuildPEMountProgramDataMicrosoftWindowsStart MenuPrograms" /s/q
rd "C:BuildPEMountUsersDefaultAppDataRoamingMicrosoftWindowsStart MenuPrograms" /s/q
cd /d C:BuildPEutilofflinereg
offlinereg-win64 C:BuildPEMountWindowsSystem32configSOFTWARE " " run C:BuildPEutilregexportX32.txt
xcopy /y /o /e "C:BuildPEAddFilesx32*.*" "C:BuildPEMount*.*"
CD /D C:BuildPEMountWindowsSystem32config
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountWindowsSystem32SMIStoreMachine
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountUsersDefault
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F

В «Среде средств развертывания и работы с образами»

Dism /Unmount-Image /MountDir:"C:BuildPEMount" /commit
DISM /Cleanup-Wim
DISM /export-image /sourceimagefile:C:BuildPEedit.wim /sourceindex:1 /destinationimagefile:C:BuildPECOMPLETE32boot.wim /compress:maximum
erase C:BuildPEedit.wim

Готово! .WIM образ Windows 10 PE 1507 x32 создан, осталось лишь занести его в .iso файл и можно пробовать первую заготовку.

2. Редактирование .iso

С помощью UltraISO открываем наши .iso файлы, и в папку sources и вставляем наши только что испеченные файлы C:BuildPECOMPLETEx64boot.wim в C:BuildPEISOMyPE21H2x64.iso и C:BuildPECOMPLETEx32boot.wim в C:BuildPEISOMyPE1507x32.iso, и сохраняем оба .iso файла.

Далее я буду рассказывать всё лишь в варианте Windows 10 PE 21H2 x64 т.к. дальнейшие шаги один в один, а не чуть-чуть отличаемые как прежних пунктах, где можно было что-то напутать «на замыленный глаз».

3. Первый запуск WinPE и настройка

Открываем VMware Workstation Player и выбираем нашу виртуальную машину, она уже настроена и готова для запуска, и можно её включать, нажав Play virtual machine. При появлении надписи Press any key to boot from CD or DVD нажимаем любую клавишу и ждём окончания загрузки.

Что мы видим? Командную строку с перечислением каких-то характеристик железа виртуальной машины. А где меню? А где графический интерфейс? Сейчас всё будет. Вы можете вызвать либо CLaunch путем нажатия комбинации клавиш Win+Z, либо запустить графический интерфейс WinXShell путем ввода в командную строку UI.bat или открыв CLaunch и нажав на соответствующий пункт.

image

Мы уже интегрировали в Windows PE нужные нам программы, некоторым программам не нужны никакие настройки, но некоторым они обязательны, и теперь мы можем их настроить чтобы получить файл настроек, затем сохранить его на отдельном виртуальном диске для дальнейшего извлечения в папку C:BuildPEAddFiles… для дальнейшего создания второй версии своей Windwos PE в которой программы уже будут настроены так, как нам надо.

Чтобы сохранить файлы, нужен виртуальный диск, мы его подключили, но не форматировали. Поэтому с этого и начнём.

В запущенной Windwos PE в открытой командной строки вводим следующие команды:

diskpart
select disk 0
create partition primary
format quick override
assign
exit

После чего у нас будет диск С. Если вы сделали его объемом 2Гб, то хоть объём у него и небольшой, но нам и этого более чем достаточно т.к. необходимо скопировать лишь несколько конфигов объемом как правило менее 1Мб.

  1. Настройка CLaunch — Эта программа уже настроена в большей степени, но вы можете увеличить количество пунктов дополнив их своими программами, а также добавить дополнительные вкладки, настроить размеры окна, горячую клавишу вызова меню и т.д. После закрытия программы через Alt+F4 она сохранит все настройки внутри своего же каталога X:Program FilesCLaunchData которые вы можете скопировать на диск C: воспользовавшись проводником Explorer++ который вы можете включить либо через заранее настроенный CLaunch, либо прописать в командной строке explorer++.
  2. Настройка меню Пуск WinXShell — В Explorer++ откройте диск X:Program Files и сделайте ярлыки нужных вам программ, все созданные ярлыки вы можете скопировать на диск C:.
  3. Настройка Notepad++ — после настройки Notepad++ все свои файлы настроек он хранит по адресу X:UsersDefaultAppDataRoamingNotepad++ которые также можно скопировать на диск C:

По окончанию всех работ по настройке программ и созданию ярлыков, а быть может вы и батники какие-нибудь создавали, вы можете выключить виртуальную машину, и с помощью 7-Zip открыть файл виртуального диска который находится там где вы указали адрес виртуальной машины при её создании, например, C:Users%username%Virtual MachinesVHDBuildMyPE.vmdk, открыв .vmdk файл извлеките из него все конфигурации что вы создали и распределите по нужным каталогам для создания финального образа (эх, если бы всё так было просто):
Все созданные ярлыки для меню пуск извлечь в каталог C:BuildPEAddFilesx64ProgramDataMicrosoftWindowsStart Menu
Настройки CLaunch извлечь в каталог C:BuildPEAddFilesx64Program FilesCLaunchData
Настройки Notepad++ извлечь в каталог C:BuildPEAddFilesx64UsersDefaultAppDataRoamingNotepad++
Если вы перенастраивали Explorer++, то его настройки хранятся там же где и .exe файл, а в нашем случае это C:BuildPEAddFilesx64WindowsSystem32

Я не просто так показал пример с настройками, дело в том, что новички могут не сразу понять, что куда копипастить, а тут сразу 2 варианта:

  1. Программа хранит настройки в своей отдельной папке
  2. Программа хранит настройки рядом с своим .exe
  3. Программа хранит настройки в AppData
  4. Тут ещё не хватает варианта, когда программа хранит настройки в реестре, и тут уже гугл в помощь, а то для этой цели и так очень длинная статья сильно разрастется.

Ну чтож, на этом этапе мы готовы создать вторую версию образа. Для этого удаляем или переименовываем .wim файл C:BuildPECOMPLETEx64boot.wim, чтобы на его месте создать новый, и полностью повторяем шаг II.1 и II.2. Запускаем виртуальную машину и проверяем результат своих работ, находим ошибки, исправляем, и снова, и снова, и снова создаём новую версию образа до тех пор, пока не будет идеальный для вас вариант.

Вы можете обратить внимание что если закрыть командную строку, то вся ОС завершит работу, т.к. командная строка — это основное приложение ОС которое вы закрываете. Для тех кому командная строка не нужна или даже мешает, и хочется сразу загрузить графическую оболочку или проводник, или ещё что, то вместо командной строки можно задать другое приложение, которое кстати тоже завершит работу ОС после закрытия. Для этого вам потребуется создать файл Winpeshl.ini в папке System32, а вот как его настроить можно узнать из этого справочника.

Надеюсь, моя статья оказалась для вас полезна. Она, конечно, достаточно занудна, но я решил, что уж лучше один раз доходчиво всё объяснить, чем оставить людей без какой-то ценной информации, которую можно искать годами.

P.S.

У меня была ситуация, когда был ноутбук, у которого исправно загружается ОС, и после того, как пропадает логотип Windows и перед тем, как начнется загрузка пользователя, появляется пауза длиной в 1-3 минуты. И как задать вопрос поисковику? Черный экран после загрузки ОС? Любой поисковик будет думать, что дело в том, что компьютер вообще не загружается и черный экран висит всё время после старта, выдан миллиард страниц на эту тему, а подойдёт по теме лишь единицы, которые даже не первых 100 страниц поиска (я проверял). Выходит, какими бы умными не были поисковики, а вот такие уточнения они ещё не скоро начнут понимать. Я сам задавал этот запрос в течении долгого времени, перелистал без шуток, сотни страниц, и по великой случайности, уже не через поисковики, а по темам форумов, перескакивая с одного форума на другой, как темы при разговоре с интересным человеком, в итоге нашел ответ на свой вопрос. Дело было в ULPS, который нужно было отключить в реестре. Это я всё к чему. С созданием Windows PE такая же ситуация, и например, чтобы сделать рабочим окно копирования в последних версиях ОС, нужно сделать то, о чем не знает даже Google, а как уж задать вопрос, это ещё сложнее. Собственно, именно это и стало причиной написать эту статью, раз уж другие умельцы об этом не пишут, хотя на торрентах свои работы выкладывают:)

III. Интеграция пакетов и драйверов

В начале статьи я обещал рассказать о интеграции дополнительных пакетов которые мы так и не установили в наш образ. Cкачиваем и дополнительно устанавливаем надстройку Windows PE для Windows ADK.

Допустим вам необходимо добавить NetFX, делаем следующее:
В уже смонтированном образе в пункте II.2 перед командой Dism /Unmount-Image /MountDir:«C:BuildPEMount» /commit вводим следующие команды:

Dism /Add-Package /Image:"C:BuildPEMount" /PackagePath:"C:Program Files (x86)Windows Kits10Assessment and Deployment KitWindows Preinstallation Environmentamd64WinPE_OCsWinPE-WMI.cab"
Dism /Add-Package /Image:"C:BuildPEMount" /PackagePath:"C:Program Files (x86)Windows Kits10Assessment and Deployment KitWindows Preinstallation Environmentamd64WinPE_OCsWinPE-NetFX.cab"

Найти полный список дополнительных пакетов, а также узнать зависимости этих пакетов, вы сможете на этой странице.

Допустим вам необходимо интегрировать драйвер (например, линий PCI и накопителей SSD для MacBook последних лет чтобы вручную каждый раз их не устанавливать на рабочей ОС WinPE), то вводим следующую команду
Dism /image:C:BuildPEMount /Add-Driver /Driver:C:BuildPEDrv*.inf
Где * — это или все драйвера что есть в каталоге C:BuildPEDrv, или замените *, на имя конкретного файла драйвера.

Всем спасибо!

Сисадмину или мастеру сервисного центра, да и просто в хозяйстве на всякий случай помогает в работе загрузочная флешка с набором полезных программ, и в интернете можно найти полно готовых решений с «кучей» софта на все случаи в жизни. Но каждый, кто пользовался чужими готовыми вариантами LiveCD, рано или поздно задумывался о том, что по факту используется лишь малая часть приложений. Весь же остальной ненужный груз софта, который порой может составлять более 98% всего набора LiveCD, лишь мешает работать. Почему? Потому что LiveCD загружается прямиком в оперативную память, и чем больше объем LiveCD, тем больше ожидания загрузки, а если ещё и попался древний компьютер, то LiveCD может и вовсе не загрузится от нехватки памяти. И что же делать? Сделать свой собственный LiveCD! В этой статье я расскажу то, чего вы не найдете даже в гугле.

image

Начиная читать эту статью, можно подумать, что в интернете есть полно инструкций как это сделать, но не всё так просто. В этих инструкциях либо чего-то не хватает (как будто намеренно), либо наоборот наворочено очень много ненужного и непонятно что из этого можно было бы убрать, либо инструкции устарели и не работают на последних версиях Windows PE. Но самое главное, с чем я регулярно сталкиваюсь, так это с тем, что в инструкциях написано всё на столько кратко, что в них не всегда разберется даже продвинутый пользователь, и в редких случаях даже я, специалист с опытом, не с первого раза понимаю, что имел в виду автор. Я понимаю, что это сделано, чтобы отсеять всех, кроме просвещенных, но тогда зачем вообще писать такие инструкции, где ничего непонятно, из-за которых приходится перечитать лишние 100 статей, потратить лишние 2 недели на проверку в практике, ради того, чтобы выяснить какую-то мелочь, которую могли написать в трех предложениях. Так что в какой-то степени эта инструкция на зло всем тем, кто пожадничал и не написал несколько лишних строк.
Даже если вы найдёте какую-то инструкцию по этой теме, то не факт, что она будет подробна и понятна, особенно учитывая, как быстро всё меняется и устаревает.

Небольшой спойлер, загуглите запрос IConflictInterrupt и вы не найдете в интернете ни одной статьи или инструкции, а это один из ключевых моментов в работе функционала окна процесса копирования/перемещения/удаления файлов, без которой не так удобно использовать Windows PE. Что делает эту статью уникальной и крайне полезной.

В этой статье я ОЧЕНЬ ПОДРОБНО расскажу, как собрать Windows PE с минимальным набором самых нужных функций без лишнего хлама. Я намеренно написал даже некоторые почти примитивные шаги, дабы любой новичок мог быстро освоиться. Так что не кидайте тапками за занудность (:

Предисловие

Я начал этот путь ещё со времен Windows 98, когда уже в те времена иногда требовалось выгрузить данные с ПК, у которого не загружалась ОС. Флешки в тот период уже были, хоть и не были распространены, т.к. были очень дорогие. Загрузить с них минимальную Windows 98 было не так просто, потому что Windows 98 не умела загружаться с внешних накопителей, и приходилось самому писать драйвер с указанием серийного номера флешки, чтобы именно эта флешка воспринималась операционной системой как жёсткий диск. Даже несмотря на это, ОС не загружалась, если объем оперативной памяти превышал 512Мб.

Потом, конечно, вышла Windows 2000/XP, и ситуация в корне изменилась, появлялись готовые решения вроде Hiren (DOS+Windows XP), которые уже на тот момент работали очень медленно. Например, у Hiren виртуальная img FDD весила аш ~41Мб и могла загружаться по более 30-40 минут на особо медленных ПК с USB1.0.

Уже в те времена готовые решения работали не так как хотелось и имели в арсенале полно ненужных приложений. Тогда-то я и начал для своих личных нужд активно собирать свои собственные LiveCD на DOS и Windows. Когда мой img FDD весил всего около 2Мб вместо 41Мб у Hiren, и вмещал всё необходимое (MHDD, Victoria, Volkov Commander и немного мелочи), с годами туда конечно добавились DiscGenius, HWinfo и некоторые другие, но суть остаётся прежней, в арсенале только самое нужное, лёгкое и быстро загружающееся.

Времена идут и Microsoft достаточно часто выпускает новые версии Windows 10, а теперь ещё и Windows 11. После почти каждого выхода новой версии ОС приходится создавать новый образ, т.к. только он имеет нативную поддержку нового железа. Например, встречаются современные ноутбуки, у которых даже сенсорная панель не работает на старых версиях Windows 10 PE, не говоря уже о сенсорных экранах.

Я расскажу, как сделать образ на основе Windows 10 1507 x32 и Windows 10 21H2 x64. Почему такой разброс в версиях? Потому что версия x32 нужна как правило для старых устройств с минимальными ресурсами, а версия Windows 10 1507 является самой лёгкой по объему и запустится везде, где только можно, особенно на планшетах с ЦП Intel, у которых нет поддержки x64. Почему именно версия 1507 x32, а не 21H2 x32? Потому что опыт показывает что устройства, как правило планшеты и трансформеры, у которых нет поддержки x64, вышли во время Windows 8 (2012-2015год), и некоторые из этих устройств не способны загрузить последние версии Windows 10 21H2 x32 (как минимум на стоковых версиях UEFI), потому что предназначались для Windows 8, но они все без исключения (по моему опыту) отлично загружают Windows 10 1507 x32. Версия Windows 10 21H2 x64 нужна для современных устройств и тут уже НУЖНО выбирать только самую последнюю версию Windows PE. Перед написанием статьи я применил свою же инструкцию к Windows 11 PE (22000.XXX) и всё замечательно работает, так что в дальнейших шагах вместо Windows 10 21H2 x64 можете смело использовать Windows 11 (22000.XXX).

Итак, начнём.

I. Подготовительный этап

1. Windows ADK

Для начала нам понадобится скачать и установить комплект средств для развертывания и оценки для Windows ADK.

Во время установки при выборе компонентов достаточно выбрать лишь средства развертывания (Система обслуживания образов и развертывания и управления или (DISM)).

image

Примечание: у Microsoft имеется надстройка Windows PE для Windows ADK, где имеются дополнительные компоненты для интеграции в Windows PE, но нам эти компоненты не понадобятся, однако, как их установить я тоже ниже распишу, так что если интересно, то можете скачать и дополнительно установить надстройку Windows PE для Windows ADK. Скачать её можно на той же странице что указана выше.

2. Дерево каталогов

Необходимо создать каталоги, в которой будут проходить все работы. У каждого свои предпочтения по используемому диску D, E, F и т.д., так что я буду на примере диска C, а там уже делайте как вам удобно. Нам нужны будут следующие каталоги, но дабы не утруждать себя их созданием вручную, введите следующие команды в командную строку, запущенную от имени администратора:


mkdir "C:BuildPEAddFilesx32Program Files"
mkdir "C:BuildPEAddFilesx32WindowsSystem32"
mkdir "C:BuildPEAddFilesx64Program Files"
mkdir "C:BuildPEAddFilesx64WindowsSystem32"
mkdir "C:BuildPECOMPLETE32"
mkdir "C:BuildPECOMPLETE64"
mkdir "C:BuildPEISO"
mkdir "C:BuildPEMount"
mkdir "C:BuildPEoriginalWIMx32"
mkdir "C:BuildPEoriginalWIMx64"
mkdir "C:BuildPEutil"

На выходе у вас будет готово дерево каталогов для дальнейших шагов.

3. Свой софт

Для каждого набор приложений индивидуален, я же буду расписывать свой вариант как пример, а вы можете его как пополнить, так и убавить. Windows PE x64 имеет поддержку ТОЛЬКО x64 приложений, и запустить x32 она не сможет без добавления дополнительных файлов для их поддержки, но раз уж мы делаем легкий образ, то поддержку x32 мы обеспечивать не будем, а это значит, что потребуется скачать только x64 приложения для x64 образа, и x32 приложения только для x32 образа. Я не буду оглашать весь список своих приложений, если вы понимаете о чем я :), но вот базовая часть:

У ниже указанных программ есть как x64, так и x32 версии, нам нужны обе:

  • 7-Zip
  • Autoruns
  • CLaunch
  • Explorer++ (Языковые пакеты можете найти на странице релизов GitHub нужен лишь .dll файл рядом с .exe файлом программы)
  • HWiNFO
  • Notepad++
  • ProcessExplorer
  • produkey
  • WinXShell

Эксклюзивно для x32:

  • ExplorerXP
  • Victoria

Вы можете обратить внимание, что в списке присутствует CLaunch как альтернатива меню Пуск, и WinXShell как альтернатива всей графической оболочке explorer, в которой есть своё меню Пуск. Так зачем же два меню пуск? Дело в том, что наличие WinXShell в образе — это просто запас, на случай если остро необходима панель задач в то время, когда открыто множество окон, в которых можно потеряться, не имея панели задач. При этом если используется лишь одно окно, например для диагностики жесткого диска через Victoria, или для определения конфигурации ПК через HWiNFO, то достаточно одного окна без необходимости включать графический интерфейс. К тому же если на компе поврежденный жесткий диск, то лучше, чтобы было включено как можно меньше программ, которые обращаются к жесткому диску, а WinXShell как минимум строит дерево каталогов всех накопителей, что уже плохо в таком сценарии.

Почти все те программы что я выбрал (за исключением, например, Victoria и ExplorerXP), имеют как x32, так и x64 версии, но самое главное, что они не требовательны к наличию NetFX, который достаточно тяжелый. Если же ваш софт требует NetFX или какой-либо другой компонент, то придётся всё-таки его интегрировать, от чего образ значительно вырастет в объеме, но если это нужно, то почему бы и нет, главное, что не бесполезным софтом, а тем, что действительно нужно.

4. Подготовка софта

Не все вышеуказанные программы имеют portable версии, ваша задача получить каталог с программой — это можно сделать распаковкой установочного файла, как в случае с 7-Zip (через 7-Zip открыть дистрибутив 7-Zip, чтобы извлечь 7-Zip), или инсталировать программу на свой ПК, а потом скопировать целиком каталог с программой в отдельный каталог для дальнейшего копирования в образ:

Программы x32 для Windows 10 1507 x32 перемещаем в C:BuildPEAddFilesx32Program Files
Программы x64 для Windows 10 21H2 x64 перемещаем в C:BuildPEAddFilesx64Program Files

Немного подсказок:

WinXShell — в этой программе я удаляю китайский язык (файлы WinXShell.zh-CN.jcfg и WinXShell.zh-CN.lua) и переименовываю WinXShell_x86.exe в WinXShell.exe, аналогично и с x64, а также удаляю файл wxsStub32.dll для версии x64, а для x32 удаляю wxsStub.dll.

CLaunch — отличная альтернатива меню Пуск для ОС, у которой нет ничего кроме CMD, и дабы эта альтернатива работала как надо, то необходимо присвоить ей горячую клавишу для вызова (в моём случае Win+Z, т.к. просто Win будет использоваться для WinXShell). Настроить CLaunch можно и на своей ОС, а потом перекинуть файл с настройками в Windows PE для дальнейшей ДОнастройки, но, чтобы вас лишний раз не утруждать, и как минимум дать стартовый вариант настроек этой программы, я подготовил готовый комплект файлов, но о нём чуть ниже.

Получив набор каталогов с программами очень важно очистить их от лишнего (для достижения малого объема образа на выходе), поэтому можно смело удалять деинсталляционные файлы, лишние языки, скины, плагины и всё то, что 100% не понадобится в работе. Некоторые из этих программ требуют настройки, но об этом чуть позже. Желательно пока их даже не запускать дабы внутри программ не создавались лишние файлы настроек и т.д.

В моём образе Explorer++ хранится прямо в папке System32:


C:BuildPEAddFilesx64WindowsSystem32Explorer++.exe
C:BuildPEAddFilesx64WindowsSystem32Explorer++RU.dll

Советую сохранить Explorer++ в том же месте, т.к. его удобно вызывать из командной строки, а также мои настройки, которые вы встретите в следующих пунктах рассчитаны на то, что он будет находится именно в System32. Когда освоитесь, можете сменить ему местоположение изменив параметры в реестре, CLaunch и ярлык для WinXShell.

5. Скачать инструменты и оригинальный дистрибутив ОС

Оригинальное средство Microsoft для скачивания образа Windows — MediaCreationTool, не умеет скачивать старые версии Windows, и качает лишь последнюю поддерживаемую Microsoft, нам такая и нужна, но нам нужна ещё и самая первая версия Windows 10 1507, которую без труда можно скачать с торрентов с помощью удобного средства, которое уже обсуждалось здесь на хабре, или сразу на GitHub. Качаем с помощью него Windows 10 21H2 x64 и Windows 10 1507 x32 — нам нужны ISO файлы, а не запись на DVD или флешку.

Для работы нам также потребуются следующие программы:

  • 7-Zip.
  • Блокнот или любой другой текстовый редактор, в моём случае Notepad++.
  • Редактор ISO файлов, в моём случае UltraISO.
  • offlinereg необязателен, но желателен

Архив с программой offlinereg можно распаковать в C:BuildPEutil

5. Подготовка WIM файлов

Чтобы сделать свой вариант Widnows PE, нам нужен оригинальный образ, который можно взять из скачанных ISO дистрибутивов.

Через 7-Zip или проводник откройте скачанные два ISO файла (Windows 10 1507 x32 и Windows 10 21H2 x64), откройте папку sources и извлеките из него файл boot.wim:
Из образа Windows 10 1507 x32 в папку C:BuildPEoriginalWIMx32
Из образа Windows 10 21H2 x64 в папку C:BuildPEoriginalWIMx64

6. Подготовка файлов ОС

Оригинальная Windows PE не имеет очень важных файлов, без которых не работает диалоговое окно копирования файлов, не работает Drag&Drop и многие другие функции, включая даже те программы, что мы скачали ранее, они не запустятся без некоторых файлов ОС. Наша задача дополнить ОС нужными файлами. Через 7-Zip откройте скачанные два ISO файла (Windows 10 1507 x32 и Windows 10 21H2 x64), откройте папку sources и прямо в архиваторе откройте файл install.wim или install.esd — формат неважен. Форматы .wim или .esd встречается в разных образах, в одном может быть .wim, в другом .esd, но сути не меняет — это просто архив с ОС.

Внутри архива install как правило должно быть несколько папок с номерами — это разные редакции ОС (Home, Single Language, Pro и т.д.), в каждой редакции имеется полный набор файлов ОС с незначительными отличиями в наборе функционала. Не важно какую именно редакцию вы откроете, потому что набор нужных нам файлов есть в каждом из них.

В архиве переходим в папку install.esd1WindowsSystem32 из которого нужно выгрузить только определенные файлы.

Из образа Windows 10 1507 x32 извлекаем следующие файлы в папку C:BuildPEAddFilesx32WindowsSystem32:


en-USshellstyle.dll.mui
ru-RUexplorerframe.dll.mui
ru-RUole32.dll.mui
ru-RUoledlg.dll.mui
ru-RUshell32.dll.mui
ru-RUshellstyle.dll.mui
ru-RUtaskkill.exe.mui
ru-RUtwinapi.appcore.dll.mui
ru-RUtwinapi.dll.mui
ru-RUtwinui.appcore.dll.mui
ru-RUtwinui.dll.mui
actxprxy.dll
chartv.dll
d3d11.dll
DataExchange.dll
dcomp.dll
ddraw.dll
DXCore.dll
dxgi.dll
ExplorerFrame.dll
glu32.dll
ksuser.dll
oledlg.dll
opengl32.dll
pdh.dll
pdhui.dll
shellstyle.dll
shfolder.dll
taskkill.exe
thumbcache.dll
timeout.exe
twinapi.appcore.dll
twinapi.dll
twinui.appcore.dll
twinui.dll

Из образа Windows 10 21H2 x64 извлекаем следующие файлы в папку C:BuildPEAddFilesx64WindowsSystem32:


en-USshellstyle.dll.mui
ru-RUexplorerframe.dll.mui
ru-RUole32.dll.mui
ru-RUoledlg.dll.mui
ru-RUshell32.dll.mui
ru-RUshellstyle.dll.mui
ru-RUtaskkill.exe.mui
ru-RUtwinapi.appcore.dll.mui
ru-RUtwinapi.dll.mui
ru-RUtwinui.appcore.dll.mui
ru-RUtwinui.dll.mui
actxprxy.dll
chartv.dll
d3d11.dll
DataExchange.dll
dcomp.dll
dxgi.dll
ExplorerFrame.dll
glu32.dll
ksuser.dll
oledlg.dll
OneCoreUAPCommonProxyStub.dll
opengl32.dll
pdh.dll
pdhui.dll
shellstyle.dll
shfolder.dll
taskkill.exe
thumbcache.dll
timeout.exe
twinapi.appcore.dll
twinapi.dll
twinui.appcore.dll
twinui.dll

7. Подготовка ISO

В виртуальной машине мы будем тестировать наши образы Windows PE, но чтобы запустить виртуальную машину, нужно подключить к ней ISO файл со своей Windows PE. Физически невозможно с первого раза создать идеальную Windows PE, т.к. не будут готовы ни ярлыки программам, ни настройки программ, которые делаются после первого запуска Windows PE, потом извлекаются и вносятся во вторую версию, которая уже, может быть, релизной при идеальных обстоятельствах. Каждый раз редактировать тяжелый ISO образ с полноценной ОС — это отнимает больше времени, проще сделать отдельные ISO файлы для дальнейшего неоднократного редактирования, в которых не будет дистрибутива ОС. Через UltraISO открываем скачанные ISO файлы Windows 10 1507 x32 и Windows 10 21H2 x64 и полностью очищаем папку sources. В будущем мы добавим в неё уже отредактированный файл boot.wim. А пока что очищенные ISO файлы сохраняем в папку C:BuildPEISO с именами, например, MyPE1507x32.iso и MyPE21H2x64.iso.

8. Подготовка файла реестра

Некоторые извлеченные файлы из оригинальной ОС не будут работать без определённых ключей в реестре, так что эти файлы бесполезны пока не будут зарегистрированы в реестре и не только (нужно ещё прописать некоторые CLSID и Interface).

Качаем мой набор файлов с github и помещаем содержимое архива в C:BuildPEAddFiles, чтобы каталоги x32 и x64 слились с теми, что были в архиве.

В этом же наборе будут настроенные CLaunch (о чем я писал выше), Explorer++, startnet.cmd, а также пара батников для удобства.

В обоих вариантах (x64 и x32) у нас следующий набор файлов:
Файлы настроек CLaunch:


Program FilesCLaunchDataСИСТЕМАClassic.csd
Program FilesCLaunchDataСИСТЕМАCLaunch.ini
Program FilesCLaunchDataСИСТЕМАClIcons.bin
Program FilesCLaunchDataСИСТЕМАDesign.ini

Ярлыки программ для меню пуск WinXShell:


ProgramDataMicrosoftWindowsStart Menu7zFM.lnk
ProgramDataMicrosoftWindowsStart MenuAutoruns.lnk
ProgramDataMicrosoftWindowsStart MenuExplorer++.lnk
ProgramDataMicrosoftWindowsStart MenuHWiNFO32.lnk
ProgramDataMicrosoftWindowsStart Menuprocexp.lnk
ProgramDataMicrosoftWindowsStart MenuProduKey.lnk
ProgramDataMicrosoftWindowsStart MenuProgramscmd.lnk
ProgramDataMicrosoftWindowsStart MenuProgramsMdSched.lnk
ProgramDataMicrosoftWindowsStart MenuProgramsnotepad.lnk
ProgramDataMicrosoftWindowsStart MenuProgramsregedit.lnk
ProgramDataMicrosoftWindowsStart MenuProgramstaskmgr.lnk

Ярлыки программ для меню пуск WinXShell эксклюзивно для x32, т.к. этих программ нет в x64 версии:


ProgramDataMicrosoftWindowsStart MenuVictoria.lnk
ProgramDataMicrosoftWindowsStart MenuExplorerXP.lnk

Файлы System32:
WindowsSystem32config.xml — файл настроек Explorer++
WindowsSystem32spectraconfig.reg — файл реестра, который настроит ОС и который активирует работу диалоговых окон прогресса копирования и не только
WindowsSystem32startnet.cmd — файл, который Windows PE запустит сразу после запуска, этот файл применит файл реестра, а также запустит CLaunch для удобного запуска своих приложений
WindowsSystem32UI.bat — удобный запуск WinXShell через командную строку при необходимости

По поводу файла startnet.cmd — он уже настроен так, чтобы при запуске показать основные характеристики железа, на котором запущена Windows PE, для стартового понимания за каким железом приходится работать, без необходимости включать HWiNFO. Вы можете обратить внимание что в startnet.cmd какие-то кракозябры, а не кириллица. Дело в том, что если вы хотите, чтобы командная строка показывала вам кириллицу, то нужно перед редактированием этого файла сменить кодировку на OEM 866 (в Notepad++ это: Кодировки > Кириллица > OEM 866), и только после этого набирать текст русскими буквами, в противном случае, не сменив кодировку и написав на кириллице, в cmd вы увидите кракозябры.

Что касаемо файла spectraconfig.reg — он тут ключевой, без него не будут работать Drag&Drop и диалоговые окна проводника. Из-за его длины, я не стал писать его содержимое в теле статьи, к тому же две версии этого файла (x64 и x32), а вывел его на отдельный ресурс, но объяснить его строение вам всё-таки нужно. Для тех, кому интересно, информация ниже в спойлере:

Путеводитель по spectraconfig.reg

Начну с конца файла:
Внутри комментария «Каталог по умолчанию для пользователя СИСТЕМА X:UsersDefault» имеются ключи реестра для переназначения папок пользователя по умолчанию. В Windows PE используется пользователь СИСТЕМА, который хранится в каталоге пользователя WindowsSystem32configsystemprofile, где должен быть каталог Desktop и остальные (которых нет), и без этих каталогов программы выдают ошибки, пытаясь обратиться к несуществующим каталогам, например, к Desktop, чтобы отобразить его в дереве каталогов. Поэтому я сменил путь к пользовательским папкам с %userprofile%Desktop (коим является фактический путь X:WindowsSystem32configsystemprofileDesktop) на X:UsersDefaultDesktop, и по образу и подобию остальные папки пользователя.

Внутри комментария «Твики для удобства» и так всё понятно, т.к. я прокомментировал их в .reg файле. Но как пример, пункт «Отобразить значок „Этот компьютер“ на рабочем столе» очень полезен для WinXShell, чтобы при его включении значок «Этот компьютер» был на своём месте.
Внутри комментария «Ассоциация с 7z» я добавил 7-Zip в качестве приложения по умолчанию для всех типов архивов, которые поддерживает 7-Zip.

Внутри комментария «Notepad++» всё аналогично, как и в 7-Zip. В x32 версию PE я не интегрировал Notepad++ и там нет ассоциации с Notepad++.

Комментарий «Explorer++ проводник по умолчанию» говорит сам за себя).

Внутри комментария «Drag&Drop и окна проводника» я добавил поддержку тем самых полезных функций, без которых Windows PE использовать очень неудобно. Подробнее о них в спойлере ниже.

Я прекрасно понимаю, что статья устареет и для новых версий Windows 10/11 она может быть неактуальной, поэтому для тех, кто хочет понять суть того, как включить Drag&Drop и диалоговые окна проводника, я расскажу по подробней в спойлере:

Как включить Drag&Drop и диалоговые окна проводника

Есть определённые диалоговые окна, например окно процесса копирования/перемещения/удаления файлов. Я постараюсь примитивным языком объяснить, как это работает. Что есть это окно? Это не часть приложения explorer.exe, это какое-то окно, которое хранится в каком-то .dll файла, но даже если вы этот .dll файл скопируете в свою Windows PE, то ОС не будет знать, что с ним делать, почему? Потому что в этом файле есть десятки, а то и сотни, если не тысячи разных окон для разных целей. Нужно дать понять Windows PE что имеется в этом файле. Это делается в 3 этапа:

  1. Устанавливаем на локальный компьютер или виртуальную машину самую свежую версию ОС Windows 10, открываем реестр и для удобства делаем в файлы .reg экспорт двух веток:
    HKEY_LOCAL_MACHINESOFTWAREClassesCLSID
    HKEY_LOCAL_MACHINESOFTWAREClassesInterface
    На выходе будет два файла .reg которые можно открыть через Notepad++ и выполнять поиск нужных ключей.
  2. Находясь в реестре или в Notepad++ (я использую Notepad++ потому что через него удобно копировать ветку, и нет необходимости экспортировать в файл, потом открывать его и копировать…), поочередно запускаем поиск нужных нам Interface (если вы работаете через Notepad++ то вам нужен тот .reg файл который вы экспортировали из ветки HKEY_LOCAL_MACHINESOFTWAREClassesInterface):


    IInterruptedOperationHandler
    IFileOperationProgressSink
    IOperationsProgressDialog
    IOperationStatusTile
    IOperationStatusService
    IOperationStatusSink
    IOperationInterrupt
    IObjectWithCachedState
    IConflictInterrupt

    И находим следующие ветки с их содержимым:


    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}]
    @="IInterruptedOperationHandler"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}]
    @="IFileOperationProgressSink"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}]
    @="IOperationsProgressDialog"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}]
    @="IOperationStatusTile"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1}]
    @="IOperationStatusService"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}]
    @="IOperationStatusSink"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F}]
    @="IConflictInterrupt"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F}ProxyStubClsid32]
    @="{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797}]
    @="IOperationInterrupt"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}]
    @="IObjectWithCachedState"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    Вы можете обратить внимание, что все эти Interface ссылаются на два CLSID: {95E15D0A-66E6-93D9-C53C-76E6219D3341} и {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}. В версии x32 только лишь {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}.

  3. Находясь в реестре или в Notepad++, открываем две ветки тех CLSID, на которые ссылались предыдущие пункты, и находим следующее:


    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}]
    @="PSFactoryBuffer"
    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}InProcServer32]
    @="C:\Windows\System32\OneCoreUAPCommonProxyStub.dll"
    "ThreadingModel"="Both"

    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}]
    @="PSFactoryBuffer"
    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32]
    @="X:\Windows\System32\ActXPrxy.dll"
    "ThreadingModel"="Both"

В итоге нам известны нужные нам файлы для извлечения из полноценной ОС в Windows PE, а так же у нас есть куски реестра которые нужно внести в Windows PE.

Так вот, в будущем, могут изменится адреса, например, IOperationStatusService располагался по адресу {0C3C904A-AD89-4851-9C3D-210C080CEE18}, потом уже {61A969EF-64EA-4C48-BBF5-EEDE3B32BF86}, а сейчас {6D5174EC-F425-4CD9-8643-CF36042987F1}. И если он снова изменится, то вам нужно в реестре запустить поиск IOperationStatusService и найти его по новому адресу, который потребуется вписать вместо того, что указан у меня. Тоже самое касается и остальных. Но и это не всё. Вы можете обратить внимание что все перечисленные Interface (за исключением IConflictInterrupt) ссылаются на CLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}, к которому привязан файл OneCoreUAPCommonProxyStub.dll, а в следующей версии там может быть другой файл, или наоборот, файл тот же, но адрес CLSID уже быть другой, или и файл новый, и адрес. Так что не теряйтесь и ищите если что-то изменилось. Но в худшем случае, может потребоваться новый Interface которого нет в моём списке, тогда уже есть небольшая проблема, найти его будет не просто. И тут остаётся или гуглить, или искать методом тыка. Есть ещё более правильный вариант, зная на какой .dll файл ссылаются Interface, раньше можно было вскрыть файл через программу Resource Hacker или Restorator, и в нём найти все варианты диалоговых окон с их описанием, но, сейчас эти программы не могут вскрыть файлы последних ОС, других программ я не гуглил, да и сам я уже стар для таких расследований.

Интересный факт: если вы загуглите IConflictInterrupt, то

не найдёте ни одной статьи

с упоминанием этого файла (гугл показывает всего одну ссылку на страницу с упоминанием этой строки в .dll файле), а без него, между прочим, не открывается окно замены файлов с одинаковыми именами, и если не прописать IConflictInterrupt, то при конфликте файлов с одинаковыми именами на экране ничего не произойдёт, ОС просто проигнорирует ваш запрос на копирование файлов. Так что IConflictInterrupt очень важен, как минимум его наличие здесь, делает эту статью уникальной.

Немного справки по файлам .dll и реестру:
Для функционирования Drag&Drop обязательно требуются файлы twinapi.dll и DataExchange.dll, CLSID с привязкой к этим .dll, и ключ реестра DragDropExtension.

Для функционирования приложений которые мы собираемся интегрировать в Widnows PE, а также окна прогресса копирования/удаления/перемещения файлов включая окна замены/пропуска файлов с одинаковыми именами обязательно требуются, CLSID с привязкой к .dll и Interface указанные выше, а также почти все те файлы что я указал в начале статьи, возможно, я переборщил и пару «уже ненужных» файлов всё ещё копирую из основной ОС в Widnows PE, и честно признаюсь что не проверял работоспособность нужных мне функций ОС без тех или иных файлов, а всё потому что, что бы проверить это, надо выпилить один файлик, а потом провести проверочных работ на 20 минут, и так с каждым файлом, на что у меня просто нет времени.

9. Подготовка файла редактирования реестра

Этот пункт можно пропустить, он лишь для подстраховки. Лично мне спокойней, когда ряд параметров реестра изменены до включения ОС. Поэтому я вношу самые важные изменения реестра ещё до первого запуска.

Для этого создаём два текстовых файла (для x32 и x64 по отдельности) и вписываем туда следующее:

regexportX64.txt


ClassesCLSID{07fc2b94-5285-417e-8ac3-c2ce5240b0fa}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{07fc2b94-5285-417e-8ac3-c2ce5240b0fa}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{34568a1f-8d5a-4080-99c7-464e2cb40008} setvalue " " "PSFactoryBuffer"
ClassesCLSID{34568a1f-8d5a-4080-99c7-464e2cb40008}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{34568a1f-8d5a-4080-99c7-464e2cb40008}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{53067330-01CE-4027-947F-FF8580E92463}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{53067330-01CE-4027-947F-FF8580E92463}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{6B273FC5-61FD-4918-95A2-C3B5E9D7F581}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{6B273FC5-61FD-4918-95A2-C3B5E9D7F581}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{A1103531-6B1C-425F-A8C9-671616E40FA9}InProcHandler32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{B1AEC16F-2383-4852-B0E9-8F0B1DC66B4D}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{B1AEC16F-2383-4852-B0E9-8F0B1DC66B4D}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{D648FEA1-EA00-4FF4-B8BD-034BD2B25A23}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{D648FEA1-EA00-4FF4-B8BD-034BD2B25A23}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.dll"
ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{B52D54BB-4818-4EB9-AA80-F9EACD371DF8} setvalue " " "Windows Search Platform"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F} setvalue " " "Local Thumbnail Cache"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f} setvalue " " "CLSID_LocalIconCache"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InProcServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2} setvalue " " "CLSID_UIThreadThumbnailCache"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InProcServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6} setvalue " " "PSFactoryBuffer"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue " " "X:WindowsSystem32ActXPrxy.dll"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6} setvalue " " "Shell Name Space ListView"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue " " "%SystemRoot%System32explorerframe.dll"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue " " "%SystemRoot%System32dataexchange.dll"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721} setvalue " " "IInterruptedOperationHandler"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2} setvalue " " "IFileOperationProgressSink"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C} setvalue " " "IOperationsProgressDialog"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8} setvalue " " "IOperationStatusTile"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1} setvalue " " "IOperationStatusService"
ClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82} setvalue " " "IObjectWithCachedState"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C} setvalue " " "IImmersiveShellBroker"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61} setvalue " " "IOperationStatusSink"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F} setvalue " " "IConflictInterrupt"
ClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797} setvalue " " "IOperationInterrupt"
ClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
MicrosoftOleExtensions setvalue "DragDropExtension" "{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}"
ClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341} setvalue " " "PSFactoryBuffer"
ClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}InProcServer32 setvalue " " "X:WindowsSystem32OneCoreUAPCommonProxyStub.dll"

regexportX32.txt

ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.dll"
ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{B52D54BB-4818-4EB9-AA80-F9EACD371DF8} setvalue " " "Windows Search Platform"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F} setvalue " " "Local Thumbnail Cache"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f} setvalue " " "Local Icon Cache"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InprocServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2} setvalue " " "Local Thumbnail Cache"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InprocServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6} setvalue " " "PSFactoryBuffer"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue " " "X:WindowsSystem32ActXPrxy.dll"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6} setvalue " " "Shell Name Space ListView"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue " " "%SystemRoot%System32explorerframe.dll"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue " " "%SystemRoot%System32dataexchange.dll"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721} setvalue " " "IInterruptedOperationHandler"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2} setvalue " " "IFileOperationProgressSink"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C} setvalue " " "IOperationsProgressDialog"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8} setvalue " " "IOperationStatusTile"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{0C3C904A-AD89-4851-9C3D-210C080CEE18} setvalue " " "IOperationStatusService"
ClassesInterface{0C3C904A-AD89-4851-9C3D-210C080CEE18}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82} setvalue " " "IObjectWithCachedState"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C} setvalue " " "IImmersiveShellBroker"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61} setvalue " " "IOperationStatusSink"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{7CCBC4D6-7AC7-415C-B5BE-FAF75D8A1E85} setvalue " " "IConflictInterrupt"
ClassesInterface{7CCBC4D6-7AC7-415C-B5BE-FAF75D8A1E85}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{FEE9E8EA-1D4B-4076-88B1-CCCAAEC1C8AA} setvalue " " "IOperationInterrupt"
ClassesInterface{FEE9E8EA-1D4B-4076-88B1-CCCAAEC1C8AA}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
MicrosoftOleExtensions setvalue "DragDropExtension" "{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}"

И сохраняем эти файлы в папке C:BuildPEutil

10. Подготовка виртуальной машины

Необходимо скачать и установить виртуальную машину. Учитывая что нам необходима лишь одновременно запущенная одна виртуальная машина, то достаточно будет VMware Workstation Player, но вы можете использовать и другую на своё усмотрение, например, VirtualBox.

Я не буду расписывать как устанавливать виртуальную машину, думаю тут ничего сложного несколько раз нажать «Далее», а вот как её настроить:

  • Запускаем VMware Workstation Player и нажимаем Create a New Virtual Machine.
  • Пропускаем выбор установочного носителя нажав I will install the operating system later.
  • Выбираем Windows 10 and later x64 и нажимаем Next. Примечание: при создании образа x32 вы можете использовать эту же виртуальную машину, в настройках поменяв с Windows 10 and later x64 на Windows 10.
  • На своё усмотрение указываем имя виртуальной машины и путь, где она будет хранится.
  • На своё усмотрение указываем объем виртуального диска, нам потребуется буквально несколько мегабайт, но на всякий случай лучше указать, например, 2Гб. При указании объема лучше всего выбрать Store virtual disk as a single file, это облегчит задачу, когда мы будем извлекать из диска нужные файлы.
  • На этом этапе виртуальная машина готова, но надо её ещё настроить. Итак, в списке виртуальных машин выберите только что созданную и нажмите на Edit virtual machine settings.

Укажите следующие параметры:

  • Объем оперативной памяти на своё усмотрение, для комфортной работы желательно не менее 2-4Гб, у меня стоит 6Гб.
  • Количество выделяемых потоков для виртуальной машины, для комфортной работы желательно не менее двух, у меня стоит 4.
  • В CD/DVD выбираем Use ISO image file и указываем файл C:BuildPEISOMyPE21H2x64.iso

Машина готова для запуска, но подключенный к ней .iso файл пока не готов. И об этом в следующем разделе. Начинается самое интересное.

Итак, у нас всё готово для начала сборки своего PE образа!

II. Редактирование WIM и ISO

1. Редактирование WIM

Открываем от имени администратора Среду средств развертывания и работы с образами и списываем следующие команды:

*для новичков* отобразить редакции в .wim файле чтобы понимать с чем вы работаете
Dism /Get-WimInfo /WimFile:"C:BuildPEoriginalWIMx64boot.wim"
на всякий случай отключаем .wim файлы если они ранее были подключены
DISM /Cleanup-Wim
в отдельный файл экспортируем из boot.wim вторую редакцию которой является Microsoft Windows Setup (x86), наличие второго файла сохраняет оригинал на всякий случай для дальнейших повторных сборок, а их будет не мало — работа над ошибками
Dism /export-image /SourceImageFile:C:BuildPEoriginalWIMx64boot.wim /SourceIndex:2 /DestinationImageFile:C:BuildPEedit.wim /Compress:max /CheckIntegrity
монтируем образ для внесения изменений
dism.exe /mount-wim /wimfile:C:BuildPEedit.wim /mountdir:C:BuildPEMount /index:1
на этом этапе сворачиваем «Среду средств развертывания и работы с образами», но не в коем случае не закрываем!

прав администратора недостаточно для удаления лишних файлов в образе. чтобы повысить себе плава ещё выше, я обычно запускаю от имени администратора Explorer++, открываю папку, например, C:BuildPE и находясь в ней нажимаю на , после чего у меня открывается командная строка в которой я ввожу следующие команды:

удаляем программу установки ОС


erase C:BuildPEMountSetup.exe
takeown /F C:BuildPEMountsources*.* /A
rd C:BuildPEMountsources /s/q

создаём каталог «Рабочий стол» для пользователя СИСТЕМА без которого Explorer++ может выдавать ошибку
mkdir C:BuildPEMountWindowsSystem32configsystemprofileDesktop
удаляем ненужные ярлыки из меню Пуск чтобы не видеть их в меню WinXShell

rd "C:BuildPEMountProgramDataMicrosoftWindowsStart MenuPrograms" /s/q
rd "C:BuildPEMountUsersDefaultAppDataRoamingMicrosoftWindowsStart MenuPrograms" /s/q

переходим в каталог, где хранится offlinereg и вносим изменения в реестр

cd /d C:BuildPEutilofflinereg
offlinereg-win64 C:BuildPEMountWindowsSystem32configSOFTWARE " " run C:BuildPEutilregexportX64.txt

копируем весь набор своего софта+доп файлы для ОС
xcopy /y /o /e "C:BuildPEAddFilesx64*.*" "C:BuildPEMount*.*"
удаляем лишние логи [дело привычки]


CD /D C:BuildPEMountWindowsSystem32config
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountWindowsSystem32SMIStoreMachine
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountUsersDefault
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F

возвращаемся в «Среду средств развертывания и работы с образами»
размонтируем образ
Dism /Unmount-Image /MountDir:"C:BuildPEMount" /commit
отключаем .wim файл
DISM /Cleanup-Wim
экспортируем готовый образ в новый .wim файл с целью избавится от папки [DELETED] который создаётся после редактирования .wim файла
DISM /export-image /sourceimagefile:C:BuildPEedit.wim /sourceindex:1 /destinationimagefile:C:BuildPECOMPLETE64boot.wim /compress:maximum
удаляем .wim файл в котором происходили изменения
erase C:BuildPEedit.wim

Те же команды для удобства копипаста

В «Среде средств развертывания и работы с образами»

Dism /Get-WimInfo /WimFile:"C:BuildPEoriginalWIMx64boot.wim"
DISM /Cleanup-Wim
Dism /export-image /SourceImageFile:C:BuildPEoriginalWIMx64boot.wim /SourceIndex:2 /DestinationImageFile:C:BuildPEedit.wim /Compress:max /CheckIntegrity
dism.exe /mount-wim /wimfile:C:BuildPEedit.wim /mountdir:C:BuildPEMount /index:1

В cmd Explorer++

erase C:BuildPEMountSetup.exe
takeown /F C:BuildPEMountsources*.* /A
rd C:BuildPEMountsources /s/q
mkdir C:BuildPEMountWindowsSystem32configsystemprofileDesktop
rd "C:BuildPEMountProgramDataMicrosoftWindowsStart MenuPrograms" /s/q
rd "C:BuildPEMountUsersDefaultAppDataRoamingMicrosoftWindowsStart MenuPrograms" /s/q
cd /d C:BuildPEutilofflinereg
offlinereg-win64 C:BuildPEMountWindowsSystem32configSOFTWARE " " run C:BuildPEutilregexportX64.txt
xcopy /y /o /e "C:BuildPEAddFilesx64*.*" "C:BuildPEMount*.*"
CD /D C:BuildPEMountWindowsSystem32config
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountWindowsSystem32SMIStoreMachine
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountUsersDefault
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F

В «Среде средств развертывания и работы с образами»

Dism /Unmount-Image /MountDir:"C:BuildPEMount" /commit
DISM /Cleanup-Wim
DISM /export-image /sourceimagefile:C:BuildPEedit.wim /sourceindex:1 /destinationimagefile:C:BuildPECOMPLETE64boot.wim /compress:maximum
erase C:BuildPEedit.wim

Готово! .WIM образ Windows 10 PE 21H2 x64 создан, осталось лишь занести его в .iso файл и можно пробовать первую заготовку. Теперь тоже самое можно повторить и для Windows 10 PE 1507 x32, но на этот раз я уберу комментарии дабы проще было копировать:

В «Среде средств развертывания и работы с образами»

Dism /Get-WimInfo /WimFile:"C:BuildPEoriginalWIMx32boot.wim"
DISM /Cleanup-Wim
Dism /export-image /SourceImageFile:C:BuildPEoriginalWIMx32boot.wim /SourceIndex:2 /DestinationImageFile:C:BuildPEedit.wim /Compress:max /CheckIntegrity
dism.exe /mount-wim /wimfile:C:BuildPEedit.wim /mountdir:C:BuildPEMount /index:1

В cmd Explorer++


erase C:BuildPEMountSetup.exe
takeown /F C:BuildPEMountsources*.* /A
rd C:BuildPEMountsources /s/q
mkdir C:BuildPEMountWindowsSystem32configsystemprofileDesktop
rd "C:BuildPEMountProgramDataMicrosoftWindowsStart MenuPrograms" /s/q
rd "C:BuildPEMountUsersDefaultAppDataRoamingMicrosoftWindowsStart MenuPrograms" /s/q
cd /d C:BuildPEutilofflinereg
offlinereg-win64 C:BuildPEMountWindowsSystem32configSOFTWARE " " run C:BuildPEutilregexportX32.txt
xcopy /y /o /e "C:BuildPEAddFilesx32*.*" "C:BuildPEMount*.*"
CD /D C:BuildPEMountWindowsSystem32config
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountWindowsSystem32SMIStoreMachine
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountUsersDefault
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F

В «Среде средств развертывания и работы с образами»

Dism /Unmount-Image /MountDir:"C:BuildPEMount" /commit
DISM /Cleanup-Wim
DISM /export-image /sourceimagefile:C:BuildPEedit.wim /sourceindex:1 /destinationimagefile:C:BuildPECOMPLETE32boot.wim /compress:maximum
erase C:BuildPEedit.wim

Готово! .WIM образ Windows 10 PE 1507 x32 создан, осталось лишь занести его в .iso файл и можно пробовать первую заготовку.

2. Редактирование .iso

С помощью UltraISO открываем наши .iso файлы, и в папку sources и вставляем наши только что испеченные файлы C:BuildPECOMPLETEx64boot.wim в C:BuildPEISOMyPE21H2x64.iso и C:BuildPECOMPLETEx32boot.wim в C:BuildPEISOMyPE1507x32.iso, и сохраняем оба .iso файла.

Далее я буду рассказывать всё лишь в варианте Windows 10 PE 21H2 x64 т.к. дальнейшие шаги один в один, а не чуть-чуть отличаемые как прежних пунктах, где можно было что-то напутать «на замыленный глаз».

3. Первый запуск WinPE и настройка

Открываем VMware Workstation Player и выбираем нашу виртуальную машину, она уже настроена и готова для запуска, и можно её включать, нажав Play virtual machine. При появлении надписи Press any key to boot from CD or DVD нажимаем любую клавишу и ждём окончания загрузки.

Что мы видим? Командную строку с перечислением каких-то характеристик железа виртуальной машины. А где меню? А где графический интерфейс? Сейчас всё будет. Вы можете вызвать либо CLaunch путем нажатия комбинации клавиш Win+Z, либо запустить графический интерфейс WinXShell путем ввода в командную строку UI.bat или открыв CLaunch и нажав на соответствующий пункт.

image

Мы уже интегрировали в Windows PE нужные нам программы, некоторым программам не нужны никакие настройки, но некоторым они обязательны, и теперь мы можем их настроить чтобы получить файл настроек, затем сохранить его на отдельном виртуальном диске для дальнейшего извлечения в папку C:BuildPEAddFiles… для дальнейшего создания второй версии своей Windwos PE в которой программы уже будут настроены так, как нам надо.

Чтобы сохранить файлы, нужен виртуальный диск, мы его подключили, но не форматировали. Поэтому с этого и начнём.

В запущенной Windwos PE в открытой командной строки вводим следующие команды:

diskpart
select disk 0
create partition primary
format quick override
assign
exit

После чего у нас будет диск С. Если вы сделали его объемом 2Гб, то хоть объём у него и небольшой, но нам и этого более чем достаточно т.к. необходимо скопировать лишь несколько конфигов объемом как правило менее 1Мб.

  1. Настройка CLaunch — Эта программа уже настроена в большей степени, но вы можете увеличить количество пунктов дополнив их своими программами, а также добавить дополнительные вкладки, настроить размеры окна, горячую клавишу вызова меню и т.д. После закрытия программы через Alt+F4 она сохранит все настройки внутри своего же каталога X:Program FilesCLaunchData которые вы можете скопировать на диск C: воспользовавшись проводником Explorer++ который вы можете включить либо через заранее настроенный CLaunch, либо прописать в командной строке explorer++.
  2. Настройка меню Пуск WinXShell — В Explorer++ откройте диск X:Program Files и сделайте ярлыки нужных вам программ, все созданные ярлыки вы можете скопировать на диск C:.
  3. Настройка Notepad++ — после настройки Notepad++ все свои файлы настроек он хранит по адресу X:UsersDefaultAppDataRoamingNotepad++ которые также можно скопировать на диск C:

По окончанию всех работ по настройке программ и созданию ярлыков, а быть может вы и батники какие-нибудь создавали, вы можете выключить виртуальную машину, и с помощью 7-Zip открыть файл виртуального диска который находится там где вы указали адрес виртуальной машины при её создании, например, C:Users%username%Virtual MachinesVHDBuildMyPE.vmdk, открыв .vmdk файл извлеките из него все конфигурации что вы создали и распределите по нужным каталогам для создания финального образа (эх, если бы всё так было просто):
Все созданные ярлыки для меню пуск извлечь в каталог C:BuildPEAddFilesx64ProgramDataMicrosoftWindowsStart Menu
Настройки CLaunch извлечь в каталог C:BuildPEAddFilesx64Program FilesCLaunchData
Настройки Notepad++ извлечь в каталог C:BuildPEAddFilesx64UsersDefaultAppDataRoamingNotepad++
Если вы перенастраивали Explorer++, то его настройки хранятся там же где и .exe файл, а в нашем случае это C:BuildPEAddFilesx64WindowsSystem32

Я не просто так показал пример с настройками, дело в том, что новички могут не сразу понять, что куда копипастить, а тут сразу 2 варианта:

  1. Программа хранит настройки в своей отдельной папке
  2. Программа хранит настройки рядом с своим .exe
  3. Программа хранит настройки в AppData
  4. Тут ещё не хватает варианта, когда программа хранит настройки в реестре, и тут уже гугл в помощь, а то для этой цели и так очень длинная статья сильно разрастется.

Ну чтож, на этом этапе мы готовы создать вторую версию образа. Для этого удаляем или переименовываем .wim файл C:BuildPECOMPLETEx64boot.wim, чтобы на его месте создать новый, и полностью повторяем шаг II.1 и II.2. Запускаем виртуальную машину и проверяем результат своих работ, находим ошибки, исправляем, и снова, и снова, и снова создаём новую версию образа до тех пор, пока не будет идеальный для вас вариант.

Надеюсь, моя статья оказалась для вас полезна. Она, конечно, достаточно занудна, но я решил, что уж лучше один раз доходчиво всё объяснить, чем оставить людей без какой-то ценной информации, которую можно искать годами.

P.S.

У меня была ситуация, когда был ноутбук, у которого исправно загружается ОС, и после того, как пропадает логотип Windows и перед тем, как начнется загрузка пользователя, появляется пауза длиной в 1-3 минуты. И как задать вопрос поисковику? Черный экран после загрузки ОС? Любой поисковик будет думать, что дело в том, что компьютер вообще не загружается и черный экран висит всё время после старта, выдан миллиард страниц на эту тему, а подойдёт по теме лишь единицы, которые даже не первых 100 страниц поиска (я проверял). Выходит, какими бы умными не были поисковики, а вот такие уточнения они ещё не скоро начнут понимать. Я сам задавал этот запрос в течении долгого времени, перелистал без шуток, сотни страниц, и по великой случайности, уже не через поисковики, а по темам форумов, перескакивая с одного форума на другой, как темы при разговоре с интересным человеком, в итоге нашел ответ на свой вопрос. Дело было в ULPS, который нужно было отключить в реестре. Это я всё к чему. С созданием Windows PE такая же ситуация, и например, чтобы сделать рабочим окно копирования в последних версиях ОС, нужно сделать то, о чем не знает даже Google, а как уж задать вопрос, это ещё сложнее. Собственно, именно это и стало причиной написать эту статью, раз уж другие умельцы об этом не пишут, хотя на торрентах свои работы выкладывают:)

III. Интеграция пакетов и драйверов

В начале статьи я обещал рассказать о интеграции дополнительных пакетов которые мы так и не установили в наш образ. Cкачиваем и дополнительно устанавливаем надстройку Windows PE для Windows ADK.

Допустим вам необходимо добавить NetFX, делаем следующее:
В уже смонтированном образе в пункте II.2 перед командой Dism /Unmount-Image /MountDir:«C:BuildPEMount» /commit вводим следующие команды:

Dism /Add-Package /Image:"C:BuildPEMount" /PackagePath:"C:Program Files (x86)Windows Kits10Assessment and Deployment KitWindows Preinstallation Environmentamd64WinPE_OCsWinPE-WMI.cab"
Dism /Add-Package /Image:"C:BuildPEMount" /PackagePath:"C:Program Files (x86)Windows Kits10Assessment and Deployment KitWindows Preinstallation Environmentamd64WinPE_OCsWinPE-NetFX.cab"

Найти полный список дополнительных пакетов, а также узнать зависимости этих пакетов, вы сможете на этой странице.

Допустим вам необходимо интегрировать драйвер (например, линий PCI и накопителей SSD для MacBook последних лет чтобы вручную каждый раз их не устанавливать на рабочей ОС WinPE), то вводим следующую команду
Dism /image:C:BuildPEMount /Add-Driver /Driver:C:BuildPEDrv*.inf
Где * — это или все драйвера что есть в каталоге C:BuildPEDrv, или замените *, на имя конкретного файла драйвера.

Всем спасибо!

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

Для чего вам потребуется Windows PE?

Windows PE (Windows Preinstallation Environment) — Среда предустановки Windows, с ограниченными службами, построенная на ядре обычный Windows . Она используется для подготовки компьютера к установке Windows, копирования образа Windows с сетевого файлового сервера и запуска установки Windows. Она является встроенным элементом других средств установки и восстановления системы, например программы установки для Windows , служб развертывания Windows (WDS), пакета средств развертывания операционной системы (OS) SCCM сервера и среды восстановления Windows (Windows RE). Изначально среда Windows PE была создана для того, чтобы помочь производителям оборудования, сборщикам систем и корпорациям загружать компьютер без работающей операционной системы. Таким образом, PE чаще всего запускают или с внешнего накопителя или же по сети с WDS/TFTP сервера компании.

Да, не надо путать Windows PE и Windows RE. Windows RE (Recovery Environment) — среда для восстановления Windows после сбоя. Однако, Windows RE как набор инструментов можно запустить из-под PE. И тут возникает мысль: а почему бы не использовать PE для задач восстановления упавших систем, интегрировав в PE необходимые приложения? Да, именно это нам и нужно.

Какие задачи мы сможем выполнять под ней:

  • управление разделами жесткого диска с помощью утилиты Diskpart или сторонних средств;
  • захват томов в WIM-образ с помощью утилиты ImageX и их сохранение на другой раздел жесткого диска или USB-диск;
  • применение WIM-образов к разделу имеющегося жесткого диска с помощью утилиты ImageX и её разновидностей;
  • запуск автоматической установки Windows используя скрипты и файлы ответов XML;
  • копирование и замену файлов, а также правку реестра установленной операционной системы, если она не загружается;
  • диагностировать неисправности оборудования;
  • бороться с вирусами используя различные антивирусные утилиты для Windows PE.

Особую ценность для диагностики и восстановления операционной системы Windows PE приобретает при включении в ее состав набора Microsoft Diagnostics and Recovery Toolset (MS DaRT), который можно скачать и интегрировать в образ Windows PE. По сути вся операционная система запаковывается в один файл — WIM формата, который при запуске с носителя распаковывается в оперативную память (RAM-disk, обычно диск X:). Вот основные особенности PE:

  • Все изменения в реестре Windows PE во время ее выполнения будут потеряны при следующей перезагрузке компьютера. Постоянные изменения в реестр можно внести только в автономном режиме до запуска Windows PE.
  • Буквы дисков присваиваются последовательно, по мере создания разделов в среде Windows PE. Однако при перезагрузке Windows PE все присвоенные буквы возвращаются к порядку по умолчанию.
  • Для установки 64-разрядной версии Windows необходимо использовать 64-разрядную версию Windows PE. Точно так же для установки 32-разрядной версии Windows необходимо использовать 32-разрядную версию Windows PE.
  • Все приложения Windows PE должны или быть интегрированы в образ PE и зарегистрированы в её реестре или же быть portable (не требующими установки). В большинстве случае все не-Microsoft приложения — portable: при распуске распаковываются на RAM диск в оперативной памяти.
  • При запуске Windows PE с носителя, доступного только для чтения, например с компакт-диска, среда Windows PE сохраняет кусты реестра в памяти, позволяя приложениям производить запись в реестр. Все изменения, внесенные в реестр приложениями, не сохраняются для использования в других сеансах Windows PE.

Собственно классический Windows PE — это среда от компании Microsoft, ядро которой зависит от версии PE, которую вы скачаете:

  • Windows PE 2.0 — Windows Vista
  • Windows PE 3.1 — Windows 7 SP1
  • Windows PE 4.0 — Windows 8
  • Windows PE 5.0 — Windows 8.1
  • Windows PE 10.0 — Windows 10

«Голая» Windows PE весьма урезана в своих возможностях и по большей части опирается на интерфейс командной строки, где вы можете запускать любые сервисные утилиты, входящие в образ PE. Набор интегрированных приложений и команд зависит от версии. Также обратите внимание, что для развертывания той или иной ОС на диск вам нужна PE версии не ниже, чем разворачиваемая ОС. То есть для установки на целевой компьютер Windows 10 из-под PE вам потребуется PE версии не ниже чем 10.0, потому что для этого используется утилита DISM соответствующей версии. Также от версии к версии меняется поддержка версий платформы .NET и версий Powershell.

Но помимо классический Windows PE существует большое количество альтернативных сборок PE (более 300), основанных на том же ядре, но с графическим интерфейсом и большим набором программ. Существуют даже готовые среды от производителей того или иного ПО, которые содержат их утилиты.

Win PE от вендоров:

  • AOMEI Windows PE — включает утилиты от AOMEI и позволяет добавить свои portable приложения, файлы и драйверы
  • Acronis Bootable Media (Boot CD) — утилиты от Acronis, позволяет интегрировать драйвера. Есть версия Live CD основанная на ядре Linux, есть на WinPE.
  • Dr.Web LiveDisk — загрузочная среда для лечения от вирусов
  • Kaspersky Rescue Disk
  • Paragon Rescue Kit 
  • Lazesoft Recovery Suite Home Edition
  • EaseUS Todo Backup WinPE

Это далеко не полный список, но те системы, которые наиболее на слуху. Каждый полезен, у каждого свои преимущества. А список кастомных сборок от разных энтузиатов просто море:

  • BartPE — загрузочный диск, построенный на основе дистрибутива Windows XP/2003. Все начиналось с него, тогда не было альтернатив, все последующие сборки брали с нее пример. Сейчас имеет смысл только на очень слабых старых ПК. Чтобы быстро создать такой диск, можно воспользоваться готовой утилитой PEBuilder. Такую сборку записывали на CD диск, она весила несколько сот мегабайт, отсюда пошел термин Windows Live CD.
  • Ieshua’s Live DVD/USB и (Y)PE by Yurkesha — самые популярные отечественные сборки на основе BartPE.
  • RusLive by Nikzzzz — Windows Live CD для очень старых  ПК на базе Windows XP, запускался на 128 МБ RAM
  • WinPE5 TechAdminPE — проект загрузочной флэшки для системных администраторов
  • AdminPE — проект загрузочной флэшки для системных администраторов на базе PE 5.1 и 10.0
  • WinPE Sergei Strelec — один из лучших, если не лучший проект Windows 10 и 8 PE, который есть сейчас
  • MultiBoot 2k10 by conty9 & Viktor Kisel — Мультизагрузочный диск системного администратора, базируется на загрузчиках BOOTMGR (Windows 8.1.1), Isolinux/Syslinux v.4.06 и Grub4Dos v.0.4.5c. Диск состоит из большого количества продуктов, обьединённых оболочкой, с возмoжностью загрузки c CD/DVD, USB Flash Drive, USB-HDD и обычного HDD. На мой взгляд, это лучший Windows PE проект на данный момент.
  • Gandalf’s Win10PE — лучший зарубежный проект

Перечислять можно долго, но если вам нужен готовый вариант WinPE на современном ядре, выберите что-то списка выше. Я бы рекомендовал или проект Стрельца или Conty9. Если вас не устроит набор утилит в сборке — посмотрите в сторону TechAdminPE или AdminPE. Если же вам хочется создать свои набор, то читайте дальше.

Как устроен и работает Windows PE

Как уже было сказано выше, чистый Win PE — это командная строка. По сути PE — это один файл boot.wim и ряд служебных, передающих ему управление и позволяющих его загрузить.

Диспетчер загрузки bootmgr позволяет выполнить загрузку как с обычного системного диска, так и из загрузочных образов, виртуальных дисков, загрузку с использованием загрузчиков других операционных систем. Содержимое типового диска аварийного восстановления на базе WinPE:

  • Файл корневого раздела bootmgr — это файл диспетчера загрузки.
  • Папка BOOT — содержит файл bcd — данные конфигурации загрузки, файл boot.sdi, необходимый для создания виртуального электронного диска в оперативной памяти, ссылка на который имеется в конфигурации BCD, и файл шрифтов, используемый диспетчером загрузки bootfix.bin
  • Папка SOURCES, содержащая файл образа загружаемой системы boot.wim. Поскольку конфигурация загрузки BCD для созданного диска восстановления Windows уже настроена на выполнение загрузчиком bootmgr загрузки из образа boot.wim, то для создания загрузочной флэшки достаточно просто скопировать все перечисленные файлы и папки, выполнить запись загрузочных секторов MBR и PBR, а также установить признак активности раздела. Все это можно выполнить стандартными средствами Windows 7 — с использованием утилит командной строки bootsect.exe и diskpart.exe.

Процесс загрузки Windows PE проходит следующие этапы:

  1. Выполняется загрузка с использованием загрузочного сектора определенного носителя. Управление передается программе Bootmgr. Bootmgr извлекает основные сведения загрузки из данных конфигурации загрузки и передает управление программе winload.exe, содержащейся в Boot.wim. Затем Winload.exe загружает необходимый уровень HAL (Hardware Abstraction Layer) и загружает куст системного реестра и необходимые драйверы загрузки. После завершения загрузки она подготавливает среду для выполнения ядра Ntoskrnl.exe.
  2. Выполняется программа Ntoskrnl.exe, которая завершает установку среды. Управление передается модулю Session Manager (SMSS).
  3. Модуль SMSS загружает остальную часть реестра, настраивает среду для запуска подсистемы Win32 (файл Win32k.sys) и ее различных процессов. Модуль SMSS загружает процесс Winlogon, чтобы создать сеанс пользователя, а затем запускает службы, остальные второстепенные драйверы устройств и подсистему безопасности (LSASS).
  4. Winlogon.exe выполняет установку, основываясь на значении реестра HKLMSYSTEMSetupCmdLine. Winpeshl.exe запустит %SYSTEMDRIVE%sourcessetup.exe, если этот файл существует, в противном случае программа Winpeshl.exe будет искать приложение, указанное в файле %SYSTEMROOT%system32winpeshl.ini. Если приложение не указано, будет выполнена команда cmd /k %SYSTEMROOT%system32startnet.cmd. По умолчанию Windows PE содержит файл Startnet.cmd, который запускает программу Wpeinit.exe. Wpeinit.exe загружает сетевые ресурсы и координирует свою работу с сетевыми компонентами, такими как DHCP.
  5. Wpeinit.exe устанавливает устройства PnP, обрабатывает параметры Unattend.xml и загружает сетевые ресурсы. После выполнения Wpeinit.exe отобразится окно командной строки. Процесс загрузки Windows PE завершен.

Программе wpeinit можно сообщить файл ответов Unattend.xml, в котором будут указаны различные настройки пользовательского интерфейса системы. Служебная программа Wpeutil — это средство командной строки, которое позволяет выполнять различные команды в сеансе Windows PE. Например, можно завершить работу компьютера или перезапустить Windows PE, включить или отключить брандмауэр, задать языковые параметры и настроить сеть. Средство настройки региональных параметров (Intlcfg.exe) используется для изменения языка и региональных настроек, шрифтов и параметров ввода образа Windows. Обычно Intlcfg.exe запускается после применения одного или нескольких пакетов поддержки языков к образу Windows. О других системных командах можно почитать на Technet.

В кастомизированных сборках все намного сложнее. Там происходит не только запуск командной строки, но и запуск графического интерфейса explorer.exe, а также массы кастомизированных скриптов и приложений. Все же хотите создать свой Windows PE? — Пожалуйста.

Методика создания своего Windows PE

Итак, подхода три:

  1. Создать мультизагрузочную флэшку или диск с меню на базе загрузчика GRUB или Syslinux, где каждый пункт будет запускать свой LiveCD или WinPE.
  2. Создать свой WinPE, напичкав его своими драйверами, утилитами, приложениями, скриптами.
  3. Создать Windows PE средствами MDT (Microsoft Deployment Toolkit). Этот способ самый удобный, но самый сложный и требующий времени на изучение MDT.

Первый вариант рассмотрен в конце нашей статьи о загрузчиках. Мы пойдем другим путем.

Подготовка Windows PE своими руками

Откуда взять необходимое? Windows PE является частью свободно распространяемого Windows ADK. Версия PE соответствует версии ADK. Скачать ADK можно с сайта Microsoft. Обратите внимание, что для Windows 7 ADK ранее назывался WAIK. Итак, план действий:

  1. Скачать и установить ADK. Не забудьте скачать правильную версию нужной разрядности. Хотите ставить Windows x64 из WinPE — тащите 64-битный ADK.
  2. Скопировать необходимые для PE файлы из ADK в заранее подготовленную пустую папку. В ADK входит удобный файл copype.cmd, который делает эту работу одной командой.
  3. Подключите с помощью DISM образ (смонтируйте его в пустую подпапку)
  4. Добавьте все необходимые пакеты, программы, модули, драйвера, используя dism
  5. Добавьте свои папки, утилиты
  6. Настройте запуск свои приложений или скриптов. Укажите в файле startnet.cmd программы, которые вы хотите запустить автоматически. Или же можно задать собственную оболочку или список запускаемых приложений вместо командной строки в файлике WindowsSystem32winpeshl.ini. Если ваша оболочка будет лежать в в папке Shell диска, то код будет выглядеть так:

    [LaunchApp]

    AppPath = %SystemDrive%Shellmyshell.exe

  7. Создайте свой файл ответов для запускаемого wpeinit -unattend=<путьФайлОтветов.xml>. Примеры xml можно посмотреть здесь.
  8. Сохраните изменения в WIM файл через dism с ключом /commit
  9. Переименуйте winpe.wim (дефолтное имя) в boot.wim
  10. Запишите содержимое папки образа на загрузочный носитель любым способом. Существует встроенная в ADK утилита для создания носителя (media) — Makewinpemedia. О ней можно почитать на MSDN.

Все, образ готов. Конечно, уйдет немало времени для отладки всего этого, но в целом процесс не такой сложный. Можете надергать готовые PE приложения из других готовых сборок и добавить в свою. Детали процесса подготовки и добавления приложений я описывать не буду, таких описаний в сети тьма.

Полуавтоматизированная сборка Windows PE

И как обычно в конце я предлагаю вариант для тех, кто по тем или иным причинам не достиг желаемого результата своими руками. Существует спасительный конструктор, который называется WinBuilder, который позволяет собрать дистрибутив Windows PE путем интегрирования готовых модулей (проектов) и портативных программ, скачиваемых с web сайта проекта автоматически. Дело в том, что это свободно распространяемый проект, который включает массу других подпроектов, сделанных на его базе, по сути это агрегатор проектов, написанных на Java в рамках одной концепции. Все, что вам требуется — выбрать готовые проекты и скачать их с сети, они включают в себя даже набор готовых приложений, а затем скомпилировать. Установка ADK все равно требуется.

К сожалению, я данным проектом полная неразбериха, и не существует полноценной документации. Все статьи в интернете более не актуальны. Основной проект по обновления платформы WinBuilder, как таковой, умер, но в рамках него существует несколько самостоятельно развивающих проектов. В связи с этим не скачивайте приложение Winbuilder 082 с официального сайта, оно ссылается на умершие проекты, поэтому не работает.

Вам нужно выбрать между 4 проектами:

  • Win7PE SE — The Win7PE SE project provides a basis for building a PE environment using Windows 7 or Windows Vista sources. A fork of Multi 7PEs.
  • Win8PE SE — The Win8PE SE project provides a basis for building a PE environment using a Windows 8 source and supports both x86 and x64 architectures.
  • Win8.1PE SE — The Win8.1PE SE project provides a basis for building a PE environment using a Windows 8.1 source and supports both x86 and x64 architectures.
  • Win10PE SE — Live CD/DVD that can be built from Windows 10 sources and supports both x86 and x64 architectures.

У каждого из этих проектов есть самостоятельный сайт, на котором хранятся пакеты и подпроекты, относящиеся к этому проекту. Вам необходимо скачать ZIP архив с каждого из этих сайтов, который содержит соответствующее приложение и набор основных модулей — ссылка доступна на первой странице каждого из этих сайтов. Например, для Win7PE SE это http://w7pese.cwcodes.net/Compressed/index.php.

Скачав архив, распакуйте его и запустите приложение Builder SE.exe. Далее, действуйте по инструкции: укажите Source с установочными файлами ОС (там должен быть install.wim), настройте подпроекты (у каждого есть страница настроек) и запустите сборку проекта.

[Посещений: 25 398, из них сегодня: 2]

Создаем реаниматор на базе Windows PEWindows PE. Возможно вы слышали это название, а возможно и нет, хотя вполне вероятно, что пользовались данной версией Windows даже не подозревая об этом. Фактически это не отдельная редакция операционной системы вроде Windows 7 Professional или Windows 10 Home, а упрощенная версия, о чем и свидетельствует ее название Preinstallation Environment. Что можно перевести как «предустановочная среда» или «среда предустановки».

Если вы самостоятельно устанавливали Windows, то уже имели дело с Windows PE, так как на ней основаны первые этапы установки операционной системы. Также на Windows PE работает среда восстановления, к которой можно обратиться в случае возникновения каких-либо проблем в системе.

Особенности Windows PE

О возможностях Windows PE можно узнать на официальном сайте Майкрософт.

Windows PE — это небольшая операционная система, используемая для установки, развертывания и восстановления Windows для настольных компьютеров.

Ее требования к оборудованию практически ничем не отличаются от обычной Windows, но основное ее преимущество заключается в том, что для ее запуска не требуется жесткий диск. Базовая версия Windows PE построенная на Windows 10 требует не более 512 Мб памяти и поэтому может быть запущена как с флешки, так и непосредственно в оперативной памяти.

Легковесность Windows PE может вызвать соблазн использовать ее в качестве основной системы на компьютере или домашнем сервере, однако есть существенные ограничения, которые не позволят это сделать.

Так, например, система автоматически перезапускается через 72 часа непрерывного использования и все изменения при этом будут утеряны. Кроме этого при установке Windows PE по умолчанию используется файловая система FAT32, что ограничивает максимальный размер используемых файлов до 4 Гб.

Но тогда для чего может быть полезна эта версия Windows?

Для чего нужен Windows PE

А как раз для создания загрузочной флешки с привычной (хоть и сильно урезанной) операционной системой.

Например если ваш компьютер перестал загружаться с жесткого диска, то загрузка с такой флешки позволит получить доступ к данным на нем. То есть эту операционную систему можно и нужно использовать по ее прямому назначению — для восстановления или диагностики компьютера.

Именно на Windows PE построены многие известные реаниматоры, то есть готовые сборки, которые можно записать на флешку, а после загрузки с нее вы получите доступ к привычной среде Windows с предустановленным набором программ и утилит.

Hiren's Boot CD

Именно на Windows PE построены такие популярные сборки, как Hiren’s Boot CD или загрузочные диски Sergei Strelec, которые предназначены для диагностики и обслуживания компьютеров или для восстановления работоспособности ОС.

В эти сборки уже входит набор популярных программ и утилит для быстрой диагностики компьютера, поэтому изучив содержание каждой сборки вы можете выбрать наиболее подходящее для вашей задачи решение.

Скачать понравившуюся сборку можно в виде ISO-образов и затем записать его на флешку с помощью любой предназначенной для этого утилиты, например, Rufus.

Также можно воспользоваться утилитой Ventoy, которой я посвятил отдельную заметку, и записать нужный образ или все образы сразу на флешку, подготовленную с помощью этой программы.

Как создать флешку с Windows PE

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

Но вполне возможно вы захотите создать загрузочную флешку со своей собственной сборкой, то есть с набором нужных вам программ. Сделать это довольно просто и существует множество вспомогательных утилит, предназначенных для этого. Давайте рассмотрим две из них.

Утилита AOMEI PE Builder

Пожалуй самой простой и известной утилитой, позволяющей создать свою сборку на базе Windows PE, является утилита AOMEI PE Builder.

Скачиваем и устанавливаем программу на компьютер, а затем запускаем.

AOMEI PE Builder

На первом шаге нам нужно будет выбрать разрядность Windows.

Выбор разрядности ОС

Я выберу 64-бита. Сейчас подавляющее большинство программ имеют 64-х разрядную версию, однако перед выбором разрядности Windows стоит убедиться, что утилиты, которые вы планируете поместить в сборку также имеют такую же разрядность.

На следующем шаге выбираем программы, которые планируем включить в нашу сборку.

Выбор программ

На выбор уже есть небольшое количество утилит, которые разложены по соответствующим разделам. Всего три раздела — работа с файлами (File), с сетью (Network) и с системой (System).

При выборе программы появится ее описание, правда оно на английском.

Описание программы

Тем не менее, все эти утилиты довольно известны, а если какие-то из них вам незнакомы, то можно легко по названию найти в интернете описание программы на русском.

Выбираем нужные программы из списка, а затем добавляем свои. Для этого есть две опции — добавить файл и добавить папку.

Добавить программу

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

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

Обычно для поиска нужной программы достаточно в поисковике набрать ее название и слово «portable».

Поиск портативной программы

Также можно подготовить портативные версии нужных вам программ с помощью специальных утилит.

Я подготовил на рабочем столе папку с портативными версиями программам — VLC media player, утилиты для диагностики жесткого диска Victoria и еще одна утилита для тестирования и идентификации компонентов компьютера AIDA64. Так как все программы состоят более чем из одного файла, то добавим их папками.

Добавление программ

Осталось лишь записать сборку на флешку. Сделать это можно прям из программы. Подключенная флешка уже отображается в соответствующем разделе.

Запись флешки

Либо можно создать ISO-образ, который потом можно, например, закинуть на флешку с Ventoy или позже записать на нее с помощью любой другой утилиты.

Процесс создания сборки займет довольно много времени, так как все необходимые файлы утилита скачивает из интернета.

После того, как флешка готова загружаемся с нее.

Загрузка с флешки

На рабочем столе увидим ярлыки для запуска утилит, которые мы выбрали в процессе создания сборки. Также тут есть еще две утилиты Partition Assistant и Backupper — это программы того же разработчика, что и утилита PE Builder. Backupper позволяет создавать резервные копии данных и целых разделов, а Partition Assistant предназначена для работы с дисками, то есть с ее помощью можно вносить изменения в разделы на жестком диске.

Все выбранные нами вручную утилиты находятся в отдельной папке UserTools. И вот тут меня ждал сюрприз…

Утилитой AOMEI PE Builder я пользовался лет пять назад и тогда мне без проблем удалось добавить в сборку нужные мне программы, однако сейчас все три добавленные мною программы запустить не удалось. Скорее всего это связано с тем, что Windows PE был создан на базе самой последней редакции Windows 10, и с этими редакциями как раз и возникают подобные проблемы, о чем расскажу далее.

Думаю, что если в качестве базы для Windows PE использовать предыдущие редакции десятки, то все будет работать. В любом случае, далее речь пойдет об утилите, которой я пользовался многократно.

Утилита Win10XPE

Вторая утилита, о которой пойдет речь, имеет намного более широкие возможности. Называется она Win10XPE и ее интерфейс нельзя назвать интуитивно понятным, так как здесь содержится огромное количество всевозможных настроек.

Win10XPE

Кроме этого есть еще один нюанс — так как утилита использует системные файлы и содержит большое количество специализированных инструментов, то ваш антивирус может на нее реагировать.

На счет вирусов и антивирусов сказано уже очень много и предыдущая моя заметка была посвящена данной теме, поэтому каждый в этом вопросе решает для себя сам.

Скажу лишь, что утилита эта довольно известная и ее страница представлена на одном из крупнейших форумов, посвящённых Windows 10, поэтому лично я ее считаю безопасным и весьма удобным инструментом для быстрого создания нужного вам Live CD/USB диска.

Итак, в первую очередь нам нужно выбрать оригинальный ISO-образ операционной системы, на базе которой мы будем создавать нашу сборку. Это важно, так как у той же Windows 10 уже вышло множество редакций, которые отличаются какими-то инструментами. В итоге созданный Live-диск может не работать или часть его инструментов будет недоступна.

Возможно, именно поэтому у меня не запускались программы с флешки, созданной в PE Builder, так как при создании флешки использовалась самая последняя редакция Windows 10.

На странице утилиты на форуме есть предупреждение, что разработчики утилиты пытались адаптировать ее к последним редакциям Windows 10, но надежного результата получить не удалось, поэтому они рекомендуют использовать Windows 10 версии 2004-20H1.

Предупреждение

Так мы и поступим. В окне утилиты щелкаем по ссылке:

Загрузка образа

Затем выбираем образ и его параметры, а затем скачиваем его на компьютер.

Скачиваем образ Windows

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

После загрузки образа его нужно смонтировать, то есть подключить в качестве виртуального диска в DVD-привод. Делается это через контекстное меню:

Монтируем образ

После этого выбираем содержимое виртуального DVD-привода в утилите:

Подключение образа

Осталось лишь выбрать нужные вам программы.

Настройка программ

В левой части окна находится список всех встроенных утилит (1), которые мы можем добавить в нашу сборку. Здесь действуем по аналогии — отключаем или включаем нужные инструменты. В отличии от PE Builder набор инструментов здесь более широкий и действительно есть из чего выбрать.

При выборе утилиты в правой части окна появляется ее описание (2) и всевозможные настройки. У разных программ этот набор настроек отличается и зависит от специфики каждой программы.

Для всех программ доступна настройка расположения значка — на рабочем столе будущей Windows, в меню Пуск или закрепить на панели задач (3).

В перечне есть и платные утилиты, вроде AcronisTrueImage. Если у вас есть лицензия к таким утилитам, то можно ее вставить в соответствующее поле (4) и тогда утилиту можно будет включить в сборку и использовать с флешки.

Проходимся по списку, выбираем нужные утилиты и делаем соответствующие настройки.

Практически все готово.

Выбираем первый пункт Build Core.

Настройка Windows PE

Здесь собраны еще десятки настроек, которые относятся непосредственно к операционной системе. Например, мы можем повлиять на интерфейс операционной системы, изменив обои рабочего стола, задав значок пользователя или изменив приветственную мелодию, которая звучит при загрузке.

Все готово для создания флешки. Нажимаем на кнопку Play в верхней части окна программы и создаем образ.

Процесс создания образа займет некоторое время и продолжительность будет напрямую зависеть от количества выбранных вами программ, так как в процессе утилита будет скачивать недостающие файлы из интернета.

После того, как образ будет создан, он будет сохранен в папке с утилитой. Можно закинуть его на флешку с Ventoy или записать отдельно с помощью той же Rufus.

Теперь загружаемся с флешки и смотрим на результат.

Реаниматор на флешке

Все выбранные нами утилиты есть в с системе. Какие-то из них я вынес на рабочий стол, какие-то поместил в панель задач. Доступ к остальным утилитам есть в меню Пуск.

Запускаем нужные утилиты и работаем…

Включение своих программ в сборку

Пока мы использовали только утилиты, которые уже имелись в конструкторе. Но как же включить нужные вам программы в сборку, если их нет в предложенном перечне?

Теоретически мы можем включить в сборку не только портативные программы, но и установленные на основном компьютере. В этом случае придется ковыряться в реестре системы, копируя ключи оттуда и интегрируя их в WinPE. Занятие это не особо приятное и далеко не всегда гарантирующее положительный результат. Поэтому я рассмотрю самый простой и надежный способ — использование уже упомянутых мною ранее портативных версий программ.

У меня уже есть три программы, которые я включал в первую сборку и которые отказались в ней работать. Давайте их подключим и сюда.

Сейчас каждая из программ находится в своей папке. Мне нужно их сжать в архив, чтобы включить в сборку.

Самый последний раздел программы называется Utilites. Воспользуемся им и запустим SFX Constructor. Эта утилита построена на базе архиватора 7-ZIP и с помощью нее мы сейчас упакуем наши портативные программы.

SFX Constructor

Просто перетягиваю папку с программой в соответствующее поле и затем нажимаю кнопку Create 7z SFX.

Создание SFX

Тоже самое проделываю и со второй папкой. VLC плеер есть в стандартных программах, поэтому его добавлять не буду.

Теперь перейдем к утилите XPE Packed Application Creator (1). Она нам позволит добавить собственные портативные программы в сборку. Я скачивал 64-х разрядные версии утилит, поэтому добавляю путь к архиву в соответствующем поле (2). Выбираю созданный ранее архив, а затем в следующем поле я должен указать имя исполняемого файла, то есть имя файла, который программу запускает. Его можно найти в папке с программой (3). Все готово и нажимаем соответствующую кнопку (4), для создания нового приложения:

Добавление программ в сборку

Тоже самое проделаем и для второй утилиты.

Теперь перейдем в список всех приложений Apps и найдем раздел XPE Plugin Creator. Здесь увидим добавленные нами программы. Можем задать название папки, в которой они будут находиться в меню Пуск, а также указать их дополнительное расположение, например, вынеся их на панель задач.

Настройки программ в реаниматоре

Пересобираем образ, нажав на кнопку Play, а затем записываем его на флешку и загружаемся с нее.

Новые программы я разместил в панели задач, здесь они и отображаются. Также эти программы я вынес в отдельную папку MySoft в меню Пуск и действительно мы их здесь находим.

Реаниматор Windows

Вот таким образом с помощью Windows PE и утилит вроде PE Builder и Win10XPE вы можете создать свою собственную флешку-реаниматор с набором только вам нужных программ и утилит.

Читайте также статью о новой версии Windows PE, использующейся с Windows 8: Создание загрузочного диска Windows PE 4.0 с .NET Framework и PowerShell 3

Windows PEWindows PE — это среда предустановки Windows, использующаяся для подготовки к установке операционных систем Windows Vista, Windows Server 2008 и Windows 7. Однако с помощью Windows PE можно выполнять разнообразные задачи. Например,

  • управление разделами жесткого диска с помощью утилиты Diskpart или сторонних средств,
  • захват томов в WIM-образ с помощью утилиты ImageX и их сохранение на другой раздел жесткого диска или USB-диск,
  • применение WIM-образов к тому с помощью утилиты ImageX,
  • запуск автоматической установки Windows XP, Windows Vista, Windows Server и Windows 7,
  • копирование и замену файлов, а также правку реестра установленной операционной системы, если она не загружается.

Среду Windows PE также часто используют ОЕМ-производители для восстановления системы к заводским настройкам с помощью собственных средств. Особую ценность для диагностики и восстановления операционной системы Windows PE приобретает при включении в ее состав набора Microsoft Diagnostics and Recovery Toolset (MSDaRT), входящего в пакет Desktop Optimization Pack. К сожалению, MSDaRT для Windows Vista доступен только по программе Software Assurance или по корпоративным лицензиям VL/OL/EA.

В статье рассматривается работа с WAIK для Windows 7 и утилитиой DISM, входящей в состав этой ОС. Руководство по созданию диска Windows PE на основе WAIK для Windows Vista находится здесь.

Так или иначе, диск с Windows PE может пригодиться вам для работы с WIM-образами или восстановления операционной системы, поэтому ниже я рассмотрю процесс его создания с помощью пакета автоматической установки Windows (WAIK). Процесс создания базового диска Windows PE довольно прост — он занимает буквально 10 минут.

На этой странице

  • Создание базового набора файлов
  • Подключение образа Windows PE и работа с ним
  • Настройка запуска собственных приложений и сценариев
  • Сохранение образа Windows PE и замена boot.wim
  • Создание ISO-образа Windows PE
  • Создание загрузочного USB-диска Windows PE
  • Полезная информация о Windows PE
  • Связанные ресурсы

Создание базового набора файлов

В статье рассматривается создание диска с 32-разрядной версией Windows PE. Кроме того, я предполагаю, что у вас на диске создана папка C:7Work. Если вы создаете диск с 64-разрядной версией Windows PE и/или используете другую папку, вам необходимо будет заменить во всех командах архитектуру (х86 на amd64) и пути к папкам.

В меню Пуск последовательно щелкните Все программы, Microsoft Windows AIK и Утилиты командной строки Windows PE — все последующие команды будут вводиться в это окно командной строки.

Примечание. Если вы работаете в Windows Vista или более поздних, Утилиты командной строки Windows PE следует запускать от имени администратора, щелкнув правой кнопкой мыши на ярлыке и выбрав в контекстном меню пункт Запуск от имени администратора. Это позволит избежать проблем с правами доступа к папкам и файлам.

Базовый набор файлов создается одной командой:

copype.cmd x86 c:7Workwinpe_x86

После ее завершения в папке winpe_x86 будет создана такая структура, как показано на скриншоте.

Windows PE

Для изменения исходного образа Windows PE его необходимо подключить командой

Dism /Mount-Wim /WimFile:c:7Workwinpe_x86winpe.wim /index:1 /MountDir:c:7Workwinpe_x86mount

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

Установка пакетов

С помощью утилиты DISM в подключенный образ можно добавлять дополнительные пакеты, расширяющие возможности Windows PE, а также интегрировать драйверы контроллеров устройств хранения (mass storage). Последнее может понадобиться в том случае, если вы используете контроллеры, драйверы которых не включены в состав Windows PE. Ниже приводится список пакетов, которые можно установить.

Имя пакета Описание
WinPE-HTA-Package Поддержка HTML-приложений
WinPE-MDAC-Package Поддержка компонентов доступа к данным (Microsoft)
WinPE-Scripting-Package Поддержка сервера сценариев Windows
WinPE-SRT-Package Компонент среды восстановления Windows (доступен только по корпоративным лицензиям)
WinPE-WMI-Packages Поддержка WMI (Windows Management Instrumentation)
WinPE-XML-Package Поддержка программы разбора Microsoft XML (MSXML)

Например, если вы планируете выполнять в Windows PE сценарии WSH, следует установить WinPE-Scripting-Package. Делается это одной командой:

Dism /image:c:7Workwinpe_x86mount /Add-Package /PackagePath:<путь>WinPE-Scripting-Package

В качестве значения для параметра /PackagePath: указывается полный путь к:

  • CAB- или MSU-файлу
  • папке с одним распакованным CAB-файлом
  • папке с одним MSU-файлом
  • папке с несколькими CAB- или MSU-файлами

Просмотреть список установленных в образе пакетов можно командой

Dism /image:c:7Workwinpe_x86mount /Get-Packages

Добавление собственных файлов

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

Добавлять файлы можно как непосредственно в WIM-образ Windows PE, так и на диск, на котором размещается предустановочная среда. Преимущества и недостатки обоих способов я рассмотрю подробнее.

Добавление файлов в WIM-образ Windows PE. В этом случае увеличивается размер WIM-образа Windows PE, который изначально составляет около 200 Мб. Поскольку при запуске Windows PE содержимое образа целиком загружается в оперативную память компьютера, размер WIM-образа не стоит увеличивать без необходимости.  Преимущество добавления файлов в WIM-образ заключается в том, что заранее известна буква диска загруженной среды Windows PE (это всегда X:) и удобно использовать переменные среды (%SystemRoot%, %SystemDrive% и т. д.). Целевой папкой для добавления файлов к WIM-образу является winpe_x86mountWindows.

Добавление файлов на диск. Добавляя файлы на диск, вы избегаете увеличения размера WIM-образа Windows PE и экономите оперативную память при запуске предустановочной среды. Все ваши файлы будут доступны — они включаются в состав загрузочного диска. Недостатком такого подхода является то, что заранее неизвестна буква диска, с которого производится запуск Windows PE. При желании можно обойти и это препятствие. Целевой папкой для добавления файлов на диск является winpe_x86ISO — она эквивалентна корню загрузочного диска (конечно, вы можете создавать в ней подпапки).

Давайте рассмотрим пример добавления файлов на диск. Начнем с ImageX. Поскольку утилита входит в состав WAIK, достаточно выполнить команду:

xcopy "%ProgramFiles%Windows AIKToolsx86imagex.exe" c:7Workwinpe_x86iso

Если вы планируете использовать утилиту ImageX для захвата образов, можно (но не обязательно) сразу подготовить список исключений — файлов и папок, которые не будут включаться в сохраняемый образ. Создайте в любом текстовом редакторе файл Wimscript.ini и укажите в нем файлы и папки, которые вы хотите исключить из образа. По умолчанию ImageX использует следующие исключения:

[ExclusionList]
$ntfs.log
hiberfil.sys
pagefile.sys
"System Volume Information"
RECYCLER
WindowsCSC

[CompressionExclusionList]
*.mp3
*.zip
*.cab
WINDOWSinf*.pnf

Файл Wimscript.ini размещается в одной папке с ImageX.

Для добавления диспетчера пакетов (PkgMgr) необходимо целиком скопировать папку Servicing, а также файлы MSXML6:

xcopy "%ProgramFiles%Windows AIKToolsx86Servicing" c:7Workwinpe_x86isoServicing /s
xcopy %windir%system32msxml6*.dll c:7Workwinpe_x86isoServicing

Теперь рассмотрим пример добавления файлов в образ Windows PE. Допустим, я хочу включить в состав WIM-образа файловый менеджер Total Commander. Я копирую его папку TotalCmd в корень папки winpe_x86mount. Это можно сделать вручную или из командной строки:

xcopy "%ProgramFiles%TotalCmd" c:7Workwinpe_x86mountTotalCmd /s

Настройка запуска собственных приложений и сценариев

Если вы впервые создаете диск Windows PE, можете пропустить этот раздел, чтобы материал не казался вам сложнее, чем он есть на самом деле. Успешно создав свой первый диск Windows PE и насладившись ее волшебным интерфейсом командной строки, вы сможете вернуться к настройке запуска приложений.

Запуск собственных приложений и сценариев в Windows PE можно организовать различными способами.

startnet.cmd

Windows PEФайл startnet.cmd расположен в папке WindowsSystem32 подключенного образа Windows PE и уже содержит одну команду — wpeinit. Эта команда нужна для инициализации поддержки сети и устройств Plug-and-Play. В качестве параметра командной строки для wpeinit.exe можно указать путь к файлу ответов, настраивающему параметры Windows PE, о чем речь пойдет чуть ниже. При загрузке Windows PE файл startnet.cmd выполняется автоматически, поэтому его удобно использовать для выполнения собственных команд.

Вы можете добавить в этот файл команды, используя стандартный синтаксис командных файлов. Например, для запуска Total Commander, который я включил в состав образа ранее, можно добавить такую команду:

%SystemDrive%TotalCmdTOTALCMD.EXE "I=%SystemDrive%TotalCmdProfilesPEmain.ini"

В данном примере в качестве параметра командной строки указывается путь к конфигурационному файлу Total Commander (это описано в справке программы).

winpeshl.ini

Windows PEСтандартной оболочкой Windows PE является командная строка. Однако можно задать собственную оболочку при помощи файла winpeshl.ini, указав в нем командный файл или программу для запуска. Файл не входит в состав Windows PE. Его нужно создать в любом текстовом редакторе и разместить в папке WindowsSystem32 подключенного образа Windows PE. Пример запуска программы myshell.exe, выступающей в роли оболочки, приводится ниже.

[LaunchApp]
AppPath = %SystemDrive%myshell.exe

В этом примере программа размещается в корне подключенного образа Windows PE, т. е. в корне папки winpe_x86mount.

Примечание. При запуске собственной оболочки не происходит выполнения файла startnet.cmd.

Если вам нужна поддержка сети или устройств Plug-and-Play, необходимо настроить выполнение команды wpeinit. В этом случае лучше использовать раздел [LaunchApps], позволяющий не только выполнять несколько команд, но и указывать параметры командной строки для приложений.

Например, запуск wpeinit и файлового менеджера Total Commander, который я включил в состав образа ранее, можно реализовать так:

[LaunchApps]
wpeinit
%SystemDrive%TotalCmdTOTALCMD.EXE,"I=%SystemDrive%TotalCmdProfilesPEmain.ini" 

Обратите внимание на то, как в winpeshl.ini задаются параметры командной строки для приложений.

Примечание. Поскольку приложение, запущенное из файла winpeshl.ini выполняет роль оболочки, его закрытие ведет к завершению сессии Windows PE.

Внимание! Не используйте разделы [LaunchApp] и [LaunchApps] одновременно, поскольку в этом случае приложения могут не запуститься. Этот момент не отражен в документации.

Файл ответов

Windows PEДля автоматизации выполнения команд в среде Windows PE можно использовать файл ответов. При запуске Windows PE автоматически выполняется поиск файла Unattend.xml в корне диска, с которого выполнялась загрузка. Кроме того, путь к файлу ответов можно явно указать в качестве параметра командной строки следующим образом:

wpeinit -unattend=<путьФайлОтветов.xml>

Для запуска собственных приложений и сценариев можно использовать синхронные команды, добавляемые к проходу 1 windowsPE. Продолжая пример с запуском Total Commander, синхронная команда будет выглядеть так:

%SystemDrive%TotalCmdTOTALCMD.EXE "I=%SystemDrive%TotalCmdProfilesPEmain.ini"

Пример файла ответов, запускающего синхронную команду, вы найдете на странице Примеры. Этот файл можно сохранить с именем Unattend.xml в папке winpe_x86ISO, и он будет распознан автоматически.

На этом обзор способов запуска собственных программ можно считать законченными.

Сохранение образа Windows PE и замена boot.wim

После того, как вы добавите собственные файлы в образ Windows PE и настроите остальные параметры запуска предустановочной среды, необходимо сохранить образ.

Dism /unmount-Wim /MountDir:c:7Workwinpe_x86mount /Commit

Если вы помните, вся работа велась с образом winpe.wim. А для загрузочного диска Windows PE используется файл boot.wim, расположенный в папке winpe_x86ISOsources. Поэтому необходимо заменить файл boot.wim файлом winpe.wim, выполнив при этом переименование.

xcopy /y c:7Workwinpe_x86winpe.wim c:7Workwinpe_x86ISOsourcesboot.wim

Теперь у вас все готово к созданию загрузочного диска Windows PE. Ваши дальнейшие действия зависят от того, какой тип носителя вы изберете. Можно создать ISO-образ и записать его на компакт-диск, а можно создать загрузочный USB-диск.

Создание ISO-образа Windows PE

Поскольку все файлы уже подготовлены, остается выполнить команду:

oscdimg -n -bc:7Workwinpe_x86etfsboot.com c:7Workwinpe_x86ISO c:7Workwinpe_x86winpe_x86.iso

Примечание. Для 64-разрядной версии Windows PE, предназначенной для процессоров Itanium (IA-64), необходимо указывать в качестве загрузчика файл efisys.bin.

Теперь вы можете подключить образ к виртуальной машине и протестировать работу Windows PE.

Создание загрузочного USB-диска Windows PE

USB-дискУчитывая повсеместное распространение компьютеров, поддерживающих загрузку с USB-дисков, Windows PE вполне можно разместить на «флэшке». Суть описанных далее операций сводится к форматированию USB-диска и созданию на нем активного раздела с файловой системой FAT32 с помощью утилиты Diskpart. Ее подробное описание вы найдете в статье Описание программы Diskpart с интерфейсом командной строки.

Примечание. Описанную ниже процедуру можно проводить только в Windows Vista, Windows Server 2008 и более новых операционных системах. Это связано с тем, что в Windows XP утилита Diskpart определяет флэш-диски как съемные, поэтому в списке дисков они не отображаются. Копирование утилиты из Windows Vista в Windows XP не решает проблему. Если вы работаете в Windows XP, воспользуйтесь альтернативными средствами (например, программой Swissknife).

В командной строке последовательно вводите приведенные ниже команды.

diskpart

Затем отобразите список дисков.

list disk

Diskpart

Список и нумерация дисков зависит от количества подключенных в системе дисков. В моем примере USB-диск — это Диск 1. Это несложно определить по размеру диска. В приведенных ниже командах производятся операции с «Диск 1». Вам необходимо внести изменения, если ваш USB-диск имеет другой индекс.

select disk 1

Внимание! Дальнейшие действия приведут к полному удалению информации на выбранном вами диске.

Очистите диск.

clean

Создайте основной раздел.

create partition primary

Раздел займет все пространство на диске. Если вы хотите создать раздел определенного размера, добавьте к команде параметр size=N, где N — число в мегабайтах. Впрочем, Windows XP и Vista видят на съемных USB-дисках только один раздел и не позволяют создавать другие. Эту проблему можно преодолеть, если вам нужна мультизагрузка с USB-диска, но рассказ о решении выходит за рамки статьи. Поэтому я ограничусь ссылкой на одно из возможных решений.

Выберите первый раздел.

select partition 1

Сделайте его активным.

active

Отформатируйте в FAT32.

format fs=fat32 quick

Инициализируйте назначение буквы.

assign

Завершите работу утилиты.

exit

Остается лишь скопировать файлы Windows PE на USB-диск. Все файлы находятся в папке winpe_x86ISO. Вы можете их скопировать с помощью проводника или другого файлового менеджера, либо такой командой:

xcopy c:7Workwinpe_x86iso*.* /s /e /f К:

В этом примере USB-диск имеет букву К.

На этом создание загрузочного USB-диска с Windows PE можно считать законченным.

Полезная информация о Windows PE

Windows PEВ заключение я приведу ряд фактов о Windows PE, которые могут оказаться полезными для вас.

  • Исходная версия Windows PE занимает менее 200 Мб на диске.
  • Все содержимое образа Windows PE (WIM-файла) загружается в оперативную память, т. е. при этом создается RAM-диск. Этому диску назначается буква Х. В Windows PE эта буква эквивалентна букве системного раздела в ОС Windows.
  • Минимальный объем оперативной памяти для компьютера, на котором выполняется загрузка в Windows PE, составляет 256 Мб. Желательно — не менее 512 Мб.
  • Windows PE автоматически перезагружается после 72 часов работы.
  • Параметры запущенной Windows PE можно настраивать с помощью утилиты wpeutil, которая подробно описана в справочной документации.
  • Для перезагрузки компьютера с запущенной Windows PE можно использовать команду wpeutil reboot, а для выключения — wpeutil shutdown. Кроме того, к перезагрузке приводит закрытие командной строки или собственной оболочки.
  • Раскладку клавиатуры можно задать с помощью команды wpeutil SetKeyboardLayout <код языка>. Например, разместив в файле startnet.cmd команду wpeutil SetKeyboardLayout 0409:00000409, вы назначите английскую раскладку. Это удобно для работы с командной строкой, поскольку образ Windows PE, поставляемый с русским WAIK, по умолчанию имеет русскую раскладку клавиатуры.
  • Для запуска Windows PE с USB-диска необходимо настроить в BIOS порядок загрузочных устройств таким образом, чтобы USB-устройство было первым в списке.
  • При запуске Windows PE с USB-диска не предлагается нажать любую клавишу для загрузки.
  • Если вы хотите, чтобы при запуске Windows PE с компакт-диска не предлагалось нажать любую клавишу для загрузки, удалите файл bootfix.bin из папки ISOboot перед созданием ISO-образа.
  • Если в вашей сети не применяется DHCP, вы можете использовать статические IP-адреса. Например, можно задать статический адрес командой:
    netsh int ip set address local static 10.80.10.35 255.255.255.0 10.80.10.1
  • Вы можете использовать команду net use для подключения сетевых дисков:
    net use * \servershare /user:mydomainusername

Дополнительную информацию о Windows PE вы найдете в справочном CHM-файле «Руководство пользователя Windows PE», входящем в состав пакета автоматической установки Windows (WAIK).

Связанные ресурсы

  • Техническое руководство по Windows PE
  • Двойная загрузка с Windows XP и Windows PE 2.0 (Technet Magazine)
  • Восстановление компьютера при помощи Windows PE (Technet Magazine)
  • Использование DART для восстановления Windows Vista (Windows IT Pro)

Сисадмину или мастеру сервисного центра, да и просто в хозяйстве на всякий случай помогает в работе загрузочная флешка с набором полезных программ, и в интернете можно найти полно готовых решений с «кучей» софта на все случаи в жизни. Но каждый кто пользовался чужими готовыми вариантами LiveCD, рано или поздно задумывался о том, что по факту используется лишь малая часть приложений. Весь же остальной ненужный груз софта, который порой может составлять более 98% всего набора LiveCD, лишь мешает работать. Почему? Потому что LiveCD загружается прямиком в оперативную память, и чем больше объем LiveCD, тем больше ожидании загрузки, а если ещё и попался древний компьютер, то LiveCD может и вовсе не загрузится от нехватки памяти. И что же делать? Сделать свой собственный LiveCD! В этой статья я расскажу то, чего вы не найдете даже в гугле.

image

Начиная читать эту статью, можно подумать, что в интернете есть полно инструкций как это сделать, но не всё так просто. В этих инструкциях либо чего-то не хватает (как будто намеренно), либо наоборот наворочено очень много ненужного и непонятно что из этого можно было бы убрать, либо инструкции устарели и не работают на последних версиях Windows PE. Но самое главное, с чем я регулярно сталкиваюсь, так это с тем, что в инструкциях написано всё на столько кратко, что в них не всегда разберется даже продвинутый пользователь, и в редких случаях даже я, специалист с опытом не с первого раза понимаю, что имел ввиду автор. Я понимаю, что это сделано чтобы отсеять всех кроме пресвященных, но тогда зачем вообще писать такие инструкции, где ничего непонятно, из-за которых приходится перечитать лишние 100 статей, потратить лишние 2 недели на проверку в практике, ради того, чтобы выяснить какую-то мелочь, которую могли написать в трех предложениях. Так что в какой-то степени эта инструкция на зло всем тем, кто пожадничал и не написал несколько лишних строк.
Даже если вы найдёте какую-то инструкцию по этой тебе, то не факт, что она будет подробна и понятна, особенно учитывая, как быстро всё меняется и устаревает.

Небольшой спойлер, загуглите запрос IConflictInterrupt и вы не найдете в интернете ни одной статьи или инструкции, а это один из ключевых моментов в работе функционала окна процесса копирования/перемещения/удаления файлов без которой не так удобно использовать Windows PE. Что делает эту статью уникальной и крайне полезной.

В этой статье я ОЧЕНЬ ПОДРОБНО расскажу, как собрать Windows PE с минимальным набором самых нужных функций без лишнего хлама. Я намеренно написал даже некоторые почти примитивные шаги, дабы любой новичок мог быстро освоится. Так что не кидайте тапками за занудность (:

Предисловие

Я начал этот путь ещё со времен Windows 98, когда уже в те времена иногда требовалось выгрузить данные с ПК у которого не загружалась ОС. Флешки в тот период уже были, хоть и не были распространены т.к. были очень дорогие. Загрузить с них минимальную Windows 98 было не так просто, потому что Windows 98 не умела загружаться с внешних накопителей, и приходилось самому писать драйвер с указанием серийного номера флешки чтобы именно эта флешка воспринималась операционной системой как жёсткий диск. Даже несмотря на это, ОС не загружалась если объем оперативной памяти превышал 512Мб.

Потом, конечно, вышла Windows 2000/XP, и ситуация в корне изменилась, появлялись готовые решения вроде Hiren (DOS+Windows XP), которые уже на тот момент работали очень медленно. Например, у Hiren виртуальная img FDD весила аш ~41Мб и могла загружаться по более 30-40 минут на особо медленных ПК с USB1.0.

Уже в те времена готовые решения работали не так как хотелось и имели в арсене полно ненужных приложений. Тогда-то я и начал для своих личных нужд активно собирать свои собственные LiveCD на DOS и Windows. Когда мой img FDD весил всего около 2Мб вместо 41Мб у Hiren, и вмещал всё необходимое (MHDD, Victoria, Volkov Commander и немного мелочи), с годами туда конечно добавились DiscGenius, HWinfo и некоторые другие, но суть остаётся прежней, в арсенале только самое нужное, лёгкое и быстро загружающееся.

Времена идут и Microsoft достаточно часто выпускает новые версии Windows 10, а теперь ещё и Windows 11. После почти каждого выхода новой версии ОС приходится создавать новый образ т.к. только он имеет нативную поддержку нового железа. Например, встречаются современные ноутбуки, у которых даже сенсорная панель не работает на старых версиях Windows 10 PE, не говоря уже о сенсорных экранах.

Я расскажу, как сделать образ на основе Windows 10 1507 x32 и Windows 10 21H2 x64. Почему такой разброс в версиях? Потому что версия x32 нужна как правило для старых устройств с минимальными ресурсами, а версия Windows 10 1507 является самой лёгкой по объему и запустится везде где только можно, особенно на планшетах с ЦП Intel у которых нет поддержки x64. Почему именно версия 1507 x32, а не 21H2 x32? Потому что опыт показывает что устройства, как правило планшеты и трансформеры у которых нет поддержки x64, вышли во время Windows 8 (2012-2015год), и некоторые из этих устройства не способны загрузить последние версии Windows 10 21H2 x32 (как минимум на стоковых версиях UEFI), потому что предназначались для Windows 8, но они все без исключения (по моему опыту) отлично загружают Windows 10 1507 x32. Версия Windows 10 21H2 x64 нужна для современных устройств и тут уже НУЖНО выбирать только самую последнюю версию Windows PE. Перед написанием статьи я применил свою же инструкцию к Windows 11 PE (22000.XXX) и всё замечательно работает, так что в дальнейших шагах вместо Windows 10 21H2 x64 можете смело использовать Windows 11 (22000.XXX).

Итак, начнём.

I. Подготовительный этап

1. Windows ADK

Для начала нам понадобится скачать и установить комплект средств для развертывания и оценки для Windows ADK.

Во время установки при выборе компонентов достаточно выбрать лишь средства развертывания (Система обслуживания образов и развертывания и управления или (DISM)).

image

Примечание: у Microsoft имеется надстройка Windows PE для Windows ADK, где имеются дополнительные компоненты для интеграции в Windows PE, но нам эти компоненты не понадобятся, однако, как их установить я тоже ниже распишу, так что если интересно, то можете скачать и дополнительно установить надстройку Windows PE для Windows ADK. Скачать её можно на той же странице что указана выше.

2. Дерево каталогов

Необходимо создать каталоги в которой будут проходить все работы. У каждого свои предпочтения по используемому диску D, E, F и т.д., так что я буду на примере диска C, а там уже делайте как вам удобно. Нам нужны будут следующие каталоги, но дабы не утруждать себя их созданием вручную, введите следующие команды в командную строку, запущенную от имени администратора:


mkdir "C:BuildPEAddFilesx32Program Files"
mkdir "C:BuildPEAddFilesx32WindowsSystem32"
mkdir "C:BuildPEAddFilesx64Program Files"
mkdir "C:BuildPEAddFilesx64WindowsSystem32"
mkdir "C:BuildPECOMPLETE32"
mkdir "C:BuildPECOMPLETE64"
mkdir "C:BuildPEISO"
mkdir "C:BuildPEMount"
mkdir "C:BuildPEoriginalWIMx32"
mkdir "C:BuildPEoriginalWIMx64"
mkdir "C:BuildPEutil"

На выходе у вас будет готово дерево каталогов для дальнейших шагов.

3. Свой софт

Для каждого набор приложений индивидуален, я же буду расписывать свой вариант как пример, а вы можете его как пополнить, так и убавить. Windows PE x64 имеет поддержку ТОЛЬКО x64 приложений, и запустить x32 она не сможет без добавления дополнительных файлов для их поддержки, но раз уж мы делаем легкий образ, то поддержку x32 мы обеспечивать не будем, а это значит, что потребуется скачать только x64 приложения для x64 образа, и x32 приложения только для x32 образа. Я не буду оглашать весь список своих приложений, если вы понимаете о чем я :), но вот базовая часть:

У ниже указанных программ есть как x64, так и x32 версии, нам нужны обе:

  • 7-Zip
  • Autoruns
  • CLaunch
  • Explorer++ (Языковые пакеты можете найти на странице релизов GitHub нужен лишь .dll файл рядом с .exe файлом программы)
  • HWiNFO
  • Notepad++
  • ProcessExplorer
  • produkey
  • WinXShell

Эксклюзивно для x32:

  • ExplorerXP
  • Victoria

Вы можете обратить внимание что в списке присутствует CLaunch как альтернатива меню Пуск, и WinXShell как альтернатива всей графической оболочке explorer в которой есть своё меню Пуск. Так зачем же два меню пуск? Дело в том, что наличие WinXShell в образе — это просто запас, на случай если остро необходима панель задач в то время, когда открыто множество окон, в которых можно потеряться, не имея панели задач. При этом если используется лишь одно окно, например для диагностики жесткого диска через Victoria, или для определения конфигурации ПК через HWiNFO, то достаточно одного окна без необходимости включать графический интерфейс. К тому же если на компе поврежденный жесткий диск, то лучше, чтобы было включено как можно меньше программ которые обращаются к жесткому диску, а WinXShell как минимум строит дерево каталогов всех накопителей, что уже плохо в таком сценарии.

Почти все те программы что я выбрал (за исключением, например, Victoria и ExplorerXP), имеют как x32, так и x64 версии, но самое главное, что они не требовательны к наличию NetFX который достаточно тяжелый. Если же ваш софт требует NetFX или какой-либо другой компонент, то придётся всё-таки его интегрировать, от чего образ значительно вырастет в объеме, но если это нужно, то почему бы и нет, главное, что не бесполезным софтом, а тем, что действительно нужно.

4. Подготовка софта

Не все вышеуказанные программы имеют portable версии, ваша задача получить каталог с программой — это можно сделать распаковкой установочного файла, как в случае с 7-Zip (через 7-Zip открыть дистрибутив 7-Zip чтобы извлечь 7-Zip), или инсталировать программу на свой ПК, а потом скопировать целиком каталог с программой в отдельный каталог для дальнейшего копирования в образ:

Программы x32 для Windows 10 1507 x32 перемещаем в C:BuildPEAddFilesx32Program Files
Программы x64 для Windows 10 21H2 x64 перемещаем в C:BuildPEAddFilesx64Program Files

Немного подсказок:

WinXShell — в этой программе я удаляю китайский язык (файлы WinXShell.zh-CN.jcfg и WinXShell.zh-CN.lua) и переименовываю WinXShell_x86.exe в WinXShell.exe, аналогично и с x64, а также удаляю файл wxsStub32.dll для версии x64, а для x32 удаляю wxsStub.dll.

CLaunch — отличная альтернатива меню Пуск для ОС, у которой нет ничего кроме CMD, и дабы эта альтернатива работала как надо, то необходимо присвоить ей горячую клавишу для вызова (в моём случае Win+Z, т.к. просто Win будет использоваться для WinXShell). Настроить CLaunch можно и на своей ОС, а потом перекинуть файл с настройками в Windows PE для дальнейшей ДОнастройки, но, чтобы вас лишний раз не утруждать, и как минимум дать стартовый вариант настроек этой программы, я подготовил готовый комплект файлов, но о нём чуть ниже.

Получив набор каталогов с программами очень важно очистить их от лишнего (для достижения малого объема образа на выходе), поэтому можно смело удалять деинсталляционные файлы, лишние языки, скины, плагины и всё то, что 100% не понадобится в работе. Некоторые из этих программ требуют настройки, но об этом чуть позже. Желательно пока их даже не запускать дабы внутри программ не создавались лишние файлы настроек и т.д.

В моём образе Explorer++ хранится прямо в папке System32:


C:BuildPEAddFilesx64WindowsSystem32Explorer++.exe
C:BuildPEAddFilesx64WindowsSystem32Explorer++RU.dll

Советую сохранить Explorer++ в том же месте т.к. его удобно вызывать из командной строки, а также мои настройки, которые вы встретите в следующих пунктах рассчитаны на то, что он будет находится именно в System32. Когда освоитесь, можете сменить ему местоположение изменив параметры в реестре, CLaunch и ярлык для WinXShell.

5. Скачать инструменты и оригинальный дистрибутив ОС

Оригинальное средство Microsoft для скачивания образа Windows — MediaCreationTool, не умеет скачивать старые версии Windows, и качает лишь последнюю поддерживаемую Microsoft, нам такая и нужна, но нам нужна ещё и самая первая версия Windows 10 1507, которую без труда можно скачать с торрентов с помощью удобного средства, которое уже обсуждалось здесь на хабре, или сразу на GitHub. Качаем с помощью него Windows 10 21H2 x64 и Windows 10 1507 x32 — нам нужны ISO файлы, а не запись на DVD или флешку.

Для работы нам также потребуются следующие программы:

  • 7-Zip.
  • Блокнот или любой другой текстовый редактор, в моём случае Notepad++.
  • Редактор ISO файлов, в моём случае UltraISO.
  • offlinereg необязателен, но желателен

Архив с программой offlinereg можно распаковать в C:BuildPEutil

5. Подготовка WIM файлов

Чтобы сделать свой вариант Widnows PE, нам нужен оригинальный образ, который можно взять из скачанных ISO дистрибутивов.

Через 7-Zip или проводник откройте скачанные два ISO файла (Windows 10 1507 x32 и Windows 10 21H2 x64), откройте папку sources и извлеките и него файл boot.wim:
Из образа Windows 10 1507 x32 в папку C:BuildPEoriginalWIMx32
Из образа Windows 10 21H2 x64 в папку C:BuildPEoriginalWIMx64

6. Подготовка файлов ОС

Оригинальная Windows PE не имеет очень важных файлов, без которых не работает диалоговое окно копирования файлов, не работает Drag&Drop и многие другие функции, включая даже те программы что мы скачали ранее, они не запустятся без некоторых файлов ОС. Наша задача дополнить ОС нужными файлами. Через 7-Zip откройте скачанные два ISO файла (Windows 10 1507 x32 и Windows 10 21H2 x64), откройте папку sources и прямо в архиваторе откройте файл install.wim или install.esd — формат неважен. Форматы .wim или .esd встречается в разных образах, в одном может быть .wim, в другом .esd, но сути не меняет — это просто архив с ОС.

Внутри архива install как правило должно быть несколько папок с номерами — это разные редакции ОС (Home, Single Language, Pro и т.д.), в каждой редакции имеется полный набор файлов ОС с незначительными отличиями в наборе функционала. Не важно какую именно редакцию вы откроете, потому что набор нужных нам файлов есть в каждом из них.

В архиве переходим в папку install.esd1WindowsSystem32 из которого нужно выгрузить только определенные файлы.

Из образа Windows 10 1507 x32 извлекаем следующие файлы в папку C:BuildPEAddFilesx32WindowsSystem32:


en-USshellstyle.dll.mui
ru-RUexplorerframe.dll.mui
ru-RUole32.dll.mui
ru-RUoledlg.dll.mui
ru-RUshell32.dll.mui
ru-RUshellstyle.dll.mui
ru-RUtaskkill.exe.mui
ru-RUtwinapi.appcore.dll.mui
ru-RUtwinapi.dll.mui
ru-RUtwinui.appcore.dll.mui
ru-RUtwinui.dll.mui
actxprxy.dll
chartv.dll
d3d11.dll
DataExchange.dll
dcomp.dll
ddraw.dll
DXCore.dll
dxgi.dll
ExplorerFrame.dll
glu32.dll
ksuser.dll
oledlg.dll
opengl32.dll
pdh.dll
pdhui.dll
shellstyle.dll
shfolder.dll
taskkill.exe
thumbcache.dll
timeout.exe
twinapi.appcore.dll
twinapi.dll
twinui.appcore.dll
twinui.dll

Из образа Windows 10 21H2 x64 извлекаем следующие файлы в папку C:BuildPEAddFilesx64WindowsSystem32:


en-USshellstyle.dll.mui
ru-RUexplorerframe.dll.mui
ru-RUole32.dll.mui
ru-RUoledlg.dll.mui
ru-RUshell32.dll.mui
ru-RUshellstyle.dll.mui
ru-RUtaskkill.exe.mui
ru-RUtwinapi.appcore.dll.mui
ru-RUtwinapi.dll.mui
ru-RUtwinui.appcore.dll.mui
ru-RUtwinui.dll.mui
actxprxy.dll
chartv.dll
d3d11.dll
DataExchange.dll
dcomp.dll
dxgi.dll
ExplorerFrame.dll
glu32.dll
ksuser.dll
oledlg.dll
OneCoreUAPCommonProxyStub.dll
opengl32.dll
pdh.dll
pdhui.dll
shellstyle.dll
shfolder.dll
taskkill.exe
thumbcache.dll
timeout.exe
twinapi.appcore.dll
twinapi.dll
twinui.appcore.dll
twinui.dll

7. Подготовка ISO

В виртуальном машине мы будем тестировать наши образы Windows PE, но чтобы запустить виртуальную машину, нужно подключить к ней ISO файл с своей Windows PE. Физически невозможно с первого раза создать идеальную Windows PE, т.к. не будут готовы ни ярлыки программам, ни настройки программ, которые делаются после первого запуска Windows PE, потом извлекаются и вносятся в вторую версию, которая уже, может быть, релизной при идеальных обстоятельствах. Каждый раз редактировать тяжелый ISO образ с полноценной ОС — это отнимает больше времени, проще сделать отдельные ISO файлы для дальнейшего неоднократного редактирования, в которых не будет дистрибутива ОС. Через UltraISO открываем скачанные ISO файлы Windows 10 1507 x32 и Windows 10 21H2 x64 и полностью очищаем папку sources. В будущем мы добавим в неё уже отредактированный файл boot.wim. А пока что очищенные ISO файлы сохраняем в папку C:BuildPEISO с именами, например, MyPE1507x32.iso и MyPE21H2x64.iso.

8. Подготовка файла реестра

Некоторые извлеченные файлы из оригинальной ОС не будут работать без определённых ключей в реестре, так что эти файлы бесполезны пока не будут зарегистрированы в реестре и не только (нужно ещё прописать некоторые CLSID и Interface).

Качаем мой набор файлов с github и помещаем содержимое архива в C:BuildPEAddFiles чтобы каталоги x32 и x64 слились с теми, что были в архиве.

В этом же наборе будут настроенные CLaunch (о чем я писал выше), Explorer++, startnet.cmd, а также пара батников для удобства.

В обоих вариантах (x64 и x32) у нас следующий набор файлов:
Файлы настроек CLaunch:


Program FilesCLaunchDataСИСТЕМАClassic.csd
Program FilesCLaunchDataСИСТЕМАCLaunch.ini
Program FilesCLaunchDataСИСТЕМАClIcons.bin
Program FilesCLaunchDataСИСТЕМАDesign.ini

Ярлыки программ для меню пуск WinXShell:


ProgramDataMicrosoftWindowsStart Menu7zFM.lnk
ProgramDataMicrosoftWindowsStart MenuAutoruns.lnk
ProgramDataMicrosoftWindowsStart MenuExplorer++.lnk
ProgramDataMicrosoftWindowsStart MenuHWiNFO32.lnk
ProgramDataMicrosoftWindowsStart Menuprocexp.lnk
ProgramDataMicrosoftWindowsStart MenuProduKey.lnk
ProgramDataMicrosoftWindowsStart MenuProgramscmd.lnk
ProgramDataMicrosoftWindowsStart MenuProgramsMdSched.lnk
ProgramDataMicrosoftWindowsStart MenuProgramsnotepad.lnk
ProgramDataMicrosoftWindowsStart MenuProgramsregedit.lnk
ProgramDataMicrosoftWindowsStart MenuProgramstaskmgr.lnk

Ярлыки программ для меню пуск WinXShell эксклюзивно для x32 т.к. этих программ нет в x64 версии:


ProgramDataMicrosoftWindowsStart MenuVictoria.lnk
ProgramDataMicrosoftWindowsStart MenuExplorerXP.lnk

Файлы System32:
WindowsSystem32config.xml — файл настроек Explorer++
WindowsSystem32spectraconfig.reg — файл реестра, который настроит ОС и который активирует работу диалоговых окон прогресса копирования и не только
WindowsSystem32startnet.cmd — файл, который Windows PE запустит сразу после запуска, этот файл применит файл реестра, а также запустит CLaunch для удобного запуска своих приложений
WindowsSystem32UI.bat — удобный запуск WinXShell через командную строку при необходимости

По поводу файла startnet.cmd — он уже настроен так, чтобы при запуске показать основные характеристики железа, на котором запущена Windows PE, для стартового понимания за каким железом приходится работать, без необходимости включать HWiNFO. Вы можете обратить внимание что в startnet.cmd какие-то кракозябры, а не кириллица. Дело в том, что если вы хотите чтобы командная строка показывала вам кириллицу, то нужно перед редактированием этого файла сменить кодировку на OEM 866 (в Notepad++ это: Кодировки > Кириллица > OEM 866), и только после этого набирать текст русскими буквами, в противном случае, не сменив кодировку и написав на кириллице, в cmd вы увидите кракозябры.

Что касаемо файла spectraconfig.reg — он тут ключевой, без него не будут работать Drag&Drop и диалоговые окна проводника. Из-за его длины, я не стал писать его содержимое в теле статьи, к тому же две версии этого файла (x64 и x32), а вывел его на отдельный ресурс, но объяснить его строение вам всё-таки нужно. Для тех, кому интересно, информация ниже в спойлере:

Путеводитель по spectraconfig.reg

Начну с конца файла:
Внутри комментария «Каталог по умолчанию для пользователя СИСТЕМА X:UsersDefault» имеются ключи реестра для переназначения папок пользователя по умолчанию. В Windows PE используется пользователь СИСТЕМА, которых хранится в каталоге пользователя WindowsSystem32configsystemprofile где должен быть каталог Desktop и остальные (которых нет), и без этих каталогов программы выдают ошибки, пытаясь обратится к несуществующим каталогам, например, к Desktop, чтобы отобразить его в дереве каталогов. Поэтому я сменил путь к пользовательским папкам с %userprofile%Desktop (коим является фактический путь X:WindowsSystem32configsystemprofileDesktop) на X:UsersDefaultDesktop, и по образу и подобию остальные папки пользователя.

Внутри комментария «Твики для удобства» и так всё понятно т.к. я прокомментировал их в .reg файле. Но как пример, пункт «Отобразить значок „Этот компьютер“ на рабочем столе» очень полезен для WinXShell, чтобы при его включении значок «Этот компьютер» был на своём месте.
Внутри комментария «Ассоциация с 7z» я добавил 7-Zip в качестве приложения по умолчанию для всех типов архивов, которые поддерживает 7-Zip.

Внутри комментария «Notepad++» всё аналогично, как и в 7-Zip. В x32 версию PE я не интегрировал Notepad++ и там нет ассоциации с Notepad++.

Комментарий «Explorer++ проводник по умолчанию» говорит сам за себя).

Внутри комментария «Drag&Drop и окна проводника» я добавил поддержку тем самых полезных функций, без которых Windows PE использовать очень неудобно. Подробнее о них в спойлере ниже.

Я прекрасно понимаю, что статья устареет и для новых версий Windows 10/11 она может быть неактуальной, поэтому для тех, кто хочет понять суть того, как включить Drag&Drop и диалоговые окна проводника, я расскажу по подробней в спойлере:

Как включить Drag&Drop и диалоговые окна проводника

Есть определённые диалоговые окна, например окно процесса копирования/перемещения/удаления файлов. Я постараюсь примитивным языком объяснить, как это работает. Что есть это окно? Это не часть приложения explorer.exe, это какое-то окно, которое хранится в каком-то .dll файла, но даже если вы этот .dll файл скопируете в свою Windows PE, то ОС не будет знать, что с ним делать, почему? Потому что в этом файле есть десятки, а то и сотни, если не тысячи разных окон для разных целей. Нужно дать понять Windows PE что имеется в этом файле. Это делается в 3 этапа:

  1. Устанавливаем на локальный компьютер или виртуальную машину самую свежую версию ОС Windows 10, открываем реестр и для удобства делаем в файлы .reg экспорт двух веток:
    HKEY_LOCAL_MACHINESOFTWAREClassesCLSID
    HKEY_LOCAL_MACHINESOFTWAREClassesInterface
    На выходе будет два файла .reg которые можно открыть через Notepad++ и выполнять поиск нужных ключей.
  2. Находясь в реестре или в Notepad++ (я использую Notepad++ потому что через него удобно копировать ветку, и нет необходимости экспортировать в файл, потом открывать его и копировать…), поочередно запускаем поиск нужных нам Interface (если вы работаете через Notepad++ то вам нужен тот .reg файл который вы экспортировали из ветки HKEY_LOCAL_MACHINESOFTWAREClassesInterface):


    IInterruptedOperationHandler
    IFileOperationProgressSink
    IOperationsProgressDialog
    IOperationStatusTile
    IOperationStatusService
    IOperationStatusSink
    IOperationInterrupt
    IObjectWithCachedState
    IConflictInterrupt

    И находим следующие ветки с их содержимым:


    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}]
    @="IInterruptedOperationHandler"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}]
    @="IFileOperationProgressSink"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}]
    @="IOperationsProgressDialog"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}]
    @="IOperationStatusTile"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1}]
    @="IOperationStatusService"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}]
    @="IOperationStatusSink"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F}]
    @="IConflictInterrupt"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F}ProxyStubClsid32]
    @="{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797}]
    @="IOperationInterrupt"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}]
    @="IObjectWithCachedState"
    [HKEY_LOCAL_MACHINESOFTWAREClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}ProxyStubClsid32]
    @="{95E15D0A-66E6-93D9-C53C-76E6219D3341}"

    Вы можете обратить внимание, что все эти Interface ссылаются на два CLSID: {95E15D0A-66E6-93D9-C53C-76E6219D3341} и {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}. В версии x32 только лишь {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}.

  3. Находясь в реестре или в Notepad++, открываем две ветки тех CLSID, на которые ссылались предыдущие пункты, и находим следующее:


    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}]
    @="PSFactoryBuffer"
    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}InProcServer32]
    @="C:WindowsSystem32OneCoreUAPCommonProxyStub.dll"
    "ThreadingModel"="Both"


    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}]
    @="PSFactoryBuffer"
    [HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32]
    @="X:WindowsSystem32ActXPrxy.dll"
    "ThreadingModel"="Both"

В итоге нам известны нужные нам файлы для извлечения из полноценной ОС в Windows PE, а так же у нас есть куски реестра которые нужно внести в Windows PE.

Так вот, в будущем, могут изменится адреса, например, IOperationStatusService располагался по адресу {0C3C904A-AD89-4851-9C3D-210C080CEE18}, потом уже {61A969EF-64EA-4C48-BBF5-EEDE3B32BF86}, а сейчас {6D5174EC-F425-4CD9-8643-CF36042987F1}. И если он снова изменится, то вам нужно в реестре запустить поиск IOperationStatusService и найти его по новому адресу, который потребуется вписать вместо того, что указан у меня. Тоже самое касается и остальных. Но и это не всё. Вы можете обратить внимание что все перечисленные Interface (за исключением IConflictInterrupt) ссылаются на CLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}, к которому привязан файл OneCoreUAPCommonProxyStub.dll, а в следующей версии там может быть другой файл, или наоборот, файл тот же, но адрес CLSID уже быть другой, или и файл новый, и адрес. Так что не теряйтесь и ищите если что-то изменилось. Но в худшем случае, может потребоваться новый Interface которого нет в моём списке, тогда уже есть небольшая проблема, найти его будет не просто. И тут остаётся или гуглить, или искать методом тыка. Есть ещё более правильный вариант, зная на какой .dll файл ссылаются Interface, раньше можно было вскрыть файл через программу Resource Hacker или Restorator, и в нём найти все варианты диалоговых окон с их описанием, но, сейчас эти программы не могут вскрыть файлы последних ОС, других программ я не гуглил, да и сам я уже стар для таких расследований.

Интересный факт: если вы загуглите IConflictInterrupt, то не найдёте ни одной статьи с упоминанием этого файла (гугл показывает всего одну ссылку на страницу с упоминанием этой строки в .dll файле), а без него, между прочим, не открывается окно замены файлов с одинаковыми именами, и если не прописать IConflictInterrupt, то при конфликте файлов с одинаковыми именами на экране ничего не произойдёт, ОС просто проигнорирует ваш запрос на копирование файлов. Так что IConflictInterrupt очень важен, как минимум его наличие здесь, делает эту статью уникальной.

Немного справки по файлам .dll и реестру:
Для функционирования Drag&Drop обязательно требуются файлы twinapi.dll и DataExchange.dll, CLSID с привязкой к этим .dll, и ключ реестра DragDropExtension.

Для функционирования приложений которые мы собираемся интегрировать в Widnows PE, а также окна прогресса копирования/удаления/перемещения файлов включая окна замены/пропуска файлов с одинаковыми именами обязательно требуются, CLSID с привязкой к .dll и Interface указанные выше, а также почти все те файлы что я указал в начале статьи, возможно, я переборщил и пару «уже ненужных» файлов всё ещё копирую из основной ОС в Widnows PE, и честно признаюсь что не проверял работоспособность нужных мне функций ОС без тех или иных файлов, а всё потому что, что бы проверить это, надо выпилить один файлик, а потом провести проверочных работ на 20 минут, и так с каждым файлом, на что у меня просто нет времени.

9. Подготовка файла редактирования реестра

Этот пункт можно пропустить, он лишь для подстраховки. Лично мне спокойней, когда ряд параметров реестра изменены до включения ОС. Поэтому я вношу самые важные изменения реестра ещё до первого запуска.

Для этого создаём два текстовых файла (для x32 и x64 по отдельности) и вписываем туда следующее:

regexportX64.txt


ClassesCLSID{07fc2b94-5285-417e-8ac3-c2ce5240b0fa}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{07fc2b94-5285-417e-8ac3-c2ce5240b0fa}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{34568a1f-8d5a-4080-99c7-464e2cb40008} setvalue " " "PSFactoryBuffer"
ClassesCLSID{34568a1f-8d5a-4080-99c7-464e2cb40008}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{34568a1f-8d5a-4080-99c7-464e2cb40008}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{53067330-01CE-4027-947F-FF8580E92463}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{53067330-01CE-4027-947F-FF8580E92463}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{6B273FC5-61FD-4918-95A2-C3B5E9D7F581}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{6B273FC5-61FD-4918-95A2-C3B5E9D7F581}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{A1103531-6B1C-425F-A8C9-671616E40FA9}InProcHandler32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{B1AEC16F-2383-4852-B0E9-8F0B1DC66B4D}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{B1AEC16F-2383-4852-B0E9-8F0B1DC66B4D}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{D648FEA1-EA00-4FF4-B8BD-034BD2B25A23}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.appcore.dll"
ClassesCLSID{D648FEA1-EA00-4FF4-B8BD-034BD2B25A23}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.dll"
ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{B52D54BB-4818-4EB9-AA80-F9EACD371DF8} setvalue " " "Windows Search Platform"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F} setvalue " " "Local Thumbnail Cache"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f} setvalue " " "CLSID_LocalIconCache"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InProcServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2} setvalue " " "CLSID_UIThreadThumbnailCache"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InProcServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6} setvalue " " "PSFactoryBuffer"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue " " "X:WindowsSystem32ActXPrxy.dll"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6} setvalue " " "Shell Name Space ListView"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue " " "%SystemRoot%System32explorerframe.dll"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue " " "%SystemRoot%System32dataexchange.dll"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721} setvalue " " "IInterruptedOperationHandler"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2} setvalue " " "IFileOperationProgressSink"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C} setvalue " " "IOperationsProgressDialog"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8} setvalue " " "IOperationStatusTile"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1} setvalue " " "IOperationStatusService"
ClassesInterface{6D5174EC-F425-4CD9-8643-CF36042987F1}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82} setvalue " " "IObjectWithCachedState"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C} setvalue " " "IImmersiveShellBroker"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61} setvalue " " "IOperationStatusSink"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
ClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F} setvalue " " "IConflictInterrupt"
ClassesInterface{6FAF1156-8855-47B5-BDC8-4555D13C095F}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797} setvalue " " "IOperationInterrupt"
ClassesInterface{8F45EF43-0585-4881-A90D-F55D35CE7797}ProxyStubClsid32 setvalue " " "{95E15D0A-66E6-93D9-C53C-76E6219D3341}"
MicrosoftOleExtensions setvalue "DragDropExtension" "{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}"
ClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341} setvalue " " "PSFactoryBuffer"
ClassesCLSID{95E15D0A-66E6-93D9-C53C-76E6219D3341}InProcServer32 setvalue " " "X:WindowsSystem32OneCoreUAPCommonProxyStub.dll"

regexportX32.txt

ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue " " "X:WindowsSystem32twinapi.dll"
ClassesCLSID{958a6fb5-dcb2-4faf-aafd-7fb054ad1a3b}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{B52D54BB-4818-4EB9-AA80-F9EACD371DF8} setvalue " " "Windows Search Platform"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F} setvalue " " "Local Thumbnail Cache"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{50EF4544-AC9F-4A8E-B21B-8A26180DB13F}InprocServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f} setvalue " " "Local Icon Cache"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{2155fee3-2419-4373-b102-6843707eb41f}InprocServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2} setvalue " " "Local Thumbnail Cache"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InprocServer32 setvalue " " "X:WindowsSystem32thumbcache.dll"
ClassesCLSID{7efc002a-071f-4ce7-b265-f4b4263d2fd2}InprocServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6} setvalue " " "PSFactoryBuffer"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue " " "X:WindowsSystem32ActXPrxy.dll"
ClassesCLSID{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6} setvalue " " "Shell Name Space ListView"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue " " "%SystemRoot%System32explorerframe.dll"
ClassesCLSID{AE054212-3535-4430-83ED-D501AA6680E6}InProcServer32 setvalue "ThreadingModel" "Apartment"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue " " "%SystemRoot%System32dataexchange.dll"
ClassesCLSID{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}InProcServer32 setvalue "ThreadingModel" "Both"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721} setvalue " " "IInterruptedOperationHandler"
ClassesInterface{036B4FC7-6A11-4C07-8046-22D268C37721}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2} setvalue " " "IFileOperationProgressSink"
ClassesInterface{04B0F1A7-9490-44BC-96E1-4296A31252E2}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C} setvalue " " "IOperationsProgressDialog"
ClassesInterface{0C9FB851-E5C9-43EB-A370-F0677B13874C}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8} setvalue " " "IOperationStatusTile"
ClassesInterface{4AE7498C-E1C0-475F-8573-41C26127C5D8}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{0C3C904A-AD89-4851-9C3D-210C080CEE18} setvalue " " "IOperationStatusService"
ClassesInterface{0C3C904A-AD89-4851-9C3D-210C080CEE18}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82} setvalue " " "IObjectWithCachedState"
ClassesInterface{CD17328B-E4EF-4215-A92D-62A914658F82}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C} setvalue " " "IImmersiveShellBroker"
ClassesInterface{9767060C-9476-42E2-8F7B-2F10FD13765C}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61} setvalue " " "IOperationStatusSink"
ClassesInterface{9BE5F0C8-774A-4070-9C9E-0627765E6C61}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{7CCBC4D6-7AC7-415C-B5BE-FAF75D8A1E85} setvalue " " "IConflictInterrupt"
ClassesInterface{7CCBC4D6-7AC7-415C-B5BE-FAF75D8A1E85}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
ClassesInterface{FEE9E8EA-1D4B-4076-88B1-CCCAAEC1C8AA} setvalue " " "IOperationInterrupt"
ClassesInterface{FEE9E8EA-1D4B-4076-88B1-CCCAAEC1C8AA}ProxyStubClsid32 setvalue " " "{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}"
MicrosoftOleExtensions setvalue "DragDropExtension" "{9FC8E510-A27C-4B3B-B9A3-BF65F00256A8}"

И сохраняем эти файлы в папке C:BuildPEutil

10. Подготовка виртуальной машины

Необходимо скачать и установить виртуальную машину. Учитывая что нам необходима лишь одновременно запущенная одна виртуальная машина, то достаточно будет VMware Workstation Player, но вы можете использовать и другую на своё усмотрение, например, VirtualBox.

Я не буду расписывать как устанавливать виртуальную машину, думаю тут ничего сложного несколько раз нажать «Далее», а вот как её настроить:

  • Запускаем VMware Workstation Player и нажимаем Create a New Virtual Machine.
  • Пропускаем выбор установочного носителя нажав I will install the operating system later.
  • Выбираем Windows 10 and later x64 и нажимаем Next. Примечание: при создании образа x32 вы можете использовать эту же виртуальную машину, в настройках поменяв с Windows 10 and later x64 на Windows 10.
  • На своё усмотрение указываем имя виртуальной машины и путь, где она будет хранится.
  • На своё усмотрение указываем объем виртуального диска, нам потребуется буквально несколько мегабайт, но на всякий случай лучше указать, например, 2Гб. При указании объема лучше всего выбрать Store virtual disk as a single file, это облегчит задачу, когда мы будем извлекать из диска нужные файлы.
  • На этом этапе виртуальная машина готова, но надо её ещё настроить. Итак, в списке виртуальных машин выберите только что созданную и нажмите на Edit virtual machine settings.

Укажите следующие параметры:

  • Объем оперативной памяти на своё усмотрение, для комфортной работы желательно не менее 2-4Гб, у меня стоит 6Гб.
  • Количество выделяемых потоков для виртуальной машины, для комфортной работы желательно не менее двух, у меня стоит 4.
  • В CD/DVD выбираем Use ISO image file и указываем файл C:BuildPEISOMyPE21H2x64.iso

Машина готова для запуска, но подключенный к ней .iso файл пока не готов. И об этом в следующем разделе. Начинается самое интересное.

Итак, у нас всё готово для начала сборки своего PE образа!

II. Редактирование WIM и ISO

1. Редактирование WIM

Открываем от имени администратора Среду средств развертывания и работы с образами и списываем следующие команды:

*для новичков* отобразить редакции в .wim файле чтобы понимать с чем вы работаете
Dism /Get-WimInfo /WimFile:"C:BuildPEoriginalWIMx64boot.wim"
на всякий случай отключаем .wim файлы если они ранее были подключены
DISM /Cleanup-Wim
в отдельный файл экспортируем из boot.wim вторую редакцию которой является Microsoft Windows Setup (x86), наличие второго файла сохраняет оригинал на всякий случай для дальнейших повторных сборок, а их будет не мало — работа над ошибками
Dism /export-image /SourceImageFile:C:BuildPEoriginalWIMx64boot.wim /SourceIndex:2 /DestinationImageFile:C:BuildPEedit.wim /Compress:max /CheckIntegrity
монтируем образ для внесения изменений
dism.exe /mount-wim /wimfile:C:BuildPEedit.wim /mountdir:C:BuildPEMount /index:1
на этом этапе сворачиваем «Среду средств развертывания и работы с образами», но не в коем случае не закрываем!

прав администратора недостаточно для удаления лишних файлов в образе. чтобы повысить себе плава ещё выше, я обычно запускаю от имени администратора Explorer++, открываю папку, например, C:BuildPE и находясь в ней нажимаю на , после чего у меня открывается командная строка в которой я ввожу следующие команды:

удаляем программу установки ОС


erase C:BuildPEMountSetup.exe
takeown /F C:BuildPEMountsources*.* /A
rd C:BuildPEMountsources /s/q

создаём каталог «Рабочий стол» для пользователя СИСТЕМА без которого Explorer++ может выдавать ошибку
mkdir C:BuildPEMountWindowsSystem32configsystemprofileDesktop
удаляем ненужные ярлыки из меню Пуск чтобы не видеть их в меню WinXShell

rd "C:BuildPEMountProgramDataMicrosoftWindowsStart MenuPrograms" /s/q
rd "C:BuildPEMountUsersDefaultAppDataRoamingMicrosoftWindowsStart MenuPrograms" /s/q

переходим в каталог, где хранится offlinereg и вносим изменения в реестр

cd /d C:BuildPEutilofflinereg
offlinereg-win64 C:BuildPEMountWindowsSystem32configSOFTWARE " " run C:BuildPEutilregexportX64.txt

копируем весь надор своего софта+доп файлы для ОС
xcopy /y /o /e "C:BuildPEAddFilesx64*.*" "C:BuildPEMount*.*"
удалем лишние логи [дело привычки]


CD /D C:BuildPEMountWindowsSystem32config
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountWindowsSystem32SMIStoreMachine
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountUsersDefault
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F

возвращаемся в «Среду средств развертывания и работы с образами»
размонтируем образ
Dism /Unmount-Image /MountDir:"C:BuildPEMount" /commit
отключаем .wim файл
DISM /Cleanup-Wim
экспортируем готовый образ в новый .wim файл с целью избавится от папки [DELETED] который создаётся после редактирования .wim файла
DISM /export-image /sourceimagefile:C:BuildPEedit.wim /sourceindex:1 /destinationimagefile:C:BuildPECOMPLETE64boot.wim /compress:maximum
удаляем .wim файл в котором происходили изменения
erase C:BuildPEedit.wim

Те же команды для удобства копипаста

В «Среде средств развертывания и работы с образами»

Dism /Get-WimInfo /WimFile:"C:BuildPEoriginalWIMx64boot.wim"
DISM /Cleanup-Wim
Dism /export-image /SourceImageFile:C:BuildPEoriginalWIMx64boot.wim /SourceIndex:2 /DestinationImageFile:C:BuildPEedit.wim /Compress:max /CheckIntegrity
dism.exe /mount-wim /wimfile:C:BuildPEedit.wim /mountdir:C:BuildPEMount /index:1

В cmd Explorer++

erase C:BuildPEMountSetup.exe
takeown /F C:BuildPEMountsources*.* /A
rd C:BuildPEMountsources /s/q
mkdir C:BuildPEMountWindowsSystem32configsystemprofileDesktop
rd "C:BuildPEMountProgramDataMicrosoftWindowsStart MenuPrograms" /s/q
rd "C:BuildPEMountUsersDefaultAppDataRoamingMicrosoftWindowsStart MenuPrograms" /s/q
cd /d C:BuildPEutilofflinereg
offlinereg-win64 C:BuildPEMountWindowsSystem32configSOFTWARE " " run C:BuildPEutilregexportX64.txt
xcopy /y /o /e "C:BuildPEAddFilesx64*.*" "C:BuildPEMount*.*"
CD /D C:BuildPEMountWindowsSystem32config
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountWindowsSystem32SMIStoreMachine
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountUsersDefault
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F

В «Среде средств развертывания и работы с образами»

Dism /Unmount-Image /MountDir:"C:BuildPEMount" /commit
DISM /Cleanup-Wim
DISM /export-image /sourceimagefile:C:BuildPEedit.wim /sourceindex:1 /destinationimagefile:C:BuildPECOMPLETE64boot.wim /compress:maximum
erase C:BuildPEedit.wim

Готово! .WIM образ Windows 10 PE 21H2 x64 создан, осталось лишь занести его в .iso файл и можно пробовать первую заготовку. Теперь тоже самое можно повторить и для Windows 10 PE 1507 x32, но на этот раз я уберу комментарии дабы проще было копировать:

В «Среде средств развертывания и работы с образами»

Dism /Get-WimInfo /WimFile:"C:BuildPEoriginalWIMx32boot.wim"
DISM /Cleanup-Wim
Dism /export-image /SourceImageFile:C:BuildPEoriginalWIMx32boot.wim /SourceIndex:2 /DestinationImageFile:C:BuildPEedit.wim /Compress:max /CheckIntegrity
dism.exe /mount-wim /wimfile:C:BuildPEedit.wim /mountdir:C:BuildPEMount /index:1

В cmd Explorer++


erase C:BuildPEMountSetup.exe
takeown /F C:BuildPEMountsources*.* /A
rd C:BuildPEMountsources /s/q
mkdir C:BuildPEMountWindowsSystem32configsystemprofileDesktop
rd "C:BuildPEMountProgramDataMicrosoftWindowsStart MenuPrograms" /s/q
rd "C:BuildPEMountUsersDefaultAppDataRoamingMicrosoftWindowsStart MenuPrograms" /s/q
cd /d C:BuildPEutilofflinereg
offlinereg-win64 C:BuildPEMountWindowsSystem32configSOFTWARE " " run C:BuildPEutilregexportX32.txt
xcopy /y /o /e "C:BuildPEAddFilesx32*.*" "C:BuildPEMount*.*"
CD /D C:BuildPEMountWindowsSystem32config
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountWindowsSystem32SMIStoreMachine
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F
CD /D C:BuildPEMountUsersDefault
DEL *.LOG1 /A /S /Q /F
DEL *.LOG2 /A /S /Q /F
DEL *.BLF /A /S /Q /F
DEL *.REGTRANS-MS /A /S /Q /F

В «Среде средств развертывания и работы с образами»

Dism /Unmount-Image /MountDir:"C:BuildPEMount" /commit
DISM /Cleanup-Wim
DISM /export-image /sourceimagefile:C:BuildPEedit.wim /sourceindex:1 /destinationimagefile:C:BuildPECOMPLETE32boot.wim /compress:maximum
erase C:BuildPEedit.wim

Готово! .WIM образ Windows 10 PE 1507 x32 создан, осталось лишь занести его в .iso файл и можно пробовать первую заготовку.

2. Редактирование .iso

С помощью UltraISO открываем наши .iso файлы, и в папку sources и вставляем наши только что испеченные файлы C:BuildPECOMPLETEx64boot.wim в C:BuildPEISOMyPE21H2x64.iso и C:BuildPECOMPLETEx32boot.wim в C:BuildPEISOMyPE1507x32.iso, и сохраняем оба .iso файла.

Далее я буду рассказывать всё лишь в варианте Windows 10 PE 21H2 x64 т.к. дальнейшие шаги один в один, а не чуть-чуть отличаемые как прежних пунктах, где можно было что-то напутать «на замыленный глаз».

3. Первый запуск WinPE и настройка

Открываем VMware Workstation Player и выбираем нашу виртуальную машину, она уже настроена и готова для запуска, и можно её включать, нажав Play virtual machine. При появлении надписи Press any key to boot from CD or DVD нажимаем любую клавишу и ждём окончания загрузки.

Что мы видим? Командную строку с перечислением каких-то характеристик железа виртуальной машины. А где меню? А где графический интерфейс? Сейчас всё будет. Вы можете вызвать либо CLaunch путем нажатия комбинации клавиш Win+Z, либо запустить графический интерфейс WinXShell путем ввода в командную строку UI.bat или открыв CLaunch и нажав на соответствующий пункт.

image

Мы уже интегрировали в Windows PE нужные нам программы, некоторым программам не нужны никакие настройки, но некоторым они обязательны, и теперь мы можем их настроить чтобы получить файл настроек, затем сохранить его на отдельном виртуальном диске для дальнейшего извлечения в папку C:BuildPEAddFiles… для дальнейшего создания второй версии своей Windwos PE в которой программы уже будут настроены так, как нам надо.

Чтобы сохранить файлы, нужен виртуальный диск, мы его подключили, но не форматировали. Поэтому с этого и начнём.

В запущенной Windwos PE в открытой командной строки вводим следующие команды:

diskpart
select disk 0
create partition primary
format quick override
assign
exit

После чего у нас будет диск С. Если вы сделали его объемом 2Гб, то хоть объём у него и небольшой, но нам и этого более чем достаточно т.к. необходимо скопировать лишь несколько конфигов объемом как правило менее 1Мб.

  1. Настройка CLaunch — Эта программа уже настроена в большей степени, но вы можете увеличить количество пунктов дополнив их своими программами, а также добавить дополнительные вкладки, настроить размеры окна, горячую клавишу вызова меню и т.д. После закрытия программы через Alt+F4 она сохранит все настройки внутри своего же каталога X:Program FilesCLaunchData которые вы можете скопировать на диск C: воспользовавшись проводником Explorer++ который вы можете включить либо через заранее настроенный CLaunch, либо прописать в командной строке explorer++.
  2. Настройка меню Пуск WinXShell — В Explorer++ откройте диск X:Program Files и сделайте ярлыки нужных вам программ, все созданные ярлыки вы можете скопировать на диск C:.
  3. Настройка Notepad++ — после настройки Notepad++ все свои файлы настроек он хранит по адресу X:UsersDefaultAppDataRoamingNotepad++ которые также можно скопировать на диск C:

По окончанию всех работ по настройке программ и созданию ярлыков, а быть может вы и батники какие-нибудь создавали, вы можете выключить виртуальную машину, и с помощью 7-Zip открыть файл виртуального диска который находится там где вы указали адрес виртуальной машины при её создании, например, C:Users%username%Virtual MachinesVHDBuildMyPE.vmdk, открыв .vmdk файл извлеките из него все конфигурации что вы создали и распределите по нужным каталогам для создания финального образа (эх, если бы всё так было просто):
Все созданные ярлыки для меню пуск извлечь в каталог C:BuildPEAddFilesx64ProgramDataMicrosoftWindowsStart Menu
Настройки CLaunch извлечь в каталог C:BuildPEAddFilesx64Program FilesCLaunchData
Настройки Notepad++ извлечь в каталог C:BuildPEAddFilesx64UsersDefaultAppDataRoamingNotepad++
Если вы перенастраивали Explorer++, то его настройки хранятся там же где и .exe файл, а в нашем случае это C:BuildPEAddFilesx64WindowsSystem32

Я не просто так показал пример с настройками, дело в том, что новички могут не сразу понять, что куда копипастить, а тут сразу 2 варианта:

  1. Программа хранит настройки в своей отдельной папке
  2. Программа хранит настройки рядом с своим .exe
  3. Программа хранит настройки в AppData
  4. Тут ещё не хватает варианта, когда программа хранит настройки в реестре, и тут уже гугл в помощь, а то для этой цели и так очень длинная статья сильно разрастется.

Ну чтож, на этом этапе мы готовы создать вторую версию образа. Для этого удаляем или переименовываем .wim файл C:BuildPECOMPLETEx64boot.wim, чтобы на его месте создать новый, и полностью повторяем шаг II.1 и II.2. Запускаем виртуальную машину и проверяем результат своих работ, находим ошибки, исправляем, и снова, и снова, и снова создаём новую версию образа до тех пор, пока не будет идеальный для вас вариант.

Надеюсь, моя статья оказалась для вас полезна. Она, конечно, достаточно занудна, но я решил, что уж лучше один раз доходчиво всё объяснить, чем оставить людей без какой-то ценной информации, которую можно искать годами.

P.S.

У меня была ситуация, когда был ноутбук, у которого исправно загружается ОС, и после того, как пропадает логотип Windows и перед тем, как начнется загрузка пользователя, появляется пауза длиной в 1-3 минуты. И как задать вопрос поисковику? Черный экран после загрузки ОС? Любой поисковик будет думать, что дело в том, что компьютер вообще не загружается и черный экран висит всё время после старта, выдан миллиард страниц на эту тему, а подойдёт по теме лишь единицы, которые даже не первых 100 страниц поиска (я проверял). Выходит, какими бы умными не были поисковики, а вот такие уточнения они ещё не скоро начнут понимать. Я сам задавал этот запрос в течении долгого времени, перелистал без шуток, сотни страниц, и по великой случайности, уже не через поисковики, а по темам форумов, перескакивая с одного форума на другой, как темы при разговоре с интересным человеком, в итоге нашел ответ на свой вопрос. Дело было в ULPS, который нужно было отключить в реестре. Это я всё к чему. С созданием Windows PE такая же ситуация, и например, чтобы сделать рабочим окно копирования в последних версиях ОС, нужно сделать то, о чем не знает даже Google, а как уж задать вопрос, это ещё сложнее. Собственно, именно это и стало причиной написать эту статью, раз уж другие умельцы об этом не пишут, хотя на торрентах свои работы выкладывают:)

III. Интеграция пакетов и драйверов

В начале статьи я обещал рассказать о интеграции дополнительных пакетов которые мы так и не установили в наш образ. Cкачиваем и дополнительно устанавливаем надстройку Windows PE для Windows ADK.

Допустим вам необходимо добавить NetFX, делаем следующее:
В уже смонтированном образе в пункте II.2 перед командой Dism /Unmount-Image /MountDir:«C:BuildPEMount» /commit вводим следующие команды:

Dism /Add-Package /Image:"C:BuildPEMount" /PackagePath:"C:Program Files (x86)Windows Kits10Assessment and Deployment KitWindows Preinstallation Environmentamd64WinPE_OCsWinPE-WMI.cab"
Dism /Add-Package /Image:"C:BuildPEMount" /PackagePath:"C:Program Files (x86)Windows Kits10Assessment and Deployment KitWindows Preinstallation Environmentamd64WinPE_OCsWinPE-NetFX.cab"

Найти полный список дополнительных пакетов, а также узнать зависимости этих пакетов, вы сможете на этой странице.

Допустим вам необходимо интегрировать драйвер (например, линий PCI и накопителей SSD для MacBook последних лет чтобы вручную каждый раз их не устанавливать на рабочей ОС WinPE), то вводим следующую команду
Dism /image:C:BuildPEMount /Add-Driver /Driver:C:BuildPEDrv*.inf
Где * — это или все драйвера что есть в каталоге C:BuildPEDrv, или замените *, на имя конкретного файла драйвера.

Всем спасибо!

Как создать свой WinPE? Полностью адаптированный под свои нужды LiveDisk с урезанной средой Windows 10. С помощью которого можно было бы загрузить компьютер и устранить любые проблемы операционной системы – проникновение вирусов или повреждение загрузчика. И решить различные вопросы, которые невозможно решить в работающей Windows. Собственный WinPE можно создать с помощью конструктора Win10XPE.

Рассмотрим, как это делается.

Готовые WinPE

Но, прежде чем мы приступим к созданию своего WinPE, стоит упомянуть об использовании готовых WinPE, содержащих необходимые инструменты практически для всех случаев. Образы таких WinPE можно скачать на торрент-трекерах. При необходимости использования отсутствующей в составе WinPE программы папку с её портативной версией можно поместить на флешку после записи на неё образа WinPE.

В числе лучших таких WinPEWinPE от Sergei Strelec, 2k10, AdminPE. Но есть нюанс. Во-первых, ранее обновляемые и активно поддерживаемые сборщиками эти WinPE более не обновляются и не поддерживаются. Во-вторых, они содержат пиратский софт.

WinPE

Первый нюанс может стать проблемой для тех, кому принципиально нужна актуальная среда WinPE и свежий софт. Второй – для тех, кто использует WinPE в профессиональной деятельности и не хочет рисковать. Для всех их актуальный нелицензируемый WinPE с бесплатным или приобретённым софтом мог бы стать идеальным решением.

Как же создать свой WinPE?

Средства создания WinPE

Средств создания WinPE немного. Официальный способ создания WinPE от компании Microsoft предусматривает использование различных её средств развёртывания (Windows, ADK). Способ сложный, рассчитанный на разработчиков. Более просты в использовании сторонние средства – конструкторы WinPE.

Один из таких конструкторов — AOMEI PE Builder. Он бесплатный, создаёт WinPE с программами AOMEI, позволяет включать свои портативные программы. Создать WinPE с помощью этого конструктора легко и просто, однако мы получаем слишком урезанную среду WinPE. И из-за отсутствия определённых системных компонентов в ней будут запускаться не все портативные программы.

Оптимальный вариант создания WinPE – конструктор Win10XPE. Также бесплатный, не слишком прост в освоении. Но он реализует полноценную настраиваемую среду WinPE, в которой можно не только запускать портативные программы, но даже устанавливать обычные, инсталлируемые в Windows.

WinPE

Предусматривает среду восстановления Windows. При необходимости в его состав можно включить процесс установки Windows.

Как с помощью этого конструктора создать свой WinPE?

Скачивание Win10XPE и подготовка дистрибутива

Win10XPE – это пакет ПО для создания WinPE на базе Windows 10.

Скачать можно на сайте его проекта:

http://win10se.cwcodes.net/Compressed/index.php

Скачанный пакет Win10XPE распаковываем в корень диска С.

Далее в корне диска С создаём папку и помещаем в неё содержимое ISO-образа Windows 10. Принципиально важно, чтобы это был образ чистой сборки Windows 10 — не кастомной, без вмешательств, желательно полученный с ресурсов Microsoft. Для копирования содержимого ISO необходимо двойным кликом подключить образ, чтобы он открылся в проводнике.

В итоге у нас в корне диска С должно быть две папки: одна — с содержимым Win10XPE, другая – с содержимым ISO-образа Windows 10.

Проводник

Теперь в папке Win10XPE запускаем конструктор Win10XPE. И поэтапно производим необходимые настройки.

Настройки Win10XPE

Первым делом нам нужен раздел «Win10XPE». В нём кнопкой обзора указываем путь к папке с содержимым образа Windows 10 в корне диска С. После добавления пути отслеживаем, чтобы была указана редакция дистрибутива Pro.

WinBuilder

Далее перемещаемся в раздел «Build Core». Здесь внизу слева можем настроить компоненты WinPE. От этого будет зависеть функциональность среды.

По умолчанию нам предлагается некий оптимальный набор этих компонентов. Он, кстати, включает возможность установки программ в WinPE, за это отвечает активная галочка компонента Msi Windows Installer. Некоторые предустановленные компоненты — как, например, Internet Explorer 11 — можем отключить, сняв их галочку. А некоторые – как, например, Windows Installer Files – можем включить, установив их галочку. Этот компонент добавляет в WinPE процесс установки Windows – полезнейшую возможность на случай, если установленную Windows при сбое не удастся реанимировать.

В общем, определяемся, какие нам нужны компоненты. Если для загрузки компьютера нужны драйверы каких-то специфических устройств, внизу справа устанавливаем галочку «Integrate Drivers». Далее кликаем «Copy Drivers Here», откроется в проводнике папка. В эту папку необходимо поместить драйверы.

Copy Drivers Here

Далее работаем с разделом «Apps».

Здесь можно настроить интеграцию программ в WinPE. Всё это бесплатные программы, предлагаемые Win10XPE. И это подборка только годных программ. Отмечаем галочки тех, которые хотим добавить. Для каждой программы устанавливаем нужный язык. При необходимости корректируем дефолтные настройки.

Win10XPE

Далее можем включить в ISO-образ WinPE свои программы – портативные и инсталляторы обычных. Это не обязательно, эти программы можно после записи образа WinPE на флешку поместить на ту же флешку. Но, например, если запускать виртуальные машины с ISO WinPE, то программы должны быть интегрированы в этот ISO.

Открываем раздел «Create ISO», устанавливаем галочку «Indude Files In ISO Root». Жмём «Open ISO Root Folders».

Win10XPE

Откроется в проводнике папка, куда необходимо поместить программы.

Win10XPE

Доступ к этим программам впоследствии можно будет получить в корне ISO или флешки WinPE.

Создание образа WinPE

На этом с основными настройками WinPE всё. Можем записывать ISO. Нажимаем кнопку «Play».

Win10XPE

Как только начнётся процесс создания WinPE, Win10XPE запросит у нас разрешение на загрузку файлов Windows ADK. Даём добро на это нажатием «Yes».

Win10XPE

По завершении создания ISO получаем образ WinPE в папке Win10XPE.

Win10XPE

Осталось этот образ записать на флешку.

И Win10XPE, кстати, в этом деле может помочь. В конструктор интегрированы портативные утилиты для записи образов на флешки USB7ice и Rufus. Заходим в раздел «Create ISO». В блоке «Copy to USB» можем запустить любую из этих утилит.

Win10XPE

Возможности Win10XPE на перспективу

Мы рассмотрели лишь основные возможности Win10XPE по созданию WinPE. Этот конструктор может больше. Он предусматривает персонализацию WinPE, интеграцию скриптов и плагинов, прочие возможности. В перспективе все эти возможности можно исследовать. В помощь исследующим – мануал по работе с конструктором в папке Win10XPE.

Win10XPE

Загрузка…

Updated by
Daisy on Sep 22, 2022 

What is WinPE Bootable Disk

WinPE, known as Windows Pre-installation Environment, is a lightweight version of different Windows OS, such as Windows 10/8/7/XP. It is a minimal operating system where you can prepare a PC for installation, deployment, and Windows servicing.

Why Need to Create a WinPE Bootable Disk

WinPE bootable disk supports to manage hard disk partitions when Operating System crashes, resize primary drive to reinstall other OS, and even manage partitions on a computer without Operating System. Moreover, it allows you to recover deleted partition, extend system partition, and rebuild MBR without losing any data. The most important thing is that the WinPE bootable disk can boot a crashed computer and boot a computer without OS. Here in this guide, we will tell you how to create a WinPE bootable disk in two ways.

Method 1. Create WinPE Bootable Disk in Two Steps

Creating a WinPE bootable disk is very complicated. It does not only contains many steps but also requires users to have advanced computer knowledge. As a result, we recommend a third-party tool — EaseUS Partition Master to help Windows beginners. EaseUS Partition Master is specialized in computer partition management. It allows users to resize, move, extend partitions, change SSD from MBR to GPT, and even migrate OS to HDD/SSD on computers without losing data under different Windows OS. More importantly, it can help users to create WinPE bootable disk with fewer steps.

Now download EaseUS Partition Master and follow the guide below to see the easiest method of creating a WinPE bootable disk.

Step 1. To create a bootable disk of EaseUS Partition Master, you should prepare a storage media, like a USB drive, flash drive or a CD/DVD disc. Then, correctly connect the drive to your computer.

Step 2. Launch EaseUS Partition Master, and find the «Bootable Media» feature on the left. Click on it.

Step 3. You can choose the USB or CD/DVD when the drive is available. However, if you do not have a storage device at hand, you can also save the ISO file to a local drive, and later burn it to a storage media. Once made the option, click the «Create» button to begin.

  • Check the Warning message and click «Yes».

When the process finishes, you have successfully created an EaseUS Partition Master WinPE bootable disk. Now, you can manage your hard disks and partitions through the bootable drive whenever the computer fails to boot normally.

If you have RAID drives, load the RAID driver first by clicking Add Driver from the menu bar, which can help you add the driver of your device under WinPE environment, as some specific device cannot be recognized under WinPE environment without drivers installed, such as RAID or some specific hard disk.

Method 2. Create WinPE Bootable Disk with Windows ADK

Another method you could apply is to use Windows ADK. This method is a little complicated. If you want to have a try, follow the step-by-step guide below.

Step1. Download the Windows ADK (Assessment and Deployment Kit). It contains the CopyPE and MakeWinPEMedia command-line utilities.

Step 2. Launch the ADK tool, select the «Install the Windows Assessment and Deployment Kit-Windows 10 to this computer» and click «Next».

Install Windows ADK Tool

Step 3. On the subsequent page, click «Next» and «Accept».

Step 4. Choose the «Deployment Tools» and «Windows Preinstallation Environment (Windows PE)» options and click «Install».

Select the Features You Want to Install

Step 5. Close the installation process when it’s finished. Open the Start menu and go to «Windows Kits». Right-click «Deployment and Imaging Tools Environment» and head to «More» > «Run as administrator».

Step 6. When it runs, execute the command: copype amd64 G:WinPEx64 (replace G: with your drive letter).

Step 7. Then execute the command: MakeWinPEMedia /ISO G:WinPEx64 G:WinPEx64WPE64.iso. When you see «100% complete» and «Success», it means you’ve successfully created WinPE files.

Step 8. Now you can navigate to the G drive or where you created the WinPE files. There you will see a WinPE iso file.

Then you can connect the target disk to the computer, and burn ISO files to it to make it bootable. For this task, you can use Windows To Go (an available feature in Windows 10 Education/Enterprise/Pro and Windows 8/8.1 Enterprise).

Step 9. Type «Windows To Go» in the search box to launch this tool.

Step 10. It will automatically search for all inserted USB drives. Choose the destination USB drive and then «Next» to continue.

Step 11. Click «Add search location» to search for the Windows installation ISO file and choose the mounted ISO file.

Step 12. On the next window, you can set a BitLocker password to encrypt your Windows To Go workplace.

At last, you will get a WinPE bootable disk for Windows 10.

Понравилась статья? Поделить с друзьями:
  • Загрузочный диск windows 98 с поддержкой usb
  • Загрузочный диск windows 98 se rus скачать бесплатно
  • Загрузочный диск windows 7 стандартными средствами
  • Загрузочный диск windows 7 с утилитами скачать
  • Загрузочный диск windows 7 с офисом