我正在尝试使用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;
}
答案 0 :(得分:2)
TokenElevation
仅对GetTokenInformation
功能有效。您可以查询的是TokenIsElevated
,但无法设置。在这种情况下,NtSetInformationToken
返回STATUS_INVALID_INFO_CLASS
。 SetTokenInformation
将此错误转换为ERROR_INVALID_PARAMETER
。您可以通过调用NTSTATUS
获得原始的RtlGetLastNtStatus()
错误代码。而且无论如何您都不能“提升”现有的令牌。这是设计使然