From 5187834463ceef7d34de43c55dde4ad0fc51ae7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20S=C5=82abo=C5=84?= Date: Sat, 4 Oct 2025 16:11:00 +0200 Subject: [PATCH] [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 --- sdk/include/reactos/arc/arc.h | 269 ++++++++++++++++++++++++++++++++-- 1 file changed, 254 insertions(+), 15 deletions(-) diff --git a/sdk/include/reactos/arc/arc.h b/sdk/include/reactos/arc/arc.h index 0d3db518c70..585fd79f45a 100644 --- a/sdk/include/reactos/arc/arc.h +++ b/sdk/include/reactos/arc/arc.h @@ -315,6 +315,20 @@ typedef struct _SMBIOS_TABLE_HEADER UCHAR Revision; } 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 // @@ -382,6 +396,102 @@ typedef struct _LOADER_PERFORMANCE_DATA ULONGLONG EndTime; } 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 // @@ -392,47 +502,134 @@ typedef struct _LOADER_PARAMETER_EXTENSION { ULONG Size; PROFILE_PARAMETER_BLOCK Profile; - ULONG MajorVersion; /* Not anymore present starting NT 6.1 */ - ULONG MinorVersion; /* Not anymore present starting NT 6.1 */ +#if (NTDDI_VERSION < NTDDI_WIN7) + ULONG MajorVersion; + ULONG MinorVersion; +#endif PVOID EmInfFileImage; ULONG EmInfFileSize; PVOID TriageDumpBlock; - // - // NT 5.1 - // - ULONG_PTR LoaderPagesSpanned; /* Not anymore present starting NT 6.2 */ +#if (NTDDI_VERSION >= NTDDI_WINXP) +#if (NTDDI_VERSION < NTDDI_WIN8) + ULONG_PTR LoaderPagesSpanned; +#endif PHEADLESS_LOADER_BLOCK HeadlessLoaderBlock; +#if (NTDDI_VERSION < NTDDI_WIN10) PSMBIOS_TABLE_HEADER SMBiosEPSHeader; +#else + PSMBIOS3_TABLE_HEADER SMBiosEPSHeader; +#endif PVOID DrvDBImage; ULONG DrvDBSize; +#endif +#if (NTDDI_VERSION >= NTDDI_WINXPSP1) PNETWORK_LOADER_BLOCK NetworkLoaderBlock; - // - // NT 5.2+ - // +#endif +#if (NTDDI_VERSION >= NTDDI_WS03) #ifdef _X86_ PUCHAR HalpIRQLToTPR; PUCHAR HalpVectorToIRQL; #endif LIST_ENTRY FirmwareDescriptorListHead; +#endif +#if (NTDDI_VERSION >= NTDDI_WS03SP1) PVOID AcpiTable; ULONG AcpiTableSize; - // - // NT 5.2 SP1+ - // +#endif /** 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 BootViaEFI:1; ULONG Reserved:30; +#endif /********************************/ PLOADER_PERFORMANCE_DATA LoaderPerformanceData; LIST_ENTRY BootApplicationPersistentData; PVOID WmdTestResult; GUID BootIdentifier; - // - // NT 6 - // +#if (NTDDI_VERSION >= NTDDI_WIN7) ULONG ResumePages; 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; // @@ -511,6 +708,14 @@ typedef struct _EFI_FIRMWARE_INFORMATION PVIRTUAL_EFI_RUNTIME_SERVICES VirtualEfiRuntimeServices; ULONG SetVirtualAddressMapStatus; 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; typedef struct _PCAT_FIRMWARE_INFORMATION @@ -521,7 +726,14 @@ typedef struct _PCAT_FIRMWARE_INFORMATION typedef struct _FIRMWARE_INFORMATION_LOADER_BLOCK { ULONG FirmwareTypeEfi:1; +#if (NTDDI_VERSION < NTDDI_WIN10) ULONG Reserved:31; +#else + ULONG EfiRuntimeUseIum:1; + ULONG EfiRuntimePageProtectionEnabled:1; + ULONG EfiRuntimePageProtectionSupported:1; + ULONG Reserved:28; +#endif union { EFI_FIRMWARE_INFORMATION EfiInformation; @@ -537,13 +749,30 @@ typedef struct _FIRMWARE_INFORMATION_LOADER_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 MemoryDescriptorListHead; 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 Prcb; ULONG_PTR Process; ULONG_PTR Thread; +#if (NTDDI_VERSION >= NTDDI_WIN8) + ULONG KernelStackSize; +#endif ULONG RegistryLength; PVOID RegistryBase; PCONFIGURATION_COMPONENT_DATA ConfigurationRoot; @@ -554,9 +783,17 @@ typedef struct _LOADER_PARAMETER_BLOCK PSTR LoadOptions; PNLS_DATA_BLOCK NlsData; PARC_DISK_INFORMATION ArcDiskInformation; +#if (NTDDI_VERSION < NTDDI_WIN8) PVOID OemFontFile; +#endif +#if (NTDDI_VERSION < NTDDI_WIN7) struct _SETUP_LOADER_BLOCK *SetupLdrBlock; +#endif +#if (NTDDI_VERSION < NTDDI_WIN2K) + ULONG Spare1; +#else PLOADER_PARAMETER_EXTENSION Extension; +#endif union { I386_LOADER_BLOCK I386; @@ -565,7 +802,9 @@ typedef struct _LOADER_PARAMETER_BLOCK PPC_LOADER_BLOCK PowerPC; ARM_LOADER_BLOCK Arm; } u; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) FIRMWARE_INFORMATION_LOADER_BLOCK FirmwareInformation; +#endif } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK; typedef int CONFIGTYPE;