服务中创建当前登录用户名下的进程

若在服务中调用CreateProcess创建进程,则进程所属用户为System,而不是当前登录用户,这会导致一些问题,例如若程序含有UI界面,则无法显示出用户界面,所以若有此种问题,应创建当前登录用户下的进程,而Api CreateProcessAsUser提供了这种功能,以下为示例代码
void LaunchProcess()
{
	HANDLE hToken;
	//创建进程快照
	PROCESSENTRY32 pe32 = { 0 };
	pe32.dwSize = sizeof(pe32); 
	HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	if (hSnapShot!=0 && hSnapShot!=INVALID_HANDLE_VALUE)
	{
		BOOL bRet = Process32FirstW(hSnapShot,&pe32);
		while(bRet)
		{
			if (_tcsicmp(pe32.szExeFile,L"Explorer.EXE") == 0)
			{
				HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,pe32.th32ProcessID);

				if (hProcess!=NULL)
				{
					BOOL flag = OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken);
					CloseHandle(hProcess);
				}
				break;
			}
			bRet = Process32Next(hSnapShot,&pe32);
		}
		CloseHandle(hSnapShot);
	}

	STARTUPINFO si ={sizeof(si)};
	PROCESS_INFORMATION pi; 
	BOOL bSuccess = CreateProcessAsUser(hToken,L"C:\\AgentGUI.exe",NULL,NULL,NULL,FALSE,NULL,
		NULL,NULL,&si,&pi);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值