Native shell — командная строка в native режиме

Native shell — командная строка для экспериментов с native режимом Windows




English version

Native shell — программа, написанная мной для экспериментов в Native-режиме Windows семейства NT (NT/2000/XP/2003/Vista/7). Этот тот режим, в котором запускается утилита chkdsk, когда ей надо проверить и исправить ошибки в системном разделе. Сам режим (его ещё называют загрузочным режимом) представляет собой синий экран (в Windows XP синий, в других версиях другого цвета), который появляется до появления окна логина в систему. Выглядит этот режим так (нажмите картинку, чтобы увеличить):

Программа распространяется на условиях лицензии GNU General Public License, часть исходников по GNU Lesser General Public License. Упоминания о других авторах исходного кода смотрите в исходных текстах программы. Исходные коды доступны по адресу

https://github.com/amdf/NativeShell

Экран native режима Windows XP c запущенным приложением Native shell
Экран native режима Windows XP c запущенным приложением Native shell

Программа представляет собой шелл, то есть командную строку. В ней можно выполнять несколько базовых операций с файлами и каталогами Windows. Особенность режима заключается в том, что вход в систему ещё не произошёл, а у нас уже есть доступ ко всей файловой системе и реестру. Всё это реализуется посредством вызовов функций Native API из ntdll.dll. Многие ограничения Windows, таким образом, ещё не действуют, пока мы находимся в этом режиме. Кое-что о программировании native приложений я написал здесь.

Запуск программы протестирован в Windows XP и ReactOS.

Возможности программы

  • Запускать другие native процессы и передавать им параметры командной строки
  • Читать клавиатурный ввод и реагировать на команды. Список команд выводится по команде help.
  • Перемещаться по файловой системе с сохранением текущего каталога.
  • Копировать, удалять и перемещать файлы.
  • Создавать каталоги.
  • Выключать и перезагружать компьютер.
  • Выводить список запущенных процессов.
  • Выводить список запущенных исполняемых модулей в памяти.
  • Выводить список устройств в системе.
  • Выводить список файлов в каталоге на экран. При этом показываются имя файла, короткое имя (в формате 8.3), размер и признак каталога. Если в папке много файлов, то программа выводит список файлов страницами. Перейти к другой странице или отказаться от этого можно клавишами Y/N.
  • Выходить из native режима и переходить к нормальному запуску Windows.

Отсутствующие возможности

  • Работа с реестром
  • Автодополнение команд
  • История ввода команд

История версий

  • 0.12 — добавлена команда перемещения или переименования файла (move), исправлен малый размер буфера текущей строки символов на экране; переход с диска на диск вроде бы должен теперь работать.
  • 0.11 — программа переписана на основе исходников Native Command Line Interface (NCLI) из проекта TinyKRNL. За основу взята версия 2006 года. Изменения по сравнению с NCLI: обработка клавиатурного ввода заменена на вариант из библиотеки ZenWINX; добавлены все команды из предыдущих версий Native shell, формат времени при выводе содержимого каталога изменён с 12-часового на 24-часовой; добавлен постраничный вывод содержимого каталога (в NCLI был непрерывный вывод). Изменения по сравнению с Native shell: добавлены команды из NCLI; переписаны некоторые файловые операции, процессы могут запускаться с передачей параметров командной строки, изменены имена некоторых команд. Ограничения: пока не работает переход на другой диск (например с C:\ на D:\).
  • 0.02 — упрощена инициализация клавиатуры (убрана поддержка одновременной обработки нескольких клавиатур), добавлена возможность запускать другие native процессы (пока без передачи им командной строки).
  • 0.01 — начальная версия.

Список консольных команд

Постепенно будут добавляться команды, которые будут реализовывать те или иные функции, которые я хотел бы опробовать в Native-режиме. Если аргумент команды содержит пробел, его надо брать в кавычки (кроме команды cd, она понимает пути без кавычек).

  • если команда не совпадает с одной из описанных ниже, считается, что это имя исполняемого файла для запуска (чтобы программа запустилась, имя исполняемого файла нужно указывать обязательно вместе с расширением)
  • cd X - сменить каталог на X
  • md X - создать каталог X
  • copy X Y - копировать файл X в Y
  • move X Y - перенести или переименовать файл X в Y
  • poweroff - выключить ПК
  • shutdown - выключить ПК
  • dir - показать содержимое каталога
  • pwd - напечатать название текущего каталога
  • del X - удалить файл X
  • reboot - перезагрузить ПК
  • devtree - вывести дерево процессов
  • exit - выход в Windows
  • sysinfo - показать информацию о системе
  • lm - показать исполняемые модули в памяти
  • vid - проверка вывода символов на экран
  • lp - вывод запущенных процессов

Скачать исходный код и исполняемый файл программы Native shell

Исходный код на языке Си. Для сборки нужен WinDDK и заголовочные файлы NTNDK. Частично используется код из библиотеки ZenWINX. Архив также содержит исполняемый файл native.exe. Файлы install.cmd, uninstall.cmd, add.reg, remove.reg помогут установить и удалить приложение.


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