HalpDmaFreeLa
NTSTATUS __fastcall HalpDmaFreeLa(PDMA_ADAPTER DmaAdapter, _DMA_OPERATIONS *a2){
_DMA_OPERATIONS *DmaOperations;
NTSTATUS result;
__int128 *i;
__int128 v7;
DmaOperations = DmaAdapter[31].DmaOperations;
v7 = *(_OWORD *)&DmaAdapter[15].DmaOperations;
HalpIommuDomainUnmapLogicalRange(DmaOperations->FlushAdapterBuffers, a2);
if( a2 == DmaAdapter[34].DmaOperations )
return HalpDmaReturnEmergencyLogicalAddressResources(DmaAdapter);
result = 0;
for( i = &v7; !*(_QWORD *)i || a2 != *(_DMA_OPERATIONS **)(*(_QWORD *)i + 24i64); i = (__int128 *)((char *)i + 8) )
{
if( (unsigned int)++result >= 2 )
return HalpDomainLaDelete((INT64)DmaOperations, (UINT64)a2);
}
return result;
}Referenced by:
HalFlushAdapterBuffersEx
IoFlushAdapterBuffersV3