Skip to content

Commit 9faaf23

Browse files
committed
[FREELDR] Add Windows 7 Boot Support
1 parent 863fe4a commit 9faaf23

File tree

5 files changed

+96
-13
lines changed

5 files changed

+96
-13
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: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -104,22 +104,44 @@ AllocateAndInitLPB(
104104

105105
LoaderBlock = &WinLdrSystemBlock->u1.LoaderBlockVista;
106106

107-
PLOADER_PARAMETER_EXTENSION_VISTA Extension;
107+
if (VersionToBoot >= _WIN32_WINNT_WIN7)
108+
{
109+
PLOADER_PARAMETER_EXTENSION_WIN7 Extension;
108110

109-
LoaderBlock = &WinLdrSystemBlock->u1.LoaderBlockVista;
110-
LoaderBlock1 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block1;
111-
LoaderBlock2 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block2;
112-
*SetupBlockPtr = &WinLdrSystemBlock->u1.LoaderBlockVista.SetupLdrBlock;
111+
LoaderBlock1 = &WinLdrSystemBlock->u1.LoaderBlockWin7.Block1;
112+
LoaderBlock2 = &WinLdrSystemBlock->u1.LoaderBlockWin7.Block2;
113+
*SetupBlockPtr = NULL;
114+
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;
130+
131+
LoaderBlock1 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block1;
132+
LoaderBlock2 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block2;
133+
*SetupBlockPtr = &WinLdrSystemBlock->u1.LoaderBlockVista.SetupLdrBlock;
113134

114-
/* Initialize the Loader Block Extension */
115-
Extension = &WinLdrSystemBlock->u2.ExtensionVista;
116-
Extension->Extension1.Size = sizeof(LOADER_PARAMETER_EXTENSION_VISTA);
117-
LoaderBlock2->Extension = Extension;
118-
Extension->MajorVersion = (VersionToBoot & 0xFF00) >> 8;
119-
Extension->MinorVersion = (VersionToBoot & 0xFF);
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);
120141

121-
Extension1 = &Extension->Extension1;
122-
Extension2 = &Extension->Extension2;
142+
Extension1 = &Extension->Extension1;
143+
Extension2 = &Extension->Extension2;
144+
}
123145

124146
LoaderBlock1->NlsData = &WinLdrSystemBlock->NlsDataBlock;
125147

@@ -293,6 +315,12 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK1 LoaderBlock1,
293315

294316
InitializeListHead(&Extension2->BootApplicationPersistentData);
295317
List_PaToVa(&Extension2->BootApplicationPersistentData);
318+
319+
InitializeListHead(&Extension2->AttachedHives);
320+
List_PaToVa(&Extension2->AttachedHives);
321+
322+
Extension2->TpmBootEntropyResult.ResultCode = TpmBootEntropyNoTpmFound;
323+
Extension2->TpmBootEntropyResult.ResultStatus = STATUS_NOT_IMPLEMENTED;
296324
}
297325

298326
#ifdef _M_IX86
@@ -1065,6 +1093,10 @@ LoadAndBootWindows(
10651093
{
10661094
OperatingSystemVersion = _WIN32_WINNT_VISTA;
10671095
}
1096+
else if (_stricmp(ArgValue, "Windows7") == 0)
1097+
{
1098+
OperatingSystemVersion = _WIN32_WINNT_WIN7;
1099+
}
10681100
else
10691101
{
10701102
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)