Win32 API 日本語リファレンス
ホームSystem.SystemServices › PROCESSOR_PERFSTATE_POLICY

PROCESSOR_PERFSTATE_POLICY

構造体
サイズx64: 40 バイト / x86: 32 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
RevisionDWORD4+0+0ポリシー構造体のリビジョン番号。
MaxThrottleBYTE1+4+4最大スロットル率(パフォーマンス上限、パーセント)。
MinThrottleBYTE1+5+5最小スロットル率(パフォーマンス下限、パーセント)。
BusyAdjThresholdBYTE1+6+6ビジー率調整のしきい値(パーセント)。
Anonymous_Anonymous_e__Union8/4+8+8ポリシー動作フラグを保持する無名共用体。
TimeCheckDWORD4+16+12パフォーマンス状態評価の時間間隔(マイクロ秒単位)。
IncreaseTimeDWORD4+20+16周波数引き上げ判定に要する継続時間。
DecreaseTimeDWORD4+24+20周波数引き下げ判定に要する継続時間。
IncreasePercentDWORD4+28+24周波数引き上げを行う使用率しきい値(パーセント)。
DecreasePercentDWORD4+32+28周波数引き下げを行う使用率しきい値(パーセント)。

共用体: _Anonymous_e__Union x64 8B / x86 4B

フィールドサイズx64x86
SpareBYTE1+0+0
Flags_Flags_e__Union8/4+0+0

各言語での定義

#include <windows.h>

