MiAddPageToHeatRanges

NTSTATUS __stdcall MiAddPageToHeatRanges(INT64 a1, INT64 a2, INT64 a3){
  __int64 v3; 
  NTSTATUS v4; 
  int v5; 
  __int64 *v7; 
  unsigned __int64 v8; 
  __int64 v9; 
  INT64 v11; 
  __int64 v12; 

  v3 = *(unsigned int *)(a1 + 4);
  v4 = 0;
  v5 = a3;
  if( (_DWORD)v3 )
    v7 = (__int64 *)(a1 + 8 * ((unsigned int)(v3 - 1) + 2i64));
  else
    v7 = 0i64;
  if( (_DWORD)a3 == 3 )
  {
    if( v7 )
    {
      v8 = *v7;
      if( (*v7 & 0xC00) == 0 && (*v7 & 0x3FF) != 1023 )
      {
        v9 = (*v7 & 0x3FF) + 1;
        if( a2 == v9 + (v8 >> 12) )
        {
          *v7 = v8 ^ (v9 ^ v8) & 0x3FF;
          return 0;
        }
        if( a2 == (v8 >> 12) - 1 )
        {
          *v7 = v9 & 0x3FF | (a2 << 12);
          return 0;
        }
      }
    }
  }
  v11 = a2 << 12;
  *(_QWORD *)(a1 + 8 * v3 + 16) = v11;
  if( v5 != 3 )
  {
    if( v5 == 2 )
    {
      v12 = v11 | 0xF;
    }
    else if( v5 == 1 )
    {
      v12 = v11 | 0x400;
    }
    else
    {
      v12 = v11 | 0x800;
    }
    *(_QWORD *)(a1 + 8 * v3 + 16) = v12;
  }
  LOBYTE(v4) = ++*(_DWORD *)(a1 + 4) == *(_DWORD *)(a1 + 8);
  return v4;
}

Referenced by:

MiAddPageToHeatList