NtCreatePartition
Crée un objet partition mémoire qui isole le working-set physique d'un groupe de processus.
Prototype
NTSTATUS NtCreatePartition( PHANDLE PartitionHandle, HANDLE ParentPartitionHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, ULONG PreferredNode );
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| PartitionHandle | PHANDLE | out | Reçoit le handle de l'objet partition nouvellement créé. |
| ParentPartitionHandle | HANDLE | in | Partition parente optionnelle ; NULL hérite de la partition système. Sert à construire des hiérarchies. |
| DesiredAccess | ACCESS_MASK | in | Masque d'accès ; couramment MEMORY_PARTITION_ALL_ACCESS (0x000F0003). |
| ObjectAttributes | POBJECT_ATTRIBUTES | in | Nom d'objet (ex. \KernelObjects\MyPartition) et descripteur de sécurité. |
| PreferredNode | ULONG | in | Indication de nœud NUMA pour la mémoire de support ; 0xFFFFFFFF pour aucune préférence. |
IDs de syscalls par version de Windows
| Version 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 |
Module noyau
APIs liées
Stub du 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
Notes non documentées
Introduit dans Windows 10 Redstone 2 (1703) dans le cadre du sous-système de partitions mémoire bâti à l'origine pour l'isolation mémoire du mode-jeu et des containers Hyper-V. Une partition possède ses propres page lists, pages disponibles, thread modified-page-writer et standby cache ; les processus associés (`ProcessInformationClass = ProcessAttachToMemoryPartition`) tirent leur mémoire physique exclusivement d'elle. Le wrapper standard `CreatePartition` vit dans `api-ms-win-core-memorypartition-l1` (stub kernel32), mais l'usage majoritaire est interne — Hyper-V, le runtime de containers Windows, et `SystemSettings` pour la réservation Game Mode le consomment tous. Requiert `SeLockMemoryPrivilege` plus l'ACL `MEMORY_PARTITION_ALL_ACCESS` sur le parent.
Usage courant par les malwares
Signal offensif très faible. L'exigence de privilège (`SeLockMemoryPrivilege`) verrouille presque tout usage intéressant, et la complexité opérationnelle de déplacer des processus entre partitions n'apporte pas grand-chose qu'un simple section-mapping n'offre déjà. Le seul usage réellement au niveau recherche est l'**isolation de canal auxiliaire dans les sandboxes de télémétrie red-team** — partitionner le working-set d'un capteur pour que les fuites de timing par pression sur pagefile depuis la victime ne corrèlent plus avec les mesures du capteur. Aucune famille de malware commodity public n'est documentée en train d'utiliser ceci.
Opportunités de détection
Les appels à `NtCreatePartition` venant de quoi que ce soit en dehors de `lsass.exe` (brièvement au boot), `vmcompute.exe`, `vmwp.exe`, `SystemSettings.exe` et quelques services dédiés au mode-jeu sont intrinsèquement suspects. Le provider `Microsoft-Windows-Kernel-Memory` émet l'évènement 8 (`PartitionCreated`) avec le chemin d'image appelant. Auditer les ajustements de `SeLockMemoryPrivilege` sur des tokens non-service est le signal en amont le moins coûteux — le privilège est requis et rarement détenu légitimement par du code user-mode.
Exemples de syscalls directs
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 ENDPMappings MITRE ATT&CK
Last verified: 2026-05-20