简单聊一下Windows中的开机启动项 | 您所在的位置:网站首页 › 开机startup › 简单聊一下Windows中的开机启动项 |
最近在做开机启动项管理,了解了一下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 实验室设备网 版权所有 |