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