SepDereferenceCachedHandlesEntry

NTSTATUS __stdcall SepDereferenceCachedHandlesEntry(INT64 a1, INT64 a2){
  _ETHREAD *CurrentThread; 
  INT64 v3; 
  NTSTATUS v4; 
  __int64 v6; 
  char v7; 
  UINT8 v9; 
  char v10; 
  void *v11; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = a1 + 88;
  v4 = 0;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(a1 + 88), 0i64);
  v6 = _InterlockedDecrement64((volatile signed __int64 *)(a2 + 24));
  if( v6 <= 0 )
  {
    if( v6 )
      __fastfail(0xEu);
    v9 = RtlRemoveEntryHashTable(*(_RTL_DYNAMIC_HASH_TABLE **)(v3 + 8), (_RTL_DYNAMIC_HASH_TABLE_ENTRY *)a2, 0i64);
    v10 = _InterlockedExchangeAdd64((volatile signed __int64 *)v3, 0xFFFFFFFFFFFFFFFFui64);
    if( (v10 & 2) != 0 && (v10 & 4) == 0 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)v3);
    KeAbPostRelease((VOID *)v3);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
    if( !v9 )
      return -1073741823;
    SepCloseCachedTokenHandles(*(_DWORD *)(a2 + 56), *(VOID ***)(a2 + 64));
    v11 = *(void **)(a2 + 64);
    if( v11 )
      ExFreePoolWithTag(v11, 0);
    ExFreePoolWithTag((PVOID)a2, 0);
    return v4;
  }
  else
  {
    v7 = _InterlockedExchangeAdd64((volatile signed __int64 *)v3, 0xFFFFFFFFFFFFFFFFui64);
    if( (v7 & 2) != 0 && (v7 & 4) == 0 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)v3);
    KeAbPostRelease((VOID *)v3);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
    return 0;
  }
}

Referenced by:

NtSetInformationToken
SepSetTokenBnoIsolation
SepTokenDeleteMethod