> Windows Syscalls
ntoskrnl.exeT1106T1564T1070

NtSetInformationJobObject

Establece una política o límite en un job object mediante una de las clases de información JOBOBJECTINFOCLASS.

Prototipo

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

Argumentos

NameTypeDirDescription
JobHandleHANDLEinHandle al job object (JOB_OBJECT_SET_ATTRIBUTES requerido).
JobObjectInformationClassJOBOBJECTINFOCLASSinSelecciona la política: JobObjectExtendedLimitInformation, JobObjectBasicUIRestrictions, JobObjectAssociateCompletionPortInformation, JobObjectCpuRateControlInformation, etc.
JobObjectInformationPVOIDinPuntero a la estructura específica de la clase (p. ej. JOBOBJECT_EXTENDED_LIMIT_INFORMATION).
JobObjectInformationLengthULONGinTamaño en bytes de la estructura apuntada por JobObjectInformation. Debe coincidir exactamente con la clase.

IDs de syscalls por versión de Windows

Versión 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

Módulo del kernel

ntoskrnl.exeNtSetInformationJobObject

APIs relacionadas

SetInformationJobObjectQueryInformationJobObjectCreateJobObjectWAssignProcessToJobObjectNtCreateJobObjectNtAssignProcessToJobObjectNtQueryInformationJobObject

Stub del 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

Notas no documentadas

NtSetInformationJobObject es el syscall de aplicación de política para jobs. La enum JobObjectInformationClass selecciona qué se establece: JobObjectExtendedLimitInformation (el caballo de batalla — límites de número de procesos, de working-set, JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE, JOB_OBJECT_LIMIT_BREAKAWAY_OK, JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK), JobObjectBasicUIRestrictions (denegar portapapeles, handles USER, parámetros del sistema — usado por toda sandbox moderna), JobObjectAssociateCompletionPortInformation (convertir el job en fuente de eventos para notificaciones JOB_OBJECT_MSG_* sobre un IOCP — monitoreo «event-driven» de salidas de proceso e infracciones de límites), JobObjectCpuRateControlInformation y la familia Win10 `JobObjectNetRateControlInformation`. La SSN cambia casi en cada actualización mayor.

Uso común por malware

Predominantemente defensivo. El interés ofensivo se concentra en dos rincones: (1) poner JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE en un job que contiene los helpers del implante para que al cerrar el handle del implante se eliminen todos los artefactos — una primitiva de salida limpia; (2) activar JOB_OBJECT_LIMIT_BREAKAWAY_OK o JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK sobre un job controlado para permitir que los hijos escapen, que es justo lo que hacen los exploits de sandbox-escape en cuanto consiguen acceso suficiente al job. JobObjectAssociateCompletionPortInformation también puede ser abusada por malware de vigilancia para monitorear el ciclo de vida de procesos que controla.

Oportunidades de detección

ETW Microsoft-Windows-Kernel-Process y Microsoft-Windows-Win32k exponen algunos cambios de política de job, pero no todas las clases están igualmente instrumentadas. El objetivo de alta señal es JobObjectExtendedLimitInformation con KILL_ON_JOB_CLOSE o BREAKAWAY_OK puesto por un proceso no-sandbox. Los EDR que hookeen ntdll!NtSetInformationJobObject deberían decodificar la clase y señalar (a) setters inusuales de BREAKAWAY_OK (preparación de sandbox-escape) y (b) KILL_ON_JOB_CLOSE en un job que contiene los propios helpers del proceso llamador (infraestructura de salida limpia). Emparejar con eventos de NtAssignProcessToJobObject para reconstruir la topología sandbox completa.

Ejemplos de syscalls directos

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),
    );
}

Mapeos MITRE ATT&CK

Last verified: 2026-05-20