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