我正在使用用c ++编写的自定义DLL从C#中的服务(管理权限)启动一个新进程,它基本上修改了安全性和权限以减少它。 这是因为当通过Windows 7的Ring 0运行时,新进程不允许它访问OpenCL中的硬件编码器(Windows驱动程序设计限制)。因此,我冒充Windows资源管理器权限并使用此DLL启动它。
DLL文件的关键是:
typedef BOOL (WINAPI *LPFN_CreateProcessWithTokenW)(
HANDLE hToken,
DWORD dwLogonFlags,
LPCWSTR lpApplicationName,
LPWSTR lpCommandLine,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCWSTR lpCurrentDirectory,
LPSTARTUPINFOW lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInfo
);
LPFN_CreateProcessWithTokenW fnCreateProcessWithTokenW=NULL;
HINSTANCE hmodAdvApi32=LoadLibraryA("AdvApi32");
if(hmodAdvApi32)
fnCreateProcessWithTokenW=(LPFN_CreateProcessWithTokenW)GetProcAddress(hmodAdvApi32, "CreateProcessWithTokenW");
if(fnCreateProcessWithTokenW)
{
bRet=fnCreateProcessWithTokenW(hNewToken, 0,
szProcessName, szCmdLine,
0, NULL, NULL, &StartupInfo, &ProcInfo);
if(!bRet)
hr=HRESULT_FROM_WIN32(GetLastError());
}
现在的问题是如何将此进程的输出重定向到我的C#程序以监视输出?这很关键,因为我需要知道进程如何进展或挂起,以便C#应用程序可以采取适当的措施。 我也可以: