То, что я пытаюсь достичь, - это фактический дескриптор токена из идентификатора сеанса, когда процесс запускается как администратор под пользователем без администратора (Windows вошел в систему пользователем).Получение правильного токена с идентификатора сеанса
DWORD dwSessionId = 0;
if (false == ProcessIdToSessionId(dwProcessId, &dwSessionId))
{
LOG_ERROR(L"Failed obtaining session id");
return false;
}
HANDLE hToken
if (false == WTSQueryUserToken(dwSessionId, &hToken))
{
LOG_ERROR(L"Failed to obtain session's handle");
return false;
}
Моя проблема возникает, когда я называю WTSQueryUserToken, он терпит неудачу с ошибкой 1314, что означает, что мне нужно предоставить маркер вызова с SE_TCB_NAME привилегий.
так я пытался сделать это с помощью следующего кода:
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
bool bSuccess = DynamicAPI::AdjustTokenPrivileges(
%%WHICH_TOKEN_EXACTLLY%%,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES)nullptr,
(DWORD)nullptr);
Но я не совсем уверен, какой маркер должен быть обеспечен точно. Я отметил его %% WHICH_TOKEN_EXACTLLY %% placeholder. Для моих тестов я попытался настроить токен процесса для моего процесса (привилегии администратора), но это тоже не помогло.