MiPrefetchJumpVad

INT64 __fastcall MiPrefetchJumpVad(INT64 a1, INT64 a2, UINT64 a3){
  int v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  _MMPTE *PteBase; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  INT64 v12; 
  INT64 result; 
  v6 = *(_DWORD *)(a2 + 48);
  v7 = ((*(unsigned int *)(a2 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a2 + 33) << 32)) << 12) + 4096;
  if( (v6 & 4) == 0 )
  {
    if( (v6 & 0x100000) != 0 )
    {
      if( (((*(_DWORD *)(a2 + 48) & 0x70) - 16) & 0xFFFFFFDF) != 0 && !MiIsVadLargePrivate(a2) )
      {
        PteBase = MmGetPteBase();
        v10 = (unsigned __int64)PteBase + ((v8 >> 9) & 0x7FFFFFFFF8i64);
        v11 = (unsigned __int64)PteBase + ((v7 >> 9) & 0x7FFFFFFFF8i64);
        if( v11 > (v10 & 0xFFFFFFFFFFFFF000ui64) + 4096 )
          v11 = (((unsigned __int64)PteBase + ((v8 >> 9) & 0x7FFFFFFFF8i64)) & 0xFFFFFFFFFFFFF000ui64) + 4096;
        while( v10 < v11 )
        {
          v12 = MI_READ_PTE_LOCK_FREE(v10);
          v10 += 8i64;
          if( v12 )
          {
            if( (v12 & 1) != 0 )
              goto LABEL_14;
            if( (v12 & 0x400) != 0 )
              break;
            if( (v12 & 0x800) != 0 )
            {
LABEL_14:
              MiUpdatePrefetchPriority(a1, a3, a2);
            }
            else if( IS_PTE_NOT_DEMAND_ZERO(v12) )
            {
              break;
            }
          }
          a3 += 4096i64;
        }
        v7 = (__int64)((v10 << 25) - ((_QWORD)PteBase << 25)) >> 16;
      }
    }
    else
    {
      result = *(unsigned int *)(a2 + 64);
      if( (result & 0x1000000) == 0 )
        return result;
    }
  }
  result = MiLeapPrefetch((_QWORD *)a1, v7);
  *(_BYTE *)(a1 + 1) = 1;
  return result;
}

Referenced by:

MiZeroFault