| 97 | } |
| 98 | |
| 99 | HANDLE |
| 100 | MSWindowsWatchdog::duplicateProcessToken(HANDLE process, LPSECURITY_ATTRIBUTES security) |
| 101 | { |
| 102 | HANDLE sourceToken; |
| 103 | |
| 104 | BOOL tokenRet = OpenProcessToken(process, TOKEN_ASSIGN_PRIMARY | TOKEN_ALL_ACCESS, &sourceToken); |
| 105 | |
| 106 | if (!tokenRet) { |
| 107 | LOG_ERR("could not open token, process handle: %d", process); |
| 108 | throw std::runtime_error(windowsErrorToString(GetLastError())); |
| 109 | } |
| 110 | |
| 111 | LOG_DEBUG("got token %i, duplicating", sourceToken); |
| 112 | |
| 113 | HANDLE newToken; |
| 114 | BOOL duplicateRet = DuplicateTokenEx( |
| 115 | sourceToken, TOKEN_ASSIGN_PRIMARY | TOKEN_ALL_ACCESS, security, SecurityImpersonation, TokenPrimary, &newToken |
| 116 | ); |
| 117 | |
| 118 | if (!duplicateRet) { |
| 119 | LOG_ERR("could not duplicate token %i", sourceToken); |
| 120 | throw std::runtime_error(windowsErrorToString(GetLastError())); |
| 121 | } |
| 122 | |
| 123 | LOG_DEBUG("duplicated, new token: %i", newToken); |
| 124 | return newToken; |
| 125 | } |
| 126 | |
| 127 | HANDLE |
| 128 | MSWindowsWatchdog::getUserToken(LPSECURITY_ATTRIBUTES security, bool elevatedToken) |
nothing calls this directly
no test coverage detected