HalpDmaAllocateReservedMappingArray
NTSTATUS __stdcall HalpDmaAllocateReservedMappingArray(UINT64 TotalMappings, UINT64 MappingsToAllocate){
unsigned int v2;
_HALP_ALLOC_CONTEXT *v3;
VOID *v4;
unsigned int v5;
__int64 v6;
_SLIST_ENTRY *v7;
__int64 v8;
v2 = MappingsToAllocate;
if( ((unsigned __int8)&ListHead & 0xF) != 0 )
RtlRaiseStatus(-2147483646);
qword_140CF6270 = 0i64;
ListHead = 0i64;
qword_140C53C68 = HalpMmAllocCtxAlloc((_HALP_ALLOC_CONTEXT *)TotalMappings, 8i64 * (unsigned int)TotalMappings);
v4 = qword_140C53C68;
if( qword_140C53C68 )
{
v5 = 0;
if( v2 )
{
v6 = 0i64;
do
{
HalpDmaAllocateReservedMapping();
v4 = qword_140C53C68;
*(_QWORD *)((char *)qword_140C53C68 + v6) = v7;
if( !v7 )
break;
RtlpInterlockedPushEntrySList(&ListHead, v7);
v4 = qword_140C53C68;
++v5;
v8 = *(_QWORD *)((char *)qword_140C53C68 + v6);
v6 += 8i64;
*(_DWORD *)(v8 + 28) = 1;
}
while( v5 < v2 );
if( v5 )
{
dword_140CF6278 = v5;
return 0;
}
}
HalpMmAllocCtxFree(v3, v4);
}
return -1073741670;
}Referenced by:
HalpDmaAllocateMappingResources