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.