windows - 示例代码 : A service calls CreateProcessAsUser() I want the process to run in the user's session, 不是 session 0

标签 windows winapi windows-7 windows-services createprocessasuser

我正在寻找示例代码:

对于调用 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/

相关文章:

c++ - 如何从 C++ 中的资源文件加载游标组?

ruby-on-rails - 如何在 Windows 控制台中设置 RAILS_ENV?

c# - 给定 x,y 点,如何获取前景窗口中不存在的控件的窗口句柄?

python - 如何在检测到文件更改时发送消息? Twisted 和 Web 套接字

.net - 是否有 API 调用来开始扫描硬件设备

windows-7 - ElasticSearch 0.17.9-Windows Server 2008 R2 x64上的400错误请求

android - 在 Windows 7 上使用 Jelly Bean 4.1 模拟器在 ADB 中运行 systrace 工具时出错

java - 无法找到或加载主类 org.junit.runner.JUnitCore

windows - 从 Windows 访问 Docker 容器文件

PHPMailer 在发送电子邮件时使用 Gmail SMTP 速度很慢