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