Como obter a temperatura da CPU?

Eu preciso reunir algumas informações do sistema para o aplicativo que estou desenvolvendo. A memória disponível e a carga da CPU são fáceis de obter usando o C #. Infelizmente, a temperatura da CPU não é tão fácil. Eu tentei usar o WMI, mas não consegui nada usando

Win32_TemperatureProbe

ou

MSAcpi_ThermalZoneTemperature

Alguém já lidou com esta questão? Eu estou querendo saber como os programas de monitoramento, como SiSoftware Sandra, podem obter essa informação ...

Apenas no caso de alguém estar interessado, aqui está o código da classe:

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;
    }
}

questionAnswers(8)

yourAnswerToTheQuestion