HalpIommuProcessMemoryErrata
INT64 __fastcall HalpIommuProcessMemoryErrata(UINT64 a1, INT64 a2, INT64 a3){
__int64 v3;
unsigned int i;
__int64 v6;
__int64 j;
ULONG_PTR v8;
ULONG_PTR k;
unsigned __int64 v10;
__int64 v11;
unsigned __int64 v12;
bool v13;
v3 = 0i64;
for( i = a1; (unsigned int)v3 < i; v3 = (unsigned int)(v3 + 1) )
{
v6 = *(_QWORD *)(a2 + 8 * v3);
for( j = 0i64; (unsigned int)j < *(_DWORD *)(v6 + 24); j = (unsigned int)(j + 1) )
{
v8 = v6 + 8 * (j + 2 * (j + 2));
if( !*(_BYTE *)(v8 + 16) )
{
for( k = *(_QWORD *)(a3 + 32); k != a3 + 32; k = *(_QWORD *)k )
{
v10 = *(int *)(k + 16);
if( (unsigned int)v10 <= 0x25 )
{
v11 = 0x25C0C00048i64;
if( _bittest64(&v11, v10) )
continue;
}
v12 = *(_QWORD *)(k + 24) << 12;
if( *(_QWORD *)v8 <= v12 + (*(_QWORD *)(k + 32) << 12) - 1i64 && *(_QWORD *)(v8 + 8) >= v12 )
{
v13 = HalpIommuDmaGuardTableOptIn == 0;
*(_BYTE *)(v8 + 16) = 1;
if( !v13 )
KeBugCheckEx(0x5Cu, 0x501ui64, v8, k, 0i64);
}
}
}
}
}
return 1i64;
}Referenced by:
HalpIommuProcessReservationsInternal