HalDmaFreeCrashDumpRegistersEx
NTSTATUS __fastcall HalDmaFreeCrashDumpRegistersEx(INT64 a1, INT64 a2){
__int64 v3;
int v4;
int v5;
__int64 v7;
char v8;
_DWORD *v9;
char v10;
_QWORD *v12;
__int64 v13;
_QWORD *v14;
_HALP_DMA_TRANSLATION_ENTRY *v15;
__int64 v16;
INT64 v17;
if( !a1 || (unsigned int)a2 > 1 )
return -1073741811;
v3 = (int)a2;
v4 = *(_DWORD *)(a1 + 4i64 * (int)a2 + 272);
if( !v4 )
return -1073741823;
v5 = v4 - 1;
*(_DWORD *)(a1 + 4i64 * (int)a2 + 272) = v5;
if( !v5 )
{
v7 = 2i64;
if( *(_DWORD *)(a1 + 4i64 * (int)a2 + 264) )
{
v15 = *(_HALP_DMA_TRANSLATION_ENTRY **)(a1 + 8i64 * (int)a2 + 248);
if( v15 )
{
v15->NextMapping = v15;
v15 = *(_HALP_DMA_TRANSLATION_ENTRY **)(a1 + 8 * v3 + 248);
}
if( *(_DWORD *)(a1 + 512) == 2 )
{
_mm_lfence();
v16 = *(_QWORD *)(a1 + 8 * v3 + 248);
v17 = *(_QWORD *)(a1 + 504);
HalpIommuDomainUnmapLogicalRange(*(PVOID *)(v17 + 40), *(PVOID *)(v16 + 24));
HalpDomainLaDelete(v17, *(_QWORD *)(v16 + 24));
v15 = *(_HALP_DMA_TRANSLATION_ENTRY **)(a1 + 8 * v3 + 248);
}
HalpDmaFreeMapRegisters((_ADAPTER_OBJECT *)a1, v15, *(unsigned int *)(a1 + 4 * v3 + 264));
*(_QWORD *)(a1 + 8 * v3 + 248) = 0i64;
*(_DWORD *)(a1 + 4 * v3 + 264) = 0;
}
v8 = 1;
v9 = (_DWORD *)(a1 + 272);
do
{
v10 = 0;
if( *v9++ == 0 )
v10 = v8;
v8 = v10;
--v7;
}
while( v7 );
if( v10 )
{
v12 = (_QWORD *)(a1 + 280);
v13 = *v12;
if( *(_QWORD **)(*v12 + 8i64) != v12 || (v14 = (_QWORD *)v12[1], (_QWORD *)*v14 != v12) )
__fastfail(3u);
*v14 = v13;
*(_QWORD *)(v13 + 8) = v14;
}
}
return 0;
}Referenced by:
No references.