NtCreatePartition
Crea un objeto partición de memoria que aísla el working-set físico de un grupo de procesos.
Prototipo
NTSTATUS NtCreatePartition( PHANDLE PartitionHandle, HANDLE ParentPartitionHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, ULONG PreferredNode );
Argumentos
| Name | Type | Dir | Description |
|---|---|---|---|
| PartitionHandle | PHANDLE | out | Recibe el handle al objeto partición recién creado. |
| ParentPartitionHandle | HANDLE | in | Partición padre opcional; NULL hereda de la partición del sistema. Usado para construir jerarquías. |
| DesiredAccess | ACCESS_MASK | in | Máscara de acceso; comúnmente MEMORY_PARTITION_ALL_ACCESS (0x000F0003). |
| ObjectAttributes | POBJECT_ATTRIBUTES | in | Nombre de objeto (p. ej. \KernelObjects\MyPartition) y descriptor de seguridad. |
| PreferredNode | ULONG | in | Sugerencia de nodo NUMA para la memoria de respaldo; 0xFFFFFFFF para sin preferencia. |
IDs de syscalls por versión de Windows
| Versión de Windows | ID de syscall | Build |
|---|---|---|
| Win10 1507 | 0xAA | win10-1507 |
| Win10 1607 | 0xAC | win10-1607 |
| Win10 1703 | 0xAF | win10-1703 |
| Win10 1709 | 0xB0 | win10-1709 |
| Win10 1803 | 0xB1 | win10-1803 |
| Win10 1809 | 0xB1 | win10-1809 |
| Win10 1903 | 0xB2 | win10-1903 |
| Win10 1909 | 0xB2 | win10-1909 |
| Win10 2004 | 0xB6 | win10-2004 |
| Win10 20H2 | 0xB6 | win10-20h2 |
| Win10 21H1 | 0xB6 | win10-21h1 |
| Win10 21H2 | 0xB7 | win10-21h2 |
| Win10 22H2 | 0xB7 | win10-22h2 |
| Win11 21H2 | 0xBA | win11-21h2 |
| Win11 22H2 | 0xBB | win11-22h2 |
| Win11 23H2 | 0xBB | win11-23h2 |
| Win11 24H2 | 0xBD | win11-24h2 |
| Server 2016 | 0xAC | winserver-2016 |
| Server 2019 | 0xB1 | winserver-2019 |
| Server 2022 | 0xB9 | winserver-2022 |
| Server 2025 | 0xBD | winserver-2025 |
Módulo del kernel
APIs relacionadas
Stub del syscall
4C 8B D1 mov r10, rcx B8 BD 00 00 00 mov eax, 0xBD 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
Introducido en Windows 10 Redstone 2 (1703) como parte del subsistema de particiones de memoria construido originalmente para el aislamiento de memoria del game-mode y los contenedores Hyper-V. Una partición posee sus propias page lists, páginas disponibles, hilo modified-page-writer y standby cache; los procesos asociados (`ProcessInformationClass = ProcessAttachToMemoryPartition`) sacan su memoria física exclusivamente de ella. El wrapper estándar `CreatePartition` vive en `api-ms-win-core-memorypartition-l1` (stub kernel32), pero el uso mayoritario es interno — Hyper-V, el runtime de contenedores Windows y `SystemSettings` para la reserva de Game Mode lo consumen. Requiere `SeLockMemoryPrivilege` más la ACL `MEMORY_PARTITION_ALL_ACCESS` sobre el padre.
Uso común por malware
Señal ofensiva muy baja. El requisito de privilegio (`SeLockMemoryPrivilege`) bloquea casi todo uso interesante, y la complejidad operacional de mover procesos entre particiones no aporta a malware mucho más de lo que un simple section-mapping ofrece. El único uso de nivel investigación genuino es el **aislamiento de canal lateral en sandboxes de telemetría red-team** — particionar el working-set de un sensor para que las fugas de timing por presión de pagefile desde la víctima ya no correlacionen con las mediciones del sensor. Ninguna familia de malware commodity pública está documentada usándolo.
Oportunidades de detección
Las llamadas a `NtCreatePartition` desde cualquier cosa fuera de `lsass.exe` (brevemente durante boot), `vmcompute.exe`, `vmwp.exe`, `SystemSettings.exe` y unos pocos servicios dedicados a game-mode son intrínsecamente sospechosas. El provider `Microsoft-Windows-Kernel-Memory` emite el evento 8 (`PartitionCreated`) con la ruta de imagen llamante. Auditar ajustes de `SeLockMemoryPrivilege` en tokens no-servicio es la señal aguas arriba más barata — el privilegio es requerido y rara vez se ostenta legítimamente por código user-mode.
Ejemplos de syscalls directos
cCreate a named child partition under the system partition
// Requires SeLockMemoryPrivilege and a writable SD on the parent.
#include <windows.h>
#include <winternl.h>
#define MEMORY_PARTITION_ALL_ACCESS 0x000F0003
typedef NTSTATUS (NTAPI* pNtCreatePartition)(
PHANDLE, HANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG);
void make_partition(void) {
UNICODE_STRING name;
RtlInitUnicodeString(&name, L"\\KernelObjects\\Sandbox1");
OBJECT_ATTRIBUTES oa;
InitializeObjectAttributes(&oa, &name, OBJ_CASE_INSENSITIVE, NULL, NULL);
pNtCreatePartition f = (pNtCreatePartition)GetProcAddress(
GetModuleHandleA("ntdll.dll"), "NtCreatePartition");
HANDLE h = NULL;
NTSTATUS st = f(&h, NULL /* parent = system */,
MEMORY_PARTITION_ALL_ACCESS, &oa,
0xFFFFFFFF /* any NUMA node */);
}asmx64 direct stub (Win11 24H2 / Server 2025, SSN 0xBD)
NtCreatePartition PROC
mov r10, rcx
mov eax, 0BDh
syscall
ret
NtCreatePartition ENDPMapeos MITRE ATT&CK
Last verified: 2026-05-20