问题标签 [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.
c# - CreateProcessAsUser,调用dll函数
使用 CreateProcessAsUser 我可以在硬盘上的某处调用 .exe 文件:
我在网上找到的每个示例都使用 lpCommandLine 参数来调用程序。我想在 dll 中调用一个函数。有谁知道这是否可能?有一个例子会很好......
谢谢!
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 以外的其他会话中以用户身份创建进程?
- 我是否必须自己创建一个新会话或类似的东西?
谢谢!
我的代码:
windows - 如何获取 Windows SYSTEM 用户令牌
操作系统是启用了 UAC 的 Windows 7 或更高版本。调用过程具有管理员权限,已由 UAC 框确认。
我想在用户 SYSTEM 下生成一个新的控制台窗口(cmd.exe)(不要问为什么)。我可以使用 Sysinternals 的 PsExec 工具或类似工具以交互方式执行此操作,但我没有源代码,我需要了解它是如何工作的。
我知道我必须调用 CreateProcessAsUser() 并且在第一个参数 (hToken) 设置为 NULL 时可以正常工作,但现在我需要知道如何获取 hToken。我知道我可以通过调用 LogonUser() 来获得这样的令牌 - 但不能用于 SYSTEM。我将如何获得 SYSTEM 的令牌?
我想过使用 DuplicateTokenEx(),但这需要一个我没有的原始令牌。
我是否必须查询进程列表,找到任何 SYSTEM 进程并尝试复制该令牌或其他什么?我不想对 PsExec 工具或其他这样做的工具之一进行反向工程。
c++ - CreateProecssAsUser 提升权限?
我的 CreateProcessAsUser 函数出现错误。它说“请求的操作需要提升。”我以为我已经给了它最高权限。有人帮忙吗?谢谢
我的代码如下:
c++ - 希望线程在进程执行之前完成
我正在创建一个作为 User( CreateProcessAsUser()
) 的进程以在用户屏幕上启动应用程序。在应用程序启动之前,我需要以某种方式在用户屏幕上运行一个函数。我的想法是CreateRemoteThread()
将我的功能放在这里,但这会在CreateProcessAsUser()
已经启动应用程序之后发生。有人建议吗?谢谢
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)。单击确定关闭应用程序。”
我希望有人可以查看我的代码并为我指明正确的方向。否则,请告知我如何调试这里到底出了什么问题。
非常感谢您提前提出的所有意见。
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”同步?为什么进程无法将消息发送到服务器上的上述路径。
我已经尝试过的几件事:
我正在使用我的 Windows 域名和凭据以及在代码中使用 ::LogonUser() 登录到应用程序。我已经仔细检查了我发送的凭据是否有效。
使用资源管理器,我可以成功导航到服务器上的上述路径并可以添加/删除文件。
我已将我的用户 ID 添加到管理工具 >> 本地安全策略下的“本地安全设置”中。
任何建议表示赞赏。
c# - 将 stdin/stdout/stderr 完全输送到使用 CreateProcessAsUser 创建的进程
我正在尝试做的是编写一个小包装器,它允许我在当前锁定的用户的 Windows GUI 上启动一个应用程序以使用服务。包装器调用如下:“wrapper.exe mspaint arg1 arg2 < some-piped-input”。一切正常,除了管道的东西。目前我正在创建 3 个管道(用于 stdin、stdout、stderr),它们应该将输入重定向到包装器(在示例中为一些管道输入)到 GUI 应用程序的进程和输出/错误到包装器的标准输出/标准错误。
我没有收到任何错误,它只是不起作用。
使用以下代码,这些管道都不起作用:
c++ - CreateProcessAsUser 失败,使用 GetLastError() 获取错误码为 1314
我用的是win7操作系统,开发环境是vs2005。
情况是我想将进程创建为当前帐户的权限。(例如:在普通帐户中,右键单击程序选择“以管理员身份运行”)
我参考其他人的方式: 1.获取进程explorer.exe的token;2.提升特权;3.使用 CreateProcessAsUser 创建一个进程。
但 CreateProcessAsUser 失败,使用 GetLastError() 获取错误代码为 1314。
正因为如此,我觉得我现在疯了。你能告诉我我的程序有什么问题吗?谢谢!!!
c# - 有什么方法可以知道 CreateProcessAsUser 的进程何时从 C# 退出?
我目前正在使用 C# 中的 P/Invoke 使用 CreateProcessAsUser,以便从 SYSTEM 帐户中运行的 Windows 服务作为受限用户启动进程。
我的目标是有一个服务来启动一个应用程序,该应用程序需要从我们办公室的用户那里获取信息(进程在前台运行、时间空闲等)。问题是如果这个应用程序以用户的权限运行......好吧,他可以关闭它。如果像其他应用程序的常规进程一样运行,我可以通过以下方式控制此重生:
但是这样,我的问题是,我有两个用户可关闭的应用程序,而不是用户可关闭的应用程序(嗯,但其中一个会重新生成另一个:P)。
您是否知道有某种方法可以知道CreateProcessAsUser创建的进程是否可以被“监视”以在它被杀死或终止时启动某些操作?
PD:当然,不要提出任何改进或不同的方法。