NtOpenPartition
Ouvre un objet partition mémoire existant par son nom et renvoie un handle pour gestion ou attachement de processus.
Prototype
NTSTATUS NtOpenPartition( PHANDLE PartitionHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes );
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| PartitionHandle | PHANDLE | out | Reçoit le handle de l'objet partition ouvert. |
| DesiredAccess | ACCESS_MASK | in | Masque d'accès demandé ; ex. MEMORY_PARTITION_QUERY_ACCESS (0x0001) ou MEMORY_PARTITION_MODIFY_ACCESS (0x0002). |
| ObjectAttributes | POBJECT_ATTRIBUTES | in | Chemin Object Manager de la partition, ex. \KernelObjects\Sandbox1. |
IDs de syscalls par version de Windows
| Version de Windows | ID de syscall | Build |
|---|---|---|
| Win10 1507 | 0x112 | win10-1507 |
| Win10 1607 | 0x117 | win10-1607 |
| Win10 1703 | 0x11B | win10-1703 |
| Win10 1709 | 0x11D | win10-1709 |
| Win10 1803 | 0x11F | win10-1803 |
| Win10 1809 | 0x120 | win10-1809 |
| Win10 1903 | 0x121 | win10-1903 |
| Win10 1909 | 0x121 | win10-1909 |
| Win10 2004 | 0x126 | win10-2004 |
| Win10 20H2 | 0x126 | win10-20h2 |
| Win10 21H1 | 0x126 | win10-21h1 |
| Win10 21H2 | 0x127 | win10-21h2 |
| Win10 22H2 | 0x127 | win10-22h2 |
| Win11 21H2 | 0x12D | win11-21h2 |
| Win11 22H2 | 0x12F | win11-22h2 |
| Win11 23H2 | 0x12F | win11-23h2 |
| Win11 24H2 | 0x131 | win11-24h2 |
| Server 2016 | 0x117 | winserver-2016 |
| Server 2019 | 0x120 | winserver-2019 |
| Server 2022 | 0x12C | winserver-2022 |
| Server 2025 | 0x131 | winserver-2025 |
Module noyau
APIs liées
Stub du syscall
4C 8B D1 mov r10, rcx B8 31 01 00 00 mov eax, 0x131 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
Pendant `Open` de `NtCreatePartition`. La résolution est purement object-manager : la partition doit déjà exister sous son chemin de namespace (couramment `\KernelObjects\…`) et le token appelant doit satisfaire le descripteur de sécurité de la partition pour les droits demandés. Contrairement à `NtCreatePartition`, ouvrir une partition pour query/inspection ne requiert pas `SeLockMemoryPrivilege` — seuls les chemins modify/attach le font. La résolution dynamique du syscall est triviale via Hell's Gate car le SSN dérive de façon prévisible.
Usage courant par les malwares
Pratiquement aucun abus direct dans le malware commodity. Un défenseur ou chercheur pourrait l'appeler pour introspecter les partitions de containers Hyper-V sur un hôte, et un implant sophistiqué pourrait *théoriquement* utiliser une partition créée par l'utilisateur préexistante pour héberger ses allocations et polluer les compteurs de working-set vus par l'EDR de l'hôte — mais le gain par rapport à un simple `NtAllocateVirtualMemory` est négligeable relativement au coût en privilèges.
Opportunités de détection
Couplez avec le signal `NtCreatePartition` : ouvrir une partition nommée que l'opérateur n'a pas créée lui-même est anormal en dehors de vmcompute/vmwp/SystemSettings. L'évènement 9 (`PartitionOpened`) du provider ETW `Microsoft-Windows-Kernel-Memory` porte l'image appelante et le nom de l'objet partition. La plupart des environnements de production auront ici une liste blanche vide.
Exemples de syscalls directs
cOpen an existing partition for query
#include <windows.h>
#include <winternl.h>
#define MEMORY_PARTITION_QUERY_ACCESS 0x0001
typedef NTSTATUS (NTAPI* pNtOpenPartition)(
PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES);
HANDLE open_partition(LPCWSTR name) {
UNICODE_STRING us;
RtlInitUnicodeString(&us, name);
OBJECT_ATTRIBUTES oa;
InitializeObjectAttributes(&oa, &us, OBJ_CASE_INSENSITIVE, NULL, NULL);
pNtOpenPartition f = (pNtOpenPartition)GetProcAddress(
GetModuleHandleA("ntdll.dll"), "NtOpenPartition");
HANDLE h = NULL;
f(&h, MEMORY_PARTITION_QUERY_ACCESS, &oa);
return h;
}asmx64 direct stub (Win11 24H2, SSN 0x131)
NtOpenPartition PROC
mov r10, rcx
mov eax, 131h
syscall
ret
NtOpenPartition ENDPMappings MITRE ATT&CK
Last verified: 2026-05-20