想用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 );
思路是,把服务自己的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 );
SetTokenInformation(hTokenDup, TokenSessionId, &dwSessionId, sizeof(DWORD));
加上这个看看
If the environment block is passed to CreateProcessAsUser, you must also specify the CREATE_UNICODE_ENVIRONMENT flag.