ERD Commander (Winternals PE, DaRT-Diagnostics and Recovery Toolset) на загрузочной USB-Flash или CD/DVD
[by  microsaint{at}gmail.com  microsaint.narod.ru] 

ERD Commander - это версия WinPE (аналог Bart's PE), разработанная Winternals (Русинович) под крылом MS.  Отличается от BartPE наличием встроенных утилит для: редактирования пользователей, реестра, авторана, сервисов и служб, драйверов, удаления хотфиксов, восстановления файлов, восстановления системных файлов. Выглядит это так - выбираете из списка найденных систем необходимую, логинитесь в нее и с помощью визордов можете ее исправлять/настраивать.
Для ознакомления посмотрите следующие статьи:
Справка по ERDC
Список входящих в ERDC утилит и краткое описание
Хорошое подробное описание ERDC и работы с ним
Краткое описание от журнала Хаckер
Добавление драйвера на диск ERDC статья от MS KB

Итак, задача состоит в том, чтобы добавить ERDC к нашему мультизагрузочному диску. Во многом принципы сходны с добавлением BartPE за исключением одной неприятной особенности:
В ERDC используется какая-то новая версия загрузчика (setupldr.bin) с правкой которой (замена I386 на ERDC и minint на erdcpe) выводится ошибка при загрузке: NTLDR corrupted. Видимо добавили проверку CRC. Использовать загрузчик от Win2003 тоже не получается, т.к. он виснет при загрузке. Отсюда вылазит ограничение: мы можем использовать заплпнированные в загрузчике директории: для CD - I386, для USB - minint.
Кому удасться поправить название директорий и удачно стартануть просьба отписаться.

Начальная подготовка ERD Commander:
  1. Качаем с сайта MS MSDaRT50Eval.msi или ищем в инете iso-шник по названиям: Microsoft Diagnostics and Recovery Toolset или ERD
  2. Распаковываем из msi-файла (я использовал плагин TotalCommander): erd50.iso - основное, MSDaRT.chm relnotes.htm - для справки.
  3. Распаковываем erd50.iso допустим в c:\erdc
На этом подготовку можно считать законченной. Все необходимые файлы находятся в c:\erdc, с ними и будем производить все наши дальнейшие действия.


Установка на CD/DVD:
Допустим корень директории из которой будет генерироваться *.iso находится в C:\BootCDRoot
  1. Копируем из диретории c:\erdc следующее: I386, win51, win51is, win51is.sp1, bootsect.bin, winbom.ini (!необходим иначе ошибки в \system32\winbom.log)  в корень директории загрузочного диска C:\BootCDRoot\*. Должно получиться так - C:\BootCDRoot\I386.
    Переименовывать ее не станем из-за вышеописанных трудностей.
  2. Переименовываем ВСЕ! названия файлов и директорий в ЗАГЛАВНЫЕ буквы C:\BootCDRoot\I386\*. Это необходимо потому, что файловая система ISO9660/Joliet регистрозависима (с этим же возникают проблемы в menu.lst Grub4Dos в используемых путях - на флэшке с регистронезависимой FAT такой конфиг работать будет, а на загрузочном диске нет).
    Подозреваю это из-за моих настроек mkisofs, потому как другие исошники с маленькими буквами грузятся (тот жеerd50.iso) - кто знает нужную настройку отпишитесь.
  3. Эту операцию легко выполнить в TotalCmd:
    1. Открываем директорию C:\BootCDRoot\I386
    2. Выбираем меню Команды-> Показать все файлы без каталогов (Ctrl+B)
    3. Выбираем меню Файлы-> Пакетное переименование файлов (Ctrl+M)
    4. Посредине открывшегося диалогового окна выбираем Регистр -> ВСЕ ЗАГЛАВНЫЕ
    5. Жмем кнопку Выполнить.

      Пункты 3 и 4 объясняют как поправить пути файлов-меток MS Win CD
      Переместим файлы-метки из корня (чтобы не мешались) в директорию I386 и поправим пути к ним в TXTSETUP.SIF. Это если хотим более этетичной структуры, если же нет оставляем их в корне и переходим к пункту 5.
  4. Редактируем сценарий загрузки C:\BootCDRoot\XPPE\TXTSETUP.SIF Заменяя:
    cdtagfile = "\win51is"
    cdtagfile = "\I386\win51is"
    cdtagfilei = "\win51"
    cdtagfilei = "\I386\win51"
    cdtagfilem = "\win51mp"
    cdtagfilem = "\I386\win51mp"
    spcdtagfilei = "\win51is.sp1"
    spcdtagfilei = "\I386\win51is.sp1"
    cd2tagfilei = "\win51ip2" cd2tagfilei = "\I386\win51ip2"

  5. Перемещаем файлы-метки (win51, win51is, win51is.sp1) из корня дистрибутивного диска Windows в C:\BootCDRoot\I386\
    WIN51IP.SP3, WIN51IP некоторых файлов может и не быть, их можно сделать самому 0-го размера.
  6. Редактируем в HEX-редакторе файл C:\BootCDRoot\XPPE\SETUPLDR.BIN заменяя I386 на XPPE. Именно поэтому мы использовали ровно 4 буквы.
    Grub4Dos умеет цепочно-грузить (chainload) загрузчики MS - ntldr, поэтому на данном пункте можно закончить подготовку директорий и перейти к созданию ISO-образа - пункт 6.

    Пример пункта меню в конфиг файле menu.lst Grub4Dos:
    title ERD Commander 5.0 from CD/DVD
    find --set-root /CM_Boot.mrk
    chainloader /I386/SETUPLDR.BIN


    Для использования isolinux/syslinux (эти загрузчики не поддерживают chainloading ntldr) необходимо:
    1. Извлечь загрузочный образ (любой программой типа UltraISO MagicISO) оригинального загрузочного диска erd50.iso. Или поищем на диске файл bootsect.bin - это и есть оно. И сохраним в файл C:\BootCDRoot\erdc.bin (расширение важно!) получим файл размером 2048 байт.
    2. Добавляем пункт меню в isolinux/syslinux \boot\isolinux\isolinux.cfg:
      label erdc
          kernel /erdc.bin

  7. Генерируем ISO-образ загрузочного диска с помощью утилиты mkisofs.exe:
    mkisofs -iso-level 4 -volid "CMMultiBoot" -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -boot-info-table -no-emul-boot -boot-load-size 4 -o CM_MultiBoot.iso C:\BootCDRoot
    В BartPE добавлен ключь -force-uppercase - он переводит все! имена файлов в верхний регистр при генерации *.iso, так что можно пропустить пункт 3, но Вам могут понадобиться файлы в нижнем регистре (допустим в батниках HirenCD) поэтому использовать его не рекомендуется.
Сравнить и увидеть изменения в оригинальных и измененных файлах сценария загрузки (txtsetup.sif) можно в архивах Orig_ERDC.zip и ERDC_RusSupport.zip

Используйте в названиях директорий и при правке загрузчиков ЗАГЛАВНЫЕ буквы из-за регистрозависимости ISO9660.

Установка на USB Flash drive:

Будем использовать директорию X:\minint, используемую загручиком для не CD дисков; подробнее смотрите абзац Как это работает
  1. Копируем из диретории c:\erdc следующее: I386, win51, win51is, win51is.sp1, bootsect.bin в корень загрузочного диска X:\*. Должно получиться так - X:\I386. Переименовываем X:\I386 в X:\minint.
  2. Копируем ntdetect.com в корень флэшки. Без Bootsect.bin грузится, но копируем его тоже на всякий случай.
  3. Файлы-метки - WIN51* скопируйте в X:\minint  и сделайте изменения в TXTSETUP.SIF (см. выше пункт 3) - работает и без изменения, видимо дистриб обращает внимание на метки, только когда грузимся с CD.
  4. Grub4Dos умеет цепочно-грузить (chainload) загрузчики MS - ntldr. Загружаем загрузчик MS ntldr из Grub4Dos:

    Пример пункта меню в конфиг-файле menu.lst Grub4Dos:
    title ERD Commander 5.0 from USB
    find --set-root /CM_Boot.mrk
    chainloader /minint/setupldr.bin

    syslinux вообще не задействуем т.к. не поддерживают chainloading ntldr. И кроме того здесь мы играемся с директорией minint, а в бут-секторе есть возможность перенаправить только I386.
Тут никаких файлов мы не правили поэтому подойдет любой из файлов Orig_ERDC.zip или DVD_ERDC.zip

Использовать в названиях директорий и при правке загрузчиков ЗАГЛАВНЫЕ буквы необязательно из-за регистронезависимости FAT16/32/NTFS, которая будет на флэшке.

Руссификация ERD Commander

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

Выбирайте при запуске язык "US", тогда первой будет английская, а второй русская раскладка. Если выберите "Russian", то первой будет русская, а второй английская.

Внимание! данная руссификация не предполагает перевода на русский язык интерфейса оригинальных утилит и меню, входящих в ERD Commander.
Конечно ERDС поддерживает множество языков (европейских и азиатских) и при старте просит выбрать ваш (этим мы и воспользуемся), но среди  них нет кириллических и это досадное недоразумение мы попытаемся исправить.

Что необходимо сделать, чтобы руссифицировать ERDC:
Реестр:
Теоретически существуют два раздела реестра:
  1. Ветка HKEY_LOCAL_MACHINE\SOFTWARE физически находится в файле \SYSTEM32\CONFIG\SOFTWARE
    Ее можно подгрузить в редакторе реестра обычного виндовса, поправить и сохранить.
    В файле \SYSTEM32\CONFIG\DEFAULT находится тот же HKLM\SOFTWARE и еще всякая мелочь.
  2. Ветки HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX... Это более важная для нас часть реестра, где хранятся системные настройки в том числе и кодировка. Не понятно где физически находится! разворачивается динамически при загрузке.
Проблема состоит в том, что для успешной руссификации править надо обе части реестра.

Скрипт:
Внимательно изучим содержимое ERDC:
В файле \SYSTEM32\Winpeshl.ini написано:
[LaunchApp]
AppPath = %SYSTEMROOT%\System32\WindowsShell.exe

Повезло! Это старт оболочки ERDC. Значит можем заменить на свой скрипт, который добавит в реестр нужную инфу и запустит тот же WindowsShell.exe
1. Пробуем исполнить из под ERDC команду regedit /s %SYSTEMROOT%\System32\CMRUSLNG.REG и оказывается, что встроенный редактор работает только с подсоединенным (если залогинились в какую-нибудь систему при старте) реестром. Поэтому копируем реестр от WinXP или Win2003 в \System32\regedt.exe.
2. Добавляем скрипт:
Обратите внимание на последнюю команду pause, если ее не будет то скрипт выполнится и система тут же перезапустится. Так уж сделан ERDC, когда Shell (а мы ведь выступаем в качестве шела) закрывается система перегружается.
%SYSTEMROOT%\System32\regedt /s %SYSTEMROOT%\System32\CMRUSLNG.REG
start %SYSTEMROOT%\System32\WindowsShell.exe
echo If you press anything system reboot!!!
pause

Всё хорошо, но запустив ERDC появляется окно консоли с нашим скриптом, при закрытии которого компьютер перезагружается. Если его не трогать все будет нормально, но юзеры бывают разные и вообще не красиво как-то. Поэтому пришлось написать свою программку, которая сама стартует с атрибутом окна SW_HIDE (по иронии мы не можем писать(вернее ее за-hide-ить сложнее) консольную программу ее будет также видно) и запускает наш скрипт через ShellExecute(NULL,NULL, prgstr,prmstr, NULL, SW_HIDE);

Правка реестра и добавление дополнительных необходимых файлов в ERDC:

За основу был взят плагин русификации BartPE CM_z_ruslang.zip подсмотрев в z_ruslang\z_ruslang.inf какие файлы и ключи реестра копировать с рабочей машины у меня и получился файл CMRUSLNG.REG и набор dll-ок. Кое что (например переключатель раскладки, в BartPE используется скрипт) портировать не удалось, но все что описано в первом абзаце работает.
Внимание! Будьте осторожны не заменяйте SORTKEY.NLS и SORTTBLS.NLS иначе при загрузке вылетит синий экран с ошибкой "can't find start winsrv".

После добавления ключей, таких как:
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts\00000402]
"Layout Text"="Болгарская"
"Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5053"
"Layout File"="KBDBU.DLL"

