> Windows Syscalls
ntoskrnl.exeT1529T1485T1106

NtShutdownSystem

Kernel-Mode-Shutdown-Trigger — schaltet das System in einem Syscall aus, startet es neu oder fährt es herunter.

Prototyp

NTSTATUS NtShutdownSystem(
  SHUTDOWN_ACTION Action  // 0 = ShutdownNoReboot, 1 = ShutdownReboot, 2 = ShutdownPowerOff
);

Argumente

NameTypeDirDescription
ActionSHUTDOWN_ACTIONin0 = ShutdownNoReboot (hält das OS am 'Sie können den Computer ausschalten'-Screen an), 1 = ShutdownReboot, 2 = ShutdownPowerOff.

Syscall-IDs pro Windows-Version

Windows-VersionSyscall-IDBuild
Win10 15070x198win10-1507
Win10 16070x1A1win10-1607
Win10 17030x1A7win10-1703
Win10 17090x1AAwin10-1709
Win10 18030x1ACwin10-1803
Win10 18090x1ADwin10-1809
Win10 19030x1AEwin10-1903
Win10 19090x1AEwin10-1909
Win10 20040x1B4win10-2004
Win10 20H20x1B4win10-20h2
Win10 21H10x1B4win10-21h1
Win10 21H20x1B6win10-21h2
Win10 22H20x1B6win10-22h2
Win11 21H20x1BFwin11-21h2
Win11 22H20x1C3win11-22h2
Win11 23H20x1C3win11-23h2
Win11 24H20x1C6win11-24h2
Server 20160x1A1winserver-2016
Server 20190x1ADwinserver-2019
Server 20220x1BCwinserver-2022
Server 20250x1C6winserver-2025

Kernel-Modul

ntoskrnl.exeNtShutdownSystem

Verwandte APIs

ExitWindowsExInitiateShutdownWInitiateSystemShutdownExWNtRaiseHardErrorNtSetSystemPowerState

Syscall-Stub

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

NtShutdownSystem ist die roheste Shutdown-Primitive, die Windows User Mode exponiert. Anders als `ExitWindowsEx` / `InitiateShutdownW` benachrichtigt es *keine* Prozesse, broadcastet kein `WM_QUERYENDSESSION`, führt keine Shutdown-Skripte aus und beachtet keine Pending File Renames — es geht direkt zu `PoInitiateSystemShutdown` und reißt den Kernel mit der gewählten `SHUTDOWN_ACTION` ab. Das Caller-Token muss `SeShutdownPrivilege` halten — interaktive User haben es per Default, Service-Tokens und die meisten malware-kontrollierten Tokens *nicht* — der Angreifer muss meist erst per `AdjustTokenPrivileges` aktivieren. `ShutdownNoReboot` (0) lässt die Maschine am Legacy-Screen 'Sie können den Computer jetzt ausschalten' stehen und ist in böser Verwendung selten; `ShutdownReboot` (1) und `ShutdownPowerOff` (2) sind die praktischen Wahlen.

Häufige Malware-Nutzung

Zwei klar getrennte Missbrauchsmuster. **Wiper**: HermeticWiper (DEV-0586 / FoxBlade), IsaacWiper, CaddyWiper und WhisperGate überschreiben MBR/MFT und rufen anschließend eine Shutdown-Primitive auf, um die Unbootbarkeit sichtbar zu erzwingen — NtShutdownSystem ist die niedrigstufige Option und umgeht das User-Mode-Shutdown-UI. **Post-Encryption-Ransomware**: Einige Conti-, LockBit-3.0- ('Black') und BlackCat-(ALPHV)-Varianten rebooten den Host nach Abschluss des Encryptors, damit der Nutzer den Lösegeld-Hintergrund sieht und der Desktop bis zum Reboot unwiederherstellbar bleibt. Wiper bevorzugen es, wenn Tarnung bereits aufgegeben wurde; Ransomware bevorzugt meist `InitiateShutdownW` mit REASON_PLANNED, um im kurzen Fenster vor dem Reboot legitimer zu wirken.

Erkennungs­möglichkeiten

`Microsoft-Windows-Kernel-General` Event ID 13 feuert beim Shutdown und enthält den initiierenden Prozess — unverzichtbar im Post-Mortem eines Wipers. Event Log 1074 (User32) protokolliert `ExitWindowsEx`-artige Shutdowns *mit* ihrem Initiator; ein von NtShutdownSystem getriebener Shutdown erzeugt *kein* Event 1074, weil user32 nie auf dem Pfad war — diese Abwesenheit ist für sich ein nützliches Signal. `Microsoft-Windows-Wininit` Event 1 erfasst die Shutdown-Startphase. EDRs hooken häufig `ntdll!NtShutdownSystem` oder direkt die Kernel-Version, weil die legitime Caller-Baseline im Wesentlichen aus `winlogon.exe`, `csrss.exe`, `wininit.exe` und einer Handvoll Management-Tools besteht — alles andere ist hochaussagekräftig.

Direkte Syscall-Beispiele

asmx64 direct stub

; Direct syscall stub for NtShutdownSystem (SSN 0x1C6 on Win11 24H2)
NtShutdownSystem PROC
    mov  r10, rcx          ; SHUTDOWN_ACTION
    mov  eax, 1C6h         ; SSN — verify per-build
    syscall
    ret
NtShutdownSystem ENDP

cWiper-style hard reboot

// Final stage of a destructive payload: enable SeShutdownPrivilege and reboot.
#include <windows.h>
#include <winternl.h>

typedef NTSTATUS (NTAPI *pNtShutdownSystem)(int /*SHUTDOWN_ACTION*/);

void HardReboot(void) {
    HANDLE hTok;
    TOKEN_PRIVILEGES tp = {0};
    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hTok);
    LookupPrivilegeValueW(NULL, L"SeShutdownPrivilege", &tp.Privileges[0].Luid);
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hTok, FALSE, &tp, 0, NULL, NULL);
    CloseHandle(hTok);

    pNtShutdownSystem fn = (pNtShutdownSystem)GetProcAddress(
        GetModuleHandleA("ntdll.dll"), "NtShutdownSystem");
    fn(1 /* ShutdownReboot */);   // no WM_QUERYENDSESSION, no shutdown scripts
}

rustPower-off path

// Cargo: ntapi = "0.4", windows-sys = "0.59"
use ntapi::ntpoapi::NtShutdownSystem;
use ntapi::ntpoapi::SHUTDOWN_ACTION;

unsafe fn power_off() -> i32 {
    // SeShutdownPrivilege must already be enabled on the calling token.
    NtShutdownSystem(SHUTDOWN_ACTION::ShutdownPowerOff as i32)
}

MITRE ATT&CK-Mappings

Last verified: 2026-05-20