LOADER_PARAMETER_EXTENSION

The LOADER_PARAMETER_EXTENSION structure is part of the mechanism through which the kernel and HAL learn the initialisation data that was gathered by the loader. It exists only as data that is pointed to from the LOADER_PARAMETER_BLOCK whose address the loader passes to the kernel for the latter’s initialisation.

Variability

The architectural point to having two structures is that the LOADER_PARAMETER_BLOCK should be relatively stable across Windows versions, which indeed it was before Windows 7, but the LOADER_PARAMETER_EXTENSION can vary significantly and often has.

This is not just theoretical. Before version 6.0, the LOADER_PARAMETER_BLOCK really did need to be stable enough that the one NTLDR in the root directory of the bootable partition might load a kernel from a different Windows version, certainly any earlier version if not also any later one. Variability between versions was more for things that the LOADER_PARAMETER_BLOCK points to from its stable offsets. The LOADER_PARAMETER_EXTENSION is one such thing. It may have been a far-sighted allowance or a way to overcome having allowed too little. The version 4.0 LOADER_PARAMETER_BLOCK is known to have defined a Spare1, and earlier versions perhaps had a Spare or Spare0. An expansion of the LOADER_PARAMETER_BLOCK for Windows NT 4.0 SP3 caused compatibility problems with new kernels assuming new information that an old NTLDR did not know to provide. The goal that one NTLDR could load a kernel from a future Windows version was broken. If problems of this sort were not to recur, it may have seemed better that all future variability in what’s pointed to from the LOADER_PARAMETER_BLOCK be wrapped into one LOADER_PARAMETER_EXTENSION. Or so goes my current best attempt at inferring a history. The first loader that is known to create a LOADER_PARAMETER_EXTENSION is from Windows 2000.

Compatibility considerations changed with Windows Vista. It split NTLDR in two. A boot manager, e.g., BOOTMGR, enumerates the installed Windows versions and chooses which to boot. The remaining work is done by a boot loader, e.g., WINLOAD, within the chosen Windows installation. The boot loader should always match the kernel of whatever Windows is being booted. Since it is the boot loader that prepares the LOADER_PARAMETER_BLOCK, considerations for backwards compatibility (in Windows Vista and higher) have essentially disappeared. Subsequent changes are not just from growth at the end: members are removed, changed and inserted without regard for continuity. Especially notable among the changes is that Windows 7 does away with the MajorVersion and MinorVersion—or, if you prefer, moves them to the LOADER_PARAMETER_BLOCK. Within the LOADER_PARAMETER_EXTENSION, all that remains for identifying which version did the preparation is the Size at the start.

It cannot be stressed enough that the LOADER_PARAMETER_EXTENSION, however vital as shared data between the loader, kernel and HAL, is highly variable. Though early versions (before 6.1) change organically, i.e., by adding only to the end so that the Size at the start differentiates the layouts, they change even between builds. The structure is greatly expanded in later versions and successive releases of Windows 10 vary the structure more than ever before, including to insert and delete:

Version Size (x86) Size (x64)
5.0 0x28  
original 5.1 (before SP1) 0x3C  
late 5.1 0x40  
early 5.2 (before SP1) 0x50  
late 5.2 0x58 0x88
6.0 0x7C 0xB8
6.1 0xE8 0x0148
6.2 0x0870 0x0920
6.3 0x08E0 0x0988
10.0 0x0920 0x09E0
1511 0x0930 0x09F0
1607 0x0950 0x0A28
1703 to 1709 0x0B60 0x0C38
1803 0x0B68 0x0C40
1809 0x0C88 0x0D60
1903 0x0CE8 0x0DD0
2004 0x0D00 0x0DF0

Beware that changes within version 5.1 date to Windows XP Service Pack 1. On numerous other pages at this website, the abbreviation “late 5.1” means version 5.1 starting with Windows XP SP2. This is because many advances and fixes that came with the introduction of the amd64 architecture for the version 5.2 from Windows Server 2003 SP1 found their way into the roughly contemporaneous Windows XP SP2. But none of this affected the LOADER_PARAMETER_EXTENSION: its changes for version 5.1 had already happened.

Documentation Status

Microsoft is not known ever to have documented the LOADER_PARAMETER_EXTENSION.

For many years, Microsoft’s names for the LOADER_PARAMETER_EXTENSION and the definitions of its members were known from type information in public symbol files for the kernel (and sometimes also the HAL), though only for occasional Windows versions: first for Windows 2000 SP3 and SP4, and then for all releases of Windows Vista and Windows 7. How the type information gets into the public symbols for some versions but not others is not known.