Оказалось что диалог выбора языка при старте выдает кракозябры (скорее всего в проге жестко прописан чарсет, а юникод использовать не догадались). Пришлось те же самые ключи портировать с английской Win2003.

Шрифты:
В реестре мы поправили информацию о кодировке и шрифтах. Теперь скопируем их, весь список можно посмотреть в архиве ERDC_RusSupport.zip. Вот список самых важных: courer.fon serifer.fon sserifer.fon smaller.fon vga866.fon vgafixr.fon vgasysr.fon.

Но и тут оказалась загвоздка, в консольном окне со стандартным шрифтом (Точечные шрифты = vgaoem.fon = vga866.fon) русские не отбражались, видимо не до конца поправили реестр, искать было лень и я решил просто заменить сами файлы шрифтов. То есть берем все (это перестраховка, достаточно три нижеописанных) шрифты из списка с предыдущего абзаца и копирум их со стиранием последней буквы "r".

Точно необходимо заменить следующие шрифты:
Затереть файлом VGA866.FON файл VGAOEM.FON (!обязательно! это и есть консольный точечный шрифт)
Затереть файлом VGAFIXR.FON файл VGAFIX.FON
Затереть файлом VGASYSR.FON файл VGASYS.FON

Если не помогло (но я уверен что поможет) надо изменить в текущей консоли шрифт на verdana console он TTFный и содержит все символы, в том числе и русские, а значит правильно покажется.

Лучше всего ознакомиться со всеми изменениями, которые я сделал - это посмотреть содержимое архива ERDC_RusSupport.zip. Если его распаковать на ERDC, то должна сразу появиться поддержка русских букв.

На это руссификация может считаться завершенной.
Сайт создан в системе uCoz