ホーム › System.JobObjects › JOBOBJECT_BASIC_LIMIT_INFORMATION
JOBOBJECT_BASIC_LIMIT_INFORMATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| PerProcessUserTimeLimit | LONGLONG | 8 | +0 | +0 | 各プロセスのユーザーモード時間上限(100ナノ秒単位)。 |
| PerJobUserTimeLimit | LONGLONG | 8 | +8 | +8 | ジョブ全体のユーザーモード時間上限(100ナノ秒単位)。 |
| LimitFlags | JOB_OBJECT_LIMIT | 4 | +16 | +16 | どの制限を有効にするかを示すJOB_OBJECT_LIMITフラグ。 |
| MinimumWorkingSetSize | UINT_PTR | 8/4 | +24 | +20 | 各プロセスのワーキングセット最小サイズ(バイト)。 |
| MaximumWorkingSetSize | UINT_PTR | 8/4 | +32 | +24 | 各プロセスのワーキングセット最大サイズ(バイト)。 |
| ActiveProcessLimit | DWORD | 4 | +40 | +28 | ジョブで同時にアクティブにできるプロセス数の上限。 |
| Affinity | UINT_PTR | 8/4 | +48 | +32 | ジョブ内プロセスのプロセッサアフィニティマスク。 |
| PriorityClass | DWORD | 4 | +56 | +36 | ジョブ内プロセスに適用する優先度クラス。 |
| SchedulingClass | DWORD | 4 | +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 Structureimport 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: uint32struct 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