我为标题中的错误措辞道歉,但这里有更多的背景。
我最近购买了一台Windows 8笔记本电脑,并注意到Norton已经预先安装并运行了SYSTEM级别的权限。因此,在我看来,第三方应用程序必须有某种方式以SYSTEM权限运行。
然而,经过大量的谷歌搜索后,我无法弄清楚它是API调用还是注册表设置还是完全让诺顿能够做到这一点的其他事情,所以我决定向SO社区提问。如何编写以SYSTEM权限运行的应用程序?
答案 0 :(得分:4)
可以将服务配置为以多个不同的帐户运行,包括LOCAL SERVICE
,NETWORK SERVICE
,SYSTEM
或任何用户的帐户。
建议不要使用SYSTEM
,因为任何安全问题都可能导致机器完全损坏,但它可用。
这是由CreateService
和/或ChangeServiceConfig
的 lpServiceStartName
参数配置的。将NULL指针作为此参数CreateService
或".\\LocalSystem"
传递给ChangeServiceConfig
,以使用本地系统帐户。
答案 1 :(得分:0)
将GUI应用程序作为本地系统运行是一个坏主意。最好的方法是同时拥有一个GUI应用程序(作为登录用户运行)和一个服务(作为SYSTEM运行),并使用任何合适的IPC方法根据需要进行通信。这可能是诺顿实际上在做的事情。
但是,可以获得系统服务以在用户会话中以SYSTEM身份启动应用程序。为此,请使用DuplicateTokenEx
复制流程安全令牌,然后将SetTokenInformation
与TokenSessionId
选项一起使用。这将在SYSTEM上下文中为您提供令牌,但在用户的会话中可以使用它来启动可执行文件。 (可能还有其他问题;例如,您可能还需要更改工作站和桌面上的权限。)