> Windows Syscalls
ntoskrnl.exeT1106T1564T1070

NtSetInformationJobObject

Définit une politique ou une limite sur un job object via une des classes d'information JOBOBJECTINFOCLASS.

Prototype

NTSTATUS NtSetInformationJobObject(
  HANDLE             JobHandle,
  JOBOBJECTINFOCLASS JobObjectInformationClass,
  PVOID              JobObjectInformation,
  ULONG              JobObjectInformationLength
);

Arguments

NameTypeDirDescription
JobHandleHANDLEinHandle vers le job object (JOB_OBJECT_SET_ATTRIBUTES requis).
JobObjectInformationClassJOBOBJECTINFOCLASSinSélectionne la politique : JobObjectExtendedLimitInformation, JobObjectBasicUIRestrictions, JobObjectAssociateCompletionPortInformation, JobObjectCpuRateControlInformation, etc.
JobObjectInformationPVOIDinPointeur vers la structure spécifique à la classe (ex. JOBOBJECT_EXTENDED_LIMIT_INFORMATION).
JobObjectInformationLengthULONGinTaille en octets de la structure pointée par JobObjectInformation. Doit correspondre exactement à la classe.

IDs de syscalls par version de Windows

Version de WindowsID de syscallBuild
Win10 15070x17Bwin10-1507
Win10 16070x184win10-1607
Win10 17030x18Awin10-1703
Win10 17090x18Dwin10-1709
Win10 18030x18Fwin10-1803
Win10 18090x190win10-1809
Win10 19030x191win10-1903
Win10 19090x191win10-1909
Win10 20040x197win10-2004
Win10 20H20x197win10-20h2
Win10 21H10x197win10-21h1
Win10 21H20x199win10-21h2
Win10 22H20x199win10-22h2
Win11 21H20x1A2win11-21h2
Win11 22H20x1A6win11-22h2
Win11 23H20x1A6win11-23h2
Win11 24H20x1A9win11-24h2
Server 20160x184winserver-2016
Server 20190x190winserver-2019
Server 20220x19Fwinserver-2022
Server 20250x1A9winserver-2025

Module noyau

ntoskrnl.exeNtSetInformationJobObject

APIs liées

SetInformationJobObjectQueryInformationJobObjectCreateJobObjectWAssignProcessToJobObjectNtCreateJobObjectNtAssignProcessToJobObjectNtQueryInformationJobObject

Stub du syscall

4C 8B D1            mov r10, rcx
B8 A9 01 00 00      mov eax, 0x1A9
F6 04 25 08 03 FE 7F 01   test byte ptr [0x7FFE0308], 1
75 03               jne short +3
0F 05               syscall
C3                  ret
CD 2E               int 2Eh
C3                  ret

Notes non documentées

NtSetInformationJobObject est le syscall d'application de politique pour les jobs. L'enum JobObjectInformationClass sélectionne ce qui est positionné : JobObjectExtendedLimitInformation (le cheval de bataille — plafonds de nombre de processus, plafonds de working-set, JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE, JOB_OBJECT_LIMIT_BREAKAWAY_OK, JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK), JobObjectBasicUIRestrictions (interdire le presse-papiers, les handles USER, les paramètres système — utilisé par toutes les sandboxes modernes), JobObjectAssociateCompletionPortInformation (transformer le job en source d'événements pour les notifications JOB_OBJECT_MSG_* sur un IOCP — surveillance « event-driven » des sorties de processus et des dépassements de limites), JobObjectCpuRateControlInformation, et la famille Win10 `JobObjectNetRateControlInformation`. Le SSN dérive presque à chaque mise à jour majeure.

Usage courant par les malwares

Majoritairement défensif. L'intérêt offensif se concentre sur deux coins : (1) positionner JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE sur un job contenant les helpers d'un implant pour que la fermeture du handle implant fasse disparaître tous les artefacts — une primitive de sortie propre ; (2) basculer JOB_OBJECT_LIMIT_BREAKAWAY_OK ou JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK sur un job contrôlé pour laisser les enfants s'échapper, ce que font précisément les exploits de sandbox-escape dès qu'ils obtiennent suffisamment d'accès au job. JobObjectAssociateCompletionPortInformation peut aussi être détourné par un malware de surveillance pour suivre le cycle de vie de processus qu'il contrôle.

Opportunités de détection

ETW Microsoft-Windows-Kernel-Process et Microsoft-Windows-Win32k exposent certains changements de politique de job, mais toutes les classes ne sont pas également instrumentées. La cible à fort signal est JobObjectExtendedLimitInformation avec KILL_ON_JOB_CLOSE ou BREAKAWAY_OK positionné par un processus non-sandbox. Les EDR qui hookent ntdll!NtSetInformationJobObject devraient décoder la classe et signaler (a) les positionneurs inhabituels de BREAKAWAY_OK (préparation de sandbox-escape) et (b) KILL_ON_JOB_CLOSE sur un job qui contient les propres helpers du processus appelant (infrastructure de sortie propre). À combiner avec les événements NtAssignProcessToJobObject pour reconstruire la topologie sandbox complète.

Exemples de syscalls directs

asmx64 direct stub (Win11 24H2 SSN)

; Direct syscall stub for NtSetInformationJobObject (SSN 0x1A9 on Win11 24H2 / Server 2025)
NtSetInformationJobObject PROC
    mov  r10, rcx          ; syscall convention
    mov  eax, 1A9h         ; SSN for win11-24h2
    syscall
    ret
NtSetInformationJobObject ENDP

cSandbox-spawn skeleton (step 3 — apply kill-on-close)

// Make sure every process in the job dies when the last handle to it closes.
JOBOBJECT_EXTENDED_LIMIT_INFORMATION limits = { 0 };
limits.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
                                        | JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION;

NTSTATUS s = NtSetInformationJobObject(hJob,
                                       JobObjectExtendedLimitInformation,
                                       &limits,
                                       sizeof(limits));

// Optional: associate an IOCP for event-driven monitoring
JOBOBJECT_ASSOCIATE_COMPLETION_PORT cp = { (PVOID)0xCAFE, hIoCompletion };
NtSetInformationJobObject(hJob,
                          JobObjectAssociateCompletionPortInformation,
                          &cp, sizeof(cp));

rustwindows-sys + naked syscall stub

// Cargo: windows-sys = "0.59"  (Win32_System_JobObjects)
use std::arch::asm;

#[unsafe(naked)]
unsafe extern "system" fn nt_set_information_job_object_stub() {
    asm!(
        "mov r10, rcx",
        "mov eax, 0x1A9",   // Win11 24H2; resolve dynamically for other builds
        "syscall",
        "ret",
        options(noreturn),
    );
}

Mappings MITRE ATT&CK

Last verified: 2026-05-20