什么决定了 svchost.exe 托管哪些服务?

什么决定了 svchost.exe 托管哪些服务?

在 Process Explorer 下查看进程时,服务程序,它有几个进程管理器子进程。每个进程都承载一个或多个服务。但是,单个进程中的服务选择似乎完全是随机的。

进程如何选择它所承载的服务?这会受到某种影响吗?

我找不到任何控制这个服务管理器

我想强制将一些服务纳入它们自己的进程,与其他服务分开。

答案1

注册表中有一个数据库用于控制如何加载服务。这就是服务控制管理器数据库。

服务控制管理器运行 services.exe。服务在注册表中的 HKLM\SYSTEM\CurrentControlSet\Services 下定义。Type服务条目的值指定它是在其自己的进程中加载​​还是在承载多个服务的进程中加载​​。

当 SCM 决定启动服务时,它会调用 ScStartService。ScStartService 通过ImagePath从服务的注册表项中读取值来确定运行服务进程的文件的名称。该ImagePath值还包含组的名称。然后它检查该Type值。值 0x20 表示共享进程。

要回答有关如何使服务在其自己的进程中运行的问题,请使用命令sc config

例如:sc config wuauserv type= own = 后的空格是必需的。

科技网

来源

答案2

你不会发现控件在 services.msc 中,但每个服务将在特定的用户/服务帐户下启动,该帐户根据服务的要求具有特定的权限。

服务控制面板中的“登录身份”栏将显示特定服务所使用的服务帐户。您会注意到,svchost.exe任务管理器中的每个服务似乎都来自不同的用户帐户。

这些账户将决定哪个svchost.exe账户托管每个服务。


从技术上讲,有一些控件可以更改svchost.exe托管特定服务的内容,因为您可以在服务属性的“登录”选项卡中更改服务登录的用户。但我不建议更改它们,因为您最终可能会以错误的顺序启动服务或没有所需的权限。

相关内容