问题标签 [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 投票
2 回答
557 浏览

c# - CreateProcessAsUser,调用dll函数

使用 CreateProcessAsUser 我可以在硬盘上的某处调用 .exe 文件:

我在网上找到的每个示例都使用 lpCommandLine 参数来调用程序。我想在 dll 中调用一个函数。有谁知道这是否可能?有一个例子会很好......

谢谢!

0 投票
1 回答
1826 浏览

iis-7 - 来自服务(IIS 7)的用户会话(0以外)中的CreateProcessAsUser

我的设置是:

  • 视窗服务器 2008、IIS 7

我想完成的事情:

  • IIS 7 从我的网站接收到执行一些 3D 操作(在 WPF 中)的请求,最后 IIS 7 应该渲染图像并将其存储在磁盘上的某个位置以加载到网站中

我所知道的以及我已经测试过的:

  • IIS 7 在 Windows Server 2008 上的会话 0 中作为服务运行
  • 会话 0 中的任何服务都无法访问视频驱动程序,即会话 0 中的任何服务都无法执行任何渲染任务(此处解释:会话 0 隔离
  • 微软在另一篇论文中建议在用户会话中创建一个进程(通过 CreateProcessAsUser)以成功执行渲染。

到目前为止我取得的成就:

  • LogonUser 运行良好
  • CreateProcessAsUser 运行良好

唯一(但重要的)部分不起作用:当我使用用户名和密码登录并以用户身份创建进程时,该进程仍处于会话 0 中,因此渲染失败。用户成功登录(我检查了它)。根据微软的说法,它必须可以在用户会话(而不是会话 0)中创建一个进程。

  • 如何在 0 以外的其他会话中以用户身份创建进程?
  • 我是否必须自己创建一个新会话或类似的东西?

谢谢!

我的代码:

0 投票
2 回答
2520 浏览

windows - 如何获取 Windows SYSTEM 用户令牌

操作系统是启用了 UAC 的 Windows 7 或更高版本。调用过程具有管理员权限,已由 UAC 框确认。

我想在用户 SYSTEM 下生成一个新的控制台窗口(cmd.exe)(不要问为什么)。我可以使用 Sysinternals 的 PsExec 工具或类似工具以交互方式执行此操作,但我没有源代码,我需要了解它是如何工作的。

我知道我必须调用 CreateProcessAsUser() 并且在第一个参数 (hToken) 设置为 NULL 时可以正常工作,但现在我需要知道如何获取 hToken。我知道我可以通过调用 LogonUser() 来获得这样的令牌 - 但不能用于 SYSTEM。我将如何获得 SYSTEM 的令牌?

我想过使用 DuplicateTokenEx(),但这需要一个我没有的原始令牌。

我是否必须查询进程列表,找到任何 SYSTEM 进程并尝试复制该令牌或其他什么?我不想对 PsExec 工具或其他这样做的工具之一进行反向工程。

0 投票
1 回答
5990 浏览

c++ - CreateProecssAsUser 提升权限?

我的 CreateProcessAsUser 函数出现错误。它说“请求的操作需要提升。”我以为我已经给了它最高权限。有人帮忙吗?谢谢

我的代码如下:

0 投票
1 回答
50 浏览

c++ - 希望线程在进程执行之前完成

我正在创建一个作为 User( CreateProcessAsUser()) 的进程以在用户屏幕上启动应用程序。在应用程序启动之前,我需要以某种方式在用户屏幕上运行一个函数。我的想法是CreateRemoteThread()将我的功能放在这里,但这会在CreateProcessAsUser()已经启动应用程序之后发生。有人建议吗?谢谢

0 投票
1 回答
6429 浏览

vb.net - 使用作为 SYSTEM 运行的 vb.net 应用程序,如何为每个登录用户启动一个分离的进程?

在对这个主题进行了数周的研究之后,我终于决定开始我自己的线程,希望有经验的人可以提供帮助。我搜索了互联网,试图了解那里的各种编码示例,但我试图将一个可行的解决方案放在一起。让我从一些背景开始——

背景:
我有一个 vb.net 应用程序,它使用 CA IT Client Manager (ITCM) 交付到我组织中的 Windows 服务器和 PC。与 Microsoft SCCM 非常相似,CA ITCM 在每台 PC 上都有一个作为 SYSTEM 运行的代理服务。因此,当我的应用程序在目标 PC 上交付和执行时,它在“NT Authority\SYSTEM”上下文中运行。

问题:
在我的应用程序的初始阶段,有一个进程在我需要停止的每个登录用户的上下文中运行。在我的应用程序执行结束时,我需要为每个登录的用户重新启动此过程,以防止他们不得不注销并重新登录。我要停止的进程实际上是一个系统托盘进程,用户可以在他们的桌面上与之交互。

寻找 VB.NET 解决方案:
在互联网上无休止地研究,似乎没有针对此问题的本地 .NET 解决方案,而无需为每个登录用户设置密码或提示用户输入一些凭据。由于这对我来说不是一个选项,我需要找到一种方法来启动一个进程,而无需知道或需要登录用户的凭据。

研究这条途径使我找到了CreateProcessAsUser Windows API 函数。据我了解,我可以按照这些思路做一些事情——(见下文)

注意:
这是我第一次在 VB.NET 中对 Windows API 使用非托管代码调用。当我将各种帖子中的代码拼凑在一起时,常量、枚举和函数声明存在很多歧义。如果您发现这些声明中有任何错误,请告诉我。我有很多关于何时需要将数据类型“封送”为不同类型的问题。请仔细阅读!!

由于类似帖子中的示例不计其数,因此我尝试从 CreateProcessAsUser 页面遵循 MSDN 示例:

MSDN 链接: http:
//msdn.microsoft.com/en-us/library/windows/desktop/ms682429 (v=vs.85).aspx

示例链接: http:
//msdn.microsoft.com/en-us/library/windows/desktop/aa379608 (v=vs.85).aspx

除了检查每个 Windows API 调用的有效性之外,请检查操作的整体顺序,如果我过于复杂甚至可能遗漏了什么,请告诉我。我没有从 Microsoft 示例中实现的唯一代码是允许每个 SID 完全访问交互式 Windows 站,然后允许 SID 完全访问交互式桌面。也许我错了,但我认为每个用户都应该已经可以访问他们的交互式桌面了!

我的结果:
目前,我正在测试从我的管理员帐户调用 LaunchProcess 函数(在我的本地机器上从 Visual Studio 2010 运行我的解决方案)并通过 ITCM 交付应用程序(从我的本地机器上的 SYSTEM 帐户运行)。在这两种情况下,我都会在用户会话中启动指定的进程,但出现以下错误:

“应用程序无法正确启动(0xc0000142)。单击确定关闭应用程序。”

我希望有人可以查看我的代码并为我指明正确的方向。否则,请告知我如何调试这里到底出了什么问题。

非常感谢您提前提出的所有意见。

0 投票
1 回答
234 浏览

database - 来自服务的 CreateProcessAsUser 在访问远程计算机时存在安全问题

我正在尝试将我的本地(远程)数据库与服务器上的集中统一数据库(使用 Sybase 数据库)同步。同步必须在预定的时间发生,我正在使用“CreateProcessByUser”。为了启动同步过程,我使用的是 sybase 提供的 dbremote.exe。

构造的命令行参数为:
commandLine = dbremote.exe -l 512K -x -k -c "dsn=HOME* * ;uid=dba;pwd= ***;cs=none;DBKEY= ***" -os 10000000 -o "c:\data\test\dbremote.log" "c:\data\test"

该过程在远程机器上执行,当同步发生时,应该在远程数据库和统一数据库之间交换消息。

如果我从 Windows 命令提示符执行上述命令行,则同步成功。但是,当 CreateProcessAsUser 在预定时间触发时,我在日志文件中看到以下错误消息:

日志文件:

一、2013-04-11 11:17:11。发送消息给“BTI”
I. 2013-04-11 11:17:11。sopen "\\IPaddress\Databases\Production\messages\consolid\Rem00005.g" 失败 1326:无效参数
I. 2013-04-11 11:17:11。sopen "\\IPaddress\Databases\Production\messages\consolid\Rem00005.h" 失败 1326:无效参数
I. 2013-04-11 11:17:13。sopen "\\IPaddress\Databases\Production\messages\consolid\Rem00005.i" 失败 1326:无效参数
I. 2013-04-11 11:17:13。sopen "\\IPaddress\Databases\Production\messages\consolid\Rem00005.j" 失败 1326:无效参数
I. 2013-04-11 11:17:13。sopen "\\IPaddress\Databases\Production\messages\consolid\Rem00005.k" 失败 1326: 无效参数
E. 2013-04-11 11:17:
一、2013-04-11 11:17:13。重新发送请求正在排队
I. 2013-04-11 11:17:14。执行完成

其中“\\IP address\Databases\Production\messages\consolid”是服务器上复制来自远程计算机的消息的文件夹

我请求你的帮助。为什么我能够从命令提示符同步,为什么不能从“CreateProcessAsUser”同步?为什么进程无法将消息发送到服务器上的上述路径。

我已经尝试过的几件事:

  1. 我正在使用我的 Windows 域名和凭据以及在代码中使用 ::LogonUser() 登录到应用程序。我已经仔细检查了我发送的凭据是否有效。

  2. 使用资源管理器,我可以成功导航到服务器上的上述路径并可以添加/删除文件。

  3. 我已将我的用户 ID 添加到管理工具 >> 本地安全策略下的“本地安全设置”中。

任何建议表示赞赏。

0 投票
0 回答
1249 浏览

c# - 将 stdin/stdout/stderr 完全输送到使用 CreateProcessAsUser 创建的进程

我正在尝试做的是编写一个小包装器,它允许我在当前锁定的用户的 Windows GUI 上启动一个应用程序以使用服务。包装器调用如下:“wrapper.exe mspaint arg1 arg2 < some-piped-input”。一切正常,除了管道的东西。目前我正在创建 3 个管道(用于 stdin、stdout、stderr),它们应该将输入重定向到包装器(在示例中为一些管道输入)到 GUI 应用程序的进程和输出/错误到包装器的标准输出/标准错误。

我没有收到任何错误,它只是不起作用。

使用以下代码,这些管道都不起作用:

0 投票
0 回答
2393 浏览

c++ - CreateProcessAsUser 失败,使用 GetLastError() 获取错误码为 1314

我用的是win7操作系统,开发环境是vs2005。

情况是我想将进程创建为当前帐户的权限。(例如:在普通帐户中,右键单击程序选择“以管理员身份运行”)

我参考其他人的方式: 1.获取进程explorer.exe的token;2.提升特权;3.使用 CreateProcessAsUser 创建一个进程。

但 CreateProcessAsUser 失败,使用 GetLastError() 获取错误代码为 1314。

正因为如此,我觉得我现在疯了。你能告诉我我的程序有什么问题吗?谢谢!!!

0 投票
2 回答
658 浏览

c# - 有什么方法可以知道 CreateProcessAsUser 的进程何时从 C# 退出?

我目前正在使用 C# 中的 P/Invoke 使用 CreateProcessAsUser,以便从 SYSTEM 帐户中运行的 Windows 服务作为受限用户启动进程。

我的目标是有一个服务来启动一个应用程序,该应用程序需要从我们办公室的用户那里获取信息(进程在前台运行、时间空闲等)。问题是如果这个应用程序以用户的权限运行......好吧,他可以关闭它。如果像其他应用程序的常规进程一样运行,我可以通过以下方式控制此重生:

但是这样,我的问题是,我有两个用户可关闭的应用程序,而不是用户可关闭的应用程序(嗯,但其中一个会重新生成另一个:P)。

您是否知道有某种方法可以知道CreateProcessAsUser创建的进程是否可以被“监视”以在它被杀死或终止时启动某些操作?

PD:当然,不要提出任何改进或不同的方法。