MiUpdateVadBits
VOID __stdcall MiUpdateVadBits(PVOID UserVa, PVOID LastUserVa){
bool v2;
_ETHREAD *CurrentThread;
unsigned __int64 v5;
__int64 LowestConflictingVad;
_QWORD **v7;
__int64 v8;
_QWORD *v9;
v2 = LastUserVa < UserVa;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v5 = 0x7FFFFFFEFFFFi64;
if( !v2 )
v5 = (unsigned __int64)LastUserVa;
LowestConflictingVad = (__int64)MiLocateLowestConflictingVad(*((_QWORD *)CurrentThread + 23), (UINT64)UserVa, v5 - 1);
if( LowestConflictingVad )
{
do
{
MiSetVadBits(LowestConflictingVad);
v7 = *(_QWORD ***)(LowestConflictingVad + 8);
v8 = LowestConflictingVad;
if( v7 )
{
v9 = *v7;
for( LowestConflictingVad = *(_QWORD *)(LowestConflictingVad + 8); v9; v9 = (_QWORD *)*v9 )
LowestConflictingVad = (__int64)v9;
}
else
{
while( 1 )
{
LowestConflictingVad = *(_QWORD *)(LowestConflictingVad + 16) & 0xFFFFFFFFFFFFFFFCui64;
if( !LowestConflictingVad || *(_QWORD *)LowestConflictingVad == v8 )
break;
v8 = LowestConflictingVad;
}
}
}
while( LowestConflictingVad
&& (*(unsigned int *)(LowestConflictingVad + 24) | ((unsigned __int64)*(unsigned __int8 *)(LowestConflictingVad
+ 32) << 32)) << 12 < v5 );
}
}Referenced by:
MiExpandVadBitMap
MiExpandVadBitMapDown