Нативная загрузка windows 7 что это

Нативная загрузка windows 7 что это

Native приложения — это программы, предназначенные для выполнения на операционных системах Windows семейства NT (NT/2000/XP/2003/Vista/7), способные запускаться на раннем этапе загрузки Windows, до окна входа в систему и даже до запуска каких-либо подсистем Windows. Синий экран при загрузке Windows XP, в котором, например, происходит проверка диска и есть тот самый режим. Native приложения используют только Native API, они могут использовать только функции, экспортируемые из библиотеки ntdll.dll. Для них недоступны функции WinAPI.

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

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

Моя программа Native shell запускается до экрана входа в систему и предоставляет интерфейс командной строки с возможностью перемещаться по файловой системе Windows, копировать и удалять файлы, просматривать некоторую информацию об операционной системе и запускать другие процессы, способные выполняться в native-режиме, такие как autochk.exe и autoconv.exe. Доступны исходные коды программы на языке Си.

— Синий экран Windows XP. Серый экран Windows Server 2003
Чёрный экран Windows Vista Чёрный экран Windows 7

Native приложения компилируются с помощью WDK — Windows Driver Kit (также известный, как DDK). Есть возможность делать их и в какой-то другой среде разработки, но в WDK проще всего.

Native приложения используют Native API. Оно частично документировано в MSDN для использования при написании драйверов. Но документированы не все функции. Информацию по остальным нужно брать из неофициальных источников. Например, на сайте http://undocumented.ntinternals.net/

Функции в ntdll.dll имеют префиксы Zw и Nt, а также некоторые другие. Видно, что у Zw и Nt функции дублируются названия. На самом деле это одни и те же функции. Если искать в сети пример использования какой-либо функции, стоит поискать сначала с одним префиксом, потом с другим, иначе можно что-то упустить. Почему у них разные префиксы — отдельная история, для программирования native приложений существенной роли не играет.

Для программирования нужны прототипы функций Native API, но в заголовочных файлах WDK присутствуют не все определения. Нужно использовать альтернативные заголовочные файлы, содержащие в том числе и определения недокументированных функций и типов данных. Например, можно воспользоваться заголовочными файлами Native Development Kit (NDK), которые доступны здесь.

Программировать на чистом Native API неудобно. Не обойтись без библиотеки, в которой уже реализованы некоторые рутинные действия. Существует библиотека с открытым кодом — ZenWINX, можно пользоваться ей. Ещё на страничке NDK анонсирована некая библиотека NDL, но на сайте её нет.

Чтобы native приложение запустилось при запуске Windows, надо положить его в каталог system32, а в ключ реестра HKLMSystemCurrentControlSetControlSession ManagerBootExecute прописать его имя файла, и аргументы, если они есть. Ключ имеет тип MULTI_SZ, может содержать несколько строк. Первой строкой там идёт Autocheck Autochk * . После неё можно прописывать свою программу. Программа, прописанная в этом ключе, имеет свойство запускаться даже в безопасном режиме Windows (safe mode), так что нужно быть осторожным. Ошибка в программе — и система не запустится. Но можно внутри приложения отслеживать факт запуска в safe mode и обрабатывать этот режим отдельно, например сделать завершение программы, если она обнаружила себя запущенной в safe mode. Кроме того, несмотря на то, что программа запускается и может выполнять какие-то действия, в этом режиме не работает вывод на консоль. Невозможно взаимодействие с пользователем. Это следует учитывать.

Читайте также:  Серийный номер не определен itunes что делать

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

У native приложений точка входа не main и не wmain, а NtProcessStartup. В PE-заголовке EXE-файла есть специальное поле, означающее подсистему, в которой выполняется приложение. У native приложений в это поле установлено специальное значение, означающее, что EXE не требует подсистемы. У обычных приложений ставится значение, соответствующее подсистемам "Windows GUI" или "Windows console". Native приложения не запускаются в обычном режиме работы Windows. При попытке запустить программу Windows выдаёт сообщение "Приложение нельзя запустить в режиме Win32".

Вывод кириллицы на экран по-умолчанию в этом режиме не поддерживается. Есть способ обойти это ограничение, впрочем, способ сложный и пока работает только на Windows XP.

Я создал заготовку проекта Native приложения — набор файлов, который можно использовать в качестве базы для разработки собственного Native приложения. Заготовка содержит файл native.c , содержащий точку входа в приложение. Остальные файлы — это файлы библиотеки ZenWINX, которые модифицированы так, что используют определения функций из NDK, а не из своего файла с определениями. Это позволяет использовать как функции самой библиотеки, так и функции Native API, которые разработчики ZenWINX забыли включить в собственный заголовочный файл. Фактически, NDK — более полный каталог Native API функций, чем файл, поставляемый с ZenWINX. Компилировать заготовку нужно утилитой build из состава WinDDK (я использую версию WinDDK 1.1.6001.000). Следует подключать заголовочные файлы NDK, прописав пути к каталогу с ними.