Windows 10 brought something new. For the original Windows 10 and its 1511 revision, the Windows Driver Kit (WDK) supplies a header file named arc.h which contains a C-language definition of the LOADER_PARAMETER_EXTENSION. This appears to be Microsoft’s first formal disclosure of the structure’s layout. It comes with no conditional compilation blocks for accommodating earlier versions. As supplied, it is immediately useful only for programming that targets a specific release of Windows 10, yet doesn’t say so. Add that the header is beneath a subdirectory named “um”, presumably to mean user-mode, but that the LOADER_PARAMETER_EXTENSION is long gone by the time any user-mode software gets to execute, and one might wonder if this structure’s definition was published by mistake.

Still, published it is. Then, just as that seemed to be the end of disclosure, perhaps forever, Microsoft’s names and types returned to the public symbol files for the kernel in the 1803 release of Windows 10.

Though this apparently continuing provision of type information in symbol files is welcome, it still leaves the historian with some difficulty for versions 5.1 and 5.2, and then for 6.2 and 6.3, and then again for the 1607 to 1709 releases of version 10.0. It turns out that type information is published for these too—well, for most of them—but a little obscurely, being in a statically linked library instead of in symbol files. The library is named CLFSMGMT.LIB. Microsoft distributes it with the Software Development Kit (SDK) for user-mode programming. It has type information for the LOADER_PARAMETER_EXTENSION in 32-bit versions starting with Windows Vista and 64-bit starting with Windows 8. For no reason yet known, this type information is gone from this library in the SDK for Version 2004.

Layout

The following table of offsets, names, types for the LOADER_PARAMETER_EXTENSION is from the published C-language definition in ARC.H for the original and 1511 releases of Windows 10. For other versions, the layout is from type information in public symbols and libraries, if available, as described above. Names, types and offsets for all other versions are something of a guess from assuming continuity except where inspection of the loader or kernel shows that members have come or gone.

Offset (x86) Offset (x64) Definition Versions
0x00 0x00
ULONG Size;
5.0 and higher
0x04 0x04
PROFILE_PARAMETER_BLOCK Profile;
5.0 and higher
0x14 (5.0 to 6.0) 0x14 (5.2 to 6.0)
ULONG MajorVersion;
5.0 to 6.0
0x18 (5.0 to 6.0) 0x18 (5.2 to 6.0)
ULONG MinorVersion;
5.0 to 6.0
0x1C (5.0 to 6.0);
0x14
0x20 (5.2 to 6.0);
0x18
PVOID EmInfFileImage;
5.0 and higher
0x20 (5.0 to 6.0);
0x18
0x28 (5.2 to 6.0);
0x20
ULONG EmInfFileSize;
5.0 and higher
0x24 (5.0 to 6.0);
0x1C
0x30 (5.2 to 6.0);
0x28
PVOID TriageDumpBlock;
5.0 and higher

Appended for Windows XP

Offset (x86) Offset (x64) Definition Versions
0x28 (5.1 to 6.0);
0x20 (6.1)
0x38 (5.2 to 6.0);
0x30 (6.1)
ULONG_PTR LoaderPagesSpanned;
5.1 to 6.1
0x2C (5.1 to 6.0);
0x24 (6.1);
0x20
0x40 (5.2 to 6.0);
0x38 (6.1);
0x30
HEADLESS_LOADER_BLOCK *HeadlessLoaderBlock;
5.1 and higher
0x30 (5.1 to 6.0);
0x28 (6.1);
0x24
0x48 (5.2 to 6.0);
0x40 (6.1);
0x38
SMBIOS_TABLE_HEADER *SMBiosEPSHeader;
5.1 to 6.3
SMBIOS3_TABLE_HEADER *SMBiosEPSHeader;
10.0 and higher
0x34 (5.1 to 6.0);
0x2C (6.1);
0x28
0x50 (5.2 to 6.0);
0x48 (6.1);
0x40
PVOID DrvDBImage;
5.1 and higher
0x38 (5.1 to 6.0);
0x30 (6.1);
0x2C
0x58 (5.2 to 6.0);
0x50 (6.1);
0x48
ULONG DrvDBSize;
5.1 and higher
0x30 0x50
PVOID DrvDBPatchImage;
2004 and higher
0x34 0x58
ULONG DrvDBPatchSize;
2004 and higher
0x3C (late 5.1 to 6.0);
0x34 (6.1);
0x30 (6.2 to 1903);
0x38
0x60 (5.2 to 6.0);
0x58 (6.1);
0x50 (6.2 to 1903);
0x60
NETWORK_LOADER_BLOCK *NetworkLoaderBlock;
late 5.1 and higher

