IvtProcessDeviceExceptions
NTSTATUS __stdcall IvtProcessDeviceExceptions(INT64 a1){
unsigned int *v2;
int v3;
unsigned int i;
INT64 *ExceptionList;
INT64 j;
UINT64 v7;
NTSTATUS result;
UINT64 v9;
INT64 v10;
UINT64 v11;
INT64 v12;
INT64 v13;
INT64 v14;
INT64 v15[10];
memset(v15, 0i64, sizeof(v15));
v2 = *(unsigned int **)(a1 + 296);
v3 = 0;
for( i = 0; i < *v2; ++i )
{
v3 = HalpIvtpInitializeReservedDomain(a1, (INT64)&v2[4 * i + 2]);
if( v3 < 0 )
break;
v2 = *(unsigned int **)(a1 + 296);
}
if( v3 >= 0 )
{
ExceptionList = HalpIommuGetExceptionList();
for( j = *ExceptionList; (INT64 *)j != ExceptionList; j = *(_QWORD *)j )
{
if( *(_DWORD *)(j + 16) == *(_DWORD *)(a1 + 212) )
{
memset(v15, 0i64, sizeof(v15));
v7 = *(_QWORD *)(j + 24);
v15[0] = 1i64;
result = IvtAllocateContextTable(a1, v7);
v3 = result;
if( result < 0 )
return result;
v11 = *(unsigned int *)(j + 24);
if( (*(_DWORD *)(a1 + 184) & 0x1000000) != 0 )
{
LODWORD(v14) = 1;
IvtUpdateExtendedContextEntry(a1, v11, v9, v10, (INT64)v15, v13, v14, 0i64);
}
else
{
LODWORD(v12) = 1;
IvtUpdateContextEntry(a1, v11, (INT64)v15, v10, v12, 0i64);
}
}
}
}
return v3;
}Referenced by:
IvtInitializeIommu