HalpMapTransferV2
__int64 __fastcall HalpMapTransferV2(__int64 a1, __int64 a2, _QWORD *a3, __int64 a4, unsigned int *a5, char a6){
__int64 result;
bool v11;
char v12;
__int64 v13;
unsigned int v14;
__int64 v15;
__int64 *v16;
__int64 v17;
struct _KLOCK_QUEUE_HANDLE LockHandle;
_QWORD *v19;
result = 0i64;
v17 = 0i64;
memset(&LockHandle, 0, sizeof(LockHandle));
if( *a5 )
{
v11 = !a1 || *(_BYTE *)(a1 + 433);
v19 = (_QWORD *)a3[7];
if( a1 && *(_BYTE *)(a1 + 434) )
{
v12 = a6;
HalpDmaMapScatterTransferV2(a1, a2, (__int64)a3, a4, a5, a6, &v17);
}
else
{
v12 = a6;
v16 = &v17;
HalpDmaMapContiguousTransferV2(a1, a2, (INT64)a3, a4);
}
v14 = *a5;
if( !v11 )
{
if( !v12 )
{
if( *(_BYTE *)(a1 + 436) )
HalpDmaZeroMapBuffers(v13, v19, a4 & 0xFFF, v14);
}
KeAcquireInStackQueuedSpinLock((UINT64 *)(*(_QWORD *)(a1 + 152) + 120i64), &LockHandle);
LOBYTE(v15) = v12;
(*(void(__fastcall **)(_QWORD, __int64, __int64, __int64, __int64, unsigned int, __int64 *))(DmaDispatch + 40))(
*(_QWORD *)(a1 + 424),
a2,
v15,
a4,
v17,
v14,
v16);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
}
return v17;
}
return result;
}Referenced by:
IoMapTransferInternal