如何运行我的应用程序来代替默认的Windows XP shell?

Suj*_*osh -6 c++ windows winapi windows-shell

我正与同事讨论以下是否可行:

  1. 在Windows XP中从USB驱动器安装MFC应用程序(此安装将由具有足够安装软件权限的用户手动启动).
  2. 重新启动后,应启动此应用程序而不是默认的Windows XP shell(explorer.exe).

有谁知道我怎么做到这一点?

小智 7

在Windows启动之前,您将无法运行MFC应用程序,因为根据定义,MFC会运行在Windows本身之前未加载的Windows DLL.更不用说Windows首先负责加载PE,因此如果没有自定义引导程序,您甚至无法加载已编译的EXE或DLL.

为了做你想做的事,你有几个选择.有(简单)方法可以设置Windows以在启动时加载应用程序.如果这是你想要的,那么这是完全可能的.

但是,如果您希望 Windows启动之前和之后执行代码,那么您必须首先覆盖引导程序(使用GRUB之类的东西),执行您的代码(再次,您将无法访问任何标准库 - 您将不得不如果您希望执行任何类型的I/O,则直接在CPU可用的缓冲区上运行,然后通过启动其引导程序来启动Windows.我不知道该怎么做; 但这是对必然发生的事情的总体概述.

你提到了DLL注入,这是另一种可能性.我不熟悉在Windows启动期间加载的DLL以及以什么顺序加载.这对你来说是一种练习.您需要考虑的是,您希望存在的更高级别(即可用于执行文件/控制台I/O的库)在Windows启动过程中执行代码所需的更高级别.

我给你的建议只是编写一个程序,作为在Windows初始化期间启动的服务执行.它很容易做到,你将加载整个HAL并准备好实际执行任务 - 而不是你必须编写特定于设备的驱动程序,以便在窗口加载HAL之前操作硬件.


CsT*_*mas 5

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit使用应用程序的完整路径修改注册表值.此键指定在用户登录Windows后应立即启动的程序.此项的默认程序是C:\ windows\system32\userinit.exe.Userinit.exe是一个程序,用于恢复用户名的个人资料,字体,颜色等.通过用逗号分隔程序,可以添加将从此键启动的其他程序