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