gpt4 book ai didi

winapi - CreateProcessAsUser() 给出 "A required privilege is not held by the client"哪一个?

转载 作者:行者123 更新时间:2023-12-04 13:38:56 28 4
gpt4 key购买 nike

使用在我的交互式 session 中运行的 IIS Express 中的 System.Diagnostic.Process.Start(),我可以执行运行 的程序作为不同的用户 具有校正功能。不幸的是,这似乎不适用于非交互式 session 。

Process.Start internally calls CreateProcessWithLogonW(CPLW) when credentials are specified. CreateProcessWithLogonW cannot be called from a Windows Service Environment (such as an IIS WCF service). It can only be called from an Interactive Process (an application launched by a user who logged on via CTRL-ALT-DELETE). -- from this SO answer



我需要将此站点从应用程序池帐户发布到 IIS 8。所以我按照上面引用的答案的建议 CreateProcessAsUser 。我已经使用本地安全策略设置了服务帐户和代理帐户,并按照该答案中的建议重新启动 - 服务帐户可以替换 token ,修改配额,代理帐户可以批量登录(以及作为该测试的服务)。但我无法让它在 IIS Express(或控制台测试应用程序)或 IIS 8 中工作。我尝试以 LOGON32_LOGON_BATCH 身份运行。 , LOGON32_LOGON_NETWORK_CLEARTEXT , 和 LOGON32_LOGON_SERVICE ,甚至 LOGON32_LOGON_INTERACTIVE .我什至给了我自己的帐户“作为服务登录”和“作为操作系统的一部分”特权,没有任何变化——所有这些都在重新启动后进行了测试。

对于所有配置,我都从 IIS Express 收到“客户端不持有所需的特权”。在服务器上,我得到相同的运行控制台应用程序。但是发布应用程序,它似乎可以很好地启动该过程,但随后我似乎遇到了权限错误。

我想知道我的帐户在本地运行时缺少哪些权限,以便我可以正确调试它们(并最终找出我遇到的任何权限错误)。有什么办法可以确定吗?无论哪种方式,如果您知道问题所在,我也希望如此!

谢谢!

最佳答案

根据文档:

CreateProcessAsUser function

Typically, the process that calls the CreateProcessAsUser function must have the SE_INCREASE_QUOTA_NAME privilege and may require the SE_ASSIGNPRIMARYTOKEN_NAME privilege if the token is not assignable. If this function fails with ERROR_PRIVILEGE_NOT_HELD (1314), use the CreateProcessWithLogonW function instead. CreateProcessWithLogonW requires no special privileges, but the specified user account must be allowed to log on interactively. Generally, it is best to use CreateProcessWithLogonW to create a process with alternate credentials.
...
If hToken is a restricted version of the caller's primary token, the SE_ASSIGNPRIMARYTOKEN_NAME privilege is not required. If the necessary privileges are not already enabled, CreateProcessAsUser enables them for the duration of the call.



调用线程可以使用 OpenThreadToken() AdjustTokenPrivileges() 在调用 CreateProcessAsUser() 之前根据需要启用个人权限.但是由于它在内部无论如何都是这样做的,这意味着与调用线程关联的用户没有那些可用的权限。

关于winapi - CreateProcessAsUser() 给出 "A required privilege is not held by the client"哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27362404/

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