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.