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