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

JOBOBJECT_BASIC_LIMIT_INFORMATION

構造体
サイズx64: 64 バイト / x86: 48 バイト

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

フィールド

フィールドサイズx64x86説明
PerProcessUserTimeLimitLONGLONG8+0+0各プロセスのユーザーモード時間上限(100ナノ秒単位)。
PerJobUserTimeLimitLONGLONG8+8+8ジョブ全体のユーザーモード時間上限(100ナノ秒単位)。
LimitFlagsJOB_OBJECT_LIMIT4+16+16どの制限を有効にするかを示すJOB_OBJECT_LIMITフラグ。
MinimumWorkingSetSizeUINT_PTR8/4+24+20各プロセスのワーキングセット最小サイズ(バイト)。
MaximumWorkingSetSizeUINT_PTR8/4+32+24各プロセスのワーキングセット最大サイズ(バイト)。
ActiveProcessLimitDWORD4+40+28ジョブで同時にアクティブにできるプロセス数の上限。
AffinityUINT_PTR8/4+48+32ジョブ内プロセスのプロセッサアフィニティマスク。
PriorityClassDWORD4+56+36ジョブ内プロセスに適用する優先度クラス。
SchedulingClassDWORD4+60+40ジョブのスケジューリングクラス(0〜9)。値が大きいほど長いタイムスライス。

各言語での定義

#include <windows.h>

