HalpIommuTraceFault
CHAR HalpIommuTraceFault(PINTERRUPT_INITIALIZE_IO_UNIT *a1, INT64 a2, NPTEXTMETRIC *a3, ...){
UINT8 *v3;
UINT8 *v4;
REGHANDLE v5;
_EVENT_DATA_DESCRIPTOR UserData;
INT64 *v8;
int v9;
int v10;
int *v11;
int v12;
int v13;
va_list v14;
int v15;
int v16;
void *retaddr;
PINTERRUPT_INITIALIZE_IO_UNIT *v18;
INT64 v19;
int v20;
__int64 v21;
va_list va1;
va_list va;
va_start(va1, a3);
va_start(va, a3);
v21 = va_arg(va1, _QWORD);
v3 = (UINT8 *)&retaddr;
v20 = (int)a3;
v19 = a2;
v18 = a1;
if( byte_140C4A328 )
{
v5 = qword_140C4A320;
LOBYTE(v3) = EtwEventEnabled(qword_140C4A320, &HAL_ETW_EVENT_IOMMU_FAULT);
if( (_BYTE)v3 )
{
UserData.Reserved = 0;
v10 = 0;
v13 = 0;
v16 = 0;
UserData.Ptr = (unsigned __int64)&v18;
v8 = &v19;
v11 = &v20;
UserData.Size = 8;
va_copy(v14, va);
v9 = 8;
v12 = 4;
v15 = 8;
LOBYTE(v3) = EtwWriteEx(v5, &HAL_ETW_EVENT_IOMMU_FAULT, 0i64, 0, 0, 0, 4u, &UserData);
}
}
else if( !HalpIommuGlobalEventBuffer )
{
v3 = HalpMmAllocCtxAlloc((_HALP_ALLOC_CONTEXT *)a1, 0x20ui64);
HalpIommuGlobalEventBuffer = (__int64)v3;
v4 = v3;
if( v3 )
{
*(_OWORD *)v3 = 0i64;
*((_OWORD *)v3 + 1) = 0i64;
*(_QWORD *)v3 = v18;
*((_QWORD *)v3 + 1) = v19;
*((_DWORD *)v3 + 4) = v20;
LOBYTE(v3) = v21;
*((_QWORD *)v4 + 3) = v21;
}
}
return(char)v3;
}Referenced by:
HalpIommuReportIommuFault