[SDK] Update loader parameter block structure definitions to Windows 10 RTM (#8236)

Mostly based on the information on Geoff Chappell's website, Vergilius Project and WDK 10.0.10586.0
This commit is contained in:
Adam Słaboń
2025-10-04 16:11:00 +02:00
committed by GitHub
parent 5a86857637
commit 5187834463

View File

@@ -315,6 +315,20 @@ typedef struct _SMBIOS_TABLE_HEADER
UCHAR Revision; UCHAR Revision;
} SMBIOS_TABLE_HEADER, *PSMBIOS_TABLE_HEADER; } SMBIOS_TABLE_HEADER, *PSMBIOS_TABLE_HEADER;
typedef struct _SMBIOS3_TABLE_HEADER
{
UCHAR Signature[5];
UCHAR Checksum;
UCHAR Length;
UCHAR MajorVersion;
UCHAR MinorVersion;
UCHAR Docrev;
UCHAR EntryPointRevision;
UCHAR Reserved;
ULONG StructureTableMaximumSize;
ULONGLONG StructureTableAddress;
} SMBIOS3_TABLE_HEADER, *PSMBIOS3_TABLE_HEADER;
// //
// NLS Data Block // NLS Data Block
// //
@@ -382,6 +396,102 @@ typedef struct _LOADER_PERFORMANCE_DATA
ULONGLONG EndTime; ULONGLONG EndTime;
} LOADER_PERFORMANCE_DATA, *PLOADER_PERFORMANCE_DATA; } LOADER_PERFORMANCE_DATA, *PLOADER_PERFORMANCE_DATA;
typedef enum _TPM_BOOT_ENTROPY_RESULT_CODE
{
TpmBootEntropyStructureUninitialized = 0,
TpmBootEntropyDisabledByPolicy = 1,
TpmBootEntropyNoTpmFound = 2,
TpmBootEntropyTpmError = 3,
TpmBootEntropySuccess = 4
} TPM_BOOT_ENTROPY_RESULT_CODE, *PTPM_BOOT_ENTROPY_RESULT_CODE;
typedef struct _TPM_BOOT_ENTROPY_LDR_RESULT
{
ULONGLONG Policy;
TPM_BOOT_ENTROPY_RESULT_CODE ResultCode;
LONG ResultStatus;
ULONGLONG Time;
ULONG EntropyLength;
UCHAR EntropyData[40];
} TPM_BOOT_ENTROPY_LDR_RESULT, *PTPM_BOOT_ENTROPY_LDR_RESULT;
typedef enum _BOOT_ENTROPY_SOURCE_RESULT_CODE
{
BootEntropySourceStructureUninitialized = 0,
BootEntropySourceDisabledByPolicy = 1,
BootEntropySourceNotPresent = 2,
BootEntropySourceError = 3,
BootEntropySourceSuccess = 4,
} BOOT_ENTROPY_SOURCE_RESULT_CODE, *PBOOT_ENTROPY_SOURCE_RESULT_CODE;
typedef enum _BOOT_ENTROPY_SOURCE_ID
{
BootEntropySourceNone = 0,
BootEntropySourceSeedfile = 1,
BootEntropySourceExternal = 2,
BootEntropySourceTpm = 3,
BootEntropySourceRdrand = 4,
BootEntropySourceTime = 5,
BootEntropySourceAcpiOem0 = 6,
BootEntropySourceUefi = 7,
BootEntropySourceCng = 8,
BootMaxEntropySources = 8,
} BOOT_ENTROPY_SOURCE_ID, *PBOOT_ENTROPY_SOURCE_ID;
typedef struct _BOOT_ENTROPY_SOURCE_LDR_RESULT
{
BOOT_ENTROPY_SOURCE_ID SourceId;
ULONGLONG Policy;
BOOT_ENTROPY_SOURCE_RESULT_CODE ResultCode;
NTSTATUS ResultStatus;
ULONGLONG Time;
ULONG EntropyLength;
UCHAR EntropyData[64];
} BOOT_ENTROPY_SOURCE_LDR_RESULT, *PBOOT_ENTROPY_SOURCE_LDR_RESULT;
typedef struct _BOOT_ENTROPY_LDR_RESULT
{
ULONG maxEntropySources;
BOOT_ENTROPY_SOURCE_LDR_RESULT EntropySourceResult[BootMaxEntropySources];
UCHAR SeedBytesForCng[48];
UCHAR RngBytesForNtoskrnl[1024];
} BOOT_ENTROPY_LDR_RESULT, *PBOOT_ENTROPY_LDR_RESULT;
typedef struct _LOADER_PARAMETER_HYPERVISOR_EXTENSION
{
ULONG HypervisorCrashdumpAreaPageCount;
ULONGLONG HypervisorCrashdumpAreaSpa;
ULONGLONG HypervisorLaunchStatus;
ULONGLONG HypervisorLaunchStatusArg1;
ULONGLONG HypervisorLaunchStatusArg2;
ULONGLONG HypervisorLaunchStatusArg3;
ULONGLONG HypervisorLaunchStatusArg4;
} LOADER_PARAMETER_HYPERVISOR_EXTENSION, *PLOADER_PARAMETER_HYPERVISOR_EXTENSION;
typedef struct _LOADER_BUGCHECK_PARAMETERS
{
ULONG BugcheckCode;
ULONG_PTR BugcheckParameter1;
ULONG_PTR BugcheckParameter2;
ULONG_PTR BugcheckParameter3;
ULONG_PTR BugcheckParameter4;
} LOADER_BUGCHECK_PARAMETERS, *PLOADER_BUGCHECK_PARAMETERS;
typedef struct _OFFLINE_CRASHDUMP_CONFIGURATION_TABLE
{
ULONG Version;
ULONG AbnormalResetOccurred;
ULONG OfflineMemoryDumpCapable;
} OFFLINE_CRASHDUMP_CONFIGURATION_TABLE, *POFFLINE_CRASHDUMP_CONFIGURATION_TABLE;
typedef struct _LOADER_PARAMETER_CI_EXTENSION
{
ULONG RevocationListOffset;
ULONG RevocationListSize;
_Field_size_bytes_(RevocationListSize)
UCHAR SerializedData[ANYSIZE_ARRAY];
} LOADER_PARAMETER_CI_EXTENSION, *PLOADER_PARAMETER_CI_EXTENSION;
// //
// Extended Loader Parameter Block // Extended Loader Parameter Block
// //
@@ -392,47 +502,134 @@ typedef struct _LOADER_PARAMETER_EXTENSION
{ {
ULONG Size; ULONG Size;
PROFILE_PARAMETER_BLOCK Profile; PROFILE_PARAMETER_BLOCK Profile;
ULONG MajorVersion; /* Not anymore present starting NT 6.1 */ #if (NTDDI_VERSION < NTDDI_WIN7)
ULONG MinorVersion; /* Not anymore present starting NT 6.1 */ ULONG MajorVersion;
ULONG MinorVersion;
#endif
PVOID EmInfFileImage; PVOID EmInfFileImage;
ULONG EmInfFileSize; ULONG EmInfFileSize;
PVOID TriageDumpBlock; PVOID TriageDumpBlock;
// #if (NTDDI_VERSION >= NTDDI_WINXP)
// NT 5.1 #if (NTDDI_VERSION < NTDDI_WIN8)
// ULONG_PTR LoaderPagesSpanned;
ULONG_PTR LoaderPagesSpanned; /* Not anymore present starting NT 6.2 */ #endif
PHEADLESS_LOADER_BLOCK HeadlessLoaderBlock; PHEADLESS_LOADER_BLOCK HeadlessLoaderBlock;
#if (NTDDI_VERSION < NTDDI_WIN10)
PSMBIOS_TABLE_HEADER SMBiosEPSHeader; PSMBIOS_TABLE_HEADER SMBiosEPSHeader;
#else
PSMBIOS3_TABLE_HEADER SMBiosEPSHeader;
#endif
PVOID DrvDBImage; PVOID DrvDBImage;
ULONG DrvDBSize; ULONG DrvDBSize;
#endif
#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
PNETWORK_LOADER_BLOCK NetworkLoaderBlock; PNETWORK_LOADER_BLOCK NetworkLoaderBlock;
// #endif
// NT 5.2+ #if (NTDDI_VERSION >= NTDDI_WS03)
//
#ifdef _X86_ #ifdef _X86_
PUCHAR HalpIRQLToTPR; PUCHAR HalpIRQLToTPR;
PUCHAR HalpVectorToIRQL; PUCHAR HalpVectorToIRQL;
#endif #endif
LIST_ENTRY FirmwareDescriptorListHead; LIST_ENTRY FirmwareDescriptorListHead;
#endif
#if (NTDDI_VERSION >= NTDDI_WS03SP1)
PVOID AcpiTable; PVOID AcpiTable;
ULONG AcpiTableSize; ULONG AcpiTableSize;
// #endif
// NT 5.2 SP1+
//
/** NT-version-dependent flags **/ /** NT-version-dependent flags **/
#if (OSVER(NTDDI_VERSION) == NTDDI_LONGHORN)
ULONG BootViaWinload:1;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN7)
ULONG LastBootSucceeded:1;
ULONG LastBootShutdown:1;
ULONG IoPortAccessSupported:1;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN8)
ULONG BootDebuggerActive:1;
#endif
#if (NTDDI_VERSION >= NTDDI_WINBLUE)
ULONG StrongCodeGuarantees:1;
ULONG HardStrongCodeGuarantees:1;
ULONG SidSharingDisabled:1;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN10)
ULONG TpmInitialized:1;
ULONG VsmConfigured:1;
ULONG IumEnabled:1;
#endif
#if (OSVER(NTDDI_VERSION) == NTDDI_LONGHORN)
ULONG Reserved:31;
#elif (NTDDI_VERSION == NTDDI_WIN7)
ULONG Reserved:29;
#elif (NTDDI_VERSION == NTDDI_WIN8)
ULONG Reserved:28;
#elif (NTDDI_VERSION == NTDDI_WINBLUE)
ULONG Reserved:25;
#elif (NTDDI_VERSION == NTDDI_WIN10)
ULONG Reserved:22;
#elif defined(__REACTOS__)
ULONG BootViaWinload:1; ULONG BootViaWinload:1;
ULONG BootViaEFI:1; ULONG BootViaEFI:1;
ULONG Reserved:30; ULONG Reserved:30;
#endif
/********************************/ /********************************/
PLOADER_PERFORMANCE_DATA LoaderPerformanceData; PLOADER_PERFORMANCE_DATA LoaderPerformanceData;
LIST_ENTRY BootApplicationPersistentData; LIST_ENTRY BootApplicationPersistentData;
PVOID WmdTestResult; PVOID WmdTestResult;
GUID BootIdentifier; GUID BootIdentifier;
// #if (NTDDI_VERSION >= NTDDI_WIN7)
// NT 6
//
ULONG ResumePages; ULONG ResumePages;
PVOID DumpHeader; PVOID DumpHeader;
PVOID BgContext;
PVOID NumaLocalityInfo;
PVOID NumaGroupAssignment;
LIST_ENTRY AttachedHives;
ULONG MemoryCachingRequirementsCount;
PVOID MemoryCachingRequirements;
#if (NTDDI_VERSION < NTDDI_WIN8)
TPM_BOOT_ENTROPY_LDR_RESULT TpmBootEntropyResult;
#else
BOOT_ENTROPY_LDR_RESULT BootEntropyResult;
#endif
ULONGLONG ProcessorCounterFrequency;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN8)
LOADER_PARAMETER_HYPERVISOR_EXTENSION HypervisorExtension;
GUID HardwareConfigurationId;
LIST_ENTRY HalExtensionModuleList;
LARGE_INTEGER SystemTime;
ULONGLONG TimeStampAtSystemTimeRead;
ULONGLONG BootFlags;
ULONGLONG InternalBootFlags;
PVOID WfsFPData;
ULONG WfsFPDataSize;
#if (NTDDI_VERSION < NTDDI_WINBLUE)
PVOID KdExtension[12]; //LOADER_PARAMETER_KD_EXTENSION KdExtension;
#else
LOADER_BUGCHECK_PARAMETERS BugcheckParameters;
PVOID ApiSetSchema;
ULONG ApiSetSchemaSize;
LIST_ENTRY ApiSetSchemaExtensions;
#endif
UNICODE_STRING AcpiBiosVersion;
UNICODE_STRING SmbiosVersion;
UNICODE_STRING EfiVersion;
#endif
#if (NTDDI_VERSION >= NTDDI_WINBLUE)
DEBUG_DEVICE_DESCRIPTOR *KdDebugDevice;
OFFLINE_CRASHDUMP_CONFIGURATION_TABLE OfflineCrashdumpConfigurationTable;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN10)
UNICODE_STRING ManufacturingProfile;
PVOID BbtBuffer;
ULONG64 XsaveAllowedFeatures;
ULONG XsaveFlags;
PVOID BootOptions;
ULONG BootId;
LOADER_PARAMETER_CI_EXTENSION *CodeIntegrityData;
ULONG CodeIntegrityDataSize;
#endif
} LOADER_PARAMETER_EXTENSION, *PLOADER_PARAMETER_EXTENSION; } LOADER_PARAMETER_EXTENSION, *PLOADER_PARAMETER_EXTENSION;
// //
@@ -511,6 +708,14 @@ typedef struct _EFI_FIRMWARE_INFORMATION
PVIRTUAL_EFI_RUNTIME_SERVICES VirtualEfiRuntimeServices; PVIRTUAL_EFI_RUNTIME_SERVICES VirtualEfiRuntimeServices;
ULONG SetVirtualAddressMapStatus; ULONG SetVirtualAddressMapStatus;
ULONG MissedMappingsCount; ULONG MissedMappingsCount;
#if (NTDDI_VERSION >= NTDDI_WIN8)
LIST_ENTRY FirmwareResourceList;
#endif
#if (NTDDI_VERSION >= NTDDI_WINBLUE)
PVOID EfiMemoryMap;
ULONG EfiMemoryMapSize;
ULONG EfiMemoryMapDescriptorSize;
#endif
} EFI_FIRMWARE_INFORMATION, *PEFI_FIRMWARE_INFORMATION; } EFI_FIRMWARE_INFORMATION, *PEFI_FIRMWARE_INFORMATION;
typedef struct _PCAT_FIRMWARE_INFORMATION typedef struct _PCAT_FIRMWARE_INFORMATION
@@ -521,7 +726,14 @@ typedef struct _PCAT_FIRMWARE_INFORMATION
typedef struct _FIRMWARE_INFORMATION_LOADER_BLOCK typedef struct _FIRMWARE_INFORMATION_LOADER_BLOCK
{ {
ULONG FirmwareTypeEfi:1; ULONG FirmwareTypeEfi:1;
#if (NTDDI_VERSION < NTDDI_WIN10)
ULONG Reserved:31; ULONG Reserved:31;
#else
ULONG EfiRuntimeUseIum:1;
ULONG EfiRuntimePageProtectionEnabled:1;
ULONG EfiRuntimePageProtectionSupported:1;
ULONG Reserved:28;
#endif
union union
{ {
EFI_FIRMWARE_INFORMATION EfiInformation; EFI_FIRMWARE_INFORMATION EfiInformation;
@@ -537,13 +749,30 @@ typedef struct _FIRMWARE_INFORMATION_LOADER_BLOCK
// //
typedef struct _LOADER_PARAMETER_BLOCK typedef struct _LOADER_PARAMETER_BLOCK
{ {
#if (NTDDI_VERSION >= NTDDI_WIN7)
ULONG OsMajorVersion;
ULONG OsMinorVersion;
ULONG Size;
ULONG Reserved;
#endif
LIST_ENTRY LoadOrderListHead; LIST_ENTRY LoadOrderListHead;
LIST_ENTRY MemoryDescriptorListHead; LIST_ENTRY MemoryDescriptorListHead;
LIST_ENTRY BootDriverListHead; LIST_ENTRY BootDriverListHead;
#if (NTDDI_VERSION >= NTDDI_WIN8)
LIST_ENTRY EarlyLaunchListHead;
LIST_ENTRY CoreDriverListHead;
#endif
#if (NTDDI_VERSION >= NTDDI_WIN10)
LIST_ENTRY CoreExtensionsDriverListHead;
LIST_ENTRY TpmCoreDriverListHead;
#endif
ULONG_PTR KernelStack; ULONG_PTR KernelStack;
ULONG_PTR Prcb; ULONG_PTR Prcb;
ULONG_PTR Process; ULONG_PTR Process;
ULONG_PTR Thread; ULONG_PTR Thread;
#if (NTDDI_VERSION >= NTDDI_WIN8)
ULONG KernelStackSize;
#endif
ULONG RegistryLength; ULONG RegistryLength;
PVOID RegistryBase; PVOID RegistryBase;
PCONFIGURATION_COMPONENT_DATA ConfigurationRoot; PCONFIGURATION_COMPONENT_DATA ConfigurationRoot;
@@ -554,9 +783,17 @@ typedef struct _LOADER_PARAMETER_BLOCK
PSTR LoadOptions; PSTR LoadOptions;
PNLS_DATA_BLOCK NlsData; PNLS_DATA_BLOCK NlsData;
PARC_DISK_INFORMATION ArcDiskInformation; PARC_DISK_INFORMATION ArcDiskInformation;
#if (NTDDI_VERSION < NTDDI_WIN8)
PVOID OemFontFile; PVOID OemFontFile;
#endif
#if (NTDDI_VERSION < NTDDI_WIN7)
struct _SETUP_LOADER_BLOCK *SetupLdrBlock; struct _SETUP_LOADER_BLOCK *SetupLdrBlock;
#endif
#if (NTDDI_VERSION < NTDDI_WIN2K)
ULONG Spare1;
#else
PLOADER_PARAMETER_EXTENSION Extension; PLOADER_PARAMETER_EXTENSION Extension;
#endif
union union
{ {
I386_LOADER_BLOCK I386; I386_LOADER_BLOCK I386;
@@ -565,7 +802,9 @@ typedef struct _LOADER_PARAMETER_BLOCK
PPC_LOADER_BLOCK PowerPC; PPC_LOADER_BLOCK PowerPC;
ARM_LOADER_BLOCK Arm; ARM_LOADER_BLOCK Arm;
} u; } u;
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
FIRMWARE_INFORMATION_LOADER_BLOCK FirmwareInformation; FIRMWARE_INFORMATION_LOADER_BLOCK FirmwareInformation;
#endif
} LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK; } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
typedef int CONFIGTYPE; typedef int CONFIGTYPE;