@@ -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 );
0 commit comments