Возможно также разрабатывать и собирать Native-приложения прямо в Visual Studio, без использования компилятора WDK. О том, как это сделать, написано в статье Сборка Native API-приложения в Visual Studio 2010.

В начале этого года я настроил на своем ноутбуке Dell Latitude E6500 альтернативную загрузку Windows Server 2008 на внешнем жестком диске eSATA из локально установленной Windows 7. Такая конфигурация работает без проблем и является традиционным способом загрузки нативной рабочей среды с ПК. Но помимо этого, в Windows 7 есть и новая возможность загружать нативную среду из готового файла VHD.

У меня имеется несколько файлов VHD, работающих в среде Hyper-V, которой я пользуюсь в Server 2008. Эти файлы хранятся на внешнем жестком диске eSATA, который отображается в основной ОС Windows 7 как диск V: (рис. A).

Кроме того, у меня установлена виртуальная машина, которую я использую для загрузки Windows Vista из выделенного на рис. B файла VHD.

Игорь Осколков

12 января 2012

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

Мы уже рассматривали создание Live CD или USB-накопителя с Windows 7 и другими наборами ПО. Такой вариант подходит для реанимации уже установленной ОС, выполнения всяческих сервисных задач (разбивки диска, чистки от вирусов и так далее) да и просто для быстрой организации рабочего места. Но для создания полноценного переносимого рабочего окружения эти способы не годятся. Можно, конечно, использовать виртуальную машину – работать внутри ВМ в офисе и дома, а на флешке или внешнем жёстком диске носить её образ. Такой подход очевидно неудобен тем, что страдает производительность, а также необходимостью иметь уже установленную ОС и виртуальную машину на всех ПК, с которыми приходится работать. Другой вариант подразумевает использование облачных сервисов для синхронизации вроде Dropbox, но он не очень хорошо подходит для переноса установленного софта.

Ещё в прошлом году один из коллег в переписке поинтересовался возможностью использовать самый очевидный, как кажется на первый взгляд, способ. А именно установку Windows непосредственно на жёсткий диск с интерфейсом USB или какую-нибудь быструю флешку. Действительно, в мире Linux это вполне обыденное явление (другой коллега уже давно таскает с собой защищённый внешний HDD с Ubuntu на борту), так почему бы не проделать то же самое и с Windows? Не вдаваясь в технические подробности, сразу скажем, что сама по себе Windows 7 такому трюку не обучена (кроме Embedded-версии).

Но энтузиасты уже давно придумали готовое решение для того, чтобы обойти это маленькое недоразумение. Остается, правда, ещё одна очевидная проблема – это относительно низкая скорость работы с внешним накопителем, которая будет упираться в пропускную способность шины USB. Конечно, USB 3.0 выглядит гораздо привлекательнее в этом плане, но данными портами оснащены далеко не все ПК. Использование флешек допустимо, но они, как правило, сильно медленнее HDD в условиях постоянного чтения-записи. Не забудьте также убедиться, что машина, на которой вы будете работать, поддерживает загрузку с USB-накопителей. Учтите, что данный режим работы не предусмотрен в Windows 7, поэтому никакой гарантии, что у вас получится загрузиться на разных компьютерах с USB-накопителя, нет.

Итак, приступим. Нам понадобится внешний жёсткий диск или флешка с минимальным объёмом в 8 Гбайт, установочный диск Windows 7 (Windows 8 тоже поддерживается) или его образ, а также замечательная утилита PWBoot, которая сделает за нас всю “грязную” работу. С установочного диска надо скопировать в любое удобное место файл install.wim, который находится в каталоге sources. В нём как раз содержатся все файлы Windows. Вообще, с wim-образами можно работать с помощью утилиты ImageX из пакета Windows AIK.

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

При запуске PWBoot (с правами администратора, конечно) будет предложено либо установить чистую ОС на USB-накопитель, либо пропатчить уже установленную систему, если вы тем или иным образом собираетесь переносить её на внешний диск. Также придётся “накатывать” патч после установки сервис-паков и, возможно, некоторых обновлений Windows. Работа с программой проста до безобразия, так что и рассказывать-то почти нечего. Тем не менее пара нюансов всё-таки есть.

Во-первых, PWBoot упорно не хочет работать с кириллицей. Если ваш инсталляционный образ Windows 7 поддерживает установку сразу нескольких редакций ОС, то надо выбрать нужную. Как это сделать? С помощью утилиты ImageX (см. выше), запущенной с параметром info и указанием пути до wim-файла.

imagex /info x:путьдоinstall.wim

