阅读背景:

在服务中用管理员权限创建一个可弹出UI的进程

来源:互联网 
do
	{
// 		if (!OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hThisToken ))
// 		{
// 			PrintfDbgStr(TEXT("OpenProcessToken error !error code:%d\n"),GetLastError());
// 			bSuccess = FALSE;
// 			break;
// 		}
// 		if(!SetPrivilege(hThisToken,SE_TCB_NAME,TRUE))
// 		{
// 			PrintfDbgStr(TEXT("SetPrivilege error !error code:%d\n"),GetLastError());
// 			bSuccess = FALSE;
// 			break;
// 		}
		DWORD dwSessionId = WTSGetActiveConsoleSessionId();
		if(!WTSQueryUserToken(dwSessionId,&hToken))
		{
			PrintfDbgStr(TEXT("WTSQueryUserToken error !error code:%d\n"),GetLastError());
			bSuccess = FALSE;
			break;
		}

		STARTUPINFO si;
		PROCESS_INFORMATION pi;
		ZeroMemory(&si,sizeof(STARTUPINFO));
		ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
		si.cb = sizeof(STARTUPINFO);
		si.lpDesktop = _T("WinSta0\Default");
		si.wShowWindow = TRUE;
		si.dwFlags     = STARTF_USESHOWWINDOW;

		LPVOID pEnv = NULL;
		DWORD dwCreationFlag = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE;
		if(!CreateProcessAsUser(hToken,NULL,pBuf,NULL,NULL,FALSE,dwCreationFlag,pEnv,NULL,&si,&pi))
		{
			PrintfDbgStr(TEXT("CreateProcessAsUser error !error code:%d\n"),GetLastError());
			bSuccess = FALSE;
			break;
		}
		
	}while(0);do
	{
// 		if (!OpenProcessToken( GetCurrentPro



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: