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