HalpIvtProcessDmarTable
NTSTATUS __stdcall HalpIvtProcessDmarTable(UINT64 a1, _BYTE *a2){
UINT64 v3;
int v4;
bool v5;
char v6;
INT64 v7;
_WORD *NextRemappingStructure;
INT64 i;
_WORD *v10;
_WORD *v11;
v3 = a1;
v4 = 0;
if( a1 )
{
if( *(_DWORD *)(a1 + 4) >= 0x40u )
{
v5 = (*(_BYTE *)(a1 + 37) & 4) == 0;
v6 = 0;
qword_140CF4F98 = a1;
if( !v5 )
{
v7 = 0i64;
while( 1 )
{
NextRemappingStructure = (_WORD *)DmrGetNextRemappingStructure(a1, v7);
if( !NextRemappingStructure )
break;
if( *NextRemappingStructure == 4 )
{
v6 = 0;
break;
}
v7 = (INT64)NextRemappingStructure;
a1 = v3;
}
}
*a2 = v6;
for( i = 0i64; ; i = (INT64)v11 )
{
v10 = (_WORD *)DmrGetNextRemappingStructure(v3, i);
v11 = v10;
if( !v10 )
break;
if( !*v10 )
v4 = HalpIvtProcessDrhdEntry(v3, (UINT64)v10);
if( v4 < 0 )
break;
}
}
else
{
return -1073741811;
}
}
return v4;
}Referenced by:
HalpIommuRegisterBuiltinPlugins