MiTrimSystemImagePages

NTSTATUS __stdcall MiTrimSystemImagePages(_MMPTE *EntryPte, _MMPTE *LastPte){
  int v2; 
  NTSTATUS v3; 
  _MMPTE *v5; 
  _MMPFN *PfnDb; 
  __int64 v7; 
  unsigned __int64 v8; 
  _MMPFN *v9; 
  _UNICODE_STRING *v10; 
  UINT8 v11; 
  PWCHAR v12; 
  int v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  int v17; 
  unsigned __int64 v18; 
  __int64 v19; 
  int v20; 
  _UNICODE_STRING *v21; 
  UINT8 v22; 
  wchar_t *v23; 
  _MMPTE v24; 
  volatile signed __int32 *p_u2; 
  union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v26; 
  int v27; 
  char v28; 
  __int64 v29; 
  __int64 v30; 
  _MMPFN *v31; 
  UINT64 v33; 
  INT64 v34; 
  UINT64 SpinCount; 

  LODWORD(SpinCount) = v2;
  v3 = 0;
  v5 = EntryPte;
  if( EntryPte <= LastPte )
  {
    PfnDb = MmGetPfnDb();
    do
    {
      LODWORD(v7) = MI_READ_PTE_LOCK_FREE((INT64)v5);
      if( (v7 & 1) == 0 && (v7 & 0x400) != 0 )
      {
        v34 = v7 & 0xFFFFFFFFFFFFFBFEui64 | 1;
        LODWORD(v8) = MI_READ_PTE_LOCK_FREE((INT64)&v34);
        v9 = &PfnDb[(v8 >> 12) & 0xFFFFFFFFFi64];
        LOBYTE(v13) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v9, v10, v11, v12);
        if( v13 )
        {
          v14 = MiSwizzleInvalidPte((v9->PteLong << 16) | 0x400);
          v16 = v14;
          if( (v9->u4._bf_0 & 0x1000000000i64) == 0 && v15 > 0 )
            v16 = v14 | 0x800;
        }
        else
        {
          v17 = (*((_DWORD *)&v9->3 + 4) >> 5) & 0x1F;
          LODWORD(v18) = MI_READ_PTE_LOCK_FREE((INT64)&v34);
          LODWORD(v19) = MiMakeTransitionPte((v18 >> 12) & 0xFFFFFFFFFi64, v17);
          v16 = v19;
        }
        LOBYTE(v20) = MiPteInShadowRange((UINT64)v5);
        if( v20 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v16 & 1) != 0 )
          v16 |= 0x8000000000000000ui64;
        v5->u.Long = v16;
        v24.u.Long = 0i64;
        p_u2 = (volatile signed __int32 *)&v9->u2;
        LODWORD(SpinCount) = 0;
        while( _interlockedbittestandset64(p_u2, 0x3Fui64) )
        {
          do
            KeYieldProcessorEx(&SpinCount);
          while( *(__int64 *)p_u2 < 0 );
        }
        *((_BYTE *)&v9->u3 + 3) &= ~8u;
        if( (v34 & 0x42) != 0 )
        {
          MiCaptureDirtyBitToPfn();
          v24.u.Long = v26.Long;
        }
        LOBYTE(v27) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v9, v21, v22, v23);
        if( v27 )
        {
          LODWORD(v29) = MiGetContainingPageTable((UINT64)v5);
          v30 = v29;
        }
        else
        {
          v30 = -1i64;
        }
        *((_BYTE *)&v9->u3 + 3) = v28 & 0xF8 | 2;
        MiDecrementShareCount(v9);
        if( v30 != -1 )
        {
          _InterlockedAnd64((volatile signed __int64 *)p_u2, 0x7FFFFFFFFFFFFFFFui64);
          v31 = &MmGetPfnDb()[v30];
          LODWORD(v33) = 0;
          p_u2 = (volatile signed __int32 *)&v31->u2;
          while( _interlockedbittestandset64(p_u2, 0x3Fui64) )
          {
            do
              KeYieldProcessorEx(&v33);
            while( *(__int64 *)p_u2 < 0 );
          }
          MiDecrementShareCount(v31);
        }
        _InterlockedAnd64((volatile signed __int64 *)p_u2, 0x7FFFFFFFFFFFFFFFui64);
        if( v24.u.Long )
          MiReleasePageFileInfo(&Irp, v24, 1ui64);
        ++v3;
        PfnDb = MmGetPfnDb();
      }
      ++v5;
    }
    while( v5 <= LastPte );
  }
  return v3;
}

Referenced by:

MiSetPagingOfDriver