diff --git a/Hardware/KernelDriver.cs b/Hardware/KernelDriver.cs index 124fc19..5b5501b 100644 --- a/Hardware/KernelDriver.cs +++ b/Hardware/KernelDriver.cs @@ -4,7 +4,7 @@ License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - Copyright (C) 2010 Michael Möller + Copyright (C) 2010-2012 Michael Möller */ @@ -25,12 +25,14 @@ namespace OpenHardwareMonitor.Hardware { this.id = id; } - public bool Install(string path) { + public bool Install(string path, out string errorMessage) { IntPtr manager = NativeMethods.OpenSCManager(null, null, ServiceControlManagerAccessRights.SC_MANAGER_ALL_ACCESS); - if (manager == IntPtr.Zero) + if (manager == IntPtr.Zero) { + errorMessage = "OpenSCManager returned zero."; return false; + } IntPtr service = NativeMethods.CreateService(manager, id, id, ServiceAccessRights.SERVICE_ALL_ACCESS, @@ -42,13 +44,22 @@ namespace OpenHardwareMonitor.Hardware { if (Marshal.GetHRForLastWin32Error() == ERROR_SERVICE_EXISTS) service = NativeMethods.OpenService(manager, id, ServiceAccessRights.SERVICE_ALL_ACCESS); - else + else { + errorMessage = "CreateService returned the error: " + + Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error()).Message; + NativeMethods.CloseServiceHandle(manager); return false; + } } if (!NativeMethods.StartService(service, 0, null)) { - if (Marshal.GetHRForLastWin32Error() != ERROR_SERVICE_ALREADY_RUNNING) + if (Marshal.GetHRForLastWin32Error() != ERROR_SERVICE_ALREADY_RUNNING) { + errorMessage = "StartService returned the error: " + + Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error()).Message; + NativeMethods.CloseServiceHandle(service); + NativeMethods.CloseServiceHandle(manager); return false; + } } NativeMethods.CloseServiceHandle(service); @@ -62,7 +73,8 @@ namespace OpenHardwareMonitor.Hardware { "O:BAG:SYD:(A;;FA;;;SY)(A;;FA;;;BA)"); File.SetAccessControl(@"\\.\" + id, fileSecurity); } catch { } - + + errorMessage = null; return true; } diff --git a/Hardware/Ring0.cs b/Hardware/Ring0.cs index 98ceb64..b37ac80 100644 --- a/Hardware/Ring0.cs +++ b/Hardware/Ring0.cs @@ -127,7 +127,8 @@ namespace OpenHardwareMonitor.Hardware { fileName = GetTempFileName(); if (fileName != null && ExtractDriver(fileName)) { - if (driver.Install(fileName)) { + string installError; + if (driver.Install(fileName, out installError)) { driver.Open(); if (!driver.IsOpen) { @@ -135,10 +136,13 @@ namespace OpenHardwareMonitor.Hardware { report.AppendLine("Status: Opening driver failed after install"); } } else { + string errorFirstInstall = installError; + // install failed, try to delete and reinstall driver.Delete(); - if (driver.Install(fileName)) { + string errorSecondInstall; + if (driver.Install(fileName, out errorSecondInstall)) { driver.Open(); if (!driver.IsOpen) { @@ -150,9 +154,8 @@ namespace OpenHardwareMonitor.Hardware { report.AppendLine("Status: Installing driver \"" + fileName + "\" failed" + (File.Exists(fileName) ? " and file exists" : "")); - report.AppendLine(); - report.Append("Exception: " + Marshal.GetExceptionForHR( - Marshal.GetHRForLastWin32Error()).Message); + report.AppendLine("First Exception: " + errorFirstInstall); + report.AppendLine("Second Exception: " + errorSecondInstall); } } } else { diff --git a/Properties/AssemblyVersion.cs b/Properties/AssemblyVersion.cs index 33ee70c..6088ee1 100644 --- a/Properties/AssemblyVersion.cs +++ b/Properties/AssemblyVersion.cs @@ -10,5 +10,5 @@ using System.Reflection; -[assembly: AssemblyVersion("0.4.0.18")] -[assembly: AssemblyInformationalVersion("0.4.0.18 Alpha")] \ No newline at end of file +[assembly: AssemblyVersion("0.4.0.19")] +[assembly: AssemblyInformationalVersion("0.4.0.19 Alpha")] \ No newline at end of file