PipIommuValidateDeviceId
NTSTATUS __fastcall PipIommuValidateDeviceId(void *a1, INT64 a2, INT64 a3){
unsigned __int16 *v3;
void *v4;
NTSTATUS result;
unsigned __int64 v6;
__int64 v7;
v3 = (unsigned __int16 *)a2;
v4 = a1;
result = *(_DWORD *)a2 - 1;
if( (unsigned int)result > 5 )
{
result = -1073741811;
}
else if( *(_DWORD *)a2 == 1 )
{
v6 = *(_QWORD *)(a2 + 16);
if( v6 && (v7 = v3[7], (_WORD)v7) )
{
if( v6 < (unsigned __int64)(v3 + 12) )
result = -1073741503;
else
result = (unsigned __int64)v3 + a3 < v6 + v7 ? 0x80000005 : 0;
}
else
{
result = -1073741306;
}
}
else
{
if( *(_DWORD *)a2 != 2 )
return result;
result = IdpValidateAcpiName(a2, a3);
}
if( result < 0 )
KeBugCheckEx(0xCAu, (PVOID)0x12, v4, v3, (PVOID)result);
return result;
}Referenced by:
PipIommuRetrieveDeviceId
PipIommuRetrieveSecondaryDeviceId