Appended for Windows Server 2003

Offset (x86) Offset (x64) Definition Versions
0x40 (5.2 to 6.0);
0x38 (6.1);
0x34 (6.2 to 1903);
0x3C
 
PUCHAR HalpIRQLToTPR;
5.2 and higher
0x44 (5.2 to 6.0);
0x3C (6.1);
0x38 (6.2 to 1903);
0x40
 
PUCHAR HalpVectorToIRQL;
5.2 and higher
0x48 (5.2 to 6.0);
0x40 (6.1);
0x3C (6.2 to 1903);
0x44
0x68 (5.2 to 6.0);
0x60 (6.1);
0x58 (6.2 to 1903);
0x68
LIST_ENTRY FirmwareDescriptorListHead;
5.2 and higher
0x50 (late 5.2 to 6.0);
0x48 (6.1);
0x44 (6.2 to 1903);
0x4C
0x78 (5.2 to 6.0);
0x70 (6.1);
0x68 (6.2 to 1903);
0x78
PVOID AcpiTable;
late 5.2 and higher
0x54 (late 5.2 to 6.0);
0x4C (6.1);
0x48 (6.2 to 1903);
0x50
0x80 (5.2 to 6.0);
0x78 (6.1);
0x70 (6.2 to 1903);
0x80
ULONG AcpiTableSize;
late 5.2 and higher

Appended for Windows Vista

Offset (x86) Offset (x64) Definition Versions
0x58 (6.0);
0x50 (6.1);
0x4C (6.2 to 1903);
0x54
0x84 (6.0);
0x7C (6.1);
0x74 (6.2 to 1903);
0x84
struct {
    /*  changing bit fields, see below  */
};
6.0 and higher
0x5C (6.0);
0x54 (6.1);
0x50 (6.2 to 1903);
0x58
0x88 (6.0);
0x80 (6.1);
0x78 (6.2 to 1903);
0x88
LOADER_PERFORMANCE_DATA *LoaderPerformanceData;
6.0 to 1803
LOADER_PERFORMANCE_DATA LoaderPerformanceData;
1809 and higher
0x60 (6.0);
0x58 (6.1);
0x54 (6.2 to 1803);
0x98 (1809);
0xB0 (1903);
0xB8
0x90 (6.0);
0x88 (6.1);
0x80 (6.2 to 1803);
0xC0 (1809);
0xD8 (1903);
0xE8
LIST_ENTRY BootApplicationPersistentData;
6.0 and higher
0x68 (6.0);
0x60 (6.1);
0x5C (6.2 to 1803);
0xA0 (1809);
0xB8 (1903);
0xC0
0xA0 (6.0);
0x98 (6.1);
0x90 (6.2 to 1803);
0xD0 (1809);
0xE8 (1903);
0xF8
PVOID WmdTestResult;
6.0 and higher
0x6C (6.0);
0x64 (6.1);
0x60 (6.2 to 1803);
0xA4 (1809);
0xBC (1903);
0xC4
0xA8 (6.0);
0xA0 (6.1);
0x98 (6.2 to 1803);
0xD8 (1809);
0xF0 (1903);
0x0100
GUID BootIdentifier;
6.0 and higher

Appended for Windows 7

