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