diff -r 5077ed7ddca8 -r 8e4dedc41924 Hardware/Computer.cs --- a/Hardware/Computer.cs Sun Jul 22 18:07:11 2012 +0000 +++ b/Hardware/Computer.cs Mon Jul 23 21:54:35 2012 +0000 @@ -22,13 +22,16 @@ private readonly List groups = new List(); private readonly ISettings settings; + private SMBIOS smbios; + private bool open; private bool mainboardEnabled; private bool cpuEnabled; + private bool ramEnabled; private bool gpuEnabled; private bool fanControllerEnabled; - private bool hddEnabled; + private bool hddEnabled; public Computer() { this.settings = new Settings(); @@ -76,15 +79,20 @@ if (open) return; + this.smbios = new SMBIOS(); + Ring0.Open(); Opcode.Open(); if (mainboardEnabled) - Add(new Mainboard.MainboardGroup(settings)); + Add(new Mainboard.MainboardGroup(smbios, settings)); if (cpuEnabled) Add(new CPU.CPUGroup(settings)); + if (ramEnabled) + Add(new RAM.RAMGroup(smbios, settings)); + if (gpuEnabled) { Add(new ATI.ATIGroup(settings)); Add(new Nvidia.NvidiaGroup(settings)); @@ -108,7 +116,7 @@ set { if (open && value != mainboardEnabled) { if (value) - Add(new Mainboard.MainboardGroup(settings)); + Add(new Mainboard.MainboardGroup(smbios, settings)); else RemoveType(); } @@ -131,6 +139,21 @@ } } + public bool RAMEnabled { + get { return ramEnabled; } + + [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] + set { + if (open && value != ramEnabled) { + if (value) + Add(new RAM.RAMGroup(smbios, settings)); + else + RemoveType(); + } + ramEnabled = value; + } + } + public bool GPUEnabled { get { return gpuEnabled; } @@ -336,6 +359,8 @@ Opcode.Close(); Ring0.Close(); + this.smbios = null; + open = false; }