Offset (x86) Offset (x64) Definition Versions
0x74 (6.1);
0x70 (6.2 to 1803);
0xB4 (1809);
0xCC (1903);
0xD4
0xB0 (6.1);
0xA8 (6.2 to 1803);
0xE8 (1809);
0x0100 (1903);
0x0110
ULONG ResumePages;
6.1 and higher
0x78 (6.1);
0x74 (6.2 to 1803);
0xB8 (1809);
0xD0 (1903);
0xD8
0xB8 (6.1);
0xB0 (6.2 to 1803);
0xF0 (1809);
0x0108 (1903);
0x0118
PVOID DumpHeader;
6.1 and higher
0x7C (6.1);
0x78 (6.2 to 1803);
0xBC (1809);
0xD4 (1903);
0xDC
0xC0 (6.1);
0xB8 (6.2 to 1803);
0xF8 (1809);
0x0110 (1903);
0x0120
PVOID BgContext;
6.1 and higher
0x80 (6.1);
0x7C (6.2 to 1803);
0xC0 (1809);
0xD8 (1903);
0xE0
0xC8 (6.1);
0xC0 (6.2 to 1803);
0x0100 (1809);
0x0118 (1903);
0x0128
PVOID NumaLocalityInfo;
6.1 and higher
0x84 (6.1);
0x80 (6.2 to 1803);
0xC4 (1809);
0xDC (1903);
0xE4
0xD0 (6.1);
0xC8 (6.2 to 1803);
0x0108 (1809);
0x0120 (1903);
0x0130
PVOID NumaGroupAssignment;
6.1 and higher
0x88 (6.1);
0x84 (6.2 to 1803);
0xC8 (1809);
0xE0 (1903);
0xE8
0xD8 (6.1);
0xD0 (6.2 to 1803);
0x0110 (1809);
0x0128 (1903);
0x0138
LIST_ENTRY AttachedHives;
6.1 and higher
0x90 (6.1);
0x8C (6.2 to 1803);
0xD0 (1809);
0xE8 (1903);
0xF0
0xE8 (6.1);
0xE0 (6.2 to 1803);
0x0120 (1809);
0x0138 (1903);
0x0148
ULONG MemoryCachingRequirementsCount;
6.1 and higher
0x94 (6.1);
0x90 (6.2 to 1803);
0xD4 (1809);
0xEC (1903);
0xF4
0xF0 (6.1);
0xE8 (6.2 to 1803);
0x0128 (1809);
0x0140 (1903);
0x0150
PVOID MemoryCachingRequirements;
6.1 and higher
0x98 (6.1 to 1803);
0xD8 (1809);
0xF0 (1903);
0xF8
0xF8 (6.1);
0xF0 (6.2 to 1803);
0x0130 (1809);
0x0148 (1903);
0x0158
TPM_BOOT_ENTROPY_LDR_RESULT TpmBootEntropyResult;
6.1 only
BOOT_ENTROPY_LDR_RESULT BootEntropyResult;
6.2 and higher
0xE0 (6.1);
0x07A8 (6.2);
0x0810 (6.3 to 1607);
0x0830 (1703 to 1803);
0x0940 (1809);
0x0958 (1903);
0x0960
0x0140 (6.1);
0x0800 (6.2);
0x0868 (6.3 to 1607);
0x0888 (1703 to 1803);
0x0998 (1809);
0x09B0 (1903);
0x09C0
ULONGLONG ProcessorCounterFrequency;
6.1 and higher

Appended for Windows 8

