Exemplo n.º 1
0
        /// <summary>
        /// Gets a value containing the raw <b>SMBIOS</b> data.
        /// </summary>
        /// <param name="options">Connection options for remote use</param>
        /// <returns>
        /// The raw <b>SMBIOS</b> data.
        /// </returns>
        public byte[] GetSmbiosDataArray(ISmbiosConnectOptions options = null)
        {
            ManagementScope scope;

            if (options != null)
            {
                var connectionOptions = new ConnectionOptions
                {
                    Username       = options.UserName,
                    Authentication = AuthenticationLevel.Packet,
                    Impersonation  = ImpersonationLevel.Impersonate,
                    SecurePassword = options.Password.ToSecureString()
                };

                scope = new ManagementScope($"\\\\{options.MachineNameOrIpAddress}\\root\\cimv2", connectionOptions);

                try
                {
                    scope.Connect();
                }
                catch
                {
                    return(Array.Empty <byte>());
                }
            }
            else
            {
                string[] tableNames = Firmware.EnumerateTables(FirmwareProvider.RSMB);
                if (tableNames.Any())
                {
                    return(Firmware.GetTable(FirmwareProvider.RSMB, tableNames[0]));
                }

                scope = new ManagementScope("root\\WMI");
            }

            var result = Array.Empty <byte>();
            var query  = new ObjectQuery("SELECT * FROM MSSmBios_RawSMBiosTables");

            using (var wmi = new ManagementObjectSearcher(scope, query))
            {
                foreach (var mos in wmi.Get())
                {
                    var queryObj = (ManagementObject)mos;
                    result = (byte[])queryObj["SMBiosData"];
                }
            }

            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Prevents a default instance of the <see cref="SMBIOS"/> class from being created. Retrieves the <see cref="SMBIOS"/> information by WMI.
        /// </summary>
        private SMBIOS(ISmbiosConnectOptions options)
        {
            _options = options;

            var rawSmbiosTable = SmbiosOperations.Instance.GetSmbiosDataArray(options);

            if (rawSmbiosTable.Length > 0)
            {
                _majorVersion = rawSmbiosTable[0x01];
                _minorVersion = rawSmbiosTable[0x02];
                Lenght        = rawSmbiosTable.Length - 0x08;

                byte[] smbiosData = rawSmbiosTable.Extract(0x08, Lenght).ToArray();
                ToRawTables(smbiosData);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Gets a value containing the raw <b>SMBIOS</b> data.
 /// </summary>
 /// <param name="options">Connection options for remote use</param>
 /// <returns>
 /// The raw <b>SMBIOS</b> data.
 /// </returns>
 public byte[] GetSmbiosDataArray(ISmbiosConnectOptions options = null) => _operations.GetSmbiosDataArray(options);
Exemplo n.º 4
0
        /// <summary>
        /// Gets a value containing the raw <b>SMBIOS</b> data.
        /// </summary>
        /// <param name="options">Connection options for remote use</param>
        /// <returns>
        /// The raw <b>SMBIOS</b> data.
        /// </returns>
        public byte[] GetSmbiosDataArray(ISmbiosConnectOptions options = null)
        {
            var startInfo = new ProcessStartInfo()
            {
                FileName  = MacProgram.IoReg.ToString(),
                Arguments = "-lw0 -n \"AppleSMBIOS\" -r | grep \"SMBIOS\"",

                /*Arguments = "-w0 -c \"AppleSMBIOS\" -r",*/
                UseShellExecute        = false,
                CreateNoWindow         = false,
                RedirectStandardOutput = true,
                RedirectStandardError  = true
            };

            var process = new Process()
            {
                StartInfo = startInfo
            };

            string ioAppleSmbios = string.Empty;

            process.OutputDataReceived += (sender, data) =>
            {
                if (data != null)
                {
                    if (data.Data != null)
                    {
                        if (data.Data.Contains("\"SMBIOS\" = <"))
                        {
                            string[] splitted  = data.Data.Split(new[] { "\"SMBIOS\" = " }, StringSplitOptions.RemoveEmptyEntries);
                            string   rawSmbios = splitted[1].Replace("<", string.Empty).Replace(">", string.Empty);
                            ioAppleSmbios = rawSmbios;
                        }
                    }
                }
            };

            process.ErrorDataReceived += (sender, data) =>
            {
            };

            try
            {
                process.Start();
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();
                process.WaitForExit();
            }
            catch
            {
            }

            var item = new List <byte>();

            for (int i = 0; i <= ioAppleSmbios.Length - 1; i += 2)
            {
                item.Add(Convert.ToByte(ioAppleSmbios.Substring(i, 2), 16));
            }

            return((byte[])item.ToArray().Clone());
        }
Exemplo n.º 5
0
 /// <summary>
 /// Gets a value containing the raw <b>SMBIOS</b> data.
 /// </summary>
 /// <param name="options">Connection options for remote use</param>
 /// <returns>
 /// The raw <b>SMBIOS</b> data.
 /// </returns>
 public byte[] GetSmbiosDataArray(ISmbiosConnectOptions options = null)
 {
     return(Array.Empty <byte>());
 }