【问题标题】:Difference between CreateProcessAsUser() to CreateProcessWithTokenW()CreateProcessAsUser() 与 CreateProcessWithTokenW() 之间的区别
【发布时间】:2021-12-07 10:43:48
【问题描述】:

我试图了解标题中指定的 2 个 API 调用之间的区别。 当我试图弄乱我自己的函数时,我注意到的唯一明显区别是CreateProcessWithTokenW() 函数将进程添加到一个独立的工作中,CreateProcessAsUserA()s 进程加入了一个由他的parnet 进程组成的大组,由CreateProcessWithTokenW() 和其他人创建的进程。此外,CreateProcessAsUserA() 需要额外的权限才能成功,而 CreateProcessWithTokenW() 函数可以在没有它们的情况下运行,根据 MSDN 文档,https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessasusera 中指定的所需权限是:

【问题讨论】:

标签: c++ windows api winapi process


【解决方案1】:

CreateProcessAsUser 一直存在,CreateProcessWithToken 是在 Server 2003 中添加的。

CreateProcessWithToken 可以加载用户配置文件并为您处理 winsta0 windowsstation 和桌面。我相信 CreateProcessWithToken 需要运行辅助登录服务。

它们需要不同的令牌权限,因此如果第一个功能失败,您可能应该回退到另一个功能...

【讨论】:

  • @Andres 据我了解,在 Windows Internals 的第 7 版中,它实际上显示 CreateProcessWithTokenWCreateProcessWithLogonW 调用 SecLogon.dll,然后调用 CreateProcessAsUser,最后调用 @ 987654324@,但不要直接调用CreateProcessAsUser,而是在调用NtCreateUserProcess 之前调用CreateProcessInternal。而且我想准确了解这两个功能的需求,而不是在第一个功能失败时回退到另一个...
  • 我相信 CreateProcessAsUser 需要运行辅助登录服务 - 这不是真的。 @teamshmot - CreateProcessWithTokenW 对另一个进程进行 rpc 调用,并且已经在服务调用 CreateProcessAsUser 内部。 CreateProcessAsUser 总是在当前进程中执行
  • 我相信 CreateProcessAsUser 需要运行辅助登录服务 - 或者抱歉,您可能打错了 - 我相信 CreateProcessWithToken 需要辅助登录服务正在运行 - 这是真的。是的
猜你喜欢
  • 1970-01-01
  • 2019-04-09
  • 2014-10-30
  • 2016-02-09
  • 2016-05-14
  • 2016-10-11
  • 2015-06-02
  • 2018-04-08
  • 2021-09-02
相关资源
最近更新 更多