MiPurgeImageSection

void __fastcall MiPurgeImageSection(__int64 a1){
  __int64 v1; 
  __int64 v2; 
  __int64 v3; 
  _CONTROL_AREA *v4; 
  _MI_PARTITION *v5; 
  UINT64 v6; 
  INT64 v7; 
  _MMPFN *v8; 
  INT64 v9; 
  unsigned int v10; 
  unsigned __int64 v11; 
  _MMPFN *v12; 
  INT64 v13; 
  UINT64 v14; 
  UINT64 v15; 
  _DWORD *v16; 
  UINT64 v17; 
  char *v18; 
  INT64 v19; 
  UINT64 SpinCount; 
  _MMPFN *v21; 
  _MI_PARTITION *Partition; 
  INT64 v23; 
  INT64 v24; 
  INT64 v25; 
  unsigned __int64 v26; 
  INT64 v27; 
  UINT8 PageIrql; 
  unsigned int v30; 
  unsigned int v31; 
  v1 = a1 + 128;
  v2 = *(_WORD *)(a1 + 60) & 0x3FF;
  v3 = 0i64;
  PageIrql = 17;
  v4 = (_CONTROL_AREA *)a1;
  v21 = 0i64;
  v5 = *(_MI_PARTITION **)(qword_140C4E388 + 8 * v2);
  Partition = v5;
  while( 1 )
  {
    v23 = v1;
    if( !v1 )
      break;
    if( (*(_WORD *)(v1 + 34) & 2) == 0 )
      goto LABEL_4;
    v7 = MiSwizzleInvalidPte(16i64 * (*(_WORD *)(v1 + 32) & 0x3E));
    v24 = v7;
    v9 = v7;
    v31 = 0;
    v30 = 0;
    if( *(_DWORD *)(v1 + 36) )
    {
      v9 = MiSwizzleInvalidPte(16 * (v6 | (v1 << 12) | 0x40));
      v31 = (*(_DWORD *)(v1 + 40) << 9) | (v10 >> 4);
    }
    v11 = *(_QWORD *)(v1 + 8);
    v26 = v11 + 8i64 * *(unsigned int *)(v1 + 44);
    if( v11 < v26 )
    {
      while( 1 )
      {
        if( (v11 & 0xFFF) == 0 || PageIrql == 17 )
        {
          LOBYTE(v6) = PageIrql;
          if( PageIrql != 17 )
            MiUnlockProtoPoolPage(v8, v6);
          while( 1 )
          {
            v21 = MiLockProtoPoolPage((_MMPTE *)v11, &PageIrql);
            if( v21 )
              break;
            MmAccessFault(2ui64, (PVOID)v11, 0, 0i64);
          }
          v7 = v24;
        }
        v12 = MiLockLeafPage((_MMPTE *)v11, 0i64);
        v13 = MI_READ_PTE_LOCK_FREE(v11);
        v15 = v13;
        if( !v13 )
        {
LABEL_20:
          v1 = v23;
          v8 = v21;
          goto LABEL_21;
        }
        if( !v12 )
          break;
        if( (*((_BYTE *)v12 + 34) & 0x10) != 0 || (*((_DWORD *)v12 + 4) & 0x400i64) == 0 )
        {
          v16 = (_DWORD *)((char *)v12 + 16);
          if( (*((_DWORD *)v12 + 4) & 0x400i64) != 0 )
            MiDereferenceControlAreaPfnList(v4, 0i64, v14, 2ui64);
          v17 = 0i64;
          v25 = *((_QWORD *)v12 + 5) & 0xFFFFFFFFFi64;
          if( *((_WORD *)v12 + 16) )
          {
            *((_QWORD *)v12 + 3) |= 0x4000000000000000ui64;
            if( (*((_BYTE *)v12 + 34) & 0x28) == 32 )
            {
              v3 = *(_QWORD *)v12 - 32i64;
              if( *(_QWORD *)(v3 + 16) == v3 + 16 )
                v3 = 0i64;
            }
            if( (*v16 & 0x400i64) == 0 )
              MiChargeCommit(Partition, 1ui64, 4ui64);
          }
          else
          {
            MiUnlinkPageFromList(v12, 0i64);
            if( (*v16 & 0x400i64) == 0 )
              v17 = MiCapturePageFileInfoInline((UINT64 *)v12 + 2, 0i64, 1i64);
            if( qword_140C4DC80 )
            {
              if( (v15 & 0x10) != 0 )
                v15 &= ~0x10ui64;
              else
                v15 &= ~qword_140C4DC80;
            }
            MiInsertPageInFreeOrZeroedList((v15 >> 12) & 0xFFFFFFFFFi64, 2ui64);
          }
          *(_QWORD *)v11 = v9;
          _InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
          if( v3 )
            MiInvalidateCollidedIos(v3);
          v18 = (char *)MmGetPfnDb() + 48 * v25;
          v3 = 0i64;
          LODWORD(SpinCount) = 0;
          while( _interlockedbittestandset64((volatile signed __int32 *)v18 + 6, 0x3Fui64) )
          {
            do
              KeYieldProcessorEx(&SpinCount);
            while( *((__int64 *)v18 + 3) < 0 );
          }
          MiDecrementShareCount((UINT64)v18);
          _InterlockedAnd64((volatile signed __int64 *)v18 + 3, 0x7FFFFFFFFFFFFFFFui64);
          v5 = Partition;
          if( v17 )
            MiReleasePageFileInfo(
              (INT64)Partition,
              v17,
              1,
              v19,
              SpinCount,
              (INT64)v21,
              (INT64)Partition,
              v23,
              v24,
              v25,
              v26,
              v27);
LABEL_52:
          v4 = (_CONTROL_AREA *)a1;
          goto LABEL_17;
        }
        _InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
LABEL_17:
        v11 += 8i64;
        v8 = v21;
        v30 += 4096;
        if( v30 >= v31 )
          v9 = v7;
        if( v11 >= v26 )
          goto LABEL_20;
      }
      if( (v13 & 0x400) != 0 || v13 == MiSwizzleInvalidPte(768i64) )
        goto LABEL_17;
      MiReleasePageFileSpace(v5, v15, 1i64);
      *(_QWORD *)v11 = v9;
      goto LABEL_52;
    }
LABEL_21:
    LOBYTE(v6) = PageIrql;
    if( PageIrql != 17 )
    {
      MiUnlockProtoPoolPage(v8, v6);
      PageIrql = 17;
    }
LABEL_4:
    v1 = *(_QWORD *)(v1 + 16);
  }
}

Referenced by:

MiCheckControlArea