MiCheckPurgeAndUpMapCount

VOID __stdcall MiCheckPurgeAndUpMapCount(_CONTROL_AREA *ControlArea){
  INT64 *p_ControlAreaLock; 
  unsigned __int8 i; 
  CHAR v4; 
  __int128 v5; 
  __int128 v6; 
  __int64 v7; 

  p_ControlAreaLock = (INT64 *)&ControlArea->ControlAreaLock;
  v7 = 0i64;
  v5 = 0i64;
  v6 = 0i64;
  for( i = ExAcquireSpinLockExclusive((INT64 *)&ControlArea->ControlAreaLock);
        (ControlArea->u.LongFlags & 4) != 0;
        i = ExAcquireSpinLockExclusive(p_ControlAreaLock) )
  {
    DWORD1(v6) = 0;
    v7 = (__int64)&v6 + 8;
    DWORD2(v5) = 2;
    *((_QWORD *)&v6 + 1) = (char *)&v6 + 8;
    *(_QWORD *)&v5 = ControlArea->WaitList;
    ControlArea->WaitList = (_MI_CONTROL_AREA_WAIT_BLOCK *)&v5;
    LOWORD(v6) = 263;
    BYTE2(v6) = 6;
    ExReleaseSpinLockExclusiveFromDpcLevel(p_ControlAreaLock);
    __writecr8(i);
    KeWaitForGate((_KGATE *)&v6, WrVirtualMemory, v4);
  }
  ++ControlArea->NumberOfMappedViews;
  ++ControlArea->NumberOfUserReferences;
  ExReleaseSpinLockExclusiveFromDpcLevel(p_ControlAreaLock);
  __writecr8(i);
}

Referenced by:

MiApplyHotPatchToLoadedDriver
MiMapViewInSystemSpace
MiMapViewOfDataSection
MiMapViewOfImageSection
MmLoadSystemImageEx