Skip to content

Commit f5c9631

Browse files
committed
[FREELDR] Add Windows 7 Boot Support
1 parent 345341e commit f5c9631

File tree

5 files changed

+97
-12
lines changed

5 files changed

+97
-12
lines changed

boot/freeldr/freeldr/arch/archwsup.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ AddReactOSArcDiskInfo(
8787
reactos_arc_disk_info[reactos_disk_count].DiskSignature.Signature = Signature;
8888
reactos_arc_disk_info[reactos_disk_count].DiskSignature.CheckSum = Checksum;
8989
reactos_arc_disk_info[reactos_disk_count].DiskSignature.ValidPartitionTable = ValidPartitionTable;
90+
reactos_arc_disk_info[reactos_disk_count].DiskSignature.Unknown = NULL;
9091

9192
strcpy(reactos_arc_disk_info[reactos_disk_count].ArcName, ArcName);
9293
reactos_arc_disk_info[reactos_disk_count].DiskSignature.ArcName =

boot/freeldr/freeldr/bootmgr.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ OSLoadingMethods[] =
6868
{"Windows" , EditCustomBootNTOS, LoadAndBootWindows},
6969
{"Windows2003" , EditCustomBootNTOS, LoadAndBootWindows},
7070
{"WindowsVista", EditCustomBootNTOS, LoadAndBootWindows},
71+
{"Windows7", EditCustomBootNTOS, LoadAndBootWindows},
7172
};
7273

7374
/* FUNCTIONS ******************************************************************/

boot/freeldr/freeldr/ntldr/winldr.c

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -104,20 +104,44 @@ AllocateAndInitLPB(
104104

105105
WinLdrSystemBlock->OsVersion = VersionToBoot;
106106

107-
LoaderBlock = &WinLdrSystemBlock->u1.LoaderBlockVista;
108-
LoaderBlock1 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block1;
109-
LoaderBlock2 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block2;
110-
*SetupBlockPtr = &WinLdrSystemBlock->u1.LoaderBlockVista.SetupLdrBlock;
107+
if (VersionToBoot >= _WIN32_WINNT_WIN7)
108+
{
109+
PLOADER_PARAMETER_EXTENSION_WIN7 Extension;
110+
111+
LoaderBlock1 = &WinLdrSystemBlock->u1.LoaderBlockWin7.Block1;
112+
LoaderBlock2 = &WinLdrSystemBlock->u1.LoaderBlockWin7.Block2;
113+
*SetupBlockPtr = NULL;
111114

112-
/* Initialize the Loader Block Extension */
113-
Extension = &WinLdrSystemBlock->u2.ExtensionVista;
114-
Extension->Extension1.Size = sizeof(LOADER_PARAMETER_EXTENSION_VISTA);
115-
LoaderBlock2->Extension = Extension;
116-
Extension->MajorVersion = (VersionToBoot & 0xFF00) >> 8;
117-
Extension->MinorVersion = (VersionToBoot & 0xFF);
115+
/* Initialize the Loader Block Extension */
116+
Extension = &WinLdrSystemBlock->u2.ExtensionWin7;
117+
Extension->Extension1.Size = sizeof(LOADER_PARAMETER_EXTENSION_WIN7);
118+
LoaderBlock2->Extension = Extension;
119+
120+
WinLdrSystemBlock->u1.LoaderBlockWin7.OsMajorVersion = (VersionToBoot & 0xFF00) >> 8;
121+
WinLdrSystemBlock->u1.LoaderBlockWin7.OsMinorVersion = (VersionToBoot & 0xFF);
122+
WinLdrSystemBlock->u1.LoaderBlockWin7.Size = sizeof(LOADER_PARAMETER_BLOCK_WIN7);
123+
124+
Extension1 = &Extension->Extension1;
125+
Extension2 = &Extension->Extension2;
126+
}
127+
else
128+
{
129+
PLOADER_PARAMETER_EXTENSION_VISTA Extension;
118130

119-
Extension1 = &Extension->Extension1;
120-
Extension2 = &Extension->Extension2;
131+
LoaderBlock1 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block1;
132+
LoaderBlock2 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block2;
133+
*SetupBlockPtr = &WinLdrSystemBlock->u1.LoaderBlockVista.SetupLdrBlock;
134+
135+
/* Initialize the Loader Block Extension */
136+
Extension = &WinLdrSystemBlock->u2.ExtensionVista;
137+
Extension->Extension1.Size = sizeof(LOADER_PARAMETER_EXTENSION_VISTA);
138+
LoaderBlock2->Extension = Extension;
139+
Extension->MajorVersion = (VersionToBoot & 0xFF00) >> 8;
140+
Extension->MinorVersion = (VersionToBoot & 0xFF);
141+
142+
Extension1 = &Extension->Extension1;
143+
Extension2 = &Extension->Extension2;
144+
}
121145

122146
LoaderBlock1->NlsData = &WinLdrSystemBlock->NlsDataBlock;
123147

@@ -310,6 +334,12 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK1 LoaderBlock1,
310334

311335
InitializeListHead(&Extension2->BootApplicationPersistentData);
312336
List_PaToVa(&Extension2->BootApplicationPersistentData);
337+
338+
InitializeListHead(&Extension2->AttachedHives);
339+
List_PaToVa(&Extension2->AttachedHives);
340+
341+
Extension2->TpmBootEntropyResult.ResultCode = TpmBootEntropyNoTpmFound;
342+
Extension2->TpmBootEntropyResult.ResultStatus = STATUS_NOT_IMPLEMENTED;
313343
}
314344

