diff --git a/ntoskrnl/se/tokencls.c b/ntoskrnl/se/tokencls.c index 278db460bfd..ee143b5a349 100644 --- a/ntoskrnl/se/tokencls.c +++ b/ntoskrnl/se/tokencls.c @@ -16,6 +16,13 @@ /* INFORMATION CLASSES ********************************************************/ +/* FIXME: Delete this */ +typedef enum _TOKEN_ELEVATION_TYPE { + TokenElevationTypeDefault = 1, + TokenElevationTypeFull, + TokenElevationTypeLimited, +} TOKEN_ELEVATION_TYPE, *PTOKEN_ELEVATION_TYPE; + static const INFORMATION_CLASS_INFO SeTokenInformationClass[] = { /* Class 0 not used, blame MS! */ @@ -1072,6 +1079,64 @@ NtQueryInformationToken( break; } + case TokenElevationType: + { + DPRINT("NtQueryInformationToken(TokenElevationType)\n"); + + RequiredLength = sizeof(TOKEN_ELEVATION_TYPE); + + _SEH2_TRY + { + if (TokenInformationLength >= RequiredLength) + { + /* FIXME: HACK */ + *((PTOKEN_ELEVATION_TYPE)TokenInformation) = TokenElevationTypeFull; + } + else + { + Status = STATUS_BUFFER_TOO_SMALL; + } + + *ReturnLength = RequiredLength; + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + + break; + } + + case TokenElevation: + { + DPRINT("NtQueryInformationToken(TokenElevation)\n"); + + RequiredLength = sizeof(TOKEN_ELEVATION); + + _SEH2_TRY + { + if (TokenInformationLength >= RequiredLength) + { + /* FIXME: HACK */ + ((PTOKEN_ELEVATION)TokenInformation)->TokenIsElevated = TRUE; + } + else + { + Status = STATUS_BUFFER_TOO_SMALL; + } + + *ReturnLength = RequiredLength; + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + + break; + } + default: DPRINT1("NtQueryInformationToken(%d) invalid information class\n", TokenInformationClass); Status = STATUS_INVALID_INFO_CLASS;