> Windows Syscalls
ntoskrnl.exeT1485T1529T1106

NtRaiseHardError

Löst einen „Hard Error“ aus, den der Kernel an CSRSS zur UI-Anzeige weiterreicht — oder mit SeShutdownPrivilege und FATAL-Severity einen sofortigen Bugcheck (BSOD) auslöst.

Prototyp

NTSTATUS NtRaiseHardError(
  NTSTATUS                 ErrorStatus,
  ULONG                    NumberOfParameters,
  ULONG                    UnicodeStringParameterMask,
  PULONG_PTR               Parameters,
  HARDERROR_RESPONSE_OPTION ResponseOption,
  PHARDERROR_RESPONSE      Response
);

Argumente

NameTypeDirDescription
ErrorStatusNTSTATUSinStatuscode; die oberen Bits kodieren die Severity (STATUS_SEVERITY_FATAL = 0xC0000000-Klasse mit Bit 30 gesetzt führt zum Bugcheck-Pfad).
NumberOfParametersULONGinAnzahl der Einträge in Parameters (max 4).
UnicodeStringParameterMaskULONGinBitmaske, die angibt, welche Parameters-Einträge auf UNICODE_STRING (statt rohes ULONG_PTR) zeigen.
ParametersPULONG_PTRinArray von bis zu 4 Ersetzungsparametern für die Fehlervorlage.
ResponseOptionHARDERROR_RESPONSE_OPTIONinWelcher Antwortsatz dem Benutzer angeboten wird. OptionShutdownSystem (6) ist der BSOD-auslösende Wert mit FATAL-Severity und SeShutdownPrivilege.
ResponsePHARDERROR_RESPONSEoutEmpfängt die vom Benutzer gewählte Antwort. Auf dem BSOD-Pfad irrelevant, da der Aufruf nie zurückkehrt.

Syscall-IDs pro Windows-Version

Windows-VersionSyscall-IDBuild
Win10 15070x14Dwin10-1507
Win10 16070x154win10-1607
Win10 17030x15Awin10-1703
Win10 17090x15Dwin10-1709
Win10 18030x15Fwin10-1803
Win10 18090x160win10-1809
Win10 19030x161win10-1903
Win10 19090x161win10-1909
Win10 20040x167win10-2004
Win10 20H20x167win10-20h2
Win10 21H10x167win10-21h1
Win10 21H20x169win10-21h2
Win10 22H20x169win10-22h2
Win11 21H20x170win11-21h2
Win11 22H20x173win11-22h2
Win11 23H20x173win11-23h2
Win11 24H20x175win11-24h2
Server 20160x154winserver-2016
Server 20190x160winserver-2019
Server 20220x16Ewinserver-2022
Server 20250x175winserver-2025

Kernel-Modul

ntoskrnl.exeNtRaiseHardError

Verwandte APIs

RtlAdjustPrivilegeExitWindowsExInitiateSystemShutdownExWNtShutdownSystemNtTerminateProcess

Syscall-Stub

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

NtRaiseHardError hat je nach Parameterkombination zwei völlig unterschiedliche Persönlichkeiten. Der gutartige Pfad postet eine Hard-Error-LPC-Nachricht an CSRSS, das den vertrauten „Ein an das System angeschlossenes Gerät funktioniert nicht“-Dialog malt. Der berühmte BSOD-Pfad: einen beliebigen STATUS_SEVERITY_FATAL-Status übergeben (oberste zwei Bits = 11), ResponseOption = OptionShutdownSystem (6) und SeShutdownPrivilege aktiviert halten — der Kernel springt direkt in ExpRaiseHardError → KeBugCheckEx mit Bugcheck-Code 0xF4 (CRITICAL_OBJECT_TERMINATION) oder 0xC1 (SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION) je nach Status. Wininit.exe und Csrss.exe nutzen denselben Aufruf legitim, um das System bei Tod eines kritischen Prozesses herunterzufahren; Malware setzt sich auf dieselbe Maschinerie.

Häufige Malware-Nutzung

Die Lehrbuch-Primitive zum „Maschine aus dem User-Mode crashen“. Ransomware nutzt NtRaiseHardError als Stufe-3-Anti-Forensik: nach abgeschlossener Verschlüsselung und Löschen der Schattenkopien einen BSOD erzwingen, um Memory-Forensik, EDR-Live-Response-Sitzungen oder Wiederherstellungsversuche zu unterbrechen. Manche destruktiven Wiper (HermeticWiper, CaddyWiper) rufen es als letzte Aktion, sodass der nächste Boot in WinRE landet, ohne nutzbares User-Volume. Defense-Evasion-Familien verwenden die Nicht-FATAL-Form auch, um in Social-Engineering-Ketten überzeugende „Kritisches Update“-Dialoge zu erzeugen. Die Privilege-Hürde ist mild — jeder Prozess als Administrator mit standardmäßig aktiviertem SeShutdownPrivilege kann den Host per BSOD zerlegen.

Erkennungs­möglichkeiten

Audit-Policy-Bit „Prozesserstellung“ für wininit.exe und csrss.exe setzen und zusätzlich Microsoft-Windows-Threat-Intelligence-ETW verwenden (EtwTiLogRaiseHardError, wo exponiert). Auf dem überlebbaren Pfad protokolliert das Application-Eventlog Hard Errors als Event ID 1023 (DrWatson), und der System-Kanal protokolliert BugCheck (Event ID 1001) beim Reboot nach einem Hard-Error-induzierten Bugcheck. Die nützlichste Prävention ist, SeShutdownPrivilege aus nicht-privilegierten Service-Konten zu entfernen — die meisten brauchen es nicht, und der Entzug neutralisiert die Userland-BSOD-Bedrohung vollständig.

Direkte Syscall-Beispiele

cUserland BSOD trigger

// Requires SeShutdownPrivilege enabled in the token.
// Result: instant 0xF4 CRITICAL_OBJECT_TERMINATION bugcheck.
BOOLEAN wasEnabled;
RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, TRUE, FALSE, &wasEnabled);

ULONG response;
NtRaiseHardError(
    STATUS_ASSERTION_FAILURE,    // 0xC0000420 - severity FATAL
    0, 0, NULL,
    OptionShutdownSystem,        // 6 -> kernel routes to KeBugCheckEx
    &response);
// Never returns.

cBogus 'critical update' dialog

// Non-FATAL severity -> CSRSS displays a hard-error dialog with template text.
UNICODE_STRING msg;
RtlInitUnicodeString(&msg, L"Critical Windows component compromised. Restart now.");
ULONG_PTR params[1] = { (ULONG_PTR)&msg };
ULONG response;
NtRaiseHardError(
    STATUS_FATAL_APP_EXIT,
    1,
    1,                   // bit 0 = first param is a UNICODE_STRING*
    params,
    OptionOk,
    &response);

asmx64 stub (Win11 24H2)

NtRaiseHardError PROC
    mov  r10, rcx
    mov  eax, 175h         ; Win11 24H2 SSN
    syscall
    ret
NtRaiseHardError ENDP

MITRE ATT&CK-Mappings

Last verified: 2026-05-20