HalpDmaControllerInitializeController
NTSTATUS __stdcall HalpDmaControllerInitializeController(INT64 a1){
NTSTATUS result;
unsigned int v3;
__int64 v4;
__int64 i;
__int64 v6;
__int64 v7;
VOID *ContiguousNodeMemory;
__int64 v9;
__int64 v10;
UINT64 Protect;
UINT64 PreferredNode;
result = (*(__int64(__fastcall **)(_QWORD))(a1 + 80))(*(_QWORD *)(a1 + 64));
v3 = *(_DWORD *)(a1 + 76);
if( v3 < 0x40 )
v4 = (1i64 << v3) - 1;
else
v4 = -1i64;
for( i = 0i64; (unsigned int)i < *(_DWORD *)(a1 + 44); i = (unsigned int)(i + 1) )
{
v6 = *(_QWORD *)(a1 + 56);
v7 = 160 * i;
result = *(_DWORD *)(v6 + 160 * i + 120);
if( result )
{
LODWORD(PreferredNode) = 0x80000000;
LODWORD(Protect) = 516;
ContiguousNodeMemory = MmAllocateContiguousNodeMemory(
(unsigned int)result,
0i64,
(_LARGE_INTEGER)v4,
0i64,
Protect,
PreferredNode);
*(_QWORD *)(v6 + v7 + 128) = ContiguousNodeMemory;
LODWORD(v9) = MmGetPhysicalAddress((UINT64)ContiguousNodeMemory);
v10 = *(_QWORD *)(v6 + v7 + 128);
*(_QWORD *)(v6 + v7 + 136) = v9;
result = (*(__int64(__fastcall **)(_QWORD, _QWORD, __int64, __int64))(a1 + 144))(
*(_QWORD *)(a1 + 64),
(unsigned int)i,
v10,
v9);
}
}
return result;
}Referenced by:
HalpDmaInitializeControllers