gpt4 book ai didi

c++ - 管理进程如何在登录用户中打开应用程序?

转载 作者:可可西里 更新时间:2023-11-01 10:34:43 26 4
gpt4 key购买 nike

概览

过程

用C++编译运行的exe/dll

场景

  1. 登录 (win 7) 标准用户帐户(无管理员)
  2. 运行流程 以管理员身份
  3. 进程 使用 ShellExecute 打开一些应用程序 (exe)

问题

应用程序在管理员用户的范围内打开

期待

应用在标准用户范围内打开


解决方案

1。 CreateProcessAsUser

使用CreateProcessAsUser (假设我成功获得了 hToken 应该已经解决了这个问题)。

但是,我收到调用失败的错误代码 1314 - ERROR_PRIVILEGE_NOT_HELD .回到文档告诉我:

If this function fails with ERROR_PRIVILEGE_NOT_HELD (1314), use the CreateProcessWithLogonW function instead

所以我深入挖掘并找到了这个 CreateProcessAsUser Error 1314这不是很有帮助。

2。模拟登录用户

使用 ImpersonateLoggedOnUser生成相同的错误代码:1314 - ERROR_PRIVILEGE_NOT_HELD .

3。 CreateProcessWithLogonW

CreateProcessWithLogonW 需要 lpPassword 我自然没有


问题

管理进程如何在登录用户中打开应用程序?

最佳答案

您是否尝试过使用 CreateProcessWithTokenWCreateProcessWithLogonW 中提到文档?它似乎需要比 CreateProcessAsUser 弱得多的特权,一个你应该拥有的(SE_IMPERSONATE_NAME 而不是 SE_ASSIGNPRIMARYTOKEN_NAME)。

你说你已经有一个交互式用户的 token ,所以我不会深入研究它。

(注意:所有这些都报告了奇怪的错误,包括 CreateProcessWithTokenW。不要放弃第一次尝试。错误和修复例如:why is CreateProcessWithTokenW failing with ERROR_ACCESS_DENIED)


hToken 不是“权利”。这是一个token .错误说的是你缺少 privilege .

拥有特权不是基本权利!默认情况下,某些权限会授予某些用户。其他需要通过Local Security Policy给出(在 MMC 管理单元或 LsaAddAccountRights 的“用户权限分配”节点中 - 所有这些都记录在页面 Assigning Privileges to an Account 中)。

除此之外,有时您必须使用 AdjustTokenPrivileges启用 权限。 .这记录在同级页面中 Changing Privileges in a Token .

如果您持有它们,某些 API 会启用它们。其他人不这样做,并要求您自己这样做。显而易见的方法是在调用之前启用权限和记录为需要它的 API。

MS 论坛链接可能不存在,但错误消息非常清楚。 MSDN 对函数的描述:

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.

错误是(来自您链接到的页面!):

ERROR_PRIVILEGE_NOT_HELD
  1314 (0x522)
  A required privilege is not held by the client.

关于c++ - 管理进程如何在登录用户中打开应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33539987/

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