Offset (x86) Offset (x64) Definition Versions
0x07B0 (6.2);
0x0818 (6.3 to 1607);
0x0838 (1703 to 1803);
0x0948 (1809);
0x0960 (1903);
0x0968
0x0808 (6.2);
0x0870 (6.3 to 1607);
0x0890 (1703 to 1803);
0x09A0 (1809);
0x09B8 (1903);
0x09C8
LOADER_PARAMETER_HYPERVISOR_EXTENSION HypervisorExtension;
6.2 and higher
0x07E8 (6.2);
0x0850 (6.3 to 1607);
0x0870 (1703 to 1803);
0x0988 (1809);
0x09A0 (1903);
0x09A8
0x0840 (6.2);
0x08A8 (6.3 to 1607);
0x08C8 (1703 to 1803);
0x09E0 (1809);
0x09F8 (1903);
0x0A08
GUID HardwareConfigurationId;
6.2 and higher
0x07F8 (6.2);
0x0860 (6.3 to 1607);
0x0880 (1703 to 1803);
0x0998 (1809);
0x09B0 (1903);
0x09B8
0x0850 (6.2);
0x08B8 (6.3 to 1607);
0x08D8 (1703 to 1803);
0x09F0 (1809);
0x0A08 (1903);
0x0A18
LIST_ENTRY HalExtensionModuleList;
6.2 and higher
0x0800 (6.2);
0x0868 (6.3 to 1607);
0x0888 (1703 to 1803);
0x09A0 (1809);
0x09B8 (1903);
0x09C0
0x0860 (6.2);
0x08C8 (6.3 to 1607);
0x08E8 (1703 to 1803);
0x0A00 (1809);
0x0A18 (1903);
0x0A28
LARGE_INTEGER SystemTime;
6.2 and higher
0x0808 (6.2);
0x0870 (6.3 to 1607);
0x0890 (1703 to 1803);
0x09A8 (1809);
0x09C0 (1903);
0x09C8
0x0868 (6.2);
0x08D0 (6.3 to 1607);
0x08F0 (1703 to 1803);
0x0A08 (1809);
0x0A20 (1903);
0x0A30
ULONGLONG TimeStampAtSystemTimeRead;
6.2 and higher
0x0810 (6.2);
0x0878 (6.3 to 1607);
0x0898 (1703 to 1803);
0x09B0 (1809);
0x09C8 (1903);
0x09D0
0x0870 (6.2);
0x08D8 (6.3 to 1607);
0x08F8 (1703 to 1803);
0x0A10 (1809);
0x0A28 (1903);
0x0A38
ULONGLONG BootFlags;
6.2 to 1511
union {
    ULONGLONG BootFlags;
    struct {
        /*  changing bit fields, follow link  */
    };
};
1607 and higher
0x0818 (6.2);
0x0880 (6.3 to 1607);
0x08A0 (1703 to 1803);
0x09B8 (1809);
0x09D0 (1903);
0x09D8
0x0878 (6.2);
0x08E0 (6.3 to 1607);
0x0900 (1703 to 1803);
0x0A18 (1809);
0x0A30 (1903);
0x0A40
ULONGLONG InternalBootFlags;
6.2 to 1607
union {
    ULONGLONG InternalBootFlags;
    struct {
        /*  bit fields, follow link  */
    };
};
1703 and higher
0x0820 (6.2);
0x0888 (6.3 to 1607);
0x08A8 (1703 to 1803);
0x09C0 (1809);
0x09D8 (1903);
0x09E0
0x0880 (6.2);
0x08E8 (6.3 to 1607);
0x0908 (1703 to 1803);
0x0A20 (1809);
0x0A38 (1903);
PVOID WfsFPData;
6.2 and higher
0x0824 (6.2);
0x088C (6.3 to 1607);
0x08AC (1703 to 1803);
0x09C4 (1809);
0x09DC (1903);
0x09E4
0x0888 (6.2);
0x08F0 (6.3 to 1607);
0x0910 (1703 to 1803);
0x0A28 (1809);
0x0A40 (1903);
0x0A50
ULONG WfsFPDataSize;
6.2 and higher
0x0828 (6.2);
0x0890 (6.3 to 1607);
0x08B0 (1703 to 1803);
0x09C8 (1809);
0x09E0 (1903);
0x09E8
0x0890 (6.2);
0x08F8 (6.3 to 1607);
0x0918 (1703 to 1803);
0x0A30 (1809);
0x0A48 (1903);
0x0A58
LOADER_PARAMETER_KD_EXTENSION KdExtension;
6.2 only
LOADER_BUGCHECK_PARAMETERS BugcheckParameters;
6.3 and higher
0x08A4 (6.3 to 1607);
0x08C4 (1703 to 1803);
0x09DC (1809);
0x09F4 (1903);
0x09FC
0x0920 (6.3 to 1607);
0x0940 (1703 to 1803);
0x0A58 (1809);
0x0A70 (1903);
0x0A80
PVOID ApiSetSchema;
6.3 and higher
0x08A8 (6.3 to 1607);
0x08C8 (1703 to 1803);
0x09E0 (1809);
0x09F8 (1903);
0x0A00
0x0928 (6.3 to 1607);
0x0948 (1703 to 1803);
0x0A60 (1809);
0x0A78 (1903);
0x0A88
ULONG ApiSetSchemaSize;
6.3 and higher
0x08AC (6.3 to 1607);
0x08CC (1703 to 1803);
0x09E4 (1809);
0x09FC (1903);
0x0A04
0x0930 (6.3 to 1607);
0x0950 (1703 to 1803);
0x0A68 (1809);
0x0A80 (1903);
0x0A90
LIST_ENTRY ApiSetSchemaExtensions;
6.3 and higher
0x0858 (6.2);
0x08B4 (6.3 to 1607);
0x08D4 (1703 to 1803);
0x09EC (1809);
0x0A04 (1903);
0x0A0C 
0x08F0 (6.2);
0x0940 (6.3 to 1607);
0x0960 (1703 to 1803);
0x0A78 (1809);
0x0A90 (1903);
0x0AA0
UNICODE_STRING AcpiBiosVersion;
6.2 and higher
0x0860 (6.2);
0x08BC (6.3 to 1607);
0x08DC (1703 to 1803);
0x09F4 (1809);
0x0A0C (1903);
0x0A14
0x0900 (6.2);
0x0950 (6.3 to 1607);
0x0970 (1703 to 1803);
0x0A88 (1809);
0x0AA0 (1903);
0x0AB0
UNICODE_STRING SmbiosVersion;
6.2 and higher
0x0868 (6.2);
0x08C4 (6.3 to 1607);
0x08E4 (1703 to 1803);
0x09FC (1809);
0x0A14 (1903);
0x0A1C
0x0910 (6.2);
0x0960 (6.3 to 1607);
0x0980 (1703 to 1803);
0x0A98 (1809);
0x0AB0 (1903);
0x0AC0
UNICODE_STRING EfiVersion;
6.2 and higher

