SepTokenDeleteMethod
VOID __stdcall SepTokenDeleteMethod(VOID *Token){
_AUTHZBASEP_CLAIM_ATTRIBUTES_COLLECTION *v2;
void *v3;
INT64 v4;
INT64 v5;
_QWORD *v6;
signed __int64 v7;
signed __int64 v8;
bool v9;
signed __int64 v10;
_ADAPTER_OBJECT *v11;
_ADAPTER_OBJECT *v12;
_SEP_LUID_TO_INDEX_MAP_ENTRY *v13;
void *v14;
void *v15;
UINT64 v16;
void *v17;
_LUID v18;
VOID *v19;
void *v20;
_LUID LogonId;
if( SeTokenLeakTracking )
{
SepRemoveTokenLogonSession((_TOKEN *)Token);
v20 = (void *)*((_QWORD *)Token + 143);
if( v20 )
ExFreePoolWithTag(v20, 0);
}
v2 = (_AUTHZBASEP_CLAIM_ATTRIBUTES_COLLECTION *)*((_QWORD *)Token + 137);
if( v2 )
{
if( (*((_DWORD *)Token + 50) & 0x8000) != 0 )
SepDeleteClaimAttributes(v2);
*((_QWORD *)Token + 137) = 0i64;
}
if( SepTokenSidSharingEnabled )
SepDeleteTokenUserAndGroups((_TOKEN *)Token);
if( (*((_DWORD *)Token + 50) & 0x20) == 0 )
{
v3 = (void *)*((_QWORD *)Token + 135);
if( v3 )
SepDereferenceLowBoxNumberEntry(*((unsigned int *)Token + 30), v3);
v4 = *((_QWORD *)Token + 136);
if( v4 )
SepDereferenceCachedHandlesEntry(*((_QWORD *)Token + 27), v4);
v5 = *((_QWORD *)Token + 144);
if( v5 )
SepDereferenceCachedHandlesEntry(*((_QWORD *)Token + 27), v5);
v6 = (_QWORD *)*((_QWORD *)Token + 27);
_m_prefetchw(v6 + 3);
v7 = v6[3];
v8 = v7 - 1;
v9 = v7 == 1;
if( v7 - 1 <= 0 )
{
LABEL_32:
if( !v9 )
__fastfail(0xEu);
v18 = (_LUID)v6[1];
v19 = (VOID *)v6[20];
LogonId = v18;
SepDeReferenceLogonSession(&LogonId, v19);
}
else
{
while( 1 )
{
v10 = v7;
v7 = _InterlockedCompareExchange64(v6 + 3, v8, v7);
if( v10 == v7 )
break;
v8 = v7 - 1;
v9 = v7 == 1;
if( v7 - 1 <= 0 )
goto LABEL_32;
}
}
}
v11 = (_ADAPTER_OBJECT *)*((_QWORD *)Token + 145);
if( v11 )
HalPutDmaAdapter(v11);
v12 = (_ADAPTER_OBJECT *)*((_QWORD *)Token + 139);
if( v12 )
HalPutDmaAdapter(v12);
if( *((_BYTE *)Token + 118) == 2 )
SepModifyTokenPolicyCounter((_SEP_AUDIT_POLICY *)((char *)Token + 88), 0);
v13 = (_SEP_LUID_TO_INDEX_MAP_ENTRY *)*((_QWORD *)Token + 142);
if( v13 )
SepDereferenceLuidToIndexEntry(v13);
AuthzBasepFreeSecurityAttributesList(*((_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION **)Token + 97));
ExFreePoolWithTag(*((PVOID *)Token + 97), 0);
v14 = (void *)*((_QWORD *)Token + 22);
if( v14 )
ExFreePoolWithTag(v14, 0);
if( *((_QWORD *)Token + 99) )
SepFreeTokenCapabilities(Token);
v15 = (void *)*((_QWORD *)Token + 98);
if( v15 )
ExFreePoolWithTag(v15, 0);
v16 = *((_QWORD *)Token + 6);
if( v16 )
{
ExDeleteResourceLite(v16);
ExFreePoolWithTag(*((PVOID *)Token + 6), 0);
}
v17 = (void *)*((_QWORD *)Token + 138);
if( v17 )
ExFreePoolWithTag(v17, 0);
}Referenced by:
No references.