Я пытаюсь создать повышенный токен с SetTokenInformation
, но не удается и продолжает возвращать код ошибки 87.
Это мой код:
#include <Windows.h>
int main()
{
HANDLE currentProcessToken, newTok;
OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE, ¤tProcessToken);
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;
}
TokenElevation
действительный класс информации только для GetTokenInformation
функция. Вы можете запросить TokenIsElevated
но вы не можете установить его. NtSetInformationToken
вернуть STATUS_INVALID_INFO_CLASS
в этом случае. SetTokenInformation
преобразовать эту ошибку в ERROR_INVALID_PARAMETER
, оригинал NTSTATUS
код ошибки вы можете получить, позвонив RtlGetLastNtStatus()
, и все равно нельзя «поднять» уже существующий токен. это по замыслу
Других решений пока нет …