我正与同事讨论以下是否可行:
有谁知道我怎么做到这一点?
答案 0 :(得分:7)
在Windows启动之前,您将无法运行MFC应用程序,因为根据定义,MFC会运行Windows窗口,直到Windows本身才会加载。更不用说Windows首先负责加载PE,因此如果没有自定义引导程序,您甚至无法加载已编译的EXE或DLL。
为了做你想做的事,你有几个选择。有(简单)方法可以设置Windows以在启动时加载应用程序。如果这是你想要的,那么这是完全可能的。
但是,如果您希望在窗口启动之前和之后执行代码,那么您必须首先覆盖引导程序(使用GRUB之类的东西),执行您的代码(再次,您将不会访问任何标准库 - 如果您希望执行任何类型的I / O,则必须直接在CPU可用的缓冲区上操作,然后通过启动其引导程序来启动Windows。我不知道该怎么做;但这是必须发生的事情的概述。
你提到了DLL注入,这是另一种可能性。我不熟悉在Windows启动期间加载的DLL以及以什么顺序加载。这对你来说是一种练习。您需要考虑的是,您希望存在的更高级别(即可用于执行文件/控制台I / O的库)在Windows启动过程中执行代码所需的更高级别。
我的建议是编写一个程序,该程序作为在Windows初始化期间启动的服务执行。它很容易做到,你将加载整个HAL并准备好实际执行任务 - 而不是你必须编写特定于设备的驱动程序,以便在窗口加载HAL之前操作硬件。
答案 1 :(得分:5)
使用应用程序的完整路径修改HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
注册表值。此键指定在用户登录Windows后应立即启动的程序。此项的默认程序是C:\ windows \ system32 \ userinit.exe。 Userinit.exe是一个程序,用于恢复用户名的个人资料,字体,颜色等。通过用逗号分隔程序,可以添加将从此键启动的其他程序