session0 to session1

#include <Psapi.h>
#include <tlhelp32.h>
#include <WtsApi32.h>
BOOL   GetTokenByName(HANDLE   &hToken,LPSTR   lpName)   
{   
	if(!lpName)   
	{   
		return   FALSE;   
	}   
	HANDLE  hProcessSnap   =   NULL;     
	BOOL  bRet  =   FALSE;     
	PROCESSENTRY32   pe32  =   {0};     
	hProcessSnap   =   CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);     
	if   (hProcessSnap   ==   INVALID_HANDLE_VALUE)     
		return   (FALSE);     

	pe32.dwSize   =   sizeof(PROCESSENTRY32);     

	if (Process32First(hProcessSnap,   &pe32))     
	{       
		do     
		{   CString exefile=pe32.szExeFile;
		CString paraname=lpName;
		if(!exefile.CompareNoCase(lpName))   
		{   
			HANDLE   hProcess   =   
				OpenProcess(PROCESS_QUERY_INFORMATION,   
				FALSE,pe32.th32ProcessID);   
			bRet   =   OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken);   
			CloseHandle   (hProcessSnap);     
			return   (bRet);   
		}   
		}     
		while(Process32Next(hProcessSnap,&pe32));     
		bRet   =   TRUE;     
	}     
	else     
		bRet   =   FALSE;   

	CloseHandle   (hProcessSnap);     
	return   (bRet);   
}   

BOOL   RunProcess(LPCSTR   lpImage)   
{   
	if(!lpImage)   
	{   
		return   FALSE;   
	}   
	HANDLE   hToken;   
	if(!GetTokenByName(hToken,"EXPLORER.EXE"))   
	{   
		return   FALSE;   
	}   
	STARTUPINFO   si;   
	PROCESS_INFORMATION   pi;   

	ZeroMemory(&si,   sizeof(STARTUPINFO));   
	si.cb=   sizeof(STARTUPINFO);   
	si.lpDesktop   =   TEXT("winsta0\\default");   

	BOOL   bResult   =   
		CreateProcessAsUser(hToken,lpImage,NULL,NULL,NULL,   
		FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);   
	CloseHandle(hToken);   
	if(bResult)   
	{   
		// WriteLogAlways(_T("C:\\serverlog.txt"),_T("CreateProcessAsUser   ok"));
	}   
	else   
	{   
		//WriteLogAlways(_T("C:\\servererrlog.txt"),_T("CreateProcessAsUser   

failed"));
	}   
	return   bResult;   
}


你可能感兴趣的:(win7,service,session0)