HalpIommuDereferenceHardwareDomain
__int64 __fastcall HalpIommuDereferenceHardwareDomain(__int64 a1, INT64 *a2){
unsigned __int64 v4;
INT64 v5;
INT64 **v6;
_HALP_ALLOC_CONTEXT *v7;
__int64 result;
v4 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 16));
if( a1 != SortKey )
--a2[2];
if( !a2[2] )
{
v5 = *a2;
v6 = (INT64 **)a2[1];
if( *(INT64 **)(*a2 + 8) != a2 || *v6 != a2 )
__fastfail(3u);
*v6 = (INT64 *)v5;
*(_QWORD *)(v5 + 8) = v6;
HalpIommuFreeDomain((INT64 *)a2[3], a2 + 4);
HalpMmAllocCtxFree(v7, a2);
}
KxReleaseSpinLock((UINT64 *)(a1 + 16));
result = (unsigned int)KiIrqlFlags;
__writecr8(v4);
return result;
}Referenced by:
HalpIommuJoinDmaDomain
HalpIommuLeaveDmaDomain