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