Fixed Issue 387. The new implementation does not try to start a ring 0 driver that already exists, but could not be opened. It tries to delete the driver and install it new. The driver is now stored temporarily in the application folder. The driver is not correctly removed on system shutdown.
3 This Source Code Form is subject to the terms of the Mozilla Public
4 License, v. 2.0. If a copy of the MPL was not distributed with this
5 file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 Copyright (C) 2009-2011 Michael Möller <mmoeller@openhardwaremonitor.org>
12 using OpenHardwareMonitor.Collections;
14 namespace OpenHardwareMonitor.Hardware {
15 internal abstract class Hardware : IHardware {
17 private readonly Identifier identifier;
18 protected readonly string name;
19 private string customName;
20 protected readonly ISettings settings;
21 protected readonly ListSet<ISensor> active = new ListSet<ISensor>();
23 public Hardware(string name, Identifier identifier, ISettings settings) {
24 this.settings = settings;
25 this.identifier = identifier;
27 this.customName = settings.GetValue(
28 new Identifier(Identifier, "name").ToString(), name);
31 public IHardware[] SubHardware {
32 get { return new IHardware[0]; }
35 public virtual IHardware Parent {
39 public virtual ISensor[] Sensors {
40 get { return active.ToArray(); }
43 protected virtual void ActivateSensor(ISensor sensor) {
44 if (active.Add(sensor))
45 if (SensorAdded != null)
49 protected virtual void DeactivateSensor(ISensor sensor) {
50 if (active.Remove(sensor))
51 if (SensorRemoved != null)
52 SensorRemoved(sensor);
60 if (!string.IsNullOrEmpty(value))
64 settings.SetValue(new Identifier(Identifier, "name").ToString(),
69 public Identifier Identifier {
75 #pragma warning disable 67
76 public event SensorEventHandler SensorAdded;
77 public event SensorEventHandler SensorRemoved;
78 #pragma warning restore 67
81 public abstract HardwareType HardwareType { get; }
83 public virtual string GetReport() {
87 public abstract void Update();
89 public event HardwareEventHandler Closing;
91 public virtual void Close() {
96 public void Accept(IVisitor visitor) {
98 throw new ArgumentNullException("visitor");
99 visitor.VisitHardware(this);
102 public virtual void Traverse(IVisitor visitor) {
103 foreach (ISensor sensor in active)
104 sensor.Accept(visitor);