MI_PARTITION

As a feature of the Memory Manager, a memory partition is represented by the MI_PARTITION structure. Exposed through the Object Manager, a partition object is a pointer to an MI_PARTITION.

Memory partitions are new for Windows 10. They are in effect specific to 64-bit Windows, since 32-bit Windows has just the one system partition. Each partition is in some sense a separate instance of what earlier versions treat as the whole management of physical memory. Among the side-effects is that most internal variables which used to show plainly when debugging with public symbols now show less plainly because they are members of members of an MI_PARTITION structure, which anyway may be found only through members of members of the MI_SYSTEM_INFORMATION structure which is the type of the internal variable named MiState.

Variability

The MI_PARTITION structure is unsurprisingly treated as if it is no less internal than when many of its members were internal varibles. It is highly susceptible to changing between builds. Its changes of size give some rough indication:

Version Size (x86) Size (x64)
10.0 0x1740 0x25C0
1511 0x18C0 0x2700
1607 0x1A00 0x2780
1703 0x1A00 0x27C0
1709 0x1A80 0x2880
1803 0x1B80 0x2CC0

It happens, however, that all change from one build to the next is in the many substructures.

Layout

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

Offset (x86) Offset (x64) Definition
0x00 0x00
MI_PARTITION_CORE Core;
0xE8 (10.0);
0xB8 (1511);
0xC0 (1607);
0xF8 (1703);
0xE8
0x0168 (10.0);
0x0158 (1511);
0x0160 (1607);
0x01C8 (1703);
0x01A8
MI_PARTITION_MODWRITES Modwriter;
0x0298 (10.0);
0x0288 (1511);
0x0290 (1607);
0x02C8 (1703);
0x02B0 (1709);
0x02B8
0x0410 (10.0);
0x0430 (1511 to 1607);
0x04A0 (1703);
0x0470
MI_PARTITION_STORES Store;
0x02E8 (10.0);
0x0300 (1511 to 1607);
0x0340
0x0490 (10.0);
0x04C0 (1511 to 1607);
0x0540 (1703);
0x0500
MI_PARTITION_SEGMENTS Segments;
0x03C0 (10.0);
0x0400 (1511 to 1607);
0x0440 (1703);
0x04C0 (1709);
0x0540
0x05C0 (10.0);
0x0640 (1511 to 1607);
0x0780 (1703);
0x0800 (1709);
0x0840
MI_PARTITION_PAGE_LISTS PageLists;
0x0A80 (10.0);
0x0B80 (1511 to 1607);
0x0C00 (1703);
0x0C80 (1709);
0x0DC0
0x1280 (10.0);
0x1340 (1511);
0x1180 (1607);
0x1340 (1703);
0x13C0 (1709);
0x1800
MI_PARTITION_COMMIT Commit;
0x0AA0 (10.0);
0x0C00 (1511 to 1607);
0x0C80 (1703);
0x0D00 (1709);
0x0E40
0x12B8 (10.0);
0x13C0 (1511);
0x1200 (1607);
0x013C0 (1703);
0x1440 (1709);
0x1880
MI_PARTITION_ZEROING Zeroing;
0x0AD0 (10.0);
0x0C40 (1511 to 1607);
0x0CC0 (1703);
0x0D40 (1709);
0x0E80
0x1300 (10.0);
0x1428 (1511);
0x1260 (1607);
0x1420 (1703);
0x14A8 (1709);
0x18E8
MI_PAGE_COMBINING_SUPPORT PageCombine;
0x0BA8 (10.0);
0x0D18 (1511 to 1607);
0x0D98 (1703);
0x0E18 (1709);
0x0F58
0x1488 (10.0);
0x15B0 (1511);
0x13E8 (1607);
0x15A8 (1703);
0x1630 (1709);
0x1A70
PVOID WorkingSetControl;
0x0BAC (10.0);
0x0D1C (1511 to 1607);
0x0D9C (1703);
0x0E1C (1709);
0x0F5C
0x1490 (10.0);
0x15B8 (1511);
0x13F0 (1607);
0x15B0 (1703);
0x1638 (1709);
0x1A78
MM_WORKING_SET_EXPANSION_HEAD WorkingSetExpansionHead;
0x0BC0 (10.0);
0x0D40 (1511 to 1607);
0x0DC0 (1703);
0x0E40 (1709);
0x0F80
0x14C0 (10.0);
0x1600 (1511);
0x1400 (1607);
0x15C0 (1703);
0x1680 (1709);
0x1AC0
MI_VISIBLE_PARTITION Vp;