HalpDmaAllocateMappingResources
INT64 __fastcall HalpDmaAllocateMappingResources(){
unsigned int MaximumProcessorCount;
__int64 v1;
unsigned int v2;
__int64 v3;
__int64 v4;
__int64 v5;
__int64 v6;
__int64 v7;
__int64 v8;
_QWORD *v9;
_QWORD *v10;
UINT64 v11;
__int64 v12;
unsigned int v13;
__int64 v14;
__int64 ReservedMapping;
__int64 v16;
__int64 v18;
__int64 v19;
__int64 v20;
__int64 v21;
__int64 v22;
__int64 v23;
NTSTATUS ReservedMappingArray;
__int64 v25;
MaximumProcessorCount = KeQueryMaximumProcessorCountEx(0xFFFFu);
v1 = 8i64 * MaximumProcessorCount;
v2 = MaximumProcessorCount;
v3 = MaximumProcessorCount;
qword_140C53C60 = HalpMmAllocCtxAlloc(v4, v1);
if( !qword_140C53C60 )
return 3221225626i64;
v6 = HalpMmAllocCtxAlloc(v5, 4144 * v3);
v8 = v6;
if( !v6 )
{
v18 = qword_140C53C60;
LABEL_14:
HalpMmAllocCtxFree(v7, v18);
return 3221225626i64;
}
if( v2 )
{
v9 = (_QWORD *)qword_140C53C60;
v7 = v6 + 32;
do
{
*(_QWORD *)v7 = 0i64;
v10 = (_QWORD *)(v7 - 32);
*(_DWORD *)(v7 + 12) = 0;
*v10 = 0i64;
*(_DWORD *)(v7 - 24) = 131128;
*(_DWORD *)(v7 + 8) = 4096;
v7 += 4144i64;
*v9++ = v10;
--v3;
}
while( v3 );
}
*(_QWORD *)qword_140CF2310 = 0i64;
v11 = 4i64;
if( v2 <= 4 )
{
qword_140C53C68 = HalpMmAllocCtxAlloc(v7, v1);
if( qword_140C53C68 )
{
v13 = 0;
if( !v2 )
{
LABEL_12:
byte_140C53C58 = 1;
return 0i64;
}
v14 = 0i64;
while( 1 )
{
ReservedMapping = HalpDmaAllocateReservedMapping(v12);
v16 = qword_140C53C68;
*(_QWORD *)(v14 + qword_140C53C68) = ReservedMapping;
if( !ReservedMapping )
break;
++v13;
v14 += 8i64;
if( v13 >= v2 )
goto LABEL_12;
}
if( v13 )
{
v19 = 0i64;
v20 = v13;
do
{
v21 = *(_QWORD *)(v19 + v16);
MmFreeMappingAddress(*(PVOID *)(v21 + 16), 0x206C6148u);
HalpMmAllocCtxFree(v22, v21);
v16 = qword_140C53C68;
v19 += 8i64;
--v20;
}
while( v20 );
}
HalpMmAllocCtxFree(v12, v16);
v11 = v2;
goto LABEL_21;
}
HalpMmAllocCtxFree(v12, qword_140C53C60);
v18 = v8;
goto LABEL_14;
}
LABEL_21:
ReservedMappingArray = HalpDmaAllocateReservedMappingArray(v2, v11);
if( ReservedMappingArray < 0 )
{
HalpMmAllocCtxFree(v23, qword_140C53C60);
HalpMmAllocCtxFree(v25, v8);
}
return(unsigned int)ReservedMappingArray;
}Referenced by:
HalpDmaInit