Appended for Windows 8.1

Offset (x86) Offset (x64) Definition Versions
0x08CC (6.3 to 1607);
0x08EC (1703 to 1803);
0x0A04 (1809);
0x0A1C (1903);
0x0A24
0x0970 (6.3 to 1607);
0x0990 (1703 to 1803);
0x0AA8 (1809);
0x0AC0 (1903);
0x0AD0
DEBUG_DEVICE_DESCRIPTOR *KdDebugDevice;
6.3 and higher
0x08D0 (6.3 to 1607);
0x08F0 (1703 to 1803);
0x0A08 (1809);
0x0A20 (1903);
0x0A28
0x0978 (6.3 to 1607);
0x0998 (1703 to 1803);
0x0AB0 (1809);
0x0AC8 (1903);
0x0AD8
OFFLINE_CRASHDUMP_CONFIGURATION_TABLE OfflineCrashdumpConfigurationTable;
6.3 and higher

Appended for Windows 10

Offset (x86) Offset (x64) Definition Versions
0x08F0 (10.0 to 1607);
0x0910 (1703 to 1803);
0x0A28 (1809);
0x0A40 (1903);
0x0A48
0x0998 (10.0 to 1607);
0x09B8 (1703 to 1803);
0x0AD0 (1809);
0x0AE8 (1903);
0x0AF8
UNICODE_STRING ManufacturingProfile;
10.0 and higher
0x08F8 (10.0 to 1607);
0x0918 (1703 to 1803);
0x0A30 (1809);
0x0A48 (1903);
0x0A50
0x09A8 (10.0 to 1607);
0x09C8 (1703 to 1803);
0x0AE0 (1809);
0x0AF8 (1903);
0x0B08
PVOID BbtBuffer;
10.0 and higher
0x0900 (10.0 to 1607);
0x0920 (1703 to 1803);
0x0A38 (1809);
0x0A50 (1903);
0x0A58
0x09B0 (10.0 to 1607);
0x09D0 (1703 to 1803);
0x0AE8 (1809);
0x0B00 (1903);
0x0B10
ULONG64 XsaveAllowedFeatures;
10.0 and higher
0x0908 (10.0 to 1607);
0x0928 (1703 to 1803);
0x0A40 (1809);
0x0A58 (1903);
0x0A60
0x09B8 (10.0 to 1607);
0x09D8 (1703 to 1803);
0x0AF0 (1809);
0x0B08 (1903);
0x0B18
ULONG XsaveFlags;
10.0 and higher
0x090C (10.0 to 1607);
0x092C (1703 to 1803);
0x0A44 (1809);
0x0A5C (1903);
0x0A64
0x09C0 (10.0 to 1607);
0x09E0 (1703 to 1803);
0x0AF8 (1809);
0x0B10 (1903);
0x0B20
PVOID BootOptions;
10.0 and higher
0x0910 (1607);
0x0930 (1703 to 1803);
0x0A48 (1809);
0x0A60 (1903);
0x0A68
0x09C8 (1607);
0x09E8 (1703 to 1803);
0x0B00 (1809);
0x0B18 (1903);
0x0B28
ULONG IumEnablement;
1607 and higher
0x914 (1607);
0x0934 (1703 to 1803);
0x0A4C (1809);
0x0A64 (1903);
0x0A6C
0x09CC (1607);
0x09EC (1703 to 1803);
0x0B04 (1809);
0x0B1C (1903);
0x0B2C
ULONG IumPolicy;
1607 and higher
0x918 (1607);
0x0938 (1703 to 1803);
0x0A50 (1809);
0x0A68 (1903);
0x0A70
0x09D0 (1607);
0x09F0 (1703 to 1803);
0x0B08 (1809);
0x0B20 (1903);
0x0B30
NTSTATUS IumStatus;
1607 and higher
0x0910 (10.0 to 1511);
0x091C (1607);
0x093C (1703 to 1803);
0x0A54 (1809);
0x0A6C (1903);
0x0A74
0x09C8 (10.0 to 1511);
0x09D4 (1607);
0x09F4 (1703 to 1803);
0x0B0C (1809);
0x0B24 (1903);
0x0B34
ULONG BootId;
10.0 and higher
0x0914 (10.0 to 1511);
0x0920 (1607);
0x0940 (1703 to 1803);
0x0A58 (1809);
0x0A70 (1903);
0x0A78
0x09D0 (10.0 to 1511);
0x09D8 (1607);
0x09F8 (1703 to 1803);
0x0B10 (1809);
0x0B28 (1903);
0x0B38
LOADER_PARAMETER_CI_EXTENSION *CodeIntegrityData;
10.0 and higher
0x0918 (10.0 to 1511);
0x0924 (1607);
0x0944 (1703 to 1803);
0x0A5C (1809);
0x0A74 (1903);
0x0A7C
0x09D8 (10.0 to 1511);
0x09E0 (1607);
0x0A00 (1703 to 1803);
0x0B18 (1809);
0x0B30 (1903);
0x0B40
ULONG CodeIntegrityDataSize;
10.0 and higher

