Запуск процесу з консолі відновлення windows

У Windows існує консоль відновлення - особливий режим командного рядка для діагностики та виправлення збоїв. Цей режим можна запускати з інсталяційного диска Windows, а можна встановити на системний розділ і мати можливість запуску цього режиму у вигляді опції завантаження. Консоль відновлення в цьому випадку прописується в boot.ini як варіант завантаження комп'ютера.

Консоль відновлення це командний рядок на чорному екрані. Схоже на режим завантажувального екрану (який в сучасних версіях Windows чорного кольору), в якому виконуються native-додатки до вікна входу в систему (типу перевірки дискового розділу після перезавантаження). Я вирішив перевірити, чи можлива запуск і робота native-додатків з-під консолі відновлення. Простіше кажучи, чи можливо запустити програму в консолі відновлення. Ще я робив спробу запустити native-додаток в ReactOS.

Для цього слід встановити консоль відновлення на жорсткий диск. Вставляється інсталяційний диск Windows, виконується команда X: \ i386 \ winnt32.exe / cmdcons і консоль відновлення виявляється встановленої в папку C: \ cmdcons. Відразу можна звернути увагу на те, що в цій папці міститься два файли .exe, а саме autochk.exe і autofmt.exe. Це ні що інше, як native-версії утиліт chkdsk і format, перевіряється і форматується дисків. Раз в папці консолі відновлення лежать native-додатки, значить, Відповідна функціональність консолі реалізується через їх запуск.

Взагалі, в консолі відновлення за обробку команд відповідає файл spcmdcon.sys. Це драйвер, а не native-додаток. Модуль використовує функції іншого драйвера, setupdd.sys, який містить функції з промовистими назвами SpvidDisplayString, WriteNtfsBootSector і т. П. Було б заманливо використовувати ці функції і написати свою заміну spcmdcon.sys, але API цих функцій невідомо.

Потрібно було перевірити, що буде, якщо підмінити autochk.exe на свою програму. Написав нативний Hello World, вставив в папку cmdcons замість autochk.exe, завантажився в режимі консолі відновлення.

Набрав в консолі відновлення команду chkdsk C: / P, яка повинна викликати процес autochk.exe для виконання перевірки диска. Консоль відновлення видала мені по електронній пошті про неможливість проведення перевірки. Рядок «Hello, world!» Не з'явилася на екрані. Тоді я припустив, що процес запускається, просто не працює висновок на екран, так як висновок повідомлень реалізований інакше, ніж як в режимі синього екрану. Тоді я скомпілював інший додаток, яке повинно було просто вимкнути комп'ютер:

Поклав його замість autochk.exe, перезавантажився в консоль відновлення, набрав chkdsk C: / P. Комп'ютер вимкнувся.

Тоді я спробував запустити таким же точно чином свій Native Shell. З'ясував, що він реагує на введення команд з клавіатури, але також нічого не виводить на екран.

Висновки з експерименту такі: можливий запуск native-процесу з консолі відновлення. Висновок на екран не працює, так як механізм виведення не дозволяє використовувати функцію NtDisplayString. Версії програм autochk.exe і autofmt.exe, що лежать в каталозі консолі відновлення - ті ж самі native-додатки, що лежать в system32 папки Windows. Але висновок повідомлень при використанні цих програм не збігається з висновком в разі запуску з Windows. Отже, висновок в консолі відновлення генерується самої консоллю відновлення. Як вона дізнається про етапи перевірки, не знаю. Але повідомлення на екран виводить spcmdcon.sys, а не autochk.exe.

Було б цікаво знайти спосіб виводити повідомлення на екран в консолі відновлення, а також відразу запускати своє власне додаток, минаючи командний рядок spcmdcon.sys.

Схожі статті