Geoff Chappell - Software Analyst
The MI_PARTITION_PAGE_LISTS structure (formally _MI_PARTITION_PAGE_LISTS) is here thought to exist only as a subdivision of the MI_PARTITION, specifically as the latter’s PageLists member.
As a collection of what had mostly been internal variables, the MI_PARTITION_PAGE_LISTS 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 | 0x06C0 | 0x0CC0 |
1511 | 0x0780 | 0x0D00 |
1607 | 0x0780 | 0x0B40 |
1703 to 1709 | 0x07C0 | 0x0BC0 |
1803 | 0x0880 | 0x0FC0 |
1809 | 0x0940 | 0x10C0 |
1903 | 0x0AC0 | 0x13C0 |
2004 | 0x0840 | 0x0FC0 |
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 | Remarks |
---|---|---|---|---|
0x00 | 0x00 |
MMPFNLIST *FreePagesByColor [2]; |
10.0 and higher | |
0x08 (10.0 to 1607) | 0x10 (10.0 to 1607) |
SLIST_HEADER *FreePageSlist [2]; |
10.0 to 1607 | next at 0x04D4 and 0x07E8 |
0x40 | 0x40 |
MMPFNLIST ZeroedPageListHead; |
10.0 and higher | |
0x80 | 0x80 |
MMPFNLIST FreePageListHead; |
10.0 and higher | |
0xC0 | 0xC0 |
MMPFNLIST StandbyPageListHead; |
10.0 and higher | |
0x0100 | 0x0100 |
MMPFNLIST StandbyPageListByPriority [8]; |
10.0 and higher | |
0x01C0 | 0x0240 |
MMPFNLIST ModifiedPageListNoReservation; |
10.0 and higher | |
0x0200 | 0x0280 |
MMPFNLIST ModifiedPageListByReservation [0x10]; |
10.0 and higher | |
0x0340 | 0x0500 |
MMPFNLIST MappedPageListHead [0x10]; |
10.0 to 1903 | |
MMPFNLIST MappedPageListHead [4]; |
2004 and higher | |||
0x0480 (10.0 to 1903); 0x03C0 |
0x0780 |
MMPFNLIST BadPageListHead; |
10.0 and higher | |
0x04C0 (10.0 to 1903); 0x0400 |
0x07C0 |
MMPFNLIST EnclavePageListHead; |
1511 and higher | |
0x04D4 (10.0 to 1903); 0x0414 |
0x07E8 |
SLIST_HEADER *FreePageSlist [2]; |
1703 and higher | previously at 0x08 and 0x10 |
0x0494 (10.0); 0x04D4 (1511 to 1607); 0x04DC (1703 to 1903); 0x041C |
0x07A8 (10.0); 0x07E8 (1511 to 1607); 0x07F8 |
MMPFNLIST *PageLocationList [8]; |
10.0 and higher | |
0x04B4 (10.0); 0x04F4 (1511 to 1607); 0x04FC (1703 to 1903); 0x043C |
0x07E8 (10.0); 0x0828 (1511 to 1607); 0x0838 |
ULONG volatile StandbyRepurposedByPriority [8]; |
10.0 and higher | |
0x0540 (1703 to 1903); 0x0480 |
0x0880 |
ULONG_PTR volatile TransitionSharedPages; |
1703 and higher | |
0x0544 (1703 to 1903); 0x0484 |
0x0888 |
ULONG_PTR TransitionSharedPagesPeak [3]; |
1703 to 1709 | |
ULONG_PTR TransitionSharedPagesPeak [6]; |
1803 and higher | |||
0x4D4 (10.0); 0x0514 (1511 to 1607); 0x0550 (1703 to 1709); 0x055C (1803 to 1903); 0x049C |
0x0808 (10.0); 0x0848 (1511 to 1607); 0x08A0 (1703 to 1709); 0x08B8 |
KEVENT MappedPageListHeadEvent [0x10]; |
10.0 to 1903 | |
KEVENT MappedPageListHeadEvent [4]; |
2004 and higher (x86) | |||
KEVENT MappedPageListHeadEvent [0x10]; |
2004 and higher (x64) | |||
0x05D4 (10.0); 0x0614 (1511 to 1607); 0x0650 (1703 to 1709); 0065C (1803 to 1903); 0x04DC |
0x0988 (10.0); 0x09C8 (1511 to 1607); 0x0A20 (1703 to 1709); 0x0A38 |
MI_DECAY_TIMER_LINK DecayClusterTimerHeads [4]; |
10.0 and higher | |
0x05E4 (10.0); 0x0624 (1511 to 1607); 0x0660 (1703 to 1709); 0x066C (1803 to 1903); 0x04EC |
0x09A8 (10.0); 0x09E8 (1511 to 1607); 0x0A40 (1703 to 1709); 0x0A58 |
ULONG DecayHand; |
10.0 and higher | |
0x0664 (1703 to 1709); 0x0670 (1803 to 1903); 0x04F0 |
0x0A44 (1703 to 1709); 0x0A5C |
BOOLEAN StandbyListDiscard; |
1703 and higher | previously as ULONG at 0x0704 and 0x0AC8 |
0x0665 (1703 to 1709); 0x0671 (1803 to 1903); 0x04F1 |
0x0A45 (1703 to 1709); 0x0A5D |
BOOLEAN FreeListDiscard; |
1703 and higher | previously at 0x0708 and 0x0ACC |
0x0666 (1703 to 1709); 0x0672 (1803 to 1903); 0x04F2 |
0x0A46 (1703 to 1709); 0x0A5E |
BOOLEAN LargePfnBitMapsReady; |
1703 to 1803 | previously at 0x0710 and 0x0AD8 |
BOOLEAN PfnBitMapsReady; |
1809 and higher | |||
0x05E8 (10.0); 0x0628 (1511 to 1607); 0x0668 (1703 to 1709); 0x0678 (1803 to 1903); 0x04F8 |
0x09B0 (10.0); 0x09F0 (1511 to 1607); 0x0A48 (1703 to 1709); 0x0A60 |
ULONGLONG LastDecayHandUpdateTime; |
10.0 and higher | |
0x05F0 (10.0); 0x0630 (1511 to 1607); 0x0670 (1703 to 1709); 0x0680 (1803 to 1903); 0x0500 |
0x09B8 (10.0); 0x09F8 (1511 to 1607); 0x0A50 (1703 to 1709); 0x0A68 |
MI_LDW_WORK_CONTEXT LastChangeLdwContext; |
10.0 and higher | |
0x0640 (10.0); 0x0680 (1511 to 1607); 0x06C0 (1703 to 1903); 0x0540 |
0x0A00 (10.0); 0x0A40 (1511 to 1607); 0x0AC0 |
ULONG_PTR AvailableEventsLock; |
10.0 and higher | |
0x0644 (10.0); 0x0684 (1511 to 1607); 0x06C4 (1703 to 1903); 0x0544 |
0x0A08 (10.0); 0x0A48 (1511 to 1607); 0x0AC8 |
MI_AVAILABLE_PAGE_WAIT_STATES AvailablePageWaitStates [2]; |
10.0 only | |
MI_AVAILABLE_PAGE_WAIT_STATES AvailablePageWaitStates [3]; |
1511 and higher | |||
0x0700 (1703 to 1903); 0x0580 |
0x0B28 |
PVOID MirrorListLocks; |
1703 and higher | previously at 0x070C and 0x0AD0 |
0x066C (10.0); 0x06C0 (1511 to 1607) |
0x0A48 (10.0); 0x0AA8 (1511 to 1607) |
ULONG_PTR LowMemoryThreshold; |
10.0 to 1607 | next at 0x074C and 0x0B68 |
0x0670 (10.0); 0x06C4 (1511 to 1607) |
0x0A50 (10.0); 0x0AB0 (1511 to 1607) |
ULONG_PTR HighMemoryThreshold; |
10.0 to 1607 | next at 0x0750 and 0x0B6C |
0x0680 (10.0); 0x0700 (1511 to 1607); 0x0740 (1703 to 1903); 0x05C0 |
0x0A80 (10.0); 0x0AC0 (1511 to 1607); 0x0B40 |
ULONG_PTR volatile TransitionPrivatePages; |
10.0 and higher | |
0x0704 (1511 to 1607) | 0x0AC8 (1511 to 1607) |
ULONG StandbyListDiscard; |
1511 to 1607 | next as BOOLEAN at 0x0664 and 0x0A44 |
0x0708 (1511 to 1607) | 0x0ACC (1511 to 1607) |
BOOLEAN FreeListDiscard; |
1511 to 1607 | next at 0x0665 and 0x0A45 |
0x0684 (10.0); 0x0709 (1511) |
0x0A88 (10.0); 0x0ACD (1511) |
BOOLEAN RebuildLargePagesInitialized; |
10.0 to 1511 | |
0x0688 (10.0); 0x070C (1511) |
0x0A90 (10.0); 0x0AD0 (1511) |
MI_REBUILD_LARGE_PAGES RebuildLargePagesItem; |
10.0 to 1511 | |
0x0740 (1511); 0x070C (1607) |
0x0CF8 (1511); 0x0AD0 (1607) |
PVOID MirrorListLocks; |
1511 to 1607 | next at 0x0700 and 0x0B28 |
0x0710 (1607) | 0x0AD8 (1607) |
BOOLEAN LargePfnBitMapsReady; |
1607 only | next at 0x0666 and 0x0A46 |
0x0714 (1607); 0x0744 (1703 to 1903); 0x05C4 |
0x0AE0 (1607); 0x0B48 |
RTL_BITMAP LargePfnBitMap [1]; |
1607 and higher (x86) | |
RTL_BITMAP LargePfnBitMap [2]; |
1607 and higher (x64) | |||
0x074C (1803 to 1903); 0x05CC |
0x0B68 |
MI_FREE_LARGE_PAGE_LIST *LargePageListHeads; |
1803 and higher | |
0x0750 (1803 to 1903) | 0x0B70 (1803 to 1903) |
MI_LARGE_PAGE_CANDIDATES LargePageCandidate [1]; |
1803 to 1903 | |
0x0858 (1803 to 1903) | 0x0F80 (1803 to 1903) |
WORK_QUEUE_ITEM RebuildLargePageWorkItem; |
1803 to 1903 | |
0x0868 (1803 to 1903) | 0x0FA0 (1803 to 1903) |
BOOLEAN RebuildLargePageActive; |
1803 to 1903 | |
0x086C (1803 to 1903) | 0x0FA4 (1803 to 1903) |
LONG volatile LargePageRebuildLock; |
1803 to 1903 | |
0x05D0 | 0x0B70 |
UCHAR *MediumPagesOnFreeZeroList; |
2004 and higher | |
0x05D4 | 0x0B78 |
RTL_BITMAP LargePageRebuildCandidates; |
2004 and higher | |
0x0B88 |
wchar_t *LargePagesOnFreeZeroList; |
2004 and higher | ||
0x0B90 |
LONGLONG volatile HugePageRebuildCandiatesExist; |
2004 and higher | ||
0x05DC | 0x0B98 |
KEVENT LargePageCandidatesExistEvent; |
2004 and higher | |
0x074C (1703 to 1709); 0x0870 (1803 to 1903); 0x05EC |
0x0B68 (1703 to 1709); 0x0FA8 (1803 to 1903); 0x0BB0 |
ULONG_PTR LowMemoryThreshold; |
1703 and higher | previously at 0x06C0 and 0x0A48 |
0x0750 (1703 to 1709); 0x0874 (1803 to 1903); 0x05F0 |
0x0B70 (1703 to 1709); 0x0FB0 (1803 to 1903); 0x0BB8 |
ULONG_PTR HighMemoryThreshold; |
1703 and higher | previously at 0x06C4 and 0x0A50 |
0x0740 (1607); 0x0780 (1703 to 1709) |
0x0B00 (1607); 0x0B80 (1703 to 1709) |
ULONG LargePfnBitMapLock; |
1607 to 1709 | |
0x0878 (1809 to 1903); 0x05F8 |
0x0FB8 (1809 to 1903); 0x0BC0 |
MI_SLAB_ALLOCATOR_CONTEXT SlabContexts [3]; |
1809 only | |
MI_SLAB_ALLOCATOR_CONTEXT SlabContexts [2][4]; |
1903 and higher | |||
0x0908 (1809); 0x0AB8 (1903); 0x0838 |
0x1090 (1809); 0x1378 (1903); 0x0F80 |
RTL_BITMAP SlabPfnBitMap; |
1809 and higher | |
0x1388 (1903); 0x0F90 |
PVOID HugePfnLists; |
1903 and higher | ||
0x1390 (1903); 0x0F98 |
ULONGLONG AvailableHugeIoRanges; |
1903 and higher |