mirror of
https://github.com/rbalsleyMSFT/FFU.git
synced 2026-06-14 10:19:36 -06:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3cb9bc9931 | |||
| b388eae439 | |||
| c1b81004be | |||
| 02e423c0f2 | |||
| ce34e40a52 | |||
| 4f701c4b1c | |||
| 6c0ee8abc5 | |||
| a0dc5a6ae9 | |||
| 6b548a34e6 | |||
| 8c5629c9ce |
@@ -1,5 +1,91 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
# 2603.2
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
|
||||||
|
Highly recommended to upgrade to this release due to potential SecureBoot issues
|
||||||
|
|
||||||
|
### Fixes SecureBoot-related boot issues on newly deployed FFUs
|
||||||
|
|
||||||
|
Fixes an issue where some devices may not boot after an FFU was applied if the FFU was built from a machine that had been updated to the Windows UEFI CA 2023 SecureBoot certificates.
|
||||||
|
|
||||||
|
Sometime at the start of this calendar year (Either January or February), a change was made in Windows to how BCDBoot functioned. If you took a CU from either of these months, BCDBoot will now check to see if the device has the 2011 or 2023 CA certificates. If 2023, the local BCDBoot will use the 2023 signed boot files when creating the System partition and these boot files will be deployed to the target system when the FFU is deployed. If the target machine hasn't updated to the 2023 certificates, boot will fail.
|
||||||
|
|
||||||
|
To fix this, FFU Builder now uses the version of BCDBoot from the ADK instead of the locally installed version. The version of BCDBoot from the 10.1.26100.2454 ADK December 2024 version (which is what FFU Builder considers the latest), will provide the boot files signed with the 2011 certs.
|
||||||
|
|
||||||
|
The version of [BCDBoot from the 10.1.28000.1 ADK](https://learn.microsoft.com/en-us/windows-hardware/get-started/what-s-new-in-kits-and-tools#bcd-boot) from November 2025 will default to using the 2023 certs as long as the machine supports the 2023 CA. This has been documented since this ADK was released. The behavior of this version of BCDBoot is what we're seeing now in devices that have been recently updated.
|
||||||
|
|
||||||
|
I suspect that when 26H2 is released, there will be a new ADK around that time and at that point we'll move to using that version of the ADK, which that version of BCDBoot will default to using the 2023 signed boot files and I suspect WinPE will probably default to doing the same. By then, hopefully, most in-market devices should have the 2023 certificates in UEFI and those that don't will need to get the certs or downgrade their ADK version to use the 2011 signed boot files.
|
||||||
|
|
||||||
|
### Fixes working directory handling
|
||||||
|
|
||||||
|
Creation and deletion of the dirty.txt marker file now use an explicit path based on $FFUDevelopmentPath, avoiding ambiguity and potential issues with relative paths.
|
||||||
|
|
||||||
|
**Full Changelog**: https://github.com/rbalsleyMSFT/FFU/compare/v2603.1...v2603.2
|
||||||
|
|
||||||
|
# 2603.1
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
|
||||||
|
### UI Out of Preview
|
||||||
|
|
||||||
|
The UI is finally out of preview and the code from the UI branch has been pushed to main.
|
||||||
|
|
||||||
|
### Remove old MSU files before servicing
|
||||||
|
|
||||||
|
Fixes an issue where older cumulative update MSU files were mixed with newer files. In Windows 11 24H2, dism treats all MSU files in the same folder as possible update sources, causing servicing issues.
|
||||||
|
|
||||||
|
This will primarily be an issue for those of you who use ISO files that don't have the latest updates, or those of you who create your FFUs with the ESD media shortly after patch Tuesday.
|
||||||
|
|
||||||
|
### Adds OS-scoped update KB folders
|
||||||
|
|
||||||
|
The KB folder where the CU and .NET updates downloads to will now have sub-folders for each Windows version. You may notice that if selecting 25H2, that the KB sub-folder for Windows 11 will show 24H2, this is to keep consistent with Windows 11 LTSC 2024 and Windows Server 2025, which all use the same 24H2 source OS (25H2 is just an eKB, not a full OS Swap Windows release like 24H2 was).
|
||||||
|
|
||||||
|
### .NET Updates stored under their own dedicated KB folder
|
||||||
|
|
||||||
|
This is more so to keep things clean, rather than fixing any sort of technical issue
|
||||||
|
|
||||||
|
### Reworked Windows 10 LTSB\LTSC Cumulative Update Installation
|
||||||
|
|
||||||
|
Since Windows 10 is out of support, offline servicing Windows 10 LTSC builds that are still supported fails due to extended security update requirements. The workaround to this is to install the updates in audit mode. FFU Builder now creates an Apps\LTSCUpdate folder and copies the LCU for Windows 10 LTSC builds still in support to the folder and installs the update in audit mode.
|
||||||
|
|
||||||
|
### Fixes an issue with Update ADK failing for non-English languages
|
||||||
|
|
||||||
|
Fixed a bug where updating the ADK would fail on non-English installations of Windows due to an assumption that the add/remove programs display information would be in English. Update ADK should correctly identify if the latest release of the ADK is installed and work as expected.
|
||||||
|
|
||||||
|
### Added dependency validation when selecting Build USB drive and Copy Drivers
|
||||||
|
|
||||||
|
Fixed an issue where a build would begin even though Copy Drivers to USB was set to true but no USB was inserted. FFU Builder will now check before the build gets started and inform the user if no USB drive is inserted.
|
||||||
|
|
||||||
|
### Normalizes Windows LTSC release versions to handle driver downloads
|
||||||
|
|
||||||
|
Driver downloads would fail if you were building certain LTSC releases due to FFU Builder incorrectly using the LTSC release year instead of the base Windows client version information. When build LTSC FFUs, the drivers should now download as expected.
|
||||||
|
|
||||||
|
### Scopes select-all to visible filtered list items in drivers listview
|
||||||
|
|
||||||
|
When filtering the drivers listview and selecting all driver models using the select all header checkbox, the select all behavior was selecting everything, even the hidden models in the list. If then selecting Download Selected, FFU Builder would download all models, even hidden ones. This now fixes that issue to only select all visible models and download those selected models.
|
||||||
|
|
||||||
|
### Retain downloaded ESD files
|
||||||
|
|
||||||
|
FFU Builder will now allow you to retain a downloaded ESD file. There's a new option on the Build tab to Remove Downloaded ESD File(s) which is checked by default to keep with the previous behavior. The intent here is to prevent from having to re-download the ESD file every time you're doing a build. This gives you another option along with Allow VHDX Caching to reduce the need of redownloading media.
|
||||||
|
|
||||||
|
### Reduce the size of cached VHDX files
|
||||||
|
|
||||||
|
Added some code to reduce the size of the cached VHDX files.
|
||||||
|
|
||||||
|
### Include disk size in VHDX cache validation
|
||||||
|
|
||||||
|
Prevents reusing cached images when the requested disk size changes. Ensures the disk size property is properly saved and verified against existing cache items to maintain configuration accuracy. This makes it so that if you create a new build with a larger disk size and have Allow VHDX caching selected, it won't use a cached VHDX with a smaller size.
|
||||||
|
|
||||||
|
### Enhances file backup and cleanup for cancelled builds
|
||||||
|
|
||||||
|
Improves the current-run cleanup mechanism by tracking file downloads explicitly. This ensures that files downloaded via BITS or preserving older timestamps are correctly identified and removed during cleanup. Extends the run manifest schema to support file backups, allowing for safe restoration of pre-existing scripts and configuration files modified during a run. Additional cleanup logic now correctly prunes residual empty directories after tracked files are removed.
|
||||||
|
|
||||||
|
### Fixed an issue with arm64 ESD downloads
|
||||||
|
|
||||||
|
With the change to how ESD downloads work with 25H2 and the Media Creation Tool, arm64 was broken. This was fixed.
|
||||||
|
|
||||||
# 2602.1 UI Preview
|
# 2602.1 UI Preview
|
||||||
|
|
||||||
## What's Changed
|
## What's Changed
|
||||||
|
|||||||
@@ -464,7 +464,7 @@ param(
|
|||||||
[switch]$Cleanup
|
[switch]$Cleanup
|
||||||
)
|
)
|
||||||
$ProgressPreference = 'SilentlyContinue'
|
$ProgressPreference = 'SilentlyContinue'
|
||||||
$version = '2603.1'
|
$version = '2603.2'
|
||||||
|
|
||||||
# Remove any existing modules to avoid conflicts
|
# Remove any existing modules to avoid conflicts
|
||||||
if (Get-Module -Name 'FFU.Common.Core' -ErrorAction SilentlyContinue) {
|
if (Get-Module -Name 'FFU.Common.Core' -ErrorAction SilentlyContinue) {
|
||||||
@@ -2781,11 +2781,25 @@ function Add-BootFiles {
|
|||||||
[string]$OsPartitionDriveLetter,
|
[string]$OsPartitionDriveLetter,
|
||||||
[Parameter(Mandatory = $true)]
|
[Parameter(Mandatory = $true)]
|
||||||
[string]$SystemPartitionDriveLetter,
|
[string]$SystemPartitionDriveLetter,
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[string]$AdkPath,
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[ValidateSet('x86', 'x64', 'arm64')]
|
||||||
|
[string]$WindowsArch,
|
||||||
[string]$FirmwareType = 'UEFI'
|
[string]$FirmwareType = 'UEFI'
|
||||||
)
|
)
|
||||||
|
|
||||||
WriteLog "Adding boot files for `"$($OsPartitionDriveLetter):\Windows`" to System partition `"$($SystemPartitionDriveLetter):`"..."
|
# Use the ADK copy of BCDBoot so the boot binaries come from the validated ADK toolset
|
||||||
Invoke-Process bcdboot "$($OsPartitionDriveLetter):\Windows /S $($SystemPartitionDriveLetter): /F $FirmwareType" | Out-Null
|
# instead of the local OS installation, which can differ based on Secure Boot servicing state.
|
||||||
|
$bcdBootArchitecture = if ($WindowsArch -ieq 'arm64') { 'arm64' } else { 'amd64' }
|
||||||
|
$bcdBootPath = Join-Path $AdkPath "Assessment and Deployment Kit\Deployment Tools\$bcdBootArchitecture\BCDBoot\bcdboot.exe"
|
||||||
|
|
||||||
|
if (-not (Test-Path -Path $bcdBootPath)) {
|
||||||
|
throw "ADK BCDBoot was not found at $bcdBootPath"
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteLog "Adding boot files for `"$($OsPartitionDriveLetter):\Windows`" to System partition `"$($SystemPartitionDriveLetter):`" using ADK BCDBoot at `"$bcdBootPath`"..."
|
||||||
|
Invoke-Process $bcdBootPath "$($OsPartitionDriveLetter):\Windows /S $($SystemPartitionDriveLetter): /F $FirmwareType" | Out-Null
|
||||||
WriteLog "Done."
|
WriteLog "Done."
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7025,7 +7039,7 @@ try {
|
|||||||
|
|
||||||
WriteLog 'All necessary partitions created.'
|
WriteLog 'All necessary partitions created.'
|
||||||
|
|
||||||
Add-BootFiles -OsPartitionDriveLetter $osPartitionDriveLetter -SystemPartitionDriveLetter $systemPartitionDriveLetter[1]
|
Add-BootFiles -OsPartitionDriveLetter $osPartitionDriveLetter -SystemPartitionDriveLetter $systemPartitionDriveLetter[1] -AdkPath $adkPath -WindowsArch $WindowsArch
|
||||||
|
|
||||||
#Add Windows packages
|
#Add Windows packages
|
||||||
if ($UpdateLatestCU -or $UpdateLatestNet -or $UpdatePreviewCU ) {
|
if ($UpdateLatestCU -or $UpdateLatestNet -or $UpdatePreviewCU ) {
|
||||||
|
|||||||
@@ -835,7 +835,7 @@ $LogFileName = 'ScriptLog.txt'
|
|||||||
$USBDrive = Get-USBDrive
|
$USBDrive = Get-USBDrive
|
||||||
New-item -Path $USBDrive -Name $LogFileName -ItemType "file" -Force | Out-Null
|
New-item -Path $USBDrive -Name $LogFileName -ItemType "file" -Force | Out-Null
|
||||||
$LogFile = $USBDrive + $LogFilename
|
$LogFile = $USBDrive + $LogFilename
|
||||||
$version = '2603.1'
|
$version = '2603.2'
|
||||||
WriteLog 'Begin Logging'
|
WriteLog 'Begin Logging'
|
||||||
WriteLog "Script version: $version"
|
WriteLog "Script version: $version"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
**Update 2026-02-04:** [2602.1 UI Preview is now available](https://github.com/rbalsleyMSFT/FFU/releases) - click the link to get the build and check out the [Quick Start Guide](https://rbalsleymsft.github.io/FFU/quickstart.html)
|
# Updates
|
||||||
|
|
||||||
|
## 2026-03-16 - [2603.2 Released](https://github.com/rbalsleyMSFT/FFU/releases)
|
||||||
|
|
||||||
|
Fixes an issue with devices not booting after applying an FFU. Highly recommended you update today.
|
||||||
|
|
||||||
# Using Full Flash Update (FFU) files to speed up Windows deployment
|
# Using Full Flash Update (FFU) files to speed up Windows deployment
|
||||||
|
|
||||||
@@ -22,14 +26,12 @@ The Full-Flash update (FFU) process can automatically download the latest releas
|
|||||||
|
|
||||||
# Getting Started
|
# Getting Started
|
||||||
|
|
||||||
If you're new, check out the [Quick Start Guide](https://rbalsleymsft.github.io/FFU/quickstart.html). This will be the fastest way to create your first FFU. There's a new [FFU Builder Quickstart Youtube video](https://youtu.be/kOIK5OmDugc) based on the 2602.1 UI Preview release.
|
If you're new to FFU Builder or new to the FFU Builder UI version, check out the [Quick Start Guide](https://rbalsleymsft.github.io/FFU/quickstart.html).
|
||||||
|
|
||||||
Older Youtube Videos
|
This will be the fastest way to create your first FFU. There's a new [FFU Builder Quickstart Youtube video](https://youtu.be/kOIK5OmDugc) based on the 2602.1 UI Preview release.
|
||||||
|
|
||||||
|
## Older Youtube Videos
|
||||||
|
|
||||||
[2507.1 UI Preview Video](https://www.youtube.com/watch?v=oozG1aVcg9M) - First UI Preview release video. This goes deeper than the quick start video, but is missing some features that have been added since 2507.1 was released.
|
[2507.1 UI Preview Video](https://www.youtube.com/watch?v=oozG1aVcg9M) - First UI Preview release video. This goes deeper than the quick start video, but is missing some features that have been added since 2507.1 was released.
|
||||||
|
|
||||||
[2407.2 Video](https://www.youtube.com/watch?v=rqXRbgeeKSQ) - This was the main deep-dive video on FFU Builder (before it had that name). This is a good deep dive into how the BuildFFUVM.ps1 script works, but a lot has changed since that build.
|
[2407.2 Video](https://www.youtube.com/watch?v=rqXRbgeeKSQ) - This was the main deep-dive video on FFU Builder (before it had that name). This is a good deep dive into how the BuildFFUVM.ps1 script works, but a lot has changed since that build.
|
||||||
|
|
||||||
# UI Progress
|
|
||||||
|
|
||||||
The UI builds are in a good spot now that most people should have moved over to using the UI if you haven't yet. I'll likely be updating main with the UI branch code within the next month or so.
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ Once Hyper-V has been enabled and you have rebooted, create either an external o
|
|||||||
|
|
||||||
If you haven't [downloaded the latest release yet, do so](https://github.com/rbalsleyMSFT/FFU/releases)
|
If you haven't [downloaded the latest release yet, do so](https://github.com/rbalsleyMSFT/FFU/releases)
|
||||||
|
|
||||||
Once downloaded, extract the zip file to `C:\FFUDevelopment`. You can use another location, just be sure set your FFUDevelopmentPath to the new location (e.g. `D:\FFUDevelopment`).
|
Once downloaded, open the zip file and copy the content of the FFUDevelopment folder to `C:\FFUDevelopment`. You can use another location, just be sure set your FFUDevelopmentPath to the new location (e.g. `D:\FFUDevelopment`).
|
||||||
|
|
||||||
After extraction, you most likely will need to unblock the files as they'll be tagged with the mark of the web. In PowerShell run:
|
After extraction, you most likely will need to unblock the files as they'll be tagged with the mark of the web. In PowerShell run:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user