加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 示例代码:服务调用CreateProcessAsUser()我希望进程

发布时间:2020-12-14 02:51:59 所属栏目:Windows 来源:网络整理
导读:我正在寻找示例代码: 对于服务调用CreateProcessAsUser()我希望进程在用户的会话中运行,而不是在会话0中运行 到目前为止,创建的进程只在会话0中像服务一样运行 解决方法 这是从一些从服务启动控制台应用程序的旧代码中删除的.它在NT4下运行,但我没有用现代
我正在寻找示例代码:

对于服务调用CreateProcessAsUser()我希望进程在用户的会话中运行,而不是在会话0中运行

到目前为止,创建的进程只在会话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,sizeof(si));
    memset(&pi,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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读