// PROCESSOR_PERFSTATE_POLICY  (x64 40 / x86 32 バイト)
typedef struct PROCESSOR_PERFSTATE_POLICY {
    DWORD Revision;
    BYTE MaxThrottle;
    BYTE MinThrottle;
    BYTE BusyAdjThreshold;
    _Anonymous_e__Union Anonymous;
    DWORD TimeCheck;
    DWORD IncreaseTime;
    DWORD DecreaseTime;
    DWORD IncreasePercent;
    DWORD DecreasePercent;
} PROCESSOR_PERFSTATE_POLICY;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PROCESSOR_PERFSTATE_POLICY
{
    public uint Revision;
    public byte MaxThrottle;
    public byte MinThrottle;
    public byte BusyAdjThreshold;
    public _Anonymous_e__Union Anonymous;
    public uint TimeCheck;
    public uint IncreaseTime;
    public uint DecreaseTime;
    public uint IncreasePercent;
    public uint DecreasePercent;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PROCESSOR_PERFSTATE_POLICY
    Public Revision As UInteger
    Public MaxThrottle As Byte
    Public MinThrottle As Byte
    Public BusyAdjThreshold As Byte
    Public Anonymous As _Anonymous_e__Union
    Public TimeCheck As UInteger
    Public IncreaseTime As UInteger
    Public DecreaseTime As UInteger
    Public IncreasePercent As UInteger
    Public DecreasePercent As UInteger
End Structure
import ctypes
from ctypes import wintypes

class PROCESSOR_PERFSTATE_POLICY(ctypes.Structure):
    _fields_ = [
        ("Revision", wintypes.DWORD),
        ("MaxThrottle", ctypes.c_ubyte),
        ("MinThrottle", ctypes.c_ubyte),
        ("BusyAdjThreshold", ctypes.c_ubyte),
        ("Anonymous", _Anonymous_e__Union),
        ("TimeCheck", wintypes.DWORD),
        ("IncreaseTime", wintypes.DWORD),
        ("DecreaseTime", wintypes.DWORD),
        ("IncreasePercent", wintypes.DWORD),
        ("DecreasePercent", wintypes.DWORD),
    ]
#[repr(C)]
pub struct PROCESSOR_PERFSTATE_POLICY {
    pub Revision: u32,
    pub MaxThrottle: u8,
    pub MinThrottle: u8,
    pub BusyAdjThreshold: u8,
    pub Anonymous: _Anonymous_e__Union,
    pub TimeCheck: u32,
    pub IncreaseTime: u32,
    pub DecreaseTime: u32,
    pub IncreasePercent: u32,
    pub DecreasePercent: u32,
}
import "golang.org/x/sys/windows"

type PROCESSOR_PERFSTATE_POLICY struct {
	Revision uint32
	MaxThrottle byte
	MinThrottle byte
	BusyAdjThreshold byte
	Anonymous _Anonymous_e__Union
	TimeCheck uint32
	IncreaseTime uint32
	DecreaseTime uint32
	IncreasePercent uint32
	DecreasePercent uint32
}
type
  PROCESSOR_PERFSTATE_POLICY = record
    Revision: DWORD;
    MaxThrottle: Byte;
    MinThrottle: Byte;
    BusyAdjThreshold: Byte;
    Anonymous: _Anonymous_e__Union;
    TimeCheck: DWORD;
    IncreaseTime: DWORD;
    DecreaseTime: DWORD;
    IncreasePercent: DWORD;
    DecreasePercent: DWORD;
  end;
const PROCESSOR_PERFSTATE_POLICY = extern struct {
    Revision: u32,
    MaxThrottle: u8,
    MinThrottle: u8,
    BusyAdjThreshold: u8,
    Anonymous: _Anonymous_e__Union,
    TimeCheck: u32,
    IncreaseTime: u32,
    DecreaseTime: u32,
    IncreasePercent: u32,
    DecreasePercent: u32,
};
type
  PROCESSOR_PERFSTATE_POLICY {.bycopy.} = object
    Revision: uint32
    MaxThrottle: uint8
    MinThrottle: uint8
    BusyAdjThreshold: uint8
    Anonymous: _Anonymous_e__Union
    TimeCheck: uint32
    IncreaseTime: uint32
    DecreaseTime: uint32
    IncreasePercent: uint32
    DecreasePercent: uint32
struct PROCESSOR_PERFSTATE_POLICY
{
    uint Revision;
    ubyte MaxThrottle;
    ubyte MinThrottle;
    ubyte BusyAdjThreshold;
    _Anonymous_e__Union Anonymous;
    uint TimeCheck;
    uint IncreaseTime;
    uint DecreaseTime;
    uint IncreasePercent;
    uint DecreasePercent;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PROCESSOR_PERFSTATE_POLICY サイズ: 32 バイト(x86)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; Revision : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; MaxThrottle : BYTE (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; MinThrottle : BYTE (+5, 1byte)  poke st,5,値  /  値 = peek(st,5)
; BusyAdjThreshold : BYTE (+6, 1byte)  poke st,6,値  /  値 = peek(st,6)
; Anonymous : _Anonymous_e__Union (+8, 4byte)  varptr(st)+8 を基点に操作(4byte:入れ子/配列)
; TimeCheck : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; IncreaseTime : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; DecreaseTime : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; IncreasePercent : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; DecreasePercent : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PROCESSOR_PERFSTATE_POLICY サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; Revision : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; MaxThrottle : BYTE (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; MinThrottle : BYTE (+5, 1byte)  poke st,5,値  /  値 = peek(st,5)
; BusyAdjThreshold : BYTE (+6, 1byte)  poke st,6,値  /  値 = peek(st,6)
; Anonymous : _Anonymous_e__Union (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; TimeCheck : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; IncreaseTime : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; DecreaseTime : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; IncreasePercent : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; DecreasePercent : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PROCESSOR_PERFSTATE_POLICY
    #field int Revision
    #field byte MaxThrottle
    #field byte MinThrottle
    #field byte BusyAdjThreshold
    #field byte Anonymous 8
    #field int TimeCheck
    #field int IncreaseTime
    #field int DecreaseTime
    #field int IncreasePercent
    #field int DecreasePercent
#endstruct

stdim st, PROCESSOR_PERFSTATE_POLICY        ; NSTRUCT 変数を確保
st->Revision = 100
mes "Revision=" + st->Revision
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。