Создание повышенного токена с SetTokenInformation возвращает ошибку 87

Я пытаюсь создать повышенный токен с SetTokenInformation, но не удается и продолжает возвращать код ошибки 87.

Это мой код:

#include <Windows.h>

int main()
{
    HANDLE currentProcessToken, newTok;
    OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE, &currentProcessToken);
    DuplicateTokenEx(currentProcessToken, TOKEN_ALL_ACCESS, nullptr, SecurityImpersonation, TokenPrimary, &newTok);
    CloseHandle(currentProcessToken);
    TOKEN_ELEVATION elev = { 1 };
    BOOL setTokenInfo = SetTokenInformation(newTok, TokenElevation, &elev, sizeof(TOKEN_ELEVATION));
    DWORD error = GetLastError(); // is 87 which is "the parameter is incorrect"
    return 0;
}

1 ответ

Решение

TokenElevation действительный класс информации только для GetTokenInformation функция. Вы можете запросить TokenIsElevated но вы не можете установить его. NtSetInformationToken вернуть STATUS_INVALID_INFO_CLASS в этом случае. SetTokenInformation преобразовать эту ошибку в ERROR_INVALID_PARAMETER, оригинал NTSTATUS код ошибки вы можете получить, позвонив RtlGetLastNtStatus(), и все равно нельзя "поднять" уже существующий токен. это по замыслу

Другие вопросы по тегам