Как я могу запустить свое приложение вместо стандартной оболочки Windows XP?

У меня была дискуссия с коллегой о том, возможно ли следующее:

  1. Установите приложение MFC с USB-накопителя в Windows XP (эта установка будет инициирована вручную пользователем с достаточными правами для установки программного обеспечения).
  2. После перезагрузки это приложение должно запуститься вместо стандартной оболочки Windows XP (explorer.exe).

Кто-нибудь знает, как я могу это сделать?


person Sujay Ghosh    schedule 16.07.2009    source источник
comment
Я не понимаю одного, как вы собираетесь запускать приложение MFC без работающей операционной платформы? Внедрение DLL - вы должны внедрить dll в процесс, какой процесс, если ОС не загружена?   -  person Ivan Prodanov    schedule 16.07.2009
comment
Это имело бы гораздо больше смысла, если бы вы добавили оболочку в конец 2) пули. Ссылка на TSR запутана и неуместна.   -  person darron    schedule 16.07.2009
comment
@Josn прав, я восхищаюсь авторским объяснением запуска приложения MFC (первый пункт в требованиях).   -  person Ivan Prodanov    schedule 16.07.2009
comment
Совершенно правильный вопрос и ответ на самом деле заключается в том, как вы можете создавать терминалы, которые работают поверх платформы Windows, но не предоставляют доступ к оболочке Windows. Для XP вы можете изменить параметр реестра HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon, чтобы он указывал на пользовательскую программу.   -  person cfeduke    schedule 16.07.2009
comment
Этот вопрос был странным... Я не думаю, что автор собирался спрашивать, о чем он действительно спрашивал (я основываю это на его собственных предложениях, ни одно из которых не имеет ничего общего с запуском кода перед загрузкой). Я попытался извлечь соответствующий вопрос...   -  person Shog9    schedule 17.07.2009
comment
@Shog9: Кроме того, предложение TSR на самом деле не относилось к тому, о чем он спрашивал, однако оно показало мне, что он обдумывал это, а также что у него не было идей, с чего начать. , поэтому ему нужна помощь сообщества. Я имею в виду, это то, для чего мы здесь, верно? = Д   -  person DevinB    schedule 17.07.2009
comment
Возможно, вам следует ознакомиться с семейством Windows Embedded.   -  person Eugene Yokota    schedule 18.07.2009
comment
Это похоже на мой аналогичный вопрос stackoverflow.com/ вопросы/8572667/   -  person Ian    schedule 10.09.2013


Ответы (2)


Вы не сможете запустить приложение MFC до запуска Windows, потому что по определению MFC запускает библиотеки DLL Windows, которые не загружаются до тех пор, пока не загрузится сама Windows. Не говоря уже о том, что именно Windows отвечает за загрузку PE в первую очередь, поэтому вы даже не сможете загрузить скомпилированный EXE или DLL без специального загрузчика.

Для того, чтобы сделать то, что вы хотите сделать, у вас есть несколько вариантов. Существуют (простые) способы настройки Windows для загрузки приложения при запуске. Если это то, что вы хотите, то это вполне возможно.

Однако, если вы хотите выполнить код до и во время запуска Windows, то вы должны сначала перезаписать загрузчик (что-то вроде GRUB), выполнить свой код (опять же, у вас не будет доступа к каким-либо стандартной библиотеке - вам придется работать непосредственно с буферами, предоставленными вам ЦП, если вы хотите выполнять какой-либо ввод-вывод), затем запустите окна, запустив его загрузчик. Я понятия не имею, как это сделать; но это общий обзор того, что должно произойти.

Вы упомянули внедрение DLL, что является еще одной возможностью. Я не знаю, какие библиотеки DLL и в каком порядке загружаются при запуске Windows. Это будет для вас упражнением. Что вам нужно будет принять во внимание, так это то, что чем выше уровень, на котором вы хотите существовать (т. Е. Какие библиотеки доступны для вас, чтобы выполнять файловый/консольный ввод-вывод), тем выше вам нужно выполнять свой код в процессе запуска Windows. .

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

person Community    schedule 16.07.2009
comment
Я думаю, если мы введем rundll ; это должно работать хорошо. Существует рефлексивная DLL-инъекция, которую я также рассмотрю. Но можем ли мы сделать это: - позволить Windows запуститься, завершить загрузку всех своих материалов, затем вместо отображения экрана Windows я показываю экран своего приложения. Или мне также нужно изменить GINA dll. - person Sujay Ghosh; 17.07.2009
comment
Kon-Boot — пример сложного пути: он заменяет загрузчик и модифицирует Windows по пути вверх. - person ephemient; 17.07.2009

Измените значение реестра HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit, указав полный путь к вашему приложению. Этот ключ указывает, какая программа должна быть запущена сразу после входа пользователя в Windows. Программа по умолчанию для этого ключа — C:\windows\system32\userinit.exe. Userinit.exe — это программа, которая восстанавливает ваш профиль, шрифты, цвета и т. д. для вашего имени пользователя. Можно добавить дополнительные программы, которые будут запускаться с этого ключа, разделяя программы запятой.

person CsTamas    schedule 17.07.2009