医疗 / 工控:Windows 系统桌面替换为自主程序的原理与实现
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
对于某些定制软件来说,我们希望系统启动进入桌面就看到我们的软件界面。 如果使用开机启动项来实现,会有一定的延迟,在那之前用户能看到系统桌面,并且能进行任意操作。 我们希望系统在启动后,就运行如下的界面,用户无法通过Alt+Tab或Win+Tab等操作进行切换,也无法退出到桌面。 注意:Ctrl+Shift+Esc/Ctrl+Alt+Del无法屏蔽,因为它是由winlogon响应的
首先我们了解一下Windows的启动过程 如下所示:
说明:内核层的启动过程这里暂不做详细介绍
用户层加载流程 会话管理器(Session Manager) 会话管理器(%SystemRoot%\System32\Smss.exe)是系统中创建的第一个用户模式进程。执行执行程序和内核初始化最后阶段的内核模式系统线程会创建此进程。 Smss.exe 会话启动实例核心操作: 1. 为会话创建子系统进程(默认Csrss.exe)。 2. 创建Winlogon(交互会话)或Wininit(Session 0/会话0,默认)实例。 最终中间态Smss.exe进程退出,子系统进程与Winlogon/Wininit成为无父进程。 wininit 1. 它将自己和主线程标记为关键线程,这样如果它过早退出且系统以调试模式启动,它将进入调试器。(否则,系统将崩溃。) 2. 它使进程将某些错误视为关键错误,如无效的句柄使用和堆损坏。 3. 如果SKU支持状态分离,则初始化对状态分离的支持。 4. 它创建一个名为Global\FirstLogonCheck的事件(可在Process Explorer或WinObj的\BaseNamedObjects目录下观察到),供Winlogon进程使用,以检测哪个Winlogon是第一个启动的。 5. 它在BasedNamedObjects对象管理器目录中创建一个WinlogonLogoff事件,供Winlogon实例使用。当注销操作开始时,会触发(设置)此事件。 6. 它将自己的进程基础优先级提高到高(13),并将主线程的优先级提高到15。 7. 除非在HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon键中通过NoDebugThread注册表值进行特殊配置,否则它会创建一个周期性计时器队列,该队列会按照内核调试器的指定,侵入任何用户模式进程。这使得远程内核调试器能够使Winlogon附加并侵入其他用户模式应用程序。 8. 它在环境变量COMPUTERNAME中设置机器名,然后更新并配置与TCP/IP相关的信息,如域名和主机名 9. 它设置了默认配置文件环境变量USERPROFILE、ALLUSERSPROFILE、PUBLIC和ProgramData。 10. 它通过展开 %SystemRoot%\Temp(例如,C:\Windows\Temp)来创建临时目录。 11. 如果会话0为交互式会话,则根据SKU(软件许可证类型)设置字体加载和DWM(桌面窗口管理器)。 12. 它创建了初始终端,该终端由一个窗口站(始终命名为Winsta0)和两个桌面(Winlogon和Default)组成,用于在会话0中运行的进程。 13. 它根据本地存储或必须交互输入的情况,初始化LSA机器加密密钥。 14. 它创建了服务控制管理器(SCM或Services.exe)。 15. 它启动本地安全身份验证子系统服务(Lsass.exe),如果启用了凭据保护,还会启动隔离的LSA Trustlet(Lsaiso.exe)。这还需要从UEFI中查询VBS配置密钥。 16. 如果安装程序当前处于挂起状态(即,如果这是全新安装或更新到新的主要操作系统版本或Insider Preview后的首次启动),则将启动安装程序。 17. 它将永远等待系统关闭请求或上述系统进程之一终止(除非在步骤7中提到的Winlogon键中设置了DontWatchSysProcs注册表值)。无论哪种情况,它都会关闭系统。 当然,以上这17条对我们替换默认桌面环境没丝毫帮助。 重点来了: 1、wininit.exe 在启动过程的早期启动,并处理核心系统服务。 2、系统初始化完成后,winlogon.exe将接管用户会话管理。 3、然后,winlogon.exe会启动explorer.exe,为用户提供图形用户界面(GUI)以进行交互。 划重点:所以我们可以将explorer.exe替换为我们自己的程序,这样进入系统后,就直接运行我们的程序,而不是系统桌面。 注意:因为不会运行桌面,所以需要增加守护进程,否则程序意外退出,对普通用户来说,整个电脑就无法操作了。 实现方法 可以通过注册表来实现 找到计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon键 设置Shell的值为自己的程序即可。
注意: 1、因为替换了外壳程序,所以快捷键会失效,也不会有桌面,任务栏和开始菜单的显示。 2、如果想再运行原始桌面,通过Ctrl+Shift+Esc打开任务管理器,点文件,运行新任务,输入explorer.exe即可 3、注册表中的路径支持绝对路径,如果在环境变量中配置了,直接填入程序名即可。 参考资料: https://genxcyber.com/windows-boot-process 阅读原文:原文链接 该文章在 2026/2/12 11:39:12 编辑过 |
关键字查询
相关文章
正在查询... |