问题标签 [createprocessasuser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
129 浏览

c++ - C++ Windows - 如果清单需要管理员权限,则 CreateProcessAsUser() 失败但没有错误

我有一个简单的程序,只是一个空的 GUI,它通过以下方式从 SYSTEM 服务(我的)启动:

如果程序的清单有一个requestedExecutionLevel="asInvoker"一切都很好。它可以从管理员和非管理员用户启动。否则,如果不是“asInvoker”,则CreateProcessAsUser(...)返回 FALSE 并且GetLastError()为 0。

我完全被困住了。如果没有错误,为什么会失败?如果我直接运行程序,它总是可以工作(管理员、非管理员、asInvoker、requireAdministrator ...)。

如何找到失败的原因?

在 Windows 10 企业评估版 64 位 VM 上运行,UAC 已满

0 投票
1 回答
425 浏览

java - 从本地系统进程启动交互式用户进程 - 获取错误代码 5

我使用 Java JNA 来执行 Windows API 命令。

我有一个作为本地系统运行的后台服务。通过这个后台服务,我想在当前活动的桌面和用户上生成一个新进程,例如 notepad.exe。新进程不应运行提升但具有活动的登录用户权限。

我用

  • WTSGetActiveConsoleSessionId 获取活动会话
  • WTSQueryUserToken 获取相关令牌
  • CreateProcessAsUser 启动进程

如果我构建一个 jar 并从本地系统帐户使用 java -jar my.jar 启动该 jar,这将正常工作。

但是,我从 Install4j 安装程序运行代码,它或多或少是一个包装在 exe 中的 JVM。相同的代码现在失败,并且 CreateProcessAsUser 导致错误代码 5(无法访问)

  • 我比较了令牌,找不到任何区别。相同的用户、所有者、组和权限。
  • 我尝试使用进程监视器来查找任何特别之处:没有
  • 我尝试使用 CreateProcessWithTokenW 而不是 CreateProcessAsUser。该进程启动但立即退出(可能是 Windowsstation/桌面问题)

预期结果:“子”进程启动并在当前活动桌面上显示 UI。

实际结果: CreateProcessAsUser 上的错误代码 5

0 投票
1 回答
248 浏览

windows - 只有在管理员组中才能模拟没有密码的用户

目标是让服务创建一个进程,该进程具有密码未知的用户的安全上下文。我理解并接受新进程只能访问本地资源的限制

我想我已经接近解决方案了。只要要模拟的用户在本地管理员组中,一切正常。但如果不是,我会得到一个异常 0xc06d007e。被模拟的用户似乎缺少它在管理员组中时所拥有的一些权限或特权。但是,如果没有经过数千次排列的反复试验,我怎么能找出这个缺失的权利/许可/特权是什么?

要创建的进程是一个简单的控制台应用程序,实际上我什至不需要控制台。

尝试以模拟用户身份启动新进程

正如我所说,如果用户名@域在本地管理员组中,这可以正常工作,否则我会收到异常 0xc06d007e 我认为当新进程尝试启动时

0 投票
1 回答
248 浏览

c# - Windows C# 有没有办法用父进程的 Kerberos 票创建一个新进程?

我可以通过 CreateProcessAsUser 从我在这里找到的代码中创建一个新进程: https ://odetocode.com/blogs/scott/archive/2004/10/28/createprocessasuser.aspx

它工作正常,但新进程不包含由 IIS Asp.net Impersonation 模拟的新用户的 Kerberos 票证。我知道 IIS 有 Kerberos 票,我只是不知道如何以编程方式将它从父工作进程获取到我生成的调用 OpenSSH 的新进程。

编辑:使用 @Steve 提到的 DupliateHandlers 函数更新了 Impersonation 块

0 投票
1 回答
1139 浏览

windows-services - 为什么从服务子进程调用时 CreateProcessAsUser 失败并显示“拒绝访问”

我正在尝试使用 CreateProcessAsUser 函数从我的服务中以其他用户身份运行进程。代码示例在CreateProcessAsUser from c++ service created process but no console中找到。操作系统 - Windows 10

当我在主服务进程中运行它时,我的代码工作正常。但我需要从子服务进程运行相同的代码。在这种情况下,CreateProcessAsUser 返回 0 并且 GetLastError = 5(拒绝访问)。

子服务进程由下一次调用创建

我的代码在“child.exe”二进制文件中工作,应该只再创建一个进程,以这种方式启动“d:\test.exe”二进制文件

对于测试,我将启动“test.exe”的代码移动到启动“child.exe”的相同位置(服务主进程)并且“test.exe”启动正常。对于测试,我用相同的参数(用户令牌除外)替换了 CreateProcess 上的 CreateProcessAsUser,并且 test.exe 也可以正常启动。

但我需要从服务子进程(从“child.exe”)启动“test.exe”并通过 CreateProcessAsUser 启动它。我尝试了很多来自互联网的解决方案(添加 CREATE_BREAKAWAY_FROM_JOB,使用 DuplicateTokenEx,使用linkedToken,启用所有可能的权限等等),但没有解决方案有帮助。我不希望服务进程和子进程之间有任何区别。但看起来有些不同,我找不到它是什么。

任何人都可以建议,主服务器进程和它的子进程有什么区别?

0 投票
1 回答
521 浏览

c# - CreateProcessAsUser 返回成功,但进程退出并出现错误 3228369022

我有 3 个应用程序正在运行:

应用程序 A: 在本地系统下作为后台服务运行的本地服务器,具有与桌面交互的权限(至少这是高级安装程序所说的)

应用 B: 桌面捕获软件

应用程序 C: 作为登录用户运行的托盘图标。

我想要实现的是能够捕获桌面 UAC 提示和登录屏幕,所以这是我试图实现它的方法:

1.应用程序 C 调用 WTSGetActiveConsoleSessionId() (返回 2),获取桌面指针:

并将两者都发送到应用程序 A(本地服务器)

2.服务器运行如下代码:

3.现在 CreateProcessAsUser 返回成功,但进程正在退出,错误代码为 3228369022 (C06D007E)。

我使用 ProcMon 进行监视,并且加载图像没有任何错误,但是并非我的所有 dll 都已加载。

0 投票
2 回答
128 浏览

c++ - CreateProcessAsUser 太快无法跟踪进程

我们调用CreateProcessAsUser()并在检查结果后开始跟踪 (WMI) 可能创建其他进程的进程。

在一种情况下,第一个进程非常快,以至于它创建了另一个进程并在我们开始跟踪它之前终止。

我什至尝试检查结果并在调用后立即开始跟踪CreateProcessAsUser(),但这还不够快。

我的想法是从 a 开始这个过程,launcher.exe这样我们就可以跟踪所有生成的过程。

还有其他替代解决方案吗?我们有终止进程的PID。

0 投票
1 回答
715 浏览

python - windows中如何使用python以用户身份创建进程?

我尝试创建 python 脚本以用户身份启动进程(将来此代码将由 Windows 服务从会话 0 运行)。为此,我决定使用 win32api。

但我有一个错误:

什么特权?如果我正确理解这一点,我想我已经获得了所有特权

我的代码:

我真的很感激任何帮助。

0 投票
0 回答
126 浏览

powershell - Powershell 脚本显示 $env:username 是本地系统,即使该脚本是由在用户帐户下运行的进程执行的

我有一个运行和管理多个进程的 Windows 服务。根据任务管理器详细信息选项卡,所有进程都在用户帐户下运行。因此,其中一个过程是执行 PowerShell 脚本来执行一些需要本地用户帐户的操作。

我试过 logging $env:username,它说 PowerShell 脚本是在系统帐户下执行的。

如果我在没有 Windows 服务帮助的情况下手动启动该过程,则 PowerShell 脚本将成功执行并记录$env:username本地登录的用户帐户。

注意:Windows 服务正在使用 CreateProcessAsUser 方法启动这些进程,该方法应该在本地用户帐户下启动子进程。但不知何故,任务管理器似乎显示它在用户帐户下运行,但在幕后,它在系统帐户下运行。

谁能告诉我如何在本地用户帐户下执行脚本?

我用来运行 PowerShell 脚本的 cmd 是

0 投票
0 回答
29 浏览

c++ - 将 JobObject 分配给从 SYSTEM 服务启动的具有非零会话 id 的进程

我有一个 Windows SYSTEM 服务,它需要在登录用户的上下文中启动一个新进程。除此之外,我需要为具有一定限制的新流程创建一个作业。

我正在提取 explorer.exe 的进程令牌并将其复制以创建主令牌。我使用这个令牌CreateProcessAsUser来创建在用户上下文中运行的新进程,会话 id 非零。当我将作业分配给此进程时,AssignProcessToJobObject功能失败并出现访问被拒绝错误。具体来说,我无法设置JOBOBJECT_BASIC_UI_RESTRICTIONS限制(JOBOBJECT_EXTENDED_LIMIT_INFORMATION虽然有效)。

该进程被创建为挂起,在分配作业后,我正在恢复线程。

当我使用当前进程的令牌(即会话 id 为 0 的 SYSTEM 服务)而不是 explorer.exe 时,一切正常。

我正在 Windows 10 上测试这个