MI_PARTITION_PAGE_LISTS

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.

Variability

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

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 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