Создание повышенного токена с 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;
}

-2

Решение

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]