From a10c33ec0ab31a7667e4fb82d5ba7aac7cff0a34 Mon Sep 17 00:00:00 2001 From: PhyxionNL <7643972+PhyxionNL@users.noreply.github.com> Date: Mon, 21 Jun 2021 18:30:21 +0200 Subject: [PATCH] WinRing0 revert (#478) --- LibreHardwareMonitorLib/Hardware/Computer.cs | 1 + LibreHardwareMonitorLib/Hardware/InpOut.cs | 211 ++++++++++ .../Hardware/KernelDriver.cs | 44 ++- LibreHardwareMonitorLib/Hardware/Ring0.cs | 367 ++++++++++-------- LibreHardwareMonitorLib/Hardware/RyzenSMU.cs | 34 +- LibreHardwareMonitorLib/Hardware/WinRing0.sys | Bin 15560 -> 0 bytes .../Hardware/WinRing0x64.sys | Bin 14536 -> 0 bytes LibreHardwareMonitorLib/Interop/InpOut.cs | 19 + .../LibreHardwareMonitorLib.csproj | 8 +- .../Resources/WinRing0.sys | Bin 0 -> 14416 bytes .../Resources/WinRing0x64.sys | Bin 0 -> 14544 bytes .../Resources/inpout32.dll | Bin 0 -> 98304 bytes .../Resources/inpoutx64.dll | Bin 0 -> 98304 bytes 13 files changed, 490 insertions(+), 194 deletions(-) create mode 100644 LibreHardwareMonitorLib/Hardware/InpOut.cs delete mode 100644 LibreHardwareMonitorLib/Hardware/WinRing0.sys delete mode 100644 LibreHardwareMonitorLib/Hardware/WinRing0x64.sys create mode 100644 LibreHardwareMonitorLib/Interop/InpOut.cs create mode 100644 LibreHardwareMonitorLib/Resources/WinRing0.sys create mode 100644 LibreHardwareMonitorLib/Resources/WinRing0x64.sys create mode 100644 LibreHardwareMonitorLib/Resources/inpout32.dll create mode 100644 LibreHardwareMonitorLib/Resources/inpoutx64.dll diff --git a/LibreHardwareMonitorLib/Hardware/Computer.cs b/LibreHardwareMonitorLib/Hardware/Computer.cs index 93e0120..8fce950 100644 --- a/LibreHardwareMonitorLib/Hardware/Computer.cs +++ b/LibreHardwareMonitorLib/Hardware/Computer.cs @@ -583,6 +583,7 @@ namespace LibreHardwareMonitor.Hardware } OpCode.Close(); + InpOut.Close(); Ring0.Close(); _smbios = null; diff --git a/LibreHardwareMonitorLib/Hardware/InpOut.cs b/LibreHardwareMonitorLib/Hardware/InpOut.cs new file mode 100644 index 0000000..40a1841 --- /dev/null +++ b/LibreHardwareMonitorLib/Hardware/InpOut.cs @@ -0,0 +1,211 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Threading; +using LibreHardwareMonitor.Interop; + +namespace LibreHardwareMonitor.Hardware +{ + internal static class InpOut + { + private static string _filePath; + private static IntPtr _libraryHandle; + private static Interop.InpOut.MapPhysToLinDelegate _mapPhysToLin; + private static Interop.InpOut.UnmapPhysicalMemoryDelegate _unmapPhysicalMemory; + + public static bool IsOpen { get; private set; } + + public static bool Open() + { + if (IsOpen) + return true; + + + _filePath = GetFilePath(); + if (_filePath != null && (File.Exists(_filePath) || Extract(_filePath))) + { + _libraryHandle = Kernel32.LoadLibrary(_filePath); + if (_libraryHandle != IntPtr.Zero) + { + IntPtr mapPhysToLinAddress = Kernel32.GetProcAddress(_libraryHandle, "MapPhysToLin"); + IntPtr unmapPhysicalMemoryAddress = Kernel32.GetProcAddress(_libraryHandle, "UnmapPhysicalMemory"); + + if (mapPhysToLinAddress != IntPtr.Zero) + _mapPhysToLin = Marshal.GetDelegateForFunctionPointer(mapPhysToLinAddress); + + if (unmapPhysicalMemoryAddress != IntPtr.Zero) + _unmapPhysicalMemory = Marshal.GetDelegateForFunctionPointer(unmapPhysicalMemoryAddress); + + IsOpen = true; + } + } + + if (!IsOpen) + DeleteDll(); + + return IsOpen; + } + + public static void Close() + { + if (_libraryHandle != IntPtr.Zero) + { + Kernel32.FreeLibrary(_libraryHandle); + DeleteDll(); + + _libraryHandle = IntPtr.Zero; + } + } + + public static byte[] ReadMemory(IntPtr baseAddress, uint size) + { + if (_mapPhysToLin != null && _unmapPhysicalMemory != null) + { + IntPtr pdwLinAddr = _mapPhysToLin(baseAddress, size, out IntPtr pPhysicalMemoryHandle); + if (pdwLinAddr != IntPtr.Zero) + { + byte[] bytes = new byte[size]; + Marshal.Copy(pdwLinAddr, bytes, 0, bytes.Length); + _unmapPhysicalMemory(pPhysicalMemoryHandle, pdwLinAddr); + + return bytes; + } + } + + return null; + } + + private static void DeleteDll() + { + try + { + // try to delete the DLL + if (_filePath != null && File.Exists(_filePath)) + { + File.Delete(_filePath); + } + + _filePath = null; + } + catch + { } + } + + private static string GetFilePath() + { + string filePath; + + try + { + filePath = Path.GetTempFileName(); + if (!string.IsNullOrEmpty(filePath)) + return Path.ChangeExtension(filePath, ".dll"); + } + catch (IOException) + { } + + + const string fileName = "inpout.dll"; + + try + { + ProcessModule processModule = Process.GetCurrentProcess().MainModule; + if (!string.IsNullOrEmpty(processModule?.FileName)) + return Path.Combine(Path.GetDirectoryName(processModule.FileName) ?? string.Empty, fileName); + } + catch + { + // Continue with the other options. + } + + filePath = GetPathFromAssembly(Assembly.GetExecutingAssembly()); + if (!string.IsNullOrEmpty(filePath)) + return Path.Combine(Path.GetDirectoryName(filePath) ?? string.Empty, fileName); + + + filePath = GetPathFromAssembly(typeof(Ring0).Assembly); + if (!string.IsNullOrEmpty(filePath)) + return Path.Combine(Path.GetDirectoryName(filePath) ?? string.Empty, fileName); + + + return null; + + + static string GetPathFromAssembly(Assembly assembly) + { + try + { + string location = assembly?.Location; + return !string.IsNullOrEmpty(location) ? location : null; + } + catch + { + return null; + } + } + } + + private static bool Extract(string filePath) + { + string resourceName = $"{nameof(LibreHardwareMonitor)}.Resources.{(Software.OperatingSystem.Is64Bit ? "inpoutx64.dll" : "inpout32.dll")}"; + + Assembly assembly = typeof(Ring0).Assembly; + + string[] names = assembly.GetManifestResourceNames(); + byte[] buffer = null; + + for (int i = 0; i < names.Length; i++) + { + if (names[i].Replace('\\', '.') == resourceName) + { + using Stream stream = assembly.GetManifestResourceStream(names[i]); + + if (stream != null) + { + buffer = new byte[stream.Length]; + stream.Read(buffer, 0, buffer.Length); + } + } + } + + if (buffer == null) + return false; + + + try + { + using FileStream target = new(filePath, FileMode.Create); + + target.Write(buffer, 0, buffer.Length); + target.Flush(); + } + catch + { + // for example there is not enough space on the disk + return false; + } + + // make sure the file is actually written to the file system + var stopwatch = new Stopwatch(); + stopwatch.Start(); + + while (stopwatch.ElapsedMilliseconds < 2000) + { + try + { + if (File.Exists(filePath) && new FileInfo(filePath).Length == buffer.Length) + return true; + } + catch + { } + + Thread.Sleep(1); + } + + // file still has not the right size, something is wrong + return false; + } + } +} diff --git a/LibreHardwareMonitorLib/Hardware/KernelDriver.cs b/LibreHardwareMonitorLib/Hardware/KernelDriver.cs index 8070ecf..9df1550 100644 --- a/LibreHardwareMonitorLib/Hardware/KernelDriver.cs +++ b/LibreHardwareMonitorLib/Hardware/KernelDriver.cs @@ -15,12 +15,14 @@ namespace LibreHardwareMonitor.Hardware { internal class KernelDriver { - private readonly string _id; + private readonly string _driverId; + private readonly string _serviceName; private SafeFileHandle _device; - public KernelDriver(string id) + public KernelDriver(string serviceName, string driverId) { - _id = id; + _serviceName = serviceName; + _driverId = driverId; } public bool IsOpen @@ -38,8 +40,8 @@ namespace LibreHardwareMonitor.Hardware } IntPtr service = AdvApi32.CreateService(manager, - _id, - _id, + _serviceName, + _serviceName, AdvApi32.SERVICE_ACCESS_MASK.SERVICE_ALL_ACCESS, AdvApi32.SERVICE_TYPE.SERVICE_KERNEL_DRIVER, AdvApi32.SERVICE_START.SERVICE_DEMAND_START, @@ -53,22 +55,24 @@ namespace LibreHardwareMonitor.Hardware if (service == IntPtr.Zero) { - if (Marshal.GetHRForLastWin32Error() == Kernel32.ERROR_SERVICE_EXISTS) + int error = Marshal.GetHRForLastWin32Error(); + if (error == Kernel32.ERROR_SERVICE_EXISTS) { errorMessage = "Service already exists"; return false; } - errorMessage = "CreateService returned the error: " + Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error()).Message; + errorMessage = "CreateService returned the error: " + Marshal.GetExceptionForHR(error).Message; AdvApi32.CloseServiceHandle(manager); return false; } if (!AdvApi32.StartService(service, 0, null)) { - if (Marshal.GetHRForLastWin32Error() != Kernel32.ERROR_SERVICE_ALREADY_RUNNING) + int error = Marshal.GetHRForLastWin32Error(); + if (error != Kernel32.ERROR_SERVICE_ALREADY_RUNNING) { - errorMessage = "StartService returned the error: " + Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error()).Message; + errorMessage = "StartService returned the error: " + Marshal.GetExceptionForHR(error).Message; AdvApi32.CloseServiceHandle(service); AdvApi32.CloseServiceHandle(manager); return false; @@ -78,25 +82,26 @@ namespace LibreHardwareMonitor.Hardware AdvApi32.CloseServiceHandle(service); AdvApi32.CloseServiceHandle(manager); -#if NETFRAMEWORK try { // restrict the driver access to system (SY) and builtin admins (BA) // TODO: replace with a call to IoCreateDeviceSecure in the driver - FileSecurity fileSecurity = File.GetAccessControl(@"\\.\" + _id); + FileInfo fileInfo = new(@"\\.\" + _driverId); + FileSecurity fileSecurity = fileInfo.GetAccessControl(); fileSecurity.SetSecurityDescriptorSddlForm("O:BAG:SYD:(A;;FA;;;SY)(A;;FA;;;BA)"); - File.SetAccessControl(@"\\.\" + _id, fileSecurity); + fileInfo.SetAccessControl(fileSecurity); } catch { } -#endif + errorMessage = null; return true; } public bool Open() { - _device = new SafeFileHandle(Kernel32.CreateFile(@"\\.\" + _id, 0xC0000000, FileShare.None, IntPtr.Zero, FileMode.Open, FileAttributes.Normal, IntPtr.Zero), true); + IntPtr fileHandle = Kernel32.CreateFile(@"\\.\" + _driverId, 0xC0000000, FileShare.None, IntPtr.Zero, FileMode.Open, FileAttributes.Normal, IntPtr.Zero); + _device = new SafeFileHandle(fileHandle, true); if (_device.IsInvalid) { _device.Close(); @@ -113,8 +118,7 @@ namespace LibreHardwareMonitor.Hardware return false; - bool b = Kernel32.DeviceIoControl(_device, ioControlCode, inBuffer, inBuffer == null ? 0 : (uint)Marshal.SizeOf(inBuffer), null, 0, out uint _, IntPtr.Zero); - return b; + return Kernel32.DeviceIoControl(_device, ioControlCode, inBuffer, inBuffer == null ? 0 : (uint)Marshal.SizeOf(inBuffer), null, 0, out uint _, IntPtr.Zero); } public bool DeviceIOControl(Kernel32.IOControlCode ioControlCode, object inBuffer, ref T outBuffer) @@ -174,12 +178,14 @@ namespace LibreHardwareMonitor.Hardware return false; - IntPtr service = AdvApi32.OpenService(manager, _id, AdvApi32.SERVICE_ACCESS_MASK.SERVICE_ALL_ACCESS); + IntPtr service = AdvApi32.OpenService(manager, _serviceName, AdvApi32.SERVICE_ACCESS_MASK.SERVICE_ALL_ACCESS); if (service == IntPtr.Zero) + { + AdvApi32.CloseServiceHandle(manager); return true; + } - - AdvApi32.SERVICE_STATUS status = new AdvApi32.SERVICE_STATUS(); + AdvApi32.SERVICE_STATUS status = new(); AdvApi32.ControlService(service, AdvApi32.SERVICE_CONTROL.SERVICE_CONTROL_STOP, ref status); AdvApi32.DeleteService(service); AdvApi32.CloseServiceHandle(service); diff --git a/LibreHardwareMonitorLib/Hardware/Ring0.cs b/LibreHardwareMonitorLib/Hardware/Ring0.cs index 334068b..ef5bbc9 100644 --- a/LibreHardwareMonitorLib/Hardware/Ring0.cs +++ b/LibreHardwareMonitorLib/Hardware/Ring0.cs @@ -5,6 +5,7 @@ // All Rights Reserved. using System; +using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.InteropServices; @@ -13,126 +14,18 @@ using System.Security.Principal; using System.Text; using System.Threading; -//SecurityIdentifier - namespace LibreHardwareMonitor.Hardware { internal static class Ring0 { private static KernelDriver _driver; - private static string _fileName; + private static string _filePath; private static Mutex _isaBusMutex; private static Mutex _pciBusMutex; - private static readonly StringBuilder _report = new StringBuilder(); - - public static bool IsOpen - { - get { return _driver != null; } - } + private static readonly StringBuilder _report = new(); - private static Assembly GetAssembly() - { - return typeof(Ring0).Assembly; - } - - private static string GetTempFileName() - { - // try to create one in the application folder - string location = GetAssembly().Location; - if (!string.IsNullOrEmpty(location)) - { - try - { - string fileName = Path.ChangeExtension(location, ".sys"); - - using (File.Create(fileName)) - return fileName; - } - catch (Exception) - { } - } - - // if this failed, try to get a file in the temporary folder - try - { - return Path.GetTempFileName(); - } - catch (IOException) - { - // some I/O exception - } - catch (UnauthorizedAccessException) - { - // we do not have the right to create a file in the temp folder - } - catch (NotSupportedException) - { - // invalid path format of the TMP system environment variable - } - - return null; - } - - private static bool ExtractDriver(string fileName) - { - string resourceName = nameof(LibreHardwareMonitor) + "." + nameof(Hardware) + "." + (Software.OperatingSystem.Is64Bit ? "WinRing0x64.sys" : "WinRing0.sys"); - - string[] names = GetAssembly().GetManifestResourceNames(); - byte[] buffer = null; - for (int i = 0; i < names.Length; i++) - { - if (names[i].Replace('\\', '.') == resourceName) - { - using Stream stream = GetAssembly().GetManifestResourceStream(names[i]); - - if (stream != null) - { - buffer = new byte[stream.Length]; - stream.Read(buffer, 0, buffer.Length); - } - } - } - - if (buffer == null) - return false; - - - try - { - using FileStream target = new FileStream(fileName, FileMode.Create); - - target.Write(buffer, 0, buffer.Length); - target.Flush(); - } - catch (IOException) - { - // for example there is not enough space on the disk - return false; - } - - // make sure the file is actually written to the file system - for (int i = 0; i < 20; i++) - { - try - { - if (File.Exists(fileName) && - new FileInfo(fileName).Length == buffer.Length) - { - return true; - } - - Thread.Sleep(100); - } - catch (IOException) - { - Thread.Sleep(10); - } - } - - // file still has not the right size, something is wrong - return false; - } + public static bool IsOpen => _driver != null; public static void Open() { @@ -147,24 +40,21 @@ namespace LibreHardwareMonitor.Hardware // clear the current report _report.Length = 0; - _driver = new KernelDriver("WinRing0_1_2_0"); + _driver = new KernelDriver(GetServiceName(), "WinRing0_1_2_0"); _driver.Open(); if (!_driver.IsOpen) { // driver is not loaded, try to install and open - _fileName = GetTempFileName(); - if (_fileName != null && ExtractDriver(_fileName)) + _filePath = GetFilePath(); + if (_filePath != null && ExtractDriver(_filePath)) { - if (_driver.Install(_fileName, out string installError)) + if (_driver.Install(_filePath, out string installError)) { _driver.Open(); if (!_driver.IsOpen) - { - _driver.Delete(); _report.AppendLine("Status: Opening driver failed after install"); - } } else { @@ -176,41 +66,29 @@ namespace LibreHardwareMonitor.Hardware // wait a short moment to give the OS a chance to remove the driver Thread.Sleep(2000); - if (_driver.Install(_fileName, out string errorSecondInstall)) + if (_driver.Install(_filePath, out string errorSecondInstall)) { _driver.Open(); if (!_driver.IsOpen) - { - _driver.Delete(); _report.AppendLine("Status: Opening driver failed after reinstall"); - } } else { - _report.AppendLine("Status: Installing driver \"" + _fileName + "\" failed" + (File.Exists(_fileName) ? " and file exists" : string.Empty)); + _report.AppendLine("Status: Installing driver \"" + _filePath + "\" failed" + (File.Exists(_filePath) ? " and file exists" : string.Empty)); _report.AppendLine("First Exception: " + errorFirstInstall); _report.AppendLine("Second Exception: " + errorSecondInstall); } } + + if (!_driver.IsOpen) + { + _driver.Delete(); + DeleteDriver(); + } } else - { _report.AppendLine("Status: Extracting driver failed"); - } - - try - { - // try to delete the driver file - if (File.Exists(_fileName) && _fileName != null) - File.Delete(_fileName); - - _fileName = null; - } - catch (IOException) - { } - catch (UnauthorizedAccessException) - { } } if (!_driver.IsOpen) @@ -266,6 +144,191 @@ namespace LibreHardwareMonitor.Hardware } } + private static bool ExtractDriver(string filePath) + { + string resourceName = $"{nameof(LibreHardwareMonitor)}.Resources.{(Software.OperatingSystem.Is64Bit ? "WinRing0x64.sys" : "WinRing0.sys")}"; + Assembly assembly = typeof(Ring0).Assembly; + + string[] names = assembly.GetManifestResourceNames(); + byte[] buffer = null; + + for (int i = 0; i < names.Length; i++) + { + if (names[i].Replace('\\', '.') == resourceName) + { + using Stream stream = assembly.GetManifestResourceStream(names[i]); + + if (stream != null) + { + buffer = new byte[stream.Length]; + stream.Read(buffer, 0, buffer.Length); + } + } + } + + if (buffer == null) + return false; + + + try + { + using FileStream target = new(filePath, FileMode.Create); + + target.Write(buffer, 0, buffer.Length); + target.Flush(); + } + catch (IOException) + { + // for example there is not enough space on the disk + return false; + } + + // make sure the file is actually written to the file system + var stopwatch = new Stopwatch(); + stopwatch.Start(); + + while (stopwatch.ElapsedMilliseconds < 2000) + { + try + { + if (File.Exists(filePath) && new FileInfo(filePath).Length == buffer.Length) + return true; + } + catch + { } + + Thread.Sleep(1); + } + + // file still has not the right size, something is wrong + return false; + } + + private static void DeleteDriver() + { + try + { + // try to delete the driver file + if (_filePath != null && File.Exists(_filePath)) + File.Delete(_filePath); + + _filePath = null; + } + catch + { } + } + + private static string GetServiceName() + { + string name; + + try + { + ProcessModule processModule = Process.GetCurrentProcess().MainModule; + if (!string.IsNullOrEmpty(processModule?.FileName)) + { + name = Path.GetFileNameWithoutExtension(processModule.FileName); + if (!string.IsNullOrEmpty(name)) + return GetWinRing0Name(name); + } + } + catch + { + // Continue with the other options. + } + + AssemblyName assemblyName = typeof(Ring0).Assembly.GetName(); + + name = assemblyName.Name; + if (!string.IsNullOrEmpty(name)) + return GetWinRing0Name(name); + + + name = nameof(LibreHardwareMonitor); + return GetWinRing0Name(name); + + + static string GetWinRing0Name(string name) + { + return $"R0{name}".Replace(" ", string.Empty).Replace(".", "_"); + } + } + + private static string GetFilePath() + { + string filePath; + + try + { + ProcessModule processModule = Process.GetCurrentProcess().MainModule; + if (!string.IsNullOrEmpty(processModule?.FileName)) + { + filePath = Path.ChangeExtension(processModule.FileName, ".sys"); + if (TryCreate(filePath)) + return filePath; + } + } + catch + { + // Continue with the other options. + } + + filePath = GetPathFromAssembly(Assembly.GetExecutingAssembly()); + if (!string.IsNullOrEmpty(filePath) && TryCreate(filePath)) + return filePath; + + + filePath = GetPathFromAssembly(typeof(Ring0).Assembly); + if (!string.IsNullOrEmpty(filePath) && TryCreate(filePath)) + return filePath; + + + try + { + filePath = Path.GetTempFileName(); + if (!string.IsNullOrEmpty(filePath)) + { + filePath = Path.ChangeExtension(filePath, ".sys"); + if (TryCreate(filePath)) + return filePath; + } + } + catch + { + return null; + } + + return null; + + + static string GetPathFromAssembly(Assembly assembly) + { + try + { + string location = assembly?.Location; + return !string.IsNullOrEmpty(location) ? Path.ChangeExtension(location, ".sys") : null; + } + catch + { + return null; + } + } + + + static bool TryCreate(string path) + { + try + { + using (File.Create(path)) + return true; + } + catch + { + return false; + } + } + } + public static void Close() { if (_driver != null) @@ -293,25 +356,14 @@ namespace LibreHardwareMonitor.Hardware } // try to delete temporary driver file again if failed during open - if (_fileName != null && File.Exists(_fileName)) - { - try - { - File.Delete(_fileName); - _fileName = null; - } - catch (IOException) - { } - catch (UnauthorizedAccessException) - { } - } + DeleteDriver(); } public static string GetReport() { if (_report.Length > 0) { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.AppendLine("Ring0"); r.AppendLine(); r.Append(_report); @@ -402,7 +454,7 @@ namespace LibreHardwareMonitor.Hardware return false; - WriteMsrInput input = new WriteMsrInput { Register = index, Value = ((ulong)edx << 32) | eax }; + WriteMsrInput input = new() { Register = index, Value = ((ulong)edx << 32) | eax }; return _driver.DeviceIOControl(Interop.Ring0.IOCTL_OLS_WRITE_MSR, input); } @@ -423,7 +475,7 @@ namespace LibreHardwareMonitor.Hardware return; - WriteIoPortInput input = new WriteIoPortInput { PortNumber = port, Value = value }; + WriteIoPortInput input = new() { PortNumber = port, Value = value }; _driver.DeviceIOControl(Interop.Ring0.IOCTL_OLS_WRITE_IO_PORT_BYTE, input); } @@ -440,7 +492,7 @@ namespace LibreHardwareMonitor.Hardware return false; } - ReadPciConfigInput input = new ReadPciConfigInput { PciAddress = pciAddress, RegAddress = regAddress }; + ReadPciConfigInput input = new() { PciAddress = pciAddress, RegAddress = regAddress }; value = 0; return _driver.DeviceIOControl(Interop.Ring0.IOCTL_OLS_READ_PCI_CONFIG, input, ref value); @@ -452,7 +504,7 @@ namespace LibreHardwareMonitor.Hardware return false; - WritePciConfigInput input = new WritePciConfigInput { PciAddress = pciAddress, RegAddress = regAddress, Value = value }; + WritePciConfigInput input = new() { PciAddress = pciAddress, RegAddress = regAddress, Value = value }; return _driver.DeviceIOControl(Interop.Ring0.IOCTL_OLS_WRITE_PCI_CONFIG, input); } @@ -462,7 +514,7 @@ namespace LibreHardwareMonitor.Hardware return false; - ReadMemoryInput input = new ReadMemoryInput { Address = address, UnitSize = 1, Count = (uint)Marshal.SizeOf(buffer) }; + ReadMemoryInput input = new() { Address = address, UnitSize = 1, Count = (uint)Marshal.SizeOf(buffer) }; return _driver.DeviceIOControl(Interop.Ring0.IOCTL_OLS_READ_MEMORY, input, ref buffer); } @@ -471,7 +523,8 @@ namespace LibreHardwareMonitor.Hardware if (_driver == null) return false; - ReadMemoryInput input = new ReadMemoryInput { Address = address, UnitSize = (uint)Marshal.SizeOf(typeof(T)), Count = (uint)buffer.Length }; + + ReadMemoryInput input = new() { Address = address, UnitSize = (uint)Marshal.SizeOf(typeof(T)), Count = (uint)buffer.Length }; return _driver.DeviceIOControl(Interop.Ring0.IOCTL_OLS_READ_MEMORY, input, ref buffer); } diff --git a/LibreHardwareMonitorLib/Hardware/RyzenSMU.cs b/LibreHardwareMonitorLib/Hardware/RyzenSMU.cs index 853edcd..bf3b4de 100644 --- a/LibreHardwareMonitorLib/Hardware/RyzenSMU.cs +++ b/LibreHardwareMonitorLib/Hardware/RyzenSMU.cs @@ -27,8 +27,8 @@ namespace LibreHardwareMonitor.Hardware // Zen Raven Ridge APU. 0x001E0004, new Dictionary { - { 7, new SmuSensorType { Name = "TDC", Type = SensorType.Current, Scale = 1}}, - { 11, new SmuSensorType { Name = "EDC", Type = SensorType.Current, Scale = 1}}, + { 7, new SmuSensorType { Name = "TDC", Type = SensorType.Current, Scale = 1 } }, + { 11, new SmuSensorType { Name = "EDC", Type = SensorType.Current, Scale = 1 } }, //{ 61, new SmuSensorType { Name = "Core", Type = SensorType.Voltage } }, //{ 62, new SmuSensorType { Name = "Core", Type = SensorType.Current, Scale = 1} }, //{ 63, new SmuSensorType { Name = "Core", Type = SensorType.Power, Scale = 1 } }, @@ -57,12 +57,12 @@ namespace LibreHardwareMonitor.Hardware // Zen 2. 0x00240903, new Dictionary { - { 15, new SmuSensorType { Name = "TDC", Type = SensorType.Current, Scale = 1}}, - { 21, new SmuSensorType { Name = "EDC", Type = SensorType.Current, Scale = 1}}, - { 48, new SmuSensorType { Name = "Fabric", Type = SensorType.Clock, Scale = 1} }, - { 50, new SmuSensorType { Name = "Uncore", Type = SensorType.Clock, Scale = 1} }, - { 51, new SmuSensorType { Name = "Memory", Type = SensorType.Clock, Scale = 1} }, - { 115, new SmuSensorType { Name = "SoC", Type = SensorType.Temperature, Scale = 1} }, + { 15, new SmuSensorType { Name = "TDC", Type = SensorType.Current, Scale = 1 } }, + { 21, new SmuSensorType { Name = "EDC", Type = SensorType.Current, Scale = 1 } }, + { 48, new SmuSensorType { Name = "Fabric", Type = SensorType.Clock, Scale = 1 } }, + { 50, new SmuSensorType { Name = "Uncore", Type = SensorType.Clock, Scale = 1 } }, + { 51, new SmuSensorType { Name = "Memory", Type = SensorType.Clock, Scale = 1 } }, + { 115, new SmuSensorType { Name = "SoC", Type = SensorType.Temperature, Scale = 1 } }, //{ 66, new SmuSensorType { Name = "Bus Speed", Type = SensorType.Clock, Scale = 1 } }, //{ 188, new SmuSensorType { Name = "Core #1", Type = SensorType.Clock, Scale = 1000 } }, //{ 189, new SmuSensorType { Name = "Core #2", Type = SensorType.Clock, Scale = 1000 } }, @@ -88,6 +88,9 @@ namespace LibreHardwareMonitor.Hardware _supportedCPU = SetAddresses(_cpuCodeName); + if (_supportedCPU) + InpOut.Open(); + SetupPmTableAddrAndSize(); } @@ -249,9 +252,8 @@ namespace LibreHardwareMonitor.Hardware uint[] args = { 1 }; if (SendCommand(0x02, ref args)) - { return args[0]; - } + return 0; } @@ -283,7 +285,9 @@ namespace LibreHardwareMonitor.Hardware float[] table = ReadDramToArray(); - if (table[0] == 0) /* Fix for Zen+ empty values at first call bug */ + + // Fix for Zen+ empty values on first call. + if (table[0] == 0) { Thread.Sleep(10); TransferTableToDram(); @@ -297,7 +301,9 @@ namespace LibreHardwareMonitor.Hardware { float[] table = new float[_pmTableSize / 4]; - Ring0.ReadMemory(_dramBaseAddr, ref table); + byte[] bytes = InpOut.ReadMemory(new IntPtr(_dramBaseAddr), _pmTableSize); + if (bytes != null) + Buffer.BlockCopy(bytes, 0, table, 0, bytes.Length); return table; } @@ -305,14 +311,10 @@ namespace LibreHardwareMonitor.Hardware private bool SetupPmTableAddrAndSize() { if (_pmTableSize == 0) - { SetupPmTableSize(); - } if (_dramBaseAddr == 0) - { SetupDramBaseAddr(); - } return _dramBaseAddr != 0 && _pmTableSize != 0; } diff --git a/LibreHardwareMonitorLib/Hardware/WinRing0.sys b/LibreHardwareMonitorLib/Hardware/WinRing0.sys deleted file mode 100644 index 4657dfb582b546dcd35778b15d7b7b536755002d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15560 zcmeHt2Ut_f*60od2oQ?Wr9~;C2<{|wML`HfdRGB8gb1ON1Q11Of?`1Iy`WgJ_pS&i zHn8_{JXREs=s75eNZy(qLh*Rc{qKF>ec$)rcQ@Z;_F6NuX3d(_W;TA47Gkm(hLNF& z#Ta%BYV^1ezkmPJ1kI|(CseURiVcI0k$f8lhsN^+v^0Kd9G{&`r$*HkiYZVnG({9oYb?aM8wtU>yTRv@D2=E?`Xj>^!mu;I*)a$m1pw4?D z*j7f=vD@YmHJhk|d7OAe#<7=O(2>#}5cU6$+a72SK?&KfwO?`KKiy5{HT22L*{(lyFfR zIsWn>5?01)4-{*K(xh(_;H~J3P$68bH5FbbU#cNvSJ9I|iT4^z!kXU6V^|@#69Xb5 ziW)=Yr(QxT2_lPFy7d?ZII3rLc8SGeW_7b3v)ZLr#BGA6LYfqR3>2@LAX1|#A&e-; zBgzYaLYzhp5^IrxTJs>aqb}q? zfG7x}svVI)RDk*rm#jscp$U5_&Y+4eiZj$j*U!C`Eqty}_^a``=W@!I&oxnk%phQ3 zfeB=>7KT{8Sac~v0qx_nW?JDaO&KAz@T&}9z*L_#tBP2fmgm~;>sOnBi9d_3QSaVm zVkQ5~Tm~?gB}U8X6hWzQ7FAuSM6CSnJYX+eltGCQ&8DjDolS9^rOA&K`IANR zAqiMS5Qx|X@qJ(9LGil4Qp1FnUP3)DFQGgDq-INTCKVPQBGz(;Ud;wQpcevFdO%+Q zBcN9x)OoYiut=%kl|V<)=EA;BnH()ulpZbx-CUObz-5`Ix+9CqkNZ1Dt-OSTdKk3^ zRthhuhXW55h&7{L*c8F4y)gb)yiz3g^ixhL(gm4Fw@DpTN{lz%`7RcV!gNI!+aBm& zYP(?qYgOvMPB4VRc8Z`|6ZJ)Yx`l(W!s_-w(5x~qN|1!kSD@2>TnKC%Rpc?X%-;Y8 zs2x!+e1}Dx1x2b>n{ya6Z2Wk&IcuRVd`DF)LI_bH^&~Q}QMc6Q-UETE%{dCcCrfD( zR51X;^!yGCVBzHa4l=4;@;m0BdPsi9JgC)*k`SSAD&i_woJI+5n(<96etQYV_QNV6 z>_LR}po+9~aS~RdUQa@S>#YT%;6bg&ZU@incsmN zhLD=yfn0@J5lX5+T@eovz(YiEQzaVb+4}Y>w46j1KI&E$7ko+wnGFNI@;ls7ZI$0~ z5!w(TQ;US;YW_=cThG0Y5n{TFQ_xT z`gJ8nZ|{fFgZ*q?R_KgGBNpn2RnSYbniL@~mO}`pm~m6oSTb8ztTh7EQdB=>a%6N3 zrH_9re6NWjN_d3G83m$vOdmy~)l16_-%XDJpE z(~6rt3eC`T*s;Z$uu~omB_1v%9%t+t3UVMcP35ylmf-EtSyQz9flBs$b6w7BJ;Sn1#n2*ltWS$Q!;Wmjg z+C{9+?(kQ_YA<7bjIBiDYDIn@V@n_wVA#Yduz1m{=%896ruP0wyv2LX5K%NWTqK|{ zZ4vDVk$ho$*9DdsqGvlS4J(_e4#CBrEPIVfb!a*Qh9dF@`=LnStq5jOzPOO5sTDnk z?hsAN!rqsJbc!OWh2OeLSno^xJ_@Ild1GbdNRe-`X3?cG_hR)DR;vgrVNrydqI*r% zFi%l6%t^{|$@K(sz=7y~Mq}PAF(x!680y0Uvzvu*f(5506M}_y$tr7sYqaX-OCmpN z(+VIAe!_7ARX8wSvbtNMi%qK~XptYK#EbeP`P--wRwyN3M|5r#c~M07-dX{00_7Tx zAynb~Zjx7;yaD|-6wp%X!cK`oP1RxhG)2Cqx?#bAK|%4QdOiC}Y$LO-#NCtQ05 zO(=Ce4(|kj)V6tFY`GjFTUe(Hf~f_vx$E; z;xur-noVP1C53g=Xrd1+qeSKyL_@4L49HMK!^G(Z;&fecx1|{)1aWUDLh`1>RrEr1d9?=aBaSw^!Q2JVrwZLonhPr)ruJQ3C zz{fg8!Tm%6mm?HJW${w@yp%Y63VjN53Oy!Dkeb2gaHC?AlA;9Jf~X{3OcamlU>6m^ zO9@8(tkYs+eq^jd2jr!PVaVN}w)@>Rf-}@fST+>&{H*;lv^D-syU73&HWbRg^YMS} za&o`kS$CS;5?IB5pZ_lb?0XC zI9v>C>cNC$CF@i@M`ltc)3a>2qR?-ZUeEQQB`+shCkavBiIW&M)FQj*ze-l-vJ zY((KIIhf_@J|&pt=^YZv3Z619%)bph6 z?ThK=HMTE~;E#t%*4}3zme>y`844$SLPnB)5;^K(UhE`Ku5et2z#XnT$7KghnT3<*06Qq-!yT6q=N8Z9B(kReOn3h?a3tc&7p`CP`mcwCp(q6T(x32( zaO_1fdn(-BMxp%khbKzb1~B1R2;^Jg7z^^S5X>73!2ALBhF=eON6%?;OBcFHmw_S& zu(Tdaw4!TaG7;CiL83YZfu02Pgc!d&yYqlL3Gz8_$oQr~Hi%&>i9R@H16dy(R$zn0 z5P9EtOb^DoL7!y!<3fKSWQ!OU3MWb~IH+W3i3MuYpm5=hhK+-n+@Vea49YE2pg*WI zJYz7m9$IM_8(OkqWo&{jY7c;q1*pF-jEn&)*)Y-?=<_jfBk(w3iZEWvJIY4|Faugs z8gRvfo+(7XA2V5m#NlqWcWgL}<-_RSF?5)T0R@MG4y#U>3iLmf#ev#1&-NcR^4w7fcrby zSVOxjaF+yi?;HXGLNY>Y&4k}rSQ~oA5o-(R?u)X1v^J?+5rlRc`_qY_?;07zUIYRS zwEr2f55hju`SVybuMM#W{m1;c6F=^QJB%ZNMX+HeDTlpU3vm!Z+Z5;JNfN`da!sdOKa7;mJ725Hrk}HcU6B4|6;7 z8uJ%s3$u+m&NkX^nq7)rmR+&kcDvnnx9pzSy|#OA*I_4TuVrs)?`R)xf53jB!wZK2 zj)soIoFbg2Iu$!Da@y~7)akqvY$EZQ=PG_3kD^bd=g{+D#tJ&-f??=0kvy&o9GT)) zz!QM~ef~`nAih1y$Y6MZ(P4ST;l*CXZ7L)MnTi6Vt$^AjLn6_YaYcDKOI2B!L2?)# zFRx@NPa=~F>}5#gib?ncoY@DXhMUQfunO8HqdWun+=>1Iz~u?Rn2=jWE@uq-!w2`F zN!FxfI23Pc`z36s{VBVa7Kb%D3kQ@}6zDC(3uHe)iKvj3A<4+7&tB5}E$4#&#CJZc zvu?|Gj>1)XI3~#fZ}}pESJ^PKyoSsqSGpFiArAmWgBk%j440omb7QA*>6-XJgjUc{ zcF*9)uv0R5Nl9F~8c+kQl7@U}JUdIsr5ob<2%)T@DM8TOxO^dR8jr&k@={ai#<(GB zmetViZVu%o!z}FNG{_EVZmzhIjtZSYXE5kE@l4WDVc>KI6K61O9c>*a;gkC?8x|s+ zPDw)(5-fI#kjtUDrSj8K`I6~y+*&f-(4J;AAuU8YV+faz@>l^(O|znTGVlV@kiG&U z$zieuBsJJ*l9EgT+)3@ti-trDPknsMyv|LKSaa4oaMCx;n#=`m zBr~@|8=tdUn~u(`6~?9kRT#%4io~ z-`p?Vct8Egw;;Am$kwXQ-Xr9uv$l*ZX?(NlO;_pjh_TKW7C#=}K9l(}Tj|@!jCrnW z#ph*%R#n|g+OUK-mpiPmsAj5W-Nj3zG#^&ye>7GRK3zOy=jFCUrQspI6ZxuT-~<*igl#-MYWL>0-_ne=m2j-g9?_#me{M z=j25vOpj$XO!b%@dQKzfeDGsP;Rc)(1*}xLo+fJ zSCVodOTkqURW&pd8SF$Jw?Oa!@?hL}Gw3i~57&`sjyfVp=!+Etw{ftd_f-$DAKCnT zOjdDCd3H?g&@OvtuvpPO<#TfLgdDu-E3eE%pgb_u zbH^UX0qw*0uh}=Kc0u#R<=E~>@xeAAe|pOTdRBhvNgzoBSR-;iDEK)jwk6o_U*P?hQ9;@cH!#=Z;PZ zBXZy5Rg<=_vj|kx`LO&EdlW0k@Y=v|<;9+zJNJB<=IpsEjsIrxn<)+I$Lk7Xm+GB1 z%lozI=8!GdPsq&Jn6)I5Tl+yrc*?bS_+yH1>EhBwR_n9ejpOfb7iK+DjbwA{Z=*)wI5u#B~$=hZOIbgcSx<2jv8UI3a$~WcHI|5cwepR>N zS2alNxPTM^k_y48Ncjn~lYwMY8$o8sH2%h96!LI^)SSS;<8UrMTndAM8+F^LP+&#a zc$UCg(CwiKL$~kgD^qOQ+n3E_TmR5?q);HR;;^ma7}gvvA0LgFGbY>OOq^aZvcjtG zXyg$7W;D2h|EZNT`Zza_3%p9z@tQ_=d>;mLbjD7$JEig(H%4rjkacnGyq|l&{!tc! z2nm}$>d>O$nD58(7~Fn(<(#1ksk#TAnmw+#y;QcU*xzi!Y8P39Cyg(%uMCcte|Us( zDEVyb2y+herFU$y%In%V)i$}!wn;f9+85p)_~pRcC$tOcY7NVTkB>w>J#BC7HvRSV z!wnW>T4mKIpSpR&7OCdl7|{77Dl;WuvMS5NHAQ9LJBQW#ogONtt9Ke?AIh7#i`V*n z?GdWB<)_?8Mdvk<&$TaWCJ|ZP)arLAAyE z3+6?CbUqZcF`H>=J@fcunxaN}bAn#vwWck2#E25_vB$6FUOGEwNIWNG^=Y1P*LlOy zxr?9Go-(*k&cF-ge8E-Obh|0@d!NI{9DF%EzpY-Y^JezCAKg^`q5ghC2iF3jL$0A3 z&gJuvv5%m6r*N#LNrke8wzPp3%Fhr8Y5rVcRw_S{J_>h4Bb7B6p)30M=vc&Wqy-*-12Scbb$bE1DmV!%r2YP7~5X;3tdC=hDJ~ zH2e=5q+qm6hLoJFgxo*$l`n7A7CKZu9a}ZS?9>~^%O~GYJ2~%|@Z~yN=`(e5`qRer zBD`gK;di}*{ye*Hdqc_j4RR6HT)X!di*0Fl;Xv$h)(tSC-orYUt zTLU)8mvTF1-(AV2O;|U}Y|-HjR~uYJd0+JgipQRIbLueE7+HVnjINp8!rix@HR!xv zvBafi%@*;_=L=P1V`7j?l!Ab2lUBw(y&CN}*X=NwmrrYeDwqNQiXM&`%AO%Ohl8hW>zZ?P_q6=y=COhKx zxNQZqf?hmQnyCmlOh_N-xD|3y{S?hD#7)vfq$=)+0*&m9Bb8O2TI@wCZfB7cbY$`2 z;Jdo>DH)Qs!QUzF&k`P4JY6~*yfqi+;HFX-ytQsOpM;O#m#N&K=TzPYa9nmK^{g{hv3tDRMMAZff$6M zADjc>Pw&lIclyKD+g4i4DazUdvNTI?Wlf}UOrqsXh8sHP1$T~Bx3oIQbvCvRyG`~S+3CFR z%MG*b&$}E-UaHgF{oV$BAGI z;=y+b;bf*xXft>mg zvMkr%(ENGhq8g_6eK$@*u+Po%rnDfx8zsD%^=V%YJ{~B1G&9;K{MPcbT3H+SwQe%| zeXqgdINevR^5m9<$6sPEpEw=X6U&@v9sS{%sM%ihzV+U&-@klx-uonD5mV35z~ze2 zRB!N-2bx{Gh6mS|-ywUyEaQ028_g@c(&c&Da(2M^WqVZD-M-;g9Vd99Ntyj>>;}Ox zrqZ?Ou{Lv;&;Jn8WTw@9guH_1UnD{w_&X&Wj(hTCaD5oA274gMMdff=Wcer(8mbY; zwBkN#S?(?FwwfpJPkzJ||8R5cklD+mGy8d*m~TphBXiwS20T;@4NUxeb9wrw^>`Q} zW=!_Seev-XUKJk2?ot;GjyYKxIEfS>Es-}8-1SKK@*SH2U%p57m;usqLdlVG6Mp;0 zY!A+@`NIpeOKsvTU&%Jx%q-nh892W+toV~r>4H78KFI1d@|Wp)?T#7no%VgKr#xxW z^Jl50S|j{NCj=%b+f`nhp|W<|si=0nJ5yiqUOzW+jVp~W%(N_DQaSu^?wN_-c3e7O zUVeGg9|ig=$1GYlbVV`yLu9lgOs*1IPz_Rp#RojK0SA;>Ampd?MmI>B!CtabMruT9w=Sc}NHU^LMe6!8oUlU-NXgd?+)x zJ#9UU)K&FC{7t7EZ~N3R?EJd-hwpe}&PB(roLu5GG{L(X-!tt}n~4P@^Xulq@QYrJ zla^OiT&33K9$K(sZ}N-Kp|u-|tM9%PP*%u2x*i%cS=OuO&W7A=(@L+e+ZS;A*2*b9 zGcM&G7#4heU|zji=n8;wrSb6C8GbwMw|JMf@f`<{vR^ApTum+qgK zAJ}xFFz={|ZENQ7IKzp$yJ=-h@d9}z$aa74&US;bS5;==or8*hTYl-b53~M9AN?QY z0?`csjx+GSHvjAL>8&^kUAa`NIQ>A{UYZE^W(H&mAh8b7s%%S?8X7l{=;H zwU+m$dh_VfuGpAgmcKgxa%uYAFj75cKHg>Y;f>}ysN0hB7A!QIdF||2gXWRTJ6_Gr zx^OuBz>HC$c!>TlF*ahO8?BR;SQNeT)$yMl`F-<}Rk^=3v~133Y0>)P`KDcuf8W|> z(AGoSd}p6N89;T8_=MlxYPaBSUgkYL>n#nlZLCV9iEc5Z<)tC_OC$4exG(6R z--iDW^IJ}up!cFdMg}(;^!K@NzZ@Oz`I4mxEs08I<5M<9S483y@d!LjTM=S=9Cu_K zZyH>*8{-Py*Y{-2@>jP874IrrkXU;yFX6VA?ueOs*0`CrNq6K(N{vhHp9N`$}yzG?kWqwtT>5bi$0hrG7gT*toRb)2+2e0!|g zgVIHHC$Cap?VeFFB=;9jhw)ZPH*(Vl<-AYZvHxShOEqdpht}jS;Yx4QqI`3MMVg-b zd^x2jH`?63z-m${G8f2R-%%Qy{5XB_YnI$pt%*U7of9+@yKZm(Ejy7yb>+XYA0n@K z#^mi-_ti#k+3T+EUl`Tte6wuVIA^Zi?L*Ek7UgTyubG%%^`Tu^XdGSYYjb(@{a5yP zQ@7Ag+ccX$*rW31{OY!ihXyZVrWQ9%IBAw6RGrY3q0brHNY7bQuD^W!`H;*xk!yD^ z>e%($k`vJv2Zz)YgmCr_R0*6rK;Jnuc=`MhYn>MlqO6v)u3xgnYtb!w0a*mmV6F^_ zgy&zv|99SP$f*D6&ZhSxS4I9jT(9TTlAuX;QxSCFnf3fb_^GOAFqss&8~(f_pkT|?-M>jyurEp2YD_-bo-*?+om z%g)&w*6YyD=C)V_XBX3U2HmN9e^I$SCy6S)N`%Y6nN%id2&S@BSztqyDF_5`9!B8rSV* zOqQ_z5|Qu!w$Wqa z$La->8bx+57pR`~RaHG%)I7Z8`i7um+bv&znd{i;yZd_lY^B>vZKuzEllL)m>ACW2 zMMhTNxa`ocV>(8^jhpveG5)$??cAy-PqMe}&kh}OEkf$VqnM${VYz-zHkl8?kI8zS}-%QBl10@#Yn$o>)v{S9XpabAz|(0CPa+ VwV{f?MtV2Z<<#xD)%{)k{{Uvk$TF(4}TazwEl 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 diff --git a/LibreHardwareMonitorLib/Interop/InpOut.cs b/LibreHardwareMonitorLib/Interop/InpOut.cs new file mode 100644 index 0000000..b9a094c --- /dev/null +++ b/LibreHardwareMonitorLib/Interop/InpOut.cs @@ -0,0 +1,19 @@ +using System; +using System.Runtime.InteropServices; + +namespace LibreHardwareMonitor.Interop +{ + internal class InpOut + { + public delegate IntPtr MapPhysToLinDelegate(IntPtr pbPhysAddr, uint dwPhysSize, out IntPtr pPhysicalMemoryHandle); + + public delegate bool UnmapPhysicalMemoryDelegate(IntPtr PhysicalMemoryHandle, IntPtr pbLinAddr); + + [DllImport("inpout.dll", EntryPoint = "MapPhysToLin", CallingConvention = CallingConvention.StdCall)] + public static extern IntPtr MapPhysToLin(IntPtr pbPhysAddr, uint dwPhysSize, out IntPtr pPhysicalMemoryHandle); + + [DllImport("inpout.dll", EntryPoint = "UnmapPhysicalMemory", CallingConvention = CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, IntPtr pbLinAddr); + } +} diff --git a/LibreHardwareMonitorLib/LibreHardwareMonitorLib.csproj b/LibreHardwareMonitorLib/LibreHardwareMonitorLib.csproj index a10cae5..ad0722f 100644 --- a/LibreHardwareMonitorLib/LibreHardwareMonitorLib.csproj +++ b/LibreHardwareMonitorLib/LibreHardwareMonitorLib.csproj @@ -24,17 +24,21 @@ ..\bin\Release\ - - + + + + + + diff --git a/LibreHardwareMonitorLib/Resources/WinRing0.sys b/LibreHardwareMonitorLib/Resources/WinRing0.sys new file mode 100644 index 0000000000000000000000000000000000000000..feaea414a8b4991a2de419dc0c81a9144256807b GIT binary patch literal 14416 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 literal 0 HcmV?d00001 diff --git a/LibreHardwareMonitorLib/Resources/inpout32.dll b/LibreHardwareMonitorLib/Resources/inpout32.dll new file mode 100644 index 0000000000000000000000000000000000000000..8889280046028c78b7a379a7e284399b6e1ab0c4 GIT binary patch literal 98304 zcmeFae|S{YwLg3&Gf7Th!WlGy$S((pibg3KP~s2_k_kZxPKcQ}LIU1GI*zoZ@f^S_ zfuv_bbFvxb-qQQhZ)poR^nU3r@4d9ON?VH)1`|+Jet4A%*G8M_4ns8*OajE5?`Q2Z zlLWo(z3=nB&-4Bx4|C4hzt&!R?X}k4d+oJ%${yP$*(FJG;AfhWbO3MqS0tW)`_YNy zF*p8ZjP!iQ>r)Td7Qa6Ak>C?gx!2Zx^J{gFf8G7n$G`E7Z>sLUTkWpXzTtl28}8zV zE8JiI=Bm{*GBZczCO}{Pw;wKf`OS-ylfNAq&rbe#gm+~8X!84bZ;bxib^>GYw>d>+T24C!~cp1 zUft?7-$cf55FF4za^t-c?-BosB!7o3*q`;RH_>ux&Qs7Gpd`W>XDexr)zNEmH z6!?+?UsB-z1qJlNy**gVsZ)bHelEGp?9%;`Yd1yt%xoXNJ5ohDYKR@9f91OyK9O8H zx2eT=Xp34F=Q=}D)+WaWnDiZUL z@mHLZ)OeW69dZET)?8Y5=0|;mKq^p^m$GcCJY;Jw&K(1coW4*>t+6;aiybKsI)Kqq z3!|o}cAJ@91l)YV=Rpo+bp>G*k$l{XI`qS?$l_cX=o6J{l@}bj!$=fei^O(;L?Zco z{xRf^@<}7}2y&vmE|?L9+v`NgUllx0wTE-F(2$@54_&7`R0)3vkrfC}qHL#| z&ZrxLZ=vWgRK6DVBx(l9sD7%92dwJR-BKupo3sS4Ok zM*^5;ajvV}SK&9a=OT<3@!PWC{gOh^Bs1HQD6idOb&B4fsx1*L6hm+l@nr4pV}@B)-5R(?ZfxVwdS) z)!X^ksIlSPNkn*HIY~6QoUcJuptWeMKoJGqOG7ra+!i!#iX^&CJkS~$*vB0Z2ALH) z@$EC;@tf}e@hsrFq9*@Xew2?MM&4ov@B<|e^8+;u{LoKmhI4b09q;2l6ixC&ZZf)@ zAAv3Dzu|}AHT>`b2=fJg*p0}M{Gf!NMa<`UVmaypPf+b6dBRK4kK|5Y%I}AbO+P$I z5bUpW$8E$NxkEVo4dwt;*HV5touE4Y=bS<`1gHE6*fbs{^2T-(qp(cDDcOQkAnCh@ z8KpSaP3%$2G6koAZ(6birxfSj8j_$`7U$m4{7CK$UTBek1hSmCL2$}a{(xxsNKPrv z&Gn7s6zWjXtAC4Aa)4`sQ{G3T6UZkx#d`VKY!Z`Usd*bp?7<;<(dtPc8-zT)&7iy} z=q`t-yAr~sE~7+X0qY-hfwmZ*#I6U(;#m_T{VaHU>Bur5!iX|{Ei+MuEXg%7E07

HRkK)BNb?$D4;p@u%G#4G1NV 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 z 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 LV>9qSnt`7HBkO?C literal 0 HcmV?d00001