コード例 #1
0
        public SMBios()
        {
            if (Software.OperatingSystem.IsUnix)
            {
                _raw = null;

                string boardVendor  = ReadSysFs("/sys/class/dmi/id/board_vendor");
                string boardName    = ReadSysFs("/sys/class/dmi/id/board_name");
                string boardVersion = ReadSysFs("/sys/class/dmi/id/board_version");
                Board = new BaseBoardInformation(boardVendor, boardName, boardVersion, null);

                string systemVendor   = ReadSysFs("/sys/class/dmi/id/sys_vendor");
                string productName    = ReadSysFs("/sys/class/dmi/id/product_name");
                string productVersion = ReadSysFs("/sys/class/dmi/id/product_version");
                System = new SystemInformation(systemVendor, productName, productVersion, null, null);

                string biosVendor  = ReadSysFs("/sys/class/dmi/id/bios_vendor");
                string biosVersion = ReadSysFs("/sys/class/dmi/id/bios_version");
                string biosDate    = ReadSysFs("/sys/class/dmi/id/bios_date");
                Bios = new BiosInformation(biosVendor, biosVersion, biosDate);

                MemoryDevices = new MemoryDevice[0];
            }
            else
            {
                List <MemoryDevice>   memoryDeviceList   = new();
                List <ProcessorCache> processorCacheList = new();

                string[] tables = FirmwareTable.EnumerateTables(Kernel32.Provider.RSMB);
                if (tables is { Length : > 0 })
コード例 #2
0
        public SMBios()
        {
            if (Software.OperatingSystem.IsUnix)
            {
                _raw = null;

                string boardVendor  = ReadSysFs("/sys/class/dmi/id/board_vendor");
                string boardName    = ReadSysFs("/sys/class/dmi/id/board_name");
                string boardVersion = ReadSysFs("/sys/class/dmi/id/board_version");
                Board = new BaseBoardInformation(boardVendor, boardName, boardVersion, null);

                string systemVendor   = ReadSysFs("/sys/class/dmi/id/sys_vendor");
                string productName    = ReadSysFs("/sys/class/dmi/id/product_name");
                string productVersion = ReadSysFs("/sys/class/dmi/id/product_version");
                System = new SystemInformation(systemVendor, productName, productVersion, null, null);

                string biosVendor  = ReadSysFs("/sys/class/dmi/id/bios_vendor");
                string biosVersion = ReadSysFs("/sys/class/dmi/id/bios_version");
                string biosDate    = ReadSysFs("/sys/class/dmi/id/bios_date");
                Bios = new BiosInformation(biosVendor, biosVersion, biosDate);

                MemoryDevices = new MemoryDevice[0];
            }
            else
            {
                List <MemoryDevice>   memoryDeviceList   = new List <MemoryDevice>();
                List <ProcessorCache> processorCacheList = new List <ProcessorCache>();

                _raw = null;
                byte majorVersion = 0;
                byte minorVersion = 0;

                try
                {
                    ManagementObjectCollection collection;
                    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSSMBios_RawSMBiosTables"))
                    {
                        collection = searcher.Get();
                    }

                    foreach (ManagementBaseObject mo in collection)
                    {
                        _raw         = (byte[])mo["SMBiosData"];
                        majorVersion = (byte)mo["SmbiosMajorVersion"];
                        minorVersion = (byte)mo["SmbiosMinorVersion"];

                        break;
                    }
                }
                catch
                { }

                if (majorVersion > 0 || minorVersion > 0)
                {
                    _version = new Version(majorVersion, minorVersion);
                }

                if (_raw != null && _raw.Length > 0)
                {
                    int  offset = 0;
                    byte type   = _raw[offset];
                    while (offset + 4 < _raw.Length && type != 127)
                    {
                        type = _raw[offset];
                        int    length = _raw[offset + 1];
                        ushort handle = (ushort)((_raw[offset + 2] << 8) | _raw[offset + 3]);

                        if (offset + length > _raw.Length)
                        {
                            break;
                        }


                        byte[] data = new byte[length];
                        Array.Copy(_raw, offset, data, 0, length);
                        offset += length;

                        List <string> stringsList = new List <string>();
                        if (offset < _raw.Length && _raw[offset] == 0)
                        {
                            offset++;
                        }

                        while (offset < _raw.Length && _raw[offset] != 0)
                        {
                            StringBuilder sb = new StringBuilder();
                            while (offset < _raw.Length && _raw[offset] != 0)
                            {
                                sb.Append((char)_raw[offset]);
                                offset++;
                            }

                            offset++;
                            stringsList.Add(sb.ToString());
                        }

                        offset++;
                        switch (type)
                        {
                        case 0x00:
                            Bios = new BiosInformation(type, handle, data, stringsList.ToArray());
                            break;

                        case 0x01:
                            System = new SystemInformation(type, handle, data, stringsList.ToArray());
                            break;

                        case 0x02:
                            Board = new BaseBoardInformation(type, handle, data, stringsList.ToArray());
                            break;

                        case 0x03:
                            Chassis = new ChassisInformation(type, handle, data, stringsList.ToArray());
                            break;

                        case 0x04:
                            Processor = new ProcessorInformation(type, handle, data, stringsList.ToArray());
                            break;

                        case 0x07:
                            ProcessorCache c = new ProcessorCache(type, handle, data, stringsList.ToArray());
                            processorCacheList.Add(c);
                            break;

                        case 0x11:
                            MemoryDevice m = new MemoryDevice(type, handle, data, stringsList.ToArray());
                            memoryDeviceList.Add(m);
                            break;
                        }
                    }
                }

                MemoryDevices   = memoryDeviceList.ToArray();
                ProcessorCaches = processorCacheList.ToArray();
            }
        }