MMPFNLIST_SHORT

For each physical page that’s in general use, the kernel keeps one MMPFN structure. Pages can be put into lists. The MMPFNLIST_SHORT is a reduction of the MMPFNLIST to serve as the head for lists of pages that belong to the same NUMA node.

The MMPFNLIST_SHORT structure is 0x18 bytes in all releases yet inspected of 64-bit Windows 10.

Offset (x64) Definition Versions
0x00
ULONGLONG Total;
10.0 and higher
0x08
PFN_NUMBER Flink;
10.0 and higher
0x10
PFN_NUMBER Blink;
10.0 and higher

The kernel keeps all MMPFN structures in an array that is indexed by the Page Frame Number (PFN) of the corresponding pages of physical memory. For each page that’s in a list for a NUMA node, the MMPFN has what are here termed NodeFlink and NodeBlink members set to the PFN of the next and previous page, respectively, or to the terminating value 0x0000000F`FFFFFFFF if the page is at the tail or head.

These terms NodeFlink and NodeBlink are invented here as abstractions. Their 36 bits are in parts according to where space could be found for them. The high 28 and 20 bits of the forward and backward links, as NodeFlinkHigh and NodeBlinkHigh respectively, are packed into the qwords whose low 36 bits are the Flink and Blink. The low 8 and 16 bits, as NodeFlinkLow and NodeBlinkLow, are a full byte and word as direct MMPFN members.