@@ -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 -> Extension2 .TpmBootEntropyResult .ResultStatus = STATUS_NOT_IMPLEMENTED ;
119+ Extension_WIN7 -> Extension2 .TpmBootEntropyResult .ResultCode = TpmBootEntropyNoTpmFound ;
120+ Extension_WIN7 -> Extension1 .Size = sizeof (LOADER_PARAMETER_EXTENSION_WIN7 );
121+
110122 * OutLoaderBlock = LoaderBlock ;
111123}
112124
@@ -133,6 +145,7 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
133145 ULONG i ;
134146 ULONG_PTR PathSeparator ;
135147 PLOADER_PARAMETER_EXTENSION Extension ;
148+ PLOADER_PARAMETER_EXTENSION_WIN7 Extension_WIN7 ;
136149
137150 /* Construct SystemRoot and ArcBoot from SystemPath */
138151 PathSeparator = strstr (BootPath , "\\" ) - BootPath ;
@@ -242,6 +255,7 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
242255 List_PaToVa (& LoaderBlock -> BootDriverListHead );
243256
244257 Extension = LoaderBlock -> Extension ;
258+ Extension_WIN7 = LoaderBlock -> NT6_1 .Extension ;
245259
246260 /* FIXME! HACK value for docking profile */
247261 Extension -> Profile .Status = 2 ;
@@ -263,6 +277,9 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
263277 List_PaToVa (& Extension -> BootApplicationPersistentData );
264278 }
265279
280+ InitializeListHead (& Extension_WIN7 -> Extension2 .AttachedHives );
281+ List_PaToVa (& Extension_WIN7 -> Extension2 .AttachedHives );
282+
266283#ifdef _M_IX86
267284 /* Set headless block pointer */
268285 if (WinLdrTerminalConnected )
@@ -281,8 +298,12 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
281298 & Extension -> DrvDBSize ,
282299 LoaderRegistryData ));
283300
301+ if (Extension_WIN7 -> Extension2 .BgContext )
302+ Extension_WIN7 -> Extension2 .BgContext = PaToVa (Extension_WIN7 -> Extension2 .BgContext );
303+
284304 /* Convert the extension block pointer */
285305 LoaderBlock -> Extension = PaToVa (LoaderBlock -> Extension );
306+ LoaderBlock -> NT6_1 .Extension = PaToVa (LoaderBlock -> NT6_1 .Extension );
286307
287308 TRACE ("WinLdrInitializePhase1() completed\n" );
288309}
@@ -1015,6 +1036,10 @@ LoadAndBootWindows(
10151036 {
10161037 OperatingSystemVersion = _WIN32_WINNT_VISTA ;
10171038 }
1039+ else if (_stricmp (ArgValue , "Windows7" ) == 0 )
1040+ {
1041+ OperatingSystemVersion = _WIN32_WINNT_WIN7 ;
1042+ }
10181043 else
10191044 {
10201045 ERR ("Unknown 'BootType' value '%s', aborting!\n" , ArgValue );
@@ -1175,6 +1200,7 @@ LoadAndBootWindowsCommon(
11751200 IN PCSTR BootOptions ,
11761201 IN PCSTR BootPath )
11771202{
1203+ PLOADER_PARAMETER_EXTENSION Extension = LoaderBlock -> Extension ;
11781204 PLOADER_PARAMETER_BLOCK LoaderBlockVA ;
11791205 BOOLEAN Success ;
11801206 PLDR_DATA_TABLE_ENTRY KernelDTE ;
@@ -1260,15 +1286,99 @@ LoadAndBootWindowsCommon(
12601286 /* Map pages and create memory descriptors */
12611287 WinLdrSetupMemoryLayout (LoaderBlock );
12621288
1289+ if (OperatingSystemVersion >= _WIN32_WINNT_WIN7 )
1290+ {
1291+ PLOADER_PARAMETER_BLOCK_WIN7 LoaderBlock_WIN7 = & LoaderBlock -> NT6_1 ;
1292+ PLOADER_PARAMETER_EXTENSION_WIN7 Extension_WIN7 = & Extension -> NT6_1 ;
1293+
1294+ LoaderBlock_WIN7 -> OsMajorVersion = Extension -> MajorVersion ;
1295+ LoaderBlock_WIN7 -> OsMinorVersion = Extension -> MinorVersion ;
1296+ LoaderBlock_WIN7 -> LoadOrderListHead = LoaderBlock -> LoadOrderListHead ;
1297+ LoaderBlock_WIN7 -> MemoryDescriptorListHead = LoaderBlock -> MemoryDescriptorListHead ;
1298+ LoaderBlock_WIN7 -> BootDriverListHead = LoaderBlock -> BootDriverListHead ;
1299+ LoaderBlock_WIN7 -> KernelStack = LoaderBlock -> KernelStack ;
1300+ LoaderBlock_WIN7 -> Prcb = LoaderBlock -> Prcb ;
1301+ LoaderBlock_WIN7 -> Process = LoaderBlock -> Process ;
1302+ LoaderBlock_WIN7 -> Thread = LoaderBlock -> Thread ;
1303+ LoaderBlock_WIN7 -> RegistryLength = LoaderBlock -> RegistryLength ;
1304+ LoaderBlock_WIN7 -> RegistryBase = LoaderBlock -> RegistryBase ;
1305+ LoaderBlock_WIN7 -> ConfigurationRoot = LoaderBlock -> ConfigurationRoot ;
1306+ LoaderBlock_WIN7 -> ArcBootDeviceName = LoaderBlock -> ArcBootDeviceName ;
1307+ LoaderBlock_WIN7 -> ArcHalDeviceName = LoaderBlock -> ArcHalDeviceName ;
1308+ LoaderBlock_WIN7 -> NtBootPathName = LoaderBlock -> NtBootPathName ;
1309+ LoaderBlock_WIN7 -> NtHalPathName = LoaderBlock -> NtHalPathName ;
1310+ LoaderBlock_WIN7 -> LoadOptions = LoaderBlock -> LoadOptions ;
1311+ LoaderBlock_WIN7 -> NlsData = LoaderBlock -> NlsData ;
1312+ LoaderBlock_WIN7 -> ArcDiskInformation = LoaderBlock -> ArcDiskInformation ;
1313+ LoaderBlock_WIN7 -> OemFontFile = LoaderBlock -> OemFontFile ;
1314+ RtlCopyMemory (& LoaderBlock_WIN7 -> u , & LoaderBlock -> u , sizeof (LoaderBlock -> u ));
1315+ RtlCopyMemory (& LoaderBlock_WIN7 -> FirmwareInformation , & LoaderBlock -> FirmwareInformation , sizeof (LoaderBlock -> FirmwareInformation ));
1316+
1317+ RtlCopyMemory (& Extension_WIN7 -> Extension1 .Profile , & Extension -> Profile , sizeof (Extension -> Profile ));
1318+ Extension_WIN7 -> Extension2 .EmInfFileImage = Extension -> EmInfFileImage ;
1319+ Extension_WIN7 -> Extension2 .EmInfFileSize = Extension -> EmInfFileSize ;
1320+ Extension_WIN7 -> Extension2 .TriageDumpBlock = Extension -> TriageDumpBlock ;
1321+ Extension_WIN7 -> Extension2 .LoaderPagesSpanned = Extension -> LoaderPagesSpanned ;
1322+ Extension_WIN7 -> Extension2 .HeadlessLoaderBlock = Extension -> HeadlessLoaderBlock ;
1323+ Extension_WIN7 -> Extension2 .SMBiosEPSHeader = Extension -> SMBiosEPSHeader ;
1324+ Extension_WIN7 -> Extension2 .DrvDBImage = Extension -> DrvDBImage ;
1325+ Extension_WIN7 -> Extension2 .DrvDBSize = Extension -> DrvDBSize ;
1326+ Extension_WIN7 -> Extension2 .NetworkLoaderBlock = Extension -> NetworkLoaderBlock ;
1327+ #ifdef _X86_
1328+ Extension_WIN7 -> Extension2 .HalpIRQLToTPR = Extension -> HalpIRQLToTPR ;
1329+ Extension_WIN7 -> Extension2 .HalpVectorToIRQL = Extension -> HalpVectorToIRQL ;
1330+ #endif
1331+ Extension_WIN7 -> Extension2 .FirmwareDescriptorListHead = Extension -> FirmwareDescriptorListHead ;
1332+ Extension_WIN7 -> Extension2 .AcpiTable = Extension -> AcpiTable ;
1333+ Extension_WIN7 -> Extension2 .AcpiTableSize = Extension -> AcpiTableSize ;
1334+ Extension_WIN7 -> Extension2 .BootViaWinload = Extension -> BootViaWinload ;
1335+ Extension_WIN7 -> Extension2 .BootViaEFI = Extension -> BootViaEFI ;
1336+ Extension_WIN7 -> Extension2 .Reserved = Extension -> Reserved ;
1337+ Extension_WIN7 -> Extension2 .LoaderPerformanceData = Extension -> LoaderPerformanceData ;
1338+ Extension_WIN7 -> Extension2 .BootApplicationPersistentData = Extension -> BootApplicationPersistentData ;
1339+ Extension_WIN7 -> Extension2 .WmdTestResult = Extension -> WmdTestResult ;
1340+ Extension_WIN7 -> Extension2 .BootIdentifier = Extension -> BootIdentifier ;
1341+ Extension_WIN7 -> Extension2 .ResumePages = Extension -> ResumePages ;
1342+ Extension_WIN7 -> Extension2 .DumpHeader = Extension -> DumpHeader ;
1343+ }
1344+
12631345 /* Set processor context */
12641346 WinLdrSetProcessorContext (OperatingSystemVersion );
12651347
12661348 /* Save final value of LoaderPagesSpanned */
1267- LoaderBlock -> Extension -> LoaderPagesSpanned = MmGetLoaderPagesSpanned ();
1349+ LoaderBlockVA -> Extension -> LoaderPagesSpanned = MmGetLoaderPagesSpanned ();
1350+ LoaderBlockVA -> NT6_1 .Extension -> Extension2 .LoaderPagesSpanned = LoaderBlockVA -> Extension -> LoaderPagesSpanned ;
12681351
12691352 TRACE ("Hello from paged mode, KiSystemStartup %p, LoaderBlockVA %p!\n" ,
12701353 KiSystemStartup , LoaderBlockVA );
12711354
1355+ PCHAR LoaderBlockByte = (PCHAR )& LoaderBlockVA -> NT6_1 ;
1356+ PCHAR ExtensionByte = (PCHAR )LoaderBlockVA -> NT6_1 .Extension ;
1357+
1358+ if (sizeof (LOADER_PARAMETER_BLOCK_WIN7 ) != 0x88 )
1359+ {
1360+ TRACE ("Warning LOADER_PARAMETER_BLOCK_WIN7 is not 0x88\n" );
1361+ while (TRUE);
1362+ }
1363+
1364+ if (sizeof (LOADER_PARAMETER_EXTENSION_WIN7 ) != 0xE8 )
1365+ {
1366+ TRACE ("Warning LOADER_PARAMETER_EXTENSION_WIN7 is not 0xE8\n" );
1367+ while (TRUE);
1368+ }
1369+
1370+ TRACE ("LOADER_PARAMETER_BLOCK_WIN7:\n" );
1371+ for (ULONG i = 0 ; i < sizeof (LOADER_PARAMETER_BLOCK_WIN7 ); i ++ ){
1372+ TRACE ("0x%02X, " , (ULONG )LoaderBlockByte [i ]);
1373+ }
1374+ TRACE ("\n" );
1375+
1376+ TRACE ("LOADER_PARAMETER_EXTENSION_WIN7:\n" );
1377+ for (ULONG i = 0 ; i < sizeof (LOADER_PARAMETER_EXTENSION_WIN7 ); i ++ ){
1378+ TRACE ("0x%02X, " , (ULONG )ExtensionByte [i ]);
1379+ }
1380+ TRACE ("\n" );
1381+
12721382 /* Zero KI_USER_SHARED_DATA page */
12731383 RtlZeroMemory ((PVOID )KI_USER_SHARED_DATA , MM_PAGE_SIZE );
12741384
@@ -1278,6 +1388,11 @@ LoadAndBootWindowsCommon(
12781388 WinLdrpDumpArcDisks (LoaderBlockVA );
12791389#endif
12801390
1391+ if (OperatingSystemVersion >= _WIN32_WINNT_WIN7 )
1392+ LoaderBlockVA = (PLOADER_PARAMETER_BLOCK )& LoaderBlockVA -> NT6_1 ;
1393+
1394+ TRACE ("Bye Freeldr!\n" );
1395+
12811396 /* Pass control */
12821397 (* KiSystemStartup )(LoaderBlockVA );
12831398
0 commit comments