MiProcessVaRangesInfoClass
NTSTATUS __stdcall MiProcessVaRangesInfoClass(UINT64 a1, _OWORD *a2, INT64 a3, UINT64 a4){
NTSTATUS v4;
unsigned int v5;
__int64 v8;
UINT64 v9;
_MMPTE *v10;
INT64 v11;
_MMVAD *v12;
unsigned __int64 v13;
int v14;
INT64 v15;
_MMPTE *v16;
__int64 v18;
INT64 v19;
UINT64 v20[2];
int v21;
int v22;
unsigned int v23;
v23 = a4;
v22 = a3;
LODWORD(v19) = 0;
v4 = 0;
v5 = 0;
if( a1 )
{
while( 2 )
{
*(_OWORD *)v20 = *a2;
v8 = v20[1];
v9 = v20[0];
do
{
v10 = (_MMPTE *)v9;
LODWORD(v11) = MiObtainReferencedVadEx(v9, 0, &v19);
v12 = (_MMVAD *)v11;
if( !v11 )
return v19;
v21 = 0;
v13 = *(unsigned int *)(v11 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v11 + 33) << 32);
if( ((v9 + v8 - 1) | 0xFFF) >> 12 > v13 )
{
v21 = 1;
v18 = (v13 << 12) | 0xFFF;
v8 = v9 - v18 + v8 - 1;
v9 = v18 + 1;
}
LOBYTE(v14) = MiVadSupportsPrivateCommit(v11);
if( !v14 || MiIsVadLarge(v15) )
{
v4 = 1073741849;
}
else if( v22 == 1 )
{
MiWalkVaRange(v10, v16, v12, MiMemSetPriority, v23);
}
else if( (v12->Core.u.LongFlags & 0x5100000) == 68157440 )
{
v4 = -1073741637;
}
else
{
MiMoveDirtyBitsToPfns(v10, v16, 0i64, FlushSession);
}
MiUnlockAndDereferenceVad(&v12->Core);
}
while( v21 == 1 );
++v5;
++a2;
if( v5 < a1 )
continue;
break;
}
}
return v4;
}Referenced by:
MmSetPriorityVaRanges
NtSetInformationVirtualMemory