【问题标题】:Create process suspend and UAC创建进程挂起和 UAC
【发布时间】:2014-01-28 01:10:52
【问题描述】:

我有一个 inyector 应用程序可以将远程 DLL 映射到另一个进程。我试图插入的进程有自己的清单并且需要管理员权限。我正在尝试使用 CreateProcess,因为我可以在挂起状态下创建进程,映射到远程内存然后恢复它。

现在根据 MS,我可以将 ShellExecute 与 runas 动词一起使用,但这将立即开始运行该进程。有什么方法可以要求用户以管理员身份运行进程,同时创建处于挂起状态的进程?

【问题讨论】:

  • 如果您的进程没有管理员权限,那么无论如何它都无法修改提升的进程。将您的程序配置为需要提升,或启动提升的子进程来代表您完成工作。

标签: c++ windows


【解决方案1】:

如果目标可执行文件有一个指定requiresAdminstrator 的 UAC 清单,那么您不需要做任何额外的事情。只需正常使用CreateProcess(),让操作系统为您处理海拔。在CreateProcess() 将控制权交还给您之前,提升将应用于新流程。

如果目标可执行文件没有强制提升的 UAC 清单,您只需要手动提升。在这种情况下,如果您不想使用ShellExecute/Ex(),可以使用CreateProcessElevated() 之类的东西。

【讨论】:

  • 那么可能是它的 Visual Studio 问题,因为我正在 VS 中调试我的项目并且 CreateProcess 返回我没有足够的权限。
  • 这让我觉得你没有正确使用它。请显示您的实际代码。您不需要特殊权限即可创建新进程。如果调用进程不是以管理员身份运行,UAC 将提示用户输入完整凭据。如果调用处理以管理员身份运行,UAC 将简单地提示权限。无论哪种方式,UAC 都会透明地处理这些细节,调用过程不需要知道或关心它们。它所关心的只是创建了一个新进程。
  • 好吧,没关系,它不是在管理级别上运行的 Visual Studio,现在一切正常,感谢您的帮助
  • 这是错误的。 CreateProcess 函数不执行提升,如果现有凭据不足以用于目标可执行文件,则 CreateProcess 将失败。
猜你喜欢
  • 2019-05-25
  • 2023-04-08
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
相关资源
最近更新 更多