/// <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); }
/// <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); } }
/// <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);
/// <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()); }
/// <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>()); }