HalpDmaReturnToScatterPool

__int64 __fastcall HalpDmaReturnToScatterPool(__int64 a1, __int64 a2, char a3){
  unsigned __int8 CurrentIrql; 
  __int64 result; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  memset(&LockHandle, 0, sizeof(LockHandle));
  CurrentIrql = KeGetCurrentIrql();
  if( CurrentIrql != 15 )
    KeAcquireInStackQueuedSpinLock((UINT64 *)(a1 + 120), &LockHandle);
  result = *(_QWORD *)(a1 + 24);
  *(_QWORD *)(a2 + 8) = result;
  ++*(_DWORD *)(a1 + 32);
  *(_QWORD *)(a1 + 24) = a2;
  if( a3 )
    ++*(_DWORD *)(a1 + 208);
  if( CurrentIrql != 15 )
  {
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    result = (unsigned int)KiIrqlFlags;
    __writecr8(LockHandle.OldIrql);
  }
  return result;
}

Referenced by:

HalpDmaReturnPageToOwner
HalpDmaReturnPageToSource