Geoff Chappell - Software Analyst
As a feature of the Memory Manager, a memory partition is represented by the MI_PARTITION structure (formally _MI_PARTITION). 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 of the relevant 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.
The MI_PARTITION structure is unsurprisingly treated as if it is no less internal than when many of its members were internal variables. 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 |
1809 | 0x1C40 | 0x2DC0 |
1903 | 0x1DC0 | 0x30C0 |
2004 | 0x1B40 | 0x2D00 |
It happens, however, that all change from one build to the next is in the many substructures, not in the direct members, until an insertion for Version 1903.
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 |
MI_PARTITION_CORE Core; |
10.0 and higher |
0xE8 (10.0); 0xB8 (1511); 0xC0 (1607); 0xF8 (1703); 0xE8 |
0x0168 (10.0); 0x0158 (1511); 0x0160 (1607); 0x01C8 (1703); 0x01A8 (1709 to 1809); 0x01B0 (1903); 0x01B8 |
MI_PARTITION_MODWRITES Modwriter; |
10.0 and higher |
0x0298 (10.0); 0x0288 (1511); 0x0290 (1607); 0x02C8 (1703); 0x02B0 (1709); 0x02B8 |
0x0410 (10.0); 0x0430 (1511 to 1607); 0x04A0 (1703); 0x0470 (1709 to 1903); 0x0480 |
MI_PARTITION_STORES Store; |
10.0 and higher |
0x02E8 (10.0); 0x0300 (1511 to 1607); 0x0340 |
0x0490 (10.0); 0x04C0 (1511 to 1607); 0x0540 (1703); 0x0500 (1709 to 1903); 0x0540 |
MI_PARTITION_SEGMENTS Segments; |
10.0 and higher |
0x03C0 (10.0); 0x0400 (1511 to 1607); 0x0440 (1703); 0x04C0 (1709); 0x0540 |
0x05C0 (10.0); 0x0640 (1511 to 1607); 0x0780 (1703); 0x0800 (1709); 0x0840 (1803 to 1903); 0x0880 |
MI_PARTITION_PAGE_LISTS PageLists; |
10.0 and higher |
0x0A80 (10.0); 0x0B80 (1511 to 1607); 0x0C00 (1703); 0x0C80 (1709); 0x0DC0 (1803); 0x0E80 (1809); 0x1000 (1903); 0x0D80 |
0x1280 (10.0); 0x1340 (1511); 0x1180 (1607); 0x1340 (1703); 0x13C0 (1709); 0x1800 (1803); 0x1900 (1809); 0x1C00 (1903); 0x1840 |
MI_PARTITION_COMMIT Commit; |
10.0 and higher |
0x0AA0 (10.0); 0x0C00 (1511 to 1607); 0x0C80 (1703); 0x0D00 (1709); 0x0E40 (1803); 0x0F00 (1809); 0x1080 (1903); 0x0DA4 |
0x12B8 (10.0); 0x13C0 (1511); 0x1200 (1607); 0x013C0 (1703); 0x1440 (1709); 0x1880 (1803); 0x1980 (1809); 0x1C80 (1903); 0x1880 |
MI_PARTITION_ZEROING Zeroing; |
10.0 and higher |
0x0AD0 (10.0); 0x0C40 (1511 to 1607); 0x0CC0 (1703); 0x0D40 (1709); 0x0E80 (1803); 0x0F40 (1809); 0x10C0 (1903); 0x0E18 |
0x1300 (10.0); 0x1428 (1511); 0x1260 (1607); 0x1420 (1703); 0x14A8 (1709); 0x18E8 (1803); 0x19E8 (1809); 0x1CE8 (1903); 0x1930 |
MI_PAGE_COMBINING_SUPPORT PageCombine; |
10.0 and higher |
0x0BA8 (10.0); 0x0D18 (1511 to 1607); 0x0D98 (1703); 0x0E18 (1709); 0x0F58 (1803); 0x1018 (1809); 0x11A0 (1903); 0x0EF8 |
0x1488 (10.0); 0x15B0 (1511); 0x13E8 (1607); 0x15A8 (1703); 0x1630 (1709); 0x1A70 (1803); 0x1B70 (1809); 0x1E78 (1903); 0x1AC0 |
PVOID WorkingSetControl; |
10.0 and higher |
0x0BAC (10.0); 0x0D1C (1511 to 1607); 0x0D9C (1703); 0x0E1C (1709); 0x0F5C (1803); 0x101C (1809); 0x11A4 (1903); 0x0EFC |
0x1490 (10.0); 0x15B8 (1511); 0x13F0 (1607); 0x15B0 (1703); 0x1638 (1709); 0x1A78 (1803); 0x1B78 (1809); 0x1E80 (1903); 0x1AC8 |
MM_WORKING_SET_EXPANSION_HEAD WorkingSetExpansionHead; |
10.0 and higher |
0x11AC (1903); 0x0F04 |
0x1E90 (1903); 0x1AD8 |
ULONG SessionDetachTimeStamp; |
1903 and higher |
0x0BC0 (10.0); 0x0D40 (1511 to 1607); 0x0DC0 (1703); 0x0E40 (1709); 0x0F80 (1803); 0x1040 (1809); 0x11C0 (1903); 0x0F40 |
0x14C0 (10.0); 0x1600 (1511); 0x1400 (1607); 0x15C0 (1703); 0x1680 (1709); 0x1AC0 (1803); 0x1BC0 (1809); 0x1EC0 (1903); 0x1B00 |
MI_VISIBLE_PARTITION Vp; |
10.0 and higher |