HalpNumaAddRangeProximity

NTSTATUS __stdcall HalpNumaAddRangeProximity(UINT64 PhysicalPageNumber, UINT64 PageLength){
  unsigned int v2; 
  NTSTATUS v4; 
  unsigned int v5; 
  NTSTATUS result; 
  _QWORD *v7; 
  unsigned __int64 v8; 
  unsigned int v9; 
  int v10; 
  UINT8 *v11; 
  UINT8 *v12; 
  __int64 v13; 
  __int64 v14; 
  int v15; 
  UINT16 v16; 
  v4 = 0;
  v16 = 0;
  v5 = v2;
  result = HalpNumaQueryProximityNode(v2, &v16);
  if( result < 0 )
    return result;
  v8 = ExAcquireSpinLockExclusive(&HalpNumaMemoryRangeLock);
  v9 = 0;
  if( !HalpNumaMemoryRangeCount )
  {
LABEL_6:
    v10 = HalpNumaMaxMemoryRangeCount;
    if( HalpNumaMemoryRangeCount >= (unsigned int)HalpNumaMaxMemoryRangeCount )
    {
      HalpNumaMaxMemoryRangeCount += 5;
      v11 = (UINT8 *)HalpMmAllocCtxAlloc((__int64)v7, (unsigned int)(16 * (v10 + 6)));
      v12 = v11;
      if( !v11 )
      {
        HalpNumaMaxMemoryRangeCount -= 5;
        ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&HalpNumaMemoryRangeLock);
        v4 = -1073741670;
LABEL_14:
        __writecr8(v8);
        return v4;
      }
      memmove(v11, *(UINT8 **)&HalpNumaMemoryRanges, 16i64 * (unsigned int)HalpNumaMemoryRangeCount);
      if( HalpNumaDynamicMemoryRanges )
        HalpMmAllocCtxFree(v13, *(__int64 *)&HalpNumaMemoryRanges);
      HalpNumaDynamicMemoryRanges = 1;
      *(_QWORD *)&HalpNumaMemoryRanges = v12;
    }
    v14 = 2i64 * (unsigned int)HalpNumaMemoryRangeCount;
    v15 = v16;
    *(_QWORD *)(*(_QWORD *)&HalpNumaMemoryRanges + 8 * v14) = PhysicalPageNumber;
    *(_DWORD *)(*(_QWORD *)&HalpNumaMemoryRanges + 8 * v14 + 8) = v15;
    qsort(
      *(WCHAR **)&HalpNumaMemoryRanges,
      (unsigned int)++HalpNumaMemoryRangeCount,
      (const WCHAR *)0x10,
      HalpNodeCostSort);
    *(_QWORD *)(*(_QWORD *)&HalpNumaMemoryRanges + 16i64 * (unsigned int)HalpNumaMemoryRangeCount) = -1i64;
    *(_DWORD *)(*(_QWORD *)&HalpNumaMemoryRanges + 16i64 * (unsigned int)HalpNumaMemoryRangeCount + 8) = 0;
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&HalpNumaMemoryRangeLock);
    goto LABEL_14;
  }
  v7 = *(_QWORD **)&HalpNumaMemoryRanges;
  while( *v7 != PhysicalPageNumber )
  {
    ++v9;
    v7 += 2;
    if( v9 >= HalpNumaMemoryRangeCount )
      goto LABEL_6;
  }
  v16 = *(_WORD *)(*(_QWORD *)&HalpNumaMemoryRanges + 16i64 * v9 + 8);
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&HalpNumaMemoryRangeLock);
  __writecr8(v8);
  return v5 != *(_DWORD *)(*(_QWORD *)(HalpNumaConfig + 24) + 4i64 * v16) ? 0xC0000018 : 0;
}

Referenced by:

No references.