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
| Name | Type | Dir | Description |
|---|---|---|---|
| PageFileName | PUNICODE_STRING | in | NT-Namespace-Pfad der Pagefile, z. B. \??\C:\pagefile.sys. |
| MinimumSize | PLARGE_INTEGER | in | Initialgröße in Bytes; muss Vielfaches von 1 MB und >= 16 MB sein. |
| MaximumSize | PLARGE_INTEGER | in | Maximalgröße in Bytes; muss >= MinimumSize und Vielfaches von 1 MB sein. |
| Priority | ULONG | in | Reserviert; auf aktuellem Windows 0 übergeben. |
Syscall-IDs pro Windows-Version
| Windows-Version | Syscall-ID | Build |
|---|---|---|
| Win10 1507 | 0xA9 | win10-1507 |
| Win10 1607 | 0xAB | win10-1607 |
| Win10 1703 | 0xAE | win10-1703 |
| Win10 1709 | 0xAF | win10-1709 |
| Win10 1803 | 0xB0 | win10-1803 |
| Win10 1809 | 0xB0 | win10-1809 |
| Win10 1903 | 0xB1 | win10-1903 |
| Win10 1909 | 0xB1 | win10-1909 |
| Win10 2004 | 0xB5 | win10-2004 |
| Win10 20H2 | 0xB5 | win10-20h2 |
| Win10 21H1 | 0xB5 | win10-21h1 |
| Win10 21H2 | 0xB6 | win10-21h2 |
| Win10 22H2 | 0xB6 | win10-22h2 |
| Win11 21H2 | 0xB9 | win11-21h2 |
| Win11 22H2 | 0xBA | win11-22h2 |
| Win11 23H2 | 0xBA | win11-23h2 |
| Win11 24H2 | 0xBC | win11-24h2 |
| Server 2016 | 0xAB | winserver-2016 |
| Server 2019 | 0xB0 | winserver-2019 |
| Server 2022 | 0xB8 | winserver-2022 |
| Server 2025 | 0xBC | winserver-2025 |
Kernel-Modul
Verwandte APIs
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.
Erkennungsmö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 ENDPMITRE ATT&CK-Mappings
Last verified: 2026-05-20