【问题标题】:privilege elevation in WindowsWindows 中的权限提升
【发布时间】:2013-09-08 10:52:42
【问题描述】:

我正在编写一个应用程序,它将由以用户权限运行的 GUI 部分和以本地系统权限作为服务运行的服务器部分组成。 GUI 部分有时需要执行一些需要高权限的操作(管理员/本地系统)。 GUI 应用程序可以请求服务执行此操作,并且服务可以执行此操作(当然是在身份验证和授权之后)。

但是,如果该服务可以运行具有本地系统权限的命令,该命令将在用户桌面的上下文中运行(以便用户可以与命令的 GUI 交互),则会更方便。有可能吗?

.NET 中的解决方案更可取,但 C/C++ 也可以。

【问题讨论】:

    标签: .net windows security winapi operating-system


    【解决方案1】:

    您可以通过四种方式从非提升的 GUI 进程运行提升的代码:

    1. 将提升的逻辑移动到单独的 .exe 文件中,该文件有自己的清单以要求提升。 GUI 应用程序可以在需要时使用CreateProcess() 运行它。

    2. 让 GUI 应用程序使用 ShellExecute/Ex()"runas" 动词,或第三方 CreateProcessElevated(),以启动新的提升进程。你可以使用不同的.exe文件,也可以使用不同的命令行参数的同一个.exe文件,没关系。

    3. 将提升的逻辑移到它自己的 COM 对象中,然后 GUI 应用程序可以在需要时使用 COM Elevation Moniker 实例化该对象。

    4. 让 GUI 应用程序与服务通信,然后服务可以使用 CreateProcessAsUser() 在用户会话中运行新进程(单独的 .exe 或具有不同命令行参数的 .same exe,没关系)。使用WTSQueryUserToken() 检索用户的令牌,并在STARTUPINFO 结构中指定用户的桌面。

    【讨论】:

    • 第四个选项看起来像我想要实现的(虽然现在 1 或 2 可能工作)。但我还没有完全了解应该如何构建令牌。使用 WTSQueryUserToken() 检索它是否意味着它以用户权限而不是系统权限运行(这是我需要的)?
    • 我发现这也很有用:stackoverflow.com/questions/3128017/….
    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2011-08-27
    • 2011-02-14
    • 1970-01-01
    • 2012-08-18
    • 2011-05-22
    • 2020-10-11
    相关资源
    最近更新 更多