> Windows Syscalls
ntoskrnl.exeT1622T1562.001T1106

NtSetInformationProcess

Modifica una clase de estado a nivel de proceso — auto-limpieza anti-debug, registro de rangos CET, instalación de políticas ACG/CIG, callbacks de instrumentación.

Prototipo

NTSTATUS NtSetInformationProcess(
  HANDLE           ProcessHandle,
  PROCESSINFOCLASS ProcessInformationClass,
  PVOID            ProcessInformation,
  ULONG            ProcessInformationLength
);

Argumentos

NameTypeDirDescription
ProcessHandleHANDLEinHandle al proceso objetivo. El acceso requerido depende de la clase; muchas clases exigen PROCESS_SET_INFORMATION o superior.
ProcessInformationClassPROCESSINFOCLASSinClase modificable. Notables: ProcessDebugFlags=31, ProcessInstrumentationCallback=40, ProcessSignaturePolicy=44, ProcessDynamicEnforcedCetCompatibleRanges=80, ProcessRaiseUMExceptionOnInvalidHandleClose, ProcessThreadStackAllocation.
ProcessInformationPVOIDinBuffer de entrada cuyo formato depende de la clase. Algunas clases aceptan un solo ULONG/HANDLE, otras un descriptor estructurado.
ProcessInformationLengthULONGinTamaño en bytes del buffer ProcessInformation.

IDs de syscalls por versión de Windows

Versión de WindowsID de syscallBuild
Win10 15070x1Cwin10-1507
Win10 16070x1Cwin10-1607
Win10 17030x1Cwin10-1703
Win10 17090x1Cwin10-1709
Win10 18030x1Cwin10-1803
Win10 18090x1Cwin10-1809
Win10 19030x1Cwin10-1903
Win10 19090x1Cwin10-1909
Win10 20040x1Cwin10-2004
Win10 20H20x1Cwin10-20h2
Win10 21H10x1Cwin10-21h1
Win10 21H20x1Cwin10-21h2
Win10 22H20x1Cwin10-22h2
Win11 21H20x1Cwin11-21h2
Win11 22H20x1Cwin11-22h2
Win11 23H20x1Cwin11-23h2
Win11 24H20x1Cwin11-24h2
Server 20160x1Cwinserver-2016
Server 20190x1Cwinserver-2019
Server 20220x1Cwinserver-2022
Server 20250x1Cwinserver-2025

Módulo del kernel

ntoskrnl.exeNtSetInformationProcess

APIs relacionadas

SetProcessInformationSetProcessMitigationPolicyNtQueryInformationProcessNtSetInformationThreadAddVectoredExceptionHandler

Stub del syscall

4C 8B D1            mov r10, rcx
B8 1C 00 00 00      mov eax, 0x1C
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

SSN 0x1C desde Windows 10 1507 — emparejado con el 0x19 de NtQueryInformationProcess, es uno de los pocos slots de control de proceso que Microsoft ha congelado explícitamente. El lado de escritura es mucho más privilegiado que el de lectura: muchas clases (ProcessAccessToken, ProcessSignaturePolicy, ProcessHandleTracing) exigen PROCESS_SET_INFORMATION + privilegios específicos (SeDebugPrivilege, SeTcbPrivilege) y varias se niegan a aplicarse una vez que el proceso ha cargado una DLL no de sistema. Algunas clases son *one-shot* — una vez que ProcessSignaturePolicy habilita MicrosoftSignedOnly, el kernel no permite desactivarlo.

Uso común por malware

Tres clases de abuso de alto valor. (1) Auto-anti-debug: escribir ProcessDebugFlags (31) con valor 1 borra silenciosamente el flag NoDebugInherit rastreado por el kernel y desactiva la herencia de depuración en procesos hijos — también ampliamente usado como escritura señuelo para confundir heurísticas AV. (2) Bypass de ACG / CIG: ProcessSignaturePolicy (44) puede consultarse para detectar el cumplimiento de CIG, y ProcessDynamicEnforcedCetCompatibleRanges (80) lo usan frameworks de evasión de EDR para registrar regiones de shellcode del atacante como 'compatibles con CET' para que el indirect-branch tracking no aborte en la primera ejecución. (3) Secuestro de instrumentación: ProcessInstrumentationCallback (40) instala una función llamada por el kernel en cada retorno de syscall — un atacante que lo controle obtiene un cuello de botella en modo usuario sobre *todos* los syscalls del proceso objetivo, perfecto para hookeo y detección de unhooking (y conocido como técnica de unhook contra parches de modo usuario de EDR).

Oportunidades de detección

Las llamadas set-information son mucho más raras que las queries — todo llamador legítimo debería ser auditable. Las clases de alta señal (31, 40, 44, 80) casi nunca aparecen en software benigno. ETW Microsoft-Windows-Threat-Intelligence expone EtwTiLogSetProcessInfo para un subconjunto de clases; el resto debe observarse vía eventos TI o instrumentación de kernel. Defender for Endpoint alerta específicamente sobre escrituras de ProcessInstrumentationCallback desde procesos no de sistema. Las escrituras de 'compat range' CET (clase 80) son particularmente sospechosas desde cualquier llamador no respaldado por imagen — esencialmente no tienen consumidores legítimos fuera de los componentes runtime de Microsoft.

Ejemplos de syscalls directos

cSelf-anti-debug: clear ProcessDebugFlags

// Setting ProcessDebugFlags=1 turns OFF NoDebugInherit, which paradoxically
// causes later NtQueryInformationProcess(ProcessDebugFlags) reads to return 1
// (i.e. 'no debugger ever attached'). Used to defeat naive anti-debug detectors.
ULONG debugFlags = 1;
NtSetInformationProcess(NtCurrentProcess(),
                        ProcessDebugFlags,   // 31
                        &debugFlags, sizeof(debugFlags));

cProcessInstrumentationCallback unhook hook

// Install a callback that fires on every syscall return. The kernel jumps to it
// with RAX = original RIP, R10 = original return address. Used both offensively
// (unhook EDR ntdll patches) and by EDRs themselves (Defender once shipped one).
typedef struct _PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION {
    ULONG Version;     // 0
    ULONG Reserved;
    PVOID Callback;    // function to call on every syscall return
} PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION;

PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION info = {
    .Version = 0, .Reserved = 0, .Callback = MyCallback
};
NtSetInformationProcess(NtCurrentProcess(),
                        ProcessInstrumentationCallback, // 40
                        &info, sizeof(info));

asmx64 stub (stable across builds)

; SSN 0x1C — stable Win10 1507 .. Win11 24H2.
NtSetInformationProcess PROC
    mov  r10, rcx
    mov  eax, 1Ch
    syscall
    ret
NtSetInformationProcess ENDP

Mapeos MITRE ATT&CK

Last verified: 2026-05-20