MCPcopy Create free account
hub / github.com/deskflow/deskflow / duplicateProcessToken

Method duplicateProcessToken

src/lib/platform/MSWindowsWatchdog.cpp:99–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

97}
98
99HANDLE
100MSWindowsWatchdog::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
127HANDLE
128MSWindowsWatchdog::getUserToken(LPSECURITY_ATTRIBUTES security, bool elevatedToken)

Callers

nothing calls this directly

Calls 1

windowsErrorToStringFunction · 0.85

Tested by

no test coverage detected