MiFreedUnusedPfnPagesWorker

VOID __fastcall MiFreedUnusedPfnPagesWorker(UINT64 *rcx0){
  unsigned __int64 v1; 
  _MMPTE *PteBase; 
  _MMPFN *PfnDb; 
  unsigned __int64 v4; 
  unsigned __int64 v5; 
  UINT64 v6; 
  UINT64 v7; 
  INT64 NextNonGapPfnPage; 
  char *v9; 
  SIZE_T v10; 
  _MMPFN *v11; 
  SIZE_T v12; 
  unsigned __int64 v13; 
  char *v14; 
  __int64 v15; 
  char *v16; 
  char *v17; 
  char *v18; 
  UINT8 *i; 
  __int64 v20; 
  unsigned __int64 v21; 
  UINT64 v22; 
  UINT64 v23; 
  UINT64 v24; 
  unsigned __int64 v25; 
  if( !*rcx0 )
    byte_140C50B8C = 1;
  v1 = 0i64;
LABEL_4:
  PteBase = MmGetPteBase();
LABEL_5:
  PfnDb = MmGetPfnDb();
LABEL_6:
  if( v1 != 0x1000000000i64 )
  {
    if( !MmPhysicalMemoryBlock )
    {
LABEL_8:
      v4 = 0x1000000000i64 - v1;
      goto LABEL_9;
    }
    for( i = MmPhysicalMemoryBlock + 16; ; i += 16 )
    {
      if( i >= &MmPhysicalMemoryBlock[16 * *(unsigned int *)MmPhysicalMemoryBlock + 16] )
      {
        PfnDb = MmGetPfnDb();
        goto LABEL_8;
      }
      v20 = *(_QWORD *)i;
      if( v1 >= *(_QWORD *)i )
      {
        v21 = *((_QWORD *)i + 1) + v20;
        if( v1 < v21 )
          v1 = v21;
      }
      else
      {
        v4 = v20 - v1;
        if( v20 - v1 >= 0x55 )
        {
          PfnDb = MmGetPfnDb();
LABEL_9:
          v5 = v1;
          if( v4 )
          {
            v1 += v4;
            v25 = v1;
            v6 = (UINT64)PteBase + (((48 * v5 - 0x57FFFFFF001i64) >> 9) & 0x7FFFFFFFF8i64);
            v23 = v6;
            v7 = (UINT64)PteBase + ((((unsigned __int64)PfnDb + 48 * v1) >> 9) & 0x7FFFFFFFF8i64);
            v24 = v7;
            if( v6 < v7 )
            {
              while( 1 )
              {
                v22 = (__int64)(v7 - v6) >> 3 << 12;
                NextNonGapPfnPage = MiGetNextNonGapPfnPage(&v23, &v22, 2, 1i64);
                PteBase = MmGetPteBase();
                v9 = (char *)NextNonGapPfnPage;
                if( !NextNonGapPfnPage )
                  goto LABEL_5;
                v10 = v22 & 0xFFFFFFFFFFFFF000ui64;
                if( (v22 & 0xFFFFFFFFFFFFF000ui64) == 0 )
                  goto LABEL_5;
                v11 = MmGetPfnDb();
                do
                {
                  if( *(_QWORD *)v9 || (v12 = RtlCompareMemoryUlong(v9, v10, 0), v12 < 0x1000) )
                  {
                    v12 = 4096i64;
                  }
                  else
                  {
                    v14 = v9;
                    v15 = (v9 - (char *)v11) / 48;
                    v16 = (char *)v11 + 48 * v15;
                    if( v16 != v9
                      && (!MmIsAddressValidEx((INT64)v11 + 48 * v15) || RtlCompareMemoryUlong(v16, 0x30ui64, 0) != 48) )
                    {
                      v14 = v9 + 4096;
                    }
                    v17 = &v9[v12 & 0xFFFFFFFFFFFFF000ui64];
                    v18 = (char *)v11 + 48 * ((v17 - (char *)v11) / 48);
                    if( v18 != v17
                      && (!MmIsAddressValidEx((INT64)(v18 + 48)) || RtlCompareMemoryUlong(v18, 0x30ui64, 0) != 48) )
                    {
                      v17 -= 4096;
                    }
                    MiPfnRangeIsZero(v14, v17);
                  }
                  v13 = (v12 + 4095) & 0xFFFFFFFFFFFFF000ui64;
                  v9 += v13;
                  v10 -= v13;
                }
                while( v10 >= 0x1000 );
                v6 = v23;
                v7 = v24;
                v1 = v25;
                if( v23 >= v24 )
                  goto LABEL_4;
              }
            }
            goto LABEL_6;
          }
          return;
        }
        v1 = v20 + *((_QWORD *)i + 1);
      }
    }
  }
}

Referenced by:

MiFreeUnusedPfnPagesDpc