放弃Windows上的权利

sal*_*lva 5 c++ windows permissions

我有一个以管理员身份运行的C++应用程序(它使用requestedExecutionLevel设置为的清单进行编译requireAdministrator.

在某些时候,一旦完成了需要管理权限的所有任务,我想放弃这些权限并以启动应用程序的用户身份执行剩余的任务.

Windows提供了ImpersonateLoggedOnUser函数,但我找不到任何方法来为调用该应用程序的用户获取令牌.

有没有其他方法可以做我在这里描述的内容?

Old*_*art 0

也许更好的方法是在清单中请求 HighestAvailable 而不是 requireAdministrator。然后,如果您发现自己跑得较高,就做您需要做的一切。如果您发现自己没有运行提升:

  1. 再次启动您的程序,使用 ShellExecute 和 runAs 动词来提升运行速度。
  2. 让未提升的进程等待提升的进程执行其需要执行的操作。(如何知道提升的流程何时完成,留给实施者作为练习。您还需要担心如果用户不允许您的提升的流程启动会发生什么。)
  3. 一旦提升的过程完成,就可以完成其余的未提升的工作。

如果您想继续执行原来的计划,Raymond Chen 的这篇博客文章解释了如何从提升的流程启动未提升的流程。(您的清单请求需要管理员这一事实可能会使此过程复杂化。)