MiMarkSessionDeletePending

INT64 __fastcall MiMarkSessionDeletePending(INT64 a1){
  UINT64 v2; 
  UINT8 v3; 
  UINT8 v4; 
  INT64 result; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock(&WorkerRoutine, &LockHandle);
  *(_DWORD *)(a1 + 4) |= 2u;
  if( *(_DWORD *)(a1 + 100) )
  {
    *(_DWORD *)(a1 + 108) = 0;
    *(_QWORD *)(a1 + 120) = a1 + 112;
    *(_QWORD *)(a1 + 112) = a1 + 112;
    *(_WORD *)(a1 + 104) = 263;
    *(_BYTE *)(a1 + 106) = 6;
    if( !dword_140C4DB48 )
      KeResetEvent(&stru_140C4DB30, v2, v3, v4, (IRP *)LockHandle.LockQueue.Next);
    ++dword_140C4DB48;
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    result = KeWaitForGate((PVOID)(a1 + 104), 18);
    if( !--dword_140C4DB48 )
      LODWORD(result) = KeSetEvent(&stru_140C4DB30, 0);
  }
  else
  {
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    result = (unsigned int)KiIrqlFlags;
    __writecr8(LockHandle.OldIrql);
  }
  return result;
}

Referenced by:

MiDereferenceSessionFinal