读书人

Vista下使用CreateProcessAsUser新建进

发布时间: 2012-01-19 00:22:28 作者: rapoo

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

读书人网 >VC/MFC

热点推荐