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