MiLeapPrefetch

INT64 __fastcall MiLeapPrefetch(_QWORD *a1, UINT64 a2){
  UINT64 v2; 
  unsigned int v4; 
  unsigned __int64 v5; 
  _ETHREAD *CurrentThread; 
  char v7; 
  __int64 v8; 
  UINT8 v9; 
  unsigned __int64 i; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  __int64 v15; 
  _QWORD *v16; 
  unsigned __int64 v17; 
  _QWORD **v18; 
  unsigned __int64 v19; 
  _QWORD *v20; 
  v2 = a2;
  v4 = 1;
  if( a2 )
  {
LABEL_20:
    v15 = a1[3];
    v16 = (_QWORD *)(a1[1] + 16 * v15);
    v17 = *v16 & 0xFFFFFFFFFFFFF000ui64;
    if( v2 >= v17 && v2 < v17 + (((*(_DWORD *)v16 & 0xFFF) + v16[1] + 4095i64) & 0xFFFFFFFFFFFFF000ui64) )
    {
      a1[4] = (v2 - v17) >> 12;
      return v4;
    }
    goto LABEL_22;
  }
  v5 = *(_QWORD *)(a1[1] + 16i64 * a1[3]) + (a1[4] << 12);
  if( v5 <= 0x7FFFFFFEFFFFi64 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    v7 = *((_BYTE *)CurrentThread + 1304);
    if( v7 >= 0 && ((unsigned __int8)~(*((_BYTE *)CurrentThread + 1305) >> 6) & ((v7 & 3) == 0)) != 0 )
    {
      v8 = *((_QWORD *)CurrentThread + 23);
      v9 = MiLockWorkingSetShared(v8 + 1664);
      if( (*(_DWORD *)(v8 + 1124) & 0x20) == 0 && *(_QWORD *)(v8 + 2024) )
      {
        i = *(_QWORD *)(v8 + 2008);
        v11 = v5 >> 12;
        while( i )
        {
          v12 = *(unsigned int *)(i + 24) | ((unsigned __int64)*(unsigned __int8 *)(i + 32) << 32);
          if( v11 >= v12 )
          {
            if( v11 <= (*(unsigned int *)(i + 28) | ((unsigned __int64)*(unsigned __int8 *)(i + 33) << 32)) )
              goto LABEL_16;
            v13 = *(_QWORD *)(i + 8);
          }
          else
          {
            v13 = *(_QWORD *)i;
          }
          if( !v13 )
          {
            if( v12 >= v11 )
              goto LABEL_19;
            v18 = *(_QWORD ***)(i + 8);
            v19 = i;
            if( v18 )
            {
              v20 = *v18;
              for( i = *(_QWORD *)(i + 8); v20; v20 = (_QWORD *)*v20 )
                i = (unsigned __int64)v20;
            }
            else
            {
              while( 1 )
              {
                i = *(_QWORD *)(i + 16) & 0xFFFFFFFFFFFFFFFCui64;
                if( !i || *(_QWORD *)i == v19 )
                  break;
                v19 = i;
              }
            }
            if( i )
            {
LABEL_19:
              v2 = (*(unsigned int *)(i + 24) | ((unsigned __int64)*(unsigned __int8 *)(i + 32) << 32)) << 12;
              MiUnlockWorkingSetShared(v8 + 1664, v9);
              goto LABEL_20;
            }
            break;
          }
          i = v13;
        }
        MiUnlockWorkingSetShared(v8 + 1664, v9);
        v15 = a1[3];
LABEL_22:
        a1[4] = 0i64;
        a1[3] = v15 + 1;
        return v4;
      }
      v4 = 0;
LABEL_16:
      MiUnlockWorkingSetShared(v8 + 1664, v9);
    }
  }
  return v4;
}

Referenced by:

MiInPagePageTable
MiPrefetchJumpVad
MiPrefetchVirtualMemory