- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个作为 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:
内部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/
我关注了 Frank K. 的 proposed solution用于从提升的用户进程启动普通用户进程。但是,我在使建议的解决方案起作用时遇到了一些困难(Win 7 x64 Professional;
我正在尝试使用 CreateProcessWithTokenW() win32 API 函数来启动一个带有 token 的新进程。问题是我对 win32 API 很陌生,我不知道如何正确使用该函数,以
我们有一个作为 LocalSystem 运行的服务。我们使用 CreateProcessAsUser 和 LoadUserProfile 以特定用户身份启动工作应用程序。效果很好。但是,如果我们尝试使
我正在尝试从 Windows 7-10 上的提升进程创建未提升进程。 我使用以下内容作为引用: FAQ: How do I start a program as the desktop user fr
我有一个调用 CreateProcessWithTokenW 失败,访问被拒绝。任何想法如何调试? 对 CreateProcessWithTokenW 的调用在这里:https://github.co
我有一个控制台应用程序,它调用 CreateProcessWithTokenW() WinAPI 函数来创建一个启动 cmd 控制台的新进程。通过调用它,它会启动一个新的 CMD 窗口。我想在调用 c
我是一名优秀的程序员,十分优秀!