> Windows Syscalls
ntoskrnl.exeT1622T1562.001T1106

NtSetInformationProcess

Modifie une classe d'état au niveau processus — auto-nettoyage anti-debug, enregistrement de plages CET, installation de politiques ACG/CIG, callbacks d'instrumentation.

Prototype

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

Arguments

NameTypeDirDescription
ProcessHandleHANDLEinHandle vers le processus cible. L'accès requis dépend de la classe ; de nombreuses classes exigent PROCESS_SET_INFORMATION ou plus.
ProcessInformationClassPROCESSINFOCLASSinClasse modifiable. Notables : ProcessDebugFlags=31, ProcessInstrumentationCallback=40, ProcessSignaturePolicy=44, ProcessDynamicEnforcedCetCompatibleRanges=80, ProcessRaiseUMExceptionOnInvalidHandleClose, ProcessThreadStackAllocation.
ProcessInformationPVOIDinBuffer d'entrée dont le format dépend de la classe. Certaines classes acceptent un seul ULONG/HANDLE, d'autres un descripteur structuré.
ProcessInformationLengthULONGinTaille en octets du buffer ProcessInformation.

IDs de syscalls par version de Windows

Version 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

Module noyau

ntoskrnl.exeNtSetInformationProcess

APIs liées

SetProcessInformationSetProcessMitigationPolicyNtQueryInformationProcessNtSetInformationThreadAddVectoredExceptionHandler

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

Notes non documentées

SSN 0x1C depuis Windows 10 1507 — appairé au 0x19 de NtQueryInformationProcess, c'est l'un des rares slots de contrôle de processus que Microsoft a explicitement gelés. Le côté écriture est nettement plus privilégié que le côté lecture : de nombreuses classes (ProcessAccessToken, ProcessSignaturePolicy, ProcessHandleTracing) exigent PROCESS_SET_INFORMATION + des privilèges spécifiques (SeDebugPrivilege, SeTcbPrivilege) et plusieurs refusent de s'appliquer une fois qu'une DLL non-système a été chargée. Certaines classes sont *one-shot* — une fois que ProcessSignaturePolicy active MicrosoftSignedOnly, le noyau ne permet pas de le désactiver.

Usage courant par les malwares

Trois classes d'abus à forte valeur. (1) Auto-anti-debug : écrire ProcessDebugFlags (31) avec la valeur 1 efface silencieusement le flag NoDebugInherit suivi par le noyau et désactive l'héritage debug pour les processus enfants — aussi largement utilisé comme écriture-leurre pour brouiller les heuristiques AV. (2) Contournement ACG / CIG : ProcessSignaturePolicy (44) peut être interrogé pour détecter l'application de CIG, et ProcessDynamicEnforcedCetCompatibleRanges (80) est utilisé par les frameworks d'évasion EDR pour enregistrer les régions de shellcode de l'attaquant comme « compatibles CET » afin que l'indirect-branch tracking n'avorte pas à la première exécution. (3) Détournement d'instrumentation : ProcessInstrumentationCallback (40) installe une fonction appelée par le noyau à chaque retour de syscall — un attaquant qui le contrôle obtient un point d'étranglement userland sur *tous* les syscalls du processus cible, parfait pour la détection de hooking/unhooking (et célèbre comme technique de unhook contre les patches user-mode des EDR).

Opportunités de détection

Les appels set-information sont bien plus rares que les requêtes — tout appelant légitime devrait être auditable. Les classes à fort signal (31, 40, 44, 80) n'apparaissent presque jamais dans du logiciel bénin. ETW Microsoft-Windows-Threat-Intelligence expose EtwTiLogSetProcessInfo pour un sous-ensemble de classes ; le reste doit être observé via des événements TI ou de l'instrumentation noyau. Defender for Endpoint alerte spécifiquement sur les écritures ProcessInstrumentationCallback provenant de processus non-système. Les écritures « compat range » CET (classe 80) sont particulièrement suspectes depuis tout appelant non image-backed — elles n'ont essentiellement aucun consommateur légitime hors composants runtime de Microsoft.

Exemples de syscalls directs

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

Mappings MITRE ATT&CK

Last verified: 2026-05-20