> Windows Syscalls
ntoskrnl.exeT1499T1106

NtCreatePagingFile

Crea o extiende un archivo de paginación Windows en la ruta NT solicitada; requiere SeCreatePagefilePrivilege.

Prototipo

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

Argumentos

NameTypeDirDescription
PageFileNamePUNICODE_STRINGinRuta del namespace NT del pagefile, p. ej. \??\C:\pagefile.sys.
MinimumSizePLARGE_INTEGERinTamaño inicial en bytes; debe ser múltiplo de 1 MB y >= 16 MB.
MaximumSizePLARGE_INTEGERinTamaño máximo en bytes; debe ser >= MinimumSize y múltiplo de 1 MB.
PriorityULONGinReservado; pasar 0 en Windows actual.

IDs de syscalls por versión de Windows

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

Módulo del kernel

ntoskrnl.exeNtCreatePagingFile

APIs relacionadas

CreatePageFileWWin32_PageFileSetting (WMI)NtSetSystemInformation (SystemPageFileInformation)RemovePageFileW

Stub del syscall

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

Notas no documentadas

La rutina del kernel detrás de `kernel32!CreatePageFile` y la plomería de `pagefileconfig.vbs` / `wmic pagefileset`. Crea o extiende un pagefile de respaldo y lo registra con `MiPageFileInformation`. La verificación de privilegio es inequívoca: `SeCreatePagefilePrivilege` debe estar habilitado en el token del llamante, que por defecto solo se concede a BUILTIN\Administrators y solo surte efecto en tokens no sujetos al filtrado UAC (así que un shell admin no elevado *no* tendrá éxito). El kernel escribe el pagefile sparse-extendido en NTFS, así que la creación termina rápido pero el consumo real de disco crece bajo demanda. Pasar un `MaximumSize` mayor que el espacio libre en disco tiene éxito al registrar pero las extensiones posteriores fallan con `STATUS_DISK_FULL`. En Windows moderno el pagefile se gestiona automáticamente; la creación manual la usan sobre todo especialistas en performance configurando volúmenes de dump dedicados.

Uso común por malware

Superficie nicho de DoS / agotamiento de recursos privilegiado. Tres patrones observados. Primero, **agotamiento de disco**: registrar un pagefile con un `MaximumSize` enorme en el disco del sistema — cuando la presión de memoria subsiguiente fuerza extensiones, el kernel devora alegremente cada sector restante hasta que los servicios empiezan a fallar. Segundo, **secuestro de volumen de dump**: redirigir el pagefile de crash-dump a una ubicación controlada para capturar el próximo volcado de memoria de BSOD (que puede contener claves de descifrado, credenciales en claro, etc.). Tercero, **ruido forense**: crear un pagefile nuevo en un volumen no-sistema fuerza al memory manager SMM/EFI a honrarlo, fragmentando cualquier carving posterior de imagen de disco. Ninguno de estos es estándar de malware commodity — necesitan `SeCreatePagefilePrivilege`, y un atacante que ya tiene ese nivel de admin puede hacer muchas cosas menos ruidosas. Los avistamientos reales son raros y tienden a red-team más que a crimeware.

Oportunidades de detección

Auditar el uso de `SeCreatePagefilePrivilege` vía Security Event ID 4673 (la subcategoría `Sensitive Privilege Use` debe estar habilitada — está apagada por defecto). Los nuevos registros de pagefile también surgen como evento ETW `Microsoft-Windows-Kernel-Memory` ID 3 (`PagefileCreated`) con la ruta NT completa. Cualquier ruta de pagefile fuera de `\??\<drive>:\pagefile.sys` y `\??\<drive>:\swapfile.sys` (archivo swap UWP modern-standby) es inusual. Sysmon Event 11 (`FileCreate`) disparará si el destino está en un volumen monitoreado. Los defensores pueden además baselinear el número y tamaño total de pagefile esperados vía WMI (`Win32_PageFileSetting`) y alertar sobre deriva.

Ejemplos de syscalls directos

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

Mapeos MITRE ATT&CK

Last verified: 2026-05-20