@@ -80,6 +80,8 @@ AllocateAndInitLPB(
8080{
8181 PLOADER_PARAMETER_BLOCK LoaderBlock ;
8282 PLOADER_PARAMETER_EXTENSION Extension ;
83+ PLOADER_PARAMETER_BLOCK_WIN7 LoaderBlock_WIN7 ;
84+ PLOADER_PARAMETER_EXTENSION_WIN7 Extension_WIN7 ;
8385
8486 /* Allocate and zero-init the Loader Parameter Block */
8587 WinLdrSystemBlock = MmAllocateMemoryWithType (sizeof (LOADER_SYSTEM_BLOCK ),
@@ -107,6 +109,16 @@ AllocateAndInitLPB(
107109 InitializeListHead (& LoaderBlock -> MemoryDescriptorListHead );
108110 InitializeListHead (& LoaderBlock -> BootDriverListHead );
109111
112+ LoaderBlock_WIN7 = & WinLdrSystemBlock -> LoaderBlock .NT6_1 ;
113+ Extension_WIN7 = & WinLdrSystemBlock -> Extension .NT6_1 ;
114+
115+ LoaderBlock_WIN7 -> Size = sizeof (LOADER_PARAMETER_BLOCK_WIN7 );
116+ LoaderBlock_WIN7 -> Extension = Extension_WIN7 ;
117+
118+ Extension_WIN7 -> TpmBootEntropyResult .ResultStatus = STATUS_NOT_IMPLEMENTED ;
119+ Extension_WIN7 -> TpmBootEntropyResult .ResultCode = TpmBootEntropyNoTpmFound ;
120+ Extension_WIN7 -> Size = sizeof (LOADER_PARAMETER_EXTENSION_WIN7 );
121+
110122 * OutLoaderBlock = LoaderBlock ;
111123}
112124
@@ -263,6 +275,9 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
263275 List_PaToVa (& Extension -> BootApplicationPersistentData );
264276 }
265277
278+ InitializeListHead (& LoaderBlock -> NT6_1 .Extension -> AttachedHives );
279+ List_PaToVa (& LoaderBlock -> NT6_1 .Extension -> AttachedHives );
280+
266281#ifdef _M_IX86
267282 /* Set headless block pointer */
268283 if (WinLdrTerminalConnected )
@@ -281,8 +296,12 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
281296 & Extension -> DrvDBSize ,
282297 LoaderRegistryData ));
283298
299+ if (LoaderBlock -> NT6_1 .Extension -> BgContext )
300+ LoaderBlock -> NT6_1 .Extension -> BgContext = PaToVa (LoaderBlock -> NT6_1 .Extension -> BgContext );
301+
284302 /* Convert the extension block pointer */
285303 LoaderBlock -> Extension = PaToVa (LoaderBlock -> Extension );
304+ LoaderBlock -> NT6_1 .Extension = PaToVa (LoaderBlock -> NT6_1 .Extension );
286305
287306 TRACE ("WinLdrInitializePhase1() completed\n" );
288307}
@@ -1015,6 +1034,10 @@ LoadAndBootWindows(
10151034 {
10161035 OperatingSystemVersion = _WIN32_WINNT_VISTA ;
10171036 }
1037+ else if (_stricmp (ArgValue , "Windows7" ) == 0 )
1038+ {
1039+ OperatingSystemVersion = _WIN32_WINNT_WIN7 ;
1040+ }
10181041 else
10191042 {
10201043 ERR ("Unknown 'BootType' value '%s', aborting!\n" , ArgValue );
@@ -1175,6 +1198,7 @@ LoadAndBootWindowsCommon(
11751198 IN PCSTR BootOptions ,
11761199 IN PCSTR BootPath )
11771200{
1201+ PLOADER_PARAMETER_EXTENSION ExtensionVA = PaToVa (LoaderBlock -> Extension );
11781202 PLOADER_PARAMETER_BLOCK LoaderBlockVA ;
11791203 BOOLEAN Success ;
11801204 PLDR_DATA_TABLE_ENTRY KernelDTE ;
@@ -1264,7 +1288,60 @@ LoadAndBootWindowsCommon(
12641288 WinLdrSetProcessorContext (OperatingSystemVersion );
12651289
12661290 /* Save final value of LoaderPagesSpanned */
1267- LoaderBlock -> Extension -> LoaderPagesSpanned = MmGetLoaderPagesSpanned ();
1291+ LoaderBlockVA -> Extension -> LoaderPagesSpanned = MmGetLoaderPagesSpanned ();
1292+
1293+ if (OperatingSystemVersion >= _WIN32_WINNT_WIN7 )
1294+ {
1295+ PLOADER_PARAMETER_BLOCK_WIN7 LoaderBlock_WIN7 = & LoaderBlockVA -> NT6_1 ;
1296+ PLOADER_PARAMETER_EXTENSION_WIN7 Extension_WIN7 = LoaderBlockVA -> NT6_1 .Extension ;
1297+
1298+ LoaderBlock_WIN7 -> OsMajorVersion = ExtensionVA -> MajorVersion ;
1299+ LoaderBlock_WIN7 -> OsMinorVersion = ExtensionVA -> MinorVersion ;
1300+ LoaderBlock_WIN7 -> LoadOrderListHead = LoaderBlockVA -> LoadOrderListHead ;
1301+ LoaderBlock_WIN7 -> MemoryDescriptorListHead = LoaderBlockVA -> MemoryDescriptorListHead ;
1302+ LoaderBlock_WIN7 -> BootDriverListHead = LoaderBlockVA -> BootDriverListHead ;
1303+ LoaderBlock_WIN7 -> KernelStack = LoaderBlockVA -> KernelStack ;
1304+ LoaderBlock_WIN7 -> Prcb = LoaderBlockVA -> Prcb ;
1305+ LoaderBlock_WIN7 -> Process = LoaderBlockVA -> Process ;
1306+ LoaderBlock_WIN7 -> Thread = LoaderBlockVA -> Thread ;
1307+ LoaderBlock_WIN7 -> RegistryLength = LoaderBlockVA -> RegistryLength ;
1308+ LoaderBlock_WIN7 -> RegistryBase = LoaderBlockVA -> RegistryBase ;
1309+ LoaderBlock_WIN7 -> ConfigurationRoot = LoaderBlockVA -> ConfigurationRoot ;
1310+ LoaderBlock_WIN7 -> ArcBootDeviceName = LoaderBlockVA -> ArcBootDeviceName ;
1311+ LoaderBlock_WIN7 -> ArcHalDeviceName = LoaderBlockVA -> ArcHalDeviceName ;
1312+ LoaderBlock_WIN7 -> NtBootPathName = LoaderBlockVA -> NtBootPathName ;
1313+ LoaderBlock_WIN7 -> NtHalPathName = LoaderBlockVA -> NtHalPathName ;
1314+ LoaderBlock_WIN7 -> LoadOptions = LoaderBlockVA -> LoadOptions ;
1315+ LoaderBlock_WIN7 -> NlsData = LoaderBlockVA -> NlsData ;
1316+ LoaderBlock_WIN7 -> ArcDiskInformation = LoaderBlockVA -> ArcDiskInformation ;
1317+ LoaderBlock_WIN7 -> OemFontFile = LoaderBlockVA -> OemFontFile ;
1318+ RtlCopyMemory (& LoaderBlock_WIN7 -> u , & LoaderBlockVA -> u , sizeof (LoaderBlockVA -> u ));
1319+ LoaderBlock_WIN7 -> FirmwareInformation = LoaderBlockVA -> FirmwareInformation ;
1320+
1321+ Extension_WIN7 -> Profile = ExtensionVA -> Profile ;
1322+ Extension_WIN7 -> EmInfFileImage = ExtensionVA -> EmInfFileImage ;
1323+ Extension_WIN7 -> EmInfFileSize = ExtensionVA -> EmInfFileSize ;
1324+ Extension_WIN7 -> TriageDumpBlock = ExtensionVA -> TriageDumpBlock ;
1325+ Extension_WIN7 -> LoaderPagesSpanned = ExtensionVA -> LoaderPagesSpanned ;
1326+ Extension_WIN7 -> HeadlessLoaderBlock = ExtensionVA -> HeadlessLoaderBlock ;
1327+ Extension_WIN7 -> SMBiosEPSHeader = ExtensionVA -> SMBiosEPSHeader ;
1328+ Extension_WIN7 -> DrvDBImage = ExtensionVA -> DrvDBImage ;
1329+ Extension_WIN7 -> DrvDBSize = ExtensionVA -> DrvDBSize ;
1330+ Extension_WIN7 -> NetworkLoaderBlock = ExtensionVA -> NetworkLoaderBlock ;
1331+ #ifdef _X86_
1332+ Extension_WIN7 -> HalpIRQLToTPR = ExtensionVA -> HalpIRQLToTPR ;
1333+ Extension_WIN7 -> HalpVectorToIRQL = ExtensionVA -> HalpVectorToIRQL ;
1334+ #endif
1335+ Extension_WIN7 -> FirmwareDescriptorListHead = ExtensionVA -> FirmwareDescriptorListHead ;
1336+ Extension_WIN7 -> AcpiTable = ExtensionVA -> AcpiTable ;
1337+ Extension_WIN7 -> AcpiTableSize = ExtensionVA -> AcpiTableSize ;
1338+ Extension_WIN7 -> LoaderPerformanceData = ExtensionVA -> LoaderPerformanceData ;
1339+ Extension_WIN7 -> BootApplicationPersistentData = ExtensionVA -> BootApplicationPersistentData ;
1340+ Extension_WIN7 -> WmdTestResult = ExtensionVA -> WmdTestResult ;
1341+ Extension_WIN7 -> BootIdentifier = ExtensionVA -> BootIdentifier ;
1342+ Extension_WIN7 -> ResumePages = ExtensionVA -> ResumePages ;
1343+ Extension_WIN7 -> DumpHeader = ExtensionVA -> DumpHeader ;
1344+ }
12681345
12691346 TRACE ("Hello from paged mode, KiSystemStartup %p, LoaderBlockVA %p!\n" ,
12701347 KiSystemStartup , LoaderBlockVA );
@@ -1278,6 +1355,11 @@ LoadAndBootWindowsCommon(
12781355 WinLdrpDumpArcDisks (LoaderBlockVA );
12791356#endif
12801357
1358+ if (OperatingSystemVersion >= _WIN32_WINNT_WIN7 )
1359+ LoaderBlockVA = (PLOADER_PARAMETER_BLOCK )& LoaderBlockVA -> NT6_1 ;
1360+
1361+ TRACE ("Bye Freeldr!\n" );
1362+
12811363 /* Pass control */
12821364 (* KiSystemStartup )(LoaderBlockVA );
12831365
0 commit comments