MiUnlinkProcessFromSession

__int64 __fastcall MiUnlinkProcessFromSession(__int64 a1){
  __int64 v2; 
  __int64 v3; 
  __int64 v4; 
  _QWORD *v5; 
  __int64 v6; 
  _QWORD *v7; 
  __int64 result; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock(&WorkerRoutine, &LockHandle);
  v2 = *(_QWORD *)(a1 + 1368);
  if( v2 )
  {
    v3 = a1 + 1184;
    if( *(_QWORD *)(a1 + 1184) )
    {
      if( (*(_BYTE *)(a1 + 1849) & 1) != 0 && !*(_QWORD *)(v2 + 680) )
        *(_QWORD *)(v2 + 680) = 1i64;
      v4 = *(_QWORD *)v3;
      v5 = *(_QWORD **)(a1 + 1192);
      if( *(_QWORD *)(*(_QWORD *)v3 + 8i64) != v3 || *v5 != v3 )
LABEL_12:
        __fastfail(3u);
      *v5 = v4;
      *(_QWORD *)(v4 + 8) = v5;
    }
  }
  v6 = *(_QWORD *)(a1 + 1984);
  v7 = *(_QWORD **)(a1 + 1992);
  if( *(_QWORD *)(v6 + 8) != a1 + 1984 || *v7 != a1 + 1984 )
    goto LABEL_12;
  *v7 = v6;
  *(_QWORD *)(v6 + 8) = v7;
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  result = (unsigned int)KiIrqlFlags;
  __writecr8(LockHandle.OldIrql);
  return result;
}

Referenced by:

MiDeleteFinalPageTables