HalpDmaAllocateScatterPagesFromScatterPoolAtHighLevelV2
NTSTATUS __stdcall HalpDmaAllocateScatterPagesFromScatterPoolAtHighLevelV2(INT64 a1, INT64 a2, UINT64 a3, UINT64 *a4){
unsigned int v4;
__int64 v5;
__int64 v6;
__int64 v7;
__int64 v8;
unsigned int v9;
unsigned int v10;
NTSTATUS result;
v4 = *(_DWORD *)(a2 + 32);
v5 = 0i64;
v6 = *(_QWORD *)(a2 + 24);
v7 = 0i64;
v8 = 0i64;
v9 = 0;
v10 = 0;
if( !v4 )
goto LABEL_15;
do
{
if( v9 >= (unsigned int)a3 )
break;
if( (*(_QWORD *)(v6 + 48) & 0xFFFFFFFFFFFFF000ui64) != 0 )
{
if( v5 )
*(_QWORD *)(v8 + 8) = v6;
else
v5 = v6;
++v9;
v8 = v6;
}
else
{
if( v7 )
*(_QWORD *)(v7 + 8) = v6;
else
*(_QWORD *)(a2 + 24) = v6;
v7 = v6;
}
v6 = *(_QWORD *)(v6 + 8);
++v10;
}
while( v10 < v4 );
if( v7 )
*(_QWORD *)(v7 + 8) = v6;
else
LABEL_15:
*(_QWORD *)(a2 + 24) = v6;
*(_DWORD *)(a2 + 32) -= v9;
result = v5;
*(_DWORD *)a4 = v9;
return result;
}Referenced by:
HalpDmaAllocateScatterPagesFromScatterPoolAtHighLevel