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

JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION

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

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

フィールド

フィールドサイズx64x86説明
IoReadBytesLimitULONGLONG8+0+0LimitFlags メンバーに JOB_OBJECT_LIMIT_JOB_READ_BYTES を指定した場合、このメンバーは、ジョブ内のすべてのプロセスによって読み取られた合計 I/O バイト数に対する通知制限です。それ以外の場合、このメンバーは無視されます。
IoWriteBytesLimitULONGLONG8+8+8LimitFlags パラメーターに JOB_OBJECT_LIMIT_JOB_WRITE_BYTES を指定した場合、このメンバーは、ジョブ内のすべてのプロセスによって書き込まれた合計 I/O バイト数に対する通知制限です。それ以外の場合、このメンバーは無視されます。
PerJobUserTimeLimitLONGLONG8+16+16

LimitFlags パラメーターに JOB_OBJECT_LIMIT_JOB_TIME を指定した場合、このメンバーは、ジョブごとのユーザー モード実行時間(100 ナノ秒単位)に対する通知制限です。それ以外の場合、このメンバーは無視されます。

この制限を設定すると、システムは、ジョブに関連付けられたプロセスの累積実行時間をこの制限に加算します。たとえば、ジョブに関連付けられたプロセスが既に 5 分のユーザー モード実行時間を累積している状態で制限を 1 分に設定した場合、実際に適用される制限は 6 分になります。

PerJobUserTimeLimit を強制可能な制限として指定し、制限を超えたジョブ内のプロセスを終了させる方法については、JOBOBJECT_BASIC_LIMIT_INFORMATION 構造体を参照してください。

JobMemoryLimitULONGLONG8+24+24

LimitFlags パラメーターに JOB_OBJECT_LIMIT_JOB_MEMORY を指定した場合、このメンバーは、ジョブ内のすべてのプロセスがコミットできる合計仮想メモリ(バイト単位)に対する通知制限です。それ以外の場合、このメンバーは無視されます。

JobMemoryLimit を強制可能な制限として指定し、制限を超えたジョブ内のプロセスがそれ以上メモリをコミットし続けられないようにする方法については、JOBOBJECT_EXTENDED_LIMIT_INFORMATION 構造体を参照してください。

RateControlToleranceJOBOBJECT_RATE_CONTROL_TOLERANCE4+32+32

LimitFlags パラメーターに JOB_OBJECT_LIMIT_RATE_CONTROL を指定した場合、このメンバーは、RateControlToleranceInterval メンバーで指定した間隔の間に、ジョブが CPU レート制御制限をどの程度超過できるかを指定します。それ以外の場合、このメンバーは無視されます。

このメンバーには、次のいずれかの値を指定できます。値を指定しない場合は、ToleranceHigh が使用されます。

意味
ToleranceLow
1
ジョブは、許容間隔の 20% の間、CPU レート制御制限を超過できます。
ToleranceMedium
2
ジョブは、許容間隔の 40% の間、CPU レート制御制限を超過できます。
ToleranceHigh
3
ジョブは、許容間隔の 60% の間、CPU レート制御制限を超過できます。
RateControlToleranceIntervalJOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL4+36+36

LimitFlags パラメーターに JOB_OBJECT_LIMIT_RATE_CONTROL を指定した場合、このメンバーは、ジョブが CPU レート制御制限を超過したかどうかを判断するためにジョブの CPU 使用率を監視する間隔を指定します。それ以外の場合、このメンバーは無視されます。

このメンバーには、次のいずれかの値を指定できます。値を指定しない場合は、ToleranceIntervalShort が使用されます。

意味
ToleranceIntervalShort
1
許容間隔は 10 秒です。
ToleranceIntervalMedium
2
許容間隔は 1 分です。
ToleranceIntervalLong
3
許容間隔は 10 分です。
LimitFlagsJOB_OBJECT_LIMIT4+40+40

有効になっている制限フラグです。このメンバーは、他の構造体メンバーが使用されるかどうかを決定するビットフィールドです。次の値を任意に組み合わせて指定できます。

意味
JOB_OBJECT_LIMIT_JOB_MEMORY
0x00000200
コミット メモリの制限を、ジョブに関連付けられたすべてのプロセスのコミット メモリのジョブ全体での合計に対して設定します。JobMemoryLimit メンバーに追加情報が含まれます。
JOB_OBJECT_LIMIT_JOB_READ_BYTES
0x00010000
I/O 読み取りバイト数の制限を、ジョブに関連付けられたすべてのプロセスによって読み取られた I/O バイト数のジョブ全体での合計に対して設定します。IoReadBytesLimit メンバーに詳細情報が含まれます。
JOB_OBJECT_LIMIT_JOB_WRITE_BYTES
0x00020000
I/O 書き込みバイト数の制限を、ジョブに関連付けられたすべてのプロセスによって書き込まれた I/O バイト数のジョブ全体での合計に対して設定します。IoWriteBytesLimit メンバーに詳細情報が含まれます。
JOB_OBJECT_LIMIT_JOB_TIME
0x00000004
ジョブのユーザー モード実行時間の制限を設定します。PerJobUserTimeLimit メンバーに追加情報が含まれます。
JOB_OBJECT_LIMIT_RATE_CONTROL
0x00040000
ジョブに対して設定された CPU レート制御制限の通知しきい値を設定します。RateControlTolerance メンバーと RateControlToleranceInterval メンバーに追加情報が含まれます。

CPU レート制御制限は、SetInformationJobObjectJobObjectCpuRateInformationClass 情報クラスとともに呼び出すことで設定します。

公式ドキュメント

ジョブ オブジェクトの通知制限に関する情報を格納します。この構造体は、SetInformationJobObject 関数および QueryInformationJobObject 関数で、JobObjectNotificationLimitInformation 情報クラスとともに使用されます。

解説(Remarks)

通知制限を超過すると、システムは、ジョブに関連付けられた I/O 完了ポートに JOB_OBJECT_MSG_NOTIFICATION_LIMIT メッセージを送信します。ジョブ内のプロセスは実行を継続し、指定された制限を超えても、メモリの割り当てや読み取り/書き込みバイトの転送を続けることができます。

I/O 完了ポートを監視しているアプリケーションは、JOB_OBJECT_MSG_NOTIFICATION_LIMIT メッセージを受信したら、QueryInformationJobObjectJobObjectLimitViolationInformation 情報クラスとともに呼び出さなければなりません。制限違反の情報は、照会時点で超過していたすべての通知制限に関する情報を含む JOBOBJECT_LIMIT_VIOLATION_STRUCTURE で受け取ります。システムは、QueryInformationJobObject が呼び出されるまで、次の JOB_OBJECT_MSG_NOTIFICATION_LIMIT メッセージを送信しません。

ジョブの CPU レート制御制限は、JOBOBJECT_CPU_RATE_CONTROL_INFORMATION 構造体で設定します。JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION 構造体の CPU レート制御値は、通知が送信されるまでに、ジョブが設定済みの CPU レート制御制限をどの程度超過できるかを指定します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 Structure
import 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: uint32
struct 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