From: <Or...@us...> - 2008-06-11 07:03:30
|
Revision: 243 http://acmcontester.svn.sourceforge.net/acmcontester/?rev=243&view=rev Author: Oracle_ Date: 2008-06-11 00:03:37 -0700 (Wed, 11 Jun 2008) Log Message: ----------- Added extended details for TSecure->RunProcess. Modified Paths: -------------- ACMServer/branches/sharp tester/SourceTest/SourceTest.cpp Modified: ACMServer/branches/sharp tester/SourceTest/SourceTest.cpp =================================================================== --- ACMServer/branches/sharp tester/SourceTest/SourceTest.cpp 2008-06-10 22:41:51 UTC (rev 242) +++ ACMServer/branches/sharp tester/SourceTest/SourceTest.cpp 2008-06-11 07:03:37 UTC (rev 243) @@ -15,7 +15,7 @@ namespace SourceTest { -char* StrToArr(String^ str) //converts Managed String to C++ string to +char* StrToArr(String^ str) //converts Managed String to C++ string { return (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str).ToPointer(); } @@ -366,7 +366,7 @@ return TRUE; } -BOOL AddPrivilege(HANDLE hToken,LPCTSTR lpszPrivilege) //adds privilege to process token (in this version unused) +BOOL AddPrivilege(HANDLE hToken,LPCTSTR lpszPrivilege) //adds privilege to process token { TOKEN_PRIVILEGES tp; LUID luid; @@ -844,6 +844,13 @@ wchar_t buflpCommandLine[MAX_PATH+1]; if (!GetFullPathName(lpCommandLine,MAX_PATH,buflpCommandLine,NULL)) wcscpy(buflpCommandLine,lpCommandLine); + HANDLE myToken; + if (OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&myToken)) + { + if (AddPrivilege(myToken,SE_INCREASE_QUOTA_NAME)) + { + if (AddPrivilege(myToken,SE_ASSIGNPRIMARYTOKEN_NAME)) + { if (LogonUser((LPWSTR)USER_NAME,(LPWSTR)".",(LPWSTR)USER_PASSW,LOGON32_LOGON_NETWORK,LOGON32_PROVIDER_DEFAULT,&Token)) { FileInfo^ fi=gcnew FileInfo(gcnew String(lpCommandLine)); @@ -861,13 +868,25 @@ DestroyEnvironmentBlock(env); RevertToSelf(); CloseHandle(token); + CloseHandle(myToken); Details="Secured process. Result details: "; return true; - } - } - } - } - } + } else + Details="Unsecured process. CreateProcessAsUser failed. Error#"+GetLastError().ToString()+" Result details: "; + } else + Details="Unsecured process. CreateEnvironmentBlock failed. Error#"+GetLastError().ToString()+" Result details: "; + } else + Details="Unsecured process. ImpersonateLoggedOnUser failed. Error#"+GetLastError().ToString()+" Result details: "; + } else + Details="Unsecured process. DuplicateTokenEx failed. Error#"+GetLastError().ToString()+" Result details: "; + } else + Details="Unsecured process. LogonUser failed. Error#"+GetLastError().ToString()+" Result details: "; + } else + Details="Unsecured process. SE_ASSIGNPRIMARYTOKEN_NAME unavailable. Result details: "; + } else + Details="Unsecured process. SE_INCREASE_QUOTA_NAME unavailable. Result details: "; + } else + Details="Unsecured process. OpenProcessToken failed. Error#"+GetLastError().ToString()+" Result details: "; if (env!=NULL) DestroyEnvironmentBlock(env); RevertToSelf(); @@ -875,7 +894,8 @@ CloseHandle(token); if (Token!=NULL) CloseHandle(Token); - Details="Unsecured process. Result details: "; + if (myToken!=NULL) + CloseHandle(myToken); if (CreateProcess(NULL,buflpCommandLine,NULL,NULL,bInheritHandles,dwCreationFlags,NULL,NULL,lpStartupInfo,lpProcessInformation)) return true; return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |