Skip to content

Commit 05368ae

Browse files
committed
[FREELDR] Add Windows 7 Boot Support
1 parent f13935b commit 05368ae

File tree

4 files changed

+96
-13
lines changed

4 files changed

+96
-13
lines changed

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

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

107-
PLOADER_PARAMETER_EXTENSION_VISTA Extension;
108-
109107
LoaderBlock = &WinLdrSystemBlock->u1.LoaderBlockVista;
110-
LoaderBlock1 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block1;
111-
LoaderBlock2 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block2;
112-
*SetupBlockPtr = &WinLdrSystemBlock->u1.LoaderBlockVista.SetupLdrBlock;
113108

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);
109+
if (VersionToBoot >= _WIN32_WINNT_WIN7)
110+
{
111+
PLOADER_PARAMETER_EXTENSION_WIN7 Extension;
112+
113+
LoaderBlock1 = &WinLdrSystemBlock->u1.LoaderBlockWin7.Block1;
114+
LoaderBlock2 = &WinLdrSystemBlock->u1.LoaderBlockWin7.Block2;
115+
*SetupBlockPtr = NULL;
116+
117+
/* Initialize the Loader Block Extension */
118+
Extension = &WinLdrSystemBlock->u2.ExtensionWin7;
119+
LoaderBlock2->Extension = (PLOADER_PARAMETER_EXTENSION)Extension;
120+
Extension->Extension1.Size = sizeof(LOADER_PARAMETER_EXTENSION_WIN7);
121+
122+
WinLdrSystemBlock->u1.LoaderBlockWin7.OsMajorVersion = (VersionToBoot & 0xFF00) >> 8;
123+
WinLdrSystemBlock->u1.LoaderBlockWin7.OsMinorVersion = (VersionToBoot & 0xFF);
124+
WinLdrSystemBlock->u1.LoaderBlockWin7.Size = sizeof(LOADER_PARAMETER_BLOCK_WIN7);
125+
126+
Extension1 = &Extension->Extension1;
127+
Extension2 = &Extension->Extension2;
128+
}
129+
else
130+
{
131+
PLOADER_PARAMETER_EXTENSION_VISTA Extension;
132+
133+
LoaderBlock1 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block1;
134+
LoaderBlock2 = &WinLdrSystemBlock->u1.LoaderBlockVista.Block2;
135+
*SetupBlockPtr = &WinLdrSystemBlock->u1.LoaderBlockVista.SetupLdrBlock;
120136

121-
Extension1 = &Extension->Extension1;
122-
Extension2 = &Extension->Extension2;
137+
/* Initialize the Loader Block Extension */
138+
Extension = &WinLdrSystemBlock->u2.ExtensionVista;
139+
Extension->Extension1.Size = sizeof(LOADER_PARAMETER_EXTENSION_VISTA);
140+
LoaderBlock2->Extension = Extension;
141+
Extension->MajorVersion = (VersionToBoot & 0xFF00) >> 8;
142+
Extension->MinorVersion = (VersionToBoot & 0xFF);
143+
144+
Extension1 = &Extension->Extension1;
145+
Extension2 = &Extension->Extension2;
146+
}
123147

124148
LoaderBlock1->NlsData = &WinLdrSystemBlock->NlsDataBlock;
125149

@@ -293,6 +317,12 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK1 LoaderBlock1,
293317

294318
InitializeListHead(&Extension2->BootApplicationPersistentData);
295319
List_PaToVa(&Extension2->BootApplicationPersistentData);
320+
321+
InitializeListHead(&Extension2->AttachedHives);
322+
List_PaToVa(&Extension2->AttachedHives);
323+
324+
Extension2->TpmBootEntropyResult.ResultStatus = STATUS_NOT_IMPLEMENTED;
325+
Extension2->TpmBootEntropyResult.ResultCode = TpmBootEntropyNoTpmFound;
296326
}
297327

298328
#ifdef _M_IX86
@@ -1065,6 +1095,10 @@ LoadAndBootWindows(
10651095
{
10661096
OperatingSystemVersion = _WIN32_WINNT_VISTA;
10671097
}
1098+
else if (_stricmp(ArgValue, "Windows7") == 0)
1099+
{
1100+
OperatingSystemVersion = _WIN32_WINNT_WIN7;
1101+
}
10681102
else
10691103
{
10701104
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 struct _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 struct _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: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,25 @@ typedef struct _LOADER_PERFORMANCE_DATA
382382
ULONGLONG EndTime;
383383
} LOADER_PERFORMANCE_DATA, *PLOADER_PERFORMANCE_DATA;
384384

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

0 commit comments

Comments
 (0)