> Windows Syscalls
ntoskrnl.exeT1622T1562.001T1106

NtSetInformationProcess

Verändert eine Klasse von Prozesszustand — Anti-Debug-Selbstbereinigung, CET-Range-Registrierung, ACG/CIG-Policy-Installation, Instrumentation-Callbacks.

Prototyp

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

Argumente

NameTypeDirDescription
ProcessHandleHANDLEinHandle auf den Zielprozess. Erforderlicher Zugriff hängt von der Klasse ab; viele Klassen erfordern PROCESS_SET_INFORMATION oder höher.
ProcessInformationClassPROCESSINFOCLASSinSetzbare Klasse. Bemerkenswert: ProcessDebugFlags=31, ProcessInstrumentationCallback=40, ProcessSignaturePolicy=44, ProcessDynamicEnforcedCetCompatibleRanges=80, ProcessRaiseUMExceptionOnInvalidHandleClose, ProcessThreadStackAllocation.
ProcessInformationPVOIDinEingabepuffer, dessen Layout von der Klasse abhängt. Einige Klassen akzeptieren ein einzelnes ULONG/HANDLE, andere einen strukturierten Deskriptor.
ProcessInformationLengthULONGinGröße des ProcessInformation-Puffers in Bytes.

Syscall-IDs pro Windows-Version

Windows-VersionSyscall-IDBuild
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

Kernel-Modul

ntoskrnl.exeNtSetInformationProcess

Verwandte APIs

SetProcessInformationSetProcessMitigationPolicyNtQueryInformationProcessNtSetInformationThreadAddVectoredExceptionHandler

Syscall-Stub

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

Undokumentierte Hinweise

SSN 0x1C seit Windows 10 1507 — gepaart mit NtQueryInformationProcess' 0x19 ist dies einer der wenigen Process-Control-Slots, die Microsoft explizit eingefroren hat. Die Schreibseite ist deutlich privilegierter als die Leseseite: viele Klassen (ProcessAccessToken, ProcessSignaturePolicy, ProcessHandleTracing) erfordern PROCESS_SET_INFORMATION + spezifische Privilegien (SeDebugPrivilege, SeTcbPrivilege), und mehrere weigern sich anzuwenden, sobald der Prozess eine Nicht-System-DLL geladen hat. Manche Klassen sind *one-shot* — sobald ProcessSignaturePolicy MicrosoftSignedOnly aktiviert, lässt der Kernel keine Rücknahme zu.

Häufige Malware-Nutzung

Drei missbrauchsstarke Klassen. (1) Selbst-Anti-Debug: ein Schreiben auf ProcessDebugFlags (31) mit Wert 1 löscht still das vom Kernel verfolgte NoDebugInherit-Flag und deaktiviert die Debug-Vererbung an Kindprozesse — auch weit verbreitet als Dummy-Schreiben, um AV-Heuristiken zu verwirren. (2) ACG-/CIG-Bypass: ProcessSignaturePolicy (44) kann abgefragt werden, um CIG-Erzwingung zu erkennen, und ProcessDynamicEnforcedCetCompatibleRanges (80) wird von EDR-Evasion-Frameworks genutzt, um Shellcode-Regionen des Angreifers als „CET-kompatibel“ zu registrieren, damit Indirect-Branch-Tracking bei der ersten Ausführung nicht abbricht. (3) Instrumentation-Hijack: ProcessInstrumentationCallback (40) installiert eine Funktion, die der Kernel bei jedem Syscall-Return aufruft — ein Angreifer mit Kontrolle darüber erhält einen Userland-Engpass für *alle* Syscalls im Zielprozess, ideal zum Hooken und zur Unhook-Erkennung (und berüchtigt als Unhook-Technik gegen EDR-User-Mode-Patches).

Erkennungs­möglichkeiten

Set-Information-Aufrufe sind weit seltener als Queries — jeder legitime Aufrufer sollte prüfbar sein. Die signalstarken Klassen (31, 40, 44, 80) tauchen in gutartiger Software praktisch nie auf. Microsoft-Windows-Threat-Intelligence ETW exponiert EtwTiLogSetProcessInfo für eine Teilmenge der Klassen; der Rest muss über TI-Events oder Kernel-Instrumentation beobachtet werden. Defender for Endpoint alarmiert speziell auf ProcessInstrumentationCallback-Schreibvorgänge aus Nicht-System-Prozessen. CET-„Compat-Range“-Schreibvorgänge (Klasse 80) sind aus jedem nicht-image-backed Aufrufer besonders verdächtig — es gibt praktisch keine legitimen Konsumenten außerhalb von Microsofts eigenen Runtime-Komponenten.

Direkte Syscall-Beispiele

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

MITRE ATT&CK-Mappings

Last verified: 2026-05-20