WmipGetSysIds

NTSTATUS __stdcall WmipGetSysIds(
        _SYSID_UUID **SysIdUuid,
        UINT64 *SysIdUuidCount,
        _SYSID_1394 **SysId1394,
        UINT64 *SysId1394Count){
  _SYSID_UUID **v7; 
  NTSTATUS SMBiosStructure; 
  __int64 v9; 
  unsigned int v10; 
  VOID **v11; 
  VOID **v12; 
  NTSTATUS result; 
  _SYSID_1394 *v14; 
  char *v15; 
  VOID **PoolWithTag; 
  UINT64 SysIdUuidCounta; 
  NTSTATUS v18; 
  char SysIdBiosRevision[4]; 
  UINT64 NumberEntries; 
  _LARGE_INTEGER SysidTablePhysicalAddress; 
  VOID *StructPtr; 
  VOID *MapPtr; 

  v7 = SysIdUuid;
  SysidTablePhysicalAddress.QuadPart = 0i64;
  LODWORD(NumberEntries) = 0;
  KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
  if( !*(&ExBootDevicesRemovedEvent + 3272) )
  {
    if( WmipFindSysIdTable(&SysidTablePhysicalAddress, (UINT8 *)SysIdBiosRevision, &NumberEntries) < 0 )
    {
      MapPtr = 0i64;
      StructPtr = 0i64;
      HIDWORD(NumberEntries) = 0;
      SMBiosStructure = WmipFindSMBiosStructure(1u, &StructPtr, &MapPtr, (UINT64 *)((char *)&NumberEntries + 4));
      v18 = SMBiosStructure;
      if( SMBiosStructure >= 0 )
      {
        *(&ExBootDevicesRemovedEvent + 412) = 0i64;
        *(&ExBootDevicesRemovedEvent + 826) = 0;
        v15 = (char *)StructPtr;
        if( *((_BYTE *)StructPtr + 1) <= 8u )
        {
          *(&ExBootDevicesRemovedEvent + 410) = 0i64;
          *(&ExBootDevicesRemovedEvent + 822) = 0;
        }
        else
        {
          PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x10ui64, 1936289111i64);
          if( PoolWithTag )
          {
            *(_OWORD *)PoolWithTag = *(_OWORD *)(v15 + 8);
            *(&ExBootDevicesRemovedEvent + 822) = 1;
            *(&ExBootDevicesRemovedEvent + 410) = PoolWithTag;
            v18 = 0;
          }
          else
          {
            ExFreePoolWithTag(0i64, 0);
            v18 = -1073741823;
          }
        }
        if( MapPtr )
          MmUnmapIoSpace(MapPtr, HIDWORD(NumberEntries));
        ExReleaseResourceLite((PERESOURCE)&ExBootDevicesRemovedEvent + 32);
        KeLeaveCriticalRegionThread(KeGetCurrentThread());
        SMBiosStructure = v18;
      }
    }
    else
    {
      SysIdUuidCounta = 0i64;
      SMBiosStructure = WmipParseSysIdTable(
                          SysidTablePhysicalAddress,
                          (unsigned int)NumberEntries,
                          0i64,
                          &SysIdUuidCounta,
                          0i64,
                          (UINT64 *)((char *)&SysIdUuidCounta + 4));
      if( SMBiosStructure >= 0 )
      {
        v9 = (unsigned int)(16 * SysIdUuidCounta);
        v10 = v9 + 8 * HIDWORD(SysIdUuidCounta);
        if( v10 )
        {
          v11 = ExAllocatePoolWithTag(1ui64, v10, 1936289111i64);
          v12 = v11;
          if( !v11 )
          {
            KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
            return -1073741670;
          }
          v14 = (_SYSID_1394 *)((char *)v11 + v9);
          SMBiosStructure = WmipParseSysIdTable(
                              SysidTablePhysicalAddress,
                              (unsigned int)NumberEntries,
                              (_SYSID_UUID *)v11,
                              &SysIdUuidCounta,
                              v14,
                              (UINT64 *)((char *)&SysIdUuidCounta + 4));
          if( SMBiosStructure < 0 )
          {
            ExFreePoolWithTag(v12, 0);
          }
          else
          {
            *(&ExBootDevicesRemovedEvent + 410) = v12;
            *(&ExBootDevicesRemovedEvent + 822) = SysIdUuidCounta;
            *(&ExBootDevicesRemovedEvent + 412) = v14;
            *(&ExBootDevicesRemovedEvent + 826) = HIDWORD(SysIdUuidCounta);
          }
        }
      }
    }
    *(&ExBootDevicesRemovedEvent + 3272) = SMBiosStructure != -1073741670;
    *(&ExBootDevicesRemovedEvent + 823) = SMBiosStructure;
    v7 = SysIdUuid;
  }
  KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
  result = *(&ExBootDevicesRemovedEvent + 823);
  if( *(&ExBootDevicesRemovedEvent + 823) >= 0 )
  {
    *v7 = (_SYSID_UUID *)*(&ExBootDevicesRemovedEvent + 410);
    *(_DWORD *)SysIdUuidCount = *(&ExBootDevicesRemovedEvent + 822);
    *SysId1394 = (_SYSID_1394 *)*(&ExBootDevicesRemovedEvent + 412);
    *(_DWORD *)SysId1394Count = *(&ExBootDevicesRemovedEvent + 826);
  }
  return result;
}

Referenced by:

WmipQueryWmiDataBlock