PsReferenceEffectiveToken
VOID *__fastcall PsReferenceEffectiveToken(
_ETHREAD *Thread,
_TOKEN_TYPE *TokenType,
UINT8 *EffectiveOnly,
_SECURITY_IMPERSONATION_LEVEL *ImpersonationLevel,
_PS_PROTECTION *ProcessProtection){
_ETHREAD *CurrentThread;
__int64 v10;
void *v11;
VOID *v12;
INT64 *Lock;
_ETHREAD *v15;
__int64 v16;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( Thread == CurrentThread )
v10 = *((_QWORD *)CurrentThread + 23);
else
v10 = *((_QWORD *)Thread + 68);
v11 = 0i64;
if( (*((_DWORD *)Thread + 324) & 8) == 0 )
goto LABEL_4;
v16 = *((_QWORD *)Thread + 68);
v15 = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)v15 + 242);
Lock = (INT64 *)((char *)Thread + 1280);
ExAcquirePushLockSharedEx((UINT64)Thread + 1280, 0i64);
if( (*((_DWORD *)Thread + 324) & 8) != 0 )
{
v11 = (void *)(*((_QWORD *)Thread + 149) & 0xFFFFFFFFFFFFFFF8ui64);
ObfReferenceObject(v11);
*ImpersonationLevel = *((_DWORD *)Thread + 298) & 3;
*EffectiveOnly = (*((_BYTE *)Thread + 1192) & 4) != 0;
if( ProcessProtection )
ProcessProtection->Level = *(unsigned __int8 *)(v16 + 2170);
}
if( _InterlockedCompareExchange64(Lock, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(Lock);
KeAbPostRelease(Lock);
KeLeaveCriticalRegionThread((__int64)v15);
if( v11 )
{
*TokenType = TokenImpersonation;
return v11;
}
else
{
LABEL_4:
v12 = ObFastReferenceObject((INT64 *)(v10 + 1208));
if( !v12 )
{
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx(v10 + 1080, 0i64);
v12 = (VOID *)ObFastReferenceObjectLocked((_EX_FAST_REF *)(v10 + 1208));
if( _InterlockedCompareExchange64((volatile signed __int64 *)(v10 + 1080), 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)(v10 + 1080));
KeAbPostRelease((PVOID)(v10 + 1080));
KeLeaveCriticalRegionThread((__int64)CurrentThread);
}
*TokenType = TokenPrimary;
*EffectiveOnly = 0;
if( ProcessProtection )
ProcessProtection->Level = *(unsigned __int8 *)(v10 + 2170);
return v12;
}
}Referenced by:
EtwpGetSidExtendedHeaderItem
ExpWnfQueryCurrentUserSID
MiIsUserQueryVmCallerTrusted
PspAllocateAndQueryNotificationChannel
RtlpAllowsLowBoxAccess
RtlpQueryLowBoxId
SeCaptureAtomTableCallout
SeLogAccessFailure
SeSubProcessToken
SepReferenceTokenUsingPseudoHandle
SepVerifyDesktopAppPolicyOverrideCaller