| 发表于:2008-01-09 20:49:22 楼主 |
{ handle hthisprocess = getcurrentprocess(); // 获取当前进程句柄// 打开当前进程令牌 handle htokenthis = null; openprocesstoken(hthisprocess, token_all_access, &htokenthis); // 复制一个进程令牌,目的是为了修改session id属性,以便在其它session中创建进程 handle htokendup = null; duplicatetokenex(htokenthis, maximum_allowed,null, securityidentification, tokenprimary, &htokendup); dword dwsessionid = wtsgetactiveconsolesessionid(); // 获取活动session idsettokeninformation(htokendup, tokensessionid, &dwsessionid, sizeof(dword)); // 把session id设置到备份的令牌中 // 好了,现在要用新的令牌来创建一个服务进程。注意:是“服务”进程!如果需要以用户身份运行,必须在前面执行logonuser来获取用户令牌 startupinfo si; process_information pi; zeromemory(&si, sizeof(startupinfo)); zeromemory(&pi, sizeof(process_information)); si.cb = sizeof(startupinfo); si.lpdesktop = "winsta0\\default"; lpvoid penv = null; dword dwcreationflag = normal_priority_class ¦ create_new_console; createenvironmentblock(&penv, htokendup, false); // 创建环境块 // 创建新的服务进程,这个进程应该接收参数来调用shchangenotify,它将工作在新的session 1中 createprocessasuser(htokendup, null, _t("c:\\myservice.exe -notify"), null, null, false, dwcreationflag, penv, null, &si, &pi); } 编译并运行后,发现createprocessasuser的返回false,错误代码是78(好像)意思是参数不对 但是只要把他的penv参数设置成null 就ok,但是没有达到服务加载效果,资源窗口还是不能显示。 请高手指点。 |
|
|
|
|