[wue] fix MSA bypass not being applied unless SB/TPM or RAM/Disk bypass is also selected

* In a manner that defies logic, Microsoft designed Windows setup to parse Autounattend.xml
  for windowsPE tasks in the PE environment, but only carry out the copying of that file
  to %WINDIR%\Panther for subsequent processing with the other passes *IF* there exist an
  actual windowsPE section.
* In short, when using the Autounattend.xml method, Microsoft have made all passes there
  dependent on the existence of a windowsPE pass, regardless of whether that pass has any
  use or not.
* Working around this would be fine and all (just add an empty windowsPE pass so that the
  later passes get executed) if the absence of a windowsPE pass didn't also determine
  whether the user will be presented with the default Windows setup screens that include
  the "Repair your computer" option or a completely different set of screens (c.f. #1971).
* This means that, to keep users happy, we need to add yet another method to carry out
  tasks that should have remained the realm of boot.wim's Autounattend.xml, and instead
  create a \sources\$OEM$\$$\Panther\unattend.xml when there are no windowsPE tasks (on
  account that setup copies anything found under \sources\$OEM$\$$\ to %WINDIR%\).
  Only through this can we have the specialize and oobeSystem tasks actually carried out
  (for bypassing MSA requirements of skipping the data collection screens) while keeping
  the original Windows Setup look and feel.
* Closes #1981
This commit is contained in:
Pete Batard 2022-07-13 18:31:11 +01:00
parent 2b7b81808f
commit 5117a3b4a8
No known key found for this signature in database
GPG key ID: 38E0CF5E69EDD671
4 changed files with 70 additions and 30 deletions

View file

@ -499,12 +499,13 @@ enum ArchType {
};
// Windows User Experience (unattend.xml) options
#define UNATTEND_SECUREBOOT_TPM_MASK 0x01
#define UNATTEND_MINRAM_MINDISK_MASK 0x02
#define UNATTEND_NO_ONLINE_ACCOUNT_MASK 0x04
#define UNATTEND_NO_DATA_COLLECTION_MASK 0x08
#define UNATTEND_OFFLINE_INTERNAL_DRIVES 0x10
#define UNATTEND_DEFAULT_MASK 0x1F
#define UNATTEND_SECUREBOOT_TPM_MASK 0x00001
#define UNATTEND_MINRAM_MINDISK_MASK 0x00002
#define UNATTEND_NO_ONLINE_ACCOUNT_MASK 0x00004
#define UNATTEND_NO_DATA_COLLECTION_MASK 0x00008
#define UNATTEND_OFFLINE_INTERNAL_DRIVES 0x00010
#define UNATTEND_DEFAULT_MASK 0x0001F
#define UNATTEND_WINDOWS_TO_GO 0x10000 // Special flag for Windows To Go
#define UNATTEND_WINPE_SETUP_MASK (UNATTEND_SECUREBOOT_TPM_MASK | UNATTEND_MINRAM_MINDISK_MASK)
#define UNATTEND_SPECIALIZE_DEPLOYMENT_MASK (UNATTEND_NO_ONLINE_ACCOUNT_MASK)