hex.pp.ua

NativeCMD: ещё один шелл native-режима

Командная строка для native-режима Windows




Native子系统的 Cmd

Китайский программист 2011足迹 разработал ещё один шелл для режима «синего экрана» Windows, который он назвал Native子系统的 Cmd, что переводится как «cmd для native-режима». Он применил другой подход к созданию native-приложений. Вместо разработки шелла с нуля с использованием функций Native API он решил выполнить портирование в native-среду готового шелла cmd.exe из операционной системы ReactOS. Однако, cmd.exe использует Win32 API, а в native-режиме доступа к нему нет, поэтому 2011足迹 должен был перенести вслед за шеллом ещё и необходимые Win32 API функции.

Программа cmd.exe из состава ReactOS это открытый аналог обычного cmd.exe из Windows. Он умеет практически всё то же самое, что и обычный cmd.exe. Перенос такого шелла в native-среду открывает гораздо больше возможностей, чем написание оболочки с нуля. Моя разработка — Native Shell, имеет более скромный набор возможностей.

Ветка обсуждения шелла nativecmd находится на форуме wuyou.com. Обсуждение программы ведётся на китайском языке. Там приведены ссылки на скачивание шелла. Исходный код доступен под лицензией GNU GPL v2 в репозитории http://code.google.com/p/nativecmd/.

Шелл состоит из двух файлов: основной исполняемый файл ncmd.exe (128 Кб) и библиотека, реализующая основные функции Win32 API — kernel.dll (320 Кб). Мой Native Shell по сравнению с ним имеет меньший размер и состоит всего из одного файла. Nativecmd «тащит» за собой библиотеку, в которой реализованы многие функции Win32 API. Код библиотеки взят из ReactOS. Библиотека необходима из-за того, что шелл не может вызывать эти функции из kernel32.dll — для этого требуется работа подсистемы Win32, а она неактивна на том этапе работы системы, в котором загружается шелл. В архиве программы находятся ещё две утилиты: xcopy.exe и reg.exe. Это native-версии соответствующих консольных утилит ReactOS/Windows. Они позволяют производить «умное» копирование файлов и получать доступ к реестру. Эти программы могут запускаться и под управлением моего Native Shell.

Преимущества

По сравнению с Native Shell, программа Nativecmd умеет не только запускаться, но и принимать команды из командной строки. Другая полезная возможность — это возможность запускать пакетные командные файлы (.cmd, .bat) при старте системы. В таком файле можно описать какую-нибудь требуемую последовательность действий при старте Windows, например копирование или удаление каких-либо файлов. Это позволяет гибко управлять процессом загрузки системы с наиболее ранней стадии.

Для проверки этой возможности я установил Nativecmd в систему. Это делается стандартным для Native-приложений способом, через ключ реестра BootExecute. Файлы ncmd.exe и kernel.dll были скопированы в папку system32 ОС Windows XP. Я написал командный пакетный файл test.cmd и поместил его в ту же папку. Содержимое файла было очень простым:

time /T
echo test

Это вывод времени и строки «test» на экран. Команды здесь могут быть любыми, какие только поддерживает шелл, а так же здесь могут быть вызовы внешних native-приложений, таких как chkdsk или native-версии xcopy.

Дальше я прописал вызов этого командного файла при старте системы. Чтобы ncmd.exe выполнил файл test.cmd при старте системы и остановился, в ключ BootExecute нужно добавить строчку:

ncmd /K test.cmd

Если нужно продолжить нормальную загрузку системы после выполнения команд, строка должна выглядеть так:

ncmd /C test.cmd

Прописал первую строчку, перезагрузил компьютер. Увидел следующее:

запуск batch-файла в ncmd.exe

Видно, что с выводом команды time какие-то проблемы, но в целом работает, команды исполняются.

Недостатки

Не работает клавиша Backspace, а значит, невозможно стереть написанную команду. Если команда набрана неправильно, ничего не остаётся, кроме как нажать Enter и попробовать набрать её заново. У шелла ncmd есть проблемы со стабильностью. Иногда после ввода произвольной команды он неожиданно завершает свою работу.

Вывод

Nativecmd представляет из себя реализацию замечательной идеи перенести полноценный шелл в native-режим (насколько можно считать полноценным шелл из ReactOS). Применения — самые широкие, от создания мини-дистрибутивов на базе ядра NT, до применения в домашних условиях для автоматизации каких-то действий при загрузке системы.



Автор: амдф
Дата: 03 апреля 2012


При копировании материалов хорошим тоном будет указание авторства и ссылка на сайт. По поводу рекламы обращайтесь на почту [email protected]