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