В выводе команды ищем пункт Image Index и следующее за ним описание версии. В PWBoot версии в списке для выбора идут в том же порядке, что и в выводе команды.

Во-вторых, на выбор предлагается два варианта установки – прямо на внешний накопитель (с его обязательным форматированием) или же в виртуальный диск формата VHD. Второй вариант гораздо интереснее, но, в отличие от первого, обязательно требует наличия Windows 7 Ultimate или Enterprise. Точнее говоря, эти редакции поддерживают загрузку с VHD. Фактически на диске будет находиться только один файл, в котором будет происходить вся ваша работа. При этом в ОС, загруженной с VHD, физический диск тоже будет виден. Что интересно, скорость работы системы внутри VHD практически такая же, как при работе напрямую с накопителя.

Вообще использование VHD даёт массу преимуществ. Во-первых, с этим форматом умеет работать любая уважающая себя виртуальная машина, а его поддержка встроена прямо в Windows 7. Можно штатными средствами создавать, редактировать, монтировать VHD-диски и работать с разностными образами (фактически diff для целого диска). Отсюда проистекают такие возможности, как наличие сразу нескольких инсталляций Windows на одном логическом томе, лёгкий откат изменений в системе, удобство и скорость развёртывания ОС сразу на многих ПК и так далее.

Можно, наоборот, поместить уже установленную Windows внутрь контейнера VHD. В общем, не будем особо углубляться в подробности, благо «фишка» эта давно известна, и в Сети есть много хороших инструкций по работе с VHD в Windows 7 и Windows Server 2008 R2. А для удобного редактирования меню загрузчика Windows можно посоветовать утилиту BellaVista.

Вернёмся к PWBoot. На следующем этапе надо указать местоположение и имя будущего VHD-контейнера. Естественно, он должен находиться на внешнем USB-диске. Обратите внимание, что на диске должна быть ФС NTFS (FAT32 не подходит в силу ограничений на размер файлов) и достаточное количество свободного места. Программа сама предложит сделать диск минимального объёма, но лучше выделить столько, сколько вам понадобится под софт, документы и всё остальное. VHD-диск можно сделать динамическим (расширяемым), поставив соответствующую галочку. То есть физически он будет занимать ровно столько, сколько в нём содержится информации. В общем, для экономии места можно включить данную опцию, но при этом чуточку потерять в производительности.

Осталось только выбрать диск, куда будет установлен загрузчик (то есть внешний USB-накопитель), поставить галочки Update bootcode и Add boot entry to BCD, поменять по желанию описание пункта загрузочного меню и нажать Install. Всё, дальнейшие действия по установке программа выполнит сама. На это обычно требуется не более десяти минут, но тут многое зависит от скорости работы самого USB-диска.

После установки желательно немного облегчить систему – удалить ненужные компоненты, отключить некритичные сервисы, выключить индексирование жёсткого диска, да и вообще стараться избегать любых операций, связанных с большой нагрузкой на накопитель. Полезно также дефрагментировать внешний диск, подключив его к другой системе. Также остаётся нерешённой проблема с файлом подкачки – можно воспользоваться драйвером DiskMod для создания оного на USB-накопителе, можно вообще от него отказаться, но лучше вручную задавать его местоположение на нормальном HDD той машины, на которой запускается наша портативная Windows 7.

Том C: – это HD-контейнер, который физически находится на томе E:

Напоследок стоит упомянуть об интересной разработке под названием VBoot. Это загрузчик, основанный на GRUB, но с поддержкой прямой загрузки с VHD-дисков. Причём необязательно Windows. На сайте, к примеру, есть готовые сборки Ubuntu. В общем, готовое и удобное решение, но, естественно, платное – от $79 за лицензию. Кстати, в Windows 8 будет встроенная возможность перенести всё ваше рабочее окружение на USB-накопитель и загружаться прямо с него. Ну а пока придётся довольствоваться приведённым выше методом. Удачной вам установки!

Ссылка на основную публикацию
Найти точки пересечения окружности с осями координат
УСЛОВИЕ: начертить окружность заданую уровнением и найти точки ее пересечения с оси кордината cx-1²+(y-3)²=25 помогите пожалуйста умоляю Добавил vk408786475 ,...
Много смайликов для вк копировать
Как вставлять смайлики Таблица смайлов ВКонтакте Выбираем смайл который хотим использовать и кликаем на него или выделяем код смайла ⁉...
Множество согласных букв в слове метро
запишите множество А согласных букв в слове "метро" Лучший ответ: буква а гласная вообще то, а вслове метро 3 согласных...
Найти улицу через спутник
Некоторые элементы карты не могут быть вставлены на сайт. Откройте предпросмотр и проверьте вид вашей будущей карты. Поставьте маркер на...
Adblock detector