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