MiPrefetchRestOfCluster

RTL_SPLAY_LINKS *__stdcall MiPrefetchRestOfCluster(
        RTL_SPLAY_LINKS *Tree,
        LARGE_INTEGER *StartingByte,
        LARGE_INTEGER *EndingByte,
        RTL_SPLAY_LINKS **LastEdgeNode,
        UINT8 *GreaterThan){
  LARGE_INTEGER v5; 
  _RTL_SPLAY_LINKS *LeftChild; 
  RTL_SPLAY_LINKS *result; 
  INT64 *v11; 
  unsigned __int64 v12; 
  INT64 v13; 
  INT64 v14; 
  char v15; 
  INT64 v16; 
  unsigned __int64 v17; 
  v5 = StartingByte[3];
  if( v5.QuadPart < (unsigned __int64)StartingByte[2].QuadPart )
  {
    LeftChild = Tree[9].LeftChild;
    if( (unsigned __int64)LeftChild >= 0xFFFF800000000000ui64
      && (unsigned int)MiGetSystemRegionType((UINT64)Tree[9].LeftChild) != 1 )
    {
      EndingByte = (LARGE_INTEGER *)1;
    }
    result = (RTL_SPLAY_LINKS *)LODWORD(Tree[7].RightChild);
    v11 = (INT64 *)(StartingByte[1].QuadPart + 16 * v5.QuadPart);
    v12 = ((unsigned __int64)&LeftChild[170].LeftChild + (_QWORD)result + 7) & 0xFFFFFFFFFFFFF000ui64;
    v13 = *v11;
    if( v12 >= *v11 )
    {
      v14 = v11[1];
      result = (RTL_SPLAY_LINKS *)(v14 + v13);
      if( v12 < v14 + v13 )
      {
        v16 = v12;
        v17 = v13 + v14 - v12;
        MiGetEffectivePagePriorityThread((_ETHREAD *)KeGetCurrentThread(), v17, v13);
        return(RTL_SPLAY_LINKS *)MiPrefetchVirtualMemory(
                                    1ui64,
                                    (INT64)&v16,
                                    (CHAR *)EndingByte,
                                    v15 & 7 | (8 * (v15 & 7 | 0x2800u)));
      }
    }
  }
  return result;
}

Referenced by:

MiWaitForInPageComplete