首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

Vista下使用CreateProcessAsUser新建进程的有关问题

2012-01-19 
Vista下使用CreateProcessAsUser新建进程的问题想用vitsa上的服务在指定的Session上建立一个进程。思路是,

Vista下使用CreateProcessAsUser新建进程的问题
想用vitsa上的服务在指定的Session上建立一个进程。
思路是,把服务自己的Token复制一份,然后把复制得到的hTokenDup的Session设置为1。
但是发现一个问题,请求各位高手指教:
在Xp下,如果没有设置hTokenDup的Session,新建的进程运行在服务的同一个Session下。但是Vista下却不行,进程新建不了,GetLastError()返回的错误码是5(Access   Denied)。大致的代码如下:请朋友们看看到底是什么问题,先谢谢了!
        HANDLE   hCurrentProcess=GetCurrentProcess();
        HANDLE   hToken;
        HANDLE   hTokenDup;
        OpenProcessToken(hCurrentProcess,TOKEN_ALL_ACCESS,&hToken);
        SECURITY_ATTRIBUTES   sa;
        sa.nLength   =   sizeof(sa);
        sa.bInheritHandle   =   true;
        sa.lpSecurityDescriptor   =   NULL;

        DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,&sa,SecurityIdentification,   TokenPrimary,   &hTokenDup);

        STARTUPINFO   si;
        PROCESS_INFORMATION   pi;

        ZeroMemory(&si,   sizeof(STARTUPINFO));
        ZeroMemory(&pi,   sizeof(PROCESS_INFORMATION));
        si.cb   =   sizeof(STARTUPINFO);
        CreateProcessAsUser(
                hToken,
                tcPath,//module   path&name
                NULL,//tcCommand1,       //   Command   line.  
                NULL,
                NULL,
                FALSE,
                NORMAL_PRIORITY_CLASS,
                NULL,//pEnv,
                NULL,
                &si,
                &pi   );


[解决办法]
http://www.codeproject.com/vista-security/VistaSessions.asp

热点排行