JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| IoReadBytesLimit | ULONGLONG | 8 | +0 | +0 | LimitFlags メンバーに JOB_OBJECT_LIMIT_JOB_READ_BYTES を指定した場合、このメンバーは、ジョブ内のすべてのプロセスによって読み取られた合計 I/O バイト数に対する通知制限です。それ以外の場合、このメンバーは無視されます。 | ||||||||||||
| IoWriteBytesLimit | ULONGLONG | 8 | +8 | +8 | LimitFlags パラメーターに JOB_OBJECT_LIMIT_JOB_WRITE_BYTES を指定した場合、このメンバーは、ジョブ内のすべてのプロセスによって書き込まれた合計 I/O バイト数に対する通知制限です。それ以外の場合、このメンバーは無視されます。 | ||||||||||||
| PerJobUserTimeLimit | LONGLONG | 8 | +16 | +16 | LimitFlags パラメーターに JOB_OBJECT_LIMIT_JOB_TIME を指定した場合、このメンバーは、ジョブごとのユーザー モード実行時間(100 ナノ秒単位)に対する通知制限です。それ以外の場合、このメンバーは無視されます。 この制限を設定すると、システムは、ジョブに関連付けられたプロセスの累積実行時間をこの制限に加算します。たとえば、ジョブに関連付けられたプロセスが既に 5 分のユーザー モード実行時間を累積している状態で制限を 1 分に設定した場合、実際に適用される制限は 6 分になります。 PerJobUserTimeLimit を強制可能な制限として指定し、制限を超えたジョブ内のプロセスを終了させる方法については、JOBOBJECT_BASIC_LIMIT_INFORMATION 構造体を参照してください。 | ||||||||||||
| JobMemoryLimit | ULONGLONG | 8 | +24 | +24 | LimitFlags パラメーターに JOB_OBJECT_LIMIT_JOB_MEMORY を指定した場合、このメンバーは、ジョブ内のすべてのプロセスがコミットできる合計仮想メモリ(バイト単位)に対する通知制限です。それ以外の場合、このメンバーは無視されます。 JobMemoryLimit を強制可能な制限として指定し、制限を超えたジョブ内のプロセスがそれ以上メモリをコミットし続けられないようにする方法については、JOBOBJECT_EXTENDED_LIMIT_INFORMATION 構造体を参照してください。 | ||||||||||||
| RateControlTolerance | JOBOBJECT_RATE_CONTROL_TOLERANCE | 4 | +32 | +32 | LimitFlags パラメーターに JOB_OBJECT_LIMIT_RATE_CONTROL を指定した場合、このメンバーは、RateControlToleranceInterval メンバーで指定した間隔の間に、ジョブが CPU レート制御制限をどの程度超過できるかを指定します。それ以外の場合、このメンバーは無視されます。 このメンバーには、次のいずれかの値を指定できます。値を指定しない場合は、ToleranceHigh が使用されます。
| ||||||||||||
| RateControlToleranceInterval | JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL | 4 | +36 | +36 | LimitFlags パラメーターに JOB_OBJECT_LIMIT_RATE_CONTROL を指定した場合、このメンバーは、ジョブが CPU レート制御制限を超過したかどうかを判断するためにジョブの CPU 使用率を監視する間隔を指定します。それ以外の場合、このメンバーは無視されます。 このメンバーには、次のいずれかの値を指定できます。値を指定しない場合は、ToleranceIntervalShort が使用されます。
| ||||||||||||
| LimitFlags | JOB_OBJECT_LIMIT | 4 | +40 | +40 | 有効になっている制限フラグです。このメンバーは、他の構造体メンバーが使用されるかどうかを決定するビットフィールドです。次の値を任意に組み合わせて指定できます。
|
公式ドキュメント
ジョブ オブジェクトの通知制限に関する情報を格納します。この構造体は、SetInformationJobObject 関数および QueryInformationJobObject 関数で、JobObjectNotificationLimitInformation 情報クラスとともに使用されます。
解説(Remarks)
通知制限を超過すると、システムは、ジョブに関連付けられた I/O 完了ポートに JOB_OBJECT_MSG_NOTIFICATION_LIMIT メッセージを送信します。ジョブ内のプロセスは実行を継続し、指定された制限を超えても、メモリの割り当てや読み取り/書き込みバイトの転送を続けることができます。
I/O 完了ポートを監視しているアプリケーションは、JOB_OBJECT_MSG_NOTIFICATION_LIMIT メッセージを受信したら、QueryInformationJobObject を JobObjectLimitViolationInformation 情報クラスとともに呼び出さなければなりません。制限違反の情報は、照会時点で超過していたすべての通知制限に関する情報を含む JOBOBJECT_LIMIT_VIOLATION_STRUCTURE で受け取ります。システムは、QueryInformationJobObject が呼び出されるまで、次の JOB_OBJECT_MSG_NOTIFICATION_LIMIT メッセージを送信しません。
ジョブの CPU レート制御制限は、JOBOBJECT_CPU_RATE_CONTROL_INFORMATION 構造体で設定します。JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION 構造体の CPU レート制御値は、通知が送信されるまでに、ジョブが設定済みの CPU レート制御制限をどの程度超過できるかを指定します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION (x64 48 / x86 48 バイト)
typedef struct JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION {
ULONGLONG IoReadBytesLimit;
ULONGLONG IoWriteBytesLimit;
LONGLONG PerJobUserTimeLimit;
ULONGLONG JobMemoryLimit;
JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceInterval;
JOB_OBJECT_LIMIT LimitFlags;
} JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION
{
public ulong IoReadBytesLimit;
public ulong IoWriteBytesLimit;
public long PerJobUserTimeLimit;
public ulong JobMemoryLimit;
public int RateControlTolerance;
public int RateControlToleranceInterval;
public uint LimitFlags;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION
Public IoReadBytesLimit As ULong
Public IoWriteBytesLimit As ULong
Public PerJobUserTimeLimit As Long
Public JobMemoryLimit As ULong
Public RateControlTolerance As Integer
Public RateControlToleranceInterval As Integer
Public LimitFlags As UInteger
End Structureimport ctypes
from ctypes import wintypes
class JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION(ctypes.Structure):
_fields_ = [
("IoReadBytesLimit", ctypes.c_ulonglong),
("IoWriteBytesLimit", ctypes.c_ulonglong),
("PerJobUserTimeLimit", ctypes.c_longlong),
("JobMemoryLimit", ctypes.c_ulonglong),
("RateControlTolerance", ctypes.c_int),
("RateControlToleranceInterval", ctypes.c_int),
("LimitFlags", wintypes.DWORD),
]#[repr(C)]
pub struct JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION {
pub IoReadBytesLimit: u64,
pub IoWriteBytesLimit: u64,
pub PerJobUserTimeLimit: i64,
pub JobMemoryLimit: u64,
pub RateControlTolerance: i32,
pub RateControlToleranceInterval: i32,
pub LimitFlags: u32,
}import "golang.org/x/sys/windows"
type JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION struct {
IoReadBytesLimit uint64
IoWriteBytesLimit uint64
PerJobUserTimeLimit int64
JobMemoryLimit uint64
RateControlTolerance int32
RateControlToleranceInterval int32
LimitFlags uint32
}type
JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION = record
IoReadBytesLimit: UInt64;
IoWriteBytesLimit: UInt64;
PerJobUserTimeLimit: Int64;
JobMemoryLimit: UInt64;
RateControlTolerance: Integer;
RateControlToleranceInterval: Integer;
LimitFlags: DWORD;
end;const JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION = extern struct {
IoReadBytesLimit: u64,
IoWriteBytesLimit: u64,
PerJobUserTimeLimit: i64,
JobMemoryLimit: u64,
RateControlTolerance: i32,
RateControlToleranceInterval: i32,
LimitFlags: u32,
};type
JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION {.bycopy.} = object
IoReadBytesLimit: uint64
IoWriteBytesLimit: uint64
PerJobUserTimeLimit: int64
JobMemoryLimit: uint64
RateControlTolerance: int32
RateControlToleranceInterval: int32
LimitFlags: uint32struct JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION
{
ulong IoReadBytesLimit;
ulong IoWriteBytesLimit;
long PerJobUserTimeLimit;
ulong JobMemoryLimit;
int RateControlTolerance;
int RateControlToleranceInterval;
uint LimitFlags;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; IoReadBytesLimit : ULONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; IoWriteBytesLimit : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; PerJobUserTimeLimit : LONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; JobMemoryLimit : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; RateControlTolerance : JOBOBJECT_RATE_CONTROL_TOLERANCE (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; RateControlToleranceInterval : JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; LimitFlags : JOB_OBJECT_LIMIT (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION
#field int64 IoReadBytesLimit
#field int64 IoWriteBytesLimit
#field int64 PerJobUserTimeLimit
#field int64 JobMemoryLimit
#field int RateControlTolerance
#field int RateControlToleranceInterval
#field int LimitFlags
#endstruct
stdim st, JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION ; NSTRUCT 変数を確保
st->IoReadBytesLimit = 100
mes "IoReadBytesLimit=" + st->IoReadBytesLimit