MiPrefetchDriverPages

VOID __stdcall MiPrefetchDriverPages(_MMPTE *FirstPte, _MMPTE *LastPte){
  unsigned __int64 v2; 
  __int64 DemandZeroPte; 
  __int64 *v4; 
  unsigned __int64 v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  _MMPTE *PteBase; 
  _MMPTE *Pml4eBase; 
  _MMPTE *PxeUserLimit; 
  __int64 PteShadow; 
  __int64 v12; 
  INT64 v13; 
  unsigned __int64 v14; 

  v2 = 0i64;
  DemandZeroPte = MiMakeDemandZeroPte(4);
  v14 = 0i64;
  v6 = 0i64;
  v13 = 0i64;
  if( (unsigned __int64)v4 <= v7 )
  {
    PteBase = MmGetPteBase();
    Pml4eBase = MmGetPml4eBase();
    PxeUserLimit = MmGetPxeUserLimit();
    do
    {
      PteShadow = *v4;
      if( v4 >= (__int64 *)Pml4eBase && v4 <= (__int64 *)PxeUserLimit )
        PteShadow = MiReadPteShadow((__int64)v4, *v4);
      if( (PteShadow & 1) == 0 && ((PteShadow & 0x400) != 0 || (PteShadow & 0x800) == 0 && PteShadow != DemandZeroPte) )
      {
        v12 = ((_QWORD)v4 << 25) - ((_QWORD)PteBase << 25);
        if( !v2 )
        {
          v6 = v12 >> 16;
          v13 = v12 >> 16;
        }
        v2 = ((v12 + 0x10000000) >> 16) - v6;
        v14 = v2;
      }
      ++v4;
    }
    while( (unsigned __int64)v4 <= v5 );
    if( v2 > 0x1000 )
      MiPrefetchVirtualMemory(1ui64, (INT64)&v13, (CHAR *)1, 45i64);
  }
}

Referenced by:

MiLockCode