2025-04-27 07:49:33 -04:00

107 lines
2.3 KiB
C

/*++
Copyright (c) 2000 Microsoft Corporation All Rights Reserved
Module Name:
cpuperf.h
Environment:
User mode
Revision History:
10-18-2000 Todd Carpenter
--*/
#include <windows.h>
#include <wmium.h>
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
GUID ProcessorStatusGuid = {0xee751f9d, 0xcec5, 0x4686, {0x98, 0x16, 0xff, 0x6d, 0x1c, 0xa2, 0x26, 0x1c}};
GUID ProcessorMethodGuid = {0x590c82fc, 0x98a3, 0x48e1, {0xbe, 0x4, 0xfe, 0x11, 0x44, 0x1a, 0x11, 0xe7}};
#define WmiSetProcessorPerfStateMethodId 0x1
// Processor_Perf_Level Flags
#define PROCESSOR_STATE_TYPE_PERFORMANCE 0x1
#define PROCESSOR_STATE_TYPE_THROTTLE 0x2
typedef struct {
ULONG Frequency; // in megahertz
ULONG Flags;
ULONG PercentFrequency; // for quick lookup
} PROCESSOR_PERFORMANCE_STATE, *PPROCESSOR_PERFORMANCE_STATE;
typedef struct {
PUCHAR TransitionFunction;
ULONG TransitionLatency; // in milliseconds
ULONG Current;
ULONG Count;
PROCESSOR_PERFORMANCE_STATE State[1]; // sorted from fastest to slowest
} PROCESSOR_PERFORMANCE_STATES, *PPROCESSOR_PERFORMANCE_STATES;
typedef struct _PROCESSOR_WMI_STATUS_DATA {
ULONG CurrentPerfState;
ULONG LastRequestedThrottle;
ULONG LastTransitionResult;
ULONG ThrottleValue;
ULONG LowestPerfState;
ULONG UsingLegacyInterface;
PROCESSOR_PERFORMANCE_STATES PerfStates;
} PROCESSOR_WMI_STATUS_DATA, *PPROCESSOR_WMI_STATUS_DATA;
//
// functions
//
VOID
__cdecl
_tmain(
IN INT argc,
IN TCHAR *argv[]
);
ULONG
GetProcessorPerformanceStatusData(
IN PPROCESSOR_WMI_STATUS_DATA *ProcessorData
);
ULONG
SetProcessorPerformanceState(
IN ULONG TargetState,
IN PTSTR InstanceName,
OUT PULONG ReturnedValue
);
ULONG
GetInstanceName(
OUT PTSTR *Buffer
);
VOID
FreeData(
IN PVOID Data
);
VOID
DisplayProcessorData (
IN PPROCESSOR_WMI_STATUS_DATA Data,
IN PTSTR InstanceName
);