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.