mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[NTOSKRNL]
Implement TokenOrigin case in NtSetInformationToken svn path=/trunk/; revision=62246
This commit is contained in:
parent
5ebaa3c3dd
commit
6a9cca1ef8
1 changed files with 41 additions and 5 deletions
|
@ -2042,13 +2042,44 @@ NtSetInformationToken(IN HANDLE TokenHandle,
|
|||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
case TokenOrigin:
|
||||
{
|
||||
DPRINT1("Unhandled TokenInformationClass: 0x%lx\n",
|
||||
TokenInformationClass);
|
||||
Status = STATUS_NOT_IMPLEMENTED;
|
||||
TOKEN_ORIGIN TokenOrigin;
|
||||
|
||||
_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;
|
||||
}
|
||||
|
||||
|
@ -2064,6 +2095,11 @@ Cleanup:
|
|||
ObDereferenceObject(Token);
|
||||
}
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("NtSetInformationToken failed with Status 0x%lx\n", Status);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue