HalpAuditEnumerateRsdtsInRange
__int64 __fastcall HalpAuditEnumerateRsdtsInRange(__int64 a1, unsigned int a2, char a3, int **a4){
UINT64 v5;
char *v7;
char *v8;
int RsdtArrayTable;
unsigned int i;
int *v12;
__int64 v13;
unsigned int v14;
int *v15;
v5 = a2;
MmMapIoSpaceEx((_LARGE_INTEGER)a1, a2, 0x204ui64);
v8 = v7;
if( v7 )
{
RsdtArrayTable = 0;
for( i = 0; i < (unsigned int)v5; i += 16 )
{
if( *(_QWORD *)&v8[i] == 0x2052545020445352i64 )
{
v12 = *a4;
if( **a4 < (unsigned int)((*a4)[1] + 1) )
{
RsdtArrayTable = HalpAuditAllocateRsdtArrayTable(a4);
if( RsdtArrayTable < 0 )
break;
v12 = *a4;
}
RsdtArrayTable = HalpAuditSelectRsdtOrXsdt((__int64)&v8[i], (__int64)&v12[8 * v12[1] + 2]);
if( RsdtArrayTable >= 0 )
{
v14 = *(_DWORD *)(v13 + 12) & 0xFFFFFFF7;
if( a3 )
v14 = *(_DWORD *)(v13 + 12) | 8;
v15 = *a4;
*(_DWORD *)(v13 + 12) = v14;
++v15[1];
}
}
}
MmUnmapIoSpace(v8, v5);
}
else
{
return(unsigned int)-1073741823;
}
return(unsigned int)RsdtArrayTable;
}Referenced by:
HalpAuditEnumerateRsdts