// JOBOBJECT_BASIC_LIMIT_INFORMATION  (x64 64 / x86 48 バイト)
typedef struct JOBOBJECT_BASIC_LIMIT_INFORMATION {
    LONGLONG PerProcessUserTimeLimit;
    LONGLONG PerJobUserTimeLimit;
    JOB_OBJECT_LIMIT LimitFlags;
    UINT_PTR MinimumWorkingSetSize;
    UINT_PTR MaximumWorkingSetSize;
    DWORD ActiveProcessLimit;
    UINT_PTR Affinity;
    DWORD PriorityClass;
    DWORD SchedulingClass;
} JOBOBJECT_BASIC_LIMIT_INFORMATION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct JOBOBJECT_BASIC_LIMIT_INFORMATION
{
    public long PerProcessUserTimeLimit;
    public long PerJobUserTimeLimit;
    public uint LimitFlags;
    public UIntPtr MinimumWorkingSetSize;
    public UIntPtr MaximumWorkingSetSize;
    public uint ActiveProcessLimit;
    public UIntPtr Affinity;
    public uint PriorityClass;
    public uint SchedulingClass;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure JOBOBJECT_BASIC_LIMIT_INFORMATION
    Public PerProcessUserTimeLimit As Long
    Public PerJobUserTimeLimit As Long
    Public LimitFlags As UInteger
    Public MinimumWorkingSetSize As UIntPtr
    Public MaximumWorkingSetSize As UIntPtr
    Public ActiveProcessLimit As UInteger
    Public Affinity As UIntPtr
    Public PriorityClass As UInteger
    Public SchedulingClass As UInteger
End Structure
import ctypes
from ctypes import wintypes

class JOBOBJECT_BASIC_LIMIT_INFORMATION(ctypes.Structure):
    _fields_ = [
        ("PerProcessUserTimeLimit", ctypes.c_longlong),
        ("PerJobUserTimeLimit", ctypes.c_longlong),
        ("LimitFlags", wintypes.DWORD),
        ("MinimumWorkingSetSize", ctypes.c_size_t),
        ("MaximumWorkingSetSize", ctypes.c_size_t),
        ("ActiveProcessLimit", wintypes.DWORD),
        ("Affinity", ctypes.c_size_t),
        ("PriorityClass", wintypes.DWORD),
        ("SchedulingClass", wintypes.DWORD),
    ]
#[repr(C)]
pub struct JOBOBJECT_BASIC_LIMIT_INFORMATION {
    pub PerProcessUserTimeLimit: i64,
    pub PerJobUserTimeLimit: i64,
    pub LimitFlags: u32,
    pub MinimumWorkingSetSize: usize,
    pub MaximumWorkingSetSize: usize,
    pub ActiveProcessLimit: u32,
    pub Affinity: usize,
    pub PriorityClass: u32,
    pub SchedulingClass: u32,
}
import "golang.org/x/sys/windows"

type JOBOBJECT_BASIC_LIMIT_INFORMATION struct {
	PerProcessUserTimeLimit int64
	PerJobUserTimeLimit int64
	LimitFlags uint32
	MinimumWorkingSetSize uintptr
	MaximumWorkingSetSize uintptr
	ActiveProcessLimit uint32
	Affinity uintptr
	PriorityClass uint32
	SchedulingClass uint32
}
type
  JOBOBJECT_BASIC_LIMIT_INFORMATION = record
    PerProcessUserTimeLimit: Int64;
    PerJobUserTimeLimit: Int64;
    LimitFlags: DWORD;
    MinimumWorkingSetSize: NativeUInt;
    MaximumWorkingSetSize: NativeUInt;
    ActiveProcessLimit: DWORD;
    Affinity: NativeUInt;
    PriorityClass: DWORD;
    SchedulingClass: DWORD;
  end;
const JOBOBJECT_BASIC_LIMIT_INFORMATION = extern struct {
    PerProcessUserTimeLimit: i64,
    PerJobUserTimeLimit: i64,
    LimitFlags: u32,
    MinimumWorkingSetSize: usize,
    MaximumWorkingSetSize: usize,
    ActiveProcessLimit: u32,
    Affinity: usize,
    PriorityClass: u32,
    SchedulingClass: u32,
};
type
  JOBOBJECT_BASIC_LIMIT_INFORMATION {.bycopy.} = object
    PerProcessUserTimeLimit: int64
    PerJobUserTimeLimit: int64
    LimitFlags: uint32
    MinimumWorkingSetSize: uint
    MaximumWorkingSetSize: uint
    ActiveProcessLimit: uint32
    Affinity: uint
    PriorityClass: uint32
    SchedulingClass: uint32
struct JOBOBJECT_BASIC_LIMIT_INFORMATION
{
    long PerProcessUserTimeLimit;
    long PerJobUserTimeLimit;
    uint LimitFlags;
    size_t MinimumWorkingSetSize;
    size_t MaximumWorkingSetSize;
    uint ActiveProcessLimit;
    size_t Affinity;
    uint PriorityClass;
    uint SchedulingClass;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; JOBOBJECT_BASIC_LIMIT_INFORMATION サイズ: 48 バイト(x86)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; PerProcessUserTimeLimit : LONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; PerJobUserTimeLimit : LONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; LimitFlags : JOB_OBJECT_LIMIT (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; MinimumWorkingSetSize : UINT_PTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; MaximumWorkingSetSize : UINT_PTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ActiveProcessLimit : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; Affinity : UINT_PTR (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; PriorityClass : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; SchedulingClass : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; JOBOBJECT_BASIC_LIMIT_INFORMATION サイズ: 64 バイト(x64)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; PerProcessUserTimeLimit : LONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; PerJobUserTimeLimit : LONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; LimitFlags : JOB_OBJECT_LIMIT (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; MinimumWorkingSetSize : UINT_PTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; MaximumWorkingSetSize : UINT_PTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; ActiveProcessLimit : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; Affinity : UINT_PTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; PriorityClass : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; SchedulingClass : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global JOBOBJECT_BASIC_LIMIT_INFORMATION
    #field int64 PerProcessUserTimeLimit
    #field int64 PerJobUserTimeLimit
    #field int LimitFlags
    #field intptr MinimumWorkingSetSize
    #field intptr MaximumWorkingSetSize
    #field int ActiveProcessLimit
    #field intptr Affinity
    #field int PriorityClass
    #field int SchedulingClass
#endstruct

stdim st, JOBOBJECT_BASIC_LIMIT_INFORMATION        ; NSTRUCT 変数を確保
st->PerProcessUserTimeLimit = 100
mes "PerProcessUserTimeLimit=" + st->PerProcessUserTimeLimit