WmipParseSysIdTable

INT64 __stdcall WmipParseSysIdTable(
        LARGE_INTEGER PhysicalAddress,
        UINT64 NumberEntries,
        SYSID_UUID *SysIdUuid,
        UINT64 *SysIdUuidCount,
        SYSID_1394 *SysId1394,
        UINT64 *SysId1394Count){
  unsigned int v6; 
  int v8; 
  char *v10; 
  unsigned int v11; 
  unsigned int v12; 
  unsigned int v13; 
  unsigned int v14; 
  char *v16; 
  unsigned int v17; 
  __int64 v18; 
  int v19; 
  char v20; 
  _BYTE *v21; 
  __int64 v22; 
  unsigned int v24; 
  unsigned int v25; 
  int v26; 
  char *v27; 
  SIZE_T NumberOfBytes; 
  unsigned int v29; 
  v29 = NumberEntries;
  v6 = 25 * NumberEntries;
  v8 = NumberEntries;
  NumberOfBytes = (unsigned int)(25 * NumberEntries);
  MmMapIoSpaceEx(PhysicalAddress, NumberOfBytes, 4ui64);
  v27 = v10;
  if( v10 )
  {
    v11 = *(_DWORD *)SysIdUuidCount;
    v12 = 0;
    v13 = 0;
    v26 = 0;
    v14 = 0;
    v16 = v10;
    v24 = v11;
    v17 = *(_DWORD *)SysId1394Count;
    v25 = *(_DWORD *)SysId1394Count;
    if( v8 )
    {
      while( v6 >= 0xA )
      {
        v18 = *(unsigned __int16 *)(v16 + 7);
        if( RtlCompareMemory(v16, "_UUID_", 6ui64) == 6 && (_DWORD)v18 == 25 )
        {
          v19 = 1;
        }
        else
        {
          if( RtlCompareMemory(v16, "_1394_", 6ui64) != 6 || (_DWORD)v18 != 17 )
          {
LABEL_25:
            v11 = v24;
            break;
          }
          v19 = 2;
        }
        if( v6 < (unsigned int)v18 )
          goto LABEL_25;
        v20 = 0;
        v21 = v16;
        v22 = v18;
        do
        {
          v20 += *v21++;
          --v22;
        }
        while( v22 );
        if( v20 )
          goto LABEL_25;
        if( v19 == 1 )
        {
          v11 = v24;
          if( v6 < 0x19 )
            break;
          ++v12;
          if( SysIdUuid && v24 >= v12 )
            *SysIdUuid++ = *(SYSID_UUID *)(v16 + 9);
        }
        else
        {
          if( v6 < 0x11 )
            goto LABEL_25;
          v11 = v24;
          ++v14;
          if( SysId1394 && v25 >= v14 )
            *SysId1394++ = *(SYSID_1394 *)(v16 + 9);
        }
        v16 += v18;
        v6 -= v18;
        if( ++v26 >= v29 )
          goto LABEL_27;
      }
      v13 = -1073741823;
LABEL_27:
      v10 = v27;
      v17 = v25;
    }
    *(_DWORD *)SysIdUuidCount = v12;
    *(_DWORD *)SysId1394Count = v14;
    if( SysIdUuid && v11 < v12 || SysId1394 && v17 < v14 )
      v13 = -1073741789;
    MmUnmapIoSpace(v10, NumberOfBytes);
  }
  else
  {
    return(unsigned int)-1073741670;
  }
  return v13;
}

Referenced by:

WmipGetSysIds