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