PspDisablePrimaryTokenExchange
VOID __stdcall PspDisablePrimaryTokenExchange(_ETHREAD *CurrentThread){
_EPROCESS *Process;
_ADAPTER_OBJECT *v2;
_BOOL8 v3;
_BOOL4 v4;
signed __int32 v5[10];
Process = CurrentThread->Tcb.ApcState.Process;
if( (Process->Flags2 & 0x8000) == 0 )
{
_interlockedbittestandset((volatile signed __int32 *)&Process->1120, 0xFu);
PspLockUnlockProcessExclusive(Process, CurrentThread);
}
if( (Process->Flags3 & 0x400000) == 0 )
{
v2 = (_ADAPTER_OBJECT *)PsReferencePrimaryToken(Process);
v3 = SeTokenIsAdmin(v2) != 0;
HalPutDmaAdapter(v2);
if( (*(_BYTE *)&Process->Pcb.SecureState & 1) != 0 )
LODWORD(v3) = 1;
v4 = 0;
if( (Process->Flags3 & 0x800000) == 0 )
v4 = v3;
if( v4 )
{
Process->SecurityDomain = 0i64;
Process->ParentSecurityDomain = 0i64;
}
if( !KeKvaShadowingActive() || (Process->Flags3 & 0x4000) != 0 )
{
_interlockedbittestandset((volatile signed __int32 *)&Process->2172, 0xEu);
}
else
{
if( v4 )
{
Process->Pcb.AddressPolicy = 1;
_InterlockedOr(v5, 0);
}
KeSynchronizeAddressPolicy((INT64)Process);
if( !_interlockedbittestandset((volatile signed __int32 *)&Process->2172, 0xEu)
&& Process->Pcb.AddressPolicy == 1
&& Process != PsInitialSystemProcess )
{
MiDeleteProcessShadow();
}
}
if( !_interlockedbittestandset((volatile signed __int32 *)&Process->2172, 0x16u) )
PspOneDirectionSecurityDomainCombine(Process);
}
_InterlockedOr(v5, 0);
}Referenced by:
PspSystemThreadStartup
PspUserThreadStartup