MiCheckControlArea

VOID __stdcall MiCheckControlArea(_CONTROL_AREA *ControlArea, UINT8 OldIrql){
  unsigned __int64 v3; 
  __int64 v4; 
  __int64 *v5; 
  __int16 v6; 
  UINT64 v7; 
  unsigned int v8; 
  _BOOL8 v9; 
  volatile INT64 *v10; 
  struct _KPRCB *CurrentPrcb; 
  int v12; 
  KIRQL v13; 
  bool v14; 
  UINT64 inserted; 
  __int64 *v16; 
  __int64 *v17; 
  INT64 v18; 
  __int128 v19; 
  v3 = OldIrql;
  v4 = *((_QWORD *)ControlArea + 8);
  v5 = 0i64;
  v6 = *((_WORD *)ControlArea + 30);
  v7 = 0i64;
  v8 = 0;
  v19 = 0i64;
  v9 = v4 != 0;
  v18 = -1i64;
  v10 = *(volatile INT64 **)(qword_140C4E388 + 8i64 * (v6 & 0x3FF));
  if( *((_QWORD *)ControlArea + 5) || *((_QWORD *)ControlArea + 3) )
  {
    if( !*((_QWORD *)ControlArea + 10) )
      goto LABEL_3;
    goto LABEL_31;
  }
  if( (v4 & 0xFFFFFFFFFFFFFFF0ui64) == 0 )
  {
    *((_DWORD *)ControlArea + 14) |= 1u;
    v8 = 2;
    goto LABEL_3;
  }
  v12 = *((_DWORD *)ControlArea + 14);
  if( !*((_QWORD *)ControlArea + 4) )
  {
    v8 = 2;
    *((_DWORD *)ControlArea + 14) = v12 | 1;
    MiClearFilePointer(ControlArea);
    goto LABEL_3;
  }
  if( (v12 & 0x40000) != 0 )
  {
    v8 = 1;
  }
  else
  {
    if( (v12 & 0x20020) != 131104 )
    {
      inserted = MiInsertUnusedSegment(ControlArea);
      v12 = *((_DWORD *)ControlArea + 14);
      v7 = inserted;
    }
    if( (v12 & 0x20) != 0 )
    {
      MiImageUnused((INT64)ControlArea, 1i64, (INT64)&v18);
      v12 = *((_DWORD *)ControlArea + 14);
    }
  }
  if( (v12 & 0x20020) == 131104 )
  {
    *((_QWORD *)ControlArea + 5) = 1i64;
    *((_DWORD *)ControlArea + 14) = v12 | 4;
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)ControlArea + 9);
    __writecr8(v3);
    MiPurgeImageSection((__int64)ControlArea);
    v13 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)ControlArea + 18);
    *((_DWORD *)ControlArea + 14) &= ~4u;
    LOBYTE(v3) = v13;
    v14 = (*((_QWORD *)ControlArea + 5))-- == 1i64;
    if( v14 && !*((_QWORD *)ControlArea + 3) )
    {
      if( *((_QWORD *)ControlArea + 4) )
      {
        if( !v8 )
        {
          v7 = MiInsertUnusedSegment(ControlArea);
          v8 = 4;
        }
      }
      else
      {
        *((_DWORD *)ControlArea + 14) |= 1u;
        v8 = 2;
        MiClearFilePointer(ControlArea);
      }
      goto LABEL_3;
    }
LABEL_31:
    v8 = 4;
  }
LABEL_3:
  if( v8 >= 4 )
  {
    MiBuildWakeList(ControlArea, 3ui64);
    v5 = v17;
    v8 &= ~4u;
  }
  if( v8 )
  {
    if( (v8 & 1) != 0 )
    {
      *((_QWORD *)ControlArea + 5) = 1i64;
      MiCleanSection(ControlArea, v3, 0);
    }
    else
    {
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)ControlArea + 9);
      __writecr8((unsigned __int8)v3);
      MiSegmentDelete((__int64)ControlArea);
    }
  }
  else
  {
    *((_DWORD *)ControlArea + 18) = 0;
    CurrentPrcb = KeGetCurrentPrcb();
    __writecr8((unsigned __int8)v3);
    if( v5 )
    {
      do
      {
        v16 = (__int64 *)*v5;
        KeSignalGate((_KGATE *)(v5 + 2), 1i64);
        v5 = v16;
      }
      while( v16 );
    }
    MiFreeExcessSegments((UINT64)CurrentPrcb);
  }
  if( v7 )
    MiReturnCrossPartitionSectionCharges(v10, v9, v7);
  MiReturnImageBase((INT64)&v18);
}

Referenced by:

MiAddViewsForSection
MiDeleteVad
MiDereferenceControlArea
MiDereferenceControlAreaBySection
MiFlushRelease
MiReleaseFaultCharges
MiRemoveMappedPtes
MiRemoveSystemCacheReferences
MmPurgeSection
MmUnmapViewInSystemCache