Please read the Windows Image File Boot (WIMBoot) topic on reboot.pro (and the MSDN Windows Image File Boot (WIMBoot) page) for more information about WIMBOOT. To summarize (and simplify), the WIMBOOT feature was added with the release of Windows 8.1 Update 1. The Windows Overlay File System filter driver (WoF.sys) manages access to a .wim file containing the Windows Operating System files - making WIMBOOT possible. Instead of extracting the full contents of a .wim image (the usual installation method for Windows NT 6.* systems) in WIMBOOT mode only the essential boot/system files are fully extracted - all other files are essentially pointer files linking to the real file in the compressed .wim image from which it was created. This results in significant space savings.
Unfortunatly I am not aware of any method of adding wof.sys to earlier (than Windows 8.1 Update 1) versions of Windows to allow them to also use WIMBOOT. The recent release of the Windows 10 Assessment and Deployment Kit (ADK) however changes things. The Windows 10 ADK includes the wofadk.sys driver. Using settings from the WinNTSetup topic and the WinNTSetup download I have been able to manually create a WinPE 3.1 OS that uses WIMBOOT - this is a flat boot type WinPE installation - not the more common RAM disk approach. Note the use of the term manually - the WinNTSetup tool can automate WIMBOOT from a full Windows 7 (and later) operating system. I am in no way trying to take credit for this approach - I just prefer to know how things work and like the manual approach.
The method in this post can probably also be used to boot a full Windows 7 OS - I'm not in a position to test this at the moment.
wimlib-imagex version 1.8.2 Beta4 is required - earlier version resulted in errors when applying the .wim file using the --wimboot switch (see here).
Step 1 - created a WinPE 3.1 (D:\boot.wim) image (using MistyPE in my case) - adding wofadk.sys to the \Windows\System32\Drivers directory and the wofadk.sys registry settings listed elsewhere in this post.
Step 2 - used wimlib to apply this file to a local directory - D:\root (e.g. "wimlib-imagex.exe apply D:\boot.wim 2 D:\root".
Step 3 - Added WimBootCompress.ini to D:\root\Windows\System32\ (contents of this file are listed elsewhere in this post).
Step 4 - Used wimlib to capture the contents of D:\root using the --wimboot switch (e.g. "wimlib-imagex.exe capture D:\root D:\winpe31.wimboot.wim "WinPE 3.1 WIMBOOT test" --wimboot
Step 5 - copied D:\winpe31.wimboot.wim to a USB thumb drive (volume E:)
Step 6 - ran the command "wimlib-imagex.exe apply E:\winpe31.wimboot.wim 1 E:\ --wimboot" to extract the files in WIMBOOT mode. NOTE this step was executed on a system that also included the wofadk.sys driver and settings.
Step 7 - Remembered to add settings required to boot WinPE 3.1/Windows 7 from a USB drive (mounted the E:\Windows\system32\config\SYSTEM hive (as _offline_SYSTEM) and added the following settings -
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\_offline_SYSTEM\ControlSet001\Control] "BootDriverFlags"=dword:00000006 [HKEY_LOCAL_MACHINE\_offline_SYSTEM\ControlSet001\Control\PnP] "PollBootPartitionTimeout"=dword:00015000Step 8 - Created a BCD store and added the bootmgr boot loader (E:\Boot\BCD and E:\bootmgr respectively)
Step 9 - booted the USB stick.
Screenshot of WinPE 3.1 running in WIMBOOT mode (NOTE - this screenshot was not captured from the USB stick prepared in steps 1-8. A USB hard disk with multiple partitions was in use, with the winpe31.wimboot.wim file located in a seperate partition to the WinPE 3.1 WIMBOOT files) -
Hope I remembered to include all of the steps accurately.
wofadk.sys registry settings
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\WofAdk] "DebugFlags"=dword:00000000 "DependOnService"=hex(7):46,00,6c,00,74,00,4d,00,67,00,72,00,00,00,00,00 "Discription"="WofAdk Mini-Filter Driver" "DisplayName"="WofAdk" "ErrorControl"=dword:00000001 "Group"="FSFilter Compression" "ImagePath"=hex(2):5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\ 74,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,72,\ 00,69,00,76,00,65,00,72,00,73,00,5c,00,57,00,6f,00,66,00,41,00,64,00,6b,00,\ 2e,00,73,00,79,00,73,00,00,00 "AutoAttach"=dword:00000001 "Start"=dword:00000000 "SupportedFeatures"=dword:00000003 "Tag"=dword:00000002 "Type"=dword:00000002 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\WofAdk\Instances] "DefaultInstance"="WofAdk Instance" [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\WofAdk\Instances\WofAdk Instance] "Altitude"="40730" "Flags"=dword:00000000WimBootCompress.ini settings (copied from the WinNTSetup project) -
; This is the inbox configuration file used for deploying or capture a ; WIMBoot system. Please do not remove this file because WIMCaptureImage ; and WIMApplyImage will fail if WIM_FLAG_WIM_BOOT flag is specified. [PrepopulateList] *winload.* *winresume.* \Windows\AppPatch\drvmain.sdb \Windows\Fonts\vgaoem.fon \Windows\Fonts\vgasys.fon \Windows\INF\errata.inf \Windows\System32\config\* \Windows\System32\ntkrnlpa.exe \Windows\System32\ntoskrnl.exe \Windows\System32\bootvid.dll \Windows\System32\ci.dll \Windows\System32\hal*.dll \Windows\System32\mcupdate_AuthenticAMD.dll \Windows\System32\mcupdate_GenuineIntel.dll \Windows\System32\pshed.dll \Windows\System32\apisetschema.dll \Windows\System32\api-ms-win*.dll \Windows\System32\ext-ms-win*.dll \Windows\System32\KernelBase.dll \Windows\System32\drivers\*.sys \Windows\System32\*.nls \Windows\System32\kbd*.dll \Windows\System32\kd*.dll \Windows\System32\clfs.sys \Windows\System32\CodeIntegrity\driver.stlREMINDER - Full credit (and thanks) goes to JFX for the method detailed in this post. Were it not for the information in the WinNTSetup topic on the MSFN forum and the settings in JFX's WimBootCompress.ini (contained in the WinNTSetup download) the following would not have been possible. Credit/thanks also to synchronicity for updating wimlib-imagex to provide compatibility with wofadk.sys.