想用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 );
解决方案 »
- 关于DirectX9.0里旋转物体,拜谢各路高手
- 继承IUnknown的接口,为什么在VB对象浏览中还是能看到?
- 请教:如何将数据保存到(.txt)文本中,以便查看这些数据并进行分析。
- _bstr_t类型的变量怎样去除首部和尾部的空格?(不用MFC)
- VC反编译
- 编写的关于TCP/IP,WINSTOCK的源代码要不要用汇编?
- VC++ 动态设置水晶报表文本对象的值
- 请问MFC里面想给一个按钮做背景透明的图标怎么弄
- 谁能提供图形淡入淡出效果的例子
- VS2010 单文档 点击打开文件菜单后要使之前的菜单全部改变成另外一套菜单栏
- CSocket与线程 谁帮解决了.100分相送
- 一个关于MFC的简单问题
你提供的方法我已经实现了。那个方法是复制目标Session上的一个进程的Token,而我想得到的结果是,复制服务自身的Token来新建一个进程。