MiPrefetchJumpVad

VOID __stdcall MiPrefetchJumpVad(_MI_FAULT_VA_LIST *PrefetchHead, _MMVAD *Vad, VOID *VirtualAddress){
  union {unsigned int LongFlags;_MMVAD_FLAGS VadFlags;_MM_PRIVATE_VAD_FLAGS PrivateVadFlags;_MM_GRAPHICS_VAD_FLAGS GraphicsVadFlags;_MM_SHARED_VAD_FLAGS SharedVadFlags;volatile unsigned int VolatileVadLong;} v6; 
  unsigned __int64 v7; 
  int v8; 
  unsigned __int64 v9; 
  _MMPTE *PteBase; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  _MMVAD *v14; 
  int v15; 

  v6.LongFlags = (unsigned int)Vad->Core.u;
  v7 = ((Vad->Core.EndingVpn | ((unsigned __int64)Vad->Core.EndingVpnHigh << 32)) << 12) + 4096;
  if( (v6.LongFlags & 4) == 0 )
  {
    if( (v6.LongFlags & 0x100000) != 0 )
    {
      if( (((Vad->Core.u.LongFlags & 0x70) - 16) & 0xFFFFFFDF) != 0 )
      {
        LOBYTE(v8) = MiIsVadLargePrivate((INT64)Vad);
        if( !v8 )
        {
          PteBase = MmGetPteBase();
          v11 = (unsigned __int64)PteBase + ((v9 >> 9) & 0x7FFFFFFFF8i64);
          v12 = (unsigned __int64)PteBase + ((v7 >> 9) & 0x7FFFFFFFF8i64);
          if( v12 > (v11 & 0xFFFFFFFFFFFFF000ui64) + 4096 )
            v12 = (((unsigned __int64)PteBase + ((v9 >> 9) & 0x7FFFFFFFF8i64)) & 0xFFFFFFFFFFFFF000ui64) + 4096;
          while( v11 < v12 )
          {
            LODWORD(v13) = MI_READ_PTE_LOCK_FREE(v11);
            v11 += 8i64;
            if( v13 )
            {
              if( (v13 & 1) != 0 )
                goto LABEL_14;
              if( (v13 & 0x400) != 0 )
                break;
              if( (v13 & 0x800) != 0 )
              {
LABEL_14:
                MiUpdatePrefetchPriority(PrefetchHead, VirtualAddress, (_MMPTE)Vad, v14);
              }
              else
              {
                IS_PTE_NOT_DEMAND_ZERO();
                if( v15 )
                  break;
              }
            }
            VirtualAddress = (char *)VirtualAddress + 4096;
          }
          v7 = (__int64)((v11 << 25) - ((_QWORD)PteBase << 25)) >> 16;
        }
      }
    }
    else if( (Vad->u2.LongFlags2 & 0x1000000) == 0 )
    {
      return;
    }
  }
  MiLeapPrefetch(PrefetchHead, (VOID *)v7);
  *((_BYTE *)PrefetchHead + 1) = 1;
}

Referenced by:

MiZeroFault