如何编写Windows 8软件以使用SYSTEM权限运行?

时间:2013-10-04 17:44:16

标签: windows winapi windows-8

我为标题中的错误措辞道歉,但这里有更多的背景。

我最近购买了一台Windows 8笔记本电脑,并注意到Norton已经预先安装并运行了SYSTEM级别的权限。因此,在我看来,第三方应用程序必须有某种方式以SYSTEM权限运行。

然而,经过大量的谷歌搜索后,我无法弄清楚它是API调用还是注册表设置还是完全让诺顿能够做到这一点的其他事情,所以我决定向SO社区提问。如何编写以SYSTEM权限运行的应用程序?

2 个答案:

答案 0 :(得分:4)

可以将服务配置为以多个不同的帐户运行,包括LOCAL SERVICENETWORK SERVICESYSTEM或任何用户的帐户。

建议不要使用SYSTEM,因为任何安全问题都可能导致机器完全损坏,但它可用。

这是由CreateService和/或ChangeServiceConfig lpServiceStartName 参数配置的。将NULL指针作为此参数CreateService".\\LocalSystem"传递给ChangeServiceConfig,以使用本地系统帐户。

答案 1 :(得分:0)

将GUI应用程序作为本地系统运行是一个坏主意。最好的方法是同时拥有一个GUI应用程序(作为登录用户运行)和一个服务(作为SYSTEM运行),并使用任何合适的IPC方法根据需要进行通信。这可能是诺顿实际上在做的事情。

但是,可以获得系统服务以在用户会话中以SYSTEM身份启动应用程序。为此,请使用DuplicateTokenEx复制流程安全令牌,然后将SetTokenInformationTokenSessionId选项一起使用。这将在SYSTEM上下文中为您提供令牌,但在用户的会话中可以使用它来启动可执行文件。 (可能还有其他问题;例如,您可能还需要更改工作站和桌面上的权限。)