【发布时间】:2020-04-08 17:52:29
【问题描述】:
为了我的应用程序的需要,我使用 CreateProcessWithTokenW https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createprocesswithtokenw 创建了一个进程 这有助于我在桌面用户下运行进程,因为我的应用程序在管理员用户下运行
在我使用 C# 进程处理我的进程并获取输出等之前...
使用 CreateProcessWithTokenW 创建进程后如何获取进程?他们是我返回的 StartUPINFO 中的一些 IntPtr,但我不知道如何使用它来获取进程。
我的结构是
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private struct STARTUPINFO
{
public Int32 cb;
public string lpReserved;
public string lpDesktop;
public string lpTitle;
public Int32 dwX;
public Int32 dwY;
public Int32 dwXSize;
public Int32 dwYSize;
public Int32 dwXCountChars;
public Int32 dwYCountChars;
public Int32 dwFillAttribute;
public Int32 dwFlags;
public Int16 wShowWindow;
public Int16 cbReserved2;
public IntPtr lpReserved2;
public IntPtr hStdInput;
public IntPtr hStdOutput;
public IntPtr hStdError;
}
我有点明白我有一些 Ptr 来输出输入等...但我不知道如何让我的流程恢复任何想法?
【问题讨论】:
-
句柄在
PPROCESS_INFORMATION内部处理 - 这是 out 参数。STARTUPINFO是 in 唯一参数 - 看这里没有意义。根据您的任务,您需要调用CreateProcessAsUserW而不是CreateProcessWithTokenW -
我有点关注微软文档blogs.msdn.microsoft.com/aaron_margosis/2009/06/06/…,但它可能有点过时了。是的,我刚刚用PROCESS_INFORMATION 成功了,所以我会回答自己并将其标记为已解决,感谢您的快速回答