HalpMmAllocCtxFree
void __fastcall HalpMmAllocCtxFree(__int64 a1, __int64 a2){
unsigned __int8 v3;
unsigned __int64 v4;
__int64 i;
UINT64 v6;
__int64 v7;
unsigned int *v8;
__int64 v9;
__int64 *v10;
unsigned int v11;
int *v12;
int v13;
int *v14;
bool j;
__int64 v16;
__int64 v17;
KeAcquireSpinLockRaiseToDpc(&qword_140C4B790, a2);
v4 = v3;
if( (a2 & 0xFFF) == 0 )
{
for( i = HalpNPPoolAllocCtx; (__int64 *)i != &HalpNPPoolAllocCtx; i = *(_QWORD *)i )
{
if( a2 == *(_QWORD *)(i + 16) )
{
v6 = *(unsigned int *)(i + 28);
LODWORD(v7) = 0;
*(_DWORD *)(i + 28) = 0;
goto LABEL_3;
}
}
}
i = *(_QWORD *)(a2 - 16);
v6 = *(unsigned int *)(a2 - 8);
v7 = (a2 - 16 - *(_QWORD *)(i + 16)) / 16;
LABEL_3:
v8 = (unsigned int *)(i + 32);
RtlClearBits((RTL_BITMAP *)(i + 32), (unsigned int)v7, v6);
*(_DWORD *)(i + 24) = v7;
v9 = *(_QWORD *)i;
v10 = *(__int64 **)(i + 8);
if( *(_QWORD *)(*(_QWORD *)i + 8i64) != i || *v10 != i )
goto LABEL_28;
*v10 = v9;
*(_QWORD *)(v9 + 8) = v10;
v11 = *v8;
if( !*v8 )
{
LABEL_13:
v16 = HalpNPPoolAllocCtx;
if( *(__int64 **)(HalpNPPoolAllocCtx + 8) == &HalpNPPoolAllocCtx )
{
*(_QWORD *)i = HalpNPPoolAllocCtx;
*(_QWORD *)(i + 8) = &HalpNPPoolAllocCtx;
*(_QWORD *)(v16 + 8) = i;
HalpNPPoolAllocCtx = i;
i = 0i64;
goto LABEL_15;
}
LABEL_28:
__fastfail(3u);
}
if( v11 <= 1 )
{
if( _bittest(*(const signed __int32 **)(i + 40), 0) )
goto LABEL_13;
}
else
{
v12 = *(int **)(i + 40);
v13 = *v12;
v14 = &v12[(unsigned __int64)(v11 - 1) >> 5];
if( v12 == v14 )
{
if( (v13 & (0xFFFFFFFF >> (32 - v11))) != 0 )
goto LABEL_13;
}
else
{
for( j = v13 == 0; ; j = *v12 == 0 )
{
if( !j )
goto LABEL_13;
if( ++v12 == v14 )
break;
}
if( ((0xFFFFFFFF >> ~(v11 - 1)) & *v12) != 0 )
goto LABEL_13;
}
}
LABEL_15:
KxReleaseSpinLock(&qword_140C4B790);
__writecr8(v4);
if( i )
HalpMmAllocCtxBufferCleanup(v17, (_QWORD *)i);
}Referenced by:
Amd64AddProfileSource
Amd64RemoveProfileSource
EmonAddProfileSource
EmonAllocateResources
EmonReleaseProfileResources
EmonRemoveProfileSource
ExtEnvFreeMemory
ExtEnvFreePhysicalMemory
HalAllocateCommonBufferVector
HalFreeCommonBufferVector
HalpAcpiPopulateTableCacheWork
HalpAllocatePmcCounterSet
HalpBuildResumeStructures
HalpDmaAllocateEmergencyResources
HalpDmaAllocateLocalContiguousPool
HalpDmaAllocateLocalScatterPool
HalpDmaAllocateMapRegisters
HalpDmaAllocateMappingResources
HalpDmaAllocateNewTranslationBuffer
HalpDmaAllocateReservedMapping
HalpDmaAllocateReservedMappingArray
HalpDmaAllocateTranslationBuffer
HalpDmaDereferenceDomainObject
HalpDmaFreeChildAdapter
HalpDmaFreeTranslationBuffer
HalpDmaInitializeMasterAdapter
HalpFreeNvsBuffers
HalpFreePmcCounterSet
HalpFreeResumeStructures
HalpIommuAllocateDmaDomain
HalpIommuBlockDevice
HalpIommuCleanupPageTable
HalpIommuCloneDeviceId
HalpIommuCreateDevice
HalpIommuCreateDmarPageTable
HalpIommuCreateIncreaseAliasTrack
HalpIommuDeleteDevice
HalpIommuDereferenceHardwareDomain
HalpIommuFreeDeviceId
HalpIommuFreeDmaDomain
HalpIommuGetHardwareDomain
HalpLaDeleteBlt
HalpLaFreeState
HalpLaInitializeState
HalpLapDeleteSubtree
HalpLapSplitNode
HalpMapCR3Ex
HalpMceInitializeErrorPacket
HalpMmFreeTiledMemoryMap
HalpNumaAddRangeProximity
IommuDisableDevicePasid
IommuDomainDetachDevice
IommuEnableDevicePasid
IommuGetLibraryContext
IommuMapDevice
IommuUnmapDevice
IommupGetSystemContext