MiChangeAwePageAttributes

INT64 __fastcall MiChangeAwePageAttributes(INT64 a1, INT64 a2, INT64 a3){
  unsigned __int64 v3; 
  unsigned int v4; 
  INT64 v6; 
  unsigned __int64 v7; 
  INT64 v9; 
  INT64 v10; 
  unsigned __int64 v11; 
  INT64 *v12; 
  v3 = *(_QWORD *)(a1 + 8);
  v4 = a3;
  v6 = a2 + 24;
  v7 = (unsigned __int8)MiLockPageInline(a2);
  if( *(_WORD *)(a2 + 32) > 2u
    || (*(_QWORD *)v6 & 0x3FFFFFFFFFFFFFFFi64) != 1
    || (*(_QWORD *)(a2 + 24) & 0x4000000000000000i64) != 0 )
  {
    _InterlockedAnd64((volatile signed __int64 *)v6, 0x7FFFFFFFFFFFFFFFui64);
    __writecr8(v7);
    return 3221225496i64;
  }
  v9 = *(_QWORD *)(a2 + 16);
  _InterlockedAnd64((volatile signed __int64 *)v6, 0x7FFFFFFFFFFFFFFFui64);
  __writecr8(v7);
  v10 = 0i64;
  v11 = 0i64;
  if( v3 )
  {
    while( *(_WORD *)(v6 + 8) <= 2u && (*(_QWORD *)v6 & 0x4000000000000000i64) == 0 )
    {
      *(_QWORD *)(v6 - 8) = v10;
      ++v11;
      v10 = v6 - 24;
      v6 += 48i64;
      if( v11 >= v3 )
        goto LABEL_10;
    }
    while( v10 )
    {
      v12 = (INT64 *)(v10 + 16);
      v10 = *(_QWORD *)(v10 + 16);
      *v12 = v9;
    }
    return 3221225496i64;
  }
LABEL_10:
  MiChangePageAttributeBatch(v10, (_BYTE *)v4, v9);
  return 0i64;
}

Referenced by:

MiIncrementAweMapCount