Advertisement
Guest User

CreateProcessAsUser

a guest
Nov 17th, 2014
1,441
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <winnt.h>
  3. #include <tchar.h>
  4. #include <strsafe.h>
  5. #include <sddl.h>
  6.  
  7. DWORD GetSID(LPTSTR lptszUserName, PSID pSid, DWORD pdwSize)
  8. {
  9.     DWORD dwError;
  10.     LPTSTR lptszDomainName;
  11.     DWORD dwDomainNameLen;
  12.     SID_NAME_USE snu;
  13.     LPTSTR lptszSid;
  14.     BOOL bRet;
  15.  
  16.     dwError = ERROR_SUCCESS;
  17.  
  18.     *pdwSize = 0;
  19.     dwDomainNameLen = 0;
  20.     lptszDomainName = NULL;
  21.     bRet = LookupAccountName(NULL, lptszUserName, NULL, pdwSize, NULL, &dwDomainNameLen, &snu);
  22.     dwError = GetLastError();
  23.     *pSid = new BYTE[*pdwSize];
  24.     lptszDomainName = new TCHAR[dwDomainNameLen + 1];
  25.     SecureZeroMemory(lptszDomainName, sizeof(TCHAR) * (dwDomainNameLen + 1));
  26.     SecureZeroMemory(*pSid, *pdwSize);
  27.     bRet = LookupAccountName(NULL, lptszUserName, *pSid, pdwSize, lptszDomainName, &dwDomainNameLen, &snu);
  28.     dwError = GetLastError();
  29.  
  30.     delete[] lptszDomainName;
  31.     return dwError;
  32. }
  33.  
  34. void _tmain()
  35. {
  36.     DWORD dwError ;
  37.  
  38.     dwError = ERROR_SUCCESS;
  39.     HANDLE hProcessToken;
  40.     HANDLE hNewProcessToken;
  41.     BOOL bRet;
  42.     bRet = OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE | TOKEN_ASSIGN_PRIMARY | TOKEN_QUERY, &hProcessToken);
  43.  
  44.     PSID sidAdministrator;
  45.     DWORD dwSize;
  46.     dwSize = 0;
  47.     dwError = GetSID(L"Administrator", &sidAdministrator, &dwSize);
  48.  
  49.     SID_AND_ATTRIBUTES sidAttr = {sidAdministrator, 0};
  50.  
  51.     LUID luid;
  52.     bRet = LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luid);
  53.     LUID_AND_ATTRIBUTES luidAttr = {luid, 0};
  54.  
  55.     STARTUPINFO si;
  56.     SecureZeroMemory(&si, sizeof(STARTUPINFO));
  57.     si.cb = sizeof(STARTUPINFO);
  58.     PROCESS_INFORMATION pi;
  59.  
  60.     bRet = CreateRestrictedToken(hProcessToken, 0,
  61.         1, &sidAttr,
  62.         1, &luidAttr,
  63.         0, NULL, &hNewProcessToken);
  64.  
  65.     bRet = CreateProcessAsUser(hNewProcessToken, L"C:\\Windows\\explorer.exe", NULL,
  66.         NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
  67.     LocalFree(sidAdministrator);
  68.     CloseHandle(hProcessToken);
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement