diff -r 65f2d62d7838 -r 2129ccee0bd1 Hardware/WinRing0.cs --- a/Hardware/WinRing0.cs Wed Aug 04 19:10:20 2010 +0000 +++ b/Hardware/WinRing0.cs Wed Aug 04 20:27:05 2010 +0000 @@ -39,7 +39,7 @@ using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; -using System.Text; +using System.Threading; namespace OpenHardwareMonitor.Hardware { @@ -56,6 +56,7 @@ } private static bool available = false; + public static Mutex isaBusMutex; private static string GetDllName() { int p = (int)System.Environment.OSVersion.Platform; @@ -103,20 +104,22 @@ private static InitializeOlsDelegate InitializeOls; private static DeinitializeOlsDelegate DeinitializeOls; - public static GetDllStatusDelegate GetDllStatus; - public static IsCpuidDelegate IsCpuid; - public static CpuidDelegate Cpuid; - public static CpuidTxDelegate CpuidTx; - public static RdmsrDelegate Rdmsr; - public static RdmsrTxDelegate RdmsrTx; - public static ReadIoPortByteDelegate ReadIoPortByte; - public static WriteIoPortByteDelegate WriteIoPortByte; - public static SetPciMaxBusIndexDelegate SetPciMaxBusIndex; - public static FindPciDeviceByIdDelegate FindPciDeviceById; - public static ReadPciConfigDwordExDelegate ReadPciConfigDwordEx; - public static WritePciConfigDwordExDelegate WritePciConfigDwordEx; - public static RdtscTxDelegate RdtscTx; - public static RdtscDelegate Rdtsc; + public static readonly GetDllStatusDelegate GetDllStatus; + public static readonly IsCpuidDelegate IsCpuid; + public static readonly CpuidDelegate Cpuid; + public static readonly CpuidTxDelegate CpuidTx; + public static readonly RdmsrDelegate Rdmsr; + public static readonly RdmsrTxDelegate RdmsrTx; + public static readonly ReadIoPortByteDelegate ReadIoPortByte; + public static readonly WriteIoPortByteDelegate WriteIoPortByte; + public static readonly SetPciMaxBusIndexDelegate SetPciMaxBusIndex; + public static readonly FindPciDeviceByIdDelegate FindPciDeviceById; + public static readonly ReadPciConfigDwordExDelegate ReadPciConfigDwordEx; + public static readonly WritePciConfigDwordExDelegate WritePciConfigDwordEx; + public static readonly RdtscTxDelegate RdtscTx; + public static readonly RdtscDelegate Rdtsc; + + private static void GetDelegate(string entryPoint, out T newDelegate) where T : class @@ -150,18 +153,32 @@ try { if (InitializeOls != null && InitializeOls()) available = true; - } catch (DllNotFoundException) { } + } catch (DllNotFoundException) { } + + isaBusMutex = new Mutex(false, "Access_ISABUS.HTP.Method"); } public static bool IsAvailable { get { return available; } } + public static bool WaitIsaBusMutex() { + try { + return isaBusMutex.WaitOne(10); + } catch { return false; } + } + + public static void ReleaseIsaBusMutex() { + isaBusMutex.ReleaseMutex(); + } + private static Deinitializer deinitializer = new Deinitializer(); private class Deinitializer { ~Deinitializer() { if (available) DeinitializeOls(); + + isaBusMutex.Close(); } } }