MiPrefetchDriverPages

VOID __stdcall MiPrefetchDriverPages(MMPTE *FirstPte, MMPTE *LastPte){
  unsigned __int64 v2; 
  UINT8 v3; 
  WCHAR *DemandZeroPte; 
  UNICODE_STRING *v5; 
  unsigned __int64 v6; 
  __int64 v7; 
  unsigned __int64 v8; 
  _MMPTE *PteBase; 
  _MMPTE *Pml4eBase; 
  _MMPTE *PxeUserLimit; 
  INT64 PteShadow; 
  __int64 v13; 
  INT64 v14; 
  unsigned __int64 v15; 
  v2 = 0i64;
  DemandZeroPte = (WCHAR *)MiMakeDemandZeroPte(4);
  v15 = 0i64;
  v7 = 0i64;
  v14 = 0i64;
  if( (unsigned __int64)v5 <= v8 )
  {
    PteBase = MmGetPteBase();
    Pml4eBase = MmGetPml4eBase();
    PxeUserLimit = MmGetPxeUserLimit();
    do
    {
      PteShadow = *(_QWORD *)&v5->Length;
      if( v5 >= (UNICODE_STRING *)Pml4eBase && v5 <= (UNICODE_STRING *)PxeUserLimit )
        PteShadow = MiReadPteShadow(v5, *(UNICODE_STRING **)&v5->Length, v3, DemandZeroPte);
      if( (PteShadow & 1) == 0
        && ((PteShadow & 0x400) != 0 || (PteShadow & 0x800) == 0 && (WCHAR *)PteShadow != DemandZeroPte) )
      {
        v13 = ((_QWORD)v5 << 25) - ((_QWORD)PteBase << 25);
        if( !v2 )
        {
          v7 = v13 >> 16;
          v14 = v13 >> 16;
        }
        v2 = ((v13 + 0x10000000) >> 16) - v7;
        v15 = v2;
      }
      v5 = (UNICODE_STRING *)((char *)v5 + 8);
    }
    while( (unsigned __int64)v5 <= v6 );
    if( v2 > 0x1000 )
      MiPrefetchVirtualMemory(1ui64, (INT64)&v14, (CHAR *)1, 45i64);
  }
}

Referenced by:

MiLockCode