| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | 
							- #include "stdafx.h"
 
- #include "UAC_Helper.h"
 
- #include "Misc.h"
 
- CUAC_Helper::CUAC_Helper(void)
 
- {
 
- }
 
- CUAC_Helper::~CUAC_Helper(void)
 
- {
 
- }
 
- bool CUAC_Helper::PasteAsAdmin(HWND hWnd)
 
- {
 
- 	bool runningElevated = AmIRunningElevated();
 
- 	bool theirRunningElevated = AreTheyRunningElevated(hWnd);
 
- 	bool pasteAsAdmin = false;
 
- 	if (runningElevated == false &&
 
- 		theirRunningElevated)
 
- 	{
 
- 		pasteAsAdmin = true;
 
- 	}
 
- 	Log(StrF(_T("I'm running elevated: %d, They are running elevated: %d, PASTE AS ADMIN: %d"), runningElevated, theirRunningElevated, pasteAsAdmin));
 
- 	return pasteAsAdmin;
 
- }
 
- bool CUAC_Helper::AmIRunningElevated()
 
- {
 
- 	bool ret = RunningElevated(GetCurrentProcess(), true);
 
- 	return ret;
 
- }
 
- bool CUAC_Helper::AreTheyRunningElevated(HWND hWnd)
 
- {
 
- 	DWORD pid;
 
- 	GetWindowThreadProcessId(hWnd, &pid);
 
- 	HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pid);
 
- 	bool ret = RunningElevated(hProcess, true);
 
- 	return ret;
 
- }
 
- bool CUAC_Helper::RunningElevated(HANDLE hProcess, bool defaultValue)
 
- {
 
- 	bool fIsElevated = defaultValue;
 
- 	DWORD dwError = ERROR_SUCCESS;
 
- 	HANDLE hToken = NULL;
 
- 	TOKEN_ELEVATION elevation;
 
- 	if (hProcess == NULL)
 
- 	{
 
- 		dwError = GetLastError();
 
- 		Log(StrF(_T("RunningElevated, initial Handle is NULL, Last Error: %d"), dwError));
 
- 	}
 
- 	else
 
- 	{
 
- 		if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken))
 
- 		{
 
- 			dwError = GetLastError();
 
- 			Log(StrF(_T("RunningElevated, OpenProcessToken failed, Last Error: %d"), dwError));
 
- 		}
 
- 		else
 
- 		{			
 
- 			DWORD dwSize;
 
- 			if (!GetTokenInformation(hToken, TokenElevation, &elevation, sizeof(elevation), &dwSize))
 
- 			{
 
- 				// When the process is run on operating systems prior to Windows 
 
- 				// Vista, GetTokenInformation returns FALSE with the 
 
- 				// ERROR_INVALID_PARAMETER error code because TokenElevation is 
 
- 				// not supported on those operating systems.
 
- 				dwError = GetLastError();
 
- 				Log(StrF(_T("RunningElevated, GetTokenInformation failed, Last Error: %d"), dwError));
 
- 			}
 
- 			else
 
- 			{
 
- 				fIsElevated = elevation.TokenIsElevated == 1;
 
- 			}
 
- 		}
 
- 	}
 
- 	if (hProcess != NULL)
 
- 		CloseHandle(hProcess);
 
- 	if (hToken != NULL)
 
- 		CloseHandle(hToken);
 
- 	return fIsElevated;
 
- }
 
 
  |