> Windows Syscalls
ntoskrnl.exeT1485T1529T1106

NtRaiseHardError

Genera un 'hard error' que el kernel enruta a CSRSS para mostrar — o, con SeShutdownPrivilege y severidad FATAL, dispara un bugcheck inmediato (BSOD).

Prototipo

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

Argumentos

NameTypeDirDescription
ErrorStatusNTSTATUSinCódigo de estado; los bits altos codifican la severidad (STATUS_SEVERITY_FATAL = clase 0xC0000000 con bit 30 activado dispara la vía bugcheck).
NumberOfParametersULONGinNúmero de entradas en Parameters (máx 4).
UnicodeStringParameterMaskULONGinBitmask que indica cuáles entradas de Parameters apuntan a UNICODE_STRING (en lugar de ULONG_PTR crudo).
ParametersPULONG_PTRinArray de hasta 4 parámetros de sustitución para la plantilla de error.
ResponseOptionHARDERROR_RESPONSE_OPTIONinQué conjunto de respuestas ofrecer al usuario. OptionShutdownSystem (6) es el valor que dispara el BSOD con severidad FATAL y SeShutdownPrivilege.
ResponsePHARDERROR_RESPONSEoutRecibe la respuesta elegida por el usuario. Irrelevante en la vía BSOD porque la llamada nunca retorna.

IDs de syscalls por versión de Windows

Versión de WindowsID de syscallBuild
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

Módulo del kernel

ntoskrnl.exeNtRaiseHardError

APIs relacionadas

RtlAdjustPrivilegeExitWindowsExInitiateSystemShutdownExWNtShutdownSystemNtTerminateProcess

Stub del syscall

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

Notas no documentadas

NtRaiseHardError tiene dos personalidades completamente distintas según las combinaciones de parámetros. La vía benigna envía un mensaje LPC de hard-error a CSRSS, que pinta el familiar diálogo 'Un dispositivo conectado al sistema no funciona'. La famosa vía BSOD: pasar cualquier status STATUS_SEVERITY_FATAL (dos bits altos = 11), ResponseOption = OptionShutdownSystem (6), y mantener SeShutdownPrivilege habilitado — el kernel salta directamente a ExpRaiseHardError → KeBugCheckEx con código de bugcheck 0xF4 (CRITICAL_OBJECT_TERMINATION) o 0xC1 (SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION) según el status. Wininit.exe y Csrss.exe usan legítimamente la misma llamada para apagar el sistema cuando muere un proceso crítico; el malware se monta en la misma maquinaria.

Uso común por malware

La primitiva clásica de 'tirar la máquina desde modo usuario'. El ransomware usa NtRaiseHardError como etapa 3 anti-forense: tras completar el cifrado y borrar instantáneas, forzar un BSOD para interrumpir cualquier forense de memoria, sesión de live-response de EDR o intento de recuperación. Algunos wipers destructivos (HermeticWiper, CaddyWiper) lo invocan como acción final para que el siguiente arranque caiga en WinRE sin volumen de usuario utilizable. Las familias de evasión de defensas también usan la forma no-FATAL para generar diálogos convincentes de 'actualización crítica' en cadenas de ingeniería social. La barrera de privilegio es leve — cualquier proceso ejecutándose como Administrador con SeShutdownPrivilege habilitado por defecto puede BSOD el host.

Oportunidades de detección

Activar el bit de política de auditoría 'Creación de procesos' sobre wininit.exe y csrss.exe, y adicionalmente usar ETW Microsoft-Windows-Threat-Intelligence (EtwTiLogRaiseHardError donde esté expuesto). En la vía superviviente, el canal Application registra hard errors como Event ID 1023 (DrWatson) y el canal System registra BugCheck (Event ID 1001) en el reinicio tras un bugcheck inducido por hard-error. La prevención más útil es eliminar SeShutdownPrivilege de cuentas de servicio no privilegiadas — la mayoría no lo necesitan, y eliminarlo neutraliza la amenaza de BSOD desde modo usuario por completo.

Ejemplos de syscalls directos

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

Mapeos MITRE ATT&CK

Last verified: 2026-05-20