我正在寻找示例代码:
对于调用 CreateProcessAsUser() 的服务,我希望进程在用户 session 中运行,而不是 session 0
到目前为止,创建的进程仅像 session 0 中的服务一样运行
最佳答案
这是从一些从服务启动控制台应用程序的旧代码中删除的。它在 NT4 下工作,但我没有用现代版本的 Windows 测试过它,所以不能保证它会像在 NT4 上一样工作。
编辑:不,这不会按原样工作。您需要添加找到的代码 here创建桌面,设置SID等。
if (!LogonUser(userId,
domain,
password,
LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT,
&hUserToken))
{
return GetLastError();
}
if (!ImpersonateLoggedOnUser(hUserToken))
{
DWORD rc = GetLastError();
CloseHandle(hUserToken);
return rc;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
memset(&pi, 0, sizeof(pi));
si.cb = sizeof(si);
rc = CreateProcessAsUser(hUserToken, // user token
0, // app name
"foo.exe", // command line
0, // process attributes
0, // thread attributes
FALSE, // don't inherit handles
DETACHED_PROCESS, // flags
0, // environment block
0, // current dir
&si, // startup info
&pi); // process info gets put here
if (!rc)
{
DWORD rc = GetLastError();
RevertToSelf();
CloseHandle(hUserToken);
return rc;
}
RevertToSelf();
CloseHandle(hUserToken);
return 0;
关于windows - 示例代码 : A service calls CreateProcessAsUser() I want the process to run in the user's session, 不是 session 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285666/