Esempio n. 1
0
        internal static bool GetMaxProcessorSpeeds(out int[] result)
        {
            IntPtr zero = IntPtr.Zero;
            bool   flag = false;

            result = new int[Environment.ProcessorCount];
            try
            {
                flag = CPUPowerWrapper.AllocateAndGetProcessorInfo(out zero);
                if (flag)
                {
                    int num = 0;
                    for (int i = 0; i < Environment.ProcessorCount; i++)
                    {
                        IntPtr ptr = CPUPowerWrapper.AddOffset(zero, num);
                        PROCESSOR_POWER_INFORMATION processor_POWER_INFORMATION = (PROCESSOR_POWER_INFORMATION)Marshal.PtrToStructure(ptr, typeof(PROCESSOR_POWER_INFORMATION));
                        result[i] = (int)processor_POWER_INFORMATION.MaxMhz;
                        num      += CPUPowerWrapper.PpiSize;
                    }
                }
            }
            finally
            {
                Marshal.FreeCoTaskMem(zero);
            }
            return(flag);
        }
Esempio n. 2
0
        internal static bool GetCurrentPowerInfoForProcessor(int currentProcessor, out PROCESSOR_POWER_INFORMATION ppi)
        {
            IntPtr zero = IntPtr.Zero;
            bool   flag = false;

            try
            {
                flag = CPUPowerWrapper.AllocateAndGetProcessorInfo(out zero);
                if (flag)
                {
                    int    offset = currentProcessor * CPUPowerWrapper.PpiSize;
                    IntPtr ptr    = CPUPowerWrapper.AddOffset(zero, offset);
                    ppi = (PROCESSOR_POWER_INFORMATION)Marshal.PtrToStructure(ptr, typeof(PROCESSOR_POWER_INFORMATION));
                }
                else
                {
                    ppi = default(PROCESSOR_POWER_INFORMATION);
                }
            }
            finally
            {
                Marshal.FreeCoTaskMem(zero);
            }
            return(flag);
        }