315345
#ifdef _M_IX86
@@ -1082,6 +1112,10 @@ LoadAndBootWindows(
10821112
{
10831113
OperatingSystemVersion = _WIN32_WINNT_VISTA;
10841114
}
1115+
else if (_stricmp(ArgValue, "Windows7") == 0)
1116+
{
1117+
OperatingSystemVersion = _WIN32_WINNT_WIN7;
1118+
}
10851119
else
10861120
{
10871121
ERR("Unknown 'BootType' value '%s', aborting!\n", ArgValue);

boot/freeldr/freeldr/ntldr/winldr.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,16 @@ typedef struct _LOADER_PARAMETER_BLOCK_VISTA
8686
LOADER_PARAMETER_BLOCK2 Block2;
8787
} LOADER_PARAMETER_BLOCK_VISTA, *PLOADER_PARAMETER_BLOCK_VISTA;
8888

89+
typedef struct _LOADER_PARAMETER_BLOCK_WIN7
90+
{
91+
ULONG OsMajorVersion;
92+
ULONG OsMinorVersion;
93+
ULONG Size;
94+
ULONG Reserved;
95+
LOADER_PARAMETER_BLOCK1 Block1;
96+
LOADER_PARAMETER_BLOCK2 Block2;
97+
} LOADER_PARAMETER_BLOCK_WIN7, *PLOADER_PARAMETER_BLOCK_WIN7;
98+
8999
typedef struct _LOADER_PARAMETER_EXTENSION1
90100
{
91101
ULONG Size;
@@ -136,6 +146,17 @@ typedef struct _LOADER_PARAMETER_EXTENSION2
136146
//
137147
ULONG ResumePages;
138148
PVOID DumpHeader;
149+
//
150+
// NT 6.1
151+
//
152+
PVOID BgContext;
153+
PVOID NumaLocalityInfo;
154+
PVOID NumaGroupAssignment;
155+
LIST_ENTRY AttachedHives;
156+
ULONG MemoryCachingRequirementsCount;
157+
PVOID MemoryCachingRequirements;
158+
TPM_BOOT_ENTROPY_LDR_RESULT TpmBootEntropyResult;
159+
ULONGLONG ProcessorCounterFrequency;
139160
} LOADER_PARAMETER_EXTENSION2, *PLOADER_PARAMETER_EXTENSION2;
140161

141162
typedef struct _LOADER_PARAMETER_EXTENSION_VISTA
@@ -146,16 +167,24 @@ typedef struct _LOADER_PARAMETER_EXTENSION_VISTA
146167
LOADER_PARAMETER_EXTENSION2 Extension2;
147168
} LOADER_PARAMETER_EXTENSION_VISTA, *PLOADER_PARAMETER_EXTENSION_VISTA;
148169

170+
typedef struct _LOADER_PARAMETER_EXTENSION_WIN7
171+
{
172+
LOADER_PARAMETER_EXTENSION1 Extension1;
173+
LOADER_PARAMETER_EXTENSION2 Extension2;
174+
} LOADER_PARAMETER_EXTENSION_WIN7, *PLOADER_PARAMETER_EXTENSION_WIN7;
175+
149176
#pragma pack(pop)
150177

151178
typedef union _LOADER_SYSTEM_U1
152179
{
153180
LOADER_PARAMETER_BLOCK_VISTA LoaderBlockVista;
181+
LOADER_PARAMETER_BLOCK_WIN7 LoaderBlockWin7;
154182
} LOADER_SYSTEM_U1, *PLOADER_SYSTEM_U1;
155183

156184
typedef union _LOADER_SYSTEM_U2
157185
{
158186
LOADER_PARAMETER_EXTENSION_VISTA ExtensionVista;
187+
LOADER_PARAMETER_EXTENSION_WIN7 ExtensionWin7;
159188
} LOADER_SYSTEM_U2, *PLOADER_SYSTEM_U2;
160189

161190
typedef struct _LOADER_SYSTEM_BLOCK

sdk/include/reactos/arc/arc.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ typedef struct _ARC_DISK_SIGNATURE
261261
BOOLEAN IsGpt;
262262
BOOLEAN Reserved;
263263
CHAR GptSignature[16];
264+
PVOID Unknown;
264265
} ARC_DISK_SIGNATURE, *PARC_DISK_SIGNATURE;
265266

266267
typedef struct _ARC_DISK_INFORMATION
@@ -382,6 +383,25 @@ typedef struct _LOADER_PERFORMANCE_DATA
382383
ULONGLONG EndTime;
383384
} LOADER_PERFORMANCE_DATA, *PLOADER_PERFORMANCE_DATA;
384385

386+
typedef enum _TPM_BOOT_ENTROPY_RESULT_CODE
387+
{
388+
TpmBootEntropyStructureUninitialized = 0,
389+
TpmBootEntropyDisabledByPolicy = 1,
390+
TpmBootEntropyNoTpmFound = 2,
391+
TpmBootEntropyTpmError = 3,
392+
TpmBootEntropySuccess = 4
393+
} TPM_BOOT_ENTROPY_RESULT_CODE;
394+
395+
typedef struct _TPM_BOOT_ENTROPY_LDR_RESULT
396+
{
397+
ULONGLONG Policy;
398+
TPM_BOOT_ENTROPY_RESULT_CODE ResultCode;
399+
LONG ResultStatus;
400+
ULONGLONG Time;
401+
ULONG EntropyLength;
402+
UCHAR EntropyData[40];
403+
} TPM_BOOT_ENTROPY_LDR_RESULT, *PTPM_BOOT_ENTROPY_LDR_RESULT;
404+
385405
//
386406
// Extended Loader Parameter Block
387407
//

0 commit comments

Comments
 (0)