MI_PARTITION_CORE

The MI_PARTITION_CORE structure (formally _MI_PARTITION_CORE) is here thought to exist only as a subdivision of the MI_PARTITION, specifically as the latter’s Core member. Even more specifically, it looks to be intended as the partition’s first member. See that it starts with the essential details of the partition as a partition among partitions: an identifier; flags; reference count; parent partition; and linkage into the list of all partitions.

Variability

The MI_PARTITION_CORE is highly susceptible to changing between builds. The following changes of size give some rough indication of the variability so far:

Version Size (x86) Size (x64)
10.0 0xE8 0x0168
1511 0xB8 0x0158
1607 0xBC 0x0160
1703 0xF8 0x01C8
1709 to 1809 0xE4 0x01A8
1903 0xE4 0x01B0
2004 0xE8 0x01B8

Layout

The sizes in the preceding table and the offsets, names and types in the next are from type information in public symbol files for the kernel.

Offset (x86) Offset (x64) Definition Versions
0x00 0x00
USHORT PartitionId;
10.0 and higher
0x04 0x04
union {
    ULONG LongFlags;
    MI_PARTITION_FLAGS Flags;
} u;
10.0 and higher
0x08 0x08
ULONG Signature;
1607 and higher
0x0C 0x0C
BOOLEAN MemoryConfigurationChanged;
1703 and higher
0x08 (10.0 to 1511);
0x0C (1607);
0x10 (1703)
0x08 (10.0 to 1511);
0x10 (1607 to 1703)
ULONG_PTR ReferenceCount;
10.0 to 1703
0x0C (10.0 to 1511);
0x10 (1607);
0x14 (1703)
0x10 (10.0 to 1511);
0x18 (1607 to 1703)
MI_PARTITION *ParentPartition;
10.0 to 1703
0x10 (10.0 to 1511);
0x14 (1607);
0x18 (1703)
0x18 (10.0 to 1511);
0x20 (1607 to 1703)
LIST_ENTRY ListEntry;
10.0 to 1703
0x18 (10.0 to 1511);
0x1C (1607);
0x20 (1703);
0x10
0x28 (10.0 to 1511);
0x30 (1607 to 1703);
0x10
MI_NODE_INFORMATION *NodeInformation;
10.0 and higher
0x1C (10.0 to 1511) 0x30 (10.0 to 1511)
MDL *MdlPhysicalMemoryBlock;
10.0 to 1511
0x20 (1607);
0x24 (1703);
0x14
0x38 (1607 to 1703);
0x18
RTL_AVL_TREE *PageRoot;
1607 and higher
0x20 (10.0 to 1511);
0x24 (1607);
0x28 (1703);
0x18
0x38 (10.0 to 1511);
0x40 (1607 to 1703);
0x20
PHYSICAL_MEMORY_DESCRIPTOR *MemoryNodeRuns;
10.0 and higher
0x24 (10.0) 0x40 (10.0)
MI_PARTITION_STATISTICS Stats;
10.0 only
0x24 (1511);
0x28 (1607);
0x2C (1703);
0x1C
0x40 (1511);
0x48 (1607 to 1703);
0x28
ULONG_PTR MemoryBlockReferences;
1511 and higher
0x28 (1511);
0x2C (1607);
0x30 (1703);
0x20
0x48 (1511);
0x50 (1607 to 1703);
0x30
WORK_QUEUE_ITEM PfnUnmapWorkItem;
1511 and higher
0x38 (1511);
0x3C (1607)
0x68 (1511);
0x70 (1607)
BOOLEAN PfnUnmapActive;
1511 to 1607
0x3C (1511);
0x40 (1607 to 1703);
0x30
0x70 (1511);
0x78 (1607);
0x70 (1703);
0x50
ULONG_PTR PfnUnmapCount;
1511 and higher
0x40 (1511);
0x44 (1607 to 1703);
0x34
0x78 (1511);
0x80 (1607);
0x78 (1703);
0x58
PVOID PfnUnmapWaitList;
1511 and higher
0x74 (10.0);
0x44 (1511);
0x48 (1607 to 1703);
0x38
0x90 (10.0);
0x80 (1511);
0x88 (1607);
0x80 (1703);
0x60
PHYSICAL_MEMORY_DESCRIPTOR *MemoryRuns;
10.0 and higher
0x78 (10.0);
0x48 (1511);
0x4C (1607 to 1703);
0x3C
0x98 (10.0);
0x88 (1511);
0x90 (1607);
0x88 (1703);
0x68
KEVENT ExitEvent;
10.0 and higher
0x88 (10.0);
0x58 (1511);
0x5C (1607 to 1703);
0x4C
0xB0 (10.0);
0xA0 (1511);
0xA8 (1607);
0xA0 (1703);
0x80
PVOID SystemThreadHandles [5];
10.0 to 1903
PVOID SystemThreadHandles [6];
2004 and higher
0x9C (10.0);
0x6C (1511);
0x70 (1607 to 1703);
0x60 (1709 to 1903);
0x64
0xD8 (10.0);
0xC8 (1511);
0xD0 (1607);
0xC8 (1703);
0xA8 (1709 to 1903);
0xB0
PVOID PartitionObject;
10.0 and higher
0xA0 (10.0);
0x70 (1511);
0x74 (1607 to 1703)
0xE0 (10.0);
0xD0 (1511);
0xD8 (1607);
0xD0 (1703)
HANDLE PartitionObjectHandle;
10.0 to 1703
0x78 (1703);
0x64 (1709 to 1903);
0x68
0xD8 (1703);
0xB0 (1709 to 1903);
0xB8
EX_PUSH_LOCK PartitionSystemThreadsLock;
1703 and higher
0xA4 (10.0);
0x74 (1511);
0x78 (1607);
0x7C (1703);
0x68 (1709 to 1903);
0x6C
0xE8 (10.0);
0xD8 (1511);
0xE0 (1607 to 1703);
0xB8 (1709 to 1903);
0xC0
EX_PUSH_LOCK DynamicMemoryPushLock;
10.0 and higher
0xA8 (10.0);
0x78 (1511);
0x7C (1607);
0x80 (1703);
0x6C (1709 to 1903);
0x70
0xF0 (10.0);
0xE0 (1511);
0xE8 (1607 to 1703);
0xC0 (1709 to 1903);
0xC8
LONG volatile DynamicMemoryLock;
10.0 and higher
0x84 (1703);
0x70 (1709 to 1903);
0x74
0xEC (1703);
0xC4 (1709 to 1903);
0xCC
BOOLEAN PfnUnmapActive;
1703 and higher
0xAC (10.0);
0x7C (1511);
0x80 (1607);
0x88 (1703);
0x74 (1709 to 1903);
0x78
0xF8 (10.0);
0xE8 (1511);
0xF0 (1607 to 1703);
0xC8 (1709 to 1903);
0xD0
KEVENT TemporaryMemoryEvent;
10.0 and higher
0x98 (1703);
0x84 (1709 to 1903);
0x88
0x0108 (1703);
0xE0 (1709 to 1903);
0xE8
HANDLE RootDirectory;
1703 and higher
0x9C (1703);
0x88 (1709 to 1903);
0x8C
0x0110 (1703);
0xE8 (1709 to 1903);
0xF0
HANDLE KernelObjectsDirectory;
1703 and higher
0xBC (10.0);
0x8C (1511);
0x90 (1607);
0xA0 (1703);
0x8C (1709 to 1903);
0x90
0x0110 (10.0);
0x0100 (1511);
0x0108 (1607);
0x0118 (1703);
0xF0 (1709 to 1903);
0xF8
KEVENT *MemoryEvents [TotalNumberOfMemoryEvents];
10.0 and higher
0xCC (1703);
0xB8 (1709 to 1903);
0xBC
0x0170 (1703);
0x0148 (1709 to 1903);
0x0150
HANDLE MemoryEventHandles [TotalNumberOfMemoryEvents];
1703 and higher
  0x01A0 (1903);
0x01A8
ULONGLONG TotalHugeIoRanges;
1903 and higher
  0x01A0 (1709 to 1809);
0x01A8 (1903);
0x01B0
ULONGLONG NonChargedSecurePages;
1709 and higher

The MemoryEvents and MemoryEventHandles are indexed by the MI_MEMORY_EVENT_TYPES.