简单聊一下Windows中的开机启动项 您所在的位置:网站首页 开机startup 简单聊一下Windows中的开机启动项

简单聊一下Windows中的开机启动项

2024-07-13 12:14| 来源: 网络整理| 查看: 265

最近在做开机启动项管理,了解了一下Windows的开机启动项。

从用户层来讲,开机启动项可以通过以下四种方式完成。

注册表

startup文件夹

服务

计划任务

 

平常用得最多的,一般是注册表和startup文件夹。常规软件的开机启动项,都是通过注册表来完成的。也是接下来主要介绍的内容。

像我自己用的电脑,每一个软件的来源都是清楚的,所以从来不会有弹窗或者强制设置浏览器主页的情况发生。

以前在帮别人搞电脑时,就遇到过强制修改浏览器主页的,像这种一般就是某个进程搞的。而这个程序是开机自启的,所以会导致浏览器主页被修改。

我朋友这台电脑是因为flash搞的鬼,我把flash开机自启关了,强制修改浏览器主页也就解决了。flash做为一个ocx组件,开机自启,无非就是打广告。

我还遇到过一种情况,也是强制修改浏览器主页,我找遍了注册表和服务项,都没找到可疑项目,在进程列表里也找了,还是没找到相关可疑项。后面通过工具分析,发析是2345软件的一个驱动导致的,它在驱动里进行了修改。

像系统驱动这种情况,已经不属于用户层了,属于内核层了,对这一块的了解还不够,这里不做介绍。当时是想通过卸载2345软件来解决,结果它通过各种手段,限制你卸载,像驱动这种,在开机时就已经加载完成了,所以你无法手动去删除,只能进安全模式,后面懒得折腾,就没去搞了,修改浏览器主页为2345影响也不是那么大。当时还尝试了使用360安全卫士,确实是可以锁定浏览器主页,360也是通过内核层来完成的,这种工具早已经不在用户层了。

 

言归正传,下面介绍一下,常规Windows自启动所在的注册表路径

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

这个路径是平常软件设置最多的地方,当前用户的开机启动项。用api对这个这个路径进行操作不需要管理员权限

 

 

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

本机上的开机启动项,这个路径下平常可能像安全软件、系统软件会在这里设置启动项,用api进行操作时,需要管理员权限。

 

针对CURRENT_USER的,还有以下位置也可以设置开机启动项

下面列出的这些路径,加载的时机都不一样,但都达到了开机自启的效果。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

HKEY_CURRENT_USER\ Software\Microsoft\Windows\CurrentVersion\RunServices

HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\ShellHKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts

 

针对CURRENT_USER的,有以下位置

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoadHKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\System\Scripts

 

 

从win10开始,任务管理器加入了启动项管理。这里主要是针对注册表中和startup文件夹中的启动项进行管理。而通过服务、计算任务的启动项不会在这里显示。

 一开始我还有个疑问,因为在任务管理器中禁用的项,在原始注册表中还存中。

就比如图中的ApiFoxAppAgent我已经禁用了,但是在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run这个位置还是能看到。

后面找了一下任务管理器禁用的原理,发现它是通过在其它位置建立节点来完成的。

 

在以下两个位置创建对应 的项,可以实现启动项的启用跟禁用

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run

 

新建一个二进制值,名称为对应启动项的名称,取值为下

启用 : 02 00 00 00 00 00 00 00 00 00 00 00 (hex)禁用 : 03 00 00 00 xx xx xx xx xx xx d9 01(hex)

禁用这里的值是动态变化的,具体是怎么生成的,还需要查阅相关资料。但是将上面的xx替换成有效的16进制值,是可以实现禁用的。

 

 

 

 

 

后面想了一下,这种禁用方式非常方便,因为你只需要建立限制规则 ,而不必理会原来的启动项在还是不在,系统只需要判断这些规则即可。

这里目前我还没有用Windows api去实现,后面去尝试一下看如何写二进制 值到注册表。

 

 

参考资料:

https://superuser.com/questions/1766797/how-entries-at-run-registry-are-overridden-by-windows-settings

https://renenyffenegger.ch/notes/Windows/registry/tree/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/StartupApproved/Run/index

https://renenyffenegger.ch/notes/Windows/dirs/Windows/System32/Taskmgr_exe#taskmgr-exe_startup-tab



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有