【问题标题】:How do I write a Windows 8 software to run with SYSTEM privileges?如何编写 Windows 8 软件以使用 SYSTEM 权限运行?
【发布时间】:2013-10-04 17:44:16
【问题描述】:

对于标题中的错误措辞,我深表歉意,但这里有更多上下文。

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

但是,经过多次谷歌搜索,我无法确定是 API 调用还是注册表设置或其他完全使 Norton 能够做到这一点的东西,所以我决定询问 SO 社区。如何编写以 SYSTEM 权限运行的应用程序?

【问题讨论】:

  • 为什么需要在这种情况下运行?如果你想解决一个特定的问题,也许你应该告诉问题是什么。就目前而言,您在问“我怎样才能在下班后获得进入银行金库的钥匙?”问题是你为什么要这样做?如果您想获取现金,答案将变为“不要拿钥匙;使用 ATM!”

标签: windows winapi windows-8


【解决方案1】:

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

不推荐使用SYSTEM,因为任何安全问题都可能导致机器完全被攻破,但它是可用的。

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

【讨论】:

  • 有没有办法直接在 SYSTEM 权限级别实例化应用程序而无需先启动服务?
  • @merlin: 需要一个服务,但预装的Scheduler 服务将根据管理员的要求启动任何具有系统权限的任意可执行文件。但是,Microsoft 提供的任务计划程序的配置是一个计算机管理问题,应该在 SuperUser 而不是 SO 上讨论。
  • 我无法使用任务计划程序运行和查看 GUI 应用程序。如果我真的自己写一个服务,我能绕过 SYSTEM 用户下的 GUI 限制吗?
  • 您“似乎无法运行”?为什么?我的蜘蛛侠感觉在这里刺痛。发生了一些可疑的事情......
  • 这意味着我可以看到该过程,但我无法与之交互。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2013-11-09
    • 2014-04-21
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    相关资源
    最近更新 更多