RtlpHpSegPageRangeComputeLargePageCost

NTSTATUS __stdcall RtlpHpSegPageRangeComputeLargePageCost(
        PVOID ThreadHandle,
        _THREADINFOCLASS ThreadInformationClass,
        PVOID ThreadInformation,
        UINT64 ThreadInformationLength,
        UINT64 *ReturnLength){
  __int64 v5; 
  unsigned int v6; 
  __int64 v7; 
  unsigned __int64 v8; 
  __int16 *v9; 
  NTSTATUS v10; 
  int v11; 
  int v12; 
  unsigned int i; 
  NTSTATUS result; 

  v5 = *(_QWORD *)&ThreadInformationClass & *(_QWORD *)ThreadHandle;
  v6 = ThreadInformationClass - v5;
  v7 = *(_QWORD *)(v5 + 24);
  v8 = v7 + 2 * ((unsigned __int64)(v6 + (_DWORD)ThreadInformation - 1) >> 21);
  v9 = (__int16 *)(v7 + 2 * ((unsigned __int64)v6 >> 21));
  v10 = 0;
  v11 = 0;
  v12 = 0;
  for( i = ((__int64)(v8 - (_QWORD)v9) >> 1) + 1; (unsigned __int64)v9 <= v8; ++v9 )
  {
    if( (*v9 & 0x7FF) != 0 )
    {
      if( *v9 < 0 )
        ++v11;
    }
    else
    {
      ++v12;
    }
  }
  if( v11 == i )
  {
    LOBYTE(v10) = i > (unsigned int)((_DWORD)ThreadInformation + 0x1FFFFF) >> 21;
    return v10;
  }
  else if( v11 )
  {
    return 2;
  }
  else
  {
    result = 4;
    if( v12 )
      return 3;
  }
  return result;
}

Referenced by:

RtlpHpSegAlloc
RtlpHpSegFreeRangeInsert
RtlpHpSegPageRangeShrink
RtlpHpSegSubAllocate