[NTOSKRNL]

Implement TokenOrigin case in NtSetInformationToken

svn path=/trunk/; revision=62246
This commit is contained in:
Timo Kreuzer 2014-02-18 17:57:47 +00:00
parent 5ebaa3c3dd
commit 6a9cca1ef8

View file

@ -2042,13 +2042,44 @@ NtSetInformationToken(IN HANDLE TokenHandle,
break; break;
} }
case TokenOrigin: case TokenOrigin:
{ {
DPRINT1("Unhandled TokenInformationClass: 0x%lx\n", TOKEN_ORIGIN TokenOrigin;
TokenInformationClass);
Status = STATUS_NOT_IMPLEMENTED; _SEH2_TRY
{
/* Copy the token origin */
TokenOrigin = *(PTOKEN_ORIGIN)TokenInformation;
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
Status = _SEH2_GetExceptionCode();
goto Cleanup;
}
_SEH2_END;
/* Check for TCB privilege */
if (!SeSinglePrivilegeCheck(SeTcbPrivilege, PreviousMode))
{
Status = STATUS_PRIVILEGE_NOT_HELD;
break;
}
/* Lock the token */
SepAcquireTokenLockExclusive(Token);
/* Check if there is no token origin set yet */
if ((Token->OriginatingLogonSession.LowPart == 0) &&
(Token->OriginatingLogonSession.HighPart == 0))
{
/* Set the token origin */
Token->OriginatingLogonSession =
TokenOrigin.OriginatingLogonSession;
}
/* Unlock the token */
SepReleaseTokenLock(Token);
break; break;
} }
@ -2064,6 +2095,11 @@ Cleanup:
ObDereferenceObject(Token); ObDereferenceObject(Token);
} }
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetInformationToken failed with Status 0x%lx\n", Status);
}
return Status; return Status;
} }