CreateProcessAsUser()的使用

        HANDLE hToken = NULL;
	TCHAR szUsername[MAX_PATH];
	TCHAR para[MAX_PATH] = {0};
	TCHAR szUsernamePath[MAX_PATH];
	DWORD dwUsernameLen = MAX_PATH;
	DWORD cursessionid;
	cursessionid = WTSGetActiveConsoleSessionId();
	log_error("WTSGetActiveConsoleSessionId() = %d\n",cursessionid);
	if(!WTSQueryUserToken(cursessionid, &hToken))
	{
		log_error("%s WTSQueryUserToken is failed\n", __FUNCTION__);
	}
	if(!ImpersonateLoggedOnUser(hToken))
	{
		log_error("%s ImpersonateLoggedOnUser is failed\n", __FUNCTION__);
	}
	DWORD UsernamePathSize = ARRAYSIZE(szUsernamePath);
	//获取到当前用户路径
	if (!GetUserProfileDirectory(hToken,szUsernamePath,&UsernamePathSize))
	{
		log_error("%s GetUserProfileDirectory is failed\n", __FUNCTION__);
	}
        BOOL bResult = FALSE;
	PROCESS_INFORMATION pi;
	PSID                psid;
	STARTUPINFO         si;
	ZeroMemory(&si, sizeof(STARTUPINFO));
	si.cb        = sizeof(STARTUPINFO);
	si.lpDesktop = L"winsta0\\default";
	// 
	// start the process
	//
	LPVOID environment;
	BOOL blockRet = CreateEnvironmentBlock(&environment, hToken, FALSE);
	if (!blockRet)
	{
		log_error("could not create environment block (error: %i)",
			GetLastError());
	}
	else
	{
		//TCHAR Cmdline[MAX_PATH] = _T("/c \"C:\\Windows\\System32\\RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8\"");
		TCHAR Cmdline[MAX_PATH] = _T("/c \"C:\\Windows\\System32\\cleanmgr\" /sagerun:100");
		DWORD creationFlags = NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT;

		bResult = CreateProcessAsUser(
			hToken,
			_T("C:\\Windows\\System32\\CMD.exe"),
			Cmdline,//_T("InetCpl.cpl,ClearMyTracksByProcess 8"),//L"\"inetcpl.cpl,clearmytracksbyprocess 8\"",
			//L"/c \"C:\\Windows\\System32\\cleanmgr\" /sagerun:100",
			NULL,
			NULL,
			FALSE,
			creationFlags,
			environment,
			NULL,
			&si,
			&pi
			);
		log_error("CreateProcessAsUser0 = %d",GetLastError());

		// 
		// close the handles
		// 
		if (bResult && pi.hProcess != INVALID_HANDLE_VALUE) 
		{ 
			WaitForSingleObject(pi.hProcess, INFINITE); 
			CloseHandle(pi.hProcess); 
		} 
		else
		{
			log_error("CreateProcessAsUser1 = %d",GetLastError());
		}
		if (pi.hThread != INVALID_HANDLE_VALUE)
			CloseHandle(pi.hThread);
		 DestroyEnvironmentBlock(environment);
	}

	RevertToSelf();
	CloseHandle(hToken);  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值