Appended for Version 1511

Offset (x86) Offset (x64) Definition Versions
0x091C (1511);
0x0928 (1607);
0x0948 (1703 to 1803);
0x0A60 (1809);
0x0A78 (1903);
0x0A80
0x09E0 (1511);
0x09E4 (1607);
0x0A04 (1703 to 1803);
0x0B1C (1809);
0x0B34 (1903);
0x0B44
LOADER_HIVE_RECOVER_INFO SystemHiveRecoveryInfo;
1511 and higher

Appended for Version 1607

Offset (x86) Offset (x64) Definition Versions
0x093C (1607);
0x095C (1703 to 1803);
0x0A74 (1809);
0x0A8C (1903);
0x0A94
0x09F8 (1607);
0x0A18 (1703 to 1803);
0x0B30 (1809);
0x0B48 (1903);
0x0B58
ULONG SoftRestartCount;
1607 and higher
0x0940 (1607);
0x0960 (1703 to 1803);
0x0A78 (1809);
0x0A90 (1903);
0x0A98
0x0A00 (1607);
0x0A20 (1703 to 1803);
0x0B38 (1809);
0x0B50 (1903);
0x0B60
LONGLONG SoftRestartTime;
1607 and higher
  0x0A08 (1607);
0x0A28 (1703 to 1803);
0x0B40 (1809);
0x0B58 (1903);
0x0B68
PVOID HypercallCodeVa;
1607 and higher
  0x0A10 (1607);
0x0A30 (1703 to 1803);
0x0B48 (1809);
0x0B60 (1903);
0x0B70
PVOID HalVirtualAddress;
1607 and higher
  0x0A18 (1607);
0x0A38 (1703 to 1803);
0x0B50 (1809);
0x0B68 (1903);
0x0B78
ULONGLONG HalNumberOfBytes;
1607 and higher
0x0A80 (1809);
0x0A98 (1903);
0x0AA0
0x0B58 (1809);
0x0B70 (1903);
0x0B80
LEAP_SECOND_DATA *LeapSecondData;
1809 and higher
0x0948 (1607);
0x0968 (1703 to 1803);
0x0A84 (1809);
0x0A9C (1903);
0x0AA4
0x0A20 (1607);
0x0A40 (1703 to 1803);
0x0B60 (1809);
0x0B78 (1903);
0x0B88
ULONG MajorRelease;
1607 and higher
0x094C (1607);
0x096C (1703 to 1803);
0x0A88 (1809);
0x0AA0 (1903);
0x0AA8
0x0A24 (1607);
0x0A44 (1703 to 1803);
0x0B64 (1809);
0x0B7C (1903);
0x0B8C
ULONG Reserved1;
1607 and higher

The MajorRelease is an NTDDI version number as defined in the SDKDDKVER.H header. It adds to the kernel’s validation of the LOADER_PARAMETER_EXTENSION for the LOADER_BLOCK_MISMATCH bugcheck. Do not miss the irony that the version numbering that was removed for Windows 7 is brought back, with elaboration, now that Windows 10 makes the extension more variable than ever before.

Appended for Version 1703

Offset (x86) Offset (x64) Definition Versions
0x0970 (1703 to 1803);
0x0A8C (1809);
0x0AA4 (1903);
0x0AAC
0x0A48 (1703 to 1803);
0xB68 (1809);
0x0B80 (1903);
0x0B90
CHAR NtBuildLab [0xE0];
1703 and higher
0x0A50 (1703 to 1803);
0x0B6C (1809);
0x0B84 (1903);
0x0B8C
0x0B28 (1703 to 1803);
0x0C48 (1809);
0x0C60 (1903);
0x0C70
CHAR NtBuildLabEx [0xE0];
1703 and higher
0x0B30 (1703 to 1803);
0x0C50 (1809);
0x0C68 (1903);
0x0C70
0x0C08 (1703 to 1803);
0x0D28 (1809);
0x0D40 (1903);
0x0D50
LOADER_RESET_REASON ResetReason;
1703 and higher

Appended for Version 1803

