¿Cómo obtener la temperatura de la CPU?

Necesito reunir alguna información del sistema para la aplicación que estoy desarrollando. La memoria disponible y la carga de la CPU son fáciles de obtener utilizando C #. Desafortunadamente, la temperatura de la CPU no es tan fácil. He intentado usar WMI pero no pude conseguir nada usando

Win32_TemperatureProbe

o

MSAcpi_ThermalZoneTemperature

¿Alguien ya ha tratado este tema? Me pregunto cómo los programas de monitoreo, como SiSoftware Sandra, pueden obtener esa información ...

En caso de que alguien esté interesado, aquí está el código de la clase:

public class SystemInformation
{
    private System.Diagnostics.PerformanceCounter m_memoryCounter;
    private System.Diagnostics.PerformanceCounter m_CPUCounter;

    public SystemInformation()
    {
        m_memoryCounter = new System.Diagnostics.PerformanceCounter();
        m_memoryCounter.CategoryName = "Memory";
        m_memoryCounter.CounterName = "Available MBytes";

        m_CPUCounter = new System.Diagnostics.PerformanceCounter();
        m_CPUCounter.CategoryName = "Processor";
        m_CPUCounter.CounterName = "% Processor Time";
        m_CPUCounter.InstanceName = "_Total"; 
    }

    public float GetAvailableMemory()
    {
        return m_memoryCounter.NextValue();
    }

    public float GetCPULoad()
    {
        return m_CPUCounter.NextValue();
    }

    public float GetCPUTemperature()
    {
        //...
        return 0;
    }
}

Respuestas a la pregunta(8)

Su respuesta a la pregunta