HalpDmaReturnToContiguousPool
void __fastcall HalpDmaReturnToContiguousPool(__int64 a1, unsigned __int64 a2, char a3){
unsigned int v5;
unsigned __int8 CurrentIrql;
struct _KLOCK_QUEUE_HANDLE LockHandle;
__int64 v8;
v8 = 0i64;
memset(&LockHandle, 0, sizeof(LockHandle));
v5 = HalpDmaTranslationEntryToIndex(a1, a2, &v8);
CurrentIrql = KeGetCurrentIrql();
if( CurrentIrql != 15 )
KeAcquireInStackQueuedSpinLock((UINT64 *)(a1 + 120), &LockHandle);
RtlClearBits(*(RTL_BITMAP **)(a1 + 16), v5, 1ui64);
if( a3 )
++*(_DWORD *)(a1 + 200);
if( CurrentIrql != 15 )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
}
}Referenced by:
HalpDmaReturnPageToOwner
HalpDmaReturnPageToSource