> Windows Syscalls
ntoskrnl.exeT1499T1106

NtCreatePagingFile

Erzeugt oder erweitert eine Windows-Pagefile am angeforderten NT-Pfad; erfordert SeCreatePagefilePrivilege.

Prototyp

NTSTATUS NtCreatePagingFile(
  PUNICODE_STRING PageFileName,
  PLARGE_INTEGER  MinimumSize,
  PLARGE_INTEGER  MaximumSize,
  ULONG           Priority
);

Argumente

NameTypeDirDescription
PageFileNamePUNICODE_STRINGinNT-Namespace-Pfad der Pagefile, z. B. \??\C:\pagefile.sys.
MinimumSizePLARGE_INTEGERinInitialgröße in Bytes; muss Vielfaches von 1 MB und >= 16 MB sein.
MaximumSizePLARGE_INTEGERinMaximalgröße in Bytes; muss >= MinimumSize und Vielfaches von 1 MB sein.
PriorityULONGinReserviert; auf aktuellem Windows 0 übergeben.

Syscall-IDs pro Windows-Version

Windows-VersionSyscall-IDBuild
Win10 15070xA9win10-1507
Win10 16070xABwin10-1607
Win10 17030xAEwin10-1703
Win10 17090xAFwin10-1709
Win10 18030xB0win10-1803
Win10 18090xB0win10-1809
Win10 19030xB1win10-1903
Win10 19090xB1win10-1909
Win10 20040xB5win10-2004
Win10 20H20xB5win10-20h2
Win10 21H10xB5win10-21h1
Win10 21H20xB6win10-21h2
Win10 22H20xB6win10-22h2
Win11 21H20xB9win11-21h2
Win11 22H20xBAwin11-22h2
Win11 23H20xBAwin11-23h2
Win11 24H20xBCwin11-24h2
Server 20160xABwinserver-2016
Server 20190xB0winserver-2019
Server 20220xB8winserver-2022
Server 20250xBCwinserver-2025

Kernel-Modul

ntoskrnl.exeNtCreatePagingFile

Verwandte APIs

CreatePageFileWWin32_PageFileSetting (WMI)NtSetSystemInformation (SystemPageFileInformation)RemovePageFileW

Syscall-Stub

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

Die Kernel-Routine hinter `kernel32!CreatePageFile` und der Plumbing von `pagefileconfig.vbs` / `wmic pagefileset`. Erzeugt oder erweitert eine Backing-Pagefile und registriert sie bei `MiPageFileInformation`. Die Privilegienprüfung ist eindeutig: `SeCreatePagefilePrivilege` muss im Token des Aufrufers aktiviert sein, was standardmäßig nur BUILTIN\Administrators gewährt wird und nur bei nicht UAC-gefilterten Tokens greift (eine nicht-elevated Admin-Shell schlägt also *fehl*). Der Kernel schreibt die Pagefile auf NTFS sparse-erweitert, die Erzeugung ist also schnell, der tatsächliche Plattenverbrauch wächst bedarfsbasiert. Eine `MaximumSize` größer als der freie Plattenplatz registriert sich erfolgreich, spätere Erweiterungen schlagen aber mit `STATUS_DISK_FULL` fehl. Auf modernem Windows wird die Pagefile automatisch verwaltet; manuelle Erzeugung nutzen vor allem Performance-Spezialisten, die dedizierte Dump-Volumes konfigurieren.

Häufige Malware-Nutzung

Nischenhafte privilegierte DoS-/Ressourcen-Erschöpfungs-Oberfläche. Drei beobachtete Muster. Erstens, **Disk-Exhaustion**: eine Pagefile mit riesiger `MaximumSize` auf der System-Disk registrieren — wenn nachfolgender Speicherdruck Erweiterungen erzwingt, frisst der Kernel fröhlich jeden verbleibenden Sektor, bis Dienste auszufallen beginnen. Zweitens, **Dump-Volume-Hijack**: die Crash-Dump-Pagefile auf einen kontrollierten Ort umleiten, um den nächsten BSOD-Speicherdump (der Entschlüsselungsschlüssel, Klartext-Credentials etc. enthalten kann) zu erfassen. Drittens, **forensisches Rauschen**: eine frische Pagefile auf einem Nicht-System-Volume erzwingt, dass der SMM-/EFI-Memory-Manager sie ehrt, was späteres Disk-Image-Carving fragmentiert. Keines davon gehört zum Commodity-Malware-Standard — sie brauchen `SeCreatePagefilePrivilege`, und ein Angreifer mit diesem Admin-Niveau hat viele leisere Optionen. Reale Sichtungen sind selten und eher Red-Team als Crimeware.

Erkennungs­möglichkeiten

`SeCreatePagefilePrivilege`-Nutzung über Security Event ID 4673 auditieren (Subkategorie `Sensitive Privilege Use` muss aktiviert sein — standardmäßig aus). Neue Pagefile-Registrierungen erscheinen zudem als ETW-Event `Microsoft-Windows-Kernel-Memory` ID 3 (`PagefileCreated`) mit vollem NT-Pfad. Jeder Pagefile-Pfad außerhalb `\??\<drive>:\pagefile.sys` und `\??\<drive>:\swapfile.sys` (UWP-Modern-Standby-Swap) ist ungewöhnlich. Sysmon Event 11 (`FileCreate`) feuert, wenn das Ziel auf einem überwachten Volume liegt. Verteidiger können zusätzlich erwartete Pagefile-Anzahl und Gesamtgröße via WMI (`Win32_PageFileSetting`) baselinen und auf Abweichungen alarmieren.

Direkte Syscall-Beispiele

cEnable SeCreatePagefilePrivilege then register a 1 GB pagefile

#include <windows.h>
#include <winternl.h>

typedef NTSTATUS (NTAPI* pNtCreatePagingFile)(
    PUNICODE_STRING, PLARGE_INTEGER, PLARGE_INTEGER, ULONG);

static BOOL enable_priv(LPCSTR name) {
    HANDLE tok; TOKEN_PRIVILEGES tp;
    OpenProcessToken(GetCurrentProcess(),
                     TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &tok);
    LookupPrivilegeValueA(NULL, name, &tp.Privileges[0].Luid);
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(tok, FALSE, &tp, 0, NULL, NULL);
    BOOL ok = GetLastError() == ERROR_SUCCESS;
    CloseHandle(tok);
    return ok;
}

void add_pagefile(void) {
    enable_priv("SeCreatePagefilePrivilege");

    UNICODE_STRING path;
    RtlInitUnicodeString(&path, L"\\??\\C:\\extra_pagefile.sys");
    LARGE_INTEGER minSize = { .QuadPart = 1024LL * 1024 * 1024 };  // 1 GB
    LARGE_INTEGER maxSize = { .QuadPart = 2048LL * 1024 * 1024 };  // 2 GB

    pNtCreatePagingFile f = (pNtCreatePagingFile)GetProcAddress(
        GetModuleHandleA("ntdll.dll"), "NtCreatePagingFile");
    f(&path, &minSize, &maxSize, 0);
}

asmx64 direct stub (Win11 24H2 / Server 2025, SSN 0xBC)

NtCreatePagingFile PROC
    mov  r10, rcx
    mov  eax, 0BCh
    syscall
    ret
NtCreatePagingFile ENDP

MITRE ATT&CK-Mappings

Last verified: 2026-05-20