Offset (x86) Offset (x64) Definition Versions
0x0B60 (1803);
0x0C80 (1809);
0x0C98 (1903);
0x0CA0
0x0C38 (1703 to 1803);
0x0D58 (1809);
0x0D70 (1903);
0x0D80
ULONG MaxPciBusNumber;
1803 and higher

Appended for Version 1809

Offset (x86) Offset (x64) Definition Versions
0x0C84 (1809);
0x0C9C (1903);
0x0CA4
0x0D5C (1809);
0x0D74 (1903);
0x0D84
ULONG FeatureSettings;
1809 and higher

Appended for Version 1903

Offset (x86) Offset (x64) Definition Versions
0x0CA0 (1903);
0x0CA8
0x0D78 (1903);
0x0D88
ULONG HotPatchReserveSize;
1903 and higher
0x0CA4 (1903);
0x0CAC
0x0D7C (1903);
0x0D8C
ULONG RetpolineReserveSize;
1903 and higher
  0x0D80 (1903);
0x0D90
struct {
    PVOID CodeBase;
    ULONGLONG CodeSize;
} MiniExecutive;
1903 and higher
0x0CA8 (1903);
0x0CB0
0x0D90 (1903);
0x0DA0
VSM_PERFORMANCE_DATA VsmPerformanceData;
1903 and higher

Appended for Version 2004

Offset (x86) Offset (x64) Definition Versions
0x0CF0 0x0DE0
NUMA_MEMORY_RANGE *NumaMemoryRanges;
2004 and higher
0x0CF4 0x0DE8
ULONG NumaMemoryRangeCount;
2004 and higher
0x0CF8 0x0DEC
ULONG IommuFaultPolicy;
2004 and higher

Bit Fields

Version 6.0 introduced a single bit-wide flag, then at offsets 0x58 and 0x84, apparently within an anonymous structure. A likely anticipation is that there would soon be more, which indeed there were:

Mask Definition Versions
0x00000001
ULONG BootViaWinload : 1;
6.0 only
ULONG LastBootSucceeded : 1;
6.1 and higher
0x00000002
ULONG LastBootShutdown : 1;
6.1 and higher
0x00000004
ULONG IoPortAccessSupported : 1;
6.1 and higher
0x00000008
ULONG BootDebuggerActive : 1;
6.2 and higher
0x00000010
ULONG StrongCodeGuarantees : 1;
6.3 and higher
0x00000020
ULONG HardStrongCodeGuarantees : 1;
6.3 and higher
0x00000040
ULONG SidSharingDisabled : 1;
6.3 and higher
0x00000080
ULONG TpmInitialized : 1;
10.0 and higher
0x00000100
ULONG VsmConfigured : 1;
10.0 and higher
0x00000200
ULONG IumEnabled : 1;
10.0 and higher
0x00000400
ULONG IsSmbboot : 1;
1511 and higher
0x00000800
ULONG BootLogEnabled : 1;
1607 and higher
0x00001000
ULONG DriverVerifierEnabled : 1;
1809 and higher
0x00002000
ULONG SuppressMonitorX : 1;
1903 and higher
0x00004000
ULONG KernelCetEnabled : 1;
2004 and higher
0x00008000
ULONG SuppressSmap : 1;
2004 and higher
0x0007F000 (1803);
0x001FE000 (1809);
0x001FC000 (1903);
0x001F0000
ULONG FeatureSettings : 7;
1803 only
ULONG Unused : 8;
1809 only
ULONG Unused : 7;
1903 only
ULONG Unused : 5;
2004 and higher
0x01F80000 (1803);
0x07E00000
ULONG FeatureSimulations : 6;
1803 and higher
0x02000000 (1803);
0x08000000
ULONG MicrocodeOptedOut : 1;
1803 only
ULONG MicrocodeSelfHosting : 1;
1809 and higher
0x04000000 (1803);
0x10000000
ULONG XhciLegacyHandoffSkip : 1;
1803 and higher
0x20000000
ULONG DisableInsiderOptInHVCI : 1;
1809 and higher
0x40000000
ULONG MicrocodeMinVerSupported : 1;
1809 and higher
0x80000000
ULONG GpuIommuEnabled : 1;
1809 and higher
 
ULONG Reserved : 31;
6.0 only
ULONG Reserved : 29;
6.1 only
ULONG Reserved : 28;
6.2 only
ULONG Reserved : 25;
6.3 only
ULONG Reserved : 22;
10.0 only
ULONG Reserved : 21;
1511 only
ULONG Reserved : 20;
1607 to 1709
ULONG Reserved : 5;
1803 only