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

c++ - 如何在 Windows 上使用来自 SSPI 的委托凭证创建ProcessAsUser?

我在 Kerberos 登录基础架构(单点登录)上工作:

  1. 经过 Kerberos 密钥分发中心身份验证的客户端。
  2. 使用 Kerberos 作为身份验证的主体服务服务器。

服务器程序是用 C++ 编写的。

在我的主体(客户端)和我的服务主体(服务器)之间创建上下文没有问题。我还将客户端凭据委托给服务器,因为我需要使用客户端用户凭据在服务器上创建一个进程。

这是我的问题,在服务器端,我有一个 SSPI 上下文,我需要使用 Windows 类型 CreateProcessAsUser pHandle

我不知道如何使用我的 SSPI 凭据在我的服务器上创建一个作为客户端用户的进程。

我看一下 LsaLogonUser,它似乎做了我想做的事(从 kerberos 用户凭据创建句柄),但我的问题是一样的,我不知道如何将 SSPI 令牌与这个 LsaLogonUser 一起使用。

在此先感谢您的帮助

0 投票
0 回答
117 浏览

windows-7 - 使用 CreateProcessWithLoginW 提升 Win7 中的设置过程

我正在尝试修改旧版 VB6 应用程序以使其能够在 Windows 7 上运行。该应用程序为各个子应用程序运行安装程序。是的,我知道这很糟糕,但我目前无法改变。

我一直在尝试使用 CreateProcessWithLoginW 将运行 setup.exe 的请求提升为管理员级别的帐户。只需使用我的域凭据,这在测试机器上效果很好。

但是,将它移到另一个盒子时会失败,并出现 740 错误“请求的操作需要提升”。应该注意的是,我使用的是完全相同的域凭据。我在两台机器上都关闭了 UAC(我发现这对某些人来说是个问题),但这似乎没有什么区别。我还从配置文件转到了网络凭据(第一次尝试时我没有明确加载配置文件)。

我正在使用的当前代码如下。任何可能会破坏的建议将不胜感激。

0 投票
1 回答
710 浏览

c++ - 使用 Windows 服务和 CreateProcessWithLogonW 生成屏幕截图 (BMP)

我正在尝试使用 Windows 服务创建一个屏幕截图应用程序,它可以定期捕获完整的屏幕。首先,我以基本的窗口服务示例(http://code.msdn.microsoft.com/windowsdesktop/CppWindowsService-cacf4948)并在项目中包含屏幕截图实用程序类并在示例窗口的onStart方法中调用捕获函数服务。但是,我得到了空白屏幕截图。后来我意识到 Windows 服务在不同的会话中运行,因此屏幕截图是空白的。

S,我将屏幕截图实用程序类解耦并将其作为一个单独的项目并从中生成一个 .exe(它能够在需要的地方将日志写入文件)。这一次,我使用 createProcessWithLogonW 函数调用可执行文件,使其在指定用户域中运行 exe,而不是默认服务会话。以下是我一直在使用的代码片段。

我得到的日志没有错误。当服务启动时,它会警告交互式服务试图显示消息。当我单击它时,我再次收到黑色屏幕截图。我知道这里涉及很多事情,我只是对我正在做的事情给出了一个高层次的看法。另外,我对 Windows 编程很陌生。任何形式的帮助表示赞赏。

0 投票
2 回答
362 浏览

windows - 如何设置特定进程的最大线程数?

我正在使用CreateProcessAsUserWindows API 方法来创建进程。我正在使用安全令牌创建流程并将其添加到作业对象。

我可以使用安全令牌或作业对象或任何其他方法限制我正在盯着的进程的最大线程数吗?

我正在使用 C#,但如果解决方案涉及调用直接 Windows API 调用,则语言无关紧要。

0 投票
2 回答
1545 浏览

c++ - CreateProcessAsUser - 错误 1305

我有服务,我需要使用该服务的当前用户权限运行 gui 应用程序。这是我的代码,它总是返回 GetLastError 和 1305 CreateProcessAsUser 功能。我该如何解决它,或者我的代码可能不正确,您可以给我一些有用的建议。谢谢。

0 投票
1 回答
2189 浏览

windows - 在标准用户登录时启动管理交互过程

我有一个系统服务,它以管理员身份创建了一个帮助交互进程,以便它可以访问一些与桌面相关的资源,包括 BlockInput() 函数和 NVIDIA 的 NVAPI 函数,它们不能从服务运行。当登录的用户是管理员的成员时,以下工作:

  1. 设置权限级别,包括 SE_TCB_NAME
  2. 使用 WTSGetActiveConsoleSessionId() 获取活动会话 ID
  3. 使用 WTSQueryUserToken() 从会话 ID 获取登录用户
  4. GetTokenInformation() 与 TokenLinkedToken
  5. 带有 SecurityImpersonation 的 DuplicateTokenEx()
  6. 使用 CreateProcessAsUser() 启动进程

但是,当我让当前登录会话成为标准用户而不是管理员时,步骤 4. 失败,大概是因为标准用户没有与其链接的管理级别令牌。这里有什么解决方案?我假设我需要获取其中一位管理员用户的令牌,但我该怎么做呢?如果该用户不是登录用户,它是否仍然可以访问与当前桌面交互的功能?

0 投票
1 回答
822 浏览

c# - CreateProcessAsUser 多个应用程序实例?

我正在尝试使用 CreateProcessAsUser 启动服务,但由于某种原因,在调试时会创建多个(30 多个)EXE 实例。这些进程开始在这行代码上产生:

ret = CreateProcessAsUser(DupedToken, Path, null, ref sa, ref sa, false, 0, (IntPtr)0, "c:\\", ref si, out pi);

我使用了此示例中的代码 - http://support.microsoft.com/default.aspx?scid=kb;EN-US;889251

在此处输入图像描述

0 投票
2 回答
2395 浏览

c# - CreateProcessAsUser 用户上下文

我已经搜索了很长时间,但还没有找到可行的解决方案:-(

我创建了一个窗口服务,它在每个使用 CreateProcessAsUser ( http://www.pinvoke.net/default.aspx/advapi32/createprocessasuser.html )、WTSEnumerateSessions 等登录到机器的用户上启动一个客户端......

这已经很好了。客户端在用户会话中启动,显示其任务栏图标,并且与服务的通信正常。

我遇到的问题是我需要让该客户端将临时文件存储在用户的配置文件中。我尝试从一个小日志文件开始,这样我就可以跟踪我的用户最终可能遇到的任何错误。不幸的是,我无法保存到用户的临时文件夹,因为客户端似乎在 LocalSystem 的上下文中运行,尽管 WindowsIdentity 显示了正确的用户: System.IO.Path.GetTempPath() 总是返回 'C:\Windows\Temp' 但我的用户的没有管理权限,所以他们不能在那里写...此外,我计划将设置存储在当前用户的注册表中,这也不起作用。我认为这在某种程度上与错误的临时路径有关。

我也尝试过 CreateEnvironmentBlock ( http://www.pinvoke.net/default.aspx/userenv/CreateEnvironmentBlock.html ) 但我无法让它工作,我在某处发现一篇文章说这在 Vista 或更高,所以我停止研究那个。

为了测试,我创建了一个小的测试表单,只是这样做:

这个总是在模拟之前和之后显示相同的结果:“Temp: C:\Windows\Temp User:testdomain\testuser” :-(

如果这有助于我启动进程的功能(用户令牌由 WTSEnumerateSessions 提供) - 当然这只适用于 LocalSystem 的上下文:

有什么想法可以在用户的​​上下文中而不是在 LocalSystem 的上下文中启动我的进程吗?

非常感谢!

0 投票
0 回答
310 浏览

python - python:在windows中使用createprocessasuser api时处理stderr流

需要一些帮助来调试这个问题。我尝试在线搜索和stackoverflow,但找不到解决方案。我对windows api相当陌生,所以请原谅我的无知。

基本上,我正在尝试运行一个 c++ 应用程序,该应用程序使用特定用户从 python 输出到 stdout 和 stderr。为此,我使用 LogonUser API 和 CreateProcessAsUser api 调用二进制文件,并使用 Pipes 来捕获输出和错误流。主要从 python win32 模块中的演示代码中获取代码。但是,由于某种原因,当我的进程转储到错误流时,它会挂在 WriteFile 上。查看故障转储我看到文件句柄是 2 (stderr)。有人可以帮我解决这个问题吗?

提前致谢

这是代码片段——

0 投票
1 回答
70 浏览

winapi - 我如何使用 createpcocess 将创建的进程的 stdout 和 stderr 重定向到字符串流?

这就是问题所在,我想使用 createprocess 在 win32 控制台程序中运行命令,但我希望能够在修改发送到进程的数据后搜索标准输出、标准错误和标准输入。这样我就可以在后台做一些事情,并且在某些情况下会生成一封包含部分标准输出和标准错误的电子邮件。我找到了一些如何将输出重定向到文件的示例,但它不是我需要的文件,因为我希望输出用于操作和实时信息访问;在获得完整输出之前等待进程结束不是一个选项,因为它将运行 10-20 天。如何在 win32 中创建一个进程,同时能够以字符串流的形式访问来自标准输出的数据,或者像本质上一样,以实现我想要的目标?有人可以指导我举一个例子吗?