【问题标题】:Avoiding UAC but launching an elevated process using a windows service避免 UAC 但使用 Windows 服务启动提升的进程
【发布时间】:2017-01-26 15:48:54
【问题描述】:

我有一个非交互式服务作为特权 SYSTEM 用户在 Windows 机器上运行,我需要它来将给定的可执行文件作为提升的进程启动。

我已经设法以 SYSTEM 身份启动了一个子进程,使用 WTSGetActiveConsoleSessionId(),找到了一个系统进程并复制了它的令牌。同样,我可以作为普通用户启动非提升进程。但我需要以普通用户身份启动该进程,但需要提升权限 - 这样我就不必显示 UAC,但该进程正在以适当用户身份运行。

我不想绕过 UAC - 因为用户已经同意安装该服务。我正在努力减轻不便。我找到了similar, unanswered question - 但又问了一遍,希望能得到答案。

【问题讨论】:

  • 假设您使用 WTSQueryUserToken 为交互式用户获取令牌,并且交互式用户是管理员,您应该能够使用 GetTokenInformation 和 TokenLinkedToken 选项获取提升的令牌。
  • 附带说明,通过复制您自己的 SYSTEM 令牌,然后使用 SetTokenInformation 和 TokenSessionId 选项更改会话 ID,应该可以(并且更有效)将子进程作为 SYSTEM 启动。跨度>
  • @HarryJohnston 感谢您的想法!链接令牌的想法工作正常。如果您将其转换为答案,我可以将其标记为已接受。
  • @Liosan:我也有类似的问题。我必须在所有活动会话中启动该过程。为此,我使用 WTSEnumerateSessions() 来获取所有活动会话并启动进程。但我想在该会话中以管理员模式运行该进程(以管理员身份运行)。你能告诉我怎么做吗?为了获取会话令牌,我使用了 WTSQueryUserToken() API 并启动了我使用 CreateProcessAsUser() API 的进程。我的服务也是本地服务。

标签: winapi uac elevated-privileges


【解决方案1】:

如果您有一个用于交互式用户的过滤令牌 - 例如,通过 WTSQueryUserToken() 检索到的令牌 - 您可以通过使用带有 TokenLinkedToken 选项的GetTokenInformation 函数来检索未过滤(“提升”)令牌。

【讨论】:

    猜你喜欢
    • 2014-07-08
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 2014-06-14
    • 2011-02-11
    相关资源
    最近更新 更多