Чего я пытаюсь добиться, так это фактического дескриптора токена из идентификатора сеанса, когда процесс запускается от имени администратора под пользователем, не являющимся администратором (пользователь, вошедший в систему 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%%. Для своих тестов я попытался настроить токен моего процесса AdjustTokenPriviliges (права администратора), но это тоже не помогло.