gpt4 book ai didi

winapi - CreateProcessAsUser 有效,CreateProcessWithTokenW 无效

转载 作者:行者123 更新时间:2023-12-05 09:20:14 25 4
gpt4 key购买 nike

我们有一个作为 LocalSystem 运行的服务。我们使用 CreateProcessAsUser 和 LoadUserProfile 以特定用户身份启动工作应用程序。效果很好。但是,如果我们尝试使用 CreateProcessWithTokenW 来避免显式加载和管理用户配置文件,则会失败,并且会在事件日志中记录以下内容:

Faulting application name: SomeApp.exe, version: 1.0.0.0, time stamp: 0x578a7819
Faulting module name: KERNELBASE.dll, version: 10.0.10586.494, time stamp: 0x5775e4c5
Exception code: 0xc06d007e
Fault offset: 0x0000000000071f28
Faulting process id: 0x24e4
Faulting application start time: 0x01d1df8d223316a6
Faulting application path: C:\SomePath\SomeApp.exe
Faulting module path: C:\Windows\system32\KERNELBASE.dll
Report Id: a2310c0d-7ddf-4241-92c9-de03e8de71e8
Faulting package full name:
Faulting package-relative application ID:

是否有让 CreateProcessWithTokenW 工作的技巧?

最佳答案

当调用 CreateProcessWithTokenW 时 - 系统对 ncalrpc:[SECLOGON] 进行 RPC 调用,实际上主要任务是在某些 svchost 的上下文中完成的。从 seclogon.dll 调用的 SeclCreateProcessWithLogonW。这里是这个函数调用的trace: enter image description here

内部CreateProcessAsUserW调用,但在此之前 - 您可以查看调用 - SetTokenInformation(..TokenSessionId..) - 因此另一个 session ID 分配给 token (阅读 MSDN 中关于此的评论 - 进程在 token 中指定的 session 中运行。通过默认情况下,这是调用 LogonUser 的同一 session 。要更改 session ,请使用 SetTokenInformation 函数。)这是 SessionId 吗?这是您的服务 - 寻找电话 ProcessIdToSessionIdStub .但我们确实需要在 token 中有交互式 SessionId,而不是来自服务。所以我的结论 - CreateProcessWithTokenW 不适合来自服务的 exec interactive 进程

------------ 编辑--------------------

CreateProcessWithTokenW - CreateProcessAsUserW 周围的外壳非常厚。 CreateProcessAsUserW 需要 SE_ASSIGNPRIMARYTOKEN_PRIVILEGE,但 CreateProcessWithTokenW - 不需要。由于这个原因,CreateProcessWithTokenW 使用远程调用 seclogon 服务(具有 SE_ASSIGNPRIMARYTOKEN_PRIVILEGE)在内部调用 CreateProcessAsUserW。但是如果我们有 SE_ASSIGNPRIMARYTOKEN_PRIVILEGE - 最好自己直接调用 CreateProcessAsUserW。 CreateProcessWithTokenW 的主要限制是他在 token 中设置 SessionId,基于调用进程 SessionId,我们无法更改此设置。但是 CreateProcessAsUserW 不会修改 token 中的 SessionId - 因此如果此 token 已经来自交互式 session ,我们可以通过在 token 中自行设置交互式 SessionId 或不执行任何操作。如果我们从服务调用 CreateProcessWithTokenW - 启动的应用程序将在非交互式窗口站(属于 session 0)上运行

关于winapi - CreateProcessAsUser 有效,CreateProcessWithTokenW 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38427094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com