| 23 | } |
| 24 | |
| 25 | BOOL GetProcessOwner(DWORD dwProcessId, TCHAR *szOwner, size_t cchMax) |
| 26 | { |
| 27 | BOOL success = FALSE; |
| 28 | |
| 29 | HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessId); |
| 30 | |
| 31 | if(hProcess != NULL) |
| 32 | { |
| 33 | HANDLE hToken; |
| 34 | BOOL bRet = OpenProcessToken(hProcess, TOKEN_QUERY, &hToken); |
| 35 | |
| 36 | if(bRet) |
| 37 | { |
| 38 | DWORD dwSize = 0; |
| 39 | bRet = GetTokenInformation(hToken, TokenUser, NULL, 0, &dwSize); |
| 40 | |
| 41 | if(!bRet && GetLastError() == ERROR_INSUFFICIENT_BUFFER) |
| 42 | { |
| 43 | auto *pTokenUser = reinterpret_cast<TOKEN_USER *>(GlobalAlloc(GMEM_FIXED, dwSize)); |
| 44 | |
| 45 | if(pTokenUser != NULL) |
| 46 | { |
| 47 | bRet = GetTokenInformation(hToken, TokenUser, reinterpret_cast<LPVOID>(pTokenUser), dwSize, &dwSize); |
| 48 | |
| 49 | if(bRet) |
| 50 | { |
| 51 | success = FormatUserName(pTokenUser->User.Sid, szOwner, cchMax); |
| 52 | } |
| 53 | |
| 54 | GlobalFree(pTokenUser); |
| 55 | } |
| 56 | } |
| 57 | |
| 58 | CloseHandle(hToken); |
| 59 | } |
| 60 | |
| 61 | CloseHandle(hProcess); |
| 62 | } |
| 63 | |
| 64 | return success; |
| 65 | } |
| 66 | |
| 67 | BOOL SetProcessTokenPrivilege(DWORD dwProcessId, const TCHAR *PrivilegeName, BOOL bEnablePrivilege) |
| 68 | { |
no test coverage detected