MiMakeShadowPageTableRange

void __fastcall MiMakeShadowPageTableRange(unsigned __int64 a1, unsigned __int64 a2, __int64 a3, int a4, __int64 a5){
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  char *v9; 
  __int64 v10; 
  __int64 v11; 

  v6 = a1;
  v7 = a2;
  if( a1 < *(_QWORD *)(a3 + 16i64 * a4) )
    v6 = *(_QWORD *)(a3 + 16i64 * a4);
  if( a2 > *(_QWORD *)(a3 + 16i64 * a4 + 8) )
    v7 = *(_QWORD *)(a3 + 16i64 * a4 + 8);
  for( ; v6 <= v7; v6 += 8i64 )
  {
    if( (MiReadWriteAnyLevelShadowPte(v6, a4, 0, ZeroPte.u.Long) & 1) == 0 )
    {
      if( a4 )
      {
        LODWORD(v11) = MiGetPfnLink(*(_QWORD *)(a5 + 24));
        ++*(_QWORD *)(a5 + 48);
        *(_QWORD *)(a5 + 24) = v11;
      }
      else
      {
        v9 = 0i64;
      }
      MiInitializeShadowPageTable(v6, v9, a4);
    }
    if( a4 > *(_DWORD *)(a5 + 68) )
    {
      v10 = (__int64)((v6 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
      MiMakeShadowPageTableRange(v10, v10 + 4088, a3, a4 - 1, a5);
    }
  }
}

Referenced by:

MiMakeShadowPageTableRange
MmCreateShadowMapping