Oem Deploy Win10
Oem Deploy Win10
Oem Deploy Win10
Manufacture
Desktop manufacturing
Deployment guides and walkthroughs
Windows 10 S
Deployment Options
DISM - Deployment Image Servicing and Management
Sysprep
Windows PE (WinPE)
Windows Recovery Environment (Windows RE)
Windows Setup
Deployment Command-Line Tools
Mobile manufacturing
Mobile deployment and imaging
Manufacturing Mode
Microsoft Manufacturing OS
Flashing tools
Using a host PC to reboot a device to flashing mode and get version information
Disabling the initial setup process
Reset protection
Building and flashing mobile images
IoT Core manufacturing
IoT Core manufacturing guide
IoT Core feature list
IoT Core Add-ons
IoT Core Add-ons command-line options
Update the time server
Create Windows Universal OEM Packages
Manufacture
6/6/2017 • 1 min to read • Edit Online
Purpose
Use the manufacturing tools to deploy your Windows customizations to new Windows 10 devices. Learn how to:
Combine your customizations, plus languages, drivers, apps and more, into new Windows images.
Modify these images either from a manufacturing mode for a familiar Windows experience, or from a command
line for quicker changes that can be automated and scripted.
Install images onto new devices. Choose whether to use compression to balance disk space verses device
performance. Use flashing tools to speed up the final manufacturing processes
Capture your customizations into the recovery tools, helping your customers get back up to speed quickly.
TOPIC DESCRIPTION
OEM deployment of Windows 10 for desktop editions This guide is intended for OEMs, and applies to Windows 10
for desktop editions (Home, Pro, Enterprise, and Education). IT
professionals using this guide should have prior knowledge of
Windows basic administration and troubleshooting.
System builder deployment of Windows 10 for desktop Learn how to deploy Windows 10 desktop, including online
editions and offline customizations, and optional steps for specific
scenarios. This guide is intended to help system builders with
both 64-bit and 32-bit configurations.
OEM Windows Desktop Deployment and Imaging Lab Building your first devices with Windows 10 for desktop
editions (Home, Pro, Enterprise, and Education)?
Want to learn strategies to save time on the factory floor?
This walkthrough shows two ways of creating custom
images with languages, apps, and drivers, and modifying
them when new designs become available.
What's new in Windows manufacturing Learn what new features are available.
After you've learned how to design, develop, and customize Windows images, you can use the tools in the
Windows ADK to manufacture and deploy Windows images to new PCs and devices.
In This Section
CONTENT TYPE REFERENCES
Deployment options UEFI Firmware | Hard Drives and Partitions | VHD (Native
Boot)| Secure Boot | Device Drivers | Language Packs |
Features On Demand V2 (Capabilities) | More deployment
options
In this section
GUIDE DESCRIPTION
OEM deployment of Windows 10 for desktop editions End-to-end desktop manufacturing lab for OEMs
System builder deployment of Windows 10 for desktop End-to-end lab for system builders
editions
OEM Windows Desktop Deployment and Imaging Lab Collection of walkthroughs for OEM deployments
Manufacturing Windows Engineering Guide Roadmap for OEMs and ODMs of the ideal manufacturing
process for Windows 10 devices, with guidance for potential
pitfalls and opportunities to streamline the process.
OEM Deployment of Windows 10 for desktop
editions
12/6/2017 • 57 min to read • Edit Online
Getting ready to build and test Windows 10 desktop PCs? This lab shows you the steps to take to make and deploy
Windows images. We'll show you the tools to use and the commands to run to setup an end-to-end deployment.
The commands can be scripted, helping you quickly customize new images for specific markets to meet your
customers' needs.
If you're an OEM, you can also use the Express Deployment Tool (EDT) to build a custom Windows deployment. The
EDT simplifies the process of installing and configuring Windows for a consistent brand and customized end-user
experience.
We'll walk you through the process of building a customized Windows deployment. Here's what we'll cover:
We'll start by giving an overview of the deployment process, and show you what to consider when planning your
deployment.
Then we'll build a customized bootable WinPE drive. We'll cover the steps for:
Preparing and mounting a WinPE image
Adding packages
Adding drivers
Creating WinPE media
Next we'll move onto customizing your Windows image. We'll start with offline customizations to a mounted
Windows image, where we'll cover:
Adding Drivers
Adding Languages
Adding Updates
Reinstalling inbox apps
Preinstalling Microsoft Office
Adding tiles to the Start Layout
Setup OOBE to display a custom EULA
Configuring and using answer files to customize Windows Setup
We'll finish customizing the Windows image by deploying your image to a PC and then booting into Audit mode
and finish making changes, including:
Making changes in Audit mode
Preparing Push Button Reset
Finally, we'll Finalize and Capture your image, verify everything works, and prepare your image for deployment.
Finalizing the image
Let's get started!
HARDWARE CONFIGURATION: 1 1B 2
RAM 1 GB 2 GB 4 GB
Pen No Yes No
Notes:
We can build an image for Hardware Configuration 1B by using Hardware Configuration 1 as a base image.
We can't build Hardware Configuration 2 from either Hardware Configuration 1 or 1B, because they use a
different architecture.
Product keys
Get the default product keys for each Windows version from the Kit Guide Windows 10 Default Manufacturing Key
OEM PDF, which is on the ISO with the Windows image.
Get the distribution product keys that match the Windows 10 image.
Troubleshooting: If this doesn't work, make sure you're in the Deployment and Imaging Tools
Environment, and not the standard command prompt.
Add components to WinPE
You can customize a WinPE image (boot.wim) by adding additional packages and languages, called optional
components (OCs). Optional components are available as part of the ADK.
Here are some examples of what you can add to your WinPE image with OCs:
Add a video or network driver. (WinPE includes generic video and network drivers, but in some cases,
additional drivers are needed to show the screen or connect to the network.). To learn more, see WinPE: Add
drivers.
Add PowerShell scripting support. To learn more, see WinPE: Adding Windows PowerShell support to
Windows PE. PowerShell scripts are not included in this lab.
Set the power scheme to high-performance. Speeds deployment. Note, our sample deployment scripts
already set this scheme automatically. See WinPE: Mount and Customize: High Performance.
Optimize WinPE: Recommended for devices with limited RAM and storage (for example, 1GB RAM/16GB
storage). After you add drivers or other customizations to Windows PE, see WinPE: Optimize and shrink the
image to help reduce the boot time.
Mount your WinPE image
To customize your WinPE image, you have to mount your image before you can work with it. Mounting an image
extracts the contents of an image file to a location where it can be viewed and modified. Throughout this lab we'll
use DISM to mount and modify images. DISM comes with Windows, but we'll be using the version that is installed
by the ADK, which we'll access through the Deployment and imaging tools environment.
You can find boot.wim in the files that you copies with copype.cmd.
Let's mount the image:
1. On your technician PC, open the Deployment and imaging tools environment as an administrator. You
can find this in the Start menu under Windows Kits. If you don't see it, make sure you've installed the
Windows ADK.
2. If you're using an x64 Windows 10 image, mount the image:
Note: To install all of the drivers in a folder and all its subfolders use the /recurse option. For example:
For an x64 Windows 10 image:
Now that you have your image exported, you can mount it.
7. Mount BasicImage.wim.
Md C:\mount\windows
Dism /Mount-Wim /WimFile:E:\images\basicimage.wim /index:1 /MountDir:C:\mount\windows
Md c:\mount\winre
Dism /Mount-Wim /WimFile:C:\mount\windows\Windows\System32\Recovery\winre.wim /index:1
/MountDir:C:\mount\winre
Troubleshoot: If winre.wim cannot be seen under the specified directory, use the following command to set
the file visible:
attrib -h -a -s C:\mount\windows\Windows\System32\Recovery\winre.wim
Troubleshoot: If the mounting operation fails, make sure you're using DISM from the Deployment and
Imaging Tools Environment. Do not mount images to protected folders, such as the User\Documents folder.
If DISM processes are interrupted, consider temporarily disconnecting from the network and disabling virus
protection.
WARNING
While /Recurse can be handy, it's easy to bloat your image with it. Some driver packages include multiple .inf driver
packages, which often share payload files from the same folder. During installation, each .inf driver package is
expanded into a separate folder, each with a copy of the payload files. We've seen cases where a popular driver in a
900MB folder added 10GB to images when added with the /Recurse option.
Check the list of packages and verify that the list contains the drivers you added.
Languages
Notes
Add languages before major updates. Major updates include hotfixes, general distribution releases, or
service packs. If you add a language later, you'll need to reinstall the updates.
Add major updates before apps. These apps include universal Windows apps and desktop applications. If you
add an update later, you'll need to reinstall the apps. We'll show you how to add these later in Lab 6: Add
universal Windows apps
Add your languages to your recovery image, too: Many common languages can be added to your recovery
image. We'll show you how to add these later in Lab 12: Update the recovery image.
Always use language packs and Features-On-Demand (FOD) packages that match the language and platform of
the Windows image.
Features on demand (FODs) are Windows feature packages that can be added at any time. When a user needs a
new feature, they can request the feature package from Windows Update. OEMs can preinstall these features to
enable them on their devices out of the box.
Common features include language resources like handwriting recognition. Some of these features are required to
enable full Cortana functionality.
The following table shows the types of language packages and components available for Windows 10:
Language interface pack Microsoft-Windows-Client- Requires a specific fully- UI text, including basic
Language-Interface- localized or partially-localized Cortana capabilities. To learn
Pack_x64_ca-es language pack. Example: ca- more, see Available
ES requires es-ES. Language Packs for
Windows.
For 32-bit Windows, use the language packs and features on demand from the 32-bit ISOs:
Dism /Add-Package /Image:C:\mount\windows /PackagePath:E:\LanguagePacks\x86\Microsoft-Windows-Client-
Language-Pack_x86_ja-jp.cab /PackagePath:E:\LanguageFeaturePacks\x86\Microsoft-Windows-LanguageFeatures-
Basic-ja-jp-Package.cab /PackagePath:E:\LanguageFeaturePacks\x86\Microsoft-Windows-LanguageFeatures-OCR-
ja-jp-Package.cab /PackagePath:E:\LanguageFeaturePacks\x86\Microsoft-Windows-LanguageFeatures-
Handwriting-ja-jp-Package.cab /PackagePath:E:\LanguageFeaturePacks\x86\Microsoft-Windows-
LanguageFeatures-TextToSpeech-ja-jp-Package.cab /PackagePath:E:\LanguageFeaturePacks\x86\Microsoft-
Windows-LanguageFeatures-Speech-ja-jp-Package.cab /PackagePath:E:\LanguageFeaturePacks\x86\Microsoft-
Windows-LanguageFeatures-Fonts-Jpan-Package.cab /packagepath:E:\LanguageFeaturePacks\x86\Microsoft-
Windows-RetailDemo-OfflineContent-Content-ja-jp-Package.cab
For 32-bit Windows, use the language packs and features on demand from the 32-bit ISOs:
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\de-de\lp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\de-de\WinPE-Rejuv_de-de.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\de-de\WinPE-EnhancedStorage_de-de.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\de-de\WinPE-Scripting_de-de.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\de-de\WinPE-SecureStartup_de-de.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\de-de\WinPE-SRT_de-de.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\de-de\WinPE-WDS-Tools_de-de.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\de-de\WinPE-WMI_de-de.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\de-de\WinPE-StorageWMI_de-de.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\de-de\WinPE-HTA_de-de.cab"
2. (Optional) Add Japanese language packs and font support to WinRE. Note that for Japanese, we will add an
additional cab that is for font support.
For 64-bit Windows, use the language packs and features on demand from the 64-bit ISOs:
For 32-bit Windows, use the language packs and features on demand from the 32-bit ISOs:
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\lp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\WinPE-Rejuv_ja-jp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\WinPE-EnhancedStorage_ja-jp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\WinPE-Scripting_ja-jp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\WinPE-SecureStartup_ja-jp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\WinPE-SRT_ja-jp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\WinPE-WDS-Tools_ja-jp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\WinPE-WMI_ja-jp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\WinPE-StorageWMI_ja-jp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\WinPE-HTA_ja-jp.cab"
Dism /image:C:\mount\winre /add-package /packagepath:"E:\LanguagePacks\Windows Preinstallation
Environment\x86\ja-jp\WinPE-FontSupport-JA-JP.cab"
3. Set the timezone for the region of the default language applied
Troubleshooting: If an error occurs when running these commands, try the command again on the package that
failed.
Example:
Error: 0x800f0825
Package Microsoft-Windows-LanguageFeatures-Basic-en-us-Package may have failed due to pending updates to
servicing components in the image.
If the command completes with errors, check the DISM log file. at C:\windows\Logs\DISM\dism.log.
Remove the base languages from WinRE (Optional)
Similar to removing the base language in install.wim, we can remove the base language from WinRE as well.
For removing language components from a 64-bit image:
IMPORTANT
If you install an update (hotfix, general distribution release [GDR], or service pack [SP]) that contains language-dependent
resources prior to installing a language pack, the language-specific changes in the update won't be applied when you add the
language pack. You need to reinstall the update to apply language-specific changes. To avoid reinstalling updates, install
language packs before installing updates.
1. Get a Windows update package. For example, grab the latest cumulative update listed in Windows 10
update history from the Microsoft Update catalog. Extract the .msu file update to a folder, for example,
E:\updates\windows10.0-kb4016240-x64_0e60aebeb151d4b3598e4cfa9b4ccb1fc80e6e4d.msu. Make sure
that your update matches the architecture of the image you are working with.
To learn more, see https://myoem.microsoft.com/oem/myoem/en/product/winemb/pages/comm-ms-updt-
ctlg-trnstn.aspx.
2. Add the msu to your mounted image using dism /add-package .
For 64-bit images:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\UBR
Important: You have to apply cumulative updates to your WinRE image in addition to your Windows image.
Because updates are cumulative, when a new update is installed, old updates can be removed. The WinRE
optimization that we cover later in the lab will remove unnecessary updates which will keep the WinRE image
from growing in size.
To apply the update that you downloaded in the previous section to your WinRE image, you have to run
dism /add-package to apply the update to the mounted WinRE image.
3. Use DISM to reinstall inbox apps. You no longer have to uninstall inbox apps prior to reinstalling them.
You'll have to run reinstallation commands for each inbox app. Here is an example of how to reinstall one
inbox app, the 3D Builder app:
For 64-bit Windows:
Note: If you don’t create a LayoutModification.xml file and you use the Unattend Start settings, Windows
will take the first 12 SquareTiles or DesktoporSquareTiles settings in the Unattend file. Windows will place
these tiles automatically in newly-created groups at the end of Start. The first six tiles are placed in the first
OEM group and the second set of six tiles are placed in the second OEM group. If OEMName is specified in
the Unattend file, OEMName is used to name the OEM groups are created.
MD c:\mount\windows\windows\system32\oobe\info\default\1031
MD c:\mount\windows\windows\system32\oobe\info\default\1033
3. Create a license terms .rtf file for each language you have in your image, and copy them to the language-
specific oobe folder.
For example: Move the English agreement.rtf file to
C:\mount\windows\Windows\System32\oobe\info\default\1033\ directory and move the German
agreement.rtf to C:\mount\windows\Windows\System32\oobe\info\default\1031.
copy E:\resources\english-agreement.rtf
c:\mount\windows\windows\system32\oobe\info\default\1033\agreement.rtf
copy E:\resources\german-agreement.rtf
c:\mount\windows\windows\system32\oobe\info\default\1031\agreement.rtf
4. Open a text editor and create .html versions of your license terms. Save the terms to the same folders as the
.rtf versions. You can use the EULA example from OEM license terms to create sample files. The names of the
EULA files should be identical, except for the extension.
5. Create an oobe.xml file to specify the agreement.rtf file path. Windows will automatically find the
accompanying .html file. Below is a sample oobe.xml which is located at USB-B\ConfigSet\oobe.xml
7. Now each language folder has an oobe.xml, agreement.rtf, and agreement.thml file in that corresponding
language.
When the image first boots into OOBE, it will display the license agreement.
Create an image info file and add it to your image
1. Create an csup.txt file to specify when the Windows image was created. This file must include the date that
the image was created, in the form of 'MM-DD-YYYY', with no other characters, on a single line at the top of
the file.
03-17-2017
md c:\mount\windows\windows\panther
copy /y E:\AnswerFiles\OA3.0\Unattend.xml C:\Mount\Windows\Windows\Panther
nd c:\mount\windows\Windows\panther
copy /y E:\AnswerFiles\Non_OA3.0\Unattend.xml C:\Mount\Windows\Windows\Panther
md c:\mount\windows\windows\system32\OEM
copy E:\configset\$oem$\$$\system32\OEM c:\mount\windows\windows\system32\OEM
Optimize WinRE
1. Increase the scratchspace size of the WinRE image.
where C is the drive letter of the drive that contains the image.
This process can take a few minutes.
3. Make a backup copy of the updated Windows RE image. We'll use the backup copy of WinRE later in the lab:
attrib -h -a -s C:\mount\windows\Windows\System32\Recovery\winre.wim
Dir "C:\mount\windows\Windows\System32\Recovery\winre.wim"
Follow the below partition layout size chart to determine the size of your recovery partition in
createpartitions-.txt files. The amount of free space left is after you copy winre.wim to the hidden partition.
See the below disk partition rules for more information.
If the partition is larger than 1 GB, we recommend that it should have at least 1 GB free.
5. Commit the changes and unmount the Windows image:
Where C is the drive letter of the drive that contains the image. This process may take several minutes.
E:\Deployment\applyimage.bat E:\images\basicimage.wim
Note: There are several pauses in the script. You will be prompted Y/N for the Apply operation if this is
Compact OS deployment.
2. When the script finishes, type exit to reboot the PC into the new Windows installation.
3. The PC will boot into OOBE. Press Ctrl+Shift+F3 to boot into Audit mode.
Note: Only use compact OS on Flash drive based devices as compact OS performance is heavily dependent
on the storage device capabilities. Compact OS is NOT recommended on rotational devices. Please reference
Compact OS for more information.
OEMID HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curren
tVersion\Store, (REG_SZ) OEMID
SCM ID HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curren
tVersion\Store, (REG_SZ) StoreContentModifier
OEMID
1. Run regedit.exe from Command Prompt
2. Navigate to HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Store
3. Right click under (Defalut) -> click new
4. Click String Value
5. Type OEMID
6. Double click OEMID and enter OEM name in Value data: text field
SCMID
1. Run regedit.exe from Command Prompt
2. Navigate to HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Store
3. Right click under (Defalut) -> click new
4. Click String Value
5. Type StoreContentModifier
6. Double click StoreContentModifier and enter OEM name in Value data: text field
Important: The OEMID registry key is not restored automatically during PBR in Windows 10. Please refer to the
scanstate section of this guide on how to restore the OEMID registry key during PBR operation.
1. Mount your language-specific Office ISO, and copy the Office folder to E:\OfficeV16.3 (Where E: is USB-B).
[Optional] if you applied a language interface pack you may want to add the language pack for Office 2016 as well.
We'll show you how to add German language support.
a. Mount “X21-32396 Office v16.3 German OPK”. b. Copy the office folder to E:\OfficeV16.3 c. Skip replacing
duplicate files in the copy so that only the German languages are copied. d. Run
Notepad E:\Officev16.3\ConfigureO365Home.xml . e. Add a language ID and verify SourcePath as in screen shot below
1. Save and close ConfigureO365Home.xml
2. Unplug USB-B from technician computer
Install Office 2016
On your reference PC:
1. Plug USB-B into reference computer which is in Audit mode.
2. Find the drive letter for USB-B, We'll use E:.
3. Notepad ConfigureO365Home.xml
4. Configure the SourcePath to point to USB-B E:\Officev16.3
Note: the only Product ID that needs to be specified in the configuration.xml file is O365HomePremRetail. If
the user enters a key for another product, such as for Office Home & Student 2016, then Office will
automatically be configured as the product associated with that key.
5. Close and Save ConfigureO365Home.xml
6. Open command prompt and navigate to d:\Officev16.3
7. Run setup.exe with the /configure option.
Note: The Choice attribute is new. This allows different versions of Office to be pinned to the Start screen at
the same time. For now, Desktop2016 is the only valid value.
3. Save and close layoutmodification.xml.
Note: for recovery, the layoutmodification.xml will need to be copied during recovery. Refer to section 10.3
4. Copy to the recovery folder. This will ensure that your taskbar pins will remain through recovery scenarios.
C:\Users\Default\AppData\Local\Microsoft\Windows\Shell\layoutmodification.xml c:\recovery\OEM
When the PC is finished going through OOBE and is showing the desktop, the start menu will have the 3 tiles
appended to start menu in image below:
OEMTA This mode supports the try, buy, or activate experience of the
OEM mode as well as supporting AFO and AFO late binding.
This mode supports Office activation through the device’s
Windows product key, which means the customer
wouldn’t need to enter a 5x5 product key code.
<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/test">
<component type="System" context="UserAndSystem">
<displayName>OEMID</displayName>
<role role="Settings">
<rules>
<include>
<objectSet>
<pattern type="Registry">HKLM\Software\Microsoft\Windows\CurrentVersion\Store
[OEMID]</pattern>
</objectSet>
</include>
</rules>
</role>
</component>
</migration>
mkdir c:\recovery\customizations
E:\ScanState_amd64\scanstate.exe /apps /ppkg C:\Recovery\Customizations\apps.ppkg
/i:c:\recovery\oem\regrecover.xml /config:E:\scanstate_amd64\Config_AppsAndSettings.xml /o /c /v:13
/l:C:\ScanState.log
del c:\scanstate.log
del c:\miglog.xml
Important: By default, non-major updates (e.g. ZDPs, KB’s, LCUs) are not restored. To ensure that updates
preinstalled during manufacturing are not discarded after recovery, they should be marked as permanent by
using the /Cleanup-Image command in DISM with the /StartComponentCleanup and /ResetBase options.
Updates marked as permanent are always restored during recovery.
MD c:\scratchdir
Dism /Cleanup-Image /Image:C:\ /StartComponentCleanup /resetbase /defer /scratchdir:c:\scratchdir
RD c:\scratchdir
MD e:\scratchdir
Dism /Capture-Image /CaptureDir:C:\ /ImageFile:E:\Images\CustomImage.wim /Name:"CustomImage"
/scratchdir:e:\scratchdir
This captures an image called CustomImage.wim to E:\Images. When the image capture is complete, you can
shut down your reference PC.
E:\Deployment\applyimage.bat E:\Images\FinalImage.wim
2. Export your home image to cleanup unused packages in the Home image.
4. Check for available editions within the mounted WIM with dism /get-targeteditions .
7. Use notepad to edit the unattend files. Change the product key to the default Professional product key in
c:\mount\windows\recovery\OEM\Unattendsysprep.xml and
c:\mount\windows\Windows\panther\unattend.xml
Notepad c:\mount\windows\recovery\oem\unattend.xml
Notepad c:\mount\windows\windows\panther\unattend.xml
Final shipment
You have to boot a PC at least once to allow the specialize configuration pass of Windows Setup to complete
before shipping a PC.
The specialize configuration pass adds hardware-specific information to the PC and is complete when Windows
OOBE appears.
Reference the OEM Policy Documentation for more details.
Reducing Disk Footprints
Throughout this guide, we have shown a few places where you can reduce the disk footprint:
Using Dism /cleanup-image /resetbase
Using Dism /export-image
Using Compact OS
Using Compact OS with Single Instancing
This section shows a few more ways you can gain additional free space.
Reducing and turning off Hiberfile
Reducing and turning off hiberfile can return between 400MB to 1.5GB OS space on the deployed OS.
Reducing Hiberfile by 30%
When you run sysprep.exe with unattend.xml, you can add a FirstLogonCommand that will reduce hiberfile:
Capture your image with the unattend.xml file that contains these settings.
Disk footprint with optimizations
The table below shows additional space saved by using compact OS, Single instancing, and reducing or turning Off
Hiberfile on 2GB (x86) and 4GB (x64).
FOOTPRINT TYPE WINDOWS 10 HOME X86 2GB MEMORY WINDOWS 10 HOME X64 4GB MEMORY
You can use this guide to deploy Windows 10 to a line of computers. It provides prescriptive guidance for Windows
10 deployment, including online and offline customizations, and optional steps for specific scenarios. It is intended
to help system builders (level 200 technicians) with both 64-bit and 32-bit configurations, and applies to Windows
10 for desktop editions (Home, Pro, Enterprise, and Education).
If you're a system builder, you can also use the Express Deployment Tool (EDT) to build a custom Windows
deployment. The EDT simplifies the process of installing and configuring Windows for a consistent brand and
customized end-user experience.
Creating my USB -B
1. Format your USB drive and name it as follows:
2. Then download USB-B.zip from the Microsoft Download Center. Save the .zip file to USB-B and extract the
contents there. The contents of the configuration files included in USB-B are examples that you may change
according to your branding and manufacturing choices. However, file names and hierarchy of the folders
and files must be the same as demonstrated below in order to align your deployment procedure with this
guide.
TaskbarLinks (up to 6 pinned .lnk files) Paint and Control Panel shortcuts have
been set
Additional customizations
Product deployment
Office Single Image v16.3 OPK preloaded
Image customization
Adding language interface packs to Windows
Adding drivers and update packages
Adding OEM-specific logo and background files to Windows
Image size optimization
Pinning desktop applications to start sceen
Right-click the name of the tool, and then click Run as administrator.
3. Windows ADK allows you to create Windows PreInstallation Environment. Copy base WinPE to new
folder.
If you use an x64 Windows 10 image, copy the x64 WinPE folder structure:
Copype amd64 C:\winpe_amd64
If you use an x86 Windows 10 image, copy the x86 WinPE folder structure:
2. Run Windows System Image Manager to start creating an answer file from scratch. This tool allows you
to create or manage your answer files in an easy and organized manner.
3. Navigate to File > Select Windows Image. Browse to your local desktop and select Install.wim. A catalog
file (.clg) will be created for the specified wim.
Troubleshoot: Catalog creation may fail due to several reasons. Please make sure install.wim has read/write
permissions. If you continue getting error, make sure correct architecture (x86 or x64) Windows 10 is
installed on technician computer. If you are creating catalog for x64 Windows 10 image, you are required to
use x64 Windows 10 installed on x64 Windows 10 computer. Install.wim image and Windows 10 ADK
versions must be the same.
4. Open a sample answer file or create a new one. USB-B\AnswerFiles\Unattend.xml is the sample answer file
included on USB-B.
5. Click OK to associate the answer file with the Windows Image.
6. To add a driver to Windows PE, click Insert select Driver Path and select pass 1 windowsPE and then
browse to the driver. Note: This step is optional and only required if a third-party driver is needed for use in
the Windows Preinstallation Enviornment.
7. To add a package, click Insert, select Package, and then browse to the package you want to add. This step is
optional.
Customize the answer file
Troubleshoot: A blank character in specialize | Microsoft-Windows-Shell-Setup | Computer Name will result
in Windows installation failure.
1. See USB-B\AnswerFiles\Unattend.xml for an example of an answer file that has basic customizations. -
You may use the sample answer file and modify relevant parts or start from scratch by specifying some
basic customizations.
Please see and use the Windows 10 default product key from Device Partner Center listed under Default
product keys tab.
2. Add a product key that matches the Windows edition. This key isn't used to activate Windows, so you can
reuse the same key for multiple installations:
In the Answer File pane, select Components\1 windowsPE\amd64_Microsoft-Windows-
Setup_neutral\UserData\ProductKey. In the ProductKey Properties pane, under Settings, enter the
value next to Key.
Important: These product keys cannot be used for activation. You will need to type a software product key
during the installation process for activation. These keys will be removed when sysprep generalize is run.
The end user will be required to type the unique product key from the Certificate of Authenticity (COA) label
when first booting Windows 10.
3. Add your support information:
In the Answer File pane, select Components\4 specialize\amd64_Microsoft-Windows-Shell-
Setup_neutral\OEMInformation.
In the OEMInformation Properties pane, in the Settings section, update the following values: company
name (Manufacturer), hours (SupportHours), phone number (SupportPhone), and website (SupportURL).
4. Prepare your computer to boot to audit mode after the Windows installation is complete:
In the Windows Image pane, expand Components, right-click amd64_Microsoft-Windows-
Deployment, and then select Add Setting to Pass 7 oobeSystem.
In the Answer File pane, select Components\7 oobeSystem\amd64_Microsoft-Windows-Deployment
_neutral\Reseal.
In the Reseal Properties pane, in the Settings section, add the following value: Mode =Audit.
5. Set the Internet Explorer home page:
In the Windows Image pane, right-click amd64_Microsoft-Windows-IE-InternetExplorer, and then
select Add Setting to Pass 4 specialize.
In the Answer File pane, select Components\4 specialize\amd64_Microsoft-Windows-Microsoft-
Windows-IE-InternetExplorer_neutral.
In the IE-InternetExplorer Properties pane, in the Settings section, select Home_page, and add the URL of
your website.
6. OEMs can specify Disk Configuration which is used to create/modify disk partitions and set image
installation partition. This step is optional and configuration is included in the sample answer file USB-
B\AnswerFiles\Unattend.xml.
Save the answer file to USB-B\AnswerFiles\Unattend.xml and close Windows SIM.
Mount images
1. Mount Windows image (ModelSpecificImage.wim). This process extracts the contents of the image file to a
location where you can view and modify the mounted image.
Md C:\mount\windows
Dism /Mount-Wim /WimFile:E:\Images\ModelSpecificImage.wim /index:1 /MountDir:C:\mount\windows
Md c:\mount\winre
Dism /Mount-Image /ImageFile:C:\mount\windows\Windows\System32\Recovery\winre.wim /index:1
/MountDir:C:\mount\winre
Troubleshoot: If mounting operation fails, make sure that you are using the Windows 10 version of DISM
that is installed with the Windows ADK and not an older version from your technician computer. Don’t
mount images to protected folders, such as your User\Documents folder. If DISM processes are interrupted,
consider temporarily disconnecting from the network and disabling virus protection.
Modify images
Add drivers
If you use an x64 Windows 10 image, add x64 drivers; if you use an x86 Windows 10 image, add x86 drivers.
1. Adding driver packages one by one. (.inf files) SampleDriver\driver.inf is a sample driver package that is
specific to the computer model. Type your own specific driver path. If you have multiple driver packages,
skip to the next step.
2. Multiple drivers can be added on one command line if you specify a folder instead of an .inf file. To install all
of the drivers in a folder and all its subfolders, use the /recurse option.
Important: If the driver contains only the installer package and doesn’t have an .inf file, you may choose to install
the driver in AUDIT mode by double-clicking the corresponding installer package. Some drivers may be
incompatible with Sysprep tool; they will be removed after sysprep generalize even if they have been injected
offline.
In this case, you need to add an extra parameter to USB-B\AnswerFiles\UnattendSysprep.xml in order to persist the
drivers in the image when the image will be generalized.
<PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
This property must be added to USB-B\AnswerFiles\UnattendSysprep.xml during generalize pass in order to persist
the drivers in the image. For more information about the details of this property and how to add it to an answer
file, see PersistAllDeviceInstalls.
Add language interface packs
Obtain the Windows 10 Language Interface Packs from Device Partner Center under the LIPs tab.
For more information about LIPs, see Add Language Interface Packs to Windows 10.
Important: LIP Versions must match other Windows component versions, for both the image and the
ADK.
If you use an x64 Windows 10 image, install x64 LIPs; if you use an x86 Windows 10 image, install x86 LIPs.
1. Copy the LIP to the USB-B\LanguagePack\x64 or USB-B\LanguagePack\x86 folder:
X86 architecture
IMPORTANT
If you install an update (hotfix, general distribution release [GDR], or service pack [SP]) that contains language-dependent
resources prior to installing a language pack, the language-specific changes in the update won't be applied when you add the
language pack. You need to reinstall the update to apply language-specific changes. To avoid reinstalling updates, install
language packs before installing updates.
TIP
If you encounter an error that says “The website has encountered a problem” when trying to download your updates,
try turning off the pop-up blocker in IE or temporarily disabling Protected Mode in IE.
4. After downloading your update packages, add them to the image one by one by using the following
command, substituting the filename in the command with the name of the files that you downloaded:
Amd64 architecture
5. Add updates to winre.wim (where they apply; not all updates apply to winre.wim)
Amd64 architecture
X86 architecture
3. To display an OEM specific desktop background picture, the image file must be placed in
%windir%\system32\OEM*Fabrikam.bmp* directory. Verify that the path is same in answer file
corresponding to oobeSystem > Microsoft-Windows-Shell-Setup > Themes > DesktopBackground
property. See the below image to add desktop background in an answer file.
Copy E:\StartLayout\layoutmodification.xml
c:\mount\windows\users\default\AppData\Local\Microsoft\Windows\Shell\
Note: If you don’t create a LayoutModification.xml file and you continue to use the Start Unattend
settings, the OS will use the Unattend answer file and take the first 12 SquareTiles or
DesktoporSquareTiles settings specified in the Unattend file. The system then places these tiles
automatically within the newly-created groups at the end of Start. The first six tiles are placed in the
first OEM group, and the second set of six tiles are placed in the second OEM group. If OEMName is
specified in the Unattend file, the value for this element is used to name the OEM groups that will be
created.
Copy the answer file
A system builder may want to make additional customizations through an unattend file. The sample unattend file
on USB-B contains additional common customizations.
Copy /y E:\AnswerFiles\Unattend.xml C:\Mount\Windows\Windows\Panther
Unmount images
1. Close all applications that might access files from the image
2. Commit the changes and unmount the Windows RE image:
where C is the drive letter of the drive that contains the image.
This process can take a few minutes.
3. Make a backup copy of the updated Windows RE image.
Troubleshoot: If you cannot see winre.wim under the specified directory, use the following command to set
the file visible:
attrib -h -a -s C:\mount\windows\Windows\System32\Recovery\winre.wim
Dism /export-image /sourceimagefile:c:\mount\windows\windows\system32\recovery\winre.wim /sourceindex:1
/DestinationImageFile:e:\images\winre_bak.wim
Del c:\mount\windows\windows\system32\recovery\winre.wim
Copy e:\images\winre_bak.wim c:\mount\windows\windows\system32\recovery\winre.wim
Dir "C:\mount\windows\Windows\System32\Recovery\winre.wim"
Use the following partition layout size guidance to determine the size of your recovery partition in
createpartitions-<firmware>.txt files. The amount of free space left is after you copy winre.wim to the
hidden partition.
Please reference Disk Partition rules for more information.
If the partition is less than 500 MB, it must have at least 50 MB of free space.
If the partition is 500 MB or larger, it must have at least 320 MB of free space.
If the partition is larger than 1 GB, we recommend that it should have at least 1 GB free.
rem == Windows RE tools partition ===============
create partition primary size=500
Optional: This section assumes you’d rather keep winre.wim inside of install.wim to keep your languages
and drivers in sync. If you’d like to save a bit of time on the factory floor, and if you’re OK managing these
images separately, you may prefer to pull winre.wim from the image and apply it separately.
5. Commit the changes and unmount the Windows image:
Where C is the drive letter of the drive that contains the image.
This process may take several minutes.
E:\Deployment\Walkthrough-Deploy.bat E:\Images\ModelSpecificImage.wim
Note: There are several pauses in the script. You will be prompted Y/N for the Apply operation if this is a
Compact OS deployment.
NOTE
Only use Compact OS on Flash drive based devices because Compact OS performance depends on the storage
device capabilities. Compact OS is NOT recommend on rotational devices. For more information, see Compact OS.
Exit
Obtain Office v16 in the desired language; this sample uses Engish X21-05414 Office 2016 v16 32-BIT X64
English OPK.
5. Copy the folder Office from mounted drive X21-32392 Office v16.3 English OPK\Software – DVD\X21-
32434 SW DVD5 Office Pro 2016 32 64 English C2ROPK Pro HS HB OEM v16.3\ X21-32434.img to USB-B
(where E:\ is drive letter for USB-B) E:\OfficeV16.
[Optional] If you applied a language interface pack, you may want to add the language interface pack for
Office 2016 as well. The below samples will show with the Language interface pack applied.
6. Notepad E:\Officev16\ConfigureO365Home.xml
7. Add language ID and verify SourcePath as in the following screenshot.
8. Close and save ConfigureO365Home.xml.
9. Open an elevated command prompt as administrator.
10. From E:\Officev16, type and run setup.exe /download ConfigureO365Home.xml:
CD E:\Officev16
Setup.exe /download ConfigureO365Home.xml
This will download the language packs for German and Japanese.
11. Type and run echo %errorlevel% and verify return code is 0.
12. Unplug USB-B from the technician computer.
Install Office 2016 on Reference PC
1. Plug USB-B into the reference computer, which is in Audit mode.
2. Find the drive letter for USB-B; for this example USB-B is E:.
3. Notepad ConfigureO365Home.xml.
4. Configure the SourcePath to point to USB-B E:\Officev16.
Note: the only Product ID that needs to be specified in the configuration.xml file is O365HomePremRetail. If
the user enters a key for another product, such as for Office Home & Student 2016, then Office will
automatically be configured as the product associated with that key.
5. Close and Save ConfigureO365Home.xml.
6. Open a command prompt and navigate to d:\Officev16.
7. Type:
notepad C:\Users\Default\AppData\Local\Microsoft\Windows\Shell\layoutmodification.xml.
Note: The Choice attribute is new. This allows different versions of Office to be pinned to the Start screen at
the same time. For now, Desktop2016 is the only valid value. Other values will be available in the future.
3. Close and save layoutmodification.xml.
Note: for recovery purposes the layoutmodification.xml will need to be copied during recovery.
4. Open a command prompt and type:
Once the machine is booted to desktop after going through OOBE, the Start menu will have these three tiles
appended as shown in the following diagram:
Prepare the system for Push Button Reset
This section provides guidance for setting up the recovery environment for Push Button Reset (PBR) scenarios.
Please reference Push-button reset and Windows Recovery Environment (Windows RE) and Hard Drives and
Partitions for more information.
Push-button reset, is a built-in recovery tool which allows users to recover the OS while preserving their data and
important customizations, without having to back-up their data in advance. It reduces the need for custom recovery
applications by providing users with more recovery options and the ability to fix their own PCs with confidence.
In Windows 10, the Push-button reset features have been updated to include the following improvements:
The Push-button reset user experience offers customization opportunities. Manufacturers can insert custom scripts,
install applications or preserve additional data at available extensibility points. The following Push-button reset
features are available to users with Windows 10 PCs:
Refresh your PC
Fixes software problems by reinstalling the OS while preserving the user data, user accounts, and important
settings. All other preinstalled customizations are restored to their factory state. In Windows 10, this feature
no longer preserves user-acquired Universal Windows apps.
Reset your PC
Prepares the PC for recycling or for transfer of ownership by reinstalling the OS, removing all user accounts
and contents (e.g. data, Classic Windows applications, and Universal Windows apps), and restoring
preinstalled customizations to their factory state.
Bare metal recovery
Restores the default or preconfigured partition layout on the system disk, and reinstalls the OS and
preinstalled customizations from external media.
Prepare ScanState
To start working with Push Button Reset, you'll need to copy ScanState to Data.
Use scanstate to capture Classic Windows applications and settings on your image.
Note: You'll use your technician PC to prepare ScanState.
1. On Technician PC Insert USB-B
2. Open Deployment and Imaging tools command prompt as administrator
3. Run the copydandi.cmd script file pointing to USB-B key
OEMs using an x64 Windows 10 image, make x64 Scanstate directory
mkdir c:\recovery\customizations
E:\ScanState_amd64\scanstate.exe /apps /ppkg C:\Recovery\Customizations\apps.ppkg
/i:c:\recovery\oem\regrecover.xml /config:E:\scanstate_amd64\Config_AppsAndSettings.xml /o /c /v:13
/l:C:\ScanState.log
del c:\scanstate.log
del c:\miglog.xml
4. Generalize the image by using the answer file which reflects the changes made in the section Update images
manually by using AUDIT MODE (online servicing).
These changes include Microsoft Office tile component pinned to the Start screen.
MD e:\scratchdir
dism /Cleanup-Image /Image:e:\ /StartComponentCleanup /resetbase /scratchdir:e:\scratchdir
9. Capture the image of the windows partition. This process takes several minutes.
Where E: is the volume label of Windows and F is the volume label of USB-B.
This will overwrite the image created in the section Deploy the image to new computers.
E:\Deployment\walkthrough-deploy.bat E:\Images\modelspecificimage.wim
Note: There are several pauses in the script. You will be prompted Y/N for the Apply operation if this is a Compact
OS deployment.
Note: Only use Compact OS on high end storage devices because Compact OS performance depends on the
storage device capabilities. Compact OS is NOT recommend on rotational devices or storage greater than 32 GB.
For more information, see Compact OS.
Remove USB-A and USB-B and type exit to reboot your computer with Windows 10.
Finalize deployment
1. Upon deploying your model specific image to destination computers, boot the computer with master image
for the first time in AUDIT mode
Important: In order to minimize the first boot time, (Boot > Specialize > OOBE > Start screen) specialize pass
must be completed in the factory. Specialize pass will configure hardware specific information which
Windows will run on.
For more information about the first boot time requirements, see Windows Policy for System Builders.
2. Please note that at the end of the section Update images manually by using AUDIT MODE (online servicing),
the system was sealed with OOBE mode. Please proceed with Audit. If the system boots in OOBE, press
Ctrl+Shift+F3 in order to pass OOBE and boot in audit mode.
3. If you want to apply additional steps, such as executing OEM diagnostics tests and so on, apply them here.
4. Finally, run the Sysprep tool (C:\Windows\System32\Sysprep\sysprep.exe) and seal the system back to
OOBE and Shutdown but without Generalize.
5. The system is ready to ship.
Important: If you are manufacturing a small amount of devices without using an image managing tool such
as disk duplicators or Windows Deployment Service, you can choose to use the following practice:
a. You can manufacture those devices by first booting in WinPE - inserting USB-A.
b. Then insert USB-B where final manufacturing image is contained.
c. Run Walktrough-Deploy script to apply the image.
d. After you applied the image, follow the steps in this Finalize deployment section.
e. Now the device is ready to be shipped with your final manufacturing image and PBR feature
implemented.
f. Finally, replicate the same procedure with the other devices.
Appendix
Differences between 64-bit and 32-bit deployment
It is recommended to consider 64-bit deployment versus 32-bit deployment disk footprint according to the storage
of the device you are manufacturing.
The overall deployment flow mentioned in this guide doesn’t differ between 64-bit and 32-bit deployment. Only
some of the resource versions and the way those resources are created differs. The following table covers the
x64/x86 distinctions.
Windows installed on Technican When Windows ADK gets installed on a Prepare your lab environment
Computer technican computer the the
deployment tools in the ADK would be
installed according to the architecture
of the Windows on technician
computer. In short if ADK is installed on
Windows x64, the tools would be
installed 64-bit version, or vice-versa.
Creating WinPE folder structure WinPE differs between x64 and x86 Create WinPE bootable USB
architecture, so you have to use
different commands to create a
different WinPE folder for each
architecture.
DISTINCTION DESCRIPTION RELATED SECTION
Update Packages for Windows Image Update package versions differ between Add update packages
different architectures. If you are
manufacturing a 64-bit Windows image
please use x64 update packages, and
vice-versa for 32-bit Windows.
Language Interface Packs IF you will be using x64 Windows 10 Prepare the system for recovery with
image, install x64 LIPs or if you will be Push-button reset
using x86 Windows 10 image install x86
LIPs.
Windows 10 ADK Download the Windows ADK Create WinPE bootable USB
Windows 10 x64/x86 DVD Media Obtain Windows 10 media which you Install Windows with basic
(desired language) will be customizing from Microsoft customizations
Authorized Distributor
Windows 10 Default Product Keys Default Product Keys are located at Customize the answer file
Device Partner Center listed under
Default product keys tab
Language interface packs LIPs are located at Device Partner Prepare the system for recovery with
Center listed under LIPs tab Push Button Reset
Microsoft Office v16.3 Obtain Microsoft Office v15.4 by Preload Microsoft Office single image
downloading from Device Partner v15.4 OPK
Center
References
Windows Guidelines for System Builders
Windows Policy for System Builders
OEM Windows Desktop Deployment and Imaging
Lab
6/6/2017 • 1 min to read • Edit Online
Getting ready to build and test Windows 10 desktop PCs? This lab provides strategies for designing base images
and updating them with command-line tools. The commands can be scripted, helping you quickly customize new
images for specific markets to meet your customers' needs.
Let's get started!
Preparation
Planning: Customizing reference images for different audiences
Deploy images
Get the tools needed to customize Windows
Get the sample scripts
Lab 1: Install Windows PE
Lab 2: Deploy Windows using a script
Customize Window images
In these labs, you'll modify the Windows image (install.wim). While you can perform most of these tasks in any
order, a few have dependencies:
Add languages before major updates. Major updates include hotfixes, general distribution releases, or
service packs. If you add a language later, you'll need to reinstall the updates.
Add major updates before apps. Thes apps include universal Windows apps and desktop applications. If you
add an update later, you'll need to reinstall the apps.
To make the changes, you'll mount the image contents into a temporary folder, and use tools like DISM to make
the changes. Unmount the images and redeploy.
Instead of having one device design that tries to fit everyone, Windows image management tools help you tailor
device designs to meet the specific needs of various customers.
To get started, we recommend choosing a hardware design that targets a specific audience, market, or price point.
Build base images for this design and test it. Next, modify the base images to create designs for for different
audiences, include branding, logos, languages, and apps.
Device types
Consider creating separate designs for different device types, such as low-cost or performance laptops, or low-cost
or performance desktops. Each of these styles has different sets of critical differentiators, such as battery life or
graphics performance.
Although Windows includes base drivers for many common devices, some hardware requires specialized device
drivers that must be installed and occasionally updated.
Many drivers are designed to be installed offline without booting the Windows image.
Use Windows Assessment tools to make sure that the apps and hardware that you're installing can perform well in
a variety of circumstances.
Architecture
If you plan to build devices with both 64-bit and 32-bit (x86) chipsets and architectures, you'll need separate base
images. You'll also need different versions of drivers, packages, and updates.
Regions
Consider creating different base images for different regions.
The resource files for Windows and other apps like Microsoft Office can be large - some resources like localized
handwriting and speech recognition resources are several hundred megabytes.
To save drive space, we've split up the language packs. This can help you preload more languages for your
customers or save space on your image. For example, to target a large region, you may preload the basic language
components such as text and user interface files for many areas within the region, but only include the handwriting
recognition for devices with pens, or only include voice and speech tools for Cortana on devices with integrated
microphones. Users can download these components later as needed.
Sample plan
This lab uses the following three sample hardware configurations.
HARDWARE CONFIGURATION: 1 1B 2
RAM 1 GB 2 GB 4 GB
Pen No Yes No
Notes:
We can build an image for Hardware Configuration 1B by using Hardware Configuration 1 as a base image.
We can't build Hardware Configuration 2 from either Hardware Configuration 1 or 1B, because they use a
different architecture.
Get the tools needed to customize Windows
Get the tools needed to customize Windows
12/6/2017 • 4 min to read • Edit Online
PCs
Here's how we'll refer to them:
Technician PC: Your work PC. This PC should have at least 15GB of free space for installing the Windows
Assessment and Deployment Kit (Windows ADK) and for modifying Windows images.
We recommend using Windows 10 for this PC. The minimum requirement is Windows 7 SP1, though this
requires additional tools or workarounds for tasks such as running PowerShell scripts and mounting .ISO
images.
For most tasks, you can use either an x86 or x64 PC. If you're creating x86 images, you'll need an x86-based
PC (or virtual machine) for a one-time task of generating a catalog file.
Reference device: A test PC or tablet that represents all of the devices in a single model line; for example,
the Fabrikam Notebook PC Series 1. This device must meet the Windows 10 minimum hardware
requirements.
You'll reformat this device as part of the walkthrough.
Storage
WinPE USB key: Must be at least 512MB and at most 32GB. This drive will be formatted, so save your data
off of it first. It should not be a Windows-to-Go key or a key marked as a non-removable drive.
Storage USB key (USB-B): A second USB key or an external USB hard drive for storing files. Minimum free
space: 8GB, using NTFS, ExFAT, or any other file system that allows files over 4GB. If your hardware allows it,
use USB 3.0 keys/drives and USB 3.0 ports to speed up file copy procedures. Note, some USB 3.0 keys don't
work with some USB 2.0 ports. We won't be reformatting this drive, so as long as you have enough free
space, you can reuse an existing storage drive.
To use a single storage drive, see WinPE: Store or split images to deploy Windows using a single USB drive
Software
Copy the following source files to the technician PC, rather than using external sources like network shares or
removable drives. This reduces the risk of interrupting the build process from a temporary network issue or from
disconnecting the USB device.
To complete this guide, get the recommended downloads in this section from https://www.microsoftoem.com.
The version numbers of the Windows ADK, the Windows image you're deploying, and the languages and features
you're adding must match.
This lab assumes the 64-bit architecture, so if you’re using the 32-bit version, change all mentions of x64 to x86.
Windows 10 (install.wim)
Windows Home 10, 32/64 English OPK
Mount the ISO file to a drive, and note the drive letter, for example, D.
Copy the D:\sources\install.wim file, and save it to the local drive, in the folder: C:\Images\Win10_x64\.
Windows Assessment and Deployment Kit (ADK ) for Windows 10
Windows ADK for Windows 10 or the most recent Windows 10 32/64 OPK ADK.
Customizations: Windows updates, languages, features, apps, and Microsoft Office
We also discuss how to add hardware drivers and other Windows apps in this guide, get those from the
hardware/software manufacturers.
Product keys
Get the default product keys for each Windows version from the Kit Guide Windows 10 Default Manufacturing Key
OEM PDF, which is on the ISO with the Windows image.
Get the distribution product keys that match the Windows 10 image.
Sample files: Create a deployment USB drive
1. Format a USB Drive with the NTFS file format, name it USB-B.
2. Download the USB-B.zip lab samples from the Microsoft download center, and extract the files to the drive.
@echo Apply-Image.bat
@echo Run from the reference device in the WinPE environment.
@echo.
@echo This script erases the primary hard drive and applies a new image.
@echo.
@echo Make sure that this script is run from the folder that contains the
@echo supporting scripts
@echo.
@echo UPDATE (November 2017)
@echo * Added support for FFU deployments.
@echo.
@echo UPDATE (JULY 2016):
@echo * This script stops just after applying the image.
@echo This gives you an opportunity to add siloed provisioning packages (SPPs)
@echo so that you can include them in your recovery tools.
@echo.
@echo After the script is complete, use apply-recovery.bat to finish
@echo After the script is complete, use apply-recovery.bat to finish
@echo setting up the recovery tools.
@echo.
@echo * This script creates a now includes support for the /EA variables for quicker
@echo image capture and recovery.
@echo.
@echo * This script now includes support for the /EA variables for quicker
@echo image capture and recovery.
@echo.
@echo * This script now checks to see if you're booted into Windows PE.
@echo.
@if not exist X:\Windows\System32 echo ERROR: This script is built to run in Windows PE.
@if not exist X:\Windows\System32 goto END
@if %1.==. echo ERROR: To run this script, add a path to a Windows image file.
@if %1.==. echo Example: ApplyImage D:\WindowsWithFrench.wim
@if %1.==. goto END
@echo *********************************************************************
@echo == Setting high-performance power scheme to speed deployment ==
@call powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
@echo *********************************************************************
@echo Checking to see the type of image being deployed
@if "%~x1" == ".wim" (GOTO WIM)
@if "%~x1" == ".ffu" (GOTO FFU)
@echo *********************************************************************
@if not "%~x1" == ".ffu". if not "%~x1" == ".wim" echo Please use this script with a WIM or FFU image.
@if not "%~x1" == ".ffu". if not "%~x1" == ".wim" GOTO END
:WIM
@echo Starting WIM Deployment
@echo *********************************************************************
@echo Checking to see if the PC is booted in BIOS or UEFI mode.
wpeutil UpdateBootInfo
for /f "tokens=2* delims= " %%A in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO
SET Firmware=%%B
@echo Note: delims is a TAB followed by a space.
@if x%Firmware%==x echo ERROR: Can't figure out which firmware we're on.
@if x%Firmware%==x echo Common fix: In the command above:
@if x%Firmware%==x echo for /f "tokens=2* delims= "
@if x%Firmware%==x echo ...replace the spaces with a TAB character followed by a space.
@if x%Firmware%==x goto END
@if %Firmware%==0x1 echo The PC is booted in BIOS mode.
@if %Firmware%==0x2 echo The PC is booted in UEFI mode.
@echo *********************************************************************
@echo Do you want to create a Recovery partition?
@echo (If you're going to be working with FFUs, and need
@echo to expand the Windows partition after applying the FFU, type N).
@SET /P RECOVERY=(Y or N):
@if %RECOVERY%.==y. set RECOVERY=Y
@echo Formatting the primary disk...
@if %Firmware%==0x1 echo ...using BIOS (MBR) format and partitions.
@if %Firmware%==0x2 echo ...using UEFI (GPT) format and partitions.
@echo CAUTION: All the data on the disk will be DELETED.
@SET /P READY=Erase all data and continue? (Y or N):
@if %READY%.==y. set READY=Y
@if not %READY%.==Y. goto END
@if %Firmware%.==0x1. if %RECOVERY%.==Y. diskpart /s CreatePartitions-BIOS.txt
@if %Firmware%.==0x1. if not %RECOVERY%.==Y. diskpart /s CreatePartitions-BIOS-FFU.txt
@if %Firmware%.==0x2. if %RECOVERY%.==Y. diskpart /s CreatePartitions-UEFI.txt
@if %Firmware%.==0x2. if not %RECOVERY%.==Y. diskpart /s CreatePartitions-UEFI-FFU.txt
@echo *********************************************************************
@echo == Apply the image to the Windows partition ==
@SET /P COMPACTOS=Deploy as Compact OS? (Y or N):
@if %COMPACTOS%.==y. set COMPACTOS=Y
@echo Does this image include Extended Attributes?
@echo (If you're not sure, type N).
@SET /P EA=(Y or N):
@if %EA%.==y. set EA=Y
@if %COMPACTOS%.==Y. if %EA%.==Y. dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\ /Compact /EA
@if not %COMPACTOS%.==Y. if %EA%.==Y. dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\ /EA
@if %COMPACTOS%.==Y. if not %EA%.==Y. dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\ /Compact
@if not %COMPACTOS%.==Y. if not %EA%.==Y. dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\
@echo *********************************************************************
@echo == Copy boot files to the System partition ==
W:\Windows\System32\bcdboot W:\Windows /s S:
@echo *********************************************************************
@echo Next steps:
@echo * Add Windows Classic apps (optional):
@echo DISM /Apply-SiloedPackage /ImagePath:W:\
@echo /PackagePath:"D:\App1.spp" /PackagePath:"D:\App2.spp" ...
@echo.
@echo * Configure the recovery partition with ApplyRecovery.bat
@echo.
@echo * Reboot:
@echo exit
@GOTO END
:FFU
@echo Starting FFU Deployment
@echo list disk > x:\listdisks.txt
@echo exit >> x:\listdisks.txt
@diskpart /s x:\listdisks.txt
@del x:\listdisks.txt
@echo Enter the disk number of the drive where you're going to deploy your FFU (usually 0).
@SET /P DISKNUMBER=(Enter the Disk Number from above):
@echo This will remove all data from disk %DISKNUMBER%. Continue?
@SET /P ERASEALL=(Y or N):
@if %ERASEALL%.==y. set ERASEALL=Y
@if %ERASEALL%==Y DISM /apply-ffu /ImageFile=%1 /ApplyDrive:\\.\PhysicalDrive%DISKNUMBER%
@if not %ERASEALL%==Y GOTO END
@echo FFU applied. Would you like to configure the recovery partition?
@SET /P CONFIGRECOVERY=(Y or N):
@if %CONFIGRECOVERY%.==y. SET CONFIGRECOVERY=Y
@if %CONFIGRECOVERY%==Y ApplyRecovery.bat
@if not %CONFIGRECOVERY%==Y GOTO END
:END
ApplyImage.bat relies on the following DiskPart scripts, which must be placed in the same folder:
CreatePartitions scripts
Use these scripts together with DiskPart to format and set up the hard disk partitions for Windows, including
recovery tools. Adjust the partition sizes to fill the drive as necessary.
CreatePartitions-UEFI.txt
Creates the System, MSR, Windows, and recovery tools partitions for UEFI-based PCs.
This script temporarily assigns these drive letters: System=S, Windows=W, and Recovery=R. The MSR partition
doesn't get a letter. The letter W is used to avoid potential drive letter conflicts. After the device reboots, the
Windows partition is assigned the letter C, and the other partitions don’t receive drive letters.
The Recovery partition must be the partition after the Windows partition to ensure winre.wim can be kept up-to-
date during life of the device.
The following diagram shows the resulting partition configuration:
rem == CreatePartitions-UEFI.txt ==
rem == These commands are used with DiskPart to
rem create four partitions
rem for a UEFI/GPT-based PC.
rem Adjust the partition sizes to fill the drive
rem as necessary. ==
select disk 0
clean
convert gpt
rem == 1. System partition =========================
create partition efi size=100
rem ** NOTE: For Advanced Format 4Kn drives,
rem change this value to size = 260 **
format quick fs=fat32 label="System"
assign letter="S"
rem == 2. Microsoft Reserved (MSR) partition =======
create partition msr size=16
rem == 3. Windows partition ========================
rem == a. Create the Windows partition ==========
create partition primary
rem == b. Create space for the recovery tools ===
shrink minimum=500
rem ** NOTE: Update this size to match the
rem size of the recovery tools
rem (winre.wim) **
rem == c. Prepare the Windows partition =========
format quick fs=ntfs label="Windows"
assign letter="W"
rem === 4. Recovery partition ======================
create partition primary
format quick fs=ntfs label="Recovery"
assign letter="R"
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001
list volume
exit
CreatePartitions-UEFI-FFU.txt
This script is based off of CreatePartitions-UEFI.txt, but it does not create a recovery partition. This is so that the
Windows partition is the last partition on the drive and can be expanded. If this script is used, the recovery
partition can be configured later with ApplyRecovery.bat.
rem == CreatePartitions-UEFI-FFU.txt ==
rem == These commands are used with DiskPart to
rem create four partitions
rem for a UEFI/GPT-based PC.
rem Adjust the partition sizes to fill the drive
rem as necessary. ==
select disk 0
clean
convert gpt
rem == 1. System partition =========================
create partition efi size=100
rem ** NOTE: For Advanced Format 4Kn drives,
rem change this value to size = 260 **
format quick fs=fat32 label="System"
assign letter="S"
rem == 2. Microsoft Reserved (MSR) partition =======
create partition msr size=16
rem == 3. Windows partition ========================
rem == a. Create the Windows partition ==========
create partition primary
rem == c. Prepare the Windows partition =========
format quick fs=ntfs label="Windows"
assign letter="W"
list volume
exit
CreatePartitions-BIOS.txt
Creates the System, Windows, and recovery tools partitions for BIOS-based PCs.
This script temporarily assigns these drive letters: System=S, Windows=W, and Recovery=R. The letter W is used
to avoid potential drive letter conflicts. After the device reboots, the Windows partition is assigned the letter C, and
the other partitions don’t receive drive letters.
The Recovery partition must be the partition after the Windows partition to ensure winre.wim can be kept up-to-
date during life of the device.
The following diagram shows the resulting partition configuration:
rem == CreatePartitions-BIOS.txt ==
rem == These commands are used with DiskPart to
rem create three partitions
rem for a BIOS/MBR-based computer.
rem Adjust the partition sizes to fill the drive
rem as necessary. ==
select disk 0
clean
rem == 1. System partition ======================
create partition primary size=100
format quick fs=ntfs label="System"
assign letter="S"
active
rem == 2. Windows partition =====================
rem == a. Create the Windows partition =======
create partition primary
rem == b. Create space for the recovery tools
shrink minimum=500
rem ** NOTE: Update this size to match the
rem size of the recovery tools
rem (winre.wim) **
rem == c. Prepare the Windows partition ======
format quick fs=ntfs label="Windows"
assign letter="W"
rem == 3. Recovery partition ====================
create partition primary
format quick fs=ntfs label="Recovery image"
assign letter="R"
set id=27
list volume
exit
CreatePartitions-BIOS-FFU.txt
This script is based off of CreatePartitions-BIOS.txt, but it doesn't create a recovery partition. This is so that the
Windows partition is the last partition on the drive and can be expanded. If this script is used, the recovery
partition can be configured later with ApplyRecovery.bat.
rem == CreatePartitions-BIOS-FFU.txt ==
rem == These commands are used with DiskPart to
rem create three partitions
rem for a BIOS/MBR-based computer.
rem Adjust the partition sizes to fill the drive
rem as necessary. ==
select disk 0
clean
rem == 1. System partition ======================
create partition primary size=100
format quick fs=ntfs label="System"
assign letter="S"
active
rem == 2. Windows partition =====================
rem == a. Create the Windows partition =======
create partition primary
rem == c. Prepare the Windows partition ======
format quick fs=ntfs label="Windows"
assign letter="W"
list volume
exit
ApplyRecovery.bat
Use this script to prepare the Windows recovery partition. This script is called by ApplyImage.bat, but can also be
run on its own.
Note: If you copy and paste the contents below to create a .bat file, you may get an error when detecting firmware.
For firmware detection to succeed, ensure that the lines that begin for /f "tokens=2* delims= " %%A has a tab
followed by a space in between delims= and " %%A .
@echo == ApplyRecovery.bat ==
@rem *********************************************************************
@echo Checking to see if the PC is booted in BIOS or UEFI mode.
wpeutil UpdateBootInfo
for /f "tokens=2* delims= " %%A in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO
SET Firmware=%%B
@echo Note: delims is a TAB followed by a space.
@if x%Firmware%==x echo ERROR: Can't figure out which firmware we're on.
@if x%Firmware%==x echo Common fix: In the command above:
@if x%Firmware%==x echo for /f "tokens=2* delims= "
@if x%Firmware%==x echo ...replace the spaces with a TAB character followed by a space.
@if x%Firmware%==x goto END
@if %Firmware%==0x1 echo The PC is booted in BIOS mode.
@if %Firmware%==0x2 echo The PC is booted in UEFI mode.
@echo *********************************************************************
@echo Do you already have a recovery partition on this disk? (Y or N):
@SET /P RECOVERYEXIST=(Y or N):
@if %RECOVERYEXIST%.==y. set RECOVERYEXIST=Y
@if %RECOVERYEXIST%.==Y. GOTO COPYTOTOOLSPARTITION
@if not %RECOVERYEXIST%.==Y. GOTO CREATEFFURECOVERY
@echo *********************************************************************
:COPYTOTOOLSPARTITION
@echo == Copy the Windows RE image to the Windows RE Tools partition ==
md R:\Recovery\WindowsRE
xcopy /h W:\Windows\System32\Recovery\Winre.wim R:\Recovery\WindowsRE\
@echo *********************************************************************
@echo == Register the location of the recovery tools ==
W:\Windows\System32\Reagentc /Setreimage /Path R:\Recovery\WindowsRE /Target W:\Windows
@echo *********************************************************************
@IF EXIST W:\Recovery\Customizations\USMT.ppkg (GOTO CUSTOMDATAIMAGEWIM) else goto HIDEWIMRECOVERYTOOLS
:CUSTOMDATAIMAGEWIM
@echo == If Compact OS, single-instance the recovery provisioning package ==
@echo.
@echo *Note: this step only works if you created a ScanState package called
@echo USMT.ppkg as directed in the OEM Deployment lab. If you aren't
@echo following the steps in the lab, choose N.
@echo.
@echo Options: N: No
@echo Y: Yes
@echo D: Yes, but defer cleanup steps to first boot.
@echo Use this if the cleanup steps take more than 30 minutes.
@echo defer the cleanup steps to the first boot.
@SET /P COMPACTOS=Deploy as Compact OS? (Y, N, or D):
@if %COMPACTOS%.==y. set COMPACTOS=Y
@if %COMPACTOS%.==d. set COMPACTOS=D
@if %COMPACTOS%.==Y. dism /Apply-CustomDataImage /CustomDataImage:W:\Recovery\Customizations\USMT.ppkg
/ImagePath:W:\ /SingleInstance
@if %COMPACTOS%.==D. dism /Apply-CustomDataImage /CustomDataImage:W:\Recovery\Customizations\USMT.ppkg
/ImagePath:W:\ /SingleInstance /Defer
@echo *********************************************************************
:HIDEWIMRECOVERYTOOLS
@echo == Hiding the recovery tools partition
if %Firmware%==0x1 diskpart /s %~dp0HideRecoveryPartitions-BIOS.txt
if %Firmware%==0x2 diskpart /s %~dp0HideRecoveryPartitions-UEFI.txt
@echo *********************************************************************
@echo == Verify the configuration status of the images. ==
W:\Windows\System32\Reagentc /Info /Target W:\Windows
@echo (Note: Windows RE status may appear as Disabled, this is OK.)
@echo *********************************************************************
@echo All done!
@echo Disconnect the USB drive from the reference device.
@echo Type exit to reboot.
@echo.
GOTO END
:CREATEFFURECOVERY
@echo *********************************************************************
@echo == Creating the recovery tools partition
@if %Firmware%==0x1 diskpart /s CreateRecoveryPartitions-BIOS.txt
@if %Firmware%==0x2 diskpart /s CreateRecoveryPartitions-UEFI.txt
@echo finding the Windows Drive
@echo *********************************************************************
@IF EXIST C:\Windows SET windowsdrive=C:\
@IF EXIST D:\Windows SET windowsdrive=D:\
@IF EXIST E:\Windows SET windowsdrive=E:\
@IF EXIST W:\Windows SET windowsdrive=W:\
@echo The Windows drive is %windowsdrive%
md R:\Recovery\WindowsRE
@echo *********************************************************************
@echo Finding Winre.wim
@IF EXIST %windowsdrive%Recovery\WindowsRE\winre.wim SET recoveryfolder=%windowsdrive%Recovery\WindowsRE\
@IF EXIST %windowsdrive%Windows\System32\Recovery\winre.wim SET
recoveryfolder=%windowsdrive%Windows\System32\Recovery\
@echo *********************************************************************
@echo copying Winre.wim
xcopy /h %recoveryfolder%Winre.wim R:\Recovery\WindowsRE\
@echo *********************************************************************
@echo == Register the location of the recovery tools ==
%windowsdrive%Windows\System32\Reagentc /Setreimage /Path R:\Recovery\WindowsRE /Target %windowsdrive%Windows
@echo *********************************************************************
@IF EXIST W:\Recovery\Customizations\USMT.ppkg (GOTO CUSTOMDATAIMAGEFFU) else goto HIDERECOVERYTOOLSFFU
:CUSTOMDATAIMAGEFFU
@echo == If Compact OS, single-instance the recovery provisioning package ==
@echo.
@echo *Note: this step only works if you created a ScanState package called
@echo USMT.ppkg as directed in the OEM Deployment lab. If you aren't
@echo following the steps in the lab, choose N.
@echo.
@echo Options: N: No
@echo Y: Yes
@echo D: Yes, but defer cleanup steps to first boot.
@echo Use this if the cleanup steps take more than 30 minutes.
@echo defer the cleanup steps to the first boot.
@SET /P COMPACTOS=Deploy as Compact OS? (Y, N, or D):
@if %COMPACTOS%.==y. set COMPACTOS=Y
@if %COMPACTOS%.==d. set COMPACTOS=D
@if %COMPACTOS%.==Y. dism /Apply-CustomDataImage
/CustomDataImage:%windowsdrive%Recovery\Customizations\USMT.ppkg /ImagePath:%windowsdrive% /SingleInstance
@if %COMPACTOS%.==D. dism /Apply-CustomDataImage
/CustomDataImage:%windowsdrive%Recovery\Customizations\USMT.ppkg /ImagePath:%windowsdrive% /SingleInstance
/Defer
:HIDERECOVERYTOOLSFFU
@rem *********************************************************************
@echo == Hiding the recovery tools partition
@if %Firmware%==0x1 diskpart /s HideRecoveryPartitions-BIOS.txt
@if %Firmware%==0x2 diskpart /s HideRecoveryPartitions-UEFI.txt
@echo *********************************************************************
@echo == Verify the configuration status of the images. ==
%windowsdrive%Windows\System32\Reagentc /Info /Target %windowsdrive%Windows
@echo (Note: Windows RE status may appear as Disabled, this is OK.)
@echo *********************************************************************
@echo All done!
@echo Disconnect the USB drive from the reference device.
@echo Type exit to reboot.
@GOTO END
:END
ApplyRecovery.bat relies on the following DiskPart scripts, which must be placed in the same folder:
CreateRecoveryPartitions-UEFI.txt
rem == CreateRecoveryPartitions-UEFI.txt ==
select disk 0
select partition 3
assign letter="W"
rem == extend the Windows partition ==
shrink minimum=500
extend
rem == b. Create space for the recovery tools
shrink minimum=500
rem ** NOTE: Update this size to match the
rem size of the recovery tools
rem (winre.wim) **
rem === Create Recovery partition ======================
create partition primary
format quick fs=ntfs label="Recovery"
assign letter="R"
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001
list volume
exit
CreateRecoveryPartitions-BIOS.txt
rem == CreateRecoveryPartitions-BIOS.txt ==
select disk 0
select partition 2
assign letter="W"
rem == extend the Windows partition ==
shrink minimum=500
extend
rem == b. Create space for the recovery tools
shrink minimum=500
rem ** NOTE: Update this size to match the
rem size of the recovery tools
rem (winre.wim) **
rem == c. Prepare the Recovery partition ======
select disk 0
create partition primary
format quick fs=ntfs label="Recovery image"
assign letter="R"
set id=27
list volume
exit
HideRecoveryPartitions-UEFI.txt
HideRecoveryPartitions-BIOS.txt
<LayoutModificationTemplate
xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification"
xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout"
xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout"
Version="1">
<RequiredStartGroupsCollection>
<RequiredStartGroups
Region="DE|ES|FR|GB|IT|US">
<AppendGroup
Name="Fabrikam Group 1">
<start:Tile
AppUserModelID="Microsoft.Office.Word_8wekyb3d8bbwe!microsoft.word"
Size="2x2"
Row="0"
Column="0"/>
<start:DesktopApplicationTile
DesktopApplicationID="Microsoft.Windows.Explorer"
Size="2x2"
Row="0"
Column="2"/>
<start:Tile
AppUserModelID="Microsoft.Office.Excel_8wekyb3d8bbwe!microsoft.excel"
Size="2x2"
Row="0"
Column="4"/>
</AppendGroup>
<AppendGroup
Name="Fabrikam Group 2">
<start:Tile
AppUserModelID="Microsoft.Reader_8wekyb3d8bbwe!Microsoft.Reader"
Size="2x2"
Row="0"
Column="0"/>
<start:DesktopApplicationTile
DesktopApplicationID="http://www.bing.com/"
Size="2x2"
Row="0"
Column="2"/>
<start:DesktopApplicationTile
DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start
Menu\Programs\Accessories\Paint.lnk"
Size="2x2"
Row="0"
Column="4"/>
</AppendGroup>
</RequiredStartGroups>
<RequiredStartGroups>
<AppendGroup
Name="Fabrikam Group 1">
<start:Tile
AppUserModelID="Microsoft.Office.Word_8wekyb3d8bbwe!microsoft.word"
Size="2x2"
Row="0"
Column="0"/>
<start:SecondaryTile
AppUserModelID="Microsoft.Windows.Spartan_cw5n1h2txyewy!Microsoft.Spartan.Spartan"
TileID="FabrikamWeblinkTile"
Arguments="http://www.fabrikam.com"
DisplayName="Fabrikam"
Square150x150LogoUri="ms-appx:///Assets/SpartanMedium.png"
ShowNameOnSquare150x150Logo="true"
BackgroundColor="#FF112233"
Size="2x2"
Row="0"
Column="2"/>
</AppendGroup>
</RequiredStartGroups>
</RequiredStartGroupsCollection>
<TopMFUApps>
<Tile AppUserModelID="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
</TopMFUApps>
</LayoutModificationTemplate>
@echo off
@echo.
@echo This script will set the Device.SpeechRecognition.DefaultMicGain values.
@echo.
setlocal
setlocal ENABLEDELAYEDEXPANSION
set RegPath=HKLM\Software\Microsoft\Speech_OneCore\AudioInput\MicWiz
set RegKey=DefaultDefaultMicGain
set RegValue=0x%_HEXVAL%
:ToHex
set _DECVAL=%1
set _HEXVAL=
set _VAL=%1
if %1 LSS 0 (
REM break the number into two parts so that we can output the
REM full value within the bounds of a 32 bit signed value
set /A _offset="-(-2147483647 - !_VAL!) + 2"
set /A _VAL="!_offset! / 16 + 0x7FFFFFF"
set /A _P="!_offset! %% 16 + 0xF"
if !_P! GEQ 16 (
set /A _VAL="!_VAL! + 1"
set /A _P="!_P! %% 16"
)
if !_P! LEQ 9 set _HEXVAL=!_P!!_HEXVAL!
if "!_P!" == "10" set _HEXVAL=A!_HEXVAL!
if "!_P!" == "11" set _HEXVAL=B!_HEXVAL!
if "!_P!" == "12" set _HEXVAL=C!_HEXVAL!
if "!_P!" == "13" set _HEXVAL=D!_HEXVAL!
if "!_P!" == "14" set _HEXVAL=E!_HEXVAL!
if "!_P!" == "15" set _HEXVAL=F!_HEXVAL!
)
:hexloop
set /A _P="%_VAL% %% 16"
if %_P% LEQ 9 set _HEXVAL=%_P%%_HEXVAL%
if "%_P%" == "10" set _HEXVAL=A%_HEXVAL%
if "%_P%" == "11" set _HEXVAL=B%_HEXVAL%
if "%_P%" == "12" set _HEXVAL=C%_HEXVAL%
if "%_P%" == "13" set _HEXVAL=D%_HEXVAL%
if "%_P%" == "14" set _HEXVAL=E%_HEXVAL%
if "%_P%" == "15" set _HEXVAL=F%_HEXVAL%
set /A _VAL="%_VAL% / 16"
if "%_VAL%" == "0" goto :endloop
goto :hexloop
:InputPrompt
@echo.
@echo Incorrect Usage.
@echo.
@echo Please input a decimal value as a parameter.
@echo.
@echo Example:
@echo SpeechSetting.cmd 4200
@echo.
@echo This example sets the MicGain as 42 percent which is 0x1068.
@echo.
goto :end
:Error
@echo.
@echo Error occurred.
@echo.
goto :end
:endloop
set _offset=
set _P=
set _VAL=
goto :eof
:end
@echo off
@rem Run this script from the same folder that includes install.wim
cls
md mount
dism /mount-image /mountdir:mount /imagefile:install.wim /index:1
if exist appx.txt del appx.txt
if exist applist.txt del applist.txt
if exist appremove.cmd del appremove.cmd
dism /image:mount /get-provisionedappxpackages > appx.txt
findstr /c:"PackageName" appx.txt > applist.txt
setlocal enabledelayedexpansion
set INTEXTFILE=applist.txt
set OUTTEXTFILE=appremove.cmd
set SEARCHTEXT=PackageName :
set REPLACETEXT=dism /image:mount /remove-provisionedappxpackage /packagename:
set OUTPUTLINE=
Remove_apps_in_audit_mode.cmd
This script assumes you’re running in audit mode on the reference PC.
@echo off
@rem Use MOUNT folder in folder where script is run
cls
dism /mount-image /mountdir:mount /imagefile:install.wim /index:1
if exist appx.txt del appx.txt
if exist applist.txt del applist.txt
if exist appremove.cmd del appremove.cmd
dism /image:mount /get-provisionedappxpackages > appx.txt
findstr /c:"PackageName" appx.txt > applist.txt
setlocal enabledelayedexpansion
set INTEXTFILE=applist.txt
set OUTTEXTFILE=appremove.cmd
set SEARCHTEXT=PackageName :
set REPLACETEXT=dism /image:mount /remove-provisionedappxpackage /packagename:
set OUTPUTLINE=
BootToAudit
Add an answer file to the Windows image in C:\mount\windows\Windows\Panther\unattend.xml to instruct it to
boot into audit mode. You can create this answer file in Windows System Image Manager.
BootToAudit-x64
BootToAudit-x86
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<!-- BootToAudit-x86.xml -->
<settings pass="oobeSystem">
<component name="Microsoft-Windows-Deployment" processorArchitecture="x86"
publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance">
<Reseal>
<Mode>Audit</Mode>
</Reseal>
</component>
</settings>
</unattend>
EnableCustomizations.cmd
rem EnableCustomizations.cmd
rem Add back Windows settings, Start menu, and OOBE.xml customizations
copy "%TARGETOSDRIVE%\Recovery\OEM\Unattend.xml" "%TARGETOS%\Panther\Unattend.xml" /y
copy "%TARGETOSDRIVE%\Recovery\OEM\LayoutModification.xml"
"%TARGETOSDRIVE%\Users\Default\AppData\Local\Microsoft\Windows\Shell\LayoutModification.xml" /y
xcopy "%TARGETOSDRIVE%\Recovery\OEM\OOBE\Info" "%TARGETOS%\System32\Info\" /s
rem Recommended: Create a pagefile for devices with 1GB or less of RAM.
wpeutil CreatePageFile /path=%TARGETOSDRIVE%\PageFile.sys /size=256
To learn more about using extensibility points for push-button reset, see Add a script to push-button reset
features.
ReinstallInboxApps-x86.cmd
Windows Preinstallation Environment (WinPE) is a small, command-line based operating system. You can use it
to capture, update, and optimize Windows images, which you'll do in later sections. In this section, you'll prepare
a basic WinPE image on a bootable USB flash drive and try it out.
The Windows PE USB must be at least 512MB and at most 32GB. It should not be a Windows-to-Go key or a key
marked as a non-removable drive.
Troubleshooting: If this doesn't work, make sure you're in the Deployment and Imaging Tools
Environment, and not the standard command prompt.
Try it out
1. Connect the WinPE USB drive to your reference device.
2. Turn off the device, and then boot to the USB drive. You usually do this by powering on the device and
quickly pressing a key (for example, the Esc key or the Volume up key).
Note On some devices, you might need to go into the boot menus to choose the USB drive. If you're given
a choice between booting in UEFI mode or BIOS mode, choose UEFI mode. To learn more, see Boot to UEFI
Mode or Legacy BIOS mode. If the device does not boot from the USB drive, see the troubleshooting tips in
WinPE: Create USB Bootable drive.
WinPE starts at a command line, and runs wpeinit to set up the system. This can take a few minutes.
Leave this PC booted to Windows PE for now.
Lab 2: Deploy Windows using a script
Lab 2: Deploy Windows using a script
12/6/2017 • 4 min to read • Edit Online
You can use scripts to take a Windows image and deploy Windows onto new PCs quickly. You can modify these
scripts to change the size of the drive partitions, or to completely automate deployment.
md E:\images
where D: is the drive from the Windows ISO and E: is the USB storage drive.
Step 2: Copy the deployment scripts to the root of the USB storage
drive
Copy the sample scripts to the root of the USB storage drive. If you're going to be deploying FFU images, make
sure you use the FFU scripts. Download a copy here
1. Boot the reference device to Windows PE using the Windows PE USB key.
2. Take out the Windows PE USB key and put in the Storage USB key.
3. Find the drive letters of the USB key by using diskpart:
diskpart
DISKPART> list volume
DISKPART> exit
For example, the drives can be lettered like this: C = Windows; D = USB storage drive.
4. Format the primary hard drive, create the partitions, and apply the image by using the pre-made sample
scripts.
The script ApplyImage.bat uses diskpart scripts to create the partitions and define the partition layout.
These scripts must be placed in the same folder. You can update these scripts to change the partition sizes.
NOTE
If you're going to be capturing and deploying your final image as an FFU, choose the options to not configure
recovery. This allows you to expand the Windows partition, if needed, after you apply your FFU. You can configure
recovery after you expand the Windows partition.
D:
D:\Deployment\ApplyImage.bat D:\Images\install.wim
D:\ADKTools\amd64\WimMountAdkSetupAmd64.exe /Install /q
D:\ADKTools\amd64\DISM.exe /ImagePath:C:\ /Apply-SiloedPackage /PackagePath:E:\SPPs\office16_base.spp
/PackagePath:E:\SPPs\office16_fr-fr.spp /PackagePath:E:\SPPs\office16_de-de.spp
D:\Deployment\ApplyRecovery.bat
Step 6: Reboot
Disconnect the drives, then reboot ( exit ).
The PC should reboot into Windows. While you’re waiting for the preparation phase to complete, go back to your
technician PC and continue with the lab.
TIP
If the device does not boot, turn on the device, and press the key that opens the boot-device selection menu (for example,
the Esc key). Select the hard drive as your boot device, and continue.
Add device drivers to your images to support your hardware. Some have different installation procedures:
.inf-style drivers: Many drivers include an information file (with an .inf extension) to help install the driver.
These can be installed using tools described in this topic.
.exe-style drivers: Drivers without an .inf file often must be installed like typical Windows desktop
applications. We'll show you how to add those in Lab 10: Add desktop applications and settings with siloed
provisioning packages (SPPs).
Boot-critical drivers: Graphics and storage drivers may sometimes need to be added to the Windows image
(as shown in this topic), as well as the Windows PE image (as shown earlier in Lab 1: Install Windows PE), and
in the Windows recovery image. We'll show you how to update the recovery image later in Lab 12: Update the
recovery image.
Step 1: Backup your Windows image file (recommended while testing new designs)
1. Click Start, and type deployment. Right-click Deployment and Imaging Tools Environment and then
select Run as administrator.
2. Make a backup of the image file:
md C:\mount\windows
Dism /Mount-Image /ImageFile:"C:\Images\install.wim" /Index:1 /MountDir:"C:\mount\windows" /Optimize
Where /Index:1 refers to the image you want to mount. For the Windows 10 Home/Pro edition, use /Index:2 to
select the Home edition.
This step can take several minutes.
Troubleshooting:
Don’t mount images to protected folders, such as your User\Documents folder.
If DISM processes are interrupted, consider temporarily disconnecting from the public network and
disabling virus protection.
If you've mounted an image to the folder before, try cleaning up the resources associated with the
mounted image:
Dism /Cleanup-Mountpoints
For some DISM commands, you'll need to make sure that you are using the Deployment and Imaging
Tools Environment rather than the standard command prompt.
2. Install a group of drivers by using the /Recurse option. This adds all drivers with a .inf file in that folder and
all its subfolders.
Warning: While /Recurse can be handy, it's easy to bloat your image with it. Some driver packages include
multiple .inf driver packages, which often share payload files from the same folder. During installation, each
.inf driver package is expanded into a separate folder, each with a copy of the payload files. We've seen
cases where a popular driver in a 900MB folder added 10GB to images when added with the /Recurse
option.
Review the resulting list of packages and verify that the list contains the driver.
Try it out
Step 5: Apply the image to a new PC Use the steps from Lab 2: Deploy Windows using a script to copy the
image to the storage USB drive, apply the image, and boot it up. The short version:
1. Copy the image file to the storage drive.
2. Boot the reference device to Windows PE using the Windows PE USB key.
3. Find the drive letter of the storage drive ( diskpart, list volume, exit ).
4. Apply the image: D:\Deployment\ApplyImage.bat D:\Images\install.wim .
5. Disconnect the drives, then reboot ( exit ).
Step 6: Verify drivers
1. After the PC boots, either create a new user account, or else press Ctrl+Shift+F3 to reboot into the built-in
administrator account (This is also known as audit mode).
2. Right-click the Start button, and select Command Prompt (Admin).
3. Verify that the drivers appear correctly:
Learn more
When creating several devices with the identical hardware configuration, you can speed up installation time
and first boot-up time by maintaining driver configurations when capturing a Windows image.
Lab 4: Add languages
Lab 4: Add languages
12/18/2017 • 5 min to read • Edit Online
Notes
Add languages before major updates. Major updates include hotfixes, general distribution releases, or
service packs. If you add a language later, you'll need to reinstall the updates.
Add major updates before apps. Thes apps include universal Windows apps and desktop applications. If
you add an update later, you'll need to reinstall the apps. We'll show you how to add these later in Lab 6:
Add universal Windows apps
Add your languages to your recovery image, too: Many common languages can be added to your
recovery image. We'll show you how to add these later in Lab 12: Update the recovery image.
Language interface pack Microsoft-Windows- Requires a specific fully- UI text, including basic
Client-Language- localized or partially-localized
Interface-Pack_x64_ca- Cortana capabilities. To
es language pack. Example: ca- learn more, see Available
ES requires es-ES. Language Packs for
Windows.
COMPONENT SAMPLE FILE NAME DEPENDENCIES DESCRIPTION
Example for adding Japanese, x64. Note, Japanese requires a font pack.
Dism /Add-Package /Image:"C:\mount\windows" /PackagePath="C:\Languages\ja-jp x64\Microsoft-Windows-
Client-Language-Pack_x64_ja-jp" /PackagePath="C:\Languages\ja-jp x64\Microsoft-Windows-LanguageFeatures-
Basic-ja-jp-Package.cab" /PackagePath="C:\Languages\ja-jp x64\Microsoft-Windows-LanguageFeatures-OCR-ja-
jp-Package.cab" /PackagePath="C:\Languages\ja-jp x64\Microsoft-Windows-LanguageFeatures-Handwriting-ja-
jp-Package.cab" /PackagePath="C:\Languages\ja-jp x64\Microsoft-Windows-LanguageFeatures-TextToSpeech-ja-
jp-Package.cab" /PackagePath="C:\Languages\ja-jp x64\Microsoft-Windows-LanguageFeatures-Speech-ja-jp-
Package.cab" /PackagePath:"C:\Languages\ja-jp x64\Microsoft-Windows-LanguageFeatures-Fonts-Jpan-
Package.cab" /LogPath=C:\mount\dism.log
Not every region has fonts or capability packs for every feature.
2. Verify that the language package is part of the image:
where C is the drive letter of the drive that contains the image.
Review the resulting list of packages and verify that the list contains the package. For example:
where C is the drive letter of the drive that contains the image.
Review the resulting list of packages and verify that the list contains the packages. For example:
4. Change the default language to match the preferred language for your customers.
5. Change the default timezone to match the timezone for your customers. See List of timezones.
Step 3: Remove the base language (only needed for non-English regions)
1. To save space, you can remove English language components when deploying to non-English regions. You
can either uninstall them in the reverse order from how you add them, or remove them all at once in the
same DISM /remove-package command.
dism /Remove-Package /Image:"c:\mount\windows" /PackageName:Microsoft-Windows-Client-LanguagePack-
Package~31bf3856ad364e35~amd64~en-US~10.0.16299.15 /PackageName:Microsoft-Windows-LanguageFeatures-
Basic-en-us-Package~31bf3856ad364e35~amd64~~10.0.16299.15 /PackageName:Microsoft-Windows-
LanguageFeatures-Handwriting-en-us-Package~31bf3856ad364e35~amd64~~10.0.16299.15 /PackageName:Microsoft-
Windows-LanguageFeatures-OCR-en-us-Package~31bf3856ad364e35~amd64~~10.0.16299.15 /PackageName:Microsoft-
Windows-LanguageFeatures-Speech-en-us-Package~31bf3856ad364e35~amd64~~10.0.16299.15
/PackageName:Microsoft-Windows-LanguageFeatures-TextToSpeech-en-us-
Package~31bf3856ad364e35~amd64~~10.0.16299.15 /LogPath=C:\mount\dism.fod2.log
TIP
The package names in the command above may be different than the ones in your image, depending on the version
of Windows you're using. Run dism /Image:"C:\mount\windows" /get-packages to get the names of the packages
in your image.
where C is the drive letter of the drive that contains the image.
3. Verify that the language components are no longer part of the image:
where C is the drive letter of the drive that contains the image.
Try it out
Step 5: Apply the image to a new PC
Use the steps from Lab 2: Deploy Windows using a script to copy the image to the storage USB drive, apply the
image, and boot it up. The short version:
1. Copy the image file to the storage drive.
2. Boot the reference device to Windows PE using the Windows PE USB key.
3. Find the drive letter of the storage drive ( diskpart, list volume, exit ).
4. Apply the image: D:\Deployment\ApplyImage.bat D:\Images\install.wim .
5. Disconnect the drives, then reboot ( exit ).
Step 6: Verify updates
1. After the PC boots, if you have multiple languages installed, you should receive a list of lanugages during
the out-of-box experience.
2. Either create a new user account, or else press Ctrl+Shift+F3 to reboot into the built-in administrator
account (This is also known as audit mode).
3. Right-click the Start button, and select Command Prompt (Admin).
4. Verify that the language packages appear correctly:
Review the resulting list of packages and verify that the list contains the package. For example:
For many customizations, like adding .inf-style drivers, Windows updates or upgrading the edition, you can mount
and edit the Windows image. Mounting an image maps the contents of a file to a temporary location where you
can edit the files or use DISM to perform common deployment tasks.
Notes
Add languages before major updates. Major updates include hotfixes, general distribution releases, or
service packs. If you add a language later, you'll need to re-add the updates.
Add major updates before apps. Thes apps include universal Windows apps and desktop applications. If
you add an update later, you'll need to re-add the apps.
For major updates, update the recovery image too: These may include hotfixes, general distribution
releases, service packs, or other pre-release updates. We'll show you how to update these later in Lab 12:
Update the recovery image.
If a Servicing Stack Update (SSU) is available, you must install it before applying the most recent
General Distribution Release (GDR) or any future GDRs. See Windows 10 update history to see the most
recent GDR.
Note: To add drivers that include an installation package, see Lab 10: Add desktop applications and settings with
siloed provisioning packages (SPPs)
Try it out
Step 5: Apply the image to a new PC
Use the steps from Lab 2: Deploy Windows using a script to copy the image to the storage USB drive, apply the
image, and boot it up. The short version:
1. Copy the image file to the storage drive.
2. Boot the reference device to Windows PE using the Windows PE USB key.
3. Find the drive letter of the storage drive ( diskpart, list volume, exit ).
4. Apply the image: D:\Deployment\ApplyImage.bat D:\Images\install.wim .
5. Disconnect the drives, then reboot ( exit ).
Step 6: Verify updates
1. After the PC boots, either create a new user account, or else press Ctrl+Shift+F3 to reboot into the built-in
administrator account (This is also known as audit mode).
2. Right-click the Start button, and select Command Prompt (Admin).
3. Verify that the edition is correct:
Review the resulting list of packages and verify that the list contains the package. For example:
5. Each package will usually be a new KB, and will increase the build revision number of Windows on the
device. The revision number of windows a device can be found in the following registry key:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\UBR .
Add apps to your images to support different customer needs. Some have different installation procedures:
Windows universal platform apps (UWP apps): These can be added or re-installed using tools described
in this topic.
Windows desktop applications: We'll show you how to add those in Lab 10: Add desktop applications
and settings with siloed provisioning packages (SPPs).
Notes
Add languages before major updates. Major updates include hotfixes, general distribution releases, or
service packs. If you add a language later, you'll need to reinstall the updates.
Add major updates before apps. These apps include universal Windows apps and desktop applications. If
you add an update later, you'll need to reinstall the apps.
There's no longer monthly updates of the inbox apps. This process changed for Windows 10, version
1607. See the communication on the MyOEM Portal:
In the future, Microsoft will release updated versions of the apps only when Microsoft releases full
updated versions of Windows.
OEMs will need to incorporate the updated apps at the same time they incorporate the broader
Windows release.
When adding 3rd party apps, follow the Windows Store OEM Program Guide. You must comply with
all Store Program terms and conditions, and related documents.
Add/reinstall apps
Step 2: Add/reinstall inbox apps (required whenever adding languages)
NOTE
In previous versions of Windows, it was required to first remove inbox apps. This is no longer required, and if you do, the
commands may fail.
1. Go to https://microsoftoem.com and get the App Update OPK. This package includes the Windows 10 inbox
apps for the most current Windows release.
2. Extract the package to a folder, for example, E:\apps\amd64.
3. Add/reinstall the inbox apps. The following example shows you how to reinstall the 3D Builder inbox app.
Repeat these steps for each of the inbox apps (with the exception of AppConnector) by substituting the
appropriate package.
Partial example:
where C is the drive letter of the drive that contains the image.
This process may take several minutes.
Try it out
Step 7: Apply the image to a new PC
Use the steps from Lab 2: Deploy Windows using a script to copy the image to the storage USB drive, apply the
Windows image and the recovery image, and boot it up. The short version:
1. Copy the image file to the storage drive.
2. Boot the reference device to Windows PE using the Windows PE USB key.
3. Find the drive letter of the storage drive ( diskpart, list volume, exit ).
4. Apply the image: D:\Deployment\ApplyImage.bat D:\Images\install.wim .
5. Disconnect the drives, then reboot ( exit ).
Step 8: Verify apps
1. After the PC boots, either create a new user account, or else press Ctrl+Shift+F3 to reboot into the built-in
administrator account (This is also known as audit mode).
2. Check the Start Menu to make sure the apps are available.
Lab 7: Change settings, enter product keys, and run scripts with an answer file (unattend.xml)
Lab 7: Change settings, enter product keys, and run
scripts with an answer file (unattend.xml)
12/6/2017 • 8 min to read • Edit Online
Answer files (or Unattend files) can be used to modify Windows settings in your images during Setup. You can
also create settings that trigger scripts in your images that run after the first user creates their account and picks
their default language.
To learn about Windows customizations, see the most recent OEM Policy Document (OPD).
As an example, we'll add a setting that shows you how to automatically boot to a maintenance mode called audit
mode. This mode allows you to perform additional tests, and capture changes. We'll use audit mode in the next
few labs.
Order = 1 (Determines the order that commands are run, starting with 1.)
4. Add a registry key. In this example, we add keys for the OEM Windows Store program. Use the same
process as adding a script, using CMD /c REG ADD .
For Windows 10 Customer Systems, you may use the OEM Store ID alone or in combination with a Store
Content Modifier (SCM) to identify an OEM brand for the OEM Store. By adding a SCM, you can target
Customer Systems at a more granular level. For example, you may choose to target commercial devices
separately from consumer devices by inserting unique SCMs for consumer and commercial brands into
those devices.
Add RunAsynchronousCommands for each registry key to add. (Right-click RunAsynchronousCommand
Properties and click Insert New AsynchronousCommand).
Set the Internet Explorer default search engine: Create a RunAsynchronous command as shown above to
add a registry key:
Path = `CMD /c REG.exe add
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\InternetSettings\Configuration m /v
PartnerSearchCode /t REG_DWORD /d "https://search.fabrikam.com/search?p={searchTerms}" /f`
Description = Changes the Internet Explorer default browser to Fabrikam Search
Order = 3
RequiredUserInput = false
Save drive space by reducing or turning off the hiberfile. The hiberfile helps speed up the time after the
system powers up or recovers from low-power states. Create a RunAsynchronous command as shown
below. To learn more, see Compact OS, single-instancing, and image optimization: RAM, Pagefile.sys, and
Hiberfil.sys
or
@rem Check to see if your drivers are digitally signed, and send output to a log file.
md C:\Fabrikam
C:\Windows\System32\dxdiag /t C:\Fabrikam\DxDiag-TestLogFiles.txt
MkDir c:\mount\windows\Windows\Panther
Copy D:\AnswerFiles\BootToAudit-x64.xml C:\mount\windows\Windows\Panther\unattend.xml
MkDir c:\mount\windows\Fabrikam
Copy D:\AnswerFiles\Fabrikam.bmp C:\mount\windows\Fabrikam\Fabrikam.bmp
Copy D:\AnswerFiles\SampleCommand.cmd C:\mount\windows\Fabrikam\SampleCommand.cmd
where C is the drive letter of the drive that contains the mounted image.
This process may take several minutes.
Try it out
Step 9: Apply the image to a new PC Use the steps from Lab 2: Deploy Windows using a script to copy the
image to the storage USB drive, apply the Windows image and the recovery image, and boot it up. The short
version:
1. Copy the image file to the storage drive.
2. Boot the reference device to Windows PE using the Windows PE USB key.
3. Find the drive letter of the storage drive ( diskpart, list volume, exit ).
4. Apply the image: D:\Deployment\ApplyImage.bat D:\Images\install.wim .
5. Disconnect the drives, then reboot ( exit ).
You can add your own branding and license terms to Windows.
For multi-region or multi-language images, you can create region specific license terms. These display to the user
during the first login experience, based on the region or language that they choose.
Note: If the license terms are included, the OEM must include a version of the license terms in each language that is
preinstalled onto the PC. You can read more about creating license terms at OEM license terms.
Use the examples in the USB-B.zip key.
2. Add subfolders for each language using the Language Decimal Identifier corresponding the language. Do
this step for each language pack added to the Windows image.
For example, if en-us and de-de language packs are added to the Windows image, add a folder named
“1033” (representing en-us language) under C:\mount\windows\Windows\System32\oobe\info\default.
Then add a folder named “1031” (representing de-de language) under the same directory.
md c:\mount\windows\windows\system32\oobe\info\default\1033
md c:\mount\windows\windows\system32\oobe\info\default\1031
3. Create license terms documents using the .rtf file format for each language specified. Move each license
term document to the corresponding language folder. For example:
5. Create an oobe.xml file to specify the agreement.rtf file path. Windows will automatically look for the
associated agreement.html file.
7. For Chinese Hong Kong, add the following OOBE.xml file. (In Windows 10 version 1607, the Chinese Hong
Kong language pack was merged into the Chinese Taiwan language pack, so for this region, these steps are
now required).
File: c:\mount\windows\Windows\System32\OOBE\Info\OOBE.xml
8. Verify that each language folder contains an oobe.xml file, an agreement.rtf file, and an agreement.html
file in that corresponding language.
Create image info file
1. Create an csup.txt file to specify when the Windows image was created. This file must include the date that
the image was created, in the form of 'MM-DD-YYYY', with no other characters, on a single line at the top of
the file.
10-05-2017
MkDir c:\mount\windows\windows\system32\OEM
Copy D:\OEM c:\mount\windows\windows\system32\OEM
where C is the drive letter of the drive that contains the image.
This process may take several minutes.
Try it out
Apply the image to a new PC Use the steps from Lab 2: Deploy Windows using a script to copy the image to the
storage USB drive, apply the Windows image and the recovery image, and boot it up. The short version:
1. Copy the image file to the storage drive.
2. Boot the reference device to Windows PE using the Windows PE USB key.
3. Find the drive letter of the storage drive ( diskpart, list volume, exit ).
4. Apply the image: D:\Deployment\ApplyImage.bat D:\Images\install.wim .
5. Disconnect the drives, then reboot ( exit ).
You can use audit mode to customize Windows using the familiar Windows environment. In audit mode, you can
add Windows desktop applications, change system settings, add data, and run scripts.
To make sure your audit mode changes are included in the recovery image, you'll need to capture these changes
into a provisioning package using ScanState. This image gets used by the system recovery tools to restore your
changes if things go wrong. You can optionally save drive space by running the applications directly from the
compressed recovery files; this is known as single-instancing.
If you want to capture the changes in an image and apply it to other devices, you'll need to use the Sysprep tool to
generalize the image.
IMPORTANT
Don't overwrite the existing DISM files on the WinPE image.
<?xml version="1.0"?>
<Configuration>
<Add OfficeClientEdition="32" SourcePath="\\Server\Share\">
<Product ID="HomeStudentRetail">
<Language ID="en-us"/>
</Product>
</Add>
<Display Level="None"/>
</Configuration>
2. On the reference computer, install Office 2016 using the configuration file:
OEMTA This mode supports the try, buy, or activate experience of the
OEM mode as well as supporting AFO and AFO late binding.
This mode supports Office activation through the device’s
Windows product key, which means the customer wouldn’t
need to enter a 5x5 product key code.
NOTE
Recommended: Delete the ScanState log file: del C:\Recovery\Scanstate.log .
The Sysprep tool reseals the device. This process can take several minutes. After the process completes, the
device shuts down automatically.
WARNING
If you're using siloed provisioning packages (SPPs), do not set the image to boot to audit mode again (sysprep
/audit). Instead, set it to boot to OOBE, and if you need to boot to audit again, add an answer file with the
Mode:Audit setting. This will be fixed in future versions.
2. Boot the device into Windows PE. To do this, you may need to press the key that opens the boot-device
selection menu for the device (for example, the Esc key or Volume Up key).
Select the option in the firmware menus to boot to the USB flash drive.
WARNING
If Windows begins booting instead of Windows PE, you must generalize the device again before capturing the image:
After Windows boots, press Ctrl+Shift+F3 to enter audit mode. The device will reboot. Generalize the device again:
C:\Windows\System32\Sysprep\sysprep /oobe /generalize /shutdown .
3. Optional: speed up the optimization and image capture processes by setting the power scheme to High
performance:
powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
diskpart
DISKPART> list volume
DISKPART> exit
For example, the drives can be lettered like this: C = Windows; D is the lab USB key, and E is an external hard
drive.
Note that some partitions might not receive a drive letter.
md c:\temp
where C is the drive letter of the Windows partition. You can specify the /Defer parameter with /Resetbase
to defer any long-running cleanup operations to the next automatic maintenance. But we highly
recommend you only use /Defer as an option in the factory where DISM /Resetbase requires more than 30
minutes to complete.
Step 7: Capture the image
Capture the image of the Windows partition.
where C is the drive letter of the Windows partition and Final changes is the image name.
The DISM tool captures the Windows partition into a new image file. This process can take several minutes.
If you receive an: "A parameter is incorrect" error message when you try to capture or copy the file to the USB key,
the file might be too large for the destination file system. Copy the file to a different drive that is formatted as
NTFS.
NOTE
You can also choose to capture an image of the whole drive, including partition information, in a full flash update image
(FFU). See DISM Image Management Command-Line Options for available command line options for capturing an FFU.
Try it out
Step 6: Apply the image to a new PC Use the steps from Lab 2: Deploy Windows using a script to copy the
image to the storage USB drive, apply the Windows image and the recovery image, and boot it up. The short
version:
1. Copy the image file to the storage drive.
2. Boot the reference device to Windows PE using the Windows PE USB key.
3. Find the drive letter of the storage drive ( diskpart, list volume, exit ).
4. Apply the image: D:\Deployment\ApplyImage.bat D:\Images\install.wim .
5. Disconnect the drives, then reboot ( exit ).
Install Windows desktop applications and system settings by capturing them into siloed provisioning packages
(SPPs).
SPPs are a new type of provisioning package that is available starting with Windows 10, version 1607. In
previous versions of Windows 10, to capture these applications, you'd capture them all at once into a single
provisioning package.
With SPPs, you can capture individual Windows desktop applications, .exe-style drivers, and Windows settings.
You can then apply these to your PCs after you've applied the Windows image. This provides more flexibility for
the manufacturing process and helps reduce the time required to build PCs that run Windows.
SPPs also support capturing add-on packs for apps that include optional components, like application language
packs.
After you apply the SPPs, they'll be automatically included in the recovery tools.
When you apply SPPs to a Compact OS system, the applications in that SPP are single-instanced automatically to
save space.
See Siloed provisioning packages to learn more about capturing different types of settings, drivers, and
applications.
Notes
To add these apps to the taskbar and start menu, you'll need to update the LayoutModification.xml and
TaskbarLayoutModification.xml files, we'll show you this in Lab 11: Add Start tiles and taskbar pins. New
versions of these files can simply be copied into the image or to the destination device directly.
For Microsoft Office, this is required: you must add Start tiles and taskbar pins. if you don't add it to the
Start menu, Windows will remove the Office files during the OOBE boot phase.
The Sysprep tool reseals the device. This process can take several minutes. After the process
completes, the device shuts down automatically.
c. To capture more add-on packs:
Reinstall Windows and the Office base app, and capture the next add-on pack. or
For VMs, revert back to the checkpoint, apply the base package, then capture the next add-on
pack.
Recommended: Delete the ScanState log files: del C:\ScanState.log del c:\miglog.xml
5. To capture more apps:
Reinstall Windows, then capture the next app or
For VMs, revert back to the checkpoint, then capture the next app.
W:\ADKTools\amd64\WimMountAdkSetupAmd64.exe /Install /q
3. Apply the SPPs. This example applies the Office base pack, plus two language packs: fr-fr and de-de.
To learn more, see Siloed provisioning packages. For syntax, see DISM Image Management Command-
Line Options.
Apply the recovery image
1. Apply the recovery image after applying the SPPs: D:\Deployment\ApplyRecovery.bat
Verify apps
1. After the PC boots, either create a new user account, or else press Ctrl+Shift+F3 to reboot into the built-in
administrator account (This is also known as audit mode).
2. See if your Windows desktop applications and add-ons are installed.
3. Use Regedit to check to see if the registry key is installed.
Lab 11: Add Start tiles and taskbar pins
Lab 11: Add Start tiles and taskbar pins
12/6/2017 • 5 min to read • Edit Online
<RequiredStartGroups
Region="DE|ES|FR|GB|IT|US">
3. Specify the tiles you want to add within an AppendGroup. OEMs can add a maximum of two
AppendGroup. The following example shows two groups called “Fabrikam Group 1” and “Fabrikam Group
2”, which contain tiles that will be applied if the device country/region matches what’s specified in Region
(in this case, the regions are Germany, Spain, France, United Kingdom, Italy, and United States). Each group
contains three tiles and the various elements you need to use depending on the tile that you want to pin to
Start.
<RequiredStartGroups
Region="DE|ES|FR|GB|IT|US">
<!-- OEMs can add a maximum of two AppendGroup. Each AppendGroup specifies a group of
tiles that will be appended to Start. -->
<AppendGroup
Name="Fabrikam Group 1">
<!-- Add the News Universal Windows app to Start -->
<start:Tile
AppUserModelID="Microsoft.Office.Word_8wekyb3d8bbwe!microsoft.word"
Size="2x2"
Row="0"
Column="0"/>
<!-- Add a Windows desktop application with a known AppUserModelID -->
<start:DesktopApplicationTile
DesktopApplicationID="Microsoft.Windows.Explorer"
Size="2x2"
Row="0"
Column="2"/>
<!-- Add the Excel Preview Universal Windows app -->
<start:Tile
AppUserModelID="Microsoft.Office.Excel_8wekyb3d8bbwe!microsoft.excel"
Size="2x2"
Row="0"
Column="4"/>
</AppendGroup>
<AppendGroup
Name="Fabrikam Group 2">
<!-- Add a Windows 8.1 app -->
<start:Tile
AppUserModelID="Microsoft.Reader_8wekyb3d8bbwe!Microsoft.Reader"
Size="2x2"
Row="0"
Column="0"/>
<!-- Web link tile with associated .url file is in legacy Start Menu folder. This requires
a shortcut or .url file to be added in one of several legacy Start Menu directories, such
as
"%APPDATA%\Microsoft\Windows\Start Menu\Programs\"
or the all users profile "%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\" -->
<start:DesktopApplicationTile
DesktopApplicationID="http://www.bing.com/"
Size="2x2"
Row="0"
Column="2"/>
<!-- Add a Windows desktop application link in a legacy Start Menu folder. You must add the
.lnk file
in the specified location when the device first boots. -->
<start:DesktopApplicationTile
DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start
Menu\Programs\Accessories\Paint.lnk"
Size="2x2"
Row="0"
Column="4"/>
</AppendGroup>
</RequiredStartGroups>
The following example shows one group called “Fabrikam Group 1”, which will be applied if the device
country/region doesn’t match any of the ones specified in the previous RequiredStartGroups.
<!-- Non-region specific group -->
<RequiredStartGroups>
<AppendGroup
Name="Fabrikam Group 1">
<!-- Add the Word Preview Universal Windows app -->
<start:Tile
AppUserModelID="Microsoft.Office.Word_8wekyb3d8bbwe!microsoft.word"
Size="2x2"
Row="0"
Column="0"/>
<!-- Add the Excel Preview Universal Windows app -->
<start:Tile
AppUserModelID="Microsoft.Office.Excel_8wekyb3d8bbwe!microsoft.excel"
Size="2x2"
Row="0"
Column="2"/>
</AppendGroup>
</RequiredStartGroups>
5. Optionally, you can add up to 3 apps to the frequently used section of the system area. The following
example shows how to add the calculator app to the frequently used system area.
<!-- Add the calculator app to the frequently used system area -->
<TopMFUApps>
<Tile AppUserModelID="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
</TopMFUApps>
C:\Mount\Windows\Users\Default\AppData\Local\Microsoft\Windows\Shell\
2. To add a taskbar layout in Windows 10, version 1607, you can either add a similar taskbar layout
modification file (see additional steps here), or use traditional unattend settings.
where C is the drive letter of the drive that contains the image.
This process may take several minutes.
Verify apps
1. After the PC boots, either create a new user account, or else press Ctrl+Shift+F3 to reboot into the built-in
administrator account (This is also known as audit mode).
2. Check the Start Menu to make sure the apps are available.
3. Check the Start Menu and taskbar and make sure the apps you selected are pinned correctly.
Lab 12: Update the recovery image
Lab 12: Update the recovery image
12/6/2017 • 7 min to read • Edit Online
If the system can't boot to the Windows image, it will fail over to the Windows Recovery Environment (WinRE).
WinRE can repair common causes of unbootable operating systems. WinRE is based on Windows Preinstallation
Environment (WinPE), and to make it work for your customers, you can add drivers, languages, Windows PE
Optional Components, and other troubleshooting and diagnostic tools.
The WinRE image is included inside the Windows 10 and Windows Server 2016 images, and is eventually copied
to the Windows RE tools partition on the destination PC or device. To modify it, you'll mount the Windows image,
then mount the WinRE image inside it. Make your changes, unmount the WinRE image, then unmount the
Windows image.
You should update your recovery image to ensure a consistent recovery experience whenever you:
Add boot-critical .inf-style drivers, such as the graphics and storage drivers for Lab 1: Install Windows PE.
Add major updates to Windows, like general distribution releases (Lab 5: Add updates and upgrade the
edition).
Add new languages, like you did in Lab 4: Add languages. (This isn’t always possible, as not all languages
have Windows RE equivalents.)
Notes
This lab assumes you’d rather keep winre.wim inside of install.wim to keep your languages and
drivers in sync. If you’d like to save a bit of time on the factory floor, and if you’re OK managing
these images separately, you may prefer to remove winre.wim from the image and apply it
separately.
If a Servicing Stack Update (SSU) is available, you'll have to install it before applying the most recent
General Distribution Release or any future GDRs. See Windows 10 update history for information
about the most recent GDR.
md C:\mount\winre
Where C is the drive letter of the drive that contains the image.
This step can take several minutes.
Troubleshooting: If winre.wim cannot be seen under the specified directory, use the following command
to set the file visible:
attrib -h -a -s C:\mount\windows\Windows\System32\Recovery\winre.wim
Example: Add a collection of drivers from a folder and its subfolders, use the /Recurse option:
2. Set the default recovery language to match the preferred language for your customers.
3. Optional: Remove languages from Windows RE (only needed for non-English regions)
When you remove languages from Windows, remove them from Windows RE to save space.
You can either use the /PackagePath switch (which requires a matching version of Windows and the
Windows ADK) or the /PackageName switch (which requires identifying the package including the version
number).
Example:
where C is the drive letter of the drive that contains the image.
5. Review the resulting list of packages and verify that the list contains the package. For example:
del c:\mount\windows\windows\system32\recovery\winre.wim
Dir "C:\mount\windows\Windows\System32\Recovery\winre.wim"
Adjust the size of the deployment scripts so they includes enough room for winre.wim plus some free
space.
Note If WinRE.wim is more than 470,000,000 bytes, this step is required.
a. Convert the file size into megabytes (size in bytes ÷ 1048576 = size in MB).
b. Calculate free space needed for the WinRE partition based on the Disk partition rules. WinRE.wim file
size:
Up to 450MB: You'll need 50MB free space. (450MB used + 50 free = 500MB)
450MB-680MB: You'll need 320MB free space.
Over 680MB: You'll need 1024MB free space.
c. Modify the CreatePartitions deployment scripts: CreatePartitions-UEFI.txt, CreatePartitions-UEFI-FFU.txt,
CreatePartitions-BIOS.txt, and CreatePartitions-BIOS-FFU.txt with the new values. Example:
where C is the drive letter of the drive that contains the image.
This process may take several minutes.
Try it out
Step 9: Apply the image to a new PC Use the steps from Lab 2: Deploy Windows using a script to copy the
image to the storage USB drive, and apply your Windows image to a PC.
Note, you'll now include the steps to add the recovery image:
The short version:
1. Copy the image file to the storage drive.
2. Boot the reference device to Windows PE using the Windows PE USB key.
3. Find the drive letter of the storage drive ( diskpart, list volume, exit ).
4. Apply the image: D:\Deployment\ApplyImage.bat D:\Images\install.wim , or
D:\Deployment\ApplyImage.bat D:\Images\oemffu.ffu .
5. Apply the recovery image: D:\Deployment\ApplyRecovery.bat , or follow the prompts in the deployment
scripts to apply the recovery partition.
6. Disconnect the drives, then reboot ( exit ).
Step 10: Verify drivers and packages
1. After the PC boots, either create a new user account, or else press Ctrl+Shift+F3 to reboot into the built-in
administrator account (This is also known as audit mode).
2. Click the Start button, click the Power icon, then hold down the Shift key and select Restart.
If the boot-critical drivers have been successfully applied, you should see the Windows recovery
environment.
If languages have been successfully added, you'll either see the new language (for a single language
image) or be prompted for your language (for a multi-language image).
Lab 13: Shrink your image size
Lab 13: Shrink your image size
7/13/2017 • 1 min to read • Edit Online
Optimize your Windows image to save space on the PC, to speed up transfers to new devices, and to make it easier
to store.
To do this, we'll use DISM tools that check for duplicate files. We'll mark the files for removal. These files won't be
removed until we export the image.
Next steps
When you're managing multiple Windows images, you can save even more space by combining them together.
Learn how: Append a Volume Image to an Existing Image Using DISM.
Manufacturing Windows Engineering Guide (WEG)
3/7/2018 • 24 min to read • Edit Online
The Manufacturing WEG provides original equipment manufacturer (OEM) and ODM partners with a roadmap of
the ideal manufacturing process for Windows 10 devices, with guidance for potential pitfalls and opportunities to
streamline the process.
Manufacturing overview
Many decisions that affect manufacturability are made early in the engineering effort of a new device, so careful
consideration should be made to ensure the lowest overhead production process is selected. Every extra minute
spent on the manufacturing floor equates to extra cost for the final product. The Manufacturing WEG is intended to
provide OEM and ODM partners with a roadmap of the ideal manufacturing process that brings together software
and hardware on the factory floor. This WEG also provides opportunities to streamline the process and guidance
for how to plan for and avoid common problems. Our manufacturing and deployment recommendations are
meant to help you:
Optimize the image disk footprint on desktops
Enable Windows deployment on small capacity disks on desktops
Shorten image deployment time
Simplify the imaging process
Simplify OEM Activation (OA3) injection/reporting process on desktops. Mobile devices do not require
activation.
Test and calibrate the device on the assembly line
Support other key scenarios to build great devices
For this document, a generic version of the desktop manufacturing process would look like this:
The manufacturing process for mobile devices would look like this:
The Manufacturing WEG is not intended to communicate the Windows Minimum Hardware Requirements or OEM
Policy Document (OPD). The WHCR and OPD documents take precedence over any information in the
Manufacturing WEG. You must comply with WHCR and OPD.
Overall considerations
Manufacturing path
There are two general manufacturing paths you can take depending on your business—Build to Stock (BTS) and
Build to Order (BTO). As you review the guidelines in this document, consider the manufacturing path for the
device in order to prioritize investments in each phase and save as much time as possible for your customized
process.
For a walkthrough using desktop devices, see our manufacturing end-to-end lab.
For mobile devices, you must use the BTS manufacturing path.
Build to order (BTO )
BTO devices start with a basic image and then receive the majority of their customizations during the
manufacturing process.
The primary advantage is the flexible software bill of materials, which allows for late-breaking changes. The
drawbacks include a more complex image creation and manufacturing process, extra time on the factory floor, and
growing image sizes.
Build to stock (BTS )
BTS devices have images that are customized almost entirely in the lab. BTS processes are simpler to plan and
produce, are faster on the factory floor, have higher quality control, and have a controlled disk size. BTS devices still
need to allow for late breaking changes on the factory floor. For desktop editions of Windows 10, many of these
changes can be done using offline servicing.
Push-button reset
The push-button reset tools no longer require a separate full-system recovery image on a separate partition. This
can save several gigabytes of space. When users need to refresh or reset the device, they’ll be able to keep their
installed Windows updates, rather than downloading and installing them all again. They’ll also keep all of the
customizations that you’ve provided.
The new partition layout resembles the traditional partition layouts from Windows 8.1, except the Windows RE
partition is now moved to the end of the drive, and there is no longer a need for a separate full-system recovery
partition.
To avoid compatibility issues, use the new version of Windows PE when working on the reference device in the
image creation lab.
Region-specific policy for Skype removal on desktop
Windows-provided apps are included in all Windows images by default. These apps cannot be modified except
where explicitly stated in the Windows OEM Policy Document (OPD).
If you are required to remove the inbox Skype app due to policy requirements, you can use the DISM.exe tool or
the DISM Windows PowerShell cmdlets to remove the app. For more information about this policy requirement,
see the most recent OEM Policy Document.
To remove Skype online in audit mode from Windows PowerShell:
dir %windir%\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
4. Add the registry value. For example, using a .reg file from your USB stick:
regedit /s e:\registry\regFile.reg
It is recommended that you disable the service offline before entering audit mode. But you can also disable it
online in audit mode. You must generalize the image after you disable the service. To disable the app readiness
service online:
1. In audit mode, start regedit .
2. Navigate to HKLM\Software\Microsoft\Windows\CurrentVersion\AppReadiness DisableInAuditMode.
3. Set the value of the key to 1.
Run Sysprep generalize before continuing.
[HKLM\System\CurrentControlSet\Services\Tpm\WMI\NoAutoProvision] (REG_DWORD) to 1
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TPM\WMI]
"NoAutoProvision"=dword:00000001
diskpart /s F:\CreatePartitions-UEFI.txt
ApplyImage F:\Images\ThinImage.wim
For more information, see Capture and Apply Windows, System, and Recovery Partitions.
Optional: Use the same image as a recovery image on a separate USB flash drive. This USB disk no longer
needs to be sourced from an authorized replicator. For more info, see Create media to run push-button reset
features.
4. Boot the device into audit mode.
Make any final image modifications. This is where many BTO modifications are made.
If APPX apps were installed before additional language packs were added, reinstall the apps so they can
support the new languages. This includes inbox applications.
Microsoft strongly advises that OEMs run DISM with the /StartComponentCleanup /resetbase flags to
gain additional free disk space.
Ensure .NET Framework apps are compiled by running the following commands
Create the OA3 computer build report (CBR) using OAtool.exe, inject the key into firmware, and
validate the provisioning.
If you’re using Windows Preinstallation Environment (WinPE) 5.x, fix the timestamps. (This step is not
necessary if you’re using WinPE for Windows 10).
dir %windir%\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
Run Sysprep /oobe to prepare the system for the end user.
Enable Secure Boot (if implemented).
Quality assurance phase
Quality assurance should be run on a sample of machines throughout the production run to ensure all
customizations have been successfully installed. This QA pass should also be used to validate the OA3
implementation.
Considerations
Once the system has gone through OOBE for this QA pass, it will need to be reset in order to assure the end-user
experience is excellent.
Goals
Assure a good customer experience and reduce time spent rebuilding machine.
Implementation
The device should return to the production line to be re-imaged.
Remanufacturing
Once the device has passed through OOBE (for any reason) the device needs to be reimaged. In the factory, the
device can simply be added back onto the Software Download Station after the TPM has been cleared (if equipped).
If the device needs to be serviced in the field by a 3rd party, then Push Button Reset should be used. This will
guarantee the machine is returned back to the full factory configuration while still remaining simple to execute.
Considerations
While PBR has all the functions needed for factory remanufacturing, it does not provide the ability to script the
actions and does not provide actionable error codes needed for automation that would be necessary in large scale
production.
Goals
Ensure a good customer experience, while protecting the user data.
Implementation
To clear the TPM use the following commands:
Manufacturing checklist
Windows 10 manufacturing task timeline
You can use this checklist to plan your manufacturing tasks.
Prerequisite Pre-EV EV DV PV
manufacturing
work:
TASK PRE-EV PHASE EV PHASE DV PHASE PV PHASE
ODM chosen? ✔ - - -
OEM access to ✔ - - -
Windows 10?
ODM access to ✔ - - -
Windows 10?
OEM access to ✔ - - -
Manufacturing WEG?
ODM access to ✔ - - -
Manufacturing WEG?
ODM points of ✔ - - -
contact identified?
OEM points of ✔ - - -
contact identified?
ODM kick-off? ✔ - - -
OEM kick-off? ✔ - - -
Regular - ✔ - -
manufacturing call?
Deployment: Pre-EV EV DV PV
OEM understanding ✔ - - -
of deployment
concepts
ODM understanding ✔ - - -
of deployment
concepts
Using Windows 10 - ✔ - -
DISM
Using Windows 10 - ✔ - -
Windows PE
Extended attributes - ✔ - -
applied via DISM
OEM understanding - ✔ - -
of push-button reset
concepts
ODM understanding - ✔ - -
of push-button reset
concepts
Recommended - - ✔ -
partition layout to use
for Windows RE and
push-button reset?
If a non-standard - - ✔ -
partition layout is
used, is bare-metal
recovery configured?
Refresh/reset time is - - - ✔
within guidelines?
OEM understanding - ✔ - -
of Windows RE
concepts
ODM understanding - ✔ - -
of Windows RE
concepts
Windows RE is - - ✔ -
enabled
Windows RE location - - ✔ -
is correct
Manufacturing: Pre-EV EV DV PV
Windows RE partition - ✔ - -
size (MB) and position
on selected disk
OEM understanding ✔ - - -
of security concepts
ODM understanding ✔ - - -
of security concepts
Watermark off? - - - ✔
Drivers signed by - - - ✔
Microsoft?
Re-manufacturing - - ✔ -
process complete
[factory]
Re-manufacturing - - ✔ -
process complete
[field service]
OA 3.0: Pre-EV EV DV PV
TASK PRE-EV PHASE EV PHASE DV PHASE PV PHASE
Using updated - - ✔ -
OA3tool.exe
Validate image/key - - ✔ -
offline
Injection done in - - ✔ -
[Windows PE]
[Windows]
Refer to the OEM
Activation 3.0 section.
Appendix
Small disk footprint optimization
The basic disk footprint of Windows 10 x86 with Office and 2GB of RAM will contain:
WinRE 500MB
Total ~23GB
Assumptions:
Disk footprint calculated using GetDiskFreeSpaceEx()
Data is collected immediately after OS setup, prior to NGEN running, prior to Idle Tasks.
Measurement includes pagefiles
Windows Update is disabled
Build has multiple runs; the max footprint is used in this report
Drive capacity is converted into Base-2 sizes:32GB == 32,000,000,000 bytes == 30518MiB (or 29GiB).
Language packs
Language packs comprise some of the largest disk space additions an OEM is likely to make. A language with all its
optional components included can be estimated at 275MB each (size varies based on language) while Office
language packs can be estimated at 300MB (also depending on language).
Windows will trim unused language packs once the end-user selects a primary language during OOBE. After
they're removed, these languages won't be available through push-button reset.
In order to maintain a smaller disk footprint, consider reducing the amount of languages installed on each shipping
SKU.
Servicing
Adding Windows Update KB packages can add significantly to the size of the disk. To reduce the footprint of an
image after adding updates:
1. Install KB and reboot if prompted
2. From an elevated command prompt, run the following commands:
Graphics drivers
A Windows device should ship with the correct DirectX Graphics Driver for the system hardware. Failing to install
the correct driver results in a fallback to a software-based graphics driver. This results in degraded experiences with
Windows, including slower first sign-in performance.
Recommendation: Install the correct graphics driver for your hardware while in audit mode.
Frequently asked questions
Windows PE
Question: Can I use the new WinPE to deploy, maintain and service previous Windows versions?
Answer: Updates to WinPE will not affect the currently supported Windows versions. You can use the
updated WinPE to deploy previous Windows versions including Windows 7.
Question: Do I have to migrate to the new deployment tools available as part of Windows 10?
Answer: No you don’t. You only need to update to the newer version of the deployment tools (WinPE,
DISM) if you want to implement Compact OS.
Question: How does disk footprint optimization impact my PXE environment?
Answer: You only need to update your PXE environment to the newer version of the deployment tools
(WinPE, DISM) if you are executing an “apply” while in your PXE environment. If you are only executing a
download (file copy from server to client), you don’t have to update your PXE environment.
Push-button recovery (PBR) and Windows Recovery Environment (WinRE)
Question: Will WinRE also be updated?
Answer: Yes, a new WinRE.wim is needed.
Question: Can the user still create a PBR USB key?
Answer: Yes. If the default partition layout is used, then no additional setup is required by the OEM to
enable this.
Storage
Question: Do you only support solid state disks?
Answer: No, we now support solid-state and traditional rotational media. We recommend that single-
instancing is only used on solid-state disks, due to performance issues.
Question: Can I use single-instancing of provisioning packages on a dual disk configuration (HDD + SSD)?
Answer: Single-instancing can only be implemented on the same disk.
Disk footprint
Question: How will you delete the language packs that the user does not choose during OOBE?
Answer: The language packs are deleted from the device, and will no longer be available during push-
button recovery operations.
Question: How are you calculating disk size? For example, you report a disk size of 14.8 GB on a 16 GB disk.
Answer: The disk capacity is converted into Base-2. For example, 16,000,000,000 (billion bytes) is equal to
~14.8 GB.
Question: Can I only use Compact OS on small devices, such as those with 1 GB RAM and 16 GB disk?
Answer: Compact OS can be applied to any 32-bit or 64-bit platform with >=16GB of solid state storage.
Question: Do you recommend using 16 GB disk on a 64-bit platform running 64-bit Windows?
Answer: We recommend a minimum disk capacity of 32 GB for 64-bit Windows.
Imaging and deployment
Question: What are the changes to the DISM command to support Compact OS?
Answer: You can use DISM /Apply-Image … /Compact and /Apply-CustomDataImage. For more info, see
DISM Image Management Command-Line Options.
Question: Does Compact OS support both GPT and MBR partition layout?
Answer: Yes.
Question: Is an updated OA3 tool required with Windows 10?
Answer: Yes.
Question: Can I still use Windows SIM, unattend answer files and settings with Windows 10?
Answer: Yes, though some settings may have changed. See Changed answer file settings from Windows 8.1
and Windows Server 2012 R2.
Language Packs and apps
Question: Can we use multiple language packs?
Answer: Yes, however, we strongly recommend that you validate the disk footprint impact of the number of
languages (Windows, Office, drivers and apps) per image.
Question: Is there a change in how I install language packs?
Answer: Yes, you'll apply the base lp.cab in the same way as you did before in order to get multiple UI
options, but to be able to enter text or get support, you'll need to add optional language components. For
more info, see Add Language Packs to Windows.
Question: Is there a change in how I install desktop or Microsoft Store apps?
Answer: There is no change in how you install desktop or Microsoft Store apps from Windows 8.1.
Question: What is the user experience on a multi-language configuration or when a user adds an additional
language pack?
Answer: Language packs will continue to work the same way they do in previous versions of Windows.
Question: Are there compatibility concerns with desktop apps?
Answer: The type of apps listed below will need to be carefully validated.
Full volume encryption tools should not encrypt WIM images to limit performance impact. Such tools
should check integrity of the unencrypted WIM to prevent tampering.
Any tool that writes system files can be affected:
Imaging applications should perform block-level backup and restore of ALL volumes.
Faulty/Incomplete restore-operations can render a system unbootable.
Encryption/Back-Up/Defrag tools may unintentionally inflate system files.
Question: Is Compact OS also applicable to Windows Embedded?
Answer: The Compact OS implementation and feature design we shared is limited to Windows 10 for
desktop editions (Home, Pro, and Enterprise) . However, you should contact your Windows Embedded
representative and ask about their disk footprint optimization plan.
Policy
Question: Is there a change to the existing 10 GB free disk space policy requirement?
Answer: Refer to the updated Windows Hardware Compatibility Requirements.
Servicing
Question: How will upgrade work especially on the recovery image with disk footprint optimization?
Answer: Upgrade will continue to work.
Windows 10 S manufacturing overview
10/26/2017 • 1 min to read • Edit Online
Windows 10 S is a specific configuration of Windows 10 Pro that offers a familiar, productive Windows experience
that’s streamlined for security and performance. By exclusively using apps in the Microsoft Store and ensuring that
you browse safely with Microsoft Edge, Windows 10 S keeps you running fast and secure day in and day out. The
same technology that makes Windows 10 S secure also creates some differences when creating software images
for Windows 10 devices.
When you plan your Windows 10 S image and deployment, you'll have to ensure that your customizations will
work with Windows 10 S, as well as the manufacturing environment.
While the overall process is similar to building other Windows 10 devices, Windows 10 S has some additional
considerations.
In this section
Building a Windows 10 S image is like building an image for any other desktop edition of Windows, with some key
differences to consider when planning your deployment. You can add apps, drivers, and customizations to
Windows 10 S, but you'll have to make sure they are supported in Windows 10 S.
Executables
When planning a deployment, make sure you understand what runs, and what is blocked in Windows 10 S. Choose
and test customizations that work with Windows 10 S and won't interrupt your deployment. If you need to run
unsigned code, you can enable the manufacturing mode registry key which allows you to run unsigned code, but
once the PC ships the unsigned code will be blocked.
What runs on Windows 10 S?
Windows 10 S will only run executable code that is signed with a Windows, WHQL, ELAM, or Store certificate
from the Windows Hardware Developer Center Dashboard. This includes companion apps for drivers.
Any apps not signed with one of the certificates mentioned, including companion apps, are blocked. When a
blocked app is run, the user is notified that the app cannot run.
What is blocked in Windows 10 S?
The following components are blocked from running in Windows 10 S. Any script or application that calls one of
these blocked components will be blocked. If your manufacturing process uses scripts or applications that rely on
blocked components, you can temporarily enable manufacturing mode for configuring and testing, but you can't
ship a PC with manufacturing mode enabled.
bash.exe
cdb.exe
cmd.exe
cscript.exe
csi.exe
dnx.exe
kd.exe
lxsmanager.dll
msbuild.exe
ntsd.exe
powershell.exe
powershell_ise.exe
rcsi.exe
reg.exe
regedt32.exe
windgb.exe
wmic.exe
wscript.exe
Testing your app
For information on how to test your app, see Test your Windows app for Windows 10 S.
Drivers
For Windows 10 S driver guidelines and requirements, see Windows 10 S Driver Requirements.
Customizations
Not all customizations are supported in Windows 10 S. This section shows which customizations are supported,
which customizations are not supported, and how to enable manufacturing mode that allows you to perform
customizations in audit mode.
Supported customizations
The following table shows customizations in Windows 10 S, the mechanism to deploy the customizations, and the
environment where you can deploy the customizations.
Unsupported customizations
The following tables shows customizations that are not supported in Windows 10 S.
IMPORTANT
Don't ship your Windows 10 S PC with the registry in place. You'll have to remove the registry key prior to shipping the
device.
Upgrade paths
Windows 10 S allows the following upgrade paths:
UPGRADE PATHS
Windows 10 S to Professional
Windows 10 S N to Professional N
Windows 10 S to Enterprise
Windows 10 S N to Enterprise N
Windows 10 S to Education
Windows 10 S N to Education N
For information on using DISM to change the a Windows image to a different edition, see Change the windows
image to a higher edition using dism.
Recovery
Built-in recovery
Windows 10 S includes a recovery solution that enables a user to restore, refresh, or troubleshoot their PC.
Recovery in Windows 10 S has some differences from other editions of Windows. These differences are:
Third party recovery solutions are NOT supported
Extensibility points for customizations documented in this section is supported
OEM tools in WinRE is not supported
CMD prompt in WinRE will be enabled but only allow execution of inbox WinRE binaries
Extensibility script must be in the form of a *.CMD
Does not call any of the blocked inbox components except reg.exe and wmic.exe
Validating recovery in your deployment
After you configure your Windows 10 S PC for recovery scenarios, validate that it is working properly by verifying
that these scenarios run successfully:
Run refresh recovery and validate the user files are preserved and your factory desktop customizations are
restored.
Run reset recovery and validate the user files and profile are removed and your factory desktop customizations
are restored.
Validate extensibility scripts in the simulated RS3 enforcement level using the provided policy file.
If you created a recovery package with ScanState, ensure that the manufacturing key was excluded from
capture.
Overview
This topic covers the differences in the Windows 10 S manufacturing environment from the manufacturing
environments of other versions of Windows.
WinPE
The Windows Preinstallation Environment (WinPE) behaves the same for Windows 10 S as it does for Windows
Home or Windows Professional until the CI policy is enabled and Secure Boot is turned on. Once the policy is
enabled and Secure Boot is turned on, WinPE (EFI\Boot folder) needs the CI policy (winsipolicy.p7b) to boot, or you
must turn off Secure Boot.
The winsipolicy.p7b file is in the Windows 10 S install.wim in the Windows\Boot\EFI\ folder and should be copied to
the WinPE Boot location (EFI\Boot) on the WinPE media.
For more information about WinPE, see Windows PE.
DISM
Adding a Windows 10 S image to a WIM
If you want a single WIM that includes multiple Windows editions including Windows 10 S, you can add/append
your Windows 10 S image to an existing WIM, which allows you to specify the Windows 10 S image index during
DISM /apply.
To see more about adding/appending images to an existing WIM, see Append, apply, and export volume images
with a Windows Image (.wim) file.
Detect Windows 10 S with DISM
You can use DISM to detect Windows 10 S (offline in WinPE or in Audit mode). In Audit mode, use
DISM /online /get-currentedition . If an image is Windows 10 S, the command should return S. In WinPE, use
DISM /image:c:\ /get-currentedition .
See DISM Windows edition-servicing command-line options to see additional commands for working with
Windows editions.
Audit mode
Audit mode is availabe when manufacturing a Windows 10 S PC. By default, the blocked inbox components are
blocked in audit mode. If you need to use blocked inbox components during the manufacturing process, you can
enable manufacturing mode. If you enable manufacturing mode, you'll have to make sure to disable manufacturing
mode prior to shipping your PC.
To learn more about Audit Mode, see Audit Mode overview.
Overview
To run scripts, installers, and diagnostic tools on the factory floor, Windows 10 S has a manufacturing mode. This
mode allows you to run unsigned code in Audit Mode. Enable manufacturing mode by adding a registry key to an
offline image. Disable manufacturing mode by removing the registry key when booted into audit mode.
IMPORTANT
Don't ship a Windows 10 S PC with the registry in place. Remove the registry key prior to shipping the device.
Before shipping a Windows 10 S PC, remove the manufacturing registry key and exclude it from recovery
packages.
The Windows 10 S image now has the manufacturing key that will allow you to make changes in audit mode.
Remove the manufacturing registry key
When you're finished making changes to your PC in audit mode, you'll remove the manufacturing registry key.
While still booted into audit mode:
1. Open Command Prompt.
2. Remove the registry key.
The manufacturing registry key is now removed. You can check the Registry Editor to double check that the key
has been removed.
On your Windows 10 S PC in audit mode:
1. Open Registry Editor by clicking on the start menu and typing regedit and press enter.
2. Use the registry browser in the left pane to navigate to
Computer\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CI\Policy.
3. Under policy, you should not see a key called manufacturingmode.
Creating a deployment of Windows 10 S has some differences when compared to other versions of Windows.
When planning your deployment, you have to make sure that your drivers and apps are supported by Windows 10
S.
This lab walks you through the process of configuring a Windows 10 S image for deployment. We'll customize an
image, add the manufacutring registry key in WinPE, and then remove the registry key in Audit Mode. Then we'll
configure recovery and prepare the image for shipment.
Let's get started.
diskpart
3. Select your your USB key's disk number, and run the clean command. This command will make any data
on your USB key inaccessible. Make sure you've backed up any data that you want to keep.
list disk
select <disk number>
clean
5. Create the NTFS partition where you'll store your images and customizations.
md c:\temp
copy d:\sources\install.wim c:\temp
Md C:\mount\windows
Dism /Mount-Wim /WimFile:C:\temp\install.wim /index:1 /MountDir:C:\mount\windows
5. Create a mount folder for the Windows RE Image file from your mounted image, and then mount the WinRE
image.
Md c:\mount\winre
Dism /Mount-Wim /WimFile:C:\mount\windows\Windows\System32\Recovery\winre.wim /index:1
/MountDir:C:\mount\winre
Troubleshoot: If winre.wim cannot be seen under the specified directory, use the following command to set
the file visible:
attrib -h -a -s C:\mount\windows\Windows\System32\Recovery\winre.wim
Troubleshoot: If mounting operation fails, make sure the Windows 10 version of DISM is the one installed
with the Windows ADK is being used and not an older version that might be on the Technician Computer.
Don't mount images to protected folders, such as the User\Documents folder. If DISM processes are
interrupted, consider temporarily disconnecting from the network and disabling virus protection.
For more information about mounting a Windows image, see Mount and Modify a Windows Image Using DISM.
To learn about customizing WinRE, see Customize Windows RE.
Enable customizations
Add the manufacturing registry key
Enabling manufacturing mode is a new step you'll have to do when working with Windows 10 S. To enable
customizations during the manufacturing process, you'll have to add a registry key that gives you the ability to run
unsigned code when booted into audit mode. This can help you build and test your image when getting a PC ready
to ship.
We'll add the customization registry key to the mounted image by loading the mounted image's SYSTEM registry
hive, and then then adding a key. Then we'll configure ScanState to exclude the registry key when capturing your
recovery package to ensure that the registry key doesn't get restored during reset or recovery scenarios.
IMPORTANT
Don't ship your Windows 10 S PC with the registry in place. You'll have to remove the registry key prior to shipping the
device.
1. Load the SYSTEM registry hive from your mounted image into regedit on your technician PC. We'll use a
temporary hive called HKLM\Windows10S.
reg load HKLM\Windows10S C:\Mount\Windows\Windows\System32\Config\System
2. Add the following key to the registry have that you just mounted.
The mounted image now has the manufacturing key that will allow you to make changes in audit mode. You'll have
to remove it before shipping the PC.
To learn about the Windows 10 S manufacturing registry key, see Windows 10 S manufacturing mode.
Create exclusion.xml
Now we'll create a file that automates the exclusion of the customizations registry key when you capture settings
for recovery. This ensures that your PC doesn't restore the customization registry key during the recovery process.
1. Create an xml file in a text editor.
2. Copy and paste the following code. This tells ScanState to not capture the registry key in the recovery
package that it creates:
Add drivers
Like other versions of Windows, you can add drivers to a Windows 10 S image to ensure that hardware is setup
and working the first time a user boots into Windows. Make sure that the drivers you add to your Windows 10 S
are compatible with Windows 10 S and won't be blocked.
1. Add a single driver to your Windows and WinRE images from an .inf file. In this example, we're using a
driver named media1.inf:
Dism /Add-Driver /Image:"C:\mount\windows" /Driver:"C:\Drivers\PnP.Media.V1\media1.inf"
Dism /Add-Driver /Image:"C:\mount\winre" /Driver:"C:\Drivers\PnP.Media.V1\media1.inf"
Where "C:\Drivers\PnP.Media.V1\media1.inf" is the .inf file for the driver you're adding.
Check the list of packages and verify that the list contains the drivers you added.
For more information about adding drivers to an offline Windows image, see Add and Remove Drivers to an
Offline Windows Image.
See Add and remove language packs offline using DISM for more information.
Important: Install GDR packages after you install language packs, AppX packages, and Features on Demand. If
you install a GDR prior to adding these, you'll have to reinstall the GDR.
1. Download the GDR (KB 4020102) from the Microsoft Update Catalog.
2. Use DISM /add package to add the GDR to the mounted images
dism /image:"C:\mount\windows" /add-package /packagepath:C:\temp\windows10.0-kb4020102-
x64_9d406340d67caa80a55bc056e50cf87a2e7647ce.msu
dism /image:"C:\mount\winre" /add-package /packagepath:C:\temp\windows10.0-kb4020102-
x64_9d406340d67caa80a55bc056e50cf87a2e7647ce.msu
3. Use DISM to cleanup your image and lock in the updates so they are restored during recovery.
See Add or remove packages offline using DISM for more information about adding packages to your Windows
image.
Unmount install.wim
Dism /Unmount-Image /MountDir:"C:\mount\windows" /Commit
T:\Deployment\walkthrough-deploy.bat t:\install.wim
md c:\Recovery\Customizations
T:\deploymenttools\scanstate /config:T:\deploymenttools\Config_SettingsOnly.xml /o /v:13 /ppkg
c:\recovery\customizations\usmt.ppkg /i:exclusion.xml /l:C:\Scanstate.log
2. When the capture completes successfully, delete the ScanState logfile: del c:\scanstate.log .
diskpart
list volume
exit
T:\Deployment\Walkthrough-deploy.bat T:\images\Windows10S.wim
Verify customizations
1. Boot the reference PC. This is the first time booting the PC with your new Windows image.
2. If you installed additional languages, verify that these preinstalled languages appear and can be selected by the
user during OOBE.
3. Validate the desktop customizations you made correctly after OOBE is complete.
Verify recovery
To verify recovery is working as expected, perform the following validation tasks:
Run refresh recovery and validate the user files are preserved and your factory desktop customizations are
restored.
Run reset recovery and validate the user files and profile are removed and your factory desktop customizations
are restored.
Validate extensibility scripts in the simulated RS3 enforcement level using the provided policy file.
If you created a recovery package with ScanState, ensure that the manufacturing key was excluded when the
package was captured.
Ship the PC
Now that you have an image, you are ready to build and ship Windows 10 S PCs. Make sure that the
manufacturing registry key is removed and Secure Boot is enabled on shipped PCs.
Windows Deployment Options
6/6/2017 • 1 min to read • Edit Online
These topics describe additional Windows deployment options and customization scenarios.
In This Section
UEFI Firmware Describes considerations for deploying to computers that
are based on the Unified Extensible Firmware Interface
(UEFI).
Deploy Windows on a VHD (Native Boot) Create and deploy Windows using virtual hard disks
(VHDs).
Configure Network Settings in an Unattended Installation Common networking scenarios and how to implement
them in unattended installations.
Siloed provisioning packages (SPPs) Capture individual Windows desktop applications and
apply them to your images.
Device Drivers and Deployment Overview Add and configure device drivers.
Language Packs Add language packs and language interface packs (LIPs).
Work with Product Keys and Activation Enter a product key and how to activate Windows.
Enable and Disable the Built-in Administrator Account Enable and disable the built-in Administrator account,
which helps you run programs and apps as an
administrator.
Windows Server Deployment Options Considerations when deploying Windows Server editions.
Configure a Trusted Image Identifier for Windows You can speed up the initial performance of your
Defender computer for the end user by adding a trusted image
identifier to Windows Defender. Windows Defender is a
Microsoft application that can help to prevent, remove,
and quarantine malware and spyware.
High DPI Support for IT Professionals Windows includes features that improve the user
experience with premium high density display panels such
as 1920x1080 displays that have about 200 DPI and
150% scaling, and 2560x1440 and 3200x1800 displays
that have 225-275DPI and 200% scaling.
PAE/NX/SSE2 Support Requirement Guide for Windows 8 Describes the PAE/NX/SSE2 processor requirements.
Microsoft .NET Framework 3.5 Deployment Describes how IT Professionals can deploy .NET
Considerations Framework 3.5 .
Related topics
Windows Deployment Tools Technical Reference
UEFI Firmware
4 min to read •
Edit O nline
Here's some considerations when deploying Windows on Unified Extensible Firmware Interface (UEFI)-based
devices.
What is UEFI?
When the devices starts, the firmware interface controls the booting process of the PC, and then passes control to
Windows or another operating system.
UEFI is a replacement for the older BIOS firmware interface and the Extensible Firmware Interface (EFI) 1.10
specifications.
More than 140 leading technology companies participate in the Unified EFI Forum, including AMD, AMI, Apple,
Dell, HP, IBM, Insyde, Intel, Lenovo, Microsoft, and Phoenix Technologies.
Benefits of UEFI
Firmware that meets the UEFI 2.3.1 specifications provides the following benefits:
Faster boot and resume times.
Ability to use security features such as Secure Boot and factory encrypted drives that help prevent untrusted
code from running before the operating system is loaded. For more information, see Secure Boot Overview
and Factory Encrypted Drives.
Ability to more easily support large hard drives (more than 2 terabytes) and drives with more than four
partitions.
Compatibility with legacy BIOS. Some UEFI-based PCs contain a Compatibility Support Module (CSM) that
emulates earlier BIOS, providing more flexibility and compatibility for end users. To use the CSM, Secure
Boot must be disabled.
Support for multicast deployment, which allows PC manufacturers to broadcast a PC image that can be
received by multiple PCs without overwhelming the network or image server.
Support for UEFI firmware drivers, applications, and option ROMs.
Additional advantages are described in the Intel EFI and UEFI Overview and Specifications.
Booting a PC into UEFI or legacy BIOS mode Boot to UEFI Mode or Legacy BIOS mode | WinPE: Boot in
UEFI or legacy BIOS mode
Managing UEFI hard drives and boot configuration data Hard Drives and Partitions | Configure UEFI/GPT-Based
Hard Drive Partitions | BCD System Store Settings for
UEFI | UEFI Validation Option ROM Guidance | Windows
UEFI Firmware Update Platform | Validating Windows
UEFI Firmware Update Platform Functionality
Choose UEFI or legacy BIOS modes while installing Windows. After Windows is installed, if you need to switch
firmware modes, you may be able to use the MBR2GPT tool.
In general, we recommend installing Windows using the newer UEFI mode, as it includes more security features
than the legacy BIOS mode. If you're booting from a network that only supports BIOS, you'll need to boot to
legacy BIOS mode.
After Windows is installed, the device boots automatically using the same mode it was installed with.
Related topics
WinPE: Create USB Bootable drive
Windows Setup: Installing using the MBR or GPT
partition style
9/5/2017 • 3 min to read • Edit Online
When installing Windows on UEFI-based PCs using Windows Setup, your hard drive partition style must be set up
to support either UEFI mode or legacy BIOS-compatibility mode.
For example, if you receive the error message: “Windows cannot be installed to this disk. The selected disk is not of
the GPT partition style”, it’s because your PC is booted in UEFI mode, but your hard drive is not configured for UEFI
mode. You’ve got a few options:
1. Reboot the PC in legacy BIOS-compatibility mode. This option lets you keep the existing partition style. For
more info, see Boot to UEFI Mode or Legacy BIOS mode.
2. Configure your drive for UEFI by using the GPT partition style. This option lets you use the PC’s UEFI
firmware features.
You can preserve your data and convert the drive using the MBR2GPT tool. You can also choose to reformat
the drive using the instructions below. Reformatting will erase all the data on the drive.
diskpart
list disk
Related topics
Boot to UEFI Mode or Legacy BIOS mode
BCD System Store Settings for UEFI
7/13/2017 • 6 min to read • Edit Online
For a typical deployment scenario, you do not need to modify the BCD store. This topic discusses the various BCD
settings in the BCD store that you can modify. On UEFI systems, this includes settings for the following boot
applications:
1. Windows Boot Manager
2. Windows Boot Loader
3. Windows Memory Tester
The following sections describe the available settings for each of these boot applications in detail and how to
modify each application for UEFI systems.
For simplicity, the BCDEdit examples in this section modify the BCD system store. To modify another store, such as
a copy of the BCD-template, include the store name in the command line.
identifier {bootmgr}
device partition=\Device\HarddiskVolume1
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
Device Setting
The device element specifies the volume that contains Windows Boot Manager. For UEFI systems, the device
element for Windows Boot Manager is set to the system partition volume letter. To determine the correct volume
letter, use the Diskpart tool to view the disk partitions. The following example assumes that the system has a single
hard drive that has multiple partitions, including a system partition that has been assigned a drive letter of S.
The following Diskpart commands select disk 0 and then list the details of the volumes on that disk, including their
drive letters. It shows volume 2 as the system partition.
Diskpart
select disk 0
list volume
select volume 2 // assuming volume 2 is the system partition
assign letter=s
After you have determined the system partition volume, set the device element for Windows Boot Manager to the
corresponding drive letter. The following example sets device to drive S.
Path Setting
The path element specifies the location of the Windows Boot Manager application on that volume. For UEFI
systems, path indicates the firmware boot manager, whose path is \EFI\Microsoft\Boot\Bootmgfw.efi.
You can confirm that BCD-template has the correct path by enumerating the values in the store, as follows:
Other Settings
You should set Windows Boot Manager to be the first item in the display order of the UEFI firmware, as shown in
the following example.
You should also specify the topmost Windows boot loader application in the Windows Boot Manager display order.
The following example shows how to put a specified Windows boot loader at the top of the display order.
In the preceding example, <GUID> is the identifier for the specified Windows boot loader object. The next section
discusses this identifier in greater detail.
Note
A multiboot system that has multiple installed operating systems has multiple instances of the Windows boot
loader. Each instance of the Windows boot loader has its own identifier. You can set the default Windows boot
loader ( {default} ) to any of these identifiers.
identifier {9f25ee7a-e7b7-11db-94b5-f7e662935912}
device partition=C:
path \Windows\system32\winload.efi
description Microsoft Windows Server
locale en-US
inherit {bootloadersettings}
osdevice partition=C:
systemroot \Windows
The identifier for this Windows boot loader is {9f25ee7a-e7b7-11db-94b5-f7e662935912}. You can use this GUID
on your system or let the BCDEdit tool generate a new GUID for you.
To simplify BCDEdit commands, you can specify one of the Windows boot loaders in the BCD system store as the
default loader. You can then use the standard identifier ( {default} ) in place of the full GUID.The following example
specifies the Windows boot loader for EFI as the default boot loader, assuming that it uses the identifier GUID from
BCD-template.
Path Setting
The path element of a Windows boot loader specifies the location of the boot loader on that volume. For UEFI
systems, path indicates the Windows boot loader for EFI, whose path is \Windows\System32\Winload.efi.
You can confirm that BCD-template has the correct path value by enumerating the values in the store. You can
also explicitly set the path value, as shown in the following example.
identifier {memdiag}
device partition=\Device\HarddiskVolume1
path \boot\memtest.exe
description Windows Memory Diagnostic
Device Setting
For UEFI systems, the device element for the Windows memory tester is set to the system partition drive letter.
The following example assumes that the system partition is drive S, as used in earlier examples.
Path Setting
The path element specifies the location of Windows Test Manager on the volume that the device element has
specified. For UEFI systems, path indicates the EFI version of the application (\EFI\Microsoft\Boot\Memtest.efi).
You can confirm that BCD-template has the correct path value by enumerating the values in the store. You can
also use the BCDEdit tool to explicitly set the path value, as shown in the following example.
This document lists the basic validation scenarios that are required to pass before signing-off on the Windows UEFI
Firmware Update Platform functionality. Specification can be downloaded from here.
Prerequisites
For each EFI System Resource Table (ESRT) entry, you need a capsule for the latest firmware version. The
scenarios will refer to the latest version as X. Each ESRT entry is identified using a unique GUID.
For each ESRT entry exposed, create a capsule package that its version is incremented above the package
created in step 1. These capsules will be referred to as X+1.
Capsules that aid in simulating failure conditions such as a capsule for which the payload is not signed or signed
with an invalid PK.
Make sure all capsules to be used are signed appropriately from the OS perspective, catalog signed, and
firmware signed, PK signed. Unless, you are specifically testing the negative PK signing cases. See “Signing the
Firmware driver Package” in the specification for details on how to sign a capsule or firmware driver package.
How To
Install a new capsule or reinstall a previously installed capsule
1. Open up device manager.
2. Find the device node that represents your firmware, it is usually under the “Firmware” devices.
3. Right click on the firmware device you wish to update.
4. Select Update driver software. You will get a popup that states “Update Driver Software - <Firmware>”.
5. Select Browse my computer for driver software.
6. On the next window, select Let me pick from a list of device drivers on my computer.
7. If the driver has been installed before, select it from the Show compatible hardware box. If it does not exist,
select Have disk and continue on. Otherwise, select OK and reboot the system.
8. If you select Have Disk, you will get a popup labeled Install From Disk.
9. Use Browse to go to the directory that has the capsule of the firmware you wish to install.
10. Select the INF file in that directory and hit OK to install.
11. During installation, if you get a popup saying the driver is not signed, go ahead and accept this driver.
12. The system asks you to reboot.
13. After you installed the capsule for the firmware, you need to reboot. If you wish to install multiple capsule
packages, then wait to reboot until all capsules are installed and then reboot on the final capsule.
Query the version and status details:
Run the QueryVersionAndStatus.ps1 PowerShell (PS) script to query the current firmware version, last
attempt firmware version and last attempt status.
To run the script:
1. Run PowerShell as administrator.
2. Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force (This only has to be done once.)
3. Display the version and status details for the given GUID. For example:
.\QueryVersionAndStatus.ps1 6bd2efb9-23ab-4b4c-bc37-016517413e9a
4. Check if firmware update was successful: Refer to the section “Validating the status of the firmware
update” in the specification document. Make sure that the Last Attempt Status and the Current Version
matches the expected version.
5. Recommended: Check to make sure that the devices you are updating are also still functioning.
6. Set the rollback policy: Some of the scenarios might require rolling back firmware. Rollback is not a
production scenario. In order to be able to rollback, a registry policy key has to be created. Create a
REG_DWORD key with the name “Policy” under the node
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FirmwareResources\{<GUID>} and set the
value of the Policy key to 1. Note that the GUID should be replaced with the actual GUID from the ESRT.
Scenarios
S1: Each ESRT entry is successfully updatable through capsule
The following steps should be completed for each ESRT entry that is supported by the platform. Or in other words,
for System firmware and each device firmware that supports updating firmware through UpdateCapsule.
Steps
1. For each ESRT entry, install the capsule for firmware version X.
2. Make sure all the above capsules are installed, prior to rebooting.
Expected Result
Firmware update should be successful for each ESRT entry that was updated. For all ESRT entries, for which the
update was attempted, validate that:
Current Firmware Version = X
Last Attempt Version = X
Last Attempt Status = 0 (STATUS_SUCCESS)
S2: The latest firmware version X is also updatable to X+1
The following steps should be completed for each ESRT entry that is supported by the platform. Or in other words,
for System firmware and each device firmware that supports updating firmware through UpdateCapsule.
Steps
1. Complete scenario S1 above.
2. For each ESRT entry, install the capsule for firmware version X+1.
Expected Result
Firmware update should be successful for each ESRT entry that was updated. For all ESRT entries, for which the
update was attempted, validate that:
Current Firmware Version = X+1
Last Attempt Version = X+1
Last Attempt Status = 0 (STATUS_SUCCESS)
S3: On failure, firmware update returns the right status code as defined in the specification
The Status codes are defined in the section named “UEFI System Resource Table Definition”, in the table with the
title “ESRT Last Attempt Status Field Values”.
S3.1 Insufficient Battery and UEFI System Firmware update
Steps
1. Drain the battery charge to less than 25% and then plug-in the AC power.
2. Install the capsule for UEFI System Firmware version X+1. Let’s assume that the current version is X.
3. Before rebooting, make sure that the battery charge is less than 25%
Expected Result
Firmware update should fail. For ESRT entry corresponding to the System Firmware, validate that:
Current Firmware Version = X
Last Attempt Version = X+1
Last Attempt Status = 0xc00002de (STATUS_INSUFFICIENT_POWER)
S3.2 Insufficient Battery and Device Firmware update
Steps
1. Drain the battery charge to less than 25% and then plug-in the AC power.
2. Install the capsules for ALL supported devices in the system with firmware version X+1. Let’s assume that the
current firmware version for the given device is X.
3. Before rebooting, make sure that the battery charge is less than 25% .
Expected Result
Firmware update should fail. For all ESRT entries, for which the update was attempted, validate that:
Current Firmware Version = X
Last Attempt Version = X+1
Last Attempt Status = 0xc00002de (STATUS_INSUFFICIENT_POWER)
S3.3 Insufficient Battery, UEFI System and Device Firmware update at the same time
Steps
1. Drain the battery charge to less than 25% and then plug-in the AC power.
2. Install the capsules for UEFI System Firmware and all Device Firmware with version X+1.
3. Before rebooting, make sure that the battery charge is less than 25%.
Expected Result
Firmware update should fail for the System firmware and for all the device firmware for which the update was
attempted. For all ESRT entries, for which the update was attempted, validate that:
Current Firmware Version = X
Last Attempt Version = X+1
Last Attempt Status = 0xc00002de (STATUS_INSUFFICIENT_POWER)
S3.4 Firmware update should fail when the capsule is not PK signed
The following steps should be completed for each ESRT entry that is supported by the platform. Or in other words,
for System firmware and each device firmware that supports updating firmware through UpdateCapsule.
Steps
1. For each ESRT entry, create a capsule X+2, the payload for which is not signed.
2. Install the capsules X+2. Let’s assume that the current version is X.
Expected Result
Firmware update should fail for all the ESRT entries for which the update was attempted. For all ESRT entries, for
which the update was attempted, validate that:
Current Firmware Version = X
Last Attempt Version = X+2
Last Attempt Status = 0xC0000022 (STATUS_ACCESS_DENIED)
S3.5 Firmware update should fail when the capsule is signed with the wrong PK certificate
The following steps should be completed for each ESRT entry that is supported by the platform. Or in other words,
for System firmware and each device firmware that supports updating firmware through UpdateCapsule.
Steps
1. For each ESRT entry, create a capsule X+2, sign the payload with a wrong key or certificate (for example use a
debug signed capsule on a production device).
2. Install the capsules X+2. Let’s assume that the current version is X.
Expected Result
Firmware update should fail for all the ESRT entries for which the update was attempted. For all ESRT entries, for
which the update was attempted, validate that:
Current Firmware Version = X
Last Attempt Version = X+2
Last Attempt Status = 0xC0000022 (STATUS_ACCESS_DENIED)
S3.6 Firmware update should fail when the capsule payload is tampered with
The following steps should be completed for each ESRT entry that is supported by the platform. Or in other words,
for System firmware and each device firmware that supports updating firmware through UpdateCapsule.
Steps
1. For each ESRT entry, create a capsule X+2, sign the payload with the right key or certificate. Then open the
firmware bin file and flip 1 or more bits in the file and save the file back.
2. Regenerate the catalog for the bin file and the INF file.
3. Install the capsules X+2. Let’s assume that the current version is X.
Expected Result
Firmware update should fail for all the ESRT entries for which the update was attempted. For all ESRT entries, for
which the update was attempted, validate that:
Current Firmware Version = X
Last Attempt Version = X+2
Last Attempt Status = 0xC0000022 (STATUS_ACCESS_DENIED) or 0xC000007B
(STATUS_INVALID_IMAGE_FORMAT)
S3.7: Firmware does not allow rollback beyond the LowestSupportedFirmwareVersion
The following steps should also be carried out for other device firmware (lower priority).
Steps
1. For UEFI System Firmware, create a capsule X+1 such that the “LowestSupportedFirmwareVersion” in the ESRT
entry for the system firmware is set to X+1.
2. Install the capsule X+1 and make sure that the update succeeds.
3. Create a UEFI System firmware update capsules, such that the version in the INF is X+2 but the actual firmware
binary file is of version X.
4. Install the capsule X+2 and reboot the system.
Expected Result
Firmware update should fail. For ESRT entry corresponding to the System Firmware, validate that:
Current Firmware Version = X+1
Last Attempt Version = X+2
Last Attempt Status = 0xC0000059 (STATUS_REVISION_MISMATCH)
S4: Seamless recovery and firmware update (if implemented)
This scenario varies from platform to platform depending on the implementation of the seamless recovery. Based
on the implementation, the validation might require creating bad capsules that forces the system into recovery or
disconnecting the power in the middle of an update or through any other means of exercising the recovery flows.
Expected Result
The system should boot into the OS and the firmware update should be marked as failed. The version reported by
the UEFI firmware resource device should not have changed.
S5: Firmware Update adheres to the User Experience (UX ) requirement
Steps
This scenario can be validated while executing any of the above scenarios that lead to a successful firmware
update.
Expected Result
The user experience is in accordance to the specification, see section on “User Experience”.
The only text that is displayed on the screen is “Please wait while we install a system update”. The text is
displayed at the right co-ordinates on the screen as called out in the specification.
OEM Logo is displayed as described in the specification.
Related topics
Windows UEFI Firmware Update Platform
UEFI Validation Option ROM Validation Guidance
Hard Drives and Partitions
6/6/2017 • 7 min to read • Edit Online
In this section, you will learn methods to deploy Windows to different drives, including hard drives, solid-state
drives (SSDs), or virtual hard drives (VHDs). You will also learn about factors that you must consider when you
deploy Windows.
Drive types
You can install Windows to a hard drive, such as a hard disk drive or a solid-state drive. For additional security,
you can use hard drives that the factory has pre-encrypted. A single computer may contain multiple drives.
Solid-state drives
A solid-state drive (SSD) is a hard drive that uses solid-state memory to store persistent data. An SSD must have a
minimum of 16 gigabytes (GB) of space to install Windows. For more information about drive space and RAM
considerations, see Compact OS, single-sourcing, and image optimization.
Note It's no longer necessary to run the Windows System Assessment Tests (WinSAT) on SSD drives. Windows
now detects SSD drives and will tune itself accordingly.
Advanced format drives
You can use some Advanced Format Drives to provide additional drive space.
Advanced Format 512 emulation (512e) drives are supported on either BIOS-based or UEFI-based computers.
Advanced Format 4K Native (4Kn) drives are supported on UEFI-based computers only.
Warning
For Advanced Format 4K Native drives (4-KB-per-sector) drives, the minimum partition size is 260 MB, due to a
limitation of the FAT32 file format. The minimum partition size of FAT32 drives is calculated as sector size (4KB) x
65527 = 256 MB. For more information, see Configure UEFI/GPT-Based Hard Drive Partitions.
Factory-encrypted hard drives
To help protect your deployment environment, you can use a factory pre-encrypted hard drive to prevent
unauthorized access before you install Windows or any other software. For more information, see Factory
Encrypted Drives.
Multiple hard drives
If you install Windows on a device that has multiple hard drives, you can use the disk location path to make sure
that your images are applied to the intended drives.
To do this, use the diskpart SELECT DISK=<disk location path> command to select each drive. For example:
SELECT DISK=PCIROOT(0)#PCI(0100)#ATA(C00T00L00)
Note
The system drive might not appear as disk 0 in the DiskPart tool. The system might assign different numbers to
drives when you reboot. Different computers that have the same drive configuration can have different disk
numbers.
To learn more, see Configure Multiple Hard Drives and Hard Disk Location Path Format.
Partitions
You can divide your hard drive into multiple partitions. You can create separate system, recovery, Windows, or
data partitions.
To enhance the security of the Windows partition or a data partition, you can use BitLocker to encrypt the partition.
For more information, see BitLocker Drive Encryption.
The partition types must match the firmware of the computer. You can install Windows on hard drives that are
based on any of the following types of firmware:
Basic Input/Output System (BIOS). Uses the Master Boot Record (MBR) partition structure.
Extensible Firmware Interface (EFI) (Class 1): Uses the GUID Partition Table (GPT) partition structure.
Unified Extensible Firmware Interface (UEFI) Class 2: Uses the GPT partition structure. Also includes a
compatibility support module (CSM) that enables you to use BIOS functions, including the MBR partition
structure. This module can be enabled or disabled in the firmware.
Unified Extensible Firmware Interface (UEFI) Class 3: Uses the GPT partition structure.
To determine your system type, consult your hardware manufacturer.
System and utility partitions
A system partition is a partition that contains the hardware-specific files that are needed to load Windows.
By default, during Windows Setup, Windows stores these hardware-specific files in a separate partition. This
enables the computer to use the following:
Security tools. Some security tools, such as BitLocker, require a separate system partition.
Recovery tools. Some recovery tools, such as Windows Recovery Environment (Windows RE), require a
separate system partition.
Multiple operating systems. If a computer has multiple operating systems, such as Windows 10 for
desktop editions and Windows 7, the computer displays a list of operating systems. The user can then select
which operating system to boot. When the system boot files are on a separate partition, it is easier to
remove a Windows partition or replace the partition with a new copy of Windows.
We recommend adding system utility partitions before the Windows partition, because in the event that a full-
system recovery is needed, this partition order helps to prevent the recovery tools from overwriting the system
and utility partitions.
For information about how to configure system partitions while you apply images, see Capture and Apply
Windows, System, and Recovery Partitions.
Microsoft reserved partition (MSR )
The MSR is used on UEFI/GPT systems, to support software components that formerly used hidden sectors.
For more information about configuring MSR partitions, see Configure UEFI/GPT-Based Hard Drive Partitions.
For more information about MSR partitions, see Windows and GPT FAQ
Recovery partitions
We recommend adding a separate partition for the Windows Recovery Environment (Windows RE) at the end of
the hard drive. With this partition order, if future updates require adding to or replacing the Windows RE tools
partition, Windows will be able to manage the partition size automatically.
For BIOS/MBR-based systems, it's still possible to combine the Windows RE tools partition with the system
partition. To save drive space, consider creating logical partitions to get around the four-partition limit. For more
info, see Configure more than four partitions on a BIOS/MBR-based hard disk.
For Windows 10 for desktop editions, it's no longer necessary to create and maintain a separate full-system
recovery image. Windows can perform a refresh or reset using built-in tools.
Data partitions
A data partition is a partition that stores user data. A separate data partition can enable easier maintenance for
situations where either the primary operating system is likely to be replaced, or when multiple operating systems
exist on the same device, such as Windows 10 and Windows 7. When a device has multiple hard drives, a data
partition may be stored on another drive.
Warning
For typical single-drive configurations, we do not recommend that you use a separate data partition. There are two
main reasons:
The partition may not automatically protect data that is stored outside the user profile folders. For example, a
guest user might have access to files in an unprotected data partition.
If you change the default location of the user profile folders to any volume other than the system volume, you
cannot service your image. The computer may not apply updates, fixes, or service packs to the installation. For a
list of known issues related to changing the default folder locations, see Description of known issues with the
FolderLocation settings.
See also
CONTENT TYPE REFERENCES
Multiple drives Configure Multiple Hard Drives | Hard Disk Location Path
Format | Internal and External SATA Port Configuration |
Configuring Disk Mirroring
Tools and settings UEFI Firmware | The Windows and GPT FAQ | BCDboot
Command-Line Options | DiskPart Command line syntax |
WIM vs. VHD vs. FFU: comparing image file formats
UEFI/GPT-based hard drive partitions
7/13/2017 • 7 min to read • Edit Online
Create custom partition layouts for your hard disk drives (HDDs), solid-state drives (SSDs), and other drives
when deploying Windows to Unified Extensible Firmware Interface (UEFI)–based devices.
Note If you use a custom partition layout on Windows 10 for desktop editions (Home, Pro, Enterprise, and
Education), update the push-button recovery script so the recovery tools can recreate the custom partition
layout when needed.
In this topic:
Drive partition rules
Default layout
Sample Diskpart script
Partition layout
The default partition layout for UEFI-based PCs is: a system partition, an MSR, a Windows partition, and a
recovery tools partition.
This layout lets you use Windows BitLocker Drive Encryption through both Windows and through the Windows
Recovery Environment.
DiskPart /s F:\CreatePartitions-UEFI.txt
4. If you use a custom partition layout on Windows 10 for desktop editions, update the push-button
recovery script so the recovery tools can recreate the custom partition layout when needed.
Next steps
Use a deployment script to apply the Windows images on the newly created partitions. For more information,
see Capture and Apply Windows, System, and Recovery Partitions.
Related topics
Configure BIOS/MBR-Based Hard Drive Partitions
BitLocker Drive Encryption
WinPE: Install on a Hard Drive (Flat Boot or Non-RAM)
Configuring Disk Mirroring
The Windows and GPT FAQ
BIOS/MBR-based hard drive partitions
7/13/2017 • 6 min to read • Edit Online
Create custom partition layouts for your hard disk drives (HDDs), solid-state drives (SSDs), and other drives
when deploying Windows to BIOS–based devices.
Note If you use a custom partition layout on Windows 10 for desktop editions (Home, Pro, Enterprise, and
Education), update the push-button recovery script so the recovery tools can recreate the custom partition layout
when needed.
Partition layout
If you install Windows using a bootable USB key made by Windows Imaging and Configuration Designer (ICD), it
creates the following layout by default: a system partition, a Windows partition, and a recovery tools partition.
rem == CreatePartitions-BIOS.txt ==
rem == These commands are used with DiskPart to
rem create three partitions
rem for a BIOS/MBR-based computer.
rem Adjust the partition sizes to fill the drive
rem as necessary. ==
select disk 0
clean
rem == 1. System partition ======================
create partition primary size=100
format quick fs=ntfs label="System"
assign letter="S"
active
rem == 2. Windows partition =====================
rem == a. Create the Windows partition =======
create partition primary
rem == b. Create space for the recovery tools
shrink minimum=500
rem ** NOTE: Update this size to match the
rem size of the recovery tools
rem (winre.wim) **
rem == c. Prepare the Windows partition ======
format quick fs=ntfs label="Windows"
assign letter="W"
rem == 3. Recovery tools partition ==============
create partition primary
format quick fs=ntfs label="Recovery"
assign letter="R"
set id=27
list volume
exit
DiskPart /s F:\CreatePartitions-BIOS.txt
4. If you use a custom partition layout on Windows 10 for desktop editions, update the push-button recovery
script so the recovery tools can recreate the custom partition layout when needed.
Next steps
Use a deployment script to apply the Windows images on the newly created partitions. For more information, see
Capture and Apply Windows, System, and Recovery Partitions.
Related topics
Configure More than Four Partitions on a BIOS/MBR-Based Hard Disk
Configure UEFI/GPT-Based Hard Drive Partitions
BitLocker Drive Encryption
Configuring Disk Mirroring
Windows and GPT FAQ
6/14/2017 • 21 min to read • Edit Online
Answers to frequently asked questions about the GUID Partition Table (GPT).
This version of the Windows and GPT FAQ applies to Windows 10 and Windows Server 2016. For a previous
version of this FAQ, see Windows and GPT FAQ on MSDN.
Since the introduction of the personal computer, the data storage area on a hard disk has been divided into smaller
areas called sectors. These sectors are grouped into partitions creating separate volumes, or 'drives' on a disk. The
partitions were organized using a scheme called the Master Boot Record (MBR). The MBR is a table of disk
locations, or addresses, along with a certain length, of each of the partitions present on the disk. The MBR itself
occupies a small amount of the disk and is read during the boot phase to determine where to locate the operating
system to boot into. The MBR information is also used by the operating system as a map of the volumes present on
the disk.
Eventually, data density for disks became too large for the MBR scheme to account for all the available data
locations. Also, the layout, or format, of the MBR was designed for early computers and not flexible enough to
accommodate newer disk configurations. A new partitioning method was needed so the GUID Partition Table (GPT)
partitioning scheme was created.
GPT
What is a GPT disk?
The GUID Partition Table (GPT) was introduced as part of the Unified Extensible Firmware Interface (UEFI) initiative.
GPT provides a more flexible mechanism for partitioning disks than the older Master Boot Record (MBR)
partitioning scheme that was common to PCs.
A partition is a contiguous space of storage on a physical or logical disk that functions as if it were a physically
separate disk. Partitions are visible to the system firmware and the installed operating systems. Access to a
partition is controlled by the system firmware before the system boots the operating system, and then by the
operating system after it is started.
What is wrong with MBR partitioning?
MBR disks support only four partition table entries. For more than four partitions, a secondary structure known as
an extended partition is necessary. Extended partitions can then be subdivided into one or more logical disks.
Windows creates MBR disk partitions and logical drives on cylinder boundaries based on the reported geometry,
although this information no longer has any relationship to the physical characteristics of the hardware (disk driver
or RAID controller). Starting with Windows Vista and Windows Server 2008, more logical boundaries are selected
when the hardware provides better hints at the true cache or physical alignment. Because this partition information
is stored on the drive itself, the operating system is not dependent on the alignment.
MBR partitioning rules are complex and poorly specified. For example, does cylinder alignment mean that each
partition must be at least one cylinder in length? An MBR partition is identified by a two-byte field, and
coordination is necessary to avoid collision. IBM originally provided that coordination, but today there is no single
authoritative list of partition identifiers.
Another common practice is using partitioned or "hidden" sectors to hold specific information by using
undocumented processes and results in problems that are difficult to debug. In the past, vendor-specific
implementations and tools were released to the public, which made support difficult.
Why do we need GPT?
GPT disks allow for growth. The number of partitions on a GPT disk isn't constrained by temporary schemes such
as container partitions as defined by the MBR Extended Boot Record (EBR). The GPT disk partition format is well
defined and fully self-identifying. Data critical to platform operation is located in partitions and not in unpartitioned
or "hidden" sectors. GPT disks use primary and backup partition tables for redundancy and CRC32 fields for
improved partition data structure integrity. The GPT partition format uses version number and size fields for future
expansion.
Each GPT partition has a unique identification GUID and a partition content type, so no coordination is necessary to
prevent partition identifier collision. Each GPT partition has a 36-character Unicode name. This means that any
software can present a human-readable name for the partition without any additional understanding of the
partition.
Where can I find the specification for GPT disk partitioning?
Chapter 5 of the Unified Extensible Firmware Interface (UEFI) specification (version 2.3) defines the GPT format.
This specification is available at http://www.uefi.org/specifications.
What is the GPT format for basic disks?
Basic disks are the most commonly used storage types with Windows. "Basic disk" refers to a disk that contains
partitions, such as primary partitions and logical drives, usually formatted with a file system to become a volume
for file storage.
The protective MBR area on a GPT partition table exists for backward compatibility with disk management utilities
that operate on MBR. The GPT header defines the range of logical block addresses that are usable by partition
entries. The GPT header also defines its location on the disk, its GUID, and a 32-bit cyclic redundancy check (CRC32)
checksum that is used to verify the integrity of the GPT header. Each entry in the GUID partition table begins with a
partition type GUID. The 16-byte partition type GUID, which is similar to a System ID in the partition table of an
MBR disk, identifies the type of data that the partition contains and identifies how the partition is used, for example,
whether it is a basic disk or a dynamic disk. Note that each GUID partition entry has a backup copy.
For more information about basic disks, see Basic and Dynamic Disks.
What is the GPT format for dynamic disks?
Dynamic disks were first introduced with Windows 2000 and provide features that basic disks don't, such as the
ability to create volumes that span multiple disks (spanned and striped volumes) and the ability to create fault-
tolerant volumes (mirrored and RAID-5 volumes). Dynamic disks can use the MBR or GPT partition styles on
systems that support both. For more information about dynamic disks, see Basic and Dynamic Disks.
Is UEFI required for a GPT disk?
No. GPT disks are self-identifying. All the information needed to interpret the partitioning scheme of a GPT disk is
completely contained in structures in specified locations on the physical media.
How big can a GPT disk be?
In theory, a GPT disk can be up to 2^64 logical blocks in length. Logical blocks are commonly 512 bytes in size.
The maximum partition (and disk) size depends on the operating system version. Windows XP and the original
release of Windows Server 2003 have a limit of 2TB per physical disk, including all partitions. For Windows Server
2003 SP1, Windows XP x64 edition, and later versions, the maximum raw partition of 18 exabytes can be
supported. (Windows file systems currently are limited to 256 terabytes each.)
How many partitions can a GPT disk have?
The specification allows an almost unlimited number of partitions. However, the Windows implementation restricts
this to 128 partitions. The number of partitions is limited by the amount of space reserved for partition entries in
the GPT.
Can a disk be both GPT and MBR?
No. However, all GPT disks contain a Protective MBR.
What is a Protective MBR?
The Protective MBR, beginning in sector 0, precedes the GPT partition table on the disk. The MBR contains one type
0xEE partition that spans the disk.
Why does the GPT have a Protective MBR?
The Protective MBR protects GPT disks from previously released MBR disk tools such as Microsoft MS-DOS FDISK
or Microsoft Windows NT Disk Administrator. These tools are not aware of GPT and don't know how to properly
access a GPT disk. Legacy software that does not know about GPT interprets only the Protected MBR when it
accesses a GPT disk. These tools will view a GPT disk as having a single encompassing (possibly unrecognized)
partition by interpreting the Protected MBR, rather than mistaking the disk for one that is unpartitioned.
Why would a GPT -partitioned disk appear to have an MBR on it?
This occurrs when you use an MBR-only-aware disk tool to access the GPT disk. For more information, see the
following questions:
Can a disk be both GPT and MBR?
What is a Protective MBR?
Why does the GPT have a Protective MBR?
This topic describes how to configure more than four disk partitions when you deploy Windows on BIOS and
master boot record (MBR)-based devices.
Sample code
Save the following code as "PrepareMyPartitions.txt", and then run the script by using the DiskPart tool to
automate the configuration of the Utility1, Utility2, system, extended, Windows, and recovery tools partitions:
select disk 0
clean
rem == 1. System partition ======================
create partition primary size=100
format quick fs=ntfs label="System"
assign letter="S"
active
rem == 2. Utility partition =====================
create partition primary size=100
format quick fs=ntfs label="Utility1"
assign letter="U"
set id=27
rem == 3. Utility partition =====================
create partition primary size=200
format quick fs=ntfs label="Utility2"
assign letter="V"
set id=27
rem == 4. Extended partition ====================
create partition extended
rem == 4a. Windows partition ====================
rem == a. Create the Windows partition =======
create partition logical
rem == b. Create space for the recovery tools
shrink minimum=500
rem ** NOTE: Update this size to match the
rem size of the recovery tools
rem (winre.wim) **
rem == c. Prepare the Windows partition ======
format quick fs=ntfs label="Windows"
assign letter="C"
rem == 4b. Recovery tools partition ==============
create partition logical
format quick fs=ntfs label="Recovery"
assign letter="R"
set id=27
list volume
exit
Next Steps
After you create the partitions, you can use a deployment script to apply the Windows images on the newly
created partitions. For more information, see Capture and Apply Windows, System, and Recovery Partitions.
Related topics
Configure BIOS/MBR-Based Hard Drive Partitions
Configure multiple hard drives
2/6/2018 • 4 min to read • Edit Online
If you are deploying Windows to a computer that has multiple hard drives, you can verify that the image is applied
to a specific hard drive by using hardware-specific identifiers such as the location path or the hardware interrupt
value.
The location path is a string that specifies the physical location that each drive is connected to the computer, for
example: PCIROOT(0)#PCI(0100)#ATA(C00T00L00) . When manufacturing a computer, use a consistent physical
location when connecting your drives, and then use the location path string to identify each hard drive.
For BIOS-based computers or a computer that is running Virtual Disk Service (VDS), you can use the SELECT
DISK=SYSTEM and SELECT DISK=NEXT commands to select the appropriate hard drive.
HITACHI HTS722016K9SA00
Disk ID: 5E27161A
Type : ATA
Bus : 0
Target : 0
LUN ID : 0
Location Path : PCIROOT(0)#PCI(0100)#ATA(C00T00L00)
Read-only : No
Boot Disk : Yes
PagefileDisk : Yes
Hibernation File Disk : No
CrashdumpDisk : Yes
Clustered Disk : No
DISKPART>
```
Selecting Drives
Selecting the system drive
1. BIOS-based computers: Use the command SELECT DISK=SYSTEM to select the default system drive.
This command selects the drive that has an interrupt 13h value of 80h. If the value 80h is assigned to a USB
flash drive, this command selects a hard drive that has a value of 81h.
2. UEFI-based computers: To select a drive, use the DiskPart command SELECT DISK=<location path>.
Note
Do not use the SELECT DISK=SYSTEM command or the GetSystemDiskNTPath API on Unified Extensible
Firmware Interface (UEFI)-based computers to select the system drive. The SELECT DISK=SYSTEM
command and the GetSystemDiskNTPath API identify the drive that the operating system was booted from
as the system drive. If you boot from Windows® PE, this command selects the Windows PE drive as the
system drive. If you boot from a system that has multiple drives that include an EFI system partition (ESP),
this command may select the wrong drive.
Selecting a non-system drive
1. Select the drive by location path. To select a drive, use the DiskPart command SELECT DISK=<location
path>, where <location path> is the location path of your drive. This command helps specify a drive by
location.
Example:
SELECT DISK=PCIROOT(0)#PCI(0100)#ATA(C00T00L00)
2. Select the drive by using the "NEXT" drive. Use the DiskPart command SELECT DISK=NEXT. This
command helps specify any remaining hard drives, regardless of location. To select more drives, repeat the
SELECT DISK=NEXT command to select each drive in order. If there are no more drives to select, DiskPart
returns an error.
Note
The computer maintains the context for the SELECT DISK=NEXT command as long as DiskPart continues
running. If DISKPART exits, the computer loses this context.
UEFI-based example:
```
SELECT DISK=PCIROOT(0)#PCI(0100)#ATA(C00T00L00)
clean
convert gpt
rem == 1. System partition =========================
create partition efi size=100
rem ** NOTE: For Advanced Format 4Kn drives,
rem change this value to size = 260 **
format quick fs=fat32 label="System"
assign letter="S"
rem == 2. Microsoft Reserved (MSR) partition =======
create partition msr size=16
rem == 3. Windows partition ========================
rem == a. Create the Windows partition ==========
create partition primary
rem == b. Create space for the recovery tools ===
shrink minimum=500
rem ** NOTE: Update this size to match the
rem size of the recovery tools
rem (winre.wim) **
rem == c. Prepare the Windows partition =========
format quick fs=ntfs label="Windows"
assign letter="W"
rem === 4. Recovery tools partition ================
create partition primary
format quick fs=ntfs label="Recovery tools"
assign letter="R"
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001
rem NON-SYSTEM DRIVE ===============================
SELECT DISK=NEXT
clean
convert gpt
rem == 1. Microsoft Reserved (MSR) partition =======
create partition msr size=16
rem == 2. Data partition ===========================
create partition primary
format quick fs=ntfs label="Data"
assign letter=z
```
SELECT DISK=PCIROOT(0)#PCI(0100)#ATA(C01T01L00)
select partition=1
assign letter=s
select partition=2
assign letter=t
select partition=3
assign letter=w
Related topics
Hard Disk Location Path Format
DiskPart Command line syntax
Capture and Apply Windows, System, and Recovery
Partitions
2/6/2018 • 4 min to read • Edit Online
Capture a Windows image (.WIM) file and use it to deploy Windows to new devices.
Rather than capturing each partition, you can capture just the Windows partition into an image, and then use the
files from that image to set up the rest of the partitions on the drive.
The following diagram illustrates this process:
powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
W:\Windows\System32\bcdboot W:\Windows /s S:
5. Copy the Windows Recovery Environment (RE) tools into the recovery tools partition.
md R:\Recovery\WindowsRE
copy W:\Windows\System32\Recovery\winre.wim R:\Recovery\WindowsRE\winre.wim
3. On the destination computer, run the Diskpart and ApplyImage scripts to apply the image to the
computer and set up the system, Windows, and recovery partitions. For example:
diskpart /s D:\CreatePartitions-UEFI.txt
ApplyImage E:\Images\ThinImage.wim
bcdboot C:\Windows
Related topics
Configure UEFI/GPT-Based Hard Drive Partitions
Configure BIOS/MBR-Based Hard Drive Partitions
BCDboot Command-Line Options
REAgentC Command-Line Options
Windows Full Flash Update (FFU) images
12/6/2017 • 6 min to read • Edit Online
Deploy Windows faster on the factory floor by using the Full Flash Update (FFU) image format. FFU images allow
you to apply an image of a physical drive, including Windows, recovery, and system partition information all at
once directly to a different drive.
Unlike the file-based WIM format, FFU is a sector-based file container that stores one or more partitions. Sector-
based imaging means that FFUs take less time to deploy, but have larger files sizes than WIMs. See WIM vs. VHD
vs. FFU: comparing image file formats for information about the differences between image formats.
Starting with Windows 10, version 1709, DISM has the ability to capture, deploy, and service FFUs, with the
following limitations:
The drive that an FFU is applied to has to be the same or larger than the drive it is captured from
FFU captures of encrypted disks are not supported
Captures of disks that have Volume Shadow Copy Service (VSS) enabled are not supported
Splitting compressed FFUs is not supported
Capture an FFU
1. Boot the reference PC using WinPE bootable media.
2. Identify the drive to which you'll be capturing the image from. You can use diskpart, or add Windows
PowerShell support to WinPE and use Get-Disk for scriptability and more complex setups such as a server
with multiple disks.
diskpart
list disk
exit
The output will list your drives. Make a note of the disk number in the Disk ### column. This is the value
that you'll use when capturing your image.
DISKPART>
3. Use DISM to capture an image of all the partitions on the physical drive. For disk X:, the string used with
/capturedrive will look like this: \\.\PhysicalDriveX , where X is the disk number that diskpart provides.
For example, to capture Disk 0, you'd use /CaptureDrive:\\.\PhysicalDrive0 .
For more information about PhysicalDriveX, see CreateFile function.
To see command line options for capturing FFUs, run dism /capture-ffu /? or see DISM Image
Management Command-Line Options. Note that you shouldn't have to specify a PlatformID when
capturing a desktop image.
The following command captures an FFU image of PhysicalDrive0 called WinOEM.ffu. The /name and
/description arguments allow you to set information about your image. This information is displayed when
you use dism /get-imageinfo . /name is required, /description is optional.
This command also gives a name and description to the FFU image. Name is a required parameter.
diskpart
list disk
exit
To see the commands available with /apply-ffu, run dism /apply-ffu /? or see DISM Image Management
Command-Line Options.
5. Optional. Resize the Windows partition on the destination PC.
If the reference PC and the destination PC have different sized hard drives, you'll have to resize the
destination PC's Windows partition. The applied FFU will have the same partition sizes and layout as the
reference PC, so you'll need to expand the Windows partition to take advantage of the additional space on
the destination PC. If the Windows partition is not the last partition on the drive, you won't be able to easily
extend the Windows partition. The below instructions assume that the Windows partition is the last
partition on the drive.
NOTE
If you're going to be capturing an FFU from a smaller drive than the drive it will be applied to, make sure that the
Windows partition is the last partition on the drive. ApplyImage.bat in the Sample scripts from the the OEM
Windows desktop deployment and imaging lab gives you the ability to deploy Windows for this scenario.
a. In WinPE on your destination PC, identify the volume of the Windows partiton that you have applied.
diskpart
list volume
b. Select the volume of the Windows partition. We'll use Volume 0 in our example.
select volume 0
c. Extend the partition to fill the unused space, and exit Diskpart.
extend
exit
To see available command line options for /mount-image run dism /mount-image /? or see DISM image
management command line options.
3. Service your image. For example, to enable the legacy components feature:
If you decide to not keep the changes you've made to the FFU, you can use /unmount-image with the
/discard option:
Related topics
Download and install the Windows ADK
FFU image format
WIM vs. VHD vs. FFU: comparing image file formats
Planning a Multicast Strategy in Configuration Manager
Capture and Apply Windows, System, and Recovery Partitions
DISM Image Management Command-Line Options
CreateFile function
WIM vs. VHD vs. FFU: comparing image file formats
10/17/2017 • 1 min to read • Edit Online
Comparing .WIM, .VHD/.VHDX, and .FFU: These file formats are all used to deploy Windows to new devices. Here's
how they compare:
Windows image (.WIM) Virtual Hard Disk Full Flash Update (.FFU)
(.VHD/VHDX)
Common uses Fastest for testing and Easiest for deploying Fastest for capturing
modifying Windows Windows to virtual PCs. and deploying Windows
images. on a factory floor.
You can boot a new
Quickly mounting and device directly from a
modifying images. single VHD/VHDX file.
What does it capture? A set of files, up to an Captures the full set of Captures the full set of
entire partition. drive information, drive information,
including partitions. including partitions.
When I apply the image, Adds the files and Cleans the entire drive. Cleans the entire drive.
what happens? folders to the partition.
If there are existing files
and folders with the
same names, they're
replaced. Otherwise, the
existing files are kept.
Can I deploy to different Yes. Yes, though the new Yes, though the new
sizes of hard drives? drive must be the same drive must be the same
size or larger than the size or larger than the
original. original.
Can I modify the images? Yes. With tools like Yes, you can mount a Yes. With tools like
DISM, you can mount, VHD/VHDX as if it were DISM, you can mount,
modify, and unmount removable media, and modify, and unmount
the image. modify the files. the image.
Reliability Includes a catalog and
hash table to validate a
signature upfront before
flashing onto a device.
The hash table is
generated during
capture, and validated
when applying the
image.
Related topics
DISM Deployment Image Servicing and Management (DISM) Command-Line Options
VHD/VHDX Boot to VHD (Native Boot): Add a Virtual Hard Disk to the Boot Menu
Deploy Windows on a VHD (Native Boot)
FFU Deploy Windows using Full Flash Update (FFU)
DISM Image Management Command-Line Options
FFU image format
Compact OS, single-instancing, and image
optimization
12/22/2017 • 8 min to read • Edit Online
Windows 10 includes tools to help you use less drive space. You can now compress the files for the entire
operating system, including your preloaded desktop applications. Compact OS lets you run the operating system
from compressed files (similar to WIMBoot in Windows 8.1 Update 1), and single-instancing helps you run your
pre-loaded Windows desktop applications in compressed files. The new processes helps maintain a small
footprint over time by using individual files, rather than combining them in a WIM file.
Here's some ways to shrink the image, optimize the image, and some considerations when deploying to low-cost
devices.
This is usually done by running a deployment script. To learn more, see Apply Images Using DISM.
Note: If you're applying an image in compact mode and using the /ScratchDir option, make sure your
ScratchDir folder is not on a FAT32-formatted partition. Using a FAT32 partition could result in unexpected
reboots during OOBE.
To deploy Compact OS from Windows Setup
Use an unattend.xml file with the setting: Microsoft-Windows-Setup\ImageInstall\OSImage\Compact.
To deploy Compact OS with a USB bootable drive
For Windows 10, Version 1607 and earlier
1. On your technician PC, open Windows ICD and create your project.
2. Plug in a USB flash drive and note the drive letter (example: D:).
3. Click Create > Production Media > WIM > Enable OS File Compression: Yes > Next > USB Bootable
drive > drive letter (D:) > Next > Build.
4. Boot the destination PC using the USB flash drive. Windows installs automatically.
Note When running Windows Imaging and Configuration Designer (ICD) on a PC running a previous version of
Windows, such as Windows 8.1, you'll need to install the Windows Assessment and Deployment Kit (ADK) with
both the Windows ICD and Deployment Tools features. This installs the latest versions of the drivers required
by DISM (wimmount.sys and adkwof.sys) used to create Compact OS images.
To deploy Compact OS from an FFU image
For Windows 10, Version 1607 and earlier
1. To deploy an FFU image as compressed, the original FFU image must be created as a compressed image.
From Windows ICD, click Create > Production Media > FFU > Enable OS File Compression: Yes >
name the file, for example, D:\flash.ffu > Build.
2. You can deploy the FFU image directly to a drive from Windows ICD or from Windows Preinstallation
Environment (WinPE). To learn more, see Deploy Windows using Full Flash Update (FFU).
Note When running Windows Imaging and Configuration Designer (ICD) on a PC running a previous version of
Windows, such as Windows 8.1, you'll need to install the Windows Assessment and Deployment Kit (ADK) with
both the Windows ICD and Deployment Tools features. This installs the latest versions of the drivers required
by DISM (wimmount.sys and adkwof.sys) used to create Compact OS images.
Command-line support
You can query whether the operating system is running Compact OS, and change it at any time, using the
Compact.exe command.
From Windows PE, determine if the OS is compacted:
Compact.exe /CompactOS:always
where C is the drive that contains the provisioning package. Any single-instanced provisioning package on the
drive will be listed in the command output. If there are none, the command will return "Error: The system cannot
find the file specified."
Image optimization
After applying updates to a Windows image, cleanup the image and then export it to a new file:
md c:\mount\Windows
md C:\mount\temp
where C:\Images\install.wim is a Windows image file that you want to update. Beginning with Windows 10,
version 1607, you can optionally specify the /Defer parameter with /ResetBase to defer any long-running cleanup
operations to the next automatic maintenance, but we highly recommend that only use /Defer as an option in the
factory where DISM /ResetBase requires more than 30 minutes to complete.
Size comparisons
The table below shows the additional space saved by using compact OS, Single instancing, and reducing or
turning Off Hiberfile on 2GB (x86 processor architecture) and 4GB (x64 processor architecture), on Windows 10,
version 1607:
IMAGE WINDOWS 10 HOME X86, 2GB MEMORY WINDOWS 10 HOME X64, 4GB MEMORY
Compact OS, with no single instancing 8.85GB (>2.75GB savings) 11.3GB (>3.7GB)
This topic highlights the requirements for deploying a Windows BitLocker Drive Encryption solution. For more
information about BitLocker, see BitLocker Drive Encryption on the TechNet website.
Related topics
Hard Drives and Partitions Overview
Hard Disk Location Path Format
6/6/2017 • 1 min to read • Edit Online
This topic describes the hard disk location-path format. This format is used to identify each disk in the DiskPart tool
by using the location path. The location-path format is based on the physical connection to the computer.
For instructions that describe how to configure Windows® to identify a drive based on the location-path format,
see Configure Multiple Hard Drives.
Location-Path Format
The basic syntax for the location path for disks that have a Small Computer System Interface (SCSI), Serial Attached
SCSI (SAS), or Redundant Array of Independent Disks (RAID) bus type is as follows:
<PnP location path of the adapter>#<Bus Type>(P<Path ID>T<Target ID>L<LUN ID>)
The basic syntax for the location path for disks that have an Advanced Technology Attachment (ATA) or Serial ATA
(SATA) bus type is as follows:
<PnP location path of the adapter>#<Bus Type>(C<Channel ID>T<Target ID>L<LUN ID>)
The following table defines the elements in the location path.
ELEMENT DESCRIPTION
<PnP location path of the adapter> Path of the adapter. Retrieve the path by calling the
SetupDiGetDeviceProperty with the
DEVPKEY_Device_LocationPaths property.
#<Bus Type> One of the following types: ATA, SCSI, SAS, or RAID.
Note
For disks that use the ATA/SATA bus type, the Channel
ID refers to the same field as PathID. The prefix C is still
used.
SCSI PCIROOT(0)#PCI(1C00)#PCI(0000)#SCSI(P00T01L01)
SAS PCIROOT(1)#PCI(0300)#SAS(P00T03L00)
Related topics
Configure Multiple Hard Drives
DiskPart Command-Line Syntax
Repair the boot menu on a dual-boot PC
7/13/2017 • 1 min to read • Edit Online
When setting up a PC to boot more than one operating system, you may sometimes lose the ability to boot into
one of the operating systems. The BCDBoot option allows you to quickly add boot options for a Windows-based
operating system.
Bcdboot D:\Windows
c. Reboot the PC. Now, the boot menu will show both menu options.
Related topics
BCDboot Command-Line Options
Deploy Windows with a VHDX (Native Boot)
1/30/2018 • 5 min to read • Edit Online
Native boot enables Windows 10 virtual hard disks (VHDXs) to run on a computer without a virtual machine or
hypervisor. A hypervisor is a layer of software under the operating system that runs virtual machines. Native boot
for Windows 10 requires the .vhdx format, not the .vhd format.
Common Scenarios
Using disk-management tools to create and attach a VHDX for offline image management. You can attach a
VHDX by using the Attach vdisk command which activates the VHDX so that it appears on the host as a
disk drive instead of as a .vhd file.
Mounting reference VHDX images on remote shares for image servicing.
Maintaining and deploying a common reference VHDX image to execute in either virtual or physical
computers.
Configuring VHDX files for native boot without requiring a full parent installation.
Configuring a computer to boot multiple local VHDX files that contain different application workloads,
without requiring separate disk partitions.
Using Windows Deployment Services (WDS) for network deployment of VHDX images to target computers
for native boot.
Managing desktop image deployment.
Requirements
The local disk must have at least two partitions: a system partition that contains the Windows boot-
environment files and Boot Configuration Data (BCD) store, and a partition to store the VHDX file. The .vhd
file format is supported for native boot on a computer with a Windows 7 boot environment, but you will
have to update the system partition to a Windows 8 or Windows 10 environment to use the .vhdx file
format. For more information about how to add a Windows 8 or Windows 10 boot environment for native
VHDX boot, see Boot to VHDX (Native Boot): Add a Virtual Hard Disk to the Boot Menu.
The local disk partition that contains the VHDX file must have enough free disk space for expanding a
dynamic VHDX to its maximum size and for the page file created when booting the VHD. The page file is
created outside the VHDX file, unlike with a virtual machine where the page file is contained inside the VHD.
Benefits
Using the same image-management tools for creating, deploying, and maintaining system images to be
installed on designated hardware or on a virtual machine.
Deploying an image on a virtual machine or a designated computer, depending on capacity planning and
availability.
Deploying Windows for multiple boot scenarios without requiring separate disk partitions.
Deploying supported Windows images in a VHDX container file for faster deployment of reusable
development and testing environments.
Replacing VHDX images for server redeployment or recovery.
Limitations
Native VHXD disk management support can attach approximately 512 VHDX files concurrently.
Native VHDX boot does not support hibernation of the system, although sleep mode is supported.
VHDX files cannot be nested in other VHDX files.
Native VHDX boot is not supported over Server Message Block (SMB) shares.
Windows BitLocker Drive Encryption cannot be used to encrypt the host volume that contains VHDX files
that are used for native VHDX boot, and BitLocker cannot be used on volumes that are contained inside a
VHD.
The parent partition of a VHDX file cannot be part of a volume snapshot.
An attached VHDX can't be a dynamic disk. A dynamic disk provides features that basic disks do not, such as
the ability to create volumes that span multiple disks (spanned and striped volumes), and the ability to
create fault-tolerant volumes (mirrored and RAID-5 volumes). All volumes on dynamic disks are known as
dynamic volumes.
The parent volume of the VHDX cannot be configured as a dynamic disk. Store the VHDX on a basic disk.
Related topics
Deploy Windows with a VHD (Native Boot)
Boot to a virtual hard disk: Add a VHDX or VHD to
the boot menu
1/30/2018 • 4 min to read • Edit Online
Native Boot allows you to create a virtual hard disk (VHDX), install Windows to it, and then boot it up, either on
your PC side-by-side with your existing installation, or on a new device.
A native-boot VHDX can be used as the running operating system on designated hardware without any other
parent operating system. This differs from a scenario where a VHDX is connected to a virtual machine on a
computer that has a parent operating system.
Native boot for Windows 10 requires the .vhdx format, not the .vhd format.
VHDXs can be applied to PCs or devices that have no other installations of Windows, without a virtual machine or
hypervisor. (A hypervisor is a layer of software under the operating system that runs virtual computers.) This
enables greater flexibility in workload distribution because a single set of tools can be used to manage images for
virtual machines and designated hardware.
You can also deploy the VHDX to a PC that already has Windows installed on it, and use a boot menu to select
between the existing version of Windows, or the version on the VHD.
To learn more about using VHDXs in an enterprise environment, see Understanding Virtual Hard Disks with Native
Boot.
Prerequisites
A technician PC with the Windows Assessment and Deployment Kit (Windows ADK) tools installed on it.
A generalized Windows image (.WIM file). To learn more, see Sysprep (Generalize) a Windows installation.
A bootable Windows PE drive. To learn more, see WinPE: Create USB Bootable drive.
A destination PC or device on which to install the VHDX. This device requires 30 gigabytes (GB) or more of
free disk space. You can install the VHDX to a device already running other operating system installations,
or as the only operating system on a device.
diskpart
2. Create and prepare a new VHDX. In this example, we create a 25 GB fixed-type VHDX.
3. Attach the VHDX. This adds the VHDX as a disk to the storage controller on the host.
attach vdisk
4. Create a partition for the Windows files, format it, and assign it a drive letter. This drive letter will appear in
File Explorer.
5. Exit Diskpart
exit
diskpart
select vdisk file=C:\windows.vhdx
detach vdisk
exit
2. Copy the VHDX to a network share or removable storage drive. The following maps a drive letter to a
network share, creates a directory for the VHD, and then copies the VHD.
UEFI:
diskpart
select disk 0
clean
convert gpt
rem == 1. System partition =========================
create partition efi size=100
format quick fs=fat32 label="System"
assign letter="S"
rem == 2. Microsoft Reserved (MSR) partition =======
create partition msr size=128
rem == 3. Main partition ===========================
create partition primary
format quick fs=ntfs label="Main"
assign letter="M"
exit
3. Connect to the network drive or storage location where you copied the VHDX in step 3.2.
4. Copy the VHDX from the network drive or storage location to the destination PC's main partition.
copy N:\VHDs\Windows.vhdx M:
diskpart
select vdisk file=M:\windows.vhdx
attach vdisk
2. Identify the attached VHDX's volume letter. (Optional: Change it to another letter that makes more sense,
for example V, and leave the diskpart command line open for the next step).
list volume
select volume 3
assign letter=v
diskpart
list volume
exit
2. Add a boot entry to the device. You can add multiple VHDX files using this method.
BIOS:
V:
cd v:\windows\system32
bcdboot v:\windows /s S: /f BIOS
UEFI:
V:\
cd v:\windows\system32
bcdboot v:\windows /s S: /f UEFI
Related topics
Understanding Virtual Hard Disks with Native Boot
BCDboot Command-Line Options
Secure Boot
5 min to read •
Edit O nline
Secure Boot is a security standard developed by members of the PC industry to help make sure that your PC
boots using only software that is trusted by the PC manufacturer. Support for Secure Boot was introduced in
Windows 8.
When the PC starts, the firmware checks the signature of each piece of boot software, including firmware drivers
(Option ROMs), EFI applications, and the operating system. If the signatures are good, the PC boots, and the
firmware gives control to the operating system.
Manufacturing Requirements
Secure Boot requires a PC that meets the UEFI Specifications Version 2.3.1, Errata C or higher.
Secure Boot is supported for UEFI Class 2 and Class 3 PCs. For UEFI Class 2 PCs, when Secure Boot is enabled, the
compatibility support module (CSM) must be disabled so that the PC can only boot authorized, UEFI-based
operating systems.
Secure Boot does not require a Trusted Platform Module (TPM).
To enable kernel-mode debugging, enable TESTSIGNING, or to disable NX, you must disable Secure Boot. For
detailed info for OEMs, see Windows 8.1 Secure Boot Key Creation and Management Guidance.
How it works
The OEM uses instructions from the firmware manufacturer to create Secure Boot keys and to store them in the
PC firmware. For info, see Windows 8.1 Secure Boot Key Creation and Management Guidance, Secure Boot Key
Generation and Signing Using HSM (Example), or contact your hardware manufacturer.
When you add UEFI drivers (also known as Option ROMs), you'll also need to make sure these are signed and
included in the Secure Boot database. For info, see UEFI Validation Option ROM Validation Guidance.
When Secure Boot is activated on a PC, the PC checks each piece of software, including the Option ROMs and the
operating system, against databases of known-good signatures maintained in the firmware. If each piece of
software is valid, the firmware runs the software and the operating system.
Signature Databases and Keys
Before the PC is deployed, the OEM stores the Secure Boot databases onto the PC. This includes the signature
database (db), revoked signatures database (dbx), and Key Enrollment Key database (KEK) onto the PC. These
databases are stored on the firmware nonvolatile RAM (NV-RAM) at manufacturing time.
The signature database (db) and the revoked signatures database (dbx) list the signers or image hashes of UEFI
applications, operating system loaders (such as the Microsoft Operating System Loader, or Boot Manager), and
UEFI drivers that can be loaded on the individual PC, and the revoked images for items that are no longer trusted
and may not be loaded.
The Key Enrollment Key database (KEK) is a separate database of signing keys that can be used to update the
signature database and revoked signatures database. Microsoft requires a specified key to be included in the KEK
database so that in the future Microsoft can add new operating systems to the signature database or add known
bad images to the revoked signatures database.
After these databases have been added, and after final firmware validation and testing, the OEM locks the
firmware from editing, except for updates that are signed with the correct key or updates by a physically present
user who is using firmware menus, and then generates a platform key (PK). The PK can be used to sign updates to
the KEK or to turn off Secure Boot.
OEMs should contact their firmware manufacturer for tools and assistance in creating these databases. For more
info, see Windows 8.1 Secure Boot Key Creation and Management Guidance.
Boot Sequence
1. After the PC is turned on, the signature databases are each checked against the platform key.
2. If the firmware is not trusted, the UEFI firmware must initiate OEM-specific recovery to restore trusted
firmware.
3. If there is a problem with Windows Boot Manager, the firmware will attempt to boot a backup copy of
Windows Boot Manager. If this also fails, the firmware must initiate OEM-specific remediation.
4. After Windows Boot Manager has started running, if there is a problem with the drivers or NTOS kernel,
Windows Recovery Environment (Windows RE) is loaded so that these drivers or the kernel image can be
recovered.
5. Windows loads antimalware software.
6. Windows loads other kernel drivers and initializes the user mode processes.
For more information, see the whitepaper: Secured Boot and Measured Boot: Hardening Early Boot Components
Against Malware.
Related topics
Secure Boot isn't configured correctly: troubleshooting
Secure Boot isn't configured correctly: Determine if the PC is in a manufacturing mode (info for manufacturers)
Secured Boot and Measured Boot: Hardening Early Boot Components Against Malware
UEFI Firmware
Windows Secure Boot Key Creation and
Management Guidance
7/13/2017 • 40 min to read • Edit Online
Related topics
Secure Boot Key Generation and Signing Using HSM (Example)
UEFI Validation Option ROM Validation Guidance
Secure Boot Overview
Secure Boot Key Generation and Signing Using HSM
(Example)
7/13/2017 • 12 min to read • Edit Online
Version 1.3
Here's an example of how to generate Secure Boot keys (PK and others) by using a hardware security module
(HSM).
You'll need to know the Secure Boot Public Key Infrastructure (PKI). For more info, see Windows 8.1 Secure Boot
Key Creation and Management Guidance.
Requirements
Tools Needed
certreq.exe – Available Inbox
certutil.exe – Available Inbox
Signtool.exe – Available in the latest Windows SDK
Hardware Security Module (HSM )
The whitepaper demonstrates the key generation using examples from the nCipher (now Thales) PCI HSM model
nC1003P/nC3023P/nC3033P and the SafeNet Luna HSMs. Most of the concepts apply to other HSM vendors as
well.
For other HSMs, contact your manufacturer for additional instructions on how to tailor your approach with the
HSM Cryptographic Service Provider (CSP).
Approach
We use the Microsoft certificate creation tool: certreq.exe to generate the Secure Boot Platform Key (PK) and other
keys needed for Secure Boot.
The certreq tool can be adapted to use an HSM by providing the Cryptographic Service Provider (CSP) to be the
HSM.
Find the Cryptographic Service Provider (CSP)
You can use either the certutil.exe tool or a tool used by the HSM to list the CSPs.
This example uses the certutil tool to show the CSPs on the Thales/nCipher HSM:
C:\secureboot_training\certreq> certutil -csplist
Provider Name: Microsoft Base Cryptographic Provider v1.0
Provider Type: 1 - PROV_RSA_FULL
Provider Name: Luna enhanced RSA and AES provider for Microsoft Windows
Provider Type: 24 - PROV_RSA_AES
For SHA-256 digest algorithm you will need to use a CNG provider – “SafeNet Key Storage Provider”.
Legacy providers do not support SHA-256 and are not suitable for use with Secure Boot.
To generate the key:
Sample output:
my
================ Certificate 16 ================
X509 Certificate:
Version: 3
Serial Number: 7569d364a2e77b814274c81ae6360ffe
Signature Algorithm:
Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA
Algorithm Parameters:
05 00
Issuer:
CN=test self-signed
Subject:
CN=test self-signed
Signature Algorithm:
Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA
Algorithm Parameters:
05 00
Signature: UnusedBits=0
0000 3c 08 5f e0 a7 42 2a bc 58 61 64 43 b6 f4 23 99
0010 ca 58 b1 8c a3 6b eb 9c 31 a0 ce 25 3a d5 b4 74
0020 c2 0c 9c 00 1e c8 0f d2 05 3d fc 5d 6f 17 cd ac
0030 4d 14 9e d4 2b 45 1e ad 5f 5b ee 23 a8 29 65 b3
0040 cd c4 fd 5c e6 6a bd 95 ce f0 f9 be 31 19 87 90
0050 f8 86 c4 31 a8 b3 d5 b3 14 24 5b de f8 c0 f9 9c
0060 96 a2 b5 89 39 41 bd 4b 5f 04 16 10 c0 5c b8 fb
0070 1d 8d 64 b2 87 00 72 46 b9 5e d0 3a 75 8d ea 5a
0080 f6 5d 9c c5 03 cd c8 54 b7 7a ef c8 3e 3f 4b f6
0090 d2 c7 70 67 29 92 70 44 fc c6 2e c9 42 dd 6e 01
00a0 c5 71 27 20 51 ed 34 3c 98 c2 bc 1f 57 16 71 86
00b0 24 e3 0e 41 57 82 ba 41 df b5 6d f9 4d e4 72 80
00c0 6f 8d ab 10 06 cd 69 6b d0 82 ac db 04 da 6b a5
00d0 83 14 1a a0 6d 90 c4 01 5d 24 68 ac 10 ca db 96
00e0 44 8b ef f1 13 7f 22 15 32 93 4e 2d 23 ce 7f fb
00f0 18 9f d0 1c c1 45 2c e6 bb 23 7f 9e 22 ea fc 88
Signature matches Public Key
Root Certificate: Subject matches Issuer
Key Id Hash(rfc-sha1): 5b 3b 53 ed e3 0f a9 48 90 e0 93 09 0f f9 7b 32 3a 8d 89 4f
Key Id Hash(sha1): 1e 07 bb 05 ce d2 db 9c 9f ab d1 46 b8 32 20 e3 41 dc 4c 08
Cert Hash(md5): 45 ab 9b e4 6e 91 53 b5 96 81 10 8e 01 45 6c 54
Cert Hash(sha1): 37 ed 7c 3e ee 76 a2 d0 42 3a e3 1a 16 9f 74 d0 3c 7f 34 2c
CERT_REQUEST_ORIGINATOR_PROP_ID(71):
VM-DESKTEST.ntdev.corp.microsoft.com
CERT_KEY_PROV_INFO_PROP_ID(2):
Key Container = PKContainer
Provider = nCipher Security World Key Storage Provider
ProviderType = 0
Flags = 20
KeySpec = 0
CERT_SHA1_HASH_PROP_ID(3):
37 ed 7c 3e ee 76 a2 d0 42 3a e3 1a 16 9f 74 d0 3c 7f 34 2c
CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID(25):
12 eb 13 79 64 61 08 e9 a6 75 f2 9a 5c 49 b4 f9
CERT_KEY_IDENTIFIER_PROP_ID(20):
5b 3b 53 ed e3 0f a9 48 90 e0 93 09 0f f9 7b 32 3a 8d 89 4f
5b 3b 53 ed e3 0f a9 48 90 e0 93 09 0f f9 7b 32 3a 8d 89 4f
CERT_SIGNATURE_HASH_PROP_ID(15):
0000 38 c4 1b 14 d8 74 95 42 1b fb 7d 72 d2 0b 03 ad
0010 bd e8 aa 19 14 9e a2 41 30 fe b4 d4 93 b6 9f 3b
CERT_MD5_HASH_PROP_ID(4):
45 ab 9b e4 6e 91 53 b5 96 81 10 8e 01 45 6c 54
UI Policy = 0
Version: 0
PKContainer
Export Policy = 0
Key Usage = 3
NCRYPT_ALLOW_DECRYPT_FLAG -- 1
NCRYPT_ALLOW_SIGNING_FLAG -- 2
D:AI(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;0x1200a9;;;BU)
Sample output:
My
================ Certificate 5 ================
Serial Number: 58efcfd8f929c5bd41152a8ec413051e
Issuer: CN=test self-signed
NotBefore: 1/30/2013 3:24 PM
NotAfter: 1/30/2019 3:34 PM
Subject: CN=test self-signed
Signature matches Public Key
Root Certificate: Subject matches Issuer
Template:
Cert Hash(sha1): db 31 4d a0 d0 ef 87 d4 2b 42 f7 4b 9c 38 a1 f9 17 3e f7 a2
Key Container = PKContainer
Provider = nCipher Security World Key Storage Provider
Private key is NOT exportable
Signature test passed
CertUtil: -store command completed successfully.
C:\> signtool.exe sign /v /fd sha256 /sha1 "db314da0d0ef87d42b42f74b9c38a1f9173ef7a2" /sm /p7 .\ /p7co
1.2.840.113549.1.7.1 /p7ce DetachedSignedData KEK.bin
Where KEK.bin is the filename of the binary certificate you want to sign.
Sample output:
For more info, see Sign Tool (SignTool.exe) and Windows 8.1 Secure Boot Key Creation and Management
Guidance.
The following image is generated by launching the KeySafe utility and then navigating to the KeyList menu.
Related topics
Windows 8.1 Secure Boot Key Creation and Management Guidance
Secure Boot Overview
UEFI Validation Option ROM Guidance
7/13/2017 • 18 min to read • Edit Online
Introduction
Option ROMs (or OpROMs) are firmware run by the PC BIOS during platform initialization. They are usually stored
on a plug-in card, though they can reside on the system board.
Devices that typically require option ROMs are video cards, network adapters, and storage drivers for RAID
modules. These option ROMs also typically provide firmware drivers to the PC.
They include a variety of types of firmware drivers, including legacy PC-AT, Open Firmware, and EFI option ROMs.
Examples of firmware drivers include Video BIOS on video cards, PXE boot drivers for Ethernet adapters, and
storage drivers on RAID controllers. These devices typically have Option ROMs that provide firmware drivers.
The Unified Extensible Firmware Interface (UEFI) has support for Legacy mode option ROMs.
As per latest UEFI specification (currently at 2.3.1 Errata C – section 2.5.1.2), ISA (legacy) option ROMs are not a
part of the UEFI Specification. For the purposes of this discussion, only PCI-based UEFI-compatible option ROMs
will be considered.
Option ROMs can be used when it's not be possible to embed a device's firmware in the PC firmware. When the
option ROM carries the driver, the IHV can leverage that driver, and keep the driver and device in one place.
This document talks about why you need to validate option ROMs and shows some techniques of doing it.
Supporting both UEFI BIOS and Legacy BIOS
Many manufacturers create devices that include option ROMs and firmware for many types of PCs. Common
combos include:
Legacy ROM Only
UEFI Native OpROM
Legacy ROM + UEFI EBC OpROM
Legacy ROM + UEFI x64 OpROM
Legacy ROM + UEFI x64 + UEFI IA32
Legacy ROM + UEFI x64 + UEFI IA32 + UEFI EBC OpROM
UEFI BIOS can load and execute legacy firmware drivers when a Compatibility Support Module (CSM) is enabled.
Note that when Secure Boot is enabled, execution of the Compatibility Support Module and legacy ROMs is
prohibited because legacy firmware drivers do not support authentication.If the Option ROM format in the BIOS
configuration is set to legacy ROM, it will always use the legacy ROM on the device.
If the Option ROM format is set to UEFI Compatible, it will use the newer EFI ROM if one is present and the
legacy ROM if one is not.
UEFI drivers are necessary for many of the new firmware level security features as well as to enable UEFI boot
sequences. For example, installing Windows from an optical disk which is attached to a non-UEFI compatible
storage controller is not possible when a system is booting in UEFI mode when Secure Boot is enabled.
The default value (0x00) is ALWAYS_EXECUTE, which does not properly perform verification of signed drivers in
Option ROMs for add-in peripherals. This is not an ideal value for any system implementing UEFI Secure Boot
functionality.
Recommended Value (Best Security): DENY_EXECUTE_ON_SECURITY_VIOLATION (0x04)
In EDK II & UDK2010, proper coding practice uses an override mechanism to modify PCD values for platform
firmware. Therefore, the value for PcdOptionRomImageVerificationPolicy should not be changed in
SecurityPkg\SecurityPkg.dec . The override value should be set in the platform’s DSC file. An example is shown
below using Nt32Pkg\Nt32Pkg.dsc:
[PcdsFixedAtBuild]
gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x04
The PCD override should be placed under the [PcdsFixedAtBuild] section of the DSC file. The exact mechanism for
overriding parameters may differ depending on BIOS vendor tools.
Note
This vulnerability may exist in early implementations of UEFI Secure Boot BIOS from independent BIOS vendors.
Contact your BIOS vendor to determine if your version may be impacted.
3. Who is affected?
A UEFI PC which implements Secure Boot and has a UEFI option ROM driver which is not signed. Furthermore, the
firmware for compatibility to get the existing cards working may have a security vulnerability which doesn’t verify
option ROMs.
Laptops, netbooks, ultrabooks, & tablets: most are not affected. Option ROMs are typically present on
backplane buses such as PCI/e, ISA, and their derivatives (ExpressCard, miniPCI, CardBus, PCCard, LPC,
ThunderBolt etc). If a laptop has none of these exposed, then its attack surface is greatly reduced. Moreover, it is
likely UEFI drivers for onboard laptop components are integrated into the core BIOS firmware volume, not located
on a separate option ROM. Thus most laptops are not at risk. Also, when Legacy option ROMs are disabled, it looks
like UEFI only supports PCI-based option ROMs.
However, if you have a desktop, motherboard or a server which has a UEFI BIOS and implement Secure Boot, you
may be affected. On a server’s dedicated RAID controller, or add-in storage controller for SATA, FC etc. or Ethernet
PCIe network cards may have option ROMs. Add-in controllers supporting a wide array of functionality on servers
are common so this especially applies to the server space.
This can potentially affect 32-bit and 64-bit PCs, both class 2 and class 3.
If a Secure Boot platform supports option ROMs from devices not permanently attached to the platform and it
supports the ability to authenticate those option ROMs, then it must support the option ROM validation methods
described in Network Protocols — UDP and MTFTP and the authenticated EFI variables described in UEFI
specification 2.3.1 Errata C Section 7.2.
5. How to fix it
If the above test fails, work with your IBV to acquire the necessary versions and configure them to validate option
ROMs. Make sure that the firmware passes the test. For PCs which have shipped you will need to do a secure
firmware update. Please refer to NIST publication 800-147 and/or see Windows 8.1 Secure Boot Key Creation and
Management Guidance.
You can test the PC and leverage Windows HCK as a test tool (not a certification tool) for testing the secure
firmware update.
5.1. Signing the driver
In case you find that you may have unsigned drivers on UEFI option ROMs please read below on how to fix that.
Sign each option ROM driver individually. That will break the format of the PCI Option ROM. You only need to sign
the UEFI driver before creating the combined Option ROM.
Before inserting the UEFI driver in the OpROM, sign the UEFI image and test it with Secure Boot ON & OFF at the
UEFI Shell (load/unload the driver file). Then put the signed driver into the combined option ROM.
You can direct your IHV to Microsoft SysDev center to get their UEFI option ROMs signed through a service
available through SysDev center.
5.2. Validation of update
Run the test you mentioned above to verify that the vulnerability does not exist. Use the HCK tests to ensure that
there are no functional regressions.
6. Resources
UEFI Platform Initialization Specification, Volume 5 Standards, 1.2.1 Errata A:
http://go.microsoft.com/fwlink/p/?linkid=220187
Relevant info from UEFI 2.3.1 spec:
2.5.1: Legacy Option ROM Issues
10: Protocols –UEFI Driver Model
13.4.2: PCI Option ROMs
20: EFI Byte Code Virtual Machine
28: HII Overview
29: HII Protocols
30: HII Configuration Processing and Browser Protocol
UEFI Forum Learning Center
UEFI IHV resources @ intel.com
Use the TianoCore edk2-devel mailing list for support from other UEFI developers
TechNet: Best Practices for Enterprise Security: Security strategies
UEFI specification errata C
Trusted Computing Group
Tianocore UEFI Development Kit
UEFI Firmware
Intel Press: Beyond BIOS 2nd Edition
Windows 8.1 Secure Boot Key Creation and Management Guidance
Validating Windows UEFI Firmware Update Platform Functionality
###############################################################################
# Complete the following parameters
###############################################################################
$certname = "TestPK"
# TODO change this path to where you have the PK.cer file
# This is where you plugin the certificate generated by the HSM
$certpath = $d + "\" + $certname + ".cer"
# Each signature has an owner SignatureOwner, which is a GUID identifying the agent which inserted the
signature in the database.
# Agents might include the operating PC or an OEM-supplied driver or application.
# Agents may examine this field to understand whether they should manage the signature or not.
# TODO replace with OEM SignatureOwner GUID.
# You can use tools like Guidgen.exe tool in SDK or a similar tool to generate a GUID
$sigowner = "55555555-5555-5555-5555-555555555555"
$var = "PK"
$efi_guid = "{8BE4DF61-93CA-11d2-AA0D-00E098032B8C}"
$append = $false
###############################################################################
# Everything else is calculated
###############################################################################
$appendstring = "set_"
$attribute = "0x27"
$example = "Example_SetVariable_Data-" + $certname + "_" + $appendstring + $var + ".bin"
# OutputFilePath - Specifies the name of the file created that contains the contents of what is set.
# If this parameter is specified, then the content are not actually set, just stored into this file.
# Please note if -OutputFilePath is provided the PK is not set like in this case. The master script
sets it at the end.
# Time - you can change the time below as long as it isn't in the future. Nothing wrong with keeping it
as is.
###############################################################################
# Complete the following parameters
###############################################################################
$certname = "Fabrikam_Test_KEK_CA"
# TODO change this path to where you have the PK.cer file
# This is where you plugin the certificate generated by the HSM
$certpath = $d + "\" + $certname + ".cer"
# TODO change this path to where you have the OEM_KEK.cer file
# Each signature has an owner SignatureOwner, which is a GUID identifying the agent which inserted the
signature in the database.
# Agents might include the operating system or an OEM-supplied driver or application.
# Agents may examine this field to understand whether they should manage the signature or not.
# TODO replace with OEM SignatureOwner GUID.
# You can use tools like Guidgen.exe tool in SDK or a similar tool to generate a GUID
$sigowner = "00000000-0000-0000-0000-000000000000"
$var = "KEK"
$efi_guid = "{8BE4DF61-93CA-11d2-AA0D-00E098032B8C}"
$append = $false
###############################################################################
# Everything else is calculated
###############################################################################
# -Time You can change the time below as long as it isn't in the future. Nothing wrong with keeping it
as is.
Import-Module secureboot
try
{
Write-Host "Deleting db..."
Set-SecureBootUEFI -Name db -Time "2011-06-06T13:30:00Z" -Content $null
}
catch
{
}
Write-Host "Setting Fabrikam KEK..."
Set-SecureBootUEFI -Time 2011-05-21T13:30:00Z -ContentFilePath Fabrikam_Test_KEK_CA_SigList.bin -Name
KEK
Write-Host "`n... operation complete. `nSetupMode should now be 0 and SecureBoot should also be 0.
Reboot and verify that Windows is correctly authenticated, and that SecureBoot changes to 1."
Related topics
Windows Secure Boot Key Creation and Management Guidance
Secure Boot Overview
Validating Windows UEFI Firmware Update Platform Functionality
Disabling Secure Boot
6/6/2017 • 3 min to read • Edit Online
You may need to disable Secure Boot to run some PC graphics cards, hardware, or operating systems such as Linux
or previous version of Windows.
Secure Boot helps to make sure that your PC boots using only firmware that is trusted by the manufacturer. You
can disable Secure Boot through the PC’s firmware (BIOS) menus, but the way you disable it varies by PC
manufacturer. If you are having trouble disabling Secure Boot after following the steps below, contact your
manufacturer for help.
For logo-certified Windows RT 8.1 and Windows RT PCs, Secure Boot is required to be configured so that it cannot
be disabled.
Warning
After disabling Secure Boot and installing other software and hardware, it may be difficult to re-activate
Secure Boot without restoring your PC to the factory state.
Be careful when changing BIOS settings. The BIOS menu is designed for advanced users, and it's possible to
change a setting that could prevent your PC from starting correctly. Be sure to follow the manufacturer's
instructions exactly.
Related topics
Secure Boot Overview
Secure Boot isn't configured correctly: troubleshooting
Secure Boot isn't configured correctly:
troubleshooting
6/6/2017 • 2 min to read • Edit Online
The "Secure Boot isn't configured correctly" watermark appears on the Windows desktop when the PC is capable
of using the Secure Boot security feature, but the feature is not activated or configured correctly.
This message may appear after updating your PC from Windows 8 to Windows 8.1.
Is my PC unsafe?
Your PC may be OK, but it's not as protected as it could be, because Secure Boot isn't running.
You may need to disable Secure Boot to run some hardware, graphics cards, or operating systems such as Linux or
previous versions of Windows. For more info, see Disabling Secure Boot.
You check the status of Secure Boot on your PC. click on Start , and type msinfo32 and press enter. Under System
Summary, you can see your BIOS mode and Secure Boot State. If Bios Mode is UEFI, and Secure Boot State is Off,
then Secure Boot is disabled.
Related topics
Why is there a "SecureBoot isn't configured correctly" watermark on my desktop?
Secure Boot Overview
Microsoft Support KB article 2902864
Disabling Secure Boot
Secure Boot isn't configured correctly: Determine if
the PC is in a manufacturing mode (info for
manufacturers)
6/6/2017 • 2 min to read • Edit Online
While manufacturing PCs, if the "Secure Boot isn't configured correctly" watermark appears on the Windows
desktop, you may need to determine whether Secure Boot is disabled or if the PC is in a manufacturing/debugging
mode. The PC is in a manufacturing/debugging mode whenever a non-production policy is installed. For details,
see the whitepaper: Windows 8.1 Secure Boot Key Creation and Management Guidance on the Microsoft
Connect website, or contact your Microsoft account manager.
Note
Did you see the "Secure Boot isn't configured correctly" watermark after upgrading to Windows 8.1,
Windows Server 2012 R2, or Windows RT 8.1?
We'll be releasing a patch soon that gets rid of the watermark.
Windows 8.1 and Windows Server 2012 R2 users can install a patch to remove the watermark immediately:
Microsoft Knowledge Base Article ID 2902864.
For more info, see Secure Boot isn't configured correctly: troubleshooting.
Related topics
Secure Boot isn't configured correctly: troubleshooting
Siloed provisioning packages
7/12/2017 • 21 min to read • Edit Online
Siloed provisioning packages are a new type of provisioning package that is available for Windows 10, version
1607. Where traditional provisioning packages can capture all classic Windows applications and settings that are
installed with a Windows image, a siloed provisioning package can capture classic Windows applications
individually, drivers plus applications, settings, or capture add-ons for provisioning packages that were captured
previously. This provides more flexibility for the manufacturing process and helps reduce the time required to
build Windows-based computers in the factory.
Performance comparison
The following table shows a comparison between using the Office installer vs using siloed provisioning packages
in a typical factory floor process. When using the siloed provisioning packages to install Office, the base Office en-
us package, along with the add-on Office fr-fr and Office de-de packages are captured using the User State
Migration Tool (USMT) ScanState.exe utility as a one-time process in the imaging lab. The data in the following
table was derived from a sample run on a VM with Windows 10, version 1607 desktop image. The actual time
savings at the factory floor will vary based on the number and size of applications being installed and the
hardware spec of physical devices. The time savings can be calculated by:
(time to Sysprep & boot to Audit mode + time to install applications + time to capture applications in a PPKG +
<optional> time to single-instance the PPKG) – (time to apply SPPs + time to Sysprep & boot to Audit mode)
Before you use DISM, you'll need to copy the ADK tools again to a non-removable drive on the destination device.
Copying the file to a non-removable location avoids an error associated with installing DISM from removable
drives.
W:\ADKTools\amd64\WimMountAdkSetupAmd64.exe /Install /q
You'll use ScanState to capture siloed provisioning packages from a booted Windows installation, and DISM to
apply SPPs to an applied Windows image from WinPE.
For the full walkthrough, see Lab 10: Add desktop applications and settings with siloed provisioning packages.
Here are what the parameters for the above command mean:
PARAMETER DESCRIPTION
-sysdrive (or +sysdrive) Tells ScanState to ignore all the folders outside the Windows
namespace. For example, if there is a folder c:\Folder, that
folder will be captured when running with /apps (or
/apps:+sysdrive) but it will not be captured when running
with /apps:-sysdrive.
Typically you use +sysdrive if you want to capture the
entire state of the machine into a single siloed
provisioning package; use –sysdrive if you want to
capture a single application (or a small group of
applications).
The Windows namespace is the set of folders created by a
Windows installation, typically:
%systemdrive%\Users
%systemdrive%\ProgramData
%systemdrive%\Program Files
%systemdrive%\Program Files (x86)
%systemdrive%\Windows
%systemdrive%\Inetpub
Capture system settings and Windows desktop applications in the same package
Config_AppsAndSettingsOnly.xml is intended to capture Windows desktop applications and system settings that
are installed last-minute, so they can be placed in the recovery folder for use during PBR. For example, after a
device is booted into Audit mode on the factory floor, additional Win32 apps are installed and need to be
captured. In this case, you have two options:
Capture the additional apps and their relevant settings in one .spp using the /diff switch and
Config_AppsOnly.xml. Then capture the system settings in a separate .spp using the Config_SettingsOnly.xml.
Capture the additional apps and the system settings into one SPP using the /diff switch and
Config_AppsAndSettings.xml.
Config_AppsAndSettingsOnly.xml can also be used when you want to capture all apps and settings into one .spp
file, for use in an imaging lab or on the factory floor.
Capture drivers
This section covers how to capture different types of drivers with ScanState.
Types of drivers
ScanState for Windows 10, version 1607 captures 3rd-party drivers when you use the /drivers switch. By default,
ScanState.exe captures all 3rd party drivers, but can also capture a subset of drivers based on .inf name,
manufacturer, or class. Some driver types, like filter drivers, may not be captured when using /drivers. In this case,
run Scanstate.exe with using /apps. The /drivers switch can also be used in combination with /apps in situations
where you want to capture drivers and their associated management software, such as for printers or video cards.
Hardware drivers
To capture drivers that are installed using an .inf file, use the /drivers switch. It’s not necessary to use the /apps
switch.
To capture drivers that are installed using another method (for example, a setup.exe file), use both /drivers and
/apps. This ensures that both the driver package and all Windows desktop applications and settings created by
setup for that driver are captured at the same time. To filter out other driver packages, use the arguments that are
in combination with /drivers.
Other drivers
Drivers such as filter drivers are not captured using the /drivers switch. To capture these types of drivers, use only
the /apps switch.
Capture drivers by using patterns
Because ScanState.exe captures all 3rd-party drivers by default when using ScanState.exe /drivers , if you want to
capture only certain drivers, you have to use patterns to narrow the number of captured drivers. ScanState
processes commands left to right, so the last pattern specified in a command will take precedence over previous
patterns in the same command. For example, if you want to only capture a specific set of drivers, you would first
exclude all drivers from capture, and then include specific drivers. Since the arguments are processed in order, the
drivers specified after the exclusion of all drivers will be captured.
Here are the patterns you can use to select which drivers will be captured:
PATTERN DESCRIPTION
The following example uses a pattern to create a siloed provisioning package that contains drivers of a specific
class.
Here are what the parameters for the above command mean:
PARAMETER DESCRIPTION
/ppkg Specifies that the output will be a ppkg. This is required for
use with /drivers.
For syntax, see DISM Image Management Command-Line Options, or run DISM.exe /Apply-SiloedPackage /? from
the target location of CopyDandI.cmd.
All of the siloed provisioning packages applied by DISM will be placed in
%systemdrive%\Recovery\Customizations folder.
Saving drive space: single -instancing is automatic on compact OS
When DISM applies siloed provisioning packages to the OS image that has been applied as Compact OS on a
device, by default the packages will be applied with application files single-instanced (using WIMBoot v1 style) on
the device.
To single-instance your siloed provisioning packages on devices without Compact OS image, use DISM /Apply-
CustomDataImage while the device is booted into Windows PE.
The /Apply-SiloedPackage command works with both traditional provisioning packages and siloed provisioning
packages (.spp). -If you create provisioning packages in audit mode, you can choose to single-instance contents by
using the DISM /Apply-CustomDataImage /SingleInstance command. To learn more see Lab 1g: Make changes
from Windows (audit mode).
Push-button reset
When using ScanState to capture traditional provisioning packages, only one package with all the applications and
system settings can be placed in %systemdrive%\Recovery\Customizations folder. During push-button reset
(PBR), the single provisioning package is processed to restore the applications and system settings.
Beginning with Windows 10, version 1607, applications can be captured in multiple siloed provisioning packages
and system settings can also be captured in a separate siloed provisioning package. As a result, PBR is enhanced to
allow multiple siloed provisioning packages to be applied, in the preserved order in which they were applied using
Dism /Apply-Siloed Package. The packages can then be queued and processed in the right order during PBR to
restore the applications and system settings captured in these packages. If the packages were applied using single-
instancing, it will be honored when PBR restores them to the device.
Single-instancing can occur automatically if Compact OS is used, or manually.
If you use WinPE, then applying an image as Compact OS, then apply SPPs to it, Windows automatically single-
instances the contents of the package. To learn more, see Lab 10: Add desktop applications and settings with
siloed provisioning packages (SPPs)
If you create provisioning packages in audit mode, you can choose to single-instance the contents by using the
DISM /Apply-CustomDataImage /SingleInstance command. To learn more, see Lab 9: Make changes from
Windows (audit mode).
Scenarios for using siloed provisioning packages
This section covers scenarios using siloed provisioning packages.
Capturing and applying independent applications
A Microsoft partner can capture siloed provisioning packages of individual classic Windows applications while in
the imaging lab, and then install any combination of siloed provisioning packages in a customized order at factory
floor. For example, a partner could capture siloed provisioning packages for a PDF reader application and an
antivirus program, and then install those program packages on a specific device model at factory floor.
1. On the target device, boot to Windows PE, and apply the Windows 10, version 1607, desktop image.
2. While in Windows PE, run DISM /Apply-SiloedPackage command with the PDF reader and antivirus program
packages to apply the application files in the packages onto the applied desktop image.
3. Complete the rest of the offline customization tasks.
4. Go through first boot and run through specialize to get to Audit mode.
5. Complete the online customization/configuration tasks.
6. (Optional) While in Audit mode, run ScanState to capture only the system settings into siloed provisioning
package and place it in the recovery folder.
7. Complete the rest of the factory floor tasks and shutdown/seal the product.
Capturing and applying applications with dependencies
A Microsoft partner can use diff capture support to generate supplemental (or add-on) siloed provisioning
packages that are relevant to a previously captured parent siloed provisioning package. The siloed provisioning
packages can then be installed on devices at factory floor, with parent package first followed by combinations of
supplemental packages in the customized order.
For example. you could capture the antivirus program base siloed provisioning package, and then diff capture an
antivirus program patch (MSP) siloed provisioning packages using the base package as the parent. At the factory
floor, the antivirus program base package and a selection of patch packages, specified in the desired order, can
then be installed on a specific model device.
1. Clean install Windows 10, version 1607 on a reference device.
2. At the desktop, install the antivirus application.
3. Sysprep generalize and capture the OS image from the reference device.
4. Run ScanState.exe to capture your antivirus base siloed provisioning package.
5. Install antivirus software program patches.
6. Run ScanState.exe to diff capture the antivirus software program patches in a siloed provisioning package
using the antivirus base package.
7. Either continue using the diff switch with the already captured base and program patches packages to capture
another antivirus program patch siloed provisioning package:
a. Install additional antivirus software program patches.
b. Run ScanState.exe to diff capture the additional program patches siloed provisioning package using
antivirus base package and the first program patches SPPs.
8. Or wipe and start clean again on the reference device to diff capture another antivirus softare siloed
provisioning package:
a. Wipe and clean install the reference device using the OS image captured in step 3.
b. At the desktop, install antivirus software.
c. Run ScanState.exe to diff capture antivirus software program patches siloed provisioning package using
the antivirus base package captured in step 4.
9. Repeat either step 7 or 8 to capture any additional antivirus program patch siloed provisioning packages.
Alternatively, the siloed provisioning packages can be captured using VM instead of a physical device. When using
a VM:
1. Create a VM and boot it online using a Windows 10, version 1607 VHD/VHDX image.
2. At the desktop, install the antivirus application.
3. Create a checkpoint of the OS installation with the antivirus software on the VM.
4. Run ScanState.exe to capture your antivirus base siloed provisioning package.
5. Install antivirus software program patches.
6. Run ScanState.exe to diff capture the antivirus software program patches in a siloed provisioning package
using the antivirus base package.
7. Either continue using diff switch with the already captured base and language packages to capture another
Office 2016 language siloed provisioning package:
a. Install additional antivirus software program patches.
b. Run ScanState.exe to diff capture the additional program patches siloed provisioning package using
antivirus base package and the first program patches SPPs.
8. Or restart the VM to diff capture another antivirus software program patch siloed provisioning package:
a. Revert the VM to the checkpoint generated in step 3.
b. At the desktop, install antivirus softare.
c. Run ScanState.exe to diff capture antivirus software program patches siloed provisioning package using
the antivirus base package captured in step 4.
9. Repeat either step 7 or 8 to capture any additional antivirus program patch siloed provisioning packages.
Siloed provisioning packages can also capture applications with dependencies. For example, to capture multiple
apps that depend on .NET Framework:
1. Create a VM and boot it online using a Window 10, version 1607 VHD/VHDX image.
2. Install .NET Framework.
3. Create a checkpoint of the of the OS installation with .NET Framework.
4. Capture a base .spp, for example, DotNet.spp.
5. Install App1, capture it as App1.spp, using /diff:DotNet.spp.
6. Revert the VM to the checkpoint created in Step 3.
7. Install App2, capture it as App2.spp, using /diff:DotNet.spp.
To preserve the dependency, apply the packages in this order:
DotNet.spp, App1.spp, App2.spp
-or-
DotNet.spp, App2.spp, App1.spp
The important point is DotNet.spp must be applied first.
Capturing an Application with associated device drivers
A Microsoft partner can capture a siloed provisioning package of individual classic Windows applications that have
hardware drivers associated with them while in the imaging lab, and then install any combination of siloed
provisioning packages in a customized order at factory floor. For example, a partner could capture a siloed
provisioning package for Microsoft Mouse and Keyboard Center that contains both application and driver files.
1. Clean install Windows 10, version 1607 on a reference device.
2. At the desktop, install Microsoft Mouse and Keyboard Center.
3. Run ScanState.exe to capture Mouse and Keyboard Center siloed provisioning package, using both the /apps
and /drivers switches.
4. Wipe and clean install the reference device
5. On the target device, boot to Windows PE, and apply the Windows 10, version 1607, desktop image.
6. While in Windows PE, run DISM /Apply-SiloedPackage command with the Microsoft Mouse and Keyboard
Center package to apply the application and driver files in the packages onto the applied desktop image.
7. Complete the rest of the offline customization tasks.
8. Go through first boot and run through specialize to get to Audit mode.
9. Complete the online customization/configuration tasks.
10. (Optional) While in Audit mode, run ScanState to capture only the system settings into siloed provisioning
package and place it in the recovery folder.
11. Complete the rest of the factory floor tasks and shutdown/reseal the product.
Capturing and applying applications for BTO model
In the BTO model, last minute customizations on the factory floor could include installing additional classic
Windows applications on to a customized image. If any classic Windows applications were not captured in siloed
provisioning packages in the imaging lab, the factory floor process will then include the tasks shown in the
following diagram:
1. On the target device, boot to Windows PE, and apply Windows 10, version 1607 desktop image.
2. While in Windows PE, run DISM /Apply-SiloedPackage command specifying all the siloed provisioning
packages to apply the application files in the packages onto the applied desktop image.
3. Complete the rest of the offline customization tasks.
4. Go through first boot and run through specialize to get to Audit mode.
5. Online install of classic Windows applications in Audit mode.
6. Complete the online customization/configuration tasks.
7. Run ScanState.exe to diff capture the applications installed in step 5 into a single siloed provisioning package,
using the siloed provisioning packages for the applications already installed in the base model image as a
reference.
8. (Optional) Run ScanState to capture only the system settings into siloed provisioning package and place it in
the recovery folder.
9. (Optional) Boot the device to Windows PE, and run the DISM command to single-instance the application files
in the siloed provisioning package captured in step 7.
10. Complete the rest of the factory floor tasks and shutdown/seal the product.
Preferred process guidelines for BTO model: As described in the preceding steps, the diff capture support
provides flexibility to allow installing a classic Windows applications at the factory floor as last minute
customizations. However, the diff capture operation may take some time to complete, depending on the number
and the size of the siloed provisioning packages it needs to diff against. There is also overhead cost for the other
steps in the process. Therefore, the preferred guideline for installing a classic Windows application in the BTO
model is to incur the onetime cost of capturing the siloed provisioning packages for these applications in the
imaging lab. They can then be applied on the factory floor as needed for last-minute customizations.
Related topics
WinPE: Create USB bootable drive
Lab 9: Make changes from Windows (audit mode)
Lab 10: Add desktop applications and settings with siloed provisioning packages (SPPs)
Create a provisioning package with Windows desktop
applications
7/13/2017 • 2 min to read • Edit Online
Here's how to add Windows desktop applications and other data by using audit mode. You'll recapture these
Windows desktop applications and data into a provisioning package by using the ScanState tool. As new builds of
Windows are released, and as you prepare for different markets, you can mix and match the Windows images and
provisioning packages, rather than rebuilding and customizing the images each time.
Once you’ve captured the provisioning package, you can add it to your image by using Windows ICD.
The recovery tools also use this provisioning package. When your users refresh the device (often used in case of
device failure) or reset the device (often used to clean a device for a new user), the device keeps their installed
Windows updates, plus the updates in this provisioning package.
The Sysprep tool reseals the device. This process can take several minutes. After the process completes, the
device shuts down automatically. You can now send the device to the customer.
Device Drivers
12/6/2017 • 12 min to read • Edit Online
You can add device drivers to a Windows image before, during, or after you deploy the image. When planning
how to add drivers to your Windows deployment, it's important to understand how driver folders are added to
the image, how driver ranking affects deployment, and the digital signature requirements for drivers.
In this topic:
Adding Drivers
Managing Driver Folders
Understanding Driver Ranking
Understanding Digital Signature Requirements
Additional Resources
Adding Drivers
You can add device drivers to a Windows image:
Before deployment on an offline Windows image
During an automated deployment
After deployment on a running operating system
For more information, see Understanding Servicing Strategies.
Add drivers before deployment on an offline Windows image by using DISM
Offline servicing occurs when you modify a Windows image entirely offline without booting the operating
system. You can add, remove, and enumerate drivers on an offline Windows image by using the DISM command-
line tool. DISM is installed with Windows and is also distributed in the Windows Assessment and Deployment Kit
(Windows ADK). For more information about DISM, see the DISM - Deployment Image Servicing and
Management Technical Reference for Windows.
When you add a driver to an offline image, it's either staged or reflected in the image:
Boot-critical drivers are reflected. In other words, the files are copied into the image according to what's
specified in the .inf file. The PC completes installation tasks during the initial boot, including updating the
Critical Devices Database (CDDB) and the registry.
Drivers that aren't boot critical are staged. In other words, they're added to the driver store. After
Windows starts, PnP detects the device and installs the matching driver from the driver store.
You can use DISM commands to add or remove drivers on a mounted or applied Windows or Windows
Preinstallation Environment (Windows PE) image.
Note
You can't use DISM to remove inbox drivers (drivers that are installed on Windows by default). You can use it only
to remove third-party or out-of-box drivers.
You can also use DISM commands to apply an unattended answer file to a mounted or applied Windows image.
For more information, see Add and Remove Drivers to an Offline Windows Image.
If you're using DISM, you can add only .inf drivers to an offline Windows image. Drivers that display the Designed
for Windows logo are provided as .cab files. You must expand the .cab file before you install the .inf file if you're
using DISM for the installation. You must install a driver that's packaged as a .exe file or another file type on a
running Windows operating system. To run a .exe or Windows Installer (.msi) driver package, you can add a
custom command to an answer file to install the driver package. For more information, see Add a Custom
Command to an Answer File.
Add drivers during an automated deployment by using Windows Setup and an answer file
You can use an unattended answer file to add drivers to an image when you use Windows Setup for deployment.
In this answer file, you can specify the path of a device driver on a network share (or a local path). You accomplish
this by adding the Microsoft-Windows-PnpCustomizationWinPE or Microsoft-Windows-
PnpCustomizationNonWinPE components and specifying the configuration passes where you want to install
them. When you run Windows Setup and specify the name of the answer file, out-of-box drivers are staged
(added to the driver store on the image), and boot-critical drivers are reflected (added to the image so that they'll
be used when the computer boots). Setup uses the answer file. By adding device drivers during the windowsPE
or offlineServicing configuration passes, you can add out-of-box device drivers to the Windows image before
the computer starts. You can also use this method to add boot-critical device drivers to a Windows image. For
more information, see Add Device Drivers to Windows During Windows Setup. For more information about how
Windows Setup works, see the Windows Setup Technical Reference.
If you want to add boot-critical drivers to Windows PE, use the windowsPE configuration pass to reflect the
drivers before the Windows PE image is booted. The difference between adding boot-critical drivers during the
windowsPE configuration pass and adding them during the offlineServicing configuration pass is that during
the windowsPE configuration pass, boot-critical drivers are reflected for Windows PE to use. During the
offlineServicing configuration pass, the drivers are staged to the driver store on the Windows image.
Methods for adding device drivers by using Windows Setup include these:
Using an answer file to add drivers during the offlineServicing configuration pass of Setup.
Using an answer file to add drivers during the windowsPE configuration pass of Setup.
For Windows Server, placing drivers in the $WinPEDriver$ directory to be installed automatically during
the windowsPE configuration pass of Setup. All drive letters with a value of C or greater are scanned for a
$WinPEDriver$ directory. The drive must be accessible to the hard disk during Setup. Make sure that the
drive does not require a storage driver to be loaded before it can be accessed.
For more information about these and other configuration passes, see Windows Setup Configuration Passes.
When you're using Windows Deployment Services for deployment in Windows Server, you can add device
drivers to your server and configure them to be deployed to clients as part of a network-based installation. You
configure this functionality by creating a driver group on the server, adding packages to it, and then adding filters
to define which clients will install those drivers. You can configure drivers to be installed based on the client's
hardware (for example, manufacturer or BIOS vendor) and the edition of the Windows image that's selected
during the installation. You can also configure whether clients install all packages in a driver group or only the
drivers that match the installed hardware on the client. For more information about how to implement this
functionality, see the Windows Deployment Services documentation.
Add drivers after deployment on a running operating system by using PnPUtil or an answer file
You can use the PnPUtil tool to add or remove drivers on a running operating system. Alternatively, you can use
an answer file to automate the installation of the drivers when the computer is booted in audit mode. These
methods can be helpful if you want to maintain a simple Windows image, and then add only the drivers that are
required for a specific hardware configuration. For more information about how to use audit mode, see Boot
Windows to Audit Mode or OOBE.
Methods for adding device drivers online to a running operating system include these:
Using PnPUtil to add or remove PnP drivers. For more information, see Use PnPUtil at a command line to
install a Plug and Play device.
Using an answer file to automate the installation of PnP drivers when the computer is booted in audit
mode. For more information, see Add a Driver Online in Audit Mode.
Drivers for Windows 10 S
Drivers in Windows 10 S must meet certain requirements. See Windows 10 S driver requirements to learn about
the types of drivers you can add to Windows 10 S.
Additional Resources
These websites provide more information about device-driver requirements:
For more information about PnP driver deployment, see PnP Device Installation Signing Requirements.
For more information about digital signatures and developing drivers, see the relevant page on the
Windows Hardware Developer Central website.
Related topics
Add a Device Driver Path to an Answer File
Add a Driver Online in Audit Mode
DISM Driver Servicing Command-Line Options
Add and Remove Drivers to an Offline Windows Image
Add Device Drivers to Windows During Windows Setup
Maintain Driver Configurations when Capturing a Windows Image
BCDboot Command-Line Options
Deployment Troubleshooting and Log Files
Maintain Driver Configurations when Capturing a
Windows Image
7/13/2017 • 9 min to read • Edit Online
A common deployment scenario is to capture a single Windows image from a reference computer and then apply
the image to a group of destination computers that have identical hardware configurations.
To save time during installation and to speed up the out-of-box experience (OOBE) for end users, you can instruct
Windows Setup to maintain the driver configurations from the reference computer as part of the Windows image.
You should do this only when the hardware on the reference computer and the hardware on the destination
computers are identical. When you do this, Windows Setup maintains driver configurations during image capture
and deployment.
Overview
The Windows in-box driver packages include device drivers that support a wide variety of popular hardware. If
your specific hardware requires additional device drivers to boot, you can preinstall additional device drivers on
your Windows image. Independent Hardware Vendors (IHVs) often supply these additional device drivers together
with their device hardware. For more information about how to add device drivers, see Add a Driver Online in
Audit Mode.
To prepare a Windows image for deployment to multiple computers, you must use the System Preparation
(Sysprep) tool to generalize the Windows image. Generalizing a Windows image removes the computer-specific
information and prepares the device drivers for first boot. This preparation includes these steps:
Device state for hardware is removed.
Boot-critical driver settings are reset to their default values.
Device log files are deleted.
When you generalize the computer, use an answer file that has the Microsoft-Windows-
PnpSysPrep\PersistAllDeviceInstalls setting to save time. This setting prevents Windows Setup from removing
and reconfiguring the device state for identical hardware. On first boot, the detected device drivers are already
preconfigured, potentially enabling a quicker first-boot experience.
Important
Avoid using the PersistAllDeviceInstalls setting when the hardware and the hardware configuration on the
reference computer are not identical to those of the destination computers. Even seemingly minor differences in
hardware or hardware configuration can cause severe or easily overlooked problems. For more information, see
the Troubleshooting Hardware Configuration Differences section of this topic.
It's a good practice not to use the PersistAllDeviceInstalls setting on your primary reference image. Instead, for
each group of computers that have a different hardware configuration, first load your primary reference image
onto a new reference computer that has the planned hardware configuration. Next, capture a new image of this
setup and use the PersistAllDeviceInstalls setting.
For more information about how to generalize the Windows image, see Sysprep (Generalize) a Windows
installation.
System {4D36E97D-E325-11CE-BFC1-08002BE10318}
Computer {4D36E966-E325-11CE-BFC1-08002BE10318}
Processor {50127DC3-0F36-415E-A6CC-4CB3BE910B65}
PCMCIA {4D36E977-E325-11CE-BFC1-08002BE10318}
HDC {4D36E96A-E325-11CE-BFC1-08002BE10318}
SCSIAdapter {4D36E97B-E325-11CE-BFC1-08002BE10318}
DiskDrive {4D36E967-E325-11CE-BFC1-08002BE10318}
CDROM {4D36E965-E325-11CE-BFC1-08002BE10318}
FDC {4D36E969-E325-11CE-BFC1-08002BE10318}
FloppyDisk {4D36E980-E325-11CE-BFC1-08002BE10318}
Volume {71A27CDD-812A-11D0-BEC7-08002BE2092F}
USB {36FC9E60-C465-11CF-8056-444553540000}
SBP2 {D48179BE-EC20-11D1-B6B8-00C04FA372A7}
SYSTEM-SUPPLIED DEVICE SETUP CLASS CLASSGUID
1394 {6BDD1FC1-810F-11D0-BEC7-08002BE2092F}
Enum1394 {C459DF55-DB08-11D1-B009-00A0C9081FF6}
Keyboard {4D36E96B-E325-11CE-BFC1-08002BE10318}
Mouse {4D36E96F-E325-11CE-BFC1-08002BE10318}
HIDClass {745A17A0-74D3-11D0-B6FE-00A0C90F57DA}
Ports {4D36E978-E325-11CE-BFC1-08002BE10318}
For more information about these device setup classes, see System-Supplied Device Setup Classes on MSDN.
Undetectable hardware
When you deploy a new computer to an end user, some hardware, like a removable device or a device that has an
on/off switch, may not be present or detected during first boot. By default, on first boot, Windows Setup removes
the preconfigured device state for undetected hardware.
To deploy hardware that may not be present or detected on first boot, add any applicable device drivers to the
reference image, connect or turn on the applicable devices so that Windows can install them, and use the
Microsoft-Windows-PnpSysprep/DoNotCleanUpNonPresentDevices setting when you capture the image.
Important
Using the DoNotCleanUpNonPresentDevices setting can lead to the unnecessary storage of excess device
states and contribute to slower boot times.
[Fabrikam.NTx86]
%StandardController% = StandardController_DDInstall,PCI\VEN_ABCD&DEV_0001
%ExtremeController% = ExtremeController_DDInstall, PCI\VEN_ABCD&DEV_0002
...
[StandardController_DDInstall.Services]
AddService = storctrl,0x00000002,StandardController_ServiceInstall
[StandardController_ServiceInstall]
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ImagePath = %12%\storctrl.sys
AddReg = StandardController_ServiceSettings
[StandardController_ServiceSettings]
HKR,Settings,LowPowerMode,0x00010001,1
HKR,Settings,ErrorCorrection,0x00010001,1
...
[ExtremeController_DDInstall.Services]
AddService = storctrl,0x00000002,ExtremeController_ServiceInstall
[ExtremeController_ServiceInstall]
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ImagePath = %12%\storctrl.sys
AddReg = ExtremeController_ServiceSettings
[ExtremeController_ServiceSettings]
HKR,Settings,LowPowerMode,0x00010001,0
HKR,Settings,ErrorCorrection,0x00010001,4
...
If StandardController is on the reference computer and its settings are maintained during image capture, the
storctrl driver service is preconfigured. If ExtremeController is on the destination computer, Windows may use the
preconfigured settings and files that are intended for StandardController. This can cause unexpected results.
The IHV can help resolve the conflict by using one of these options:
Create separate driver packages that have separate .inf files for each configuration, and import only the
required driver package into the Windows image during deployment. For example, split Storctrl.inf into two
separate .inf files, one version for StandardController and one version for ExtremeController, and import only
the required driver package into the Windows image.
Create another service in the driver package for each configuration. Give each service a different name (for
example, storctrl and storctrlx) and point to a different binary image file (for example, Storctrl.sys and
Storctrlx.sys).
Related topics
Device Drivers and Deployment Overview
Add a Driver Online in Audit Mode
7/13/2017 • 2 min to read • Edit Online
You can use an answer file to automate the installation of device drivers when the computer is booted in audit
mode.
9. Boot in Windows Preinstallation Environment (Windows PE), run Windows Setup, and specify the name of
the answer file. For example:
Setup /unattend:C:\unattend.xml
The specified answer file is cached to the system so that when you run audit mode, the computer applies
settings in the answer file.
Setup finishes.
10. Run the Sysprep command with the /audit option to configure the computer to start in audit mode the
next time that it boots. For example:
When Windows reboots in audit mode, device drivers that you specified in the answer file are added.
You can use the PNPUtil tool to add, remove, and enumerate drivers on a running operating system. For more
information about how to use PNPUtil to add or remove Plug and Play drivers, see Install a Plug and Play Device.
Related topics
Device Drivers and Deployment Overview
Add Device Drivers to Windows During Windows Setup
DISM Driver Servicing Command-Line Options
Add and Remove Drivers to an Offline Windows Image
Audit Mode Overview
Boot Windows to Audit Mode or OOBE
Language Packs
1/4/2018 • 3 min to read • Edit Online
To design PCs that work better for customers in different regions, you can set up Windows with the right set of
local languages, settings, and keyboards or other input devices.
Related topics
Add Language Packs to Windows
Features On Demand
Add Language Packs to Windows
1/4/2018 • 13 min to read • Edit Online
NOTE
If you're looking to add a language to your personal PC, see Add and switch input and display language preferences in
Windows 10.
OEMs can add language packs to localize PCs and devices for customers in different regions.
For Windows 10 for desktop editions (Home, Pro, Enterprise, and Education), language packs have been split into
language components and Features On Demand. This reduction in image size can be helpful when creating
images for lower-cost devices with small storage. It can also reduce the time required to create and deploy
images.
NOTE
Not all language components are available for every language.
Language interface pack Microsoft-Windows- Requires a specific fully- UI text, including basic
Client-Language- localized or partially- Cortana capabilities.
Interface-Pack_x64_ca-
es-valencia.cab localized language pack.
Example: ca-es-valencia Not all of the language
requires es-es. To learn resources for the UI are
more, see Available included in a LIP. LIPs
Language Packs for require at least one
Windows. language pack (or parent
language). A parent
language pack provides
support for a LIP. The parts
of the UI that are not
translated into the LIP
language are displayed in
the parent language. In
countries or regions where
two languages are
commonly used, you can
provide a better user
experience by applying a LIP
over a language pack.
Other considerations
Some languages require more hard-disk storage space than others.
Although you can add a bunch of language packs at once using the commands: DISM /Add-Package, DISM
/Apply-Unattend, or LPKSetup, don't add too many at once, because the device may not have enough
memory to handle it. General recommendations: from Windows in audit mode, don't add more than 20
language packs at a time. From Windows PE, don't add more than 7. If WinPE is still running out of memory,
you can customize WinPE by adding temporary storage (scratch space).
Cross-language upgrades are not supported. This means that during upgrades or migrations, if you upgrade
or migrate an operating system that has multiple language packs installed, you can upgrade or migrate to the
system default UI language only. For example, if English is the default language, you can upgrade or migrate
only to English.
The default language cannot be removed because it is used to generate computer security identifiers (SIDs).
The default UI language is the language that is selected during the Out-Of-Box-Experience (OOBE), the UI
language specified in the Deployment Image Servicing and Management (DISM) command-line tool, or in the
unattended answer file if you skip OOBE.
To add language packs using Windows PE, you may need to add pagefile support to Windows PE. For more
information, see Deployment Image Servicing and Management (DISM) Best Practices.
If you install an update (hotfix, general distribution release [GDR], or service pack [SP]) that contains
language-dependent resources prior to installing a language pack, the language-specific changes in the
update won't be applied when you add the language pack. You need to reinstall the update to apply language-
specific changes. To avoid reinstalling updates, install language packs before installing updates.
The version of the language pack must match the version of Windows. For example, you can't add a Windows
10 language pack to Windows 8, or add Windows 8 language pack to Windows 10. The build number must
also match.
Installation methods
You can add a language pack to an image in the following ways:
Offline installation. If you need to add a language pack or configure international settings on a custom
Windows image, you can use DISM.
Using Windows Setup.
On a running operating system. If you need to boot the operating system to install an application or to test
and validate the installation, you can add a language pack to the running operating system by using DISM or
the language pack setup tool (Lpksetup.exe). You can use this method only for language packs that are stored
outside of the Windows image. For more information, see Add and Remove Language Packs on a Running
Windows Installation and Add Language Interface Packs to Windows.
NOTE
If language and locale settings are specified in an answer file, those settings overwrite any previous default. For
example, if you first change the default UILanguage setting to FR-FR by using the DISM command-line tool on an
offline image and then later apply an unattended answer file that specifies EN-US as the UI language, EN-US will be
the default UI language.
4. Use Setup to install the language packs that are in the distribution share.
To learn more, see Add Multilingual Support to a Windows Distribution or Add Multilingual Support to Windows
Setup.
Add a language
1. Add the language to Windows. You can use either the /Add-Package or /Add-Capabilities commands to
add the capabilities.
For packages with dependencies, make sure you install the packages in order. For example, to enable
Cortana, install: the language pack .cab, then Basic, then TextToSpeech, then Speech, in this order.
If you’re not sure of the dependencies, it’s OK to put them all in the same folder, and then add them all at
once using the same DISM /Add-Package command.
After adding the language pack, verify that it's in the images.
rem Remove the paragraph marks to make this into one really big, long command.
Dism /Add-Package /Image:"C:\mount\windows"
/PackagePath="C:\Languages\Microsoft-Windows-Client-Language-Pack_x64_fr-fr.cab"
/PackagePath="C:\Languages\Microsoft-Windows-LanguageFeatures-Basic-fr-fr-Package.cab"
/PackagePath="C:\Languages\Microsoft-Windows-LanguageFeatures-OCR-fr-fr-Package.cab"
/PackagePath="C:\Languages\Microsoft-Windows-LanguageFeatures-Handwriting-fr-fr-Package.cab"
/PackagePath="C:\Languages\Microsoft-Windows-LanguageFeatures-TextToSpeech-fr-fr-Package.cab"
/PackagePath="C:\Languages\Microsoft-Windows-LanguageFeatures-Speech-fr-fr-Package.cab"
Dism /Get-Capabilities /Image:"C:\mount\windows"
2. Add any other capabilities, such as fonts, required for that region. To learn more, see Features On Demand
V2 (Capabilities).
3. When you add languages to Windows, when possible, add them to WinRE to ensure a consistent language
experience in recovery scenarios. This requires a matching version of Windows and the Windows ADK.
Windows RE now requires the WinPE-HTA package, this is new for Windows 10.
After adding the packages, verify that they're in the image.
Dism /Image:C:\mount\winre /Add-Package /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-
fr\lp.cab"
Dism /Image:C:\mount\winre /Add-Package /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-fr\WinPE-
Rejuv_fr-fr.cab"
Dism /Image:C:\mount\winre /Add-Package /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-fr\WinPE-
EnhancedStorage_fr-fr.cab"
Dism /Image:C:\mount\winre /Add-Package /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-fr\WinPE-
Scripting_fr-fr.cab"
Dism /Image:C:\mount\winre /Add-Package /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-fr\WinPE-
SecureStartup_fr-fr.cab"
Dism /Image:C:\mount\winre /Add-Package /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-fr\WinPE-
SRT_fr-fr.cab"
Dism /Image:C:\mount\winre /Add-Package /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-fr\WinPE-
WDS-Tools_fr-fr.cab"
Dism /Image:C:\mount\winre /Add-Package /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-fr\WinPE-
WMI_fr-fr.cab"
Dism /Image:C:\mount\winre /Add-Package /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-fr\WinPE-
StorageWMI_fr-fr.cab"
Dism /Image:C:\mount\winre /Add-Package /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-fr\WinPE-
HTA_fr-fr.cab"
Dism /Get-Packages /Image:"C:\mount\winre"
2. Add any other capabilities, such as fonts, required for that region.
Remove a language
1. To save space, you can remove languages from an image.
You'll need to uninstall them in the reverse order from how you add them.
You can't remove a capability that other packages depend on. For example, if you have the French
handwriting and basic capabilities installed, you can't remove the basic capability. This will fail.
You can use either the DISM /Remove-Package or DISM /Remove-Capability command to remove a
capability, and either /DISM /Get-Packages or DISM /Get-Capabilities to verify that they're no longer in the
image.
It's also OK to just remove the language pack without removing the language capabilities. One week after
the user completes OOBE, if the user hasn't added the language to their input language list, Windows
automatically cleans out the unused language capabilities.
2. Remove the Windows RE optional components. After removing, verify that they're no longer in the image.
Replace build number 10.0.10120.0 with the build you are using.
3. Known issue: If you've removed the English language pack, in Windows 10 Build 10240, you'll need to
boot the image into audit mode, and use the command: sfc.exe /scannow /verify to repair issues with
Windows 32-bit apps. For an example of how to do this with a script, see Lab 2a: Answer files: Update
settings and run scripts.
Reinstall apps (required whenever adding languages)
Note: In Windows 10, version 1607, it is no longer necessary to remove inbox apps. If you do try to do this, the
DISM command may fail.
1. Re-install the apps. The following example shows you how to reinstall the Get Started inbox app. Repeat
these steps for each of the inbox apps (with the exception of AppConnector) by substituting the
appropriate package.
2. Windows desktop applications: You'll often need to reinstall these too, as they often include language-
specific files that are chosen at installation. You won't be able to update these using offline servicing;
instead you'll need to recapture the image or create a separate provisioning package for the Windows
desktop application.
For installations managed by Windows Setup or distribution shares, update the language list
1. This is only required if you're distributing multilingual Windows Setup media, or distributing Windows
through a share.
Recreate the lang.ini file.
[Available UI Languages]
ca-ES = 2
es-ES = 3
[Fallback Languages]
es-ES = en-us
2. Review the default international settings in the Windows image by using DISM.
Related topics
Language Packs
Available Language Packs for Windows
Features On Demand V2 (Capabilities)
Windows Language Pack Default Values
Default Input Locales for Windows Language Packs
Multilingual Windows Image Creation
7/13/2017 • 15 min to read • Edit Online
This walkthrough describes how to use the Windows Assessment and Deployment Kit (Windows ADK) to create and
deploy multilingual versions of Windows 10. It describes how to create a multilingual Windows image to help
reduce the number of Windows images that need to be maintained for different regions. You can deploy images
that are created by using this process from a network share, from a server, or from media.
This walkthrough describes how to add language packs and other update packages to an offline Windows image
and Windows recovery image. You then boot Windows to audit mode and add applications and drivers. You then
capture the installation to an image and use the newly captured master image for testing purposes. After you test
the image, you use it to create regional images by removing unnecessary language resources. You can then deploy
these regional images.
The process described in this walkthrough is primarily intended for OEMs who want to reduce the number of
Windows images that they maintain. By adding language packs to an offline image, you can decrease Windows
installation time and reduce the number of images that you maintain. However, because multiple language packs
are added to a single image, the size of the Windows image is increased.
IT Professionals who want to reduce the size of their overall image should instead use the process described in Add
Multilingual Support to a Windows Distribution. This process describes how to copy the lp.cab file to the Windows
distribution, reducing the overall image size.
Requirements
To complete this walkthrough, you should have a working knowledge of common desktop deployment
technologies and processes. You should also have a basic understanding of the Windows Imaging (.wim) file
format. The steps in this guide assume that you use a single Windows image within the .wim file. If you want to
reduce the number of images you maintain, you can use the lowest edition of Windows available in your .wim file,
and then use DISM to upgrade to a higher edition of Windows. If you want to maintain multiple images, you can
repeat the steps in this guide for each Windows image in the .wim file, to create multiple editions of the regional
Windows image.
Before you begin, make sure you have the following items:
Windows installation media (DVD or Windows installation files) for multiple languages. This guide uses EN-
US, De-DE and FR-FR media.
One or more language packs.
A technician computer that has the Windows Assessment and Deployment Kit (Windows ADK) installed.
A test computer that you can use to install and test Windows.
A USB drive that will be formatted during this walkthrough.
Mkdir C:\mount\windows
Mkdir C:\mount\winre
Mkdir C:\mount\boot
Mkdir C:\LanguagePack
Mkdir C:\my_Distribution
3. Copy the entire contents of the en-US Windows DVD to C:\my_Distribution. For example:
5. Type the following command to retrieve the name or index number for the image that you want to modify:
Note the index or name value of the image that you want to modify.
6. Use DISM to mount the Windows image. For example:
7. Use DISM to mount the Windows recovery environment image that exists in the Windows image. For
example:
Dism /Mount-Image /ImageFile:C:\mount\windows\Windows\System32\recovery\winre.wim /Index:1
/MountDir:C:\mount\winre
8. Add language packs to the mounted offline Windows image. You can add multiple packages on one
command line.
9. Add language packs to the mounted offline Windows recovery image. The language packs that are used for
the Windows recovery image are the same lp.cab files used with Windows PE. Use the language packs for
Windows PE that are installed with the Windows ADK. For example:
We recommend adding language packs for the following optional components that are included with
Windows recovery image:
WinPE-WinReCfg
WinPE-Rejuv
WinPE-EnhancedStorage
WinPE-Scripting
WinPE-SecureStartup
WinPE-SRT
WinPE-WDS-Tools
WinPE-WMI
WinPE-HTA
11. Configure the default language settings to use in the Windows image.
Dism /image:C:\mount\windows /set-allIntl:fr-fr
12. Configure the default language settings to use in the Windows recovery image.
14. Verify that the languages are installed and the correct language is configured as the default.
The output for the Windows image should be similar to the following:
The output for the Windows recovery image should be similar to the following:
Reporting offline international settings.
15. Unmount the images, committing the changes. Note that you must unmount the Windows recovery image
before you unmounts and commit the Windows image.
3. Add Windows PE language packs and Windows Setup optional components to the mounted image for each
language you want to support. For example:
Note
These Windows Setup language packs are for the client editions of Windows only. For Windows Server, you
must use winpe-setup-server .cab files.
5. Add the Windows PE language specific optional components. For example:
6. In your Windows distribution, copy the language-specific Setup resources from each language specific
Windows distribution to the Sources folder in your distribution share. For example, insert the Windows DVD
for Fr-FR in your DVD drive (E:) and copy the Fr-FR sources folder to your Windows distribution.
Mkdir C:\my_distribution\sources\fr-fr
Mkdir C:\my_distribution\sources\de-de
8. Get the language settings that are configured in the Windows image by using the /Get-Intl parameter. For
example
9. Change the default language, locale, and other international settings by using the /set-allInlt parameter.
10. Recreate the lang.ini file. The Lang.ini file must be re-created each time you add or remove language
resources from your distribution, and when you add or remove language packs from your Windows image.
12. Use DISM to unmount the Windows boot image and commit the changes. You must also unmount the
Windows image. Because none of the files have changed in the Windows image, you can discard the
changes. For example,
Where F is the drive letter of the USB drive. If you have multiple partitions on the USB drive, choose the drive
letter of the FAT32 partition.
Makewinpemedia will format the selected partition and copy WinPE to it.
3. Copy the contents of the Windows distribution to a USB drive or partition that has sufficient free space. If
your install.wim file is larger than 4GB, you'll need to use an NTFS-formatted partition.
For example,
Diskpart
List volume
Identify the drive letter of the USB drive that contains your Windows distribution. This example uses “F:\”. Exit
diskpart.
exit
F:\my_distribution\setup.exe
Windows Setup starts and you are prompted to select your language (French, German, or English). Select
one of the languages and proceed with the installation. Verify that the correct language appears during
installation.
Diskpart
List volume
Identify the drive letter of the USB drive that contains your Windows distribution. Exit diskpart.
exit
3. At the Windows PE command prompt, capture the Windows image. This example uses E:\ as the location of
the Windows installation. For example:
4. Optional: Type the following command to list the packages that are installed in the offline image.
You can use > packagelist.txt to output the list to a text file named PackageList. Note the package identity
of the language pack you want to remove.
5. Remove a language pack from the image. You can remove multiple .cab files using one command-line
statement.
Note
You can specify the package identity using the /PackageName option, or you can point to the original
source of the package using the /PackagePath option. For example:
For more information, see DISM Operating System Package Servicing Command-Line Options.
6. If you added additional optional components to the Recovery image, remove the language-specific optional
components and change the default language settings. For example:
7. Optional. If you added additional language support to the boot.wim file, remove the language specific
resources and optional components from the boot.wim file. For example:
rmdir C:\my_distribution\sources\fr-fr /s
8. Recreate the lang.ini file and change the default language settings by running the following command:
Dism /image:C:\mount\winre /Set-AllIntl:de-de
Dism /image:C:\mount/windows /Gen-LangINI /distribution:C:\my_distribution /Set-AllIntl:de-DE
9. Optional. If you removed languages from the boot.wim file, copy the updated lang.ini file to the boot image.
After you have updated the lang.ini file in the boot.wim, unmounts the boot.wim file.
10. Type the following command to commit the changes and unmount the images.
You can add support for additional languages on a running operating system, or to an offline image. For
information about how to install languages to an offline image, see Add and Remove Language Packs Offline Using
DISM.
For information about installing Language Interface Packs (LIPs), see Add Language Interface Packs to Windows.
In Windows 10, users can install more languages and features by going to Settings > Time & language >
Region & language > Add a language.
For more information about DISM international servicing commands, see DISM Languages and International
Servicing Command-Line Options
lpksetup.exe /u el-gr
See Lpksetup command line options to see all available command line options for lpksetup.
Related topics
Service a Windows Image Using DISM
Understanding Servicing Strategies
Add Language Packs to Windows
Configure International Settings in Windows
7/13/2017 • 8 min to read • Edit Online
You can specify the default language, locale, and keyboard values during deployment or after Windows is installed.
You can configure international settings by using the International module for Windows PowerShell, by using an
answer file with Windows Setup, or by using Deployment Imaging Servicing and Management (DISM).
For information about using DISM to configure international settings in an offline Windows image, see DISM
Languages and International Servicing Command-Line Options.
Important
In Windows 10, the intl.cpl command line tools do not support the new settings available in the Region and
Language section of Control Panel. For Windows 10, we recommend using the International Windows PowerShell
cmdlet settings to automate customizing international settings.
In addition, Deployment Imaging Servicing and Management (DISM) should also only be used against an offline
Windows image. In Windows 10, language settings are dynamically configured based on the user’s language list.
Individual settings, such as the display language, default input method, and user locale may be reset dynamically
based on user preferences on a running Windows installation. Use the International PowerShell cmdlet settings to
change the international settings of a running Windows installation.
Get-WinSystemLocale
Set the locale for the region and language that you want. For example, the following command sets the
system locale to Japanese (Japan):
Set-WinSystemLocale ja-JP
For a full description of these cmdlets, see Get-WinSystemLocale and Set-WinSystemLocale. For more
information about using International PowerShell cmdlets, see International Settings Cmdlets.
2. Get the language settings that are configured in the Windows image by using the /Get-Intl parameter. For
example
3. Change the default language, locale, and other international settings by using the /set-allInlt parameter.
For additional parameters and other options, see DISM Languages and International Servicing Command-Line
Options.
Related topics
Windows Setup Technical Reference
Windows System Image Manager Technical Reference
Add Language Packs to Windows
Add and Remove Language Packs Offline Using DISM
Add Multilingual Support to a Windows Distribution
7/13/2017 • 3 min to read • Edit Online
You can use Windows® Setup to deploy a multilingual edition of Windows. This is a typical scenario for
corporations that deploy Windows in a multilingual environment where the users must be able to switch the
display language between multiple languages on a single computer. This procedure requires the following steps:
Copy one or more language packs to the \Langpacks directory in the Windows distribution. The Windows
distribution is the contents of the Windows retail DVD.
Update the Lang.ini file.
Use Setup to install the language packs that are in the distribution share.
Important
Adding language packs to the \Langpacks directory can extend the Windows Setup installation time. Packages in
the \Langpacks directory are added to the Windows image during the windowsPE configuration pass, before
Windows is actually installed. If Windows Setup must install several language packs, then installation might be
delayed.
To add language packs to a Windows Distribution
1. Copy the Windows distribution to a local directory. For example, copy the contents of the Windows product
DVD to a directory named C:\my_distribution.
2. Locate the language pack .cab files for the languages that you want to add to the Windows distribution and
copy them to a local directory.
3. Create the \Langpacks directory in the distribution share. For example:
mkdir C:\my_distribution\langpacks
4. Copy the language packs to the \Langpacks directory of the distribution share. For example:
mkdir C:\my_distribution\langpacks
xcopy C:\LPs\Microsoft-Windows-Client-Language-Pack_x64_fr-fr.cab
C:\my_distribution\langpacks\Microsoft-Windows-Client-Language-Pack_x64_fr-fr.cab
5. (Optional) To make additional languages available in Windows Setup, copy the localized Windows Setup
sources to the distribution share. For example:
Where E: is the location of the Windows distribution that contains the localized Windows Setup resources.
The /cherkyi parameters for the xcopy command copies all hidden files and subdirectories and overwrites
all files in the target directory.
6. Mount the Windows image that is in the distribution share. This step is required for the Deployment Image
Servicing and Management tool (DISM.exe) to report the list of languages that are installed in the .wim file,
and to recreate the Lang.ini file. Use DISM to mount the Windows image. For example:
DISM.exe /Mount-Image /ImageFile:C:\my_distribution\sources\install.wim /index:1
/MountDir:C:\mount\windows
7. Report the languages that are available in the distribution share or installed to the Windows image by using
the /Get-Intl option and specifying the distribution share. For example:
Verify that the correct languages are displayed as available languages and that The other available
languages in the distribution display the correct languages. For example:
When you add or remove language packs from a Windows distribution, you must recreate the Lang.ini file.
The Lang.ini file is located in the sources directory of the Windows distribution and is used during Windows
Setup. The lang.ini file in the sources directory should look similar to the following:
[Available UI Languages]
en-US = 3
de-de = 0
fr-fr = 0
[Fallback Languages]
en-US = en-us
Note
You can choose a language for Windows Setup from those that are available in the distribution share when
you run Setup from a full operating system only. If you run Windows Setup for bootable media or Windows
PE, you must add optional components to the Boot.wim file for multilingual support. For more information,
see Add Multilingual Support to Windows Setup.
9. Unmount the .wim file and commit the changes. For example:
Related topics
DISM Languages and International Servicing Command-Line Options
Configure International Settings in Windows
Add Language Interface Packs to Windows
6/14/2017 • 3 min to read • Edit Online
Language Interface Packs (LIPs) include Windows user interface text for a region. LIPs must be used with a valid
parent language.
For example, the Catalan (ca-ES) LIP can be installed only if one of the following languages is already installed:
English US (en-US), Great Britain (en-GB), Spanish (es-ES), or French (fr-FR).
To add a LIP to an offline Windows image, you must verify that the supported parent language pack is installed to
the Windows image first.
For a list of the LIPs and their parent languages, see Available Language Packs for Windows.
The version of the LIP must match the version of Windows. For example, you can't add a Windows 10 LIP to a
Windows 8 image, or a Windows 8 LIP to a Windows 10 image.
For Windows 10, language packs and LIPs are also available to download from Windows Update. You can add
additional languages by using Control Panel. This process requires internet access and access to Windows
Update. IT Professionals and end-users can use Windows Update to add additional languages to their Windows
installations.
OEMs can view and download LIPs from the Microsoft OEM site.
System Builders can view and download LIPs from the OEM Partner Center.
Users can get languages or LIPs from Windows Update. Go to Settings > Time & language > Region &
language > Add a language. Select the language you want to use from the list, then choose which region's
version you want to use. Your download will begin immediately.
Install LIPs
To install a LIP using audit mode (used for manufacturing PCs)
1. Download the appropriate LIP (and if necessary, its base language), and save it to removable media.
2. Boot the destination computer to audit mode. For example at the OOBE screen, press Ctrl+Shift+F3. To learn
more, see Boot Windows to Audit Mode or OOBE.
3. Insert the removable media and copy the LIP (and base language, if necessary) to the destination computer.
4. If the base language isn't already installed, install it: Navigate to the .cab file and double-click it. Follow the
instructions to complete the installation.
5. Install the LIP: Navigate to the .cab file and double-click it. Follow the instructions to complete the installation.
6. Exit audit mode and prepare the PC for image capture or deployment, for example:
Open a command prompt and run:
md "C:\mount\windows"
6. If you're creating Windows Setup media or using a distribution share, recreate the lang.ini file.
[Available UI Languages]
ca-ES = 2
es-ES = 3
[Fallback Languages]
es-ES = en-us
7. Optional: Change the default language, locale, and other international settings to the local language.
Related topics
Add Language Packs to Windows
Available Language Packs for Windows
Language Pack Default Values
Available Language Packs for Windows
1/4/2018 • 6 min to read • Edit Online
The following tables show the supported language packs for Windows 10, Windows Server 2016, and Windows
Server 2012 R2, and supported language interface packs (LIPs) for Windows 10. LIPs are available for Windows
10, but are not available for Windows Server. For more information, see Language packs.
Windows Server and Windows 10 language packs are not interchangeable. Windows Server language packs
cannot be used on Windows 10, and Windows 10 language packs cannot be used on Windows Server.
LIPs must be installed to the operating system that they support. Windows 10 LIPs cannot be used on Windows
8.1; similarly, Windows 8.1 LIPs cannot be used on Windows 10.
To learn how to get language packs and language interface packs, see Get language packs and LIPs.
For a complete list of supported languages and locales, see Locale Identifier Constants and Strings.
To learn how to add languages to Windows, see Add Language Packs to Windows.
Related topics
Add Language Packs to Windows
Windows Language Pack Default Values
Default Input Locales for Windows Language Packs
Default Input Profiles (Input Locales) in Windows
7/27/2017 • 13 min to read • Edit Online
Input profiles (or input locales) describe the language of the input entered, and the keyboard on which it is being
entered. When the first user logs into Windows and identifies their region, Windows sets the input profiles.
The input profiles are made up of a language identifier and a keyboard identifier. For example, the Arabic
(Algerian) input profile is 1401:00020401, where 1401 is the hexadecimal identifier of the language: Arabic
(Algeria) and 00020401 is the hexadecimal identifier of the keyboard: Arabic 101.
When the user first identifies the time and date format (User Locale) as Algeria, Windows sets up both the primary
input profile, and a secondary input profile: French (France) with French keyboard. The secondary input profile can
help the user by providing a keyboard with a Latin character set for tasks that require it, such as filling out email
addresses. Some character sets (like CHS IME) have a Latin character set built in.
Windows uses the language component of the input profile for tasks like spelling, hyphenation, and text prediction
of the intended key press when using the touch-screen keyboard.
When setting up new devices for your users, you can use the DISM commands: /Set-InputLocale or /Set-AllIntl to
identify a default input profile. You can either select the input profile by its language and keyboard pair
(1401:00020401) or you can use a language\region tag to receive the default settings for that language/region.
Examples:
For a list of language/culture names, see Available Language Packs for Windows.
Amharic - Ethiopia am-ET: Amharic Input Method (045e: en-US: United States - English
{E429B25A-E5D3-4D1F-9BE3- (0409:00000409)
0C608477E3A1}{8F96574E-C86C-
4bd6-9666-3F7327D4CBE8})
Arabic - Bahrain ar-BH: Arabic (101) (3c01:00000401) en-US: United States - English
(0409:00000409)
PRIMARY INPUT PROFILE (LANGUAGE AND
LANGUAGE/REGION KEYBOARD PAIR) SECONDARY INPUT PROFILE
Arabic - Egypt ar-EG: Arabic (101) (0c01:00000401) en-US: United States - English
(0409:00000409)
Arabic - Iraq ar-IQ: Arabic (101) (0801:00000401) en-US: United States - English
(0409:00000409)
Arabic - Jordan ar-JO: Arabic (101) (2c01:00000401) en-US: United States - English
(0409:00000409)
Arabic - Kuwait ar-KW: Arabic (101) (3401:00000401) en-US: United States - English
(0409:00000409)
Arabic - Lebanon ar-LB: Arabic (101) (3001:00000401) en-US: United States - English
(0409:00000409)
Arabic - Libya ar-LY: Arabic (101) (1001:00000401) en-US: United States - English
(0409:00000409)
Arabic - Oman ar-OM: Arabic (101) (2001:00000401) en-US: United States - English
(0409:00000409)
Arabic - Qatar ar-QA: Arabic (101) (4001:00000401) en-US: United States - English
(0409:00000409)
Arabic - Saudi Arabia ar-SA: Arabic (101) (0401:00000401) en-US: United States - English
(0409:00000409)
Arabic - Syria ar-SY: Arabic (101) (2801:00000401) en-US: United States - English
(0409:00000409)
Arabic - U.A.E. ar-AE: Arabic (101) (3801:00000401) en-US: United States - English
(0409:00000409)
Arabic - Yemen ar-YE: Arabic (101) (2401:00000401) en-US: United States - English
(0409:00000409)
Azerbaijani - Azerbaijan (Cyrillic) az-Cyrl-AZ: Azerbaijani Cyrillic en-US: United States - English
(082c:0000082c) (0409:00000409)
az-Latn-AZ: Azeri Latin
(042c:0000042c)
Azerbaijani - Azerbaijan (Latin) az-Latn-AZ: Azerbaijani Latin en-US: United States - English
(042c:0000042c) (0409:00000409)
az-Cyrl-AZ: Azeri Cyrillic
(082c:0000082c)
Bangla - India (Bengali Script) bn-IN: Bangla India-INSCRIPT en-US: United States - English
(0445:00020445) (0409:00000409)
Bosnian - Bosnia and Herzegovina bs-Cyrl-BA: Bosnian (Cyrillic) bs-Latn-BA: Croatian (141a:0000041a)
(Cyrillic) (201a:0000201a)
Central Atlas Tamazight (Latin) - Algeria fr-FR: French (040c:0000040c) en-US: United States - English
(0409:00000409)
Cherokee (Cherokee, United States) chr-Cher-US: Cherokee Nation Cherokee Nation Phonetic
(045c:0000045c) (045c:0001045c)
en-US: United States - English
(0409:00000409)
English - Canada en-CA: United States - English en-CA: Canadian Multilingual Standard
(1009:00000409) (1009:00011009)
French - Canada fr-CA: Canadian Multilingual Standard en-CA: Canadian Multilingual Standard
(0c0c:00011009) (1009:00011009)
PRIMARY INPUT PROFILE (LANGUAGE AND
LANGUAGE/REGION KEYBOARD PAIR) SECONDARY INPUT PROFILE
French - Switzerland fr-CH: Swiss French (100c:0000100c) de-CH: Swiss German (0807:00000807)
German - Switzerland de-CH: Swiss German (0807:00000807) fr-CH: Swiss French (100C:0000100C)
Gujarati - India (Gujarati Script) gu-IN: Gujarati (0447:00000447) en-US: United States - English
(0409:00000409)
Inuktitut (Latin) - Canada iu-Latn-CA: Inuktitut - Latin en-CA: United States - English
(085d:0000085d) (1009:00000409)
Inuktitut (Syllabics) - Canada iu-Cans-CA: Inuktitut - Naqittaut en-CA: United States - English
(045d:0001045d) (1009:00000409)
Kannada - India (Kannada Script) kn-IN: Kannada (044b:0000044b) en-US: United States - English
(0409:00000409)
Kyrgyz - Kyrgyzstan ky-KG: Kyrgyz Cyrillic (0440:00000440) en-US: United States - English
(0409:00000409)
Lao - Lao PDR lo-LA: Lao (0454:00000454) en-US: United States - English
(0409:00000409)
Malayalam - India (Malayalam Script) ml-IN: Malayalam (044c:0000044c) en-US: United States - English
(0409:00000409)
Maori - New Zealand mi-NZ: Maori (0481:00000481) en-NZ: United States - English
(1409:00000409)
Mongolian (Cyrillic) - Mongolia mn-MN: Mongolian Cyrillic en-US: United States - English
(0450:00000450) (0409:00000409)
Mongolian (Mongolian) - Mongolia mn-Mong-MN: Traditional Mongolian en-US: United States - English
(Standard) (0c50:00010850) (0409:00000409)
Mongolian (Mongolian – PRC – Legacy) mn-Mong-CN: Mongolian (Mongolian en-US: United States - English
Script) (0850:00000850) (0409:00000409)
Mongolian (Mongolian– PRC – mn-Mong-CN: Mongolian (Mongolian en-US: United States - English
Standard) Script) (0850:00010850) (0409:00000409)
Nepali - Federal Democratic Republic of ne-NP: Nepali (0461:00000461) en-US: United States - English
Nepal (0409:00000409)
Odia - India (Odia Script) or-IN: Odia (0448:00000448) en-US: United States - English
(0409:00000409)
Punjabi - India (Gurmukhi Script) pa-IN: Punjabi (0446:00000446) en-US: United States - English
(0409:00000409)
Punjabi (Islamic Republic of Pakistan) pa-Arab-PK: Urdu (0846:00000420) en-US: United States - English
(0409:00000409)
Serbian - Bosnia and Herzegovina sr-Cyrl-BA: Serbian (Cyrillic) en-US: United States - English
(Cyrillic) (1c1a:00000c1a) (0409:00000409)
Serbian - Montenegro (Cyrillic) sr-Cyrl-ME: Serbian (Cyrillic) en-US: United States - International
(301a:00000c1a) (0409:00020409)
Serbian - Serbia (Cyrillic) sr-Cyrl-RS: Serbian (Cyrillic) en-US: United States - International
(281a:00000c1a) (0409:00020409)
Serbian - Serbia and Montenegro sr-Cyrl-CS: Serbian (Cyrillic) en-US: United States - English
(Former) (Cyrillic) (0c1a:00000c1a) (0409:00000409)
Sindhi (Islamic Republic of Pakistan) sd-Arab-PK: Urdu (0859:00000420) en-US: United States - English
(0409:00000409)
Sinhala - Sri Lanka si-LK: Sinhala (045b:0000045b) en-US: United States - English
(0409:00000409)
Spanish - Spain (International Sort) es-ES: Spanish (0c0a:0000040a) en-US: United States - English
(0409:00000409)
Spanish - United States es-US: Latin American (540a:0000080a) en-US: United States - English
(0409:00000409)
Standard Moroccan Tamazight - zgh-Tfng-MA: Tifinagh (Basic) en-US: United States - English
Morocco (0c00:0000105F) (0409:00000409)
Tamil - Sri Lanka ta-LK: Tamil (0849:00000449) en-US: United States - English
(0409:00000409)
Telugu - India (Telugu Script) te-IN: Telugu (044a:0000044a) en-US: United States - English
(0409:00000409)
Tibetan - PRC bo-CN: Tibetan (PRC) (0451:00010451) en-US: United States - English
(0409:00000409)
Tigrinya (Eritrea) ti-ET: Tigrinya Input Method (0473: en-US: United States - English
{E429B25A-E5D3-4D1F-9BE3- (0409:00000409)
0C608477E3A1}{3CAB88B7-CC3E-
46A6-9765-B772AD7761FF})
Tigrinya (Ethiopia) ti-ET: Tigrinya Input Method (0473: en-US: United States - English
{E429B25A-E5D3-4D1F-9BE3- (0409:00000409)
0C608477E3A1}{3CAB88B7-CC3E-
46A6-9765-B772AD7761FF})
Urdu (Islamic Republic of Pakistan) ur-PK: Urdu (0420:00000420) en-US: United States - English
(0409:00000409)
Uzbek - Uzbekistan (Cyrillic) uz-Cyrl-UZ: Uzbek Cyrillic uz-Latn-UZ: United States - English
(0843:00000843) (0443:00000409)
Welsh - Great Britain cy-GB: Great Britain Extended en-GB: Great Britain (0809:00000809)
(0452:00000452)
Related topics
Default Time Zones
Add Language Packs to Windows
Available Language Packs for Windows
Keyboard identifiers for Windows
DISM Languages and International Servicing Command-Line Options
Default Time Zones
6/6/2017 • 13 min to read • Edit Online
Default time zones by region in Windows 10. When the first user logs into Windows and identifies their region,
Windows sets the time zone. The user can change the time zone at any time.
Important Windows updates the time zones in the registry when time zones are available and updates are
downloaded. Because time zones can change, use the tzutil command-line tool in Windows to verify the time zone.
Pitcairn Islands PN Pacific Standard Time (UTC-08:00) Pacific Time (US &
Canada)
Turks and Caicos TC Eastern Standard (UTC-05:00) Eastern Time (US &
Islands Time Canada)
United States US Pacific Standard Time (UTC-08:00) Pacific Time (US &
Canada)
Use keyboard identifiers and Input Method Editors (IMEs) identify the keyboard type.
Keyboard identifiers
The following table lists keyboard identifiers that are available for Windows. You can also install support for
additional keyboard types. The valid keyboards that can be configured for your device are listed in the registry
key: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts
Albanian 0x0000041c
Bashkir 0x0000046d
Belarusian 0x00000423
Buginese 0x000b0c00
Bulgarian 0x0030402
Croatian 0x0000041a
Czech 0x00000405
Danish 0x00000406
Devanagari-INSCRIPT 0x00000439
Dutch 0x00000413
Dzongkha 0x00000C51
Estonian 0x00000425
Faeroese 0x00000438
Finnish 0x0000040b
French 0x0000040c
Futhark 0x00120c00
Georgian 0x00000437
German 0x00000407
Gothic 0x000c0c00
Greek 0x00000408
Greenlandic 0x0000046f
Guarani 0x00000474
Gujarati 0x00000447
Hausa 0x00000468
Hebrew 0x0000040d
Hungarian 0x0000040e
Icelandic 0x0000040f
Igbo 0x00000470
India 0x000004009
Irish 0x00001809
Italian 0x00000410
Japanese 0x00000411
Javanese 0x00110c00
Kannada 0x0000044b
Kazakh 0x0000043f
Khmer 0x00000453
Korean 0x00000412
Lao 0x00000454
Lithuanian 0x00010427
Luxembourgish 0x0000046e
Malayalam 0x0000044c
Maori 0x00000481
Marathi 0x0000044e
Myanmar 0x00010c00
N'ko 0x00090c00
Nepali 0x00000461
KEYBOARD KEYBOARD IDENTIFIER (HEXADECIMAL)
Norwegian 0x00000414
Odia 0x00000448
Ol Chiki 0x000d0c00
Osmanya 0x000e0c00
Persian 0x00000429
Phags-pa 0x000a0c00
Portuguese 0x00000816
Punjabi 0x00000446
Russian 0x00000419
Sakha 0x00000485
Setswana 0x00000432
Sinhala 0x0000045b
Slovak 0x0000041b
Slovenian 0x00000424
Sora 0x00100c00
Spanish 0x0000040a
Swedish 0x0000041d
Syriac 0x0000045a
Tai Le 0x00030c00
Tajik 0x00000428
KEYBOARD KEYBOARD IDENTIFIER (HEXADECIMAL)
Tamil 0x00000449
Tatar 0x00010444
Telugu 0x0000044a
Turkish F 0x0001041f
Turkish Q 0x0000041f
Turkmen 0x00000442
Uyghur 0x00010408
Ukrainian 0x00000422
Urdu 0x00000420
Uyghur 0x00010480
Vietnamese 0x0000042a
Wolof 0x00000488
Yakut 0x00000485
Yoruba 0x0000046a
Related topics
Available Language Packs for Windows
Default Input Profiles (Input Locales) in Windows
Where is lp.cab?
6/6/2017 • 1 min to read • Edit Online
Language packs and language interface packs have been renamed in Windows 10 version 1607.
Note: This change doesn't apply to WinPE, where language packs still use the name lp.cab.
Related topics
Language Packs
Available Language Packs for Windows
Features On Demand V2 (Capabilities)
Windows Language Pack Default Values
Default Input Locales for Windows Language Packs
Features On Demand
2/6/2018 • 2 min to read • Edit Online
Features on Demand (FODs) are Windows feature packages that can be added at any time. Common features
include language resources like handwriting recognition or the .NET Framework (.NetFx3). When a Windows 10
PC needs a new feature, it can request the feature package from Windows Update.
OEMs can preinstall FODs into a Windows image by leveraging DISM with the /Add-Capability option. By
default /Add-Capability downloads features from Windows Update and adds them to the image, but you can
use the /Source and /LimitAccess options to tell Windows where to download features from:
/Source allows you to choose a location where the capability source files are located. You can use
multiple /Source arguments.
/LimitAccess tells DISM to not check Windows Update or Windows Server Update Services for the
capability source files.
See DISM Capabilities Package Servicing Command-Line Options for more information.
Unlike previous feature packs, Features on Demand can be applicable to multiple Windows builds, and can be
added using DISM without knowing the build number. Always use Features on Demand that match the
architecture of the operating system. Adding Features on Demand of the wrong architecture might not return an
error immediately, but will likely cause functionality issues in the operating system.
TIP
If you install an update (hotfix, general distribution release [GDR], or service pack) prior to installing a Feature on Demand
or language pack, you'll have to reinstall the update. Always install language packs and Features on Demand before you
install updates.
To see all available DISM commands for capabilities, see DISM Capabilities Package Servicing Command-Line
Options.
Related topics
Available Features on Demand
Language and region Features on Demand
Add Language Packs to Windows
DISM Capabilities Package Servicing Command-Line Options
Available Features on Demand
2/6/2018 • 4 min to read • Edit Online
The following Features on Demand are available for Windows 10. You can use either
DISM /image:<path_to_image> /get-capabilities or DISM /online /get-capabilities to see which Features on
Demand are available in your image of Windows 10. To see how to add Features on Demand, see Features on
Demand.
To see available Features on Demand for languages and regions, see Language and region Features on Demand
Accessibility
This Feature on Demand enables Braille devices to work with the inbox Narrator screen reader. Without this
Feature on Demand, Braille drivers and translation tables will be missing, causing Braille to not function properly.
Recommendation: Don't include these Features on Demand in your image, as doing so could conflict with Braille
device rights restrictions.
This Feature on Demand's installation can be triggered by a user from the Windows Settings app.
Developer Mode
An on-device diagnostic platform used via a browser. Installs a SSH server on the device for UWP remote
deployment as well as Windows Device Portal.
Enabling Developer Mode will attempt to auto-install this Feature on Demand. On devices that are WSUS-
managed, this auto-install will likely fail due to WSUS blocking FOD packages by default. If this Feature on Demand
is not successfully installed, device discovery and Device Portal can't be enabled, preventing remote deployment to
the device.
Recommendation: In general, don't preinstall on devices. If you are building an image for "developer edition"
devices, where the primary market for the device is developers or users who plan on developing or testing UWPs,
consider preinstalling.
NAME CAPABILITY NAME INSTALL SIZE
Graphics Tools
Used for Direct3D application development. It is typically installed by AAA game engine developers, enterprise
graphics software developers, or niche hobbyists.
Recommendation: Don't install. This Feature on Demand is only needed by specific users who can trigger
installation through Visual Studio when certain optional packages are chosen at install.
Mixed Reality
This Feature on Demand enables Mixed Reality (MR) devices to be used on a PC. If this Feature on Demand is not
present, MR devices may not function properly.
Note: Make sure to add this feature on demand prior to adding an update (hotfix, general distribution release
[GDR], or service pack).
Recommendation: Recommended for MR-Ready badged PCs, otherwise do not preinstall.
NOTE
The Mixed Reality Feature on Demand has a large installation size. This FOD also requires the installation of an additional
data assets package, if an updated asset package is available. Updates to the Mixed Reality FOD are available via regular
Windows LCUs. The data assets update package, when available, is a separate download from the Microsoft Update Catalog.
Internet Explorer
Internet Explorer Features on Demand enable preinstallation of Internet Explorer. Internet Explorer will not be
enabled on a device that does not have this Feature on Demand added.
Recommendation: Include the relevant Features on Demand on images that include Internet Explorer.
OneSync
This Feature on Demand is a mail, contacts, and calendar sync component. Not including this Feature on Demand
on your Windows image will cause UWP apps such as Mail, People, and Calendar to not be able to properly sync.
Recommendation: Preinstall this Feature on Demand on your Windows image.
NAME CAPABILITY NAME INSTALL SIZE
OpenSSH (Beta)
The OpenSSH Features on Demand enable the use of OpenSSH on a Windows PC.
Recommendation: Don't include these Features on Demand on your image.
Printing
These Features on Demand are for devices running Windows Server as a Print Server role which supports Azure
AD joined devices. If this FOD is not installed, then a Windows Server acting as a Print Server will only support the
printing needs of traditional domain joined devices. Azure AD joined devices will not be able to discover corporate
printers.
Recommendation: Only preinstall the Features on Demand on Windows Server devices running as a Print Server
role.
Related topics
Features on Demand
Language and region Features on Demand
Language and region Features on Demand
12/18/2017 • 3 min to read • Edit Online
NAME DESCRIPTION
Related topics
Available Features on Demand
Add Language Packs to Windows
DISM Capabilities Package Servicing Command-Line Options
Configure Oobe.xml
6/6/2017 • 1 min to read • Edit Online
Oobe.xml is a content file used to collect text and images for customizing Windows® OOBE. To build a single
Windows image that contains multiple languages to deliver to more than one country or region, you can add
multiple Oobe.xml files to customize the content based on the language and country/region selections of the
customer.
In This Section
Oobe.xml Settings
How Oobe.xml Works
Related topics
Windows Deployment Options
Oobe.xml Settings
10/12/2017 • 6 min to read • Edit Online
Oobe.xml Settings
The following shows how elements are ordered in Oobe.xml. Not all elements and sections are required for
Windows to process Oobe.xml.
<FirstExperience>
<oobe>
<oem>
<name></name>
<eulafilename></eulafilename>
<computername></computername>
<registration>
<title></title>
<subtitle></subtitle>
<customerinfo>
<label></label>
<defaultvalue></defaultvalue>
</customerinfo>
<checkbox1>
<label></label>
<defaultvalue></defaultvalue>
</checkbox1>
<checkbox2>
<label></label>
</checkbox2>
<checkbox3>
<label></label>
</checkbox3>
<link1>
<label></label>
</link1>
<link2>
<label></label>
</link2>
<link3>
<label></label>
</link3>
<hideSkip></hideSkip>
</registration>
</oem>
<defaults>
<language></language>
<location></location>
<keyboard></keyboard>
<adjustForDST></adjustForDST>
</defaults>
<hidSetup>
<title></title>
<mouseImagePath></mouseImagePath>
<mouseText></mouseText>
<mouseErrorImagePath></mouseErrorImagePath>
<mouseErrorText></mouseErrorText>
<keyboardImagePath></keyboardImagePath>
<keyboardErrorImagePath></keyboardErrorImagePath>
<keyboardText></keyboardText>
<keyboardPINText></keyboardPINText>
<keyboardPINImagePath></keyboardPINImagePath>
<keyboardErrorText></keyboardErrorText>
</hidSetup>
</oobe>
</FirstExperience>
The following tables show descriptions and values for elements available in Oobe.xml.
The following table shows description for OEM customization and registration pages.
<oem>
ELEMENT SETTING DESCRIPTION VALUE
<registration>
<customerinfo>
<checkbox1>
ELEMENT SETTING DESCRIPTION VALUE
<checkbox2>
<checkbox3>
<link1>
<link2>
<link3>
<defaults>
<hidsetup>
<title>
Related topics
Configure Oobe.xml
How Oobe.xml Works
7/13/2017 • 4 min to read • Edit Online
Oobe.xml is a content file that you can use to organize text and images and to specify and preset settings for
customizing the Windows first experience. You can use multiple Oobe.xml files for language- and region-specific
license terms and settings so that users see appropriate information as soon as they start their PCs. By specifying
information in the Oobe.xml file, OEMs direct users to perform only the core tasks that are required to set up their
PCs.
Windows checks for and loads Oobe.xml in the following locations, in the following order:
1. %WINDIR%\System32\Oobe\Info\Oobe.xml
2. %WINDIR%\System32\Oobe\Info\Default\Oobe.xml
3. %WINDIR%\System32\Oobe\Info\Default\<language>\Oobe.xml
4. %WINDIR%\System32\Oobe\Info\<country/region>\Oobe.xml
5. %WINDIR%\System32\Oobe\Info\<country/region>\<language>\Oobe.xml
If you have customizations that span all countries/regions and languages, the Oobe.xml files can be placed in
Location 1.
If you're shipping a single-region, single-language system, your custom Oobe.xml file should be placed in the
\Info (Location 1) or \Default (Location 2) directory. Those locations are functionally equivalent.
If you're shipping to multiple countries/regions and your OOBE settings require customizations for individual
countries/regions, each with a single language, all of your Oobe.xml files should be placed in Locations 4 and 5.
If you're shipping to multiple countries/regions with multiple languages, the following guidelines apply:
Place country/region-specific information in Location 4.
Place language-specific information for each respective country/region in Location 5.
Single-language deployments
If you're delivering PCs to one country/region in a single language, you should place a single Oobe.xml file in
\%WINDIR%\System32\Oobe\Info. This file can contain all of your customizations to the Windows first
experience.
For example, an English version of Windows that's delivered to the United States can have the following directory
structure:
\%WINDIR%\System32\Oobe\Info\Oobe.xml
If you're delivering PCs to more than one country/region in a single language, and you plan to vary your
customizations in different locations, place an Oobe.xml file in \%WINDIR%\System32\Oobe\Info.
This file can contain the default regional settings that you plan to show to the user. You should also include a
default set of customizations, in case the user selects a country/region that you haven't made specific
customizations for. The Oobe.xml file should also contain the <eulafilename> node with the name of the
customized license terms that you plan to use.
Place an Oobe.xml file for each country/region that contains unique customized content in
\%WINDIR%\System32\<country/region that you're deploying to>\<language that you're deploying in>. After
the user has chosen a country/region, these files are used to display additional customizations.
For example, an English version of Windows delivered to the United States and Canada can have the following
directory structure:
\%WINDIR%\System32\Oobe\Info\Oobe.xml (EULA file name and regional settings)
\%WINDIR%System32\Oobe\Info\244\1033\Oobe.xml (United States custom content)
\%WINDIR%\System32\Oobe\Info\39\1033\Oobe.xml (Canada custom content)
\%WINDIR%\System32\Oobe\Info\46\Oobe.xml
%WINDIR%\System32\Oobe\Info\Default\3082\Oobe.xml
There are many more LCIDs than languages. A few LCIDs correlate to the languages that can be released with
Windows. For more information about which languages release with Windows, at what level of localization, and
their decimal identifiers, see Available Language Packs on TechNet.
Work with Product Keys and Activation
7/7/2017 • 2 min to read • Edit Online
You can enter a product key during an automated installation of Windows by including it in your answer file.
You can also use product keys to select an image to install during an automated Windows installation.
Warning
If you have multiple Windows images with the same Windows edition that are stored in the same Windows
image file (.wim), you can use the setting: Microsoft-Windows-Setup\ImageInstall\OSImage\InstallFrom\
MetaData to differentiate between them. You must still provide a product key using one of the methods listed
in the previous list.
For information about managing Windows product keys when changing the Windows image to a higher edition,
see Change the Windows Image to a Higher Edition Using DISM.
Activate Windows
To automatically activate Windows by using a product key, you can do one of the following:
Use the Microsoft-Windows-Shell-Setup\ ProductKey unattend setting. You can use either a single-use
product key or a Volume License Multiple Activation Key. For more information, see the Volume Activation
Planning Guide.
The product key used to activate Windows must match the Windows edition that you install. If you use a
product key to select a Windows edition, we recommend using the same key to activate Windows, so that
the edition you install is the same as the edition that you activate.
Original Equipment Manufacturers (OEMs) can use OEM-specific activation tools.
Warning
In most Windows deployment scenarios, you no longer have to use the SkipRearm answer file setting to reset
the Windows Product Activation clock when you run the Sysprep command multiple times on a computer.
The SkipRearm setting is used to specify the Windows licensing state. If you specify a retail product key or
volume license product key, Windows is automatically activated. You can run the Sysprep command up to 8
additional times on a single Windows image. After running Sysprep 8 times on a Windows image, you must
recreate your Windows image. For more information about Windows components and settings that you can
add to an answer file, see the Unattended Windows Setup Reference.
Related topics
Windows Deployment Options
How Configuration Passes Work
Sysprep (Generalize) a Windows installation
Change the Windows Image to a Higher Edition Using DISM
Battery Life
6/6/2017 • 1 min to read • Edit Online
In this section, you will learn about managing battery life when you deploy Windows 8 and Windows Server®
2012 on different hardware and software platforms.
In This Section
Managing Battery Life and Power Consumption Overview Describes considerations that can help you to meet
battery life goals, and lists common Windows® power
policy settings that can affect battery life.
Set the Default Power Plan Describes how to import a power plan and how to set a
power plan to the active power plan.
Create a Custom Power Plan Describes how to create a power plan by using Control
Panel, how to export the power plan, and how to import
the power plan on a destination computer.
Fine-Tune a Custom Power Plan Describes how to configure a customized Windows power
plan by using powercfg command-line options.
Test Battery Life and Power Consumption Describes how to test power consumption.
Related topics
Mobile Battery Life Solutions: A Guide for Mobile Platform Professionals
Windows Performance Toolkit
Power Policy Configuration and Deployment in Windows
Managing Battery Life and Power Consumption
Overview
6/6/2017 • 4 min to read • Edit Online
Windows®-based laptops must meet energy-efficiency regulatory requirements, such as the United States
Environmental Protection Agency (EPA) Energy Star program. Furthermore, surveys have shown that longer
battery life for laptops continues to be a leading request from consumers.
Hardware and software factors such as a low-capacity battery, a processor-intensive driver, or a poorly configured
power setting can cause a significant reduction in battery life. When you design your system, you should
experiment with multiple configurations of each of these factors to find the best balance of battery life and
performance.
Hardware
This section lists a few of the common hardware design considerations that can affect battery life.
Battery capacity. Check with your battery manufacturer to determine the battery capacity.
Other hardware components. Ask your hardware component manufacturers for power-consumption test
results for each hardware component.
For information on each of these battery-life factors, see Mobile Battery Life Solutions: A Guide for Mobile Platform
Professionals.
Software
This section lists a few of the common software design considerations that can affect battery life.
Drivers. As you add each new driver to the system, observe the driver's impact on power consumption. A
single poorly performing driver can greatly affect system performance.
Applications, services, and other software. As you add each new software application to the system,
observe the application's impact on power consumption. A single poorly performing application can greatly
affect system performance.
Windows power policy settings. Optimize Windows power policy settings to balance performance needs
and battery life. For more information, see the section: Windows Power Policy Settings.
For more information about each of these battery life factors, see Mobile Battery Life Solutions: A Guide for Mobile
Platform Professionals.
Related topics
Mobile Battery Life Solutions: A Guide for Mobile Platform Professionals
Set the Default Power Plan
Create a Custom Power Plan
Windows Performance Toolkit
Power Policy Configuration and Deployment in Windows
Set the Default Power Plan
7/13/2017 • 1 min to read • Edit Online
Use these instructions to set a default power plan when deploying Windows 8 or Windows Server® 2012 PCs. A
power plan is also known as a power scheme.
Note
This page gives information about manufacturing PCs.
To modify a power plans on your own PC, see Power Plans: Frequently asked questions.
To set the default power plan
1. On your technician computer, open an elevated command prompt.
2. If you want to use a power plan from another computer, import the power plan.
For example, to import a power plan that is named OutdoorPlan, type the following at a command prompt:
3. Type the following to find the GUID for all the power plans on the computer:
powercfg -LIST
The computer returns the list of available power plans. The following examples refer to these plans as
guidPlan1 and guidPlan2.
4. Note the GUIDs that are listed next to the power plans that you want to change.
5. Set the power plan that you want to set as the default as the active power plan. For example, you can use
the following command:
Related topics
Add a Custom Command to an Answer File
Boot Windows to Audit Mode or OOBE
Create a Custom Power Plan
Power Policy Configuration and Deployment in Windows
Create a Custom Power Plan
7/13/2017 • 2 min to read • Edit Online
A power plan is a collection of hardware and system settings that manages how computers use and conserve
power. A power plan is also known as a power scheme. You can create custom power plans that are optimized for
specific computers.
By default, Windows 8 and Windows Server® 2012 include three power plans: Balanced, Power Saver, and
High Performance. You can customize these existing plans for your systems, create new plans that are based on
the existing plans, or create a new power plan from scratch.
Optimizing Windows power plans can help improve battery life. However, a single poorly performing application,
device, or system feature can significantly reduce battery life. For information about factors that influence battery
life, see Managing Battery Life and Power Consumption Overview.
In this topic
Creating a customized power plan
Listing the available power plans
Deploying a power plan
powercfg -LIST
The computer will return the list of available power plans. In the following example, these plans are
Balanced, Power saver, and OutdoorPlan.
Existing Power Schemes (* Active)
-----------------------------------
Power Scheme GUID: {guidPlan1} (Balanced) *
Power Scheme GUID: {guidPlan2} (Power saver)
Power Scheme GUID: {guidPlan3} (OutdoorPlan)
Note the GUIDs that are listed next to the power plans that you want to capture.
Related topics
Managing Battery Life and Power Consumption Overview
Test Battery Life and Power Consumption
Set the Default Power Plan
Fine-Tune a Custom Power Plan
7/13/2017 • 3 min to read • Edit Online
A power plan is a collection of hardware and system settings that manages how computers use and conserve
power. You can create custom power plans that are optimized for specific computers.
You can manage most common power plan settings through Control Panel. For more information, see Create a
Custom Power Plan. To fine-tune hardware-specific configurations that are not configurable through Control Panel,
use the PowerCfg tool.
powercfg -LIST
The computer will return the list of available power plans. In the following examples, these plans are
Balanced and Power saver.
Note the GUIDs that are listed next to the power plans that you want to change. You will need these GUIDs
to manually update settings and capture the power plans.
To set the power plan to be modified as active
To modify a plan, use the GUID of the power plan that you want to change to set that power plan as the
active power plan. For example:
powercfg -QUERY
The computer displays information for all of the power settings for this plan.
b. Find the GUID for the subgroup of the setting that you want to change. For example, to modify a
display setting, find the GUID for the Display subgroup:
c. Find the GUID for the setting that you want to change. For example, to modify the Display Brightness
setting, find the GUID for the (Display brightness) setting:
d. Review the information from the query command, review the possible settings, and determine a
value that works for your computer.
Note
You must enter these values by using decimal integers. However, the values appear on the screen as
hexadecimal values that are specific to the setting.
For example, to set the maximum display brightness to 50 percent brightness, enter the value as 50.
When you use the powercfg -QUERY command to confirm the setting, the value appears as
0x00000032.
2. Adjust the value for the power setting for times when the computer is plugged in. For example, to set the
display brightness level to 100 percent when the computer is plugged in, type the following:
3. Adjust the value for the power setting for times when the computer is on battery power. For example, to set
the display brightness level to 75 percent when the computer is on battery power, type the following:
powercfg -QUERY
The computer shows the new power setting index in hexadecimal notation. For example:
Related topics
Create a Custom Power Plan
Set the Default Power Plan
Test Battery Life and Power Consumption
6/6/2017 • 1 min to read • Edit Online
Compare the overall system power to the power that the system consumes when you use a clean installation. With
preinstalled applications and power policies, some computers have shown a 40 percent decrease in battery
performance compared with a clean Windows® installation. However, through careful engineering, computers can
achieve equal or improved performance over a clean Windows installation.
Related topics
Set the Default Power Plan
Create a Custom Power Plan
Understanding Servicing Strategies
8/24/2017 • 4 min to read • Edit Online
You can service, or make changes to, a Windows image at various phases of deployment in the following ways:
offline, during an automated installation, or online. The phase of deployment that you select depends on your
deployment strategy.
Offline Servicing: Allows you to add and remove updates, drivers, language packs, and configure other settings
without booting Windows. Offline servicing is an efficient way to manage existing images that are stored on a
server because it eliminates the need for re-creating updated images. You can perform offline servicing on an
image that is mounted or applied to a drive or directory.
Servicing an Image by Using Windows Setup: Enables you to provide an answer file (Unattend.xml) that Windows
Setup uses to make changes to your image at the time of deployment. The answer file contains specific servicing
operations such as adding drivers, updates, language packs, and other packages. Servicing an image during an
automated installation can be easily implemented and is ideal for Setup-based deployment.
Servicing a Running Operating System: Also known as online servicing, this method involves booting to audit
mode to add drivers, applications, and other packages. Online servicing is ideal for drivers when the driver
packages have co-installers or application dependencies. It is also efficient when most of your servicing packages
have installers, or the updates are in .msi or KB.exe file formats, or the applications rely on Windows installed
services and technologies (such as the .NET Framework or full Plug and Play support).
The following illustration shows the servicing opportunities available during the various phases of deployment.
Offline Servicing
Offline servicing was introduced with Windows Vista. Offline servicing occurs when you modify or service a
Windows image entirely offline without booting it first. For Windows Vista, the Package Manager command-line
tool was provided for updating Windows images. In Windows 7 and Windows 8, Deployment Image Servicing
and Management (DISM) replaces Package Manager. For Windows 8 and later, most operating system servicing
operations can be performed on an offline Windows image by using the DISM command-line tool. DISM is
installed with Windows starting with Windows 8, and is also distributed in the Windows Assessment and
Deployment Kit (Windows ADK). For more information about DISM, see DISM - Deployment Image Servicing and
M\anagement Technical Reference for Windows.
DISM can be used on an offline image to:
Mount, remount, and unmount an image in a .wim file for servicing.
Query information about a Windows image.
Add, remove, and enumerate drivers provided as .inf files.
Add, remove, and enumerate packages, including language packs, provided as .cab files.
Add .msu files.
Configure international settings.
Enable, disable, and enumerate Windows operating system features.
Upgrade to a higher edition of Windows.
Check the applicability of a Windows Installer application patch (.msp file).
Enumerate applications and application patches installed in a Windows image.
Add siloed provisioning packages to an applied image.
Apply the offline servicing section of an unattended answer file.
Update a Windows Preinstallation Environment (Windows PE) image.
For more information about how to service a mounted image, see Service a Mounted Windows Image.
For more information about how to service an applied image, see Service an Applied Windows Image.
Related topics
Deployment Image Servicing and Management (DISM) Best Practices
DISM - Deployment Image Servicing and Management Technical Reference for Windows
Audit Mode Overview
12/6/2017 • 3 min to read • Edit Online
When Windows boots, it starts in either Out-Of-Box Experience (OOBE) mode or in audit mode. OOBE is the
default out-of-box experience that allows end users to enter their account information, select language, accept
the Microsoft Terms of Service, and set up networking.
You can configure Windows to boot to audit mode instead. In audit mode, you can make additional changes to
the Windows installation before you send the computer to a customer or capture the image for reuse in your
organization. For example, you can install drivers included in a driver package, install applications, or make other
updates that require the Windows installation to be running. When you use an answer file, Windows processes
settings in the auditSystem and auditUser configuration passes.
When you boot to audit mode, you log into the system using the built-in administrator account. After you log on
to the system, the built-in administrator account is immediately disabled during the auditUser configuration
pass. The next time that the computer reboots, the built-in administrator account remains disabled. For more
information, see Enable and Disable the Built-in Administrator Account.
Important
If you are in audit mode and a password-protected screen saver starts, you cannot log back on to the
system. The built-in administrator account that was used to log on to audit mode is immediately disabled
after logon.
To disable the screen saver, either change the power plan through Control Panel or configure and deploy
a custom plan. For more information, see Create a Custom Power Plan.
Settings in an unattended answer file from the oobeSystem configuration pass do not appear in audit
mode.
If you're running scripts, installers, and diagnostic tools on Windows 10 S in Audit Mode, you may have to
enable manufacturing mode for Windows 10 S. See Manufacturing mode for details.
<settings pass="auditUser">
<component name="Microsoft-Windows-Deployment" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"
language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RunAsynchronous>
<RunAsynchronousCommand wcm:action="add">
<Description>Show Desktop</Description>
<Order>1</Order>
<Path>cmd.exe /c %WINDIR%\System32\oobe\AuditShD.exe</Path>
</RunAsynchronousCommand>
</RunAsynchronous>
</component>
</settings>
Before a Windows PC is shipped to a customer, it must be configured to boot to the OOBE screens and display
the Start screen on first boot. Verify that AuditShD.exe is only configured to run in audit mode and is not used
during OOBE.
Related topics
Understanding Servicing Strategies
Windows Setup Configuration Passes
How Configuration Passes Work
Windows Setup Scenarios and Best Practices
Windows Setup Installation Process
Windows Setup Automation Overview
Windows Setup Supported Platforms and Cross-Platform Deployments
Windows 10 S manufacturing mode
Run Audit Mode in the Factory
12/6/2017 • 2 min to read • Edit Online
In build-to-order scenarios OEMs can boot the destination PCs to audit mode to install customer-specific apps,
languages, drivers, and make additional configurations.
After final assembly of the PC you complete integrity testing to ensure the PC is configured correctly.
When ready, boot the PC with Windows PE, or another operating system that allows you to install your custom
Windows image to the PC. You can boot the PC by using a USB key, or you can boot the PC from the network using
PXE boot and Windows Deployment Services.
We recommend you use Windows PE and DISM to boot the PC and apply your custom Windows image.
Apply Images Using DISM
WinPE for Windows 10
Windows Deployment Services Overview
After the image is applied, you boot the PC to audit mode.
Audit Mode Overview
While in audit mode, you can install customer requested software, drivers specific to the PC, and additional items.
While in audit mode you can also install the latest Windows updates. The following topics go into more detail about
how to install drivers, language packs, and Windows updates:
Device Drivers and Deployment Overview
Language Packs
Service a Windows Image Using DISM
Keep in mind that the more items that you install on the factory floor increases the time it takes to assemble, install,
and box the PC.
NOTE
Running scripts, installers, and diagnostic tools in Audit Mode on Windows 10 S may require enabling manufacturing mode
for Windows 10 S. See Manufacturing mode for details on how to enable manufacturing mode.
After you complete your audit mode installations, you must run sysprep /oobe to ensure that the end-user goes
through the out-of-box experience and accepts the license terms. You should capture the Windows installation to
the recovery partition to help users rest the PC to factory default. By doing this in the factory, you can ensure that
the build-to-order customizations that customers make are in the recovery image.
You will need to boot the PC to Windows PE again to capture and apply the Windows installation to the recovery
partition.
The following topic describes how to create the recovery image:
Deploy Push-Button Reset Features
After the recovery image is captured, you can shut down the PC, box it, and ship it.
Depending on the volume of units you are shipping, you might want to consider pulling one or more PCs off the
line to ensure the systems you build meet your quality expectations.
Enable and Disable the Built-in Administrator
Account
7/13/2017 • 3 min to read • Edit Online
When manufacturing PCs, you can use the built-in Administrator account to run programs and apps before a user
account is created.
Note
This topic is about manufacturing PCs. For help with the admin account on your own PC, try one of these pages:
Log on as an administrator
Delete an account called "Administrator"
User Account Control
This account is used when you log into the system by using audit mode, or when you add scripts to the auditUser
configuration pass.
To prevent having to enter a password for the built-in Administrator account after you complete the out-of-box
experience, set Microsoft-Windows-Shell-Setup\ UserAccounts \ AdministratorPassword in the oobeSystem
configuration pass.
The following XML output shows how to set the appropriate values:
<UserAccounts>
<AdministratorPassword>
<Value>SecurePasswd123</Value>
<PlainText>true</PlainText>
</AdministratorPassword>
</UserAccounts>
For Windows Server® 2012, the built-in Administrator password must be changed at first logon. This prevents the
built-in Administrator account from having a blank password by default.
Log on by using audit mode
If the computer has not yet gone through Out-Of-Box Experience (OOBE), you can enter the built-in Administrator
account by re-entering audit mode. For more information, see Boot Windows to Audit Mode or OOBE.
Use the Local Users and Groups MMC (server versions only)
Change the properties of the Administrator account by using the Local Users and Groups Microsoft Management
Console (MMC).
1. Open MMC, and then select Local Users and Groups.
2. Right-click the Administrator account, and then select Properties.
The Administrator Properties window appears.
3. On the General tab, clear the Account is Disabled check box.
4. Close MMC.
Administrator access is now enabled.
You can run this command after you configure the computer and before you deliver the computer to a
customer.
Original equipment manufacturers (OEMs) and system builders are required to disable the built-in administrator
account before delivering the computers to customers. To do this, you can use either of the following methods.
Related topics
Windows Deployment Options
Audit Mode Overview
Configure Network Settings in an Unattended
Installation
6/6/2017 • 1 min to read • Edit Online
This section discusses common network scenarios during deployment, and how to implement these scenarios by
using an answer file in an unattended installation.
In This Section
Configure Windows Firewall with Advanced Security by Configure Windows® Firewall with Advanced Security
Using an Answer File settings in an unattended installation.
Enable Remote Desktop by Using an Answer File Configure settings to enable Remote Desktop connections
in an unattended installation.
Related topics
Windows Deployment Options
Configure Windows Firewall with Advanced Security
by Using an Answer File
7/13/2017 • 2 min to read • Edit Online
For unattended installations, you can configure Windows® Firewall with Advanced Security settings in an answer
file by using the Networking-MPSSVC-Svc component. In addition to the answer file (Unattend.xml) settings for
Windows Firewall with Advanced Security, you can create a RunSynchronous command that runs Netsh
advfirewall commands during the auditUser or oobeSystem configuration pass.
Note
The Netsh advfirewall command requires administrator permissions to run. If the RunSynchronous command
runs in a configuration pass that runs in user context, that user account must have administrator permissions.
Related topics
Windows Deployment Options
Enable Remote Desktop by Using an Answer File
6/6/2017 • 1 min to read • Edit Online
To enable remote desktop connections during an unattended installation, you must configure several settings and
enable the Remote Desktop group in Windows® Firewall with Advanced Security.
To create an answer file to enable remote desktop connections
1. On your technician computer, open Windows System Image Manager (Windows SIM). Click Start, type
Windows System Image Manager, and then select Windows System Image Manager.
2. Create a new answer file, or update an existing answer file. For more information, see Create or Open an
Answer File and Best Practices for Authoring Answer Files.
Add these settings to your answer file in the listed configuration pass:
Microsoft-Windows-TerminalServices- 4 specialize
LocalSessionManager
Networking-MPSSVC- 4 specialize
Svc\FirewallGroups\FirewallGroup
COMPONENT VALUE
Microsoft-Windows-TerminalServices- fDenyTSConnections=false
LocalSessionManager
Networking-MPSSVC- Active=true
Svc\FirewallGroups\FirewallGroup
Group=Remote Desktop
Profile=all
4. (Optional) Specify how users are authenticated. Specifying the following setting will help make sure that
users can connect remotely from computers that don't run Remote Desktop by using network-level
authentication. To enable remote desktop connections from computers that are running any version of
Remote Desktop, add this setting to your answer file:
Related topics
Configure Windows Firewall with Advanced Security by Using an Answer File
Automate Windows Setup
Configure Network Settings in an Unattended Installation
Windows Deployment Options
Configure a Trusted Image Identifier for Windows
Defender
7/13/2017 • 2 min to read • Edit Online
You can speed up the initial performance of your computer for the end user by adding a trusted image identifier to
Windows® Defender. Windows Defender is a Microsoft® application that can help to prevent, remove, and
quarantine malware and spyware.
By default, Windows Defender performs a scan of each file on the computer when the computer accesses the file
for the first time. This is known as an on-access scan. Optimization mechanisms, such as caching, help reduce
unnecessary scans of files that have already been scanned. When Windows Defender performs a quick scan or a
full scan (also known as on-demand scans), the rest of the files on the system will be marked as safe.
Note
If you have already deployed a series of computers, and then later determine that there is a potential problem with
the security of the image, contact your Depth Project Manager (PM) within the Windows Ecosystem Engagement
team. and provide the unique identifier of the image. Microsoft will add this unique identifier into Windows Update.
After a computer with that unique identifier receives updates from Windows Update, Windows Defender performs
scans on all of the files on that computer.
6. Perform other offline tasks, such as offline servicing of the image. Capture and apply the image to other
computers, and then deliver the computer to the customer.
The next time that the computer starts, Windows identifies all of the files currently on the system, and skips
these files during subsequent scans.
Related topics
Sysprep Process Overview
Use Answer Files with Sysprep
Windows Server Deployment Options
6/6/2017 • 1 min to read • Edit Online
In This Section
Configure Windows Server Roles Describes how to configure Windows Server roles during
deployment.
Prepare a Network Policy Server (NPS) for Imaging Describes how to remove information that's defined in the
Network Policy Server (NPS) configuration about RADIUS
clients and remote RADIUS server groups, before you
deploy an image to a different computer.
Related topics
Sysprep Support for Server Roles
Sysprep (Generalize) a Windows installation
Configure Windows Server Roles
7/13/2017 • 1 min to read • Edit Online
To configure one or more Server Roles during an unattended installation, you can use the PowerShell or Server
Manager command-line tool. For more information about Server Roles, see this Microsoft Web site.
You can create FirstLogonCommands in your answer file that specifies the proper parameters for the server role you
want to configure. The FirstLogonCommands setting is configured in the oobeSystem configuration pass. The
FirstLogonCommands setting is run immediately after a user logs onto the computer and before the desktop is
displayed.
Note
You must run PowerShell and Server Manager commands from an account with administrator privileges.
For more information about adding the FirstLogonCommands setting, see Add a Custom Command to an Answer
File.
The following example shows the PowerShell.exe syntax for installing the ServerManager module and the DHCP,
FAX, DNS, and File-Services roles.
<FirstLogonCommands>
<SynchronousCommand wcm:action="add">
<Order>1</Order>
<CommandLine> Powershell.exe –command Import-Module ServerManager; Install-WindowsFeature
DHCP,FAX,DNS,File-Services</CommandLine>
<Description>Configure Server Role</Description>
</SynchronousCommand>
</FirstLogonCommands>
Note
Not all server roles support Sysprep. You must configure some server roles after imaging and deployment. For
more information, see Sysprep Support for Server Roles.
Related topics
Windows Deployment Options
Prepare a Network Policy Server (NPS) for Imaging
7/13/2017 • 1 min to read • Edit Online
If you intend to create an image of an installation for deployment to a different computer, and the Network Policy
Server (NPS) service is installed on the source server, you may have to first remove confidential information that's
stored on the server. Use these procedures to remove the relevant settings and data from the NPS configuration.
To delete RADIUS clients from the NPS configuration
1. Display the list of Remote Authentication Dial-In User Service (RADIUS) clients on the NPS server. To do that,
open an elevated command prompt, type this command, and then press Enter:
2. Delete each RADIUS client in the list. To do that, at the elevated command prompt, type this command and
then press Enter:
For example, this command deletes a RADIUS client named <WirelessAP1> from the NPS server
configuration:
You can delete multiple RADIUS clients by inserting a comma between each client. For example:
You can also remove a RADIUS client by using the following command.
3. Repeat this procedure for each RADIUS client that's configured on the NPS server.
To delete a remote RADIUS server group from the NPS server configuration
1. Display the list of remote RADIUS server groups that are configured on the NPS server. To do that, open an
elevated command prompt, type the following command, and then press Enter:
2. Delete each remote server group in the list. To do that, at the elevated command prompt, type this command
and then press Enter:
For example, this command deletes a remote RADIUS server group named <RemoteServers1> from the
NPS server configuration:
Note
When you delete a remote RADIUS server group, all RADIUS servers that are contained in the group are
deleted.
3. Repeat this procedure for each remote RADIUS server group that's configured on the NPS server.
You can convert Netsh commands to Windows PowerShell® commands. For more information, see the Netshell
to Powershell Conversion Guide.
Related topics
Configure Windows Server Roles
Sysprep (Generalize) a Windows installation
Windows Server Deployment Options
Configure Windows System Assessment Test Scores
6/6/2017 • 7 min to read • Edit Online
The Windows® System Assessment Tests (WinSAT) are used to analyze the performance of several system
components, including CPU, memory, disk, and graphics.
The WinSAT results are summarized in the Performance Information and Tools Control Panel item as Windows
Experience Index (WEI) scores. These scores show consumers the performance characteristics of their systems.
WinEI scores are no longer generated during OOBE, nor are prepop xml files used to create WinSAT formal files
during OOBE. We recommended that you generate the WinSAT formal file on the system prior to shipping it to the
end-users. This allows WinSAT scores to be available as soon as end-user boots their systems, and allows the
optimizations that depend on these results to be immediately available. Because the assessments are not run during
the out-of-box experience, the WinSAT and WEI scores are no longer generated when a user finishes OOBE. Instead,
the scores can be generated at two other times, using other mechanisms besides prepopulating WinSAT on the
system that will ship.
End users can explicitly request an assessment by using the Re-run the assessment option in the
Performance Information and Tools Control Panel item.
When the system is idle, subsequent to the first boot, the remaining WinSAT assessments will run using the
Maintenance Scheduler if they were not prepopulated.
4. [Optional] If you plan to capture this installation to deploy onto other computers, run sysprep /generalize
/audit /shutdown and then capture the installation. Deploy the image to a PC that you intend to ship, and
boot it.
5. Verify that Windows boots to audit mode, and then run WinSAT moobe.
This generates a WinSAT formal file from the matching prepop files, and ensures that the WinSAT formal file
is available when the end-user boots the system the first time. Windows scales some features based on the
WinSAT formal file, and if this file is not present on the system, then the system might experience
performance problems, including unnecessary storage device defragmentation, lack of optimized memory
management and prefetching optimizations.
Note
To reduce the time a PC spends on the factory floor, we recommend using WinSAT prepop when you are
creating your master Windows images. On the factory floor, you would only need to run WinSAT moobe.
However, if you want to run both WinSAT prepop and WinSAT moobe on the factory floor, you can use
WinSAT formal instead. This option creates the same set of files as running both WinSAT prepop and
WinSAT moobe and should be used in scenarios when you are not able to run WinSAT prepop on your
master Windows images.
6. Run the sysprep /oobe to configure Windows to boot to OOBE.
Warning
Running sysprep /generalize after running WinSAT moobe will delete the results that WinSAT moobe
created. We recommend that you run WinSAT moobe or WinSAT formal on the factory floor for each PC
that you intend to ship to a customer.
The system is now ready to be shipped to a customer. The benefit of running all of the WinSAT assessments per
computer image is that the customer’s computer always has a complete set of WinSAT results. It also has the most
accurate WinSAT results. In this use, accurate means that if the consumer used on-demand rating of a system, that
system would get a rating equal to or greater than the rating that was prepopulated by WinSAT.
Pre-population is not meant to enable transferring WinSAT data among systems with very different capabilities,
such as among laptops and desktops, because the data is not accurate across widely differing systems. Instead, it is
meant to make it easier to re-use WinSAT data among similar systems; those systems that contain the same
motherboard/chipset and similar CPU, video cards and disks.
The following procedure describes how to run WinSAT on selected configurations within a line of similar
computers. This involves running the WinSAT prepop commands multiple times.
Where %IdentifierDerivedFromDate% is year-month-day and time represented as, for example, 0012-08-01 14.48.28
where the test was run on August 1, 2012 at 2:48:28 PM.
A WinSAT formal file created from running winsat prepop followed by winsat moobe; or from running winsat
formal uses the following naming pattern:
%IdentifierDerivedFromDate% Formal.Assessment(Initial).WinSAT.xml
Related topics
Windows Deployment Options
High DPI Support for IT Professionals
6/6/2017 • 1 min to read • Edit Online
Windows 8.1 has new features that improve the end user’s experience with premium high density display panels.
When using Windows 8.1, activities such as projecting to an external display and desktop scaling on the primary
display are significantly improved from previous Windows releases. You will see the most benefit from these
features when you are using a dense display, such as a 2560x1440 display with 225 DPI and 200% desktop scaling.
This topic explains what is distinctive about these premium display parts, and what Windows 8.1 does to provide
better support for them. It also explains some potential issues—including display fuzziness or blurriness—that
might impact some users with lower density displays at 125% scaling, and how enterprise IT professionals can
address them in Windows 8.1.
In this section:
High DPI and Windows 8.1
Fixing blurry text in Windows 8.1 for IT Professionals
High DPI projection and multi-monitor configurations
DPI-related APIs and registry settings
High DPI and Windows 8.1
6/6/2017 • 4 min to read • Edit Online
This topic introduces the key concepts of DPI and display scaling and describes what is new in Windows 8.1.
In this topic:
Key concepts
What’s new about DPI
Key concepts
What is DPI
Dots per inch (DPI)) is the physical measurement of number of pixels in a linear inch of a display. DPI is a function
of display resolution and size; a higher resolution or a smaller size will lead to higher DPI, and a lower resolution or
a larger size will lead to lower DPI. When a display has a higher DPI, pixels are smaller and closer together, so that
the user interface (UI) and other displayed content appears smaller than intended.
What are Windows scale factors
Windows® ensures that everything appears on the screen at a usable and consistent size by instructing
applications (including the Windows desktop shell) to resize their content by a scale factor. This number depends
on the display DPI as well as other factors that impact the user’s perception of the display. Almost all desktop
displays and most current laptop displays are in the range of 95-110 DPI; for these devices, no scaling is required,
and Windows sets a scale factor of 100%. However, there are a number of new devices, particularly in the premium
laptop and tablet markets, which have higher displays with over 200 DPI. For these devices, Windows sets higher
scale factors to ensure that the user experience is comfortably viewable.
Why this matters to users
Users typically spend hours reading and working on Windows devices, so it is important to ensure that the device
they are looking at is optimized for their comfort. Therefore, it is important for Windows to present the content in
the most readable way so that eye fatigue is reduced, and productivity is not impacted. As display technology
improves, this can be delivered in a combination of higher DPI displays and better scaling in Windows. Windows 8
provides features that automatically adjust the default scaling to better match newer, more dense DPI displays.
Why this matters to enterprises
As Windows devices improve, high density displays will become increasingly common in enterprise environments.
Enterprises are also moving towards a more mobile workforce that use laptops in meetings to project, docking
solutions when at the desk. To ensure optimum productivity, enterprise users should not need to manage how their
screens lock when they project, or how their docking solutions present their workspace when they sit down at a
desk. Windows 8 does this automatically for most users, but there remain some edge cases which IT professionals
in enterprise environments might need to help support. This topic describes how Windows automatically does the
right thing in most instances, and where IT might need to step in and help the user out.
The first two of the above features have the biggest impact on Windows 8 usability. In more detail:
1. Improved 200% scaling support: Windows 8.1 identifies high DPI display devices on a dynamic basis and
natively supports up to 200% scale factors. Windows 8 only identified a high DPI display during first boot,
and only supported up to 150% scaling without user customization. This feature ensures that users who buy
premium laptops with high DPI displays will automatically receive the 200% scaling required to make
content easily visible.
2. Per-monitor DPI: Windows 8.1 sets different scale factors for different displays, and can scale content
appropriately. Windows 8 only sets a single scale factor that is applied to all displays. This feature ensures
that users with High DPI devices (that is, 150% and 200% scaling laptops) who project or dock their devices
with conventional 100% scaling projectors and desktop monitors display properly sized content on those
screens.
How these changes impact enterprise users
For the users on laptops with 100% scaling, the Windows 8.1 feature changes have no impact. For users who
acquire new devices that have high DPI, Windows 8.1 provides a significant benefit.
It is possible that some users will acquire devices that fall in-between, featuring Windows scaling of 125%. These
devices can require the user or the IT professional to configure them correctly or update/tweak applications to
improve usability. The troubleshooting section of this topic can help IT professionals identify these systems, these
applications, and undertake the right mitigation tactics.
Related topics
High DPI Support for IT Professionals
Fixing blurry text in Windows 8.1 for IT Professionals
6/6/2017 • 5 min to read • Edit Online
Windows® desktop apps fall broadly into two classes: apps that are DPI-aware and those that are not. DPI-aware
apps actively let Windows know during application launch that they are capable of scaling themselves to work well
on a high DPI display. These apps include: Internet Explorer, Office, Firefox, and .NET 2.0+ (including WPF) apps.
These apps generally work well across a wide range of scale factors. Therefore, if your enterprise line of business
apps are also DPI-aware, your users should not have a problem with any Windows 8.1 displays or scale factors.
However, if an application is not DPI aware, and is running on a high DPI display, Windows scales the app by
applying bitmap scaling to the application output. This ensures that the application is the correct size on a high DPI
display. In most instances this will result in crisp and usable applications, but in some instances, the result is less
crisp and might have a slightly fuzzy or blurry appearance because of the bitmap scaling.
In this topic:
How to tell if an application is not DPI-aware
What you can do about apps that aren’t DPI-aware
Tell Windows not to scale an app that’s not DPI-aware
SCALE FACTOR 100% MAINSTREAM 125% VALUE 150% PREMIUM 200% PREMIUM
Bitmap scaling of N/A Most noticeable Less noticeable Clear and crisp
unaware apps fuzziness fuzziness
Scaling of aware N/A Clear and crisp Clear and crisp Clear and crisp
apps
As shown in the preceding table, most of the issues manifest at the 125% scaling ratio. For this reason, any
mitigation should target apps that aren’t DPI-aware on 125% scaling systems only.
For information about how to identify 125% systems or how to revert to Windows 8 scaling behavior for a 125%
system, see DPI-related APIs and registry settings.
Related topics
High DPI Support for IT Professionals
High DPI projection and multi-monitor configurations
6/6/2017 • 2 min to read • Edit Online
Many enterprise users use secondary displays for such purposes as docking, projection, or extending their desktop
to a secondary display.
These scenarios do not impact the guidance for 150% and 200% devices, but for users with 125% display devices
who also use a desktop docking station or secondary monitor, we recommend the Windows 8 compatibility mode
that is described in Fixing blurry text in Windows 8.1 for IT Professionals. Additional guidance about compatible
devices and projectors is provided in this topic.
Projection experiences
Windows 8.1 has optimized support for projection experiences. In previous versions of Windows, the user of a high
DPI device might see content that was too big on the low DPI projector, making it difficult to get all the appropriate
content on screen for presentation purposes. There are two projection modes: Duplicate and Extend. This section
describes how Windows supports each of these modes.
Duplicate mode (default for projection and typically used for projection)
The default projection mode is called Duplicate mode. (Type Win+P at the keyboard to see a list of the four multi-
monitor display modes: PC screen only, Duplicate, Extend, and Second screen only.) In Duplicate mode, the
same content is presented on the laptop display as on the projector. This makes it easiest for the presenter to
interact directly with the content being display on the screen, particularly with laptop or tablet that supports touch.
In this mode, Windows will look at both displays, try to find the best common resolution, and then put both
displays into that resolution. In Windows 8.1, if this resolution change has an impact on the display scale factor,
Windows will then rescale based on the new scale factor, thereby ensuring the best projection experience.
Extend mode (typical for multi-monitor desktop scenarios)
In the Extend mode, the projector is treated as a separate display from the primary display. This mode is typical for
users using a multi-monitor setup or docking scenario. The user can drag or move content to the separate display
by using the mouse or touchpad. This is not the default option but some users prefer this setting (to give just one
example, because it allows the user to separate note taking from their presentation). In this mode, Windows 8.1
associates an appropriate scale factor for each display, and when the user moves content to the projector, Windows
will rescale it appropriately, again ensuring the best projection experience.
What this means for the IT Professional
For projection scenarios, per-monitor scaling is required to provide a usable projection experience for 150% and
200% displays. In some cases, users who have 125% devices might have issues with apps that aren’t DPI-aware
being fuzzier when projected. See Fixing blurry text in Windows 8.1 for IT Professionals for guidance on how to turn
off per-app DPI scaling in these cases.
Important
Projectors work best in duplicate mode if they support resolutions and video modes that are similar to the device
that is projecting. For example, if the dominant portable devices in the enterprise have 1366x768 and 1920x1080
displays, the projectors that are used should support the same resolutions for the best duplicate mode experiences.
Related topics
High DPI Support for IT Professionals
DPI-related APIs and registry settings
7/13/2017 • 4 min to read • Edit Online
If you need to perform deployment customizations, the following sections explain the registry keys and system
parameters that your post-installation scripts might need to access.
In this topic:
Primary display native resolution
Primary display DPI scale factor
Scaling mode
Scaling override in Windows 8.1 scaling mode
System-wide scale factor in Windows 8 scaling mode
DISPLAY HORIZONTAL
DISPLAY SIZE RESOLUTION (PIXELS) VERTICAL (PIXELS) PANEL DPI SCALING LEVEL
// Get desktop dc
desktopDc = GetDC(NULL);
// Get native resolution
horizontalResolution = GetDeviceCaps(desktopDc,HORZRES);
verticalResolution = GetDeviceCaps(desktopDc,VERZRES);
// Get desktop dc
desktopDc = GetDC(NULL);
// Get native resolution
horizontalDPI = GetDeviceCaps(desktopDc,LOGPIXELSX);
verticalDPI = GetDeviceCaps(desktopDc,LOGPIXELSY);
These results are returned in a coordinate system in which 96 corresponds to 100%, as shown in Table 2 DPI Scale
Factors.
Table 2 DPI Scale Factors
96 100
120 125
144 150
192 200
Note
This API will return different results depending on the DPI awareness mode of your application. Configuring the
awareness mode requires adding XML to the application manifest, as detailed below:
System DPI Aware <dpiAware>True</dpiAware> The DPI of the primary display at the
time the Windows session was started
(when the user first logged in to
Windows)
DPI AWARENESS MODE MANIFEST SETTING RETURNED VALUE
Per-Monitor DPI Aware <dpiAware>True/PM</dpiAware> The DPI of the primary display at the
time the Windows session was started
(when the user first logged in to
Windows). To obtain the DPI of the
display that the application is located
on, use GetWindowDpi() or
GetDpiForMonitor()
For more information about this manifest setting, see SetProcessDPIAware function.
Scaling mode
The Control Panel\ Appearance and Personalization\Display user interface (UI) includes a checkbox: Let me
choose one scaling level for all my displays, which controls whether the system applies a single scale factor to
all displays (as in Windows 8 and earlier versions of Windows), or different scale factors that take into account the
pixel density of each display (the Windows 8.1 default). This checkbox configures the HKCU\Control
Panel\Desktop\Win8DpiScaling registry key in Windows 8.1.
Table 3 HKCU\Control Panel\Desktop\Win8DpiScaling Values
<0 Reduce each display scale factor from the default by this value
(for example, if the default was 150% scaling, -1 corresponds
to 125%, -2 to 100%).
0> Increase each display factor by this value (using the previous
example, +1 corresponds to 200% scaling).
All display scale factors in this mode are constrained to be one of these four values: 100%, 125%, 150%, 200%. In
addition, after scaling is applied, applications expect to have at least 720 effective lines of resolution (that is, the
physical vertical resolution of the display divided by the scale factor); this can further limit the range of allowed
display scale factors. Table 5 Display Values shows which values are allowed for different sized displays:
Table 5 Display Values
<900 100%
Related topics
Documentation for developing High DPI applications
High DPI Support for IT Professionals
PAE/NX/SSE2 Support Requirement Guide for
Windows 8
7/13/2017 • 9 min to read • Edit Online
This topic describes processor support for the PAE/NX/SSE2 requirement in Windows 8, and error cases and
scenarios that customers can encounter when computers do not meet the requirement.
This content applies to Windows 8 and Windows Server® 2012.
In this topic:
Overview
Scope of implications
Support requirements
FAQs
Overview
No -eXecute (NX )
No-eXecute (NX) is a processor feature that allows memory pages to be marked as non-executable. The feature
enables the CPU to help guard the system from attacks by malicious software. The NX feature prevents executable
malicious software code from being put in accessible regions of memory. Windows 8 requires that systems have
processors that support NX, and NX must be turned on for important security safeguards to function effectively and
to avoid potential security vulnerabilities.
In this topic, the term NX refers specifically to the NX processor bit that is defined by AMD, or the equivalent XD
processor bit that is defined by Intel for the Data Execution Prevention (DEP) feature support in Microsoft Windows.
DEP helps prevent malicious code execution from data pages. The 32-bit version of Windows uses one of the
following features for DEP support:
The AMD-defined No-eXecute (NX) page protection processor feature
The Intel-defined eXecute Disable (XD) bit feature
To use these processor features, the x86 (32-bit) processor must be running in Physical Address Extension (PAE)
mode. The 64-bit version of Windows uses the NX processor feature on 64-bit extensions and certain values of the
access rights Page Table Entry (PTE) field on Intel Itanium Processor Family (IPF) processors.
In addition to DEP, the Address Space Layout Randomization (ASLR) moves executable images into random
locations when a system boots, thereby making it harder for malicious code to operate predictably. ASLR and DEP
are effective only when they are used together. NX must be enabled for these two important Windows security
safeguards to remain effective. For more information, see Windows ISV Software Security Defenses.
Physical Address Extension (PAE)
The processor must be running in Physical Address Extension (PAE) mode to use the NX processor feature. PAE is a
processor feature that enables x86 processors to access more than 4 GB of physical memory on capable versions of
Windows. The Intel Itanium and x64 processor architectures can access more than 4 GB of physical memory
natively, and do not provide the equivalent of PAE. PAE is supported by 32-bit versions of Windows running on
x86-based systems only.
When DEP is enabled on a system that has a processor that supports the NX feature, PAE is automatically enabled.
Streaming SIMD Extensions 2 (SSE2)
All processors that support NX also support Streaming SIMD Extensions 2 (SSE2). SSE2 is an Intel Single Instruction
Multiple Data (SIMD) processor supplementary instruction set. AMD also includes SSE2 support with Opteron and
Athlon 64 ranges of AMD64 processors. All processors that support NX also support SSE2. Many Windows 8
applications have code paths that have the SSE2 instruction set. SSE2 is a requirement for Windows 8.
Scope of implications
All modern processors support NX. NX can be turned off in the BIOS. Based on available telemetry data, it appears
that one percent of the systems that are running Windows® 7 have NX turned off because of a misconfiguration in
the BIOS setting.
NX requires PAE-capable processors on 32-bit version of Windows. All 64-bit processors support NX because they
are Address Windowing Extensions (AWE)-aware. Therefore, the issue of older 32-bit processors that are not PAE-
capable has no WOA implications or Windows Server implications (Windows Server 2012 is 64-bit only). The
processor requirement won't impact customers on modern systems, or on systems that meet logo requirements
for Windows 7 because these systems have PAE-capable 32-bit processors that support NX and enable NX to be
turned on. Only a small set of customers who have Windows 7 running on very old 32-bit processors without
PAE/NX support are impacted.
Windows 8 and Windows Server 2012 require PAE. This requirement impacts a small number of customers who
have older hardware that does not support PAE. Failures occur when Windows 8 is installed on misconfigured
Virtual Machines (VMs). Windows Setup fails the installation with error 0xc0000260 and rolls back to Windows 7.
Visual Studio emits SSE2 instructions by default. Applications that contact these instructions crash on systems that
have older processors that do not support SSE2, as described in SSE2 instructions generated when /arch:SSE is
specified.
Support requirements
This section describes the measures that ensure that processors on systems that are running Windows 8 meet PAE,
NX, and SSE2 support requirements.
Windows 8 Logo requirement
Windows 8 Hardware Certification Requirement requires that all drivers must operate normally together with
Execution Protection to ensure proper device and driver system behavior. Drivers must not execute code out of the
stack, paged pool, and session pool. Drivers must not fail to load when PAE mode is enabled. The system firmware
must have NX on and DEP policy must not be set to Always Off. A certification test is included to certify that a
system meets this NX support requirement.
For more information, see Windows Hardware Certification Requirements.
Hardware compatibility check in Windows Setup
Windows Setup has a hardware compatibility check for PAE, NX, and SSE2 support on the install system. Systems
that fail the requirement of processor support for PAE, NX, and SSE2 are reported as hard blocks for Windows 8 in
the compatibility issue report, and display the message: Your PC's CPU isn't compatible with Windows 8.
Figure 1 CPU Incompatibility Error Message
Note
This support requirement check is available in the new Windows Setup and Upgrade Assistant only. Windows 8
includes an alternate version of Windows Setup in the sources folder of the installation media, which does not
include this check. Customers who try to use this alternate version of Windows Setup on a system that does not
meet the PAE/NX/SSE2 support requirements encounter an error during the Setup process and roll back to the
previous operating system.
In a boot from media or a network installation such as Windows Deployment Services (WDS), no compatibility
check occurs during Windows Setup. For these scenarios, a system without NX or SSE2 support will result in a
bugcheck (that is described in the following Kernel enhancement section) when Setup tries to boot Windows.
Kernel enhancement
To meet the Windows 8 requirement for NX feature and SSE2 instructions support, the Windows 8 kernel checks
for these features during initialization. Systems that do not support NX or SSE2 cannot initialize a Windows 8
kernel. Systems that can disable NX in firmware have that option overridden; therefore, misconfigured firmware
does not cause boot to fail. An attempt to boot a system that does not have NX or SSE2 support results in a
bugcheck. Users get the UNSUPPORTED_PROCESSOR code (0x0000005D) error, together with four lines of
information on a 32-bit system:
Line 1 – a code indicating a feature is missing and an identifier for the CPU
Lines 2-4 – Vendor ID strings
On a 64-bit system, the bugcheck shows the same UNSUPPORTED_PROCESSOR code as on a 32-bit system,
together with the following four lines of information:
Line 1 – the contents of the standard features register
Line 2 – the contents of the extended features register
Lines 3-4 – both 0
FAQs
How do I know if my system supports NX or SSE2?
You can use the Coreinfo command-line utility to get a system’s processor information and review PAE, NX, and
SSE2 entries in the output list. A \* character displays next to a supported feature name. A - character displays if the
feature is not supported. For example:
Coreinfo v3.04 - Dump information on system CPU and memory topology
Copyright (C) 2008-2012 Mark Russinovich
Sysinternals - www.sysinternals.com
If PAE is displayed as not supported in Coreinfo output, this means that the system has a processor that is not PAE-
capable, and cannot support NX. If PAE is shown as supported, but NX is displayed as not supported in Coreinfo
output:
Consult the feature set that is published by the CPU manufacturer to determine if NX is supported by the
processor on the system.
If the processor has NX support, then the system might have a misconfigured BIOS setting for the NX
support option.
If NX is supported on my system, how do I turn on NX?
On a system that has the NX support, see the system manufacturer’s guide to go into the BIOS settings option and
look for the NX or XD settings under the Security tab to turn on the NX support. If the BIOS setting for NX support
is not available on the system, you might need to contact the manufacturer to update the BIOS.
Note
On a 64-bit system, if NX is supported by the system, the system configuration settings do not allow setting DEP
policy to be set to Always Off. For more information about system-wide configuration of DEP, see A detailed
description of the Data Execution Prevention (DEP) feature in Windows XP Service Pack 2, Windows XP Tablet PC
Edition 2005, and Windows Server 2003.
For Windows 8, processors on a system must support NX and SSE2 for the system to boot successfully. If a system
has the support but the settings are misconfigured, the options are overridden before the kernel boots up the
system.
What should I do when Windows 8 failed to install on a VM with error 0x0000260?
If a VM is hosted on a system that supports NX, you must enable PAE/NX in the VM settings or configuration
manager when you set up the Windows 8 VM. See the virtualization product installation guide for instructions on
how to enable PAE/NX for the VM.
Note
If you tried to install Windows 8 on a VM that is hosted on a system that is running a version of Windows that has
NX disabled, you must follow the instructions in How do I know if my system supports NX or SSE2? and If NX is
supported on my system, how do I turn on NX? to enable NX on the system before PAE/NX can be enabled for the
VM.
Microsoft .NET Framework 3.5 Deployment
Considerations
10/26/2017 • 1 min to read • Edit Online
.NET Framework 3.5 is not included by default in Windows 10 or Windows Server 2016, but you can download
and deploy it for application compatibility. This section describes these deployment options.
In this section:
Deploy .NET Framework 3.5 by using Group Policy Feature on Demand setting
Deploy .NET Framework 3.5 by using Deployment Image Servicing and Management (DISM)
Enable .NET Framework 3.5 by using Windows PowerShell
Enable .NET Framework 3.5 by using Control Panel and Windows Update (Windows 8 only)
Enable .NET Framework 3.5 by using the Add Roles and Features Wizard
.NET Framework 3.5 deployment errors and resolution steps
Introduction
Windows 10 or Windows Server 2016 include .NET Framework 4.6, which is an integral Windows component that
supports building and running the next generation of applications and web services. The .NET Framework provides
a subset of managed types that you can use to create Microsoft Store apps for Windows by using C# or Visual
Basic. For more information, see .NET Framework.
Only the metadata that is required to enable the .NET Framework 3.5 is contained in the default Windows image
(\sources\install.wim). The actual binaries are not in the image. This feature state is known as disabled with
payload removed.
You can get the .NET Framework 3.5 payload files from Windows Update or the installation media in the
\sources\sxs folder. For more information, see Installing the .NET Framework 3.5. After the .NET Framework 3.5
feature is enabled, the files are serviced just like other operating system files from Windows Update.
If you upgrade from Windows 7 (which includes .NET Framework 3.5.1 by default) to Windows 10, or from
Windows Server 2008 R2 (which has .NET Framework 3.5.1 feature installed) to Windows Server 2016, .NET
Framework 3.5 is automatically enabled.
Related topics
Windows Server Installation Options
Deploy .NET Framework 3.5 by using Group Policy
Feature on Demand setting
6/6/2017 • 3 min to read • Edit Online
For environments that use Active Directory and Group Policy, the Feature on Demand (FoD) policy setting option
provides the most flexibility for the installation of .NET Framework 3.5. This Group Policy setting specifies the
network locations to use to enable optional features that have had their payload files removed, and for file data and
registry repair operations from failed update installations. If you disable or do not configure this setting, or if the
required files cannot be found at the locations that are specified in this policy setting, the files are downloaded from
Windows Update (if this is allowed by the policy settings for the computer). The Group Policy setting Specify
settings for optional component installation and component repair is located at Computer
Configuration\Administrative Templates\System in Group Policy Editor.
Requirements
Active Directory Domain infrastructure that supports Windows 8 and Windows Server® 2012
Access rights to configure Group Policy
Target computers need network access and rights to use alternate sources, or an Internet connection to use
Windows Update
Figure 1 Group Policy Setting for Features on Demand and Feature Store Repair
When this policy is enabled, a network location (for example, a file server) can be specified for both repair of the
feature file store, and to enable features that have their payload removed. The Alternate source file path can
point to a \sources\sxs folder or a Windows image (WIM) file using the WIM: prefix. The advantage of a WIM file is
that it can be kept current with updates, and provide a current repair source and .NET Framework 3.5 binaries. The
repair WIM can be different than the initial WIM file that is used for installation. The user or process that tries to
enable an optional Windows feature requires appropriate access rights to file shares and/or WIM files.
If you select Never attempt to download payload from Windows Update, Windows Update is not contacted
during an installation or repair operation.
If you select Contact Windows Update directly to download repair content instead of Windows Server
Update Services (WSUS), any attempt to add features (for example, .NET Framework 3.5) or repair the feature file
store, uses Windows Update to download files. Target computers require Internet and Windows Update access for
this option.
Note
Windows Server Update Services (WSUS) is not supported as a source for FoD or feature file store repair.
For Windows 8 and Windows Server 2012, WSUS is not supported as a source for feature installation (for example,
adding .NET Framework 3.5 feature files) or feature file store repair operations. WSUS core scenarios include
centralized update management and patch management automation, which enables administrators to manage the
distribution of updates that are released through Microsoft Update to computers in their network. FoD and feature
file store repair rely on download of individual files to perform update or repair operations. For example, if a single
file becomes corrupted, then only that file (which could be as small as a few kilobytes) is downloaded from the
repair source. WSUS can use either full or express files to perform servicing update operations; however, these files
are not compatible with FoD or feature file store repair.
If an alternate source path is used to repair images, consider the following guidelines:
Servicing updates
Keep any repair source current with the latest servicing updates. If you are using an image from a WIM file
for FoD, you can use the Deployment Image Servicing and Management (DISM) tool to service the image.
For more information, see Mount and Modify an Image Using DISM. If you are using an online Windows
installation that is shared on your local network as a repair image, make sure that the computer has access
to Windows Update.
Multilingual images
You must include all relevant language packs with your repair source files for the locales that your image
supports. If you restore a feature without all localization files that the Windows installation requires for that
feature, installation fails. You can install additional language packs after a feature is restored.
Related topics
Microsoft .NET Framework 3.5 Deployment Considerations
Deploy .NET Framework 3.5 by using Deployment
Image Servicing and Management (DISM)
3/1/2018 • 3 min to read • Edit Online
You can use the Deployment Image Servicing and Management (DISM) command-line tool to create a modified
image to deploy .NET Framework 3.5.
Important
For images that will support more than one language, you must add .NET Framework 3.5 binaries before adding
any language packs. This order ensures that .NET Framework 3.5 language resources are installed correctly in the
reference image and available to users and applications.
In this topic:
Using DISM with Internet connectivity
Using DISM with no Internet connectivity
Use /All to enable all parent features of the specified feature. For more information on DISM arguments, see
Enable or Disable Windows Features Using DISM.
3. On Windows 8 PCs, after installation .NET Framework 3.5 is displayed as enabled in Turn Windows
features on or off in Control Panel. For Windows Server 2012 systems, feature installation state can be
viewed in Server Manager.
For an offline reference image
1. Run the following DISM command (image mounted to the c:\test\offline folder and the installation media
in the D:\drive) to install .NET 3.5:
DISM /Image:C:\test\offline /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:D:\sources\sxs
A status of Enable Pending indicates that the image must be brought online to complete the installation.
Related topics
Microsoft .NET Framework 3.5 Deployment Considerations
Enable .NET Framework 3.5 by using Windows
PowerShell
6/6/2017 • 1 min to read • Edit Online
For a Windows Server installation that is not connected to the Internet, you can use Windows PowerShell to add
.NET Framework 3.5 and provide access to the \sources\sxs folder on the installation media. The \sources\sxs
folder can be copied to network share (for example, \\network\share\sxs) to make it easily accessible to multiple
computers. The target computer account DOMAIN\SERVERNAME$ must have at least read access to the network
share.
Requirements
Windows Server 2012 or Windows Server 2016
Installation media
Administrator user rights. The current user must be a member of the local Administrators group to add or
remove Windows features.
Target Computers might need network access and rights to use either alternate sources or an Internet
connection to use Windows Update.
Steps
1. Start Windows PowerShell in the Administrator Command Prompt by typing:
powershell
2. To install .NET Framework 3.5 from installation media located on a network share, use the following
command:
Get-WindowsFeature
The Install State column should show Installed for the .NET Framework 3.5 (includes .NET 2.0 and 3.0)
feature.
Related topics
Microsoft .NET Framework 3.5 Deployment Considerations
Enable .NET Framework 3.5 by using Control Panel
and Windows Update (Windows 8 only)
6/6/2017 • 1 min to read • Edit Online
For an installation of Windows 8 that has an Internet connection, the easiest way to add .NET Framework 3.5 is to
download the required files by using Control Panel and Windows Update.
Requirements
Internet connection
Access to Windows Update. If the PC or server is behind a firewall or uses a proxy server, see KB900935 -
How the Windows Update client determines which proxy server to use to connect to the Windows Update
Web site.
Administrator rights. The current user must be a member of the local Administrators group to add or
remove Windows features.
Steps
1. On the Start Screen type turn on windows features, select Settings in the Search pane, and click on Turn
Windows features on or off.
The wizard will search for required files and then prompt you to download the files through Windows
Update.
2. In Windows Update, select Download Files.
3. After the wizard completes, click Finish.
Related topics
Microsoft .NET Framework 3.5 Deployment Considerations
Enable .NET Framework 3.5 by using the Add Roles
and Features Wizard
6/6/2017 • 1 min to read • Edit Online
You can use Server Manager to enable .NET Framework 3.5 for a local or remote installation of Windows Server
2012 R2.
Requirements
Windows Server 2012 R2
Installation media
Administrator user rights. The current user must be a member of the local Administrators group to add or
remove Windows features.
Target Computers might need network access and rights to use either alternate sources or an Internet
connection to use Windows Update.
Steps
1. In Server Manager, click Manage and then select Add Roles and Features to start the Add Roles and
Features Wizard.
2. On the Select installation type screen, select Role-based or feature-based installation.
3. Select the target server.
4. On the Select features screen, check the box next to .Net Framework 3.5 Features.
5. On the Confirm installation selections screen, a warning will be displayed asking Do you need to
specify an alternate source path?. If the target computer does not have access to Windows Update, click
the Specify an alternate source path link to specify the path to the \sources\sxs folder on the installation
media and then click OK. After you have specified the alternate source, or if the target computer has access
to Windows Update, click the X next to the warning, and then click Install.
If you are using Server Manager in Windows Server 2012 to add a role or feature to a remote server, the
remote server’s computer account (DOMAIN\ComputerName$) requires access to the alternate source file
path because the deployment operation runs in the SYSTEM context on the target server.
Related topics
Microsoft .NET Framework 3.5 Deployment Considerations
.NET Framework 3.5 deployment errors and
resolution steps
7/18/2017 • 1 min to read • Edit Online
This topic describes common errors you can encounter when you use Features on Demand to enable or deploy
.NET Framework 3.5, and recommended steps to resolve the issues.
Features on Demand Error Codes
0x800F081F CBS_E_SOURCE_MISSIN The source files could Verify that the source
G not be found. Use the specified has the
Source option to specify necessary files. The
the location of the files source argument should
that are required to point to the
restore the feature. For \sources\sxs folder on
more information about the installation media or
how to specify a source the Windows folder for a
location, see Configure a mounted image (for
Windows Repair Source. example,
c:\mount\windows for
an image mounted to
c:\mount).
0x800F0906 CBS_E_DOWNLOAD_FAI The source files could Verify that the computer
LURE not be downloaded. Use or server has
the Source option to connectivity to Windows
specify the location of Update, and that you
the files that are are able to browse to
required to restore the http://update.microsof
feature. For more t.com. If WSUS is used
information about how to manage updates for
to specify a source this computer, verify
location, see Configure a that the Group Policy
Windows Repair Source. setting Contact
Windows Update
Windows couldn’t directly to download
connect to the Internet repair content instead
to download necessary of Windows Server
files. Make sure that the Update Services
system is connected to (WSUS) is enabled.
the Internet and click
Retry.
ERROR CODE NAME DESCRIPTION RESOLUTION STEPS
Related topics
Microsoft .NET Framework 3.5 Deployment Considerations
DISM - Deployment Image Servicing and
Management
6/6/2017 • 1 min to read • Edit Online
Deployment Image Servicing and Management (DISM) is a command-line tool that is used to mount and
service Windows images before deployment. You can use DISM image management commands to mount and
get information about Windows image (.wim) files or virtual hard disks (VHD). You can also use DISM to
capture, split, and otherwise manage .wim files.
You can use DISM to install, uninstall, configure, and update Windows features, packages, drivers, and
international settings in a .wim file or VHD using the DISM servicing commands.
DISM commands are used on offline images, but subsets of the DISM commands are also available for
servicing a running operating system.
DISM is installed with Windows, and it is also distributed in the Windows Assessment and Deployment Kit
(Windows ADK). DISM replaces several deployment tools, including PEimg, Intlcfg, ImageX, and Package
Manager.
In This Section
What is DISM? Describes the DISM system requirements, benefits,
common servicing and management scenarios, and
limitations.
DISM How-to Topics (Deployment Image Servicing and Provides how-to instructions on using DISM.
Management)
DISM Reference (Deployment Image Servicing and Provides reference information for DISM, including
Management) command-line options, best practices, and supported
platforms.
Related topics
Windows Setup Technical Reference
Device Drivers and Deployment Overview
Language Packs
Understanding Servicing Strategies
What is DISM?
8/17/2017 • 6 min to read • Edit Online
Deployment Image Servicing and Management (DISM.exe) is a command-line tool that can be used to service
and prepare Windows images, including those used for Windows PE, Windows Recovery Environment
(Windows RE) and Windows Setup. DISM can be used to service a Windows image (.wim) or a virtual hard disk
(.vhd or .vhdx).
DISM is available through the command line or from Windows PowerShell. To learn more about using DISM
with PowerShell, see Deployment Imaging Servicing Management (DISM) Cmdlets in Windows PowerShell.
Image Requirements
DISM can be used to mount and service a Windows image from a .wim file, .vhd file, or a .vhdx file or, in some
cases, to update a running operating system. It can be used with older Windows image files (.wim files).
However, it cannot be used with Windows images that are more recent than the installed version of the
Windows Assessment and Deployment Kit (Windows ADK) in which DISM is distributed. DISM is also installed
with the Windows 10, Windows 8.1 and Windows 8 operating systems.
For a complete technical description of WIM, see the Windows Imaging File Format (WIM) white paper.
DISM can be used to service the following operating systems:
Windows 10 for desktop editions (Home, Pro, Enterprise, and Education)
Windows Server 2016
Windows 8.1
Windows 8
Windows Server 2012 R2
Windows Server 2012
Windows 7
Windows Server 2008 R2
Windows Server 2008 SP2
Windows PE for Windows 10
Windows PE 5.0
Windows PE 4.0
Windows Preinstallation Environment (Windows PE) 3.0
Windows Recovery Environment (Windows RE)
Note DISM cannot mount a Windows image from a VHD on Windows Vista® with Service Pack 1 (SP1) or
Windows Server 2008. You must attach the VHD using the DiskPart tool before you can use DISM to service the
image. When you service VHD images that have been attached using the DiskPart tool, the changes are
automatically committed with each operation and cannot be discarded.
For a list of the supported platforms and architecture types, see DISM Supported Platforms.
Benefits
You can use DISM with .wim files to:
Capture and apply Windows images.
Append and delete images in a .wim file.
Split .wim files into several smaller files.
You can use DISM with .wim, .vhd, or .vhdx files to:
Add, remove, and enumerate packages, drivers, languages.
Enable or disable Windows features.
Apply changes based on the offlineServicing section of an Unattend.xml answer file.
Configure international settings.
Upgrade a Windows image to a different edition.
Prepare a Windows PE image.
Provide detailed logs for troubleshooting.
Service earlier versions of Windows such as Windows 8.x, Windows 7, Windows Server 2008 R2, Windows
Vista.
Service all platforms (32-bit, 64-bit).
Service a 32-bit image from a 64-bit host, and service a 64-bit image from a 32-bit host. For more
information, see the "Limitations" section later this topic.
Make use of old Package Manager scripts.
TASKS
Manage several images in a single .wim file by appending, removing, or enumerating the images.
List specific information about an image mounted from a .wim, .vhd, or .vhdx file, including where it is mounted, the mount
status, and the index of each image in a .wim file.
TASKS
List all of the Windows editions that an image can be upgraded to.
Split a large .wim file into several smaller files to fit on selected media.
Limitations
Version compatibility. DISM can be used with target images of older Windows operating systems, but not
with target images of operating systems that are more recent than the installed version of the Windows ADK in
which DISM is distributed. For example, DISM from Windows 10, version 1511 can service Windows 10, version
1511 and version 1507 but not version 1607. To learn more, see DISM Supported Platforms.
Remote installation. Installing packages to a remote computer over a network is not supported. The Windows
image must be present on the local system. DISM can access packages on a network share, but it must copy
them to a temporary, writable directory (called a scratch directory). We recommend that you use a unique
scratch directory on a local drive for each package you install. The contents of the scratch directory can be
deleted after installation.
Answer files. When you specify an answer file (Unattend.xml) for an image, only the settings specified in the
offlineServicing configuration pass are applied. All other settings in the answer file are ignored. For more
information, see DISM Unattended Servicing Command-Line Options
Service Packs. Service packs must be installed online with the Windows Update Standalone installer. For more
information about Windows Update Standalone Installer, see Description of the Windows Update Standalone
Installer in Windows.
Use an answer file to ensure package dependencies. Some packages require other packages to be installed
first. Because of this dependency requirement, you should use an answer file if you are installing multiple
packages. By applying an answer file by using DISM, multiple packages can be installed in the correct order. This
is the preferred method for installing multiple packages.
Package installation order. Packages are installed in the order that they are listed in the command line. In the
following example, 1.inf, 2.inf, and 3.inf will be installed in the order in which they are listed in the command line.
Supported servicing commands are dynamic. The commands and options that are available for servicing an
image depend on which Windows operating system you are servicing, and whether the image is offline or a
currently running operating system.
Multiple unattend files are not supported. You can specify more than one driver or package on a command
line. However, multiple Unattend.xml answer files are not supported. Only a single answer file may be specified
on any command line.
Multiple servicing commands are not supported. You can specify multiple drivers (1.inf, 2.inf) or packages,
but you cannot specify multiple commands (such as /Add-Driver /Remove-Driver or /Add-Driver /Add-
Package) on the same command line.
Logging to a network share. When you use a computer that is not joined to a network domain, use net use
with domain credentials to set access permissions before you specify the path for the DISM log that is stored on
a network share.
Wildcards. Wildcards are not supported in DISM command lines.
Do not install a language pack after an update. If you install an update (hotfix, general distribution release
[GDR], or service pack [SP]) that contains language-dependent resources before you install a language pack, the
language-specific changes that are contained in the update are not applied. Always install language packs before
you install updates.
Related topics
DISM Reference (Deployment Image Servicing and Management)
Deployment Image Servicing and Management (DISM) Command-Line Options
Device Drivers and Deployment Overview
Language Packs
Understanding Servicing Strategies
What's New in DISM
6/6/2017 • 1 min to read • Edit Online
Deployment Image Servicing and Management (DISM.exe) is a command-line tool that can be used to service a
Windows image or to prepare a Windows Preinstallation Environment (Windows PE) image. For more information
about DISM see What is DISM?
DISM in Windows 10
DISM comes with Windows 10, in the c:\windows\system32 folder. You can use DISM from a Command prompt
running as administrator.
where <version> can be 8.0, 8.1, or 10, and <arch> can be x86 or amd64.
If you need to copy and ADK version of DISM to a PC that does not have the ADK, see Copy DISM to another
computer.
Related topics
What is DISM?
DISM - Deployment Image Servicing and Management Technical Reference for Windows
Copy DISM to another computer
DISM How-to Topics (Deployment Image Servicing
and Management)
6/6/2017 • 1 min to read • Edit Online
This section provides information about servicing an existing Windows image using the Deployment Image
Servicing and Management (DISM) tool. You can add or remove language packs or drivers, and you can update an
existing offline or online image when new software and hardware become available. Offline servicing is updating
an image that has been mounted or applied, but is not currently installed and running. Online servicing is updating
the image on a running installation of the Windows operating system. You can use DISM to mount a Windows
image (.wim) file or a virtual hard disk (VHD) for servicing.
In This Section
Use DISM in Windows PowerShell Import DISM cmdlets into a Windows PowerShell
environment.
Install Windows 10 using a previous version of Windows Use the Windows 10 version of DISM on a previous
PE version of Windows PE to deploy Windows 10.
Create and Manage a Windows Image Using DISM Capture, mount, or apply a Windows image.
Take Inventory of an Image or Component Using DISM Get information about an online or offline image and how
to get information about the components in an image.
Service a Windows Image Using DISM Modify or service a Windows image by adding or
removing drivers, packages, features, language packs, or
by changing the Windows image to a higher edition.
Repair a Windows Image Repair a Windows Image if the operating system has
become corrupted or the image is unserviceable.
Manage the Component Store Get information about the component store (WinSxS
folder) and about how to reduce the size of the WinSxS
folder.
Related topics
What is DISM?
DISM Reference (Deployment Image Servicing and Management)
Use DISM in Windows PowerShell
9/5/2017 • 3 min to read • Edit Online
The Deployment Image Servicing and Management (DISM) cmdlets can be used to perform the same functions as
the DISM.exe command-line tool. In many cases, the DISM cmdlet names correspond directly to Dism.exe options
and the same arguments can be used. Because there are also cases where the DISM cmdlet names do not
correspond directly to Dism.exe options, a table that maps the Dism.exe commands to DISM cmdlets is provided
here:
For example, using the Windows 10 version of the Windows ADK on a 64-bit PC type:
Note
Import-Module imports a module only into the current session. To import the module into all sessions, add
an Import-Module command to your PowerShell profile. For more information about profiles, type
get-help about_profiles .
3. Set the %path% environment variable to the location of the DISM folder in the Windows ADK installation. At
the command prompt, type:
When you change environment variables in PowerShell, the change affects only the current session. To make
a persistent change to an environment variable that stores the change in the registry, use System in Control
Panel. For more information, see To add or change the values of environment variables.
To get Help for DISM PowerShell cmdlets
To get the syntax to use with a cmdlet, at a command prompt, type:
get-help get-WindowsImage
Related topics
DISM - Deployment Image Servicing and Management Technical Reference for Windows
DISM Supported Platforms
Install Windows 10 using a previous version of
Windows PE
7/13/2017 • 2 min to read • Edit Online
To use some DISM features in WinPE, such as siloed provisioning packages, you may run the latest version of
DISM from a separate location.
Each time you boot WinPE and want to use these features, you'll need to install and configure the drivers needed
for DISM, including the wimmount.sys and wofadk.sys drivers.
The CopyDandI.cmd script copies the version of DISM from your local installation of the ADK to a folder which
you can use in WinPE.
md "C:\WinPE_amd64\mount"
3. Copy the DISM folder from the Windows ADK into a new folder in the mounted WinPE image.
md C:\WinPE_amd64\mount\DISM
Important Don't overwrite the existing DISM files from the system32 folder in the WinPE image. Instead,
create a new folder on the host computer to copy the Windows ADK files into.
4. Unmount WinPE.
Dism /Unmount-Image /MountDir:"C:\WinPE_amd64\mount" /commit
5. Create WinPE bootable media, or replace the WinPE image file on your existing removable media.
W:\ADKTools\amd64\wimmountadksetupAmd64.exe /Install /q
For the default (RAMDisk) version of WinPE, you'll need to run this command each time you boot WinPE.
To learn how to run this command automatically when WinPE boots, see Wpeinit and Startnet.cmd: Using
WinPE Startup Scripts.
4. Verify the new version of DISM:
W:\ADKTools\amd64\DISM.exe /?
Related topics
DISM Supported Platforms
WinPE: Mount and Customize
Lab 10: Add desktop applications and settings with siloed provisioning packages (SPPs)
Create and Manage a Windows Image Using DISM
6/6/2017 • 1 min to read • Edit Online
Deployment Image Servicing and Management (DISM.exe) mounts a Windows image (.wim) file or virtual hard disk
(.vhd or .vhdx) for servicing. You can also use the DISM image management command to list the image index
numbers or to verify the architecture for the image that you are mounting. After you update the image, you must
unmount it and either commit or discard the changes you have made.
You can use DISM servicing commands to install, uninstall, configure, and update the features and packages in
offline Windows® images and offline Windows Preinstallation Environment (Windows PE) images. For more
information about common DISM scenarios, see What is DISM?. For more information about DISM servicing
commands, see Deployment Image Servicing and Management (DISM) Command-Line Options.
In This Section
Capture Images of Hard Disk Partitions Using DISM Use the Diskpart tool and the Deployment Image
Servicing and Management (DISM) tool to capture an
image and save it as a .wim file.
Mount and Modify a Windows Image Using DISM Map the contents of a Windows image (.wim) file to a
directory to service the image or to perform common file
operations such as adding and deleting files.
Apply Images Using DISM Use the Diskpart tool and the DISM tool to apply
Windows images to one or more partitions onto a
computer for deployment.
Split a Windows Image (WIM) File to Span Across Multiple Split a large .wim file into several smaller files that will fit
DVDs on your selected media. Copy split .wim files onto your
selected media as .iso files.
Create a WIM for Multiple Architecture Types Using DISM Create a single .wim file that includes both 32-bit and 64-
bit Windows images.
Append a Volume Image to an Existing Image Using DISM Add a second image to an existing .wim file.
Create a Data Image Using DISM Create a .wim file that contains only files and applications
that you intend to copy to the Windows installation by
using an unattended answer file.
Related topics
DISM Image Management Command-Line Options
Capture Images of Hard Disk Partitions Using DISM
8/2/2017 • 3 min to read • Edit Online
You can use the Deployment Image Servicing and Management (DISM) tool to capture an image of your hard disk
for deployment and save it as a Windows® image (.wim) file. To see how this information applies to Windows,
system, and recovery partitions, see Capture and Apply Windows, System, and Recovery Partitions.
Prerequisites
1. Windows PE. See WinPE: Create USB Bootable drive.
2. A reference computer. You can create a reference computer by deploying Windows, and then removing the
computer-specific information from the system. For more information, see Sysprep (Generalize) a Windows
installation.
Extended partition No
You can capture and apply images between partitions on BIOS-based and UEFI-based computers, because the
Windows image isn’t affected by the firmware. For more information, see Capture and Apply Windows, System,
and Recovery Partitions.
X:> diskpart
DISKPART>
3. View the disks in your PC with the list disk command. For example,
DISKPART> list disk
4. Select the hard disk with the select disk command. For example,
5. View the partitions with the list partition command. For example,
6. Select the partition with the select partition command. For example,
7. Assign a letter to the partition with the assign letter command. For example,
DISKPART> exit
X:\>
For more information, see the DiskPart Help from the command line, or Diskpart Command line syntax.
For more information about using the DISM tool to capture an image, see DISM Image Management
Command-Line Options.
md N:\Images\
copy C:\my-windows-partition.wim N:\Images\
copy c:\my-system-partition.wim N:\Images\
Next Steps
After the image is captured and stored, you can:
Mount it to your reference computer for modification. For more information, see Mount and Modify a
Windows Image Using DISM.
Split the file into smaller files. For more information, see Split a Windows Image (WIM) File to Span Across
Multiple DVDs.
Apply the images to a destination computer. For more information, see Apply Images Using DISM.
Service the image. For more information, see Service a Windows Image Using DISM.
Related topics
Deployment Image Servicing and Management (DISM) Command-Line Options
BCDboot Command-Line Options
Capture and Apply Windows, System, and Recovery Partitions
Boot to VHD (Native Boot): Add a Virtual Hard Disk to the Boot Menu
Mount and Modify a Windows Image Using DISM
7/13/2017 • 4 min to read • Edit Online
You can use the Deployment Image Servicing and Management (DISM) tool to mount a Windows image from a
WIM or VHD file. Mounting an image maps the contents of the image to a directory so that you can service the
image using DISM without booting into the image. You can also perform common file operations, such as copying,
pasting, and editing on a mounted image.
Note
DISM cannot mount a Windows image from a VHD on Windows Vista with Service Pack 1 (SP1) or Windows
Server 2008. You must attach the VHD using the DiskPart tool before you can use DISM to service the image.
When you service VHD images that have been attached using the DiskPart tool, the changes are automatically
committed with each operation and cannot be discarded.
You can mount and modify multiple images on a single computer. For more information, see Deployment Image
Servicing and Management (DISM) Best Practices.
Mounting an Image
You can mount an image using the /optimize option to reduce initial mount time. However, When using the
/optimize option, processes that are ordinarily performed during a mount will instead be completed the first time
that you access a directory. As a result, there may be an increase in the time that is required to access a directory
for the first time after mounting an image using the /optimize option.
To mount an image
1. Open a command prompt with administrator privileges. If you are using a version of Windows other than
Windows 8 or Windows 10, use the Deployment Tools Cmd Prompt installed with the ADK or navigate to
the DISM directory on your local computer.
2. Mount the image.
Note: To mount a Windows image from a VHD file, you must specify /index:1 .
You can also add options to mount the image with read-only permissions or to reduce the initial mount
time with the /Optimize option. For example,
For more information about the options available for the /Mount-Image option in DISM, see DISM Image
Management Command-Line Options.
Modifying an Image
After you mount an image, you can browse the directory of the image. You can review the file and folder structure,
and add, edit, or delete files and folders.
You can also use the DISM tool to add and remove drivers and packages, including language packs, enumerate
drivers and packages, modify configuration settings, and more. For more information, see Service a Windows
Image Using DISM.
To view and modify an image
1. On your technician computer open the mounted directory. For example,
cd C:\mounted_images
2. Delete, edit, or add additional files and folders to the location where they must appear after they have been
applied to the destination computer. For example, C:\program_files\application_name.
Important
If you must add an application or a device, verify that you included all of the required files. Although you
can add application files and folders, you cannot install applications.
Use /CheckIntegrity to detect and track .wim file corruption when you commit changes to the image.
When you apply or mount the image, use /CheckIntegrity again to stop the operation if file corruption
was detected. /CheckIntegrity cannot be used with virtual hard disk (VHD) files.
Unmounting an Image
After you modify an image, you must unmount it. If you mounted your image with the default read/write
permissions, you can commit your changes. This makes your modifications a permanent part of the image.
To unmount an image
1. Open a command prompt with administrator privileges. If you are using a version of Windows other than
Windows 8 or Windows 10, use the Deployment Tools Cmd Prompt installed with the ADK or navigate to
the DISM directory on your local computer.
2. Unmount the image.
where C:\test\offline is the location of the mount directory. If you do not specify the parameters to
unmount, this option lists all of the mounted images but does not perform the unmount action.
Important
You must use either the /commit or /discard argument when you use the /unmount option.
After modifying an image, you can apply the image from a network share or from local media, such as a CD/DVD
or a USB flash drive (UFD).
Troubleshooting
If the DISM commands in this topic fail, try the following:
1. Make sure that you are using the Windows 10 version of DISM that is installed with the Windows ADK.
2. If you are using a Windows 8.1, Windows 8, or Windows 7 PC, use the Deployment and Imaging Tools
Environment to access the tools that are installed with the Windows 10 version of the Windows ADK.
3. Don’t mount images to protected folders, such as your User\Documents folder.
4. If DISM processes are interrupted, consider temporarily disconnecting from the network and disabling virus
protection.
5. If DISM processes are interrupted, consider running the commands from the Windows Preinstallation
Environment (WinPE) instead.
Related topics
DISM Image Management Command-Line Options
Service a Windows Image Using DISM
Apply Images Using DISM
7/13/2017 • 3 min to read • Edit Online
This topic describes how to deploy images captured from your reference computer to one or more destination
computers using the Deployment Image Servicing and Management (DISM) tool. For more information about
configuring recommended hard drive partitions, see Configure UEFI/GPT-Based Hard Drive Partitions and
Configure BIOS/MBR-Based Hard Drive Partitions.
select disk 0
clean
create partition primary size=3000 id=27
format quick fs=ntfs label="Recovery"
assign letter="R"
create partition primary size=300
format quick fs=ntfs label="System"
assign letter="S"
active
create partition primary
format quick fs=ntfs label="Windows"
assign letter="C"
exit
This example temporarily assigns these drive letters: Windows=C, System=S, and Recovery=R. If you’re
deploying to PCs with unformatted hard drives, change the Windows drive letter to a letter that’s near the
end of the alphabet, such as W, to avoid drive letter conflicts. Do not use X, because this drive letter is
reserved for Windows PE. After the PC reboots, the Windows partition is assigned the letter C, and the
other partitions don’t receive drive letters.
For examples of recommended partition structures, see Configure BIOS/MBR-Based Hard Drive Partitions
and Configure UEFI/GPT-Based Hard Drive Partitions.
Note
You can automate this task with the diskpart /s <script> command. For more information, see Diskpart
Command line syntax.
5. Use the DISM tool to apply images to your Windows partition.
For each partition that you apply an image to, run the DISM /apply-image /imageFile: <image_file>
/index:<index_number> /ApplyDir:<image_path> command.
Note If the DISM /Apply-Image command fails, make sure you’re using a supported version of DISM for
that Windows image. For example, to apply a Windows 10 image, you’ll need the Windows 10 version of
DISM.
6. To set up a basic system partition, you can use the BCDboot tool to copy a simple set of system files to a
system partition. These files include boot configuration data (BCD) information that is used to start
Windows:
Use the BCDboot tool to copy common system partition files and to initialize boot configuration data:
For more information about the BCDboot tool, see BCDboot Command-Line Options.
Note
You can also set up the system partition by applying an image. Use the DISM /apply-image command.
For example:
Dism /apply-image /imagefile:N:\Images\my-system-partition.wim /index:1 /ApplyDir:S:\
You can set up the computer to reinstall your Windows image in the event of a system failure. For more
information, see Windows Recovery Environment (Windows RE) Technical Reference.
Important
Microsoft Reserved partitions (MSR) and Extended partitions are managed by the computer. Do not apply an
image to these partitions.
You can use audit mode to test the computer and to perform additional customizations before you ship it to your
end user. For more information, see Boot Windows to Audit Mode or OOBE.
You can also perform some customizations to the computer without booting it. For more information, see Service
an Applied Windows Image.
Note
If you receive the error message: Bootmgr not found. Press CTRL+ALT+DEL, this indicates that Windows
cannot identify the boot information in the active partition. If you receive this error message, check the following:
Use the DiskPart tool to check to make sure that the system partition is set to Active.
Check to make sure that the active partition includes system files.
Related topics
Capture Images of Hard Disk Partitions Using DISM
Boot Windows to Audit Mode or OOBE
DISM Image Management Command-Line Options
Applying Images using a script
Split a Windows image file (.wim) to span across
multiple DVDs
2/6/2018 • 2 min to read • Edit Online
Split a Windows image (.wim) file into a set of smaller (.swm) files.
Use this procedure when you're installing Windows from media that can't handle the Windows image file size, for
example:
DVDs (A standard single-sided DVD stores 4.7GB).
USB keys formatted as FAT32. FAT32 is required to boot many modern (UEFI-based) PCs, but has a
maximum file size of 4GB. (Workaround: Create a USB key with multiple partitions.)
Limitations:
You can’t modify a set of split image (.swm) files.
Applying split image (.swm) files is only supported when all of the .swm files are in the same folder. This means
for DVD deployment, you'll need to copy the files over to the destination PC before you can use Windows Setup
or DISM /Apply-Image, as shown in this topic.
where:
C:\sources\install.wim is the name and the location of the image file that you want to split.
C:\sources\install.swm is the destination name and the location for the split .swm files. The first split
.swm file is named install.swm file. The file names for the next files include numbers, for example,
install2.swm file, install3.swm file, and so on.
4700 is the maximum size in MB for each of the split .swm files to be created.
USB deployment
Store all of the .swm files in the same folder on the USB key.
For Windows Setup instructions, see the Troubleshooting section from Install Windows from a USB flash drive.
DVD deployment
1. Copy the files to individual DVDs. For example, insert the first DVD and type:
md C:\TempInstallFolder
copy d:\install.swm c:\TempInstallFolder\*
D:\Setup.exe /InstallFrom:"C:\TempInstallFolder\install.swm"
Use a script
a. Apply your image using the DISM /Apply-Image /SWMFile option:
b. Set up your system and recovery partitions, as shown in Deploy Windows using a Script.
6. Clean up: remove the temporary folder
rd c:\TempInstallFolder /s /q
Related topics
Capture and Apply Windows, System, and Recovery Partitions
WinPE: Use a single USB key for WinPE and a WIM file (.wim)
Install Windows from a USB flash drive
DISM Image Management Command-Line Options
Create a WIM for Multiple Architecture Types Using
DISM
7/13/2017 • 2 min to read • Edit Online
When you plan your deployment scenarios, consider how you will deploy and maintain your images for different
architecture types. There are several ways you can manage multiple Windows images for multiple architecture
types. Because you can deploy both 32-bit and 64-bit Windows images from a 32-bit preinstallation environment,
you can maintain 32-bit and 64-bit Windows images in the same Windows image (.wim) file or separate .wim files.
Because you can store multiple Windows images in a single .wim file, you can create architecture-specific .wim files
or a single .wim file that contains images for multiple architecture types.
32-bit images only
You can create a .wim file that contains Windows images for a single architecture type. In this scenario, you
build a .wim file that contains one or more Windows images for 32-bit systems only. You create separate
.wim files for different architecture types.
64-bit images only
You can create a .wim file that contains one or more of the 64-bit Windows images that you deploy.
32-bit and 64-bit images
You can create a.wim file that contains multiple Windows editions for multiple architecture types. For
example, you can create a Windows image that contains two versions of Windows, one for 32-bit
architectures, and one for 64-bit architectures.
Note
It is important to add the name of the Windows image to indicate that it is for 64-bit computers only.
The 64-bit Windows image and all accompanying metadata are copied to the Install.wim file to a new index during
the export process. When you have added all Windows images to the Install.wim file, your Windows distribution is
ready to be used in your environment.
During attended installations, users will be prompted to select which architecture-specific Windows image to install
(x86 or x64 images).
In unattended installations, if you store multiple Windows editions for multiple architecture types in a single .wim
file, you must explicitly specify which image to install during Windows Setup with the MetaData setting.
Related topics
DISM Image Management Command-Line Options
Windows Setup Supported Platforms and Cross-Platform Deployments
Append, apply, and export volume images with a
Windows Image (.wim) file
7/13/2017 • 1 min to read • Edit Online
Manage multiple Windows images by combining them into a single .wim file. A single .wim file can take a fraction
of the drive space that multiple .wim files can take.
When you combine two or more Windows image files into a single .wim, any files that are duplicated between the
images are only stored once.
Run these commands using DISM from a command prompt with administrator privileges.
Related topics
Capture Images of Hard Disk Partitions Using DISM
DISM Image Management Command-Line Options
Create a Data Image Using DISM
12/18/2017 • 2 min to read • Edit Online
To add applications, files, and other resources to Windows during an installation, you can create a data image. By
using the Deployment Image Servicing and Management (DISM) tool, you can create additional Windows image
(.wim) files that contain only files and applications that you intend to copy to the Windows installation.
Data images enable you to add:
Applications, files, scripts, and other resources to Windows during an installation.
Files, resources, and other data to a partition other than the operating system partition.
Note
Data images must be used only to add new files to a Windows installation. Do not use data images to replace
existing Windows files. Overwriting operating system data is unsupported.
Previous methods of transferring data to a Windows installation required the use of $OEM$ folders. These folder
structures are still supported, but data images provide an easier and more efficient means of transferring additional
data to Windows.
In unattended installations, the Windows image to install is specified by the OSImage setting in the Microsoft-
Windows-Setup component. You can add one or more DataImage settings in the Microsoft-Windows-Setup
component that represent additional data images that you add to the system. For more information, see the
Windows Unattended Setup Reference.
To create a data image
1. Locate the data that you will create a data image for.
2. Open a command prompt as an administrator, or boot the computer to Windows PE to open the Windows
PE command prompt.
3. Use DISM to compress your data files to a .wim file. For example:
In this example, everything under the C:\Data\DataFiles directory is added to the .wim file and the .wim file is
given the label "MyData". All files and folders under C:\Data\DataFiles are extracted to the root of the drive
specified in the answer file.
For more information about how to use DISM, see DISM Image Management Command-Line Options.
4. Copy the data image to an available location such as another partition or a network share during Windows
Setup.
To add a data image path to an answer file
1. Use Windows System Image Manager (Windows SIM) to create an answer file that contains the path to the
data image to install and the location for the installation.
2. Add the Microsoft-Windows-Setup\ DataImage settings to the appropriate configuration pass for your
environment. For example: windowsPE .
3. Save the answer file and close Windows SIM.
The answer file must resemble the following example:
<settings pass="windowsPE">
<component name="Microsoft-Windows-Setup" processorArchitecture="x86"
publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ImageInstall>
<DataImage wcm:action="add">
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>1</PartitionID>
</InstallTo>
<InstallFrom>
<Credentials>
<Domain>Fabrikam</Domain>
<Username>MyUsername</Username>
<Password>MyPassword</Password>
</Credentials>
<Path>\\networkshare\share\MyData.wim</Path>
</InstallFrom>
<Order>1</Order>
</DataImage>
</ImageInstall>
</component>
</settings>
NOTE
If you're specifying a local folder in path , see Path in the Unattended Windows Setup Reference to learn about using
relative or absolute paths.
4. Run Setup.exe, specifying the location of the answer file. For example:
setup /unattend:C:\unattend.xml
All the files and folders specified in the data image are extracted to the root of the drive during installation.
Executable files and scripts are not run when the data image is applied; they are only copied to the drive. You can
use FirstLogonCommands to specify commands to run the first time a user logs on to the computer. For more
information about FirstLogonCommands , see the Windows Unattended Setup Reference.
Take Inventory of an Image or Component Using
DISM
7/13/2017 • 23 min to read • Edit Online
You can take an inventory of what drivers, packages, and other files and settings are included in a Windows image.
To do so, use Deployment Image Servicing and Management (DISM) servicing commands.
You must mount an offline image from a WIM or VHD file before you can take inventory of or service a specific
Windows image. For more information, see Mount and Modify a Windows Image Using DISM.
In this section:
Get Windows Image Information
Get Windows PE Information
Get Driver Information
Get Package and Feature Information
Get App Package (.appx) Servicing Information
Get International Settings and Languages
Get Windows Edition Information
Get Application Patch Information
When used with the /Index or /Name options, more detailed information about the specified image is
displayed. To specify the image in a VHD file, you must use /Index:1 .
The report that is generated includes the following information.
Dism /Get-MountedImageInfo
Original File Name The original .inf file name of the Toaster.inf
driver package.
Exclude IDs PnP IDs that will not match the A_123
device, any apply.
Note
If you point to a driver that is not yet installed, the report will be slightly different.
Release Type The type of package that it is. Such Feature Pack
as:
Feature Pack. A Windows
operating system feature.
Language Pack. A Windows
operating system Language pack or
Language Interface Pack (LIP).
Foundation. Core operating
system components including
optional features.
Install Time The UTC date and time when the 8/18/2008 7:58:00 PM
installation occurred. If the package
is not installed yet, the Install Time
field is left blank.
To list information about a specific package
1. Click Start, and type deployment. Right-click Deployment and Imaging Tools Environment and then
select Run as administrator.
2. To list information about a specific package in the offline Windows image, type one of the following
commands:
Creation Time The date and time the package was 8/18/2008 7:58:00 PM
created, if available.
Install Client The client tool that installed the DISM Package Manager Provider
package.
Install Time The date and time the package was 8/18/2008 7:58:00 PM
installed. If the package is not
installed yet, the Install Time field
is left blank.
Last Update Time The date the package was last 8/18/2008 7:58:00 PM
updated, if available.
Release Type The type of package that it is. Such Feature Pack
as:
Feature Pack. A Windows
operating system feature.
Language Pack. A Windows
operating system Language pack or
Language Interface Pack (LIP).
Foundation. Core operating
system components including
optional features.
Features listing for package A list of the features found in the Microsoft-Windows-NetFx3-OC-
package. Package~31bf3856ad364e35~x
86~en-US~6.1.6772.0 (No
If there is no feature in the package, features found for this package)
the package identity will be
displayed followed by (No features
found for this package).
Default timezone The time zone that is currently set Pacific Standard Time
as the default.
User locale for default user The "standards and formats" en-US
language (also referred to as user
locale) that is set for the default
user.
Distribution languages A list of the languages that are The default language in the
available in the distribution share. distribution is: ja-JP
The other available languages in
Note the distribution are: bg-BG, nl-NL
This list includes the name of the
folder in the distribution share.
The language of the actual
LP.cab file in the folder is not
validated. For example, if the
path to the distribution is …
\Langpacks\bg-BG\Lp.cab, the
value of bg-BG will be reported
as the language in the
distribution share even if the
LP.cab file is not the correct .cab
file for bg-BG.
Keyboard layered driver A list of the keyboard drivers for Japanese Keyboard (106/109 Key)
Japanese or Korean keyboards, if
any are installed.
Patch Name The registered display name for the QFE9 - Non Removable
patch. For patches that do not
include the DisplayName property
in the MsiPatchMetadata table, the
returned display name is an empty
string.
Patch Name The registered display name for the QFE9 - Non Removable
patch. For patches that do not
include the DisplayName property
in the MsiPatchMetadata table, the
returned display name is an empty
string.
The report generated lists the product code and product name for applications that are installed in the offline
image. For example:
Product Code : {DB935363-5A68-47AF-A55A-CFC90F2E83BC}
Product Name : MsiTestApplication2
To list information about a specific Windows Installer application
1. Click Start, and type deployment. Right-click Deployment and Imaging Tools Environment and then
select Run as administrator.
2. To list information about the MSP patches, type the following command:
Dism /image:C:\test\offline /Get-AppInfo /ProductCode:{B0F9497C-GUID-GUID-GUID-74D866BBDF59}
Related topics
Service a Windows Image Using DISM
Service a Windows PE Image with DISM
Deployment Image Servicing and Management (DISM) Best Practices
Service a Windows Image Using DISM
10/26/2017 • 2 min to read • Edit Online
The Deployment Image Servicing and Management (DISM) tool lets users enumerate drivers and packages,
modify configuration settings, add and remove drivers without using an unattended answer file, and more. You
can use DISM offline on a WIM or VHD file, or online on a running operating system.
Offline servicing allows you to modify or service a Windows® image entirely offline, without booting it first. This
can reduce deployment costs because you can customize images to a degree before the operating system is
deployed to the computer. In addition, if you have a stored master image that you want to make sure is always
up to date, you can maintain it without booting the image.
You can also use DISM to service an image online. If you have to boot the operating system to install an
application or test and validate the installation, you can boot to audit mode and add drivers and packages, or
enable features and international settings.
In This Section
Add and Remove Drivers to an Offline Windows Image Add or remove drivers from an offline image using either
DISM or an unattended answer file.
Enable or Disable Windows Features Using DISM Enable or disable features in a Windows image using
DISM. You can also remove a feature to install on-
demand, and restore a previously removed feature.
Add or Remove Packages Offline Using DISM Add or remove packages from an offline image using
either DISM or an unattended answer file.
Add and Remove Language Packs Offline Using DISM Add or remove language packs and configure
international settings in an offline image using DISM.
Sideload Apps with DISM Install line-of-business (LOB) Microsoft Store apps to a
Windows image by using Windows PowerShell® or the
Deployment Image Servicing and Management (DISM)
platform.
Customize the Start Screen Customize the Start screen to include Microsoft Store
apps and desktop apps that you use in your business.
Change the Windows Image to a Higher Edition Using Query an image to determine which edition of Windows
DISM the image is, and how to change the image to a higher
edition of Windows.
Export or Import Default Application Associations Change the default programs associated with a file name
extension or protocol in a Windows image.
Service a Mounted Windows Image Use DISM to mount an image and modify it.
Service an Applied Windows Image Use DISM to apply an image and then modify it.
Related topics
Understanding Servicing Strategies
Take Inventory of an Image or Component Using DISM
Add and Remove Drivers to an Offline Windows
Image
10/26/2017 • 5 min to read • Edit Online
You can use the Deployment Image Servicing and Management (DISM) tool to install or remove driver (.inf) files
in an offline Windows image. You can either apply an unattended answer file to a mounted .wim, .vhd, or .vhdx
file, or you can add or remove the drivers directly by using the command prompt.
When you use DISM to install a device driver to an offline image, the device driver is added to the driver store in
the offline image. When the image is booted, Plug and Play (PnP) runs and associates the drivers in the store to
the corresponding devices on the computer.
Note To add drivers to a Windows 10 image offline, you must use a technician computer running Windows 10,
Windows Server 2016, or Windows Preinstallation Environment (WinPE) for Windows 10. Driver signature
verification may fail when you add a driver to a Windows 10 image offline from a technician computer running
any other operating system.
An index or name value is required for most operations that specify a WIM file. For a VHD file, you must
specify /Index:1 .
2. Mount the offline Windows image. For example, type:
To install all of the drivers from a folder and all its subfolders, point to the folder and use the /Recurse
option.
Warning While /Recurse can be handy, it's easy to bloat your image with it. Some driver packages include
multiple .inf driver packages, which often share payload files from the same folder. During installation,
each .inf driver package is expanded into a separate folder, each with a copy of the payload files. We've
seen cases where a popular driver in a 900MB folder added 10GB to images when added with the /Recurse
option.
To install an unsigned driver, use /ForceUnsigned to override the requirement that drivers installed on
X64-based computers must have a digital signature.
4. Review the list of third-party driver (.inf) files in the Windows image. Drivers added to the Windows image
are named Oem*.inf. This is to guarantee unique naming for new drivers added to the computer. For
example, the files MyDriver1.inf and MyDriver2.inf are renamed Oem0.inf and Oem1.inf.
An index or name value is required for most operations that specify a WIM file. For a VHD file, you must
specify /Index:1 .
2. Mount the offline Windows image. For example:
3. Remove a specific driver from the image. Multiple drivers can be removed on one command line.
Warning
Removing a boot-critical driver package can make the offline Windows image unbootable. For more
information, see DISM Driver Servicing Command-Line Options.
4. Commit the changes and unmount the image.
8. Mount the Windows image that you intend to install the drivers to by using DISM. For example, type:
An index or name value is required for most operations that specify a WIM file. For a VHD file, you must
specify /Index:1 .
9. Use DISM to apply the answer file to the mounted Windows image. For example, type:
For more information about how to apply an answer file, see DISM Unattended Servicing Command-Line
Options.
The .inf files referenced in the path in the answer file are added to the Windows image.
10. Review the list of third-party driver (.inf) files in the Windows image. Drivers added to the Windows image
are named Oem*.inf. This is to guarantee that all new drivers that are added to the computer are uniquely
named. For example, the files MyDriver1.inf and MyDriver2.inf are renamed Oem0.inf and Oem1.inf.
For example, type:
11. Unmount the .wim file and commit the changes. For example, type:
If you need drivers for WinPE to see the local hard disk drive or a network, you must use the windowsPE
configuration pass of an answer file to add drivers to the WinPE driver store and to reflect boot-critical drivers
required by WinPE. For more information, see Add Device Drivers to Windows During Windows Setup.
Related topics
Device Drivers and Deployment Overview
Add Device Drivers to Windows During Windows Setup
DISM - Deployment Image Servicing and Management Technical Reference for Windows
Enable or Disable Windows Features Using DISM
7/13/2017 • 5 min to read • Edit Online
The Deployment Image Servicing and Management (DISM) tool is a command-line tool that is used to modify
Windows® images. You can use DISM to enable or disable Windows features directly from the command prompt,
or by applying an answer file to the image. You can enable or disable Windows features offline on a WIM or VHD
file, or online on a running operating system.
To service an offline image, specify the location of the mounted image directory. For example, type:
You can use >featurelist.txt to redirect the output of the command to a text file that is named featurelist.
2. Review the list of features to find the feature that you want to enable, disable, remove, or restore.
3. Use /Get-FeatureInfo to list information about the specific feature you are interested in. For example, type:
To service an offline image, specify the location of the mounted image directory. For example, type:
2. Optional: Get the status of the feature you have enabled. For example, type:
If the status is Enble Pending, you must boot the image in order to enable the feature entirely.
To service an offline image, specify the location of the mounted image directory. For example, type:
Dism /Image:C:\test\offline /Enable-Feature /FeatureName:TFTP /Source:C:\test\mount\windows
2. Optional: Get the status of the feature you have enabled. For example, type:
If the status is EnablePending, you must boot the image in order to enable the feature entirely.
To service an offline image, specify the location of the mounted image directory. For example, type:
2. Optional: Use DISM /GetFeatureInfo to get the status of the feature you have disabled. For example, type:
If the status is DisablePending, you must boot the image in order to disable the feature entirely.
To service an offline image, specify the location of the mounted image directory. For example, type:
2. Optional: Use DISM /GetFeatureInfo to get the status of the feature you have disabled. For example, type:
The status is Disabled. Beginning with Windows 10, the payload is not removed from Windows client SKUs
in order to support push-button reset. The payload is removed from Windows Server SKUs.
To service an offline image, specify the location of the mounted image directory. For example, type:
Related topics
DISM - Deployment Image Servicing and Management Technical Reference for Windows
DISM Operating System Package Servicing Command-Line Options
DISM Unattended Servicing Command-Line Options
Configure a Windows Repair Source
Add or Remove Packages Offline Using DISM
7/13/2017 • 3 min to read • Edit Online
Deployment Image Servicing and Management (DISM.exe) is a command-line tool that is used to update offline
Windows® images. There are two ways to install or remove packages offline with DISM. You can either apply an
unattend answer file to the offline image, or you can add or remove the package directly from the command
prompt.
If you are installing multiple packages to a Windows image, and there are dependency requirements, the best way
to ensure the correct order of the installation is by using an answer file. You can use DISM to apply the
Unattend.xml answer file to the image. When you use DISM to apply an answer file, the unattend settings in the
offlineServicing configuration pass are applied to the Windows image.
You must install the latest version of the Windows Assessment and Deployment Kit (Windows ADK), which
contains all of the tools that are required, including DISM.
An index or name value is required for most operations that specify an image file.
2. Type the following command to mount the offline Windows image.
3. At a command prompt, type the following command to add a specific package to the image. You can add
multiple packages on one command line. They will be installed in the order listed in the command line.
4. At a command prompt, type the following command to commit the changes and unmount the image.
An index or name value is required for most operations that specify an image file.
2. Type the following command to mount the offline Windows image.
3. Optional: Type the following command to list the packages in the image.
You can use >featurelist.txt to redirect the output of the command to a text file that is named FeatureList.
4. Review the list of packages that are available in your mounted image and note the package identity of the
package.
5. At a command prompt, specify the package identity to remove it from the image. You can remove multiple
packages on one command line.
You can use the /PackagePath option to point to the original source of the package, or to specify the path
to the .cab file, or you can use the /PackageName option to specify the package by name as it is listed in
the image. For more information, see DISM Operating System Package Servicing Command-Line Options.
6. At a command prompt, type the following command to commit the changes and unmount the image.
8. At a command prompt, type the following command to commit the changes and unmount the image.
For more information about Windows SIM, see Windows Setup Technical Reference.
Related topics
DISM - Deployment Image Servicing and Management Technical Reference for Windows
DISM Operating System Package Servicing Command-Line Options
DISM Unattended Servicing Command-Line Options
Add and Remove Language Packs Offline Using
DISM
7/13/2017 • 8 min to read • Edit Online
All installations of Windows contain at least one language pack and the language-neutral binaries that make up
the core operating system. This topic includes information about how to use Deployment Image Servicing and
Management (DISM.exe) to add or remove additional language packs, and to configure international settings. You
can use the same procedures to add or remove Language Interface Packs (LIPs). For more information about the
difference between a language pack and a LIP, see Add Language Packs to Windows.
The Windows image must be a recently installed and captured image, or the default retail image. This ensures that
the Windows image does not have any pending package actions. The Windows images can be in any language.
For example, you can start with an English (en-US) image and add support for Japanese (ja-JP) and Korean (ko-
KR). In addition, you can add LIPs to a Windows image that contains the supported parent language. For more
information about the supported language packs and LIPs, see Language Packs.
For information about how to add a language pack to a Windows Preinstallation Environment (Windows PE)
image, see WinPE: Add packages (Optional Components Reference).
Dism /Get-MountedImageInfo
If your image is not mounted, type the following command to retrieve the name or index number for the
image that you want to modify.
An index or name value is required for most operations that specify an image file. Type the following
command to mount the image.
4. Type the following command to add a language pack to the mounted offline image. You can add multiple
packages on one command line.
Note
The scratch directory must be at least 1 GB for adding language packs.
5. Type the following command to commit the changes. The image remains mounted until the /unmount
option is used.
6. The language packs are added to the Windows image. The next step is to Configure International Settings.
To add a language pack using an answer file and DISM
1. Note the location of the language packs you want to add to the Windows image. Language packs are
stored in .cab files.
2. Use Windows SIM to create an answer file that contains only the language packs that you want to add. For
more information about how to create an answer file, see Create or Open an Answer File.
3. In the Package node, under Language Packs, right-click the language pack that you want to add, and
then select Add to Answer File.
4. In the Properties pane, under Settings, select the Install value for the Action setting.
5. You can also configure international settings in the answer file. For more information, see Configure
International Settings in Windows.
6. Validate and save the answer file.
7. Close Windows SIM.
Important
Make sure that the language pack is copied to the location specified in the answer file.
8. If the image is not already mounted, use DISM to mount the Windows image. For example,
9. Use DISM to apply the unattended installation answer file to the mounted Windows image. For example,
For more information about how to apply an unattended answer file by using DISM, see DISM Unattended
Servicing Command-Line Options.
10. The language packs are added to the Windows image, and international settings are configured.
An index or name value is required for most operations that specify an image file.
4. Type the following command to mount the offline Windows image.
5. Optional: Type the following command to list the languages in the offline image.
6. Type the following command to remove a language pack from the image. You can remove multiple .cab
files by using one command-line statement.
Dism /Image:C:\test\offline /Remove-Package /PackagePath:C:\packages\package1.cab
/PackagePath:C:\packages\package2.cab ...
7. Type the following command to commit the changes. The image remains mounted until the /unmount
option is used.
8. The language packs are removed from your image. The next step is to add a language pack to the mounted
offline image. To continue, see Add a Language Pack to a Windows Image.
To remove a language pack using DISM and an unattended answer file
1. Use Windows® System Image Manager (Windows SIM) to create an answer file that contains only the
language packs that you want to remove. Open the Windows image by using Windows SIM and create a
new answer file. For more information about how to use Windows SIM, see Create or Open an Answer File.
2. In the Package node, under Language Packs, right-click the language pack that you want to remove and
select Add to Answer File.
3. In the Properties pane, under Settings, select the Remove value for the Action setting.
4. Save the answer file and close Windows SIM. The answer file must resemble the following example.
<package action="remove">
<assemblyIdentity name="Microsoft-Windows-LanguagePack-Package" version="6.0.5714.0"
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="en-US" />
</package>
6. Use DISM to apply the unattended answer file to the mounted Windows image. For example,
For more information about how to use DISM to apply an unattended answer file, see DISM Unattended
Servicing Command-Line Options.
7. Type the following command to commit the changes. The image remains mounted until the /unmount
option is used.
8. The language packs are removed from your image. The next step is to add a language pack to the mounted
offline image. To continue, see Add a Language Pack to a Windows Image.
2. To change all international language settings in the mounted offline image to match the default values set
by Microsoft for a given language, at the DISM command prompt, type the following command,
Note
The /Set-SKUIntlDefaults option does not change the keyboard driver for Japanese and Korean
keyboards. You must use the /Set-LayeredDriver option to change this. For more information, see DISM
Languages and International Servicing Command-Line Options.
For more information about default values, see [Windows Language Pack Default Values](windows-language-pack-
default-values.md).
Optionally, you can configure different values for different settings, including UI language, system locale,
user locale, input locale, and others. For more information about how to specify individual values for each
of these settings, see [DISM Languages and International Servicing Command-Line Options](dism-languages-and-
international-servicing-command-line-options.md).
1. At a command prompt, type the following command to commit the changes and unmount the image.
Related topics
Add Language Packs to Windows
Service a Windows Image Using DISM
DISM - Deployment Image Servicing and Management Technical Reference for Windows
DISM Languages and International Servicing Command-Line Options
DISM Unattended Servicing Command-Line Options
Windows System Image Manager Technical Reference
Sideload Apps with DISM
10/26/2017 • 15 min to read • Edit Online
You can sideload line-of-business (LOB) Windows apps to a Windows 10 by using PowerShell or Deployment
Image Servicing and Management (DISM). Windows apps include:
Universal Windows apps devices: Windows apps built upon the Universal Windows app platform, targeting the
universal device family.
Universal Windows 8 apps: Windows apps that target Windows 8.x.
Typically, Windows apps are available only through the Microsoft Store. You can submit LOB Windows apps to the
Microsoft Store and make them available outside of your enterprise. However, you can also develop Windows
apps for use only within your enterprise and add them to Windows devices you manage through a process we call
sideloading. Sideloaded apps do not have to be certified by or installed through the Microsoft Store.
Here’s what you’ll need to know in order to sideload apps:
Understand Sideloading Concepts Introduces some basic concepts you’ll need to know
about sideloading apps.
Configure PCs for Sideloading Requirements Shows the requirements to be met in order to sideload
apps on devices running different Windows Editions.
Includes how to use Group Policy to configure your
enterprise PCs for sideloading apps.
Configure PCs for Developing Microsoft Store Apps Shows you how to configure your PC to have a developer
license that does not expire. The PC can be used to
develop Microsoft Store apps or enterprise apps that will
be added to your enterprise devices.
Add Apps Shows you how to sideload apps that you develop.
Add Multiple Languages for Apps Shows you how to prepare a multi-lingual image, sign-in
to the image, install any desired app resource packs
(including language) and then use Copy Profile to capture
the image.
Inventory Apps Shows you how to list the LOB apps installed on the
devices in your enterprise or in an offline Windows image.
Where <sideloading product key> is the 25 digit key to enable sideloading on the computer.
2. Activate the sideloading key by typing:
Note
The activation GUID is not the same as the sideloading product key. The activation GUID will always be
ec67814b-30e6-4a50-bf7b-d55daf729d1e.
For more information about sideloading product keys, see the Windows 8 Licensing Guide.
Add Apps
There are two ways to add apps. A user can add an app package, which will make the app available to just that
user. Or the app can be installed in the Windows image, which will make the app available to every user of the
Windows image at first logon or at the next logon, if the user account is already created. This second case is
referred to as provisioning an app package.
Add an App Package
You can install an app package (.appx or .appxbundle) on a per-user basis by using the add-appxpackage
PowerShell cmdlet. There is no limit to the number of LOB apps you can add for each user.
Add a LOB app to a user account
At the Windows PowerShell prompt on a Windows 8 or Windows Server 2012 computer, add an .appx (or
.appxbundle) file package. Include any required dependency app packages when you add the app. For
example, type:
For more information, see DISM App Package (.appx or .appxbundle) Servicing Command-Line Options or
DISM Cmdlets. For information about DISM supported platforms, see DISM Supported Platforms.
Note
The computer does not have to be joined to a domain or have an activated sideloading product key before you
install provisioned LOB apps. However, the apps will not run until the computer meets this sideloading
requirement. For more information, see Customize the Start Screen.
Update a provisioned LOB app once it is has been added to a Windows image
On Windows 8, to update a provisioned app, you must first remove the provisioned app and then deploy the new
version of the app. The update will then be applied the next time each user logs in.
On Windows 8.1 and newer, to update a provisioned app, you will need to update the app for each user that has
signed on to the Windows image provisioned with the app:
Update a provisioned LOB app to a Windows image
1. Use the PowerShell to update the LOB app without a Microsoft Store license. This must be done for each
user that has signed in to the PC running the Windows image. For example, if you have installed the original
version of the app, 1.0.0.0, that now needs to be updated to version 1.0.0.1, then at a PowerShell session,
type:
Get-AppxPackage | Out-GridView
Note
See Change the language used in apps for information about setting the language and installing updates
from the Microsoft Store.
2. Sign-in to a local administrator user account from OOBE on clean image.
Important
When adding a specific language to a Windows app, you would also want to Add Language Packs to
Windows for the same languages as you did for the Windows app.
3. Add the desired languages to the current user’s language preference list.
4. Install app updates using a Microsoft Store account (MSA account)
a. Sign-in to the Microsoft Store with an MSA account.
Note
Microsoft Store only. Don’t convert the local account to MSA.
If you do not have an MSA account, you can update apps without a Microsoft Store account.
b. Check for updates and install new language resource packs.
c. Sign out of the Microsoft Store and remove the MSA account.
5. Open an elevated command prompt and type:
Inventory Apps
You can list the LOB apps installed in on offline or online Windows image and get additional information about the
packages.
List LOB Apps per user account
1. You can get a list of the Windows apps installed for a specific user account on the computer. You must open
PowerShell with administrator privileges to list the packages for a user other than the current user. For
example, at the PowerShell prompt, type:
Get-AppxPackage -AllUsers
2. You can get a list of packages installed for a specific user. You must open PowerShell with administrator
privileges to list the packages for a user other than the current user. For example, at the PowerShell prompt,
type:
3. You can also get the manifest of an app package (.appx) which includes information such as the package ID.
For example, at the PowerShell prompt, type:
4. You can use the pipeline to get the manifest for an app package (.appx) if you don’t know the full name of
the package. For example, at the PowerShell prompt, type:
For more information, see Take Inventory of an Image or Component Using DISM.
Remove Apps
You can remove individual instances of an app, or remove the provisioning setting of an app.
Remove LOB apps per user account
You can remove a single app for the current user only. For example, at a command prompt, type:
Remove-AppxPackage Package1
Related topics
App Installation Cmdlets in Windows PowerShell
DISM App Package (.appx or .appxbundle) Servicing Command-Line Options
App Packaging Tools
AppX Module Cmdlets
Change the language used in apps
DISM Cmdlets
DISM Supported Platforms
Enterprise guide to installing Universal Windows 8 apps on Windows Embedded 8 Industry
Get a Developer License
Group Policy for Beginners
Group Policy Techcenter
Customize the Start Screen
Managing Client Access to the Microsoft Store
Microsoft Volume Licensing
Remote Server Administration Tools for Windows 8.1
What is a Microsoft Store App?
Windows 8 Licensing Guide
Preinstall Apps Using DISM
10/26/2017 • 10 min to read • Edit Online
Interested in preinstalling Microsoft Store apps, but you aren’t an OEM? For information about sideloading apps for
organizations, see Sideload Apps with DISM.
To pre-install Microsoft Store apps in your images, you’ll need to use the Windows Assessment and Deployment Kit
(Windows ADK). This section explains the steps involved in preinstalling apps as part of your images.
3. Add the app to the mounted image. Use the /PackagePath option and the /DependencyPackagePath option
to specify the location of the folder containing all of the unpacked files and the dependency files from the
Microsoft Store package. /PackagePath should specify the root folder for the extracted folders. The root
folder contains the license.xml, AUMIDs.txt, and all of the package files. At the command prompt, type:
4. Save changes and unmount the image. At the command prompt, type:
Dism /Unmount-Image /mountdir:c:\test\offline /commit
3. Use the Add-AppxProvisionedPackage cmdlet in Windows PowerShell to preinstall the app. Use the
/PackagePath option and the /DependencyPackagePath option to specify the location of the folder
containing all of the unpacked files and the dependency files from the Microsoft Store package. In Windows
PowerShell, type:
4. Save changes and dismount the image. At the Windows PowerShell prompt, type:
Note Microsoft Store apps don't run in audit mode. To test your deployment, run Windows and create a new user
profile. For more information about audit mode, see Understanding Audit mode in the TechNet library.
Important If you are preinstalling a mobile broadband device app, you must insert the SIM card in the PC before
you run the specialize phase of Sysprep. For more information about preinstalling a mobile broadband device app,
see Preinstall the Necessary Components for a Mobile Broadband Application Experience.
3. Find the full package name of the app that you want to remove. At the command prompt, type:
4. Remove the app from the mounted image. For example, at the command prompt, type:
Dism /Image:c:\test\offline /Remove-ProvisionedAppxPackage
/PackageName:microsoft.devx.appx.app1_1.0.0.0_neutral_en-us_ac4zc6fex2zjp
Note If the app isn't registered to a user profile in the image—for example if the image is generalized and
hasn't been deployed—it's removed from the image. If the Windows image has been booted and a user
profile has been created, the provisioned app is registered for that user and must be removed by using the
Remove-AppxPackage cmdlets after you remove the provisioning for the app.
5. If you want to update the app, you can preinstall the updated version of the Microsoft Store-signed app. At a
command prompt, type:
6. Save changes and unmount the image. At the command prompt, type:
3. Find the full package name of the app you want to remove. At the Windows PowerShell prompt, type:
4. Use the Add-AppxProvisionedPackage cmdlet in Windows PowerShell to remove the app. In Windows
PowerShell, type:
Note If the app isn't registered to a user profile in the image—for example if the image is generalized and hasn't
been deployed—it's removed from the image. If the Windows image has been booted and a user profile has been
created, the provisioned app is registered for that user and must be removed by using the Remove-AppxPackage
cmdlets after you remove the provisioning for the app.
1. If you want to update the app, you can preinstall the updated version of the Microsoft Store-signed app. At
the Windows PowerShell prompt, type:
2. Save changes and dismount the image. At the Windows PowerShell prompt, type:
If a custom data file already exists in the data store for an app—for example, if the package has already been added
to the image—the existing file is overwritten. If the installation fails, the file isn't restored.
Note
You can release updates to an app through the Microsoft Store without losing the custom data file. However, if a
user deletes the app, the custom data file is no longer available, even if the user reinstalls the app.
Test custom data for preinstalled apps
Apps that are preinstalled on a PC can access custom data specific to the installation. This custom data is added to
the app during preinstallation and becomes available to the app at runtime. Custom data enables developers to
customize an app's features and functionality, including providing reporting capabilities.
The Custom.data file appears at the app's installed location. The name Custom.data is hard-coded and can't be
modified. Your app can check for the existence of this file to determine if the app was preinstalled on the PC. Here's
an example of how to access the Custom.data file.
Your Custom.data file can include any content and be in any format your app requires. The preinstallation process
simply makes it available to your app. Developers can supply the data file to the preinstallation partner, or you can
agree to a format that enables the partner to generate the content.
Test your custom data
When you're building and debugging your app in Microsoft Visual Studio, you can't access the Custom.data file
from the app's installed location because the app isn't preinstalled yet. You can simulate using your Custom.data
file by putting a test Custom.data file in the app itself, and then loading and testing the app local file. To do this,
modify the code sample from:
("microsoft.system.package.metadata\\Custom.data").then(function (file) {
to:
("Custom.data").then(function (file) {
After you have verified your file format and content, you can change the location of the Custom.data file to the final
location, as shown in the original example above.
To test your Custom.data file
1. Open the Deployment Tools Command Prompt, installed with the Windows ADK, with administrator privileges.
From the Start screen, type Deployment and Imaging Tools Environment, right-click the icon, and select
Run as Administrator.
2. Add the application with the custom data file:
b. Copy the metadata package files to the device metadata store of the mounted image. For
example, to copy the 0ECF2029-2C6A-41AE-9E0A-63FFC9EAD877.devicemetadata-ms
metadata package file to the device metadata store,
ProgramData\Microsoft\Windows\DeviceMetadataStore:
copy 0ECF2029-2C6A-41AE-9E0A-63FFC9EAD877.devicemetadata-ms
C:\test\offline\ProgramData\Microsoft\Windows\DeviceMetadataStore
For more info about offline image servicing, see DISM Overview.
For more info about service metadata, see Service metadata.
2. Add the Microsoft Store device app or mobile broadband app to the image.
dism /Image:<mounted folder> /Add-ProvisionedAppxPackage /FolderPath:<appxpackage path>
You can add your business apps to a Windows image and customize the Start screen to include them. You can
customize the Start screen for Windows 10 Enterprise, Windows Server 2016, or a domain-joined PC running
Windows 10 Pro.
Line-of-business (LOB) Microsoft Store apps do not have to be certified or installed through the Microsoft Store.
Adding apps that do not come from the Microsoft Store is called sideloading. Sideloaded apps must be signed
with a certificate that is chained to a trusted root certificate. For more information about sideloading Microsoft
Store apps, including requirements, see Sideload Apps with DISM.
To install Microsoft Store apps that are not part of your business line, you must use the Microsoft Store.
You can use settings in an unattended answer file to specify how the app tiles display on the Start screen. You
can’t remove tiles from the Start screen or label groups using unattend settings, but you can specify how tiles for
24 installed apps are displayed using the StartTiles settings. Each of the settings maps to a fixed position in the
Start screen templates, and these positions vary according to the destination PC's screen size, resolution, and DPI.
Each setting specifies whether the tile is a wide tile or a square tile for an app, or if it's a square tile for a desktop
app.
1. Get the AppID of your LOB apps.
To use the unattend settings, you need the specific AppID string that is associated with an installed app. You
can create this string by using the get-AppxPackage cmdlet in Windows PowerShell. The following example
shows how to get the AppID string to use in the unattend settings for every app that is already installed on
the computer:
$installedapps = get-AppxPackage
foreach ($app in $installedapps)
{
foreach ($id in (Get-AppxPackageManifest $app).package.applications.application.id)
{
$app.packagefamilyname + "!" + $id
}
}
Related topics
Sideload Apps with DISM
Mount and Modify a Windows Image Using DISM
Deployment Imaging Servicing Management (DISM) Cmdlets in Windows PowerShell
Change the Windows Image to a Higher Edition
Using DISM
7/13/2017 • 2 min to read • Edit Online
You can use the Windows® edition-servicing commands to change one edition of Windows to a higher edition of
Windows. The edition packages for each potential target edition are staged in the Windows image. This is referred
to as an edition-family image. You can use the command-line options to list potential target editions. Because the
target editions are staged, you can service a single image, and the updates will be applied appropriately to each
edition in the image.
You need a product key to change the Windows edition online. Offline changes do not require a product key. If you
change the image to a higher edition using offline servicing, you can add the product key by using one of the
following methods:
Enter the product key during the out-of-box experience (OOBE).
Use an unattended answer file to enter the product key during the specialize configuration pass.
Use Deployment Image Servicing and Management (DISM) and the Windows edition-servicing command-
line option /Set-ProductKey after you set the edition offline.
For more information about product keys, see Work with Product Keys and Activation.
An index or name value is required for most operations that specify an image file.
4. Type the following command to find the edition of Windows your image is currently set to.
Note which edition of Windows your image is currently set to. If the image has already been changed to a
higher edition you should not change it again. We recommend that you use the lowest edition as a starting
point.
5. Unmount the image or continue with the next procedure. To unmount your image, type the following
command.
2. Type the following command to find the editions of Windows that you can change your image to.
Note the edition-ID for the edition you want to change to.
Note
You cannot set a Windows image to a lower edition. The lowest edition will not appear when you run the
/Get-TargetEditions option. You should not use this procedure on an image that has already been
changed to a higher edition.
3. Type the following command specifying the edition-ID to change the Windows image to a higher edition.
4. Type the following command to unmount the image and commit your changes.
Related topics
Understanding Servicing Strategies
DISM Windows Edition-Servicing Command-Line Options
DISM - Deployment Image Servicing and Management Technical Reference for Windows
Export or Import Default Application Associations
12/18/2017 • 2 min to read • Edit Online
You can use the Deployment Image Servicing and Management (DISM) tool to change the default programs
associated with a file name extension or protocol in a Windows 10 image.
Where:
Server is the name of the server or computer that contains the share that you will export the default
application association settings.
Share is the name of the share where you will export the default application association settings.
3. Import the .xml file that has the default application association settings to the Windows image. For example,
at the command prompt type:
Where:
Server is the name of the server or computer that contains the share that you will export the default
application association settings.
Share is the name of the share where you will export the default application association settings.
Review the default application association setting in an image
1. On your technician computer, open a Command Prompt administrator.
2. List the application associations that have been applied to the mounted image. For example, at the
Command Prompt, type:
You can use the Deployment Image Servicing and Management (DISM) tool to mount a Windows image from a
WIM or VHD file and modify it. In the first part of this walkthrough, you add a language pack, configuring
international settings and enable Windows features. In the second part, you remove a package, and then upgrade
the Windows image to a higher edition of Windows®.
Prerequisites
To complete the walkthrough, you need the following:
A computer that has the Windows ADK tools installed on it.
A .wim, .vhd, or .vhdx file to update.
Language packs, or other packages to add and remove from the image.
Procedures
Step 1: Mount an Image with Read/Write Permissions
In this step, you mount a Windows image to a specified directory, so that it is available for servicing.
1. Copy a .wim file, a .vhd, or a .vhdx that contains a Windows image, to the local drive. For example,
C:\test\images.
2. Click Start, and type deployment. Right-click Deployment and Imaging Tools Environment and then
select Run as administrator.
3. Create a folder for your mounted image. For example, C:\test\offline.
4. Run the DISM /Get-ImageInfo command to retrieve the name or index number for the image that you
want to update. For example:
Since WIM files can contain one or more images, you must specify an index or name value. To mount an
image from a VHD, you must specify /Index:1 .
Step 2: Add Packages to the Image
In this step, you add packages to the mounted Windows image.
1. At an elevated command prompt, add packages to the mounted Windows image. For example:
Optionally, you can configure different values for different settings, including UI language, system locale,
user locale, input locale, and others. For more information about how to specify individual values for each of
these settings, see DISM Languages and International Servicing Command-Line Options.
3. At the command prompt, commit the changes. The image remains mounted until the /Unmount-Image
option is used. For example:
If the list of packages is extensive, you can output the information to a text file. For example, you can add
>C:\PackageList.txt to the end of the command line.
2. Review the list of packages that are available in your mounted image, and note the package identity of the
package.
3. At a command prompt, specify the package identity of a package and remove it from the mounted image.
For example:
End users can use Windows Anytime Upgrade to remove files related to lower editions of Windows that are not
being used.
Step 5: Reduce the Size of the Image
In this step, you'll reduce the footprint of the image by cleaning up superseded components to reduce the size of
the component store, and also by resetting the base of superseded components, which can further reduce the
component store size.
At an elevated command prompt, run the following command to reduce the size of the image file:
Next Step
This walkthrough illustrates the basic offline servicing of a mounted Windows image. All the changes were made to
a single image, and persisted when the image was upgraded. The updated image is ready to be deployed. Because
you copied the image file to the local hard disk drive, you can delete the original image file from the server. You
can replace it with this new one, or keep a copy of the older version for reference.
For more information about additional offline servicing operations that can be performed on an offline image, see
DISM Image Management Command-Line Options.
Related topics
Understanding Servicing Strategies
Service a Windows Image Using DISM
DISM - Deployment Image Servicing and Management Technical Reference for Windows
Service an Applied Windows Image
7/13/2017 • 3 min to read • Edit Online
Windows® image (.wim) files contain one or more volume images for a Windows® operating system. A volume
image represents the captured volume or partition of a Windows operating system. If you have to re-capture a
Windows image, or export a copy of a specific .wim file to another .wim file, or append a volume image to an
existing .wim file, you can use the Deployment Image Servicing and Management (DISM) tool to apply the image,
and then service the image when it is applied. Then you can boot to audit mode to resolve pending online actions,
and add applications or make additional customizations.
Prerequisites
To complete the walkthrough, you need the following:
A computer that has the latest version of the Windows Assessment and Deployment Kit (Windows ADK)
tools installed on it.
Before you can apply a Windows image to a hard disk drive partition, you must create the hard disk
partitions on the destination computer. For more information, see Hard Drives and Partitions.
You must have the master Windows image (.wim file) and the language packs, drivers, or other packages
available in an available location to add them to the Windows image.
A bootable Windows PE disk. For more information, see WinPE: Create USB Bootable drive You can also
apply the image from another operating system on the same computer, such as Windows 8 or Windows 7
with the latest ADK tools installed.
Procedures
Step 1: Boot to Windows PE and Apply the Windows Image
In this step, you boot to Windows PE and apply a Windows image so that it can be serviced offline.
To apply an image
1. On the destination computer, boot to Windows PE. For more information, see WinPE for Windows 10.
2. At a command prompt, apply the master Windows image using DISM. For example:
For more information about DISM commands, see DISM Image Management Command-Line Options.
Step 2: Add Packages to the Windows Image
Use DISM to add packages to your master Windows image.
To add a package to the image
1. At a command prompt, run DISM with the /Add-Package option and point to the .cab or .msu package that
you want to add to the Windows image. Multiple packages can be added on one command line. For
example, type the following command to add multiple packages:
Dism /Image:C:\test\AppliedImages /Add-Package /PackagePath:C:\Test\Packages\package1.cab
/PackagePath:C:\Test\Packages\package2.cab
For more information about these DISM command-line options, see DISM Operating System Package
Servicing Command-Line Options.
You can also use DISM command-line options on an applied Windows image to add drivers, add language
packs, change to a higher edition of Windows, or apply an unattended answer file. For more information,
see:
DISM Driver Servicing Command-Line Options
DISM Languages and International Servicing Command-Line Options
DISM Windows Edition-Servicing Command-Line Options
DISM Unattended Servicing Command-Line Options
2. Check the log file to verify that the package was successfully added.
Some packages and drivers that were added or removed could be in a pending state. This is usually because
a restart is required to complete the action. Booting the image to audit mode will satisfy the restart
requirement, and let you add applications and make additional customizations. For more information, see
Boot Windows to Audit Mode or OOBE.
Next Step
This walkthrough illustrates basic offline servicing of an applied Windows image in Windows PE. When you
complete this process, the packages are added to the Windows image. You can now either run
sysprep /generalize /oobe to remove machine-specific customizations and recapture the image for later
deployment, or run sysprep /oobe to keep the specialized customizations and ship this computer. Using the
/oobe option will ensure that the computer starts in Out-of-Box Experience (OOBE) mode the next time that it is
booted. For more information, see Sysprep (System Preparation) Overview.
Related topics
Understanding Servicing Strategies
Service a Windows Image Using DISM
DISM - Deployment Image Servicing and Management Technical Reference for Windows
Windows ADK
Repair a Windows Image
7/13/2017 • 2 min to read • Edit Online
Repair a Windows image using DISM. You can repair offline Windows image in a WIM or VHD file, or an online
Windows image. An online Windows image will also attempt to repair itself if it becomes unserviceable. The repair
source for this operation is the same source that is used for Features on Demand and is determined by Group
Policy settings. For more information, see Configure a Windows Repair Source. When you use the DISM tool to
repair an online or offline image, you can use the /Source argument with the /RestoreHealth argument to specify
additional repair source locations to use to search for the required files.
For a quick check of an online image, you may be able to use the command: sfc /scannow to scan and repair files.
For a more extensive check that can repair issues with the store, use DISM /Cleanup-Image .
To check if an image is repairable
1. Scan the image to check for corruption. This operation will take several minutes. For example, at a
command prompt, type the following command:
2. Check the image to see whether any corruption has been detected. For example, at a command prompt,
type:
When you use the /CheckHealth sfc argument, the DISM tool will report whether the image is healthy, repairable,
or non-repairable. If the image is non-repairable, you should discard the image and start again. If the image is
repairable, you can use the /RestoreHealth argument to repair the image.
To repair an image
Use the /RestoreHealth argument to repair the image. For example, to repair an offline image using a
mounted image as a repair source, at a command prompt, type the following command:
Or to repair an online image using some of your own sources instead of Windows Update, type:
If you do not specify a /Source for the repair files, the default location for Features on Demand is used. For
more information, see Configure a Windows Repair Source. If you specify more than one /Source, the files
are copied from the first location where they are found and the rest of the locations are ignored. You can
use /LimitAccess to prevent the DISM tool from using Windows Update as a repair source or as a backup
repair source for online images.
Dism /Cleanup-Mountpoints
Related topics
Use the System File Checker tool to repair missing or corrupted system files
DISM Operating System Package Servicing Command-Line Options
Configure a Windows Repair Source
Manage the Component Store
6/6/2017 • 3 min to read • Edit Online
“Why is WinSxS so large?” has been asked by many Windows users. While this question has been discussed in
blog posts, this topic goes into a little more details about the concepts behind the component store (specifically the
WinSxS folder) and then provides links to topics that highlight ways to better manage the size of the WinSxS
folder.
The short answer is that the WinSxS folder isn’t as large as it may appear at first glance because size calculations
can include Windows binaries located elsewhere which makes the WinSxS folder seem larger than it really is.
Hard links
A hard link is a file system object which allows two files to refer to the same location on disk. This means that more
than one file can refer to the same data and changes to that data in one file are reflected in the other files. This
complicates notions of directory size as can be seen using the following example:
1. Directory A has three files: 1.txt, 2.txt, and 3.txt
2. Directory B has one file: 4.txt
3. Files 1.txt and 2.txt are hard linked together and contain 1MB of data.
4. Files 3.txt and 4.txt are also hard linked together and contain 2MB of data.
In this example, you can see that the hard links enable multiple files to refer to the same set of data.
Now what is the size of directory A?
The answer depends on what you plan to do with directory A:
1. If you read the files in the directory A then the size of all the files that are read is the sum of each file size. In
this example, that would be 4 MB.
2. If you copy all the files from directory A to a new location, then the amount of data copied is the sum of all
data hard linked from the files. In this example, that would be 3 MB.
3. If you are trying to free up space by deleting the directory A, you will only see a reduction in size for the files
that are hard linked only by directory A. In this example, this amounts to a savings of 1 MB.
Back to the question of how much space is used by the Windows Component Store, and specifically the WinSxS
folder. The third answer in the directory A example, most closely matches how much extra space is used. Files hard
linked to the rest of the system are required for system operations, so they should not be counted, and files hard
linked to multiple locations within the component store should only have the size stored on disk counted.
Related topics
Where Did My Space Go? (blog post)
More on hard links
NTFS Metafiles blog post
How to create and manipulate NTFS junction points
Determine the Actual Size of the WinSxS Folder
8/11/2017 • 4 min to read • Edit Online
Why is the WinSxS folder so big? The short answer to this commonly asked question is that the component store
(WinSxS folder) contains all the components that make-up Windows to allow you operate your system. These
components are kept to rollback any problematic change or to repair a file that becomes corrupted. For more
information about the component store, see Manage the Component Store. For information on how to delete files
in the WinSxS folder, see Clean Up the WinSxS Folder.
For operating system files, it can appear that more than one copy of the same version of a file is stored in more
than one place on the operating system, but there’s usually only one real copy of the file. The rest of the copies are
just “projected” by hard linking from the component store. A hard link is a file system object that lets two files refer
to the same location on disk. Some tools, such as the File Explorer, determine the size of directories without taking
into account that the contained files might be hard linked. This might lead you to think that the WinSxS folder
takes up more disk space than it really does.
WARNING
Some important system files are located only in the WinSxS folder. Deleting files from the WinSxS folder or deleting the entire
WinSxS folder might severely damage your system, so that your PC might not boot, and make it impossible to update.
A new option has been added to the DISM tool for Windows 8.1 to help determine how much disk space the
WinSxS folder really uses.
Analyze the size of the component store (WinSxS folder)
Open an elevated command window and type:
NOTE
The /AnalyzeComponentStore option isn’t recognized on Windows 8 and earlier.
TITLE DESCRIPTION
Windows Explorer Reported Size of Component Store This value the size of the WinSxS folder if computed by
Windows Explorer. This value doesn’t factor in the use of
hard links within the WinSxS folder.
Actual Size of Component Store This value factors in hard links within the WinSxS folder. It
doesn’t exclude files that are shared with Windows by
using hard links.
TITLE DESCRIPTION
Shared with Windows This value provides the size of files that are hard linked so
that they appear both in the component store and in
other locations (for the normal operation of Windows).
This is included in the actual size, but shouldn’t be
considered part of the component store overhead.
Backups and Disabled Features This is the size of the components that are being kept to
respond to failures in newer components or to provide
the option of enabling more functionality. It also includes
the size of component store metadata and side-by-side
components.
Cache and Temporary Data This is the size of files that are used internally by the
component store to make component servicing
operations faster. This is included in the actual size and is
part of the component store overhead.
Date of Last Cleanup This is the date of the most recently completed
component store cleanup.
Number of Reclaimable Packages This is the number of superseded packages on the system
that component cleanup can remove.
Based on this analysis you can determine the overhead of the WinSxS folder by taking the sum of the
backups and disabled features size with the cache and temporary data size.
Example output:
C:\>dism /online /cleanup-image /analyzecomponentstore
[==========================100.0%==========================]
In this example, the WinSxS folder appears to be 4.98 GB, but the actual overhead (the sum of the size of
backups and disabled features and the size of cache and temporary data) is 507.18 MB.
Determine if you should clean up the component store (WinSxS folder) based on the analysis results
1. Open an elevated command window and type:
2. If cleanup is recommended then follow steps in the related topic, Clean Up the WinSxS Folder.
Related topics
Manage the Component Store
Clean Up the WinSxS Folder
Where Did My Space Go? (blog post)
Servicing changes in Windows 8.1/Server 2012 R2
NTFS Metafiles blog post
How to create and manipulate NTFS junction points
DISM Operating System Package Servicing Command-Line Options
Clean Up the WinSxS Folder
10/13/2017 • 4 min to read • Edit Online
This topic is about the different ways to reduce the size of the WinSxS folder on a running version of Windows 10.
One commonly asked question is, "Can I delete the WinSxS folder to regain some disk space?" The short answer is
no. You can, however, reduce the size of the WinSxS folder using tools built into Windows. For more information
about the WinSxS folder, see Manage the Component Store.
Windows 10 and Windows Server 2016 automatically reduce the size of the WinSxS folder by using methods
similar to the ones described in this topic, in addition to internal processes, such as uninstalling and deleting
packages with components that have been replaced by other components with newer versions. Previous versions
of some components are kept on the system for a period of time, allowing you to rollback if necessary. After a
period of time, these older components are automatically removed from the installation.
You can also reduce the size of a Windows image using some of the same techniques, as discussed in Reduce the
Size of the Component Store in an Offline Windows Image.
To learn about finding the size of your WinSxS folder, see Determine the actual size of the WinSxS folder.
WARNING
Deleting files from the WinSxS folder or deleting the entire WinSxS folder may severely damage your system so that your PC
might not boot and make it impossible to update.
In Windows 10 and Windows Server 2016, you have a number of ways to start the cleanup of the component
store, which use a combination of package deletion and component compression to clean up the WinSxS folder:
Task Scheduler
The StartComponentCleanup task was created in Windows 8 to regularly clean up components automatically
when the system is not in use. This task is set to run automatically when triggered by the operating system. When
run automatically, the task will wait at least 30 days after an updated component has been installed before
uninstalling the previous versions of the component.
If you choose to run this task, the task will have a 1 hour timeout and may not completely clean up all files.
Run the StartComponentCleanup task in Task Scheduler to clean up and compress components
1. If Task Scheduler is not open, start the Task Scheduler. For more information, see Start Task Scheduler.
2. Expand the console tree and navigate to Task Scheduler
Library\Microsoft\Windows\Servicing\StartComponentCleanup.
3. Under Selected Item, click Run
NOTE
The StartComponentCleanup task can also be started from the command line.
Dism.exe
The /Cleanup-Image parameter of Dism.exe provides advanced users more options to further reduce the size of
the WinSxS folder. For more information, see DISM Operating System Package Servicing Command-Line Options.
Use the /StartComponentCleanup parameter
Using the /StartComponentCleanup parameter of Dism.exe on a running version of Windows 10 gives
you similar results to running the StartComponentCleanup task in Task Scheduler, except previous
versions of updated components will be immediately deleted (without a 30 day grace period) and you will
not have a 1-hour timeout limitation.
From an elevated command prompt, type the following:
WARNING
All existing service packs and updates cannot be uninstalled after this command is completed. This will not block the
uninstallation of future service packs or updates.
Warning
The service pack cannot be uninstalled after this command is completed.
Disk Cleanup
You can use Disk Cleanup to reduce the number of unnecessary files on your drives, which can help your PC run
faster. It can delete temporary files and system files, empty the Recycle Bin, and remove a variety of other items
that you might no longer need. The option to cleanup updates helps reduce the size of the component store.
Run Disk Cleanup to delete system files
To delete system files run the steps as provided in Delete files using Disk Cleanup.
Related topics
Manage the Component Store
Determine the Actual Size of the WinSxS Folder
Reduce the Size of the Component Store in an Offline Windows Image
Uninstall-WindowsFeature
How to Reduce the Size of the Winsxs directory and Free Up Disk Space on Windows Server 2012 Using Features
on Demand
How to address disk space issues that are caused by a large Windows component store (WinSxS) directory
Reduce the Size of the Component Store in an
Offline Windows Image
7/13/2017 • 2 min to read • Edit Online
You can use the Deployment Image Servicing and Management (DISM) tool to mount a Windows image from a
WIM, VHD, or VHDX file and modify it.
Since WIM files can contain one or more images, you must specify an index or name value. To mount an
image from a VHD, you must specify /Index:1 .
6. Analyze the size of the component store. For example:
To understand the different values provided in the display, see Determine the Actual Size of the WinSxS
Folder.
7. If the component store cleanup was recommended in the displayed report, then you can start cleanup of the
image. For example:
Dism /Image:C:\test\offline /Cleanup-Image /StartComponentCleanup
8. You can reduce the size of the component store further by adding the /ResetBase parameter. For example:
Beginning with Windows 10, version 1607, you can specify the /Defer parameter with /Resetbase to defer
any long-running cleanup operations to the next automatic maintenance. But we highly recommend you
only use /Defer as an option in the factory where DISM /Resetbase requires more than 30 minutes to
complete.
The maintenance task is scheduled to run weekly, with a two-week deadline. In the first week, the
maintenance task will only run during system idle maintenance windows. If it is unable to complete (for
example, the computer is turned off when not in use) then the task scheduler runs more often, and the task
may run while the system is not idle.
To see the performance effects while the task is running, click Start > Run and type the following command:
9. Commit the changes and unmounts the image in order to save the changes that you’ve made. For example:
Related topics
Manage the Component Store
Clean Up the WinSxS Folder
Determine the Actual Size of the WinSxS Folder
Where Did My Space Go? (blog post)
NTFS Metafiles blog post
How to create and manipulate NTFS junction points
DISM Operating System Package Servicing Command-Line Options
Windows 10 DISM Command-Line Options
6/6/2017 • 1 min to read • Edit Online
Deployment Image Servicing and Management (DISM.exe) mounts a Windows image (.wim) file or virtual hard
disk (.vhd or .vhdx) for servicing. You can also use DISM to install, uninstall, configure, and update the features
and packages in offline Windows images and offline Windows Preinstallation Environment (WinPE) images. For
more information about common DISM scenarios, see What is DISM?.
In addition to the command-line tool, DISM is available by using PowerShell. For more information, see
Deployment Imaging Servicing Management (DISM) Cmdlets in Windows PowerShell.
DISM replaces tools including PEImg, Intlcfg, Package Manager, and ImageX.
In This Section
DISM Image Management Command-Line Options Image management commands such as capturing,
applying, and mounting a Windows image.
DISM Global Options for Command-Line Syntax Basic command-line syntax and universal options for
servicing functions.
DISM Operating System Package Servicing Command- Package-servicing commands for adding, removing, and
Line Options enumerating .cab and .msu packages and enabling,
disabling, and enumerating features.
DISM Provisioning Package (.ppkg) Command-Line Options Use Windows provisioning packages (.ppkg)
DISM Capabilities Package Servicing Command-Line Capabilities servicing commands for adding languages,
Options .NET, and other Windows features.
DISM App Package (.appx or .appxbundle) Servicing Servicing commands for adding, removing, and
Command-Line Options enumerating app packages.
DISM Application Servicing Command-Line Options Servicing commands that can be used to check the
applicability of Windows Installer application patches
(.msp files) and to query your offline image for
information about installed MSI applications and
application patches (.msp files).
DISM Default Application Association Servicing Servicing commands for importing, exporting, removing,
Command-Line Options and enumerating the settings that specify which
application opens a file based on file extension or
protocol
DISM Languages and International Servicing Command- International-servicing commands for adjusting
Line Options international settings and configurations.
DISM Driver Servicing Command-Line Options Driver-specific servicing commands for adding, removing,
and enumerating driver .inf files.
DISM Unattended Servicing Command-Line Options Servicing commands that can be used to apply an
Unattend.xml file.
DISM Windows PE Servicing Command-Line Options WinPE–specific servicing commands for preparing a
WinPE image.
DISM Windows Edition-Servicing Command-Line Edition-servicing commands for changing the edition of
Options your Windows image.
Related topics
DISM Image Management Command-Line Options
DISM How-to Topics (Deployment Image Servicing and Management)
What is DISM?
DISM Image Management Command-Line
Options
12/7/2017 • 20 min to read • Edit Online
Deployment Image Servicing and Management (DISM.exe) mounts a Windows image (.wim) file or virtual
hard disk (.vhd or .vhdx) for servicing. You can also use the DISM image management command to list the
image index numbers, to verify the architecture for the image that you are mounting, append an image,
apply an image, capture an image and delete an image. After you update the image, you must unmount it
and either commit or discard the changes that you have made.
This topic discusses DISM commands related to image management. To see other command-line options,
see Deployment Image Servicing and Management (DISM) Command-Line Options. For more information
about common DISM scenarios, see What is DISM?.
In addition to the command-line tool, DISM is available by using Windows PowerShell. For more
information, see Deployment Imaging Servicing Management (DISM) Cmdlets in Windows PowerShell.
The following commands can be used to mount, unmount, capture, append, and delete and query .wim,
.vhd and .vhdx files. These options are not case sensitive.
/Append-Image
Adds an additional image to a .wim file. /Append-Image compares new files to the resources in the
existing .wim file specified by the /ImageFile argument, and stores only a single copy of each unique file
so that each file is only captured once. The .wim file can have only one assigned compression type.
Therefore, you can only append files with the same compression type.
This command-line option does not apply to virtual hard disk (VHD) files.
IMPORTANT
Ensure that you have enough disk space for the /Append-Image option to run. If you run out of disk space while
the image is being appended, you might corrupt the .wim file.
Syntax:
PARAMETER DESCRIPTION
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
/NoRpFix Disables the reparse point tag fix. A reparse point is a file
that contains a link to another file on the file system. If
/NoRpFix is not specified, reparse points that resolve to
paths outside of the value specified by /ImageFile will not
be captured.
Example:
/Apply-FFU
For FFU, this command applies a Full Flash Utility (FFU) or split FFU (SFU) to a specified physical drive.
Syntax:
PARAMETER DESCRIPTION
/ImageFile The path and name of the FFU image file that will be
applied
Example:
DISM.exe /Apply-Ffu /ImageFile:flash.ffu /ApplyDrive:\\.\PhysicalDrive0
/Apply-Image
For WIM, this command applies a Windows image file (.wim) or a split Windows image (.swm) files to a
specified partition. Beginning with Windows 10, version 1607, DISM can apply and capture extended
attributes (EA).
For FFU, this command applies a full flash update (.ffu) image to a specified drive. It doesn’t support
applying an image from a virtual hard disk (.vhdx) file, though you can use this command to apply a full
image to a VHD. FFU applies to Windows 10 only.
This option doesn’t support applying an image from a virtual hard disk (VHD), though you can use this
command to apply images to a .vhdx file that's been attached, partitioned, and formatted.
If Dism /Apply-Image fails with error code 5 and you are using Windows 10 version 1607 with Windows
Subsystem for Linux (WSL) feature, see KB article 319598.
Arguments for WIM:
PARAMETER DESCRIPTION
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
/NoRpFix Disables the reparse point tag fix. A reparse point is a file
that contains a link to another file on the file system. If
/NoRpFix is not specified, reparse points that resolve to
paths outside the value specified by /ImageFile will not be
captured.
/ApplyDrive Specifies the logical drive, using the DeviceID. to get the
device ID from the command line, type "wmic diskdrive
list brief". Note: a VHD may appear with the name
“PhysicalDrive” in the description, for example,
.\PhysicalDrive2.
Examples:
/Capture-CustomImage
Captures the incremental file changes based on the specific install.wim file to a new file, custom.wim for a
WIMBoot image. You can’t capture an empty directory. The captured files are converted to pointer files.
The custom.wim is placed in the same folder next to the install.wim.
Important
/Capture-CustomImage only captures the customization files. It can’t be used to capture installation
files into a new WIM.
Keep the install.wim and custom.wim files together. Don't switch out either the custom.wim file or the
install.wim file.
You can only capture the custom image once. Don’t remove or recapture a custom.wim after capturing
the incremental file changes.
Syntax:
PARAMETER DESCRIPTION
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
Example:
/Capture-FFU
Captures an image of a physical drive's partitions to a new .ffu file.
You can capture the image as a full flash utility image (.ffu) file or a set of split ffu (.sfu) files;
Syntax:
Dism /Capture-Ffu /ImageFile:<path_to_image_file> /CaptureDrive:<physical_drive_path> /Name:
<image_name> [/Description:<image_description>] [/PlatformIds:<platform_ids>] [/Compress:
{default|none}]
PARAMETER DESCRIPTION
Examples:
Capture a desktop FFU:
/Capture-Image
Captures an image of a drive to a new .wim file. Captured directories include all subfolders and data. You
cannot capture an empty directory. A directory must contain at least one file.
You can capture the image as a Windows image (.wim) file or a set of split Windows image (.swm) files;
this option doesn’t support capturing a virtual hard disk (.vhd/.vhdx) file or a full flash update (.ffu) image.
Beginning with Windows 10, version 1607, DISM can apply and capture extended attributes (EA).
Syntax:
PARAMETER DESCRIPTION
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
/NoRpFix Disables the reparse point tag fix. A reparse point is a file
that contains a link to another file on the file system. If
/NoRpFix is not specified, reparse points that resolve to
paths outside of the value specified by /ImageFile will not
be captured.
Examples:
Dism /Cleanup-Mountpoints
/Commit-Image
Applies the changes that you have made to the mounted image. The image remains mounted until the
/Unmount-Image option is used.
Syntax:
PARAMETER DESCRIPTION
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
/Append Adds the modified image to the existing .wim file instead
of overwriting the original image. The /CheckIntegrity and
/Append arguments do not apply to virtual hard disk
(VHD) files.
Example:
/Delete-Image
Deletes the specified volume image from a .wim file that has multiple volume images. This option deletes
only the metadata entries and XML entries. It does not delete the stream data and does not optimize the
.wim file.
This command-line option does not apply to virtual hard disk (VHD) files.
Syntax:
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
Example:
/Export-Image
Exports a copy of the specified image to another file. The source and destination files must use the same
compression type. You can also optimize an image by exporting to a new image file. When you modify an
image, DISM stores additional resource files that increase the overall size of the image. Exporting the
image will remove unnecessary resource files.
This command-line option does not apply to virtual hard disk (VHD) files.
Syntax:
PARAMETER DESCRIPTION
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
Example:
/Get-MountedImageInfo
Returns a list of .ffu, .vhd, .vhdx, and .wim images that are currently mounted, as well s information about
the mounted image such as whether the image is valid, read/write permissions, mount location, mounted
file path, and mounted image index.
Example:
Dism /Get-MountedImageInfo
/Get-ImageInfo
Displays information about the images that are contained in a .wim, .ffu, .vhd or .vhdx file. When used with
the /Index or /Name argument, information about the specified image is displayed, which includes if an
image is a WIMBoot image, if the image is Windows 8.1, see Take Inventory of an Image or Component
Using DISM. The /Name argument does not apply to VHD files. You must specify /Index:1 for FFU and
VHDX files.
Syntax:
Examples:
/Get-WIMBootEntry
Use /Get-WIMBootEntry to display WIMBoot configuration entries for the specified disk volume.
For more information about how to display WIMBoot configuration entries, see Take Inventory of an
Image or Component Using DISM.
This only applies to Windows 8.1; this feature isn't supported in Windows 10.
Syntax:
Example:
/List-Image
Displays a list of the files and folders in a specified image.
This command-line option does not apply to virtual hard disk (VHD) files.
Syntax:
Example:
/Mount-Image
Mounts an image from a .ffu, .wim, .vhd or .vhdx file to the specified directory so that it is available for
servicing.
When mounting an image, note the following:
The mount directory must be created, but empty.
An index or name value is required for all image types. WIMs can contain more than image. For FFU
and VHD, use index:1 .
Syntax:
PARAMETER DESCRIPTION
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
Examples:
/Optimize-Image /WIMBoot
Performs specified configurations to an offline image.
PARAMETER DESCRIPTION
Example:
/Remount-Image
Remounts a mounted image that has become inaccessible and makes it available for servicing.
Syntax:
Example:
PARAMETER DESCRIPTION
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
Example:
/Split-Image
For WIM, this command splits an existing .wim file into multiple read-only split .swm files.
This option creates the .swm files in the specified directory, naming each file the same as the specified
path_to_swm, but with an appended number. For example, if you set path_to_swm as c:\Data.swm , this
option creates a Data.swm file, a Data2.swm file, a Data3.swm file, and so on, defining each portion of the
split .wim file and saving it to the C:\ directory.
This command-line option does not apply to virtual hard disk (VHD) files.
Syntax for WIM:
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
Example:
/Unmount-Image
Unmounts the .ffu, .wim, .vhd or .vhdx file and either commits or discards the changes that were made
when the image was mounted.
You must use either the /commit or /discard argument when you use the /Unmount-Image option.
Syntax:
PARAMETER DESCRIPTION
/CheckIntegrity Detects and tracks .wim file corruption when used with
capture, unmount, export, and commit operations.
/CheckIntegrity stops the operation if DISM detects that
the .wim file is corrupted when used with apply and
mount operations.
/Append Adds the modified image to the existing .wim file instead
of overwriting the original image. The /CheckIntegrity and
/Append arguments do not apply to virtual hard disk
(VHD, VHDX), or FFU files.
Examples:
/Update-WIMBootEntry
Updates the WIMBoot configuration entry, associated with the specified data source ID, with the renamed
image file or moved image file path.
Note: /Update-WIMBootEntry requires a restart in order for any updates to take effect.
Syntax:
PARAMETER DESCRIPTION
Example:
/Apply-SiloedPackage
Applies one or more siloed provisioning packages (SPPs) to a specified image. This option is only available
after running CopyDandI.cmd from the ADK for Windows 10, Version 1607, and running
dism.exe /Apply-SiloedPackage from the target folder created by CopyDandI.cmd.
Note: /Apply-SiloedPackage can only be run once against a Windows image, but /PackagePath can
used more than once in the same command to apply multiple SPPs. SPPs will be applied in the specified
order, so a dependency should be specified before the SPP that depends on it.
For more information about siloed provisioning packages, and how to use CopyDandI.cmd, see Siloed
provisioning packages.
To find out how to work with siloed provisioning packages, see Lab 10: Add desktop applications and
settings with siloed provisioning packages (SPPs).
PARAMETER DESCRIPTION
/ImagePath Specifies the path of the Windows image where you are
applying the SPP.
Example:
Related topics
DISM - Deployment Image Servicing and Management Technical Reference for Windows
What is DISM?
DISM Global Options for Command-Line Syntax
Deploy Windows using Full Flash Update (FFU)
WIM vs. VHD vs. FFU: comparing image file formats
DISM Global Options for Command-Line Syntax
6/6/2017 • 5 min to read • Edit Online
Global options can be added to most of the servicing and imaging options in the Deployment Image Servicing and
Management (DISM) tool. These options can be used to access the command-line help, specify the location of files
to use, and control logging.
/LogPath:<path to log file.log> Specifies the full path and file name to log to. If not set,
the default is: %WINDIR%\Logs\Dism\dism.log
Important
In Windows PE, the default directory is the RAMDISK
scratch space which can be as low as 32 MB.
The log file will automatically be archived. The archived
log file will be saved with .bak appended to the file
name and a new log file will be generated. Each time
the log file is archived the .bak file will be overwritten.
/Image:<path_to_offline_image_directory> This is the full path to the root directory of the offline
Windows image that you will service. If the directory
named Windows is not a subdirectory of the root
directory, /WinDir must be specified.
This option cannot be used with /Online.
Example:
Dism /image:C:\test\offline
/LogPath:AddPackage.log /LogLevel:1 /Add-
Package /PackagePath:C:\packages\package.cab
/WinDir:<path_to_%WINDIR%> Used with the /Image option to specify the path to the
Windows directory relative to the image path. This cannot
be the full path to the Windows directory; it should be a
relative path. If not specified, the default is the Windows
directory in the root of the offline image directory.
This option cannot be used with the /Online option.
Example:
Dism /image:C:\test\offline /WinDir:WinNT /Add-
Package /PackagePath:C:\packages\package.cab
Note
Do not use the /Quiet option with /Get commands. No
information will be displayed.
Example:
Dism /image:C:\test\offline /Add-Package
/PackagePath:C:\packages\package.cab /quiet
Note
Some resources cannot be displayed in English.
This option is not supported when you use the DISM /?
command.
Example:
Dism /Get-ImageInfo
/ImageFile:C:\test\offline\install.wim /index:1
/English
Related topics
Deployment Image Servicing and Management (DISM) Command-Line Options
DISM Application Servicing Command-Line Options
DISM Windows Edition-Servicing Command-Line Options
DISM Languages and International Servicing Command-Line Options
DISM Operating System Package Servicing Command-Line Options
DISM Driver Servicing Command-Line Options
DISM Unattended Servicing Command-Line Options
DISM Windows PE Servicing Command-Line Options
DISM Operating System Package (.cab or .msu)
Servicing Command-Line Options
8/21/2017 • 10 min to read • Edit Online
Use DISM with Windows cabinet (.cab) or Windows Update Stand-alone Installer (.msu) files to install or
remove updates, service packs, language packs, and to enable or disable Windows features. Features are
optional components for the core operating system.
Syntax
DISM.exe {/Image:<path_to_image_directory> | /Online} [dism_global_options] {servicing_option}
[<servicing_argument>]
The following operating system package-servicing options are available for an offline image:
The following operating system package-servicing options are available for a running operating system:
Dism /Get-Help
Examples:
/Get-Packages
Displays basic information about all packages in the image. Use the /Format:Table or /Format:List argument to
display the output as a table or a list.
Syntax:
Examples:
/Get-PackageInfo
Displays detailed information about a package provided as a .cab file. Only .cab files can be specified. You
cannot use this command to obtain package information for .msu files. /PackagePath can point to either a .cab
file or a folder.
You can use the /Get-Packages option to find the name of the package in the image, or you can specify the path
to the .cab file. The path to the .cab file should point to the original source of the package, not to where the file is
installed on the offline image.
Syntax:
Examples:
/Add-Package
Installs a specified .cab or .msu package in the image. An .msu package is supported only when the target image
is offline, either mounted or applied.
Multiple packages can be added on one command line. The applicability of each package will be checked. If the
package cannot be applied to the specified image, you will receive an error message. Use the /IgnoreCheck
argument if you want the command to process without checking the applicability of each package.
Use the /PreventPending option to skip the installation of the package if the package or Windows image has
pending online actions. (Introduced in Windows 8/Windows PE 4.0).
/PackagePath can point to:
A single .cab or .msu file.
A folder that contains a single expanded .cab file.
A folder that contains a single .msu file.
A folder that contains multiple .cab or .msu files.
Notes
If /PackagePath points to a folder that contains a .cab or .msu files at its root, any subfolders will also be
recursively checked for .cab and .msu files.
/Add-Package doesn't run a full check for a package's applicability and dependencies. If you're adding a
package with dependencies, make sure that all dependencies are installed when you add the package.
Syntax:
Examples:
/Remove -Package
Removes a specified .cab file package from the image. Only .cab files can be specified. You cannot use this
command to remove .msu files.
Note
Using this command to remove a package from an offline image will not reduce the image size.
You can use the /PackagePath option to point to the original source of the package, specify the path to the CAB
file, or you can specify the package by name as it is listed in the image. Use the /Get-Packages option to find the
name of the package in the image.
Syntax:
Examples:
/Get-Features
Displays basic information about all features (operating system components that include optional Windows
foundation features) in a package. You can use the /Get-Features option to find the name of the package in the
image, or you can specify the path to the original source of the package. If you do not specify a package name
or path, all features in the image will be listed. /PackagePath can point to either a .cab file or a folder.
Feature names are case sensitive if you are servicing a Windows image other than Windows 8.
Use the /Format:Table or /Format:List argument to display the output as a table or a list.
Syntax:
Examples:
/Get-FeatureInfo
Displays detailed information about a feature. You must use /FeatureName. Feature names are case sensitive if
you are servicing a Windows image other than Windows 10 or Windows 8.x. You can use the /Get-Features
option to find the name of the feature in the image.
/PackageName and /PackagePath are optional and can be used to find a specific feature in a package.
Syntax:
Examples:
/Enable -Feature
Enables or updates the specified feature in the image. You must use the /FeatureName option. Feature names
are case sensitive if you are servicing a Windows image other than Windows 8. Use the /Get-Features option to
find the name of the feature in the image.
You can specify the /FeatureName option multiple times in one command line for features that share the same
parent package.
You do not have to specify the package name using the /PackageName option if the package is a Windows
Foundation Package. Otherwise, use /PackageName to specify the parent package of the feature.
You can restore and enable a feature that has previously been removed from the image. Use the /Source
argument to specify the location of the files that are required to restore the feature. The source of the files can
by the Windows folder in a mounted image, for example c:\test\mount\Windows. You can also use a Windows
side-by-side folder as the source of the files, for example z:\sources\SxS.
If you specify multiple /Source arguments, the files are gathered from the first location where they are found
and the rest of the locations are ignored. If you do not specify a /Source for a feature that has been removed,
the default location in the registry is used or, for online images, Windows Update (WU) is used.
Use /LimitAccess to prevent DISM from contacting WU for online images.
Use /All to enable all parent features of the specified feature.
The /Source, /LimitAccess, and /All arguments can be used with Windows 10, Windows 8.x, and Windows PE
images above 4.0.
Syntax:
Examples:
/Disable -Feature
Disables the specified feature in the image. You must use the /FeatureName option. Feature names are case
sensitive if you are servicing a Windows image other than Windows 8. Use the /Get-Features option to find the
name of the feature in the image.
You can specify /FeatureName multiple times in one command line for features in the same parent package.
You do not have to specify the package name using the /PackageName option if it the package is a Windows
Foundation Package. Otherwise, use /PackageName to specify the parent package of the feature.
Use /Remove to remove a feature without removing the feature's manifest from the image. This option can only
be used can be used with Windows 10, Windows 8.x, and Windows PE images above 4.0. The feature will be
listed as "Removed" when you use /Get-FeatureInfo to display feature details and can be restored and enabled
using /Enable-Feature with the /Source option.
Syntax:
Examples:
*Dism /Online /Disable-Feature /FeatureName:Hearts
/Cleanup-Image
Performs cleanup or recovery operations on the image. /AnalyzeComponentStore and /ResetBase can be used
with Windows 10, Windows 8.1, and Windows PE images above 5.0. Beginning with Windows 10, version 1607,
you can specify /Defer with /ResetBase. But we highly recommend you only use /Defer as an option in the
factory where DISM /Resetbase requires more than 30 minutes to complete. /StartComponentCleanup can be
used with Windows 10, Windows 8.x, and Windows PE images above 4.0. /CheckHealth, /ScanHealth,
/RestoreHealth, /Source, and /LimitAccess can be used with Windows 10, Windows 8.x, and Windows PE images
above 4.0. /HideSP and /SPSuperseded can’t be used when servicing a version of Windows that is earlier than
Windows 7 Service Pack 1 (SP1) image.
Tip
To determine when the /ResetBase option was last run, check the LastResetBase_UTC registry entry under this
registry path:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing
Syntax:
PARAMETER DESCRIPTION
/RestoreHealth Scans the image for component store corruption, and then
performs repair operations automatically. This operation will
take several minutes.
Examples:
Limitations
When you are installing a package in an offline image, the package state is “install pending” because of
pending online actions. In other words, the package will be installed when the image is booted and the
online actions are processed. If subsequent actions are requested, they cannot be processed until the
previous pending online action is completed. You can use the /PreventPending option when you add a
package with /AddPackage to skip the installation of a package when there are pending online actions.
Some packages require other packages to be installed first. You should not assume that dependencies will
be satisfied. If there are dependency requirements, you should use an answer file to install the necessary
packages. By passing an answer file to DISM, multiple packages can be installed in the correct order. This is
the preferred method for installing multiple packages. For more information, see Add or Remove Packages
Offline Using DISM.
Packages are installed in the order that they are listed in the command line.
When using DISM to list the optional components in a Windows PE image, the optional components will
always be listed as pending even when the servicing operation was successful. This is by design and requires
no additional action from you.
Related topics
What is DISM?
DISM Image Management Command-Line Options
Deployment Image Servicing and Management (DISM) Command-Line Options
DISM Provisioning Package (.ppkg) Command-Line
Options
7/13/2017 • 1 min to read • Edit Online
Use DISM to work with Provisioning Packages (.ppkg) files. For example, you can add settings and Windows
desktop applications to Windows 10, or reduce the size of your Windows installation.
/Add-ProvisioningPackage
Adds applicable payload of provisioning package to the specified image.
Syntax:
Example:
/Get-ProvisioningPackageInfo
Get the information of provisioning package.
Syntax:
Example:
/Apply-CustomDataImage
Dehydrates files contained in the custom data image to save space. For client editions, this package is used by the
push-button recovery tools.
Syntax:
PARAMETER DESCRIPTION
/ImagePath Specifies the drive that contains the Windows image. DISM
scans this drive for any non-system files on this drive and
incorporates them into the provisioning package.
Example:
Applies to: Windows 10 for desktop editions (Home, Pro, Enterprise, and Education) only.
DISM App Package (.appx or .appxbundle) Servicing
Command-Line Options
11/8/2017 • 8 min to read • Edit Online
You can use app package-servicing commands to add, remove, and list provisioned app packages (.appx or
.appxbundle) in a Windows image. An .appxbundle, new for Windows 10, is a collection of app and resource
packages used together to enrich the app experience, while minimizing the disk footprint on a given PC. For
detailed documentation about .appxbundle packages and the Microsoft Store pipeline, see App packaging. Only a
subset of the packages within an .appxbundle might be added to the image when a bundle is provisioned using
DISM. For more information, see Understanding How DISM Adds .appxbundle Resource Packages to an Image.
Provisioned app packages are added to a Windows image and are then installed for every new or existing user
profile the next time the user logs on. For more information, including requirements for app package provisioning,
see Sideload Apps with DISM.
You can also use PowerShell to add, remove, and list app packages (.appx or .appxbundle) per image or per user in
a Windows installation. For more information, see Deployment Imaging Servicing Management (DISM) Cmdlets in
Windows PowerShell and App Installation Cmdlets in Windows PowerShell.
The base syntax for servicing a Windows image using DISM is:
DISM.exe {/Image:<path_to_image_directory> | /Online} [dism_global_options] {servicing_option}
[<servicing_argument>]
The following app package (.appx or .appxbundle) servicing options are available for an offline image.
DISM.exe /Image:<path_to_image_directory> [/Get-ProvisionedAppxPackages | /Add-
ProvisionedAppxPackage | /Remove-ProvisionedAppxPackage | /Set-ProvisionedAppxDataFile]
The following app package (.appx or .appxbundle) servicing options are available for a running operating system.
DISM.exe /Online [/Get-ProvisionedAppxPackages | /Add-ProvisionedAppxPackage | /Remove-
ProvisionedAppxPackage | /Set-ProvisionedAppxDataFile]
/Get-ProvisionedAppxPackages
Displays information about app packages (.appx or .appxbundle), in an image, that are set to install for each new
user.
Example:
Dism /Image:C:\test\offline /Get-ProvisionedAppxPackages
/Add-ProvisionedAppxPackage
Adds one or more app packages to the image.
The app will be added to the Windows image and registered for each existing or new user profile the next time the
user logs in. If the app is added to an online image, the app will not be registered for the current user until the next
time the user logs in.
It is recommended to provision apps in an online operating system in audit mode so that appropriate hard links
can be created for apps that contain the exact same files (to minimize disk space usage) while also ensuring no
apps are running for a successful installation.
Syntax:
Use /FolderPath to specify a folder of unpacked app files containing a main package, any dependency packages,
and the license file. This is only supported for an unpacked app package.
Use /PackagePath to specify an app package (.appx or .appxbundle). You can use /PackagePath when
provisioning a line-of-business app online.
Important Use the /PackagePath parameter to provision .appxbundle packages. Also, dependency packages
cannot be provisioned with /PackagePath, they must be provisioned with the /DependencyPackagePath
parameter for an app.
/PackagePath is not supported from a host PC that is running Windows Preinstallation Environment (WinPE) 4.0,
Windows Server 2008 R2, or an earlier version of Windows.
Use /DependencyPackagePath to specify each depencency package needed for the app to be provisioned. The
necessary dependency packages of an app can be found by looking at the elements in the AppxManifest.xml in the
root of the .appx package of the app. If multiple apps all share the same dependency, the latest minor version of
each major version of the dependency package should be installed. For example, App1, App2, and App3 all have a
dependency on Microsoft.NET.Native.Framework. App1 specifies Microsoft.NET.Native.Framework.1.6 with minor
version 25512.0, App2 specifies Microsoft.NET.Native.Framework.1.6 with minor version 25513.0, and App3
specifies Microsoft.NET.Native.Framework.1.3 with minor version 24202.0. Because both App1 and App2 both
specify the same major version of the dependency package, only the latest minor version 25513.0 should be
installed, while App3 specifies a different major version of the dependency package, so it must also be installed. So
the dependency packages that should be installed are Microsoft.NET.Native.Framework.1.6 with minor version
25513.0 and Microsoft.NET.Native.Framework.1.3 with minor version 24202.0.
If the package has dependencies that are architecture-specific, you must install all of the applicable architectures
for the dependency on the target image. For example, on an x64 target image, include a path to both the x86 and
x64 dependency packages or include them both in the folder of unpacked app files. If the ARM dependency
package is also specified or included, DISM will ignore it since it does not apply to the target x64 image.
x86 x86
Use /CustomDataPath to specify an optional custom data file for an app. You can specify any file name. The file
will be renamed to Custom.dat when it is added to the image.
Use /LicensePath with the /PackagePath option to specify the location of the .xml file containing your
application license.
Only use /SkipLicense with apps that do not require a license on a sideloading-enabled computer. Using
/SkipLicense in other scenarios can compromise an image.
Examples:
/Remove -ProvisionedAppxPackage
Removes provisioning for app packages (.appx or .appxbundle) from the image. App packages will not be
registered to new user accounts that are created.
Syntax:
/Remove-ProvisionedAppxPackage /PackageName:<PackageName>
Important
This option will only remove the provisioning for a package if it is registered to any user profile. Use the
Remove-AppxPackage cmdlet in PowerShell to remove the app for each user that it is already registered to in
order to fully remove the app from the image.
If the app has not been registered to any user profile, the /Remove-ProvisionedAppxPackage option will remove
the package completely.
To remove app packages from a Windows Server 2012 image that has the Desktop Experience installed, you must
remove the app packages before you remove the Desktop Experience. The Desktop Experience is a requirement of
the /Remove-ProvisionedAppxPackage option for Server Core installations of Windows Server 2012.
Examples:
/Set-ProvisionedAppxDataFile
Adds a custom data file into the specified app package (.appx or .appxbundle).
Syntax:
The specified app (.appx or .appxbundle) package must already be added to the image prior to when you add the
custom data file with this option. You can also add a custom data file when you use the /Add-
ProvisionedAppxPackage option.
Use /CustomDataPath to specify an optional custom data file for an app. You can specify any file name. The file
will be renamed to Custom.dat when it is added to the image. If a Custom.dat file already exists, it will be
overwritten.
Use /PackageName to specify an app package (.appx or .appxbundle).
Example:
Limitations
You cannot install an app package (.appx) on an operating system that does not support Windows 8 apps.
You can’t install an app bundle package (.appxbundle) on an operating system that does not support at
least Windows 8.1 apps. Apps aren't supported on WinPE 4.0, the Windows Server 2012 Server Core
installation option, or on any versions of Windows older than Windows 8 and Windows Server 2012.
To install and run apps on Windows Server 2012, you must install the Desktop Experience.
The /FolderPath option is only supported for app packages based on the .appx format.
/PackagePath must always be used for .appxbundle packages.
Related topics
What is DISM?
DISM Image Management Command-Line Options
Deployment Image Servicing and Management (DISM) Command-Line Options
Sideload Apps with DISM
DISM Application Servicing (.msp) Command-Line
Options
6/6/2017 • 2 min to read • Edit Online
Application servicing command-line options can be used on an offline image to check the applicability of Windows
Installer application patches (.msp files) and to query your offline image for information about installed Windows
Installer applications and application patches (.msp files).
For information about using Deployment Image Servicing and Management (DISM) with app packages, see DISM
App Package (.appx or .appxbundle) Servicing Command-Line Options.
The base syntax for servicing a Windows image using DISM is:
DISM.exe /Image:<path_to image_directory> [dism_global_options] {servicing_option}
[<servicing_argument>]
The following servicing options are available to list Windows Installer applications and .msp application patches,
and to check the applicability of an application patch for an offline Windows image:
DISM.exe /Image:<path_to_directory> [/Check-AppPatch | /Get-AppPatchInfo: | /Get-AppPatches | /Get-
AppInfo | /Get-Apps]
Limitations
/Get-AppPatches and /Get-AppPatchInfo apply only to installed patches (.msp files).
When you determine the applicability of an MSP patch, only the Windows Installer applications for which the patch
is applicable will be displayed. One patch can apply to many installed applications and many patches can apply to
one application.
Related topics
What is DISM?
DISM Image Management Command-Line Options
Deployment Image Servicing and Management (DISM) Command-Line Options
DISM App Package (.appx or .appxbundle) Servicing Command-Line Options
DISM Default Application Association Servicing
Command-Line Options
6/6/2017 • 1 min to read • Edit Online
You can use the default application association-servicing commands to import, export, list, and remove the settings
that specify which application opens a file based on the file name extension or protocol.
The base syntax for servicing a Windows image using DISM is:
DISM.exe {/Image:<path_to_ image_directory> | /Online} [dism_global_options] {servicing_option}
[<servicing_argument>]
The following default application servicing options are available for an offline image.
DISM.exe /image:<path_to_image_directory> [/Get-DefaultAppAssociations | /Import-
DefaultAppAssociations | /Remove-DefaultAppAssociations]
The following default application association servicing options are available for a running operating system.
DISM.exe /Online [/Export-DefaultAppAssociations | /Get-DefaultAppAssociations | Import-
DefaultAppAssociations | Remove-DefaultAppAssociations]
The following table provides a description of how each default application association servicing option can be used.
These options are not case sensitive.
OPTION DESCRIPTION
Related topics
What is DISM?
DISM Image Management Command-Line Options
Deployment Image Servicing and Management (DISM) Command-Line Options
DISM Languages and International Servicing
Command-Line Options
6/6/2017 • 9 min to read • Edit Online
The international commands can be used to change international settings in Windows and Windows
Preinstallation Environment (WinPE) images. You can also query existing settings in an offline or online
Windows image.
The base syntax for servicing a Windows image using the Deployment Image Servicing and Management
(DISM.exe) tool is:
DISM.exe {/Image:<path_to_offline_image_directory> | /Online} [dism_global_options]
{servicing_option} [<servicing_argument>]
There are three types of international servicing commands:
Get commands. Retrieves a report of the international settings for an offline image or a running operating
system.
Set commands. Sets the different international settings for an offline image.
Gen-LangIni commands. Generates the Lang.ini file that is used during Setup.
The following international servicing options are available for an offline image:
DISM.exe /Image:<path_to_offline_image_directory> [/Get-Intl] [/Set-UILang | /Set-UILangFallback |
/Set-SysLocale | /Set-UserLocale | /Set-InputLocale | /Set-AllIntl | /Set-Timezone | /Set-
SKUIntlDefaults | /Set-LayeredDriver] [/Gen-Langini | /Set-SetupUILang | /Distribution]
The following international servicing options are available for a running operating system:
DISM.exe /Online /Get-Intl
The following table provides a description of how each international servicing option can be used. These
options are not case-sensitive.
OPTION/ARGUMENT DESCRIPTION
Note
The user locale is reported only for offline images.
The report does not include this setting for running
operating systems.
Examples:
Dism /online /Get-Intl
Dism /image:C:\test\offline /Get-Intl
Dism /image:C:\test\offline
/distribution:C:\windows_distribution /Get-Intl
Option: /Set-UILang: Sets the default system user interface (UI) language. If
the language is not installed in the Windows image, the
Argument: <language_name> command will fail.
<language_name> specifies the name of the language
to set as the default; for example, ja-JP.
Note
If you install a Language Interface Pack (LIP) and
specify its language as the default UI language, the LIP
language will be set as the system default UI language
(or Install language) and the parent language will be
set as the default UI language.
Example:
Dism /image:C:\test\offline /Set-UILang:fr-FR
OPTION/ARGUMENT DESCRIPTION
Option: /Set-UILangFallback: Sets the fallback default language for the system UI in
the offline Windows image. This setting is used only
Argument: <language_name> when the language specified by the /Set-UILang option
is a partially localized language.
<language_name> specifies the name of the language
to set as the default fallback; for example, en-US.
Example:
Dism /image:C:\test\offline /Set-UILangFallBack:fr-
FR
Important
You cannot set Unicode-only languages as the system
locale. If you try, the /Set-SysLocale option will fail
and the language for non-Unicode programs will not
be changed.
Example:
Dism /image:C:\test\offline /Set-SysLocale:fr-FR
Option: /Set-UserLocale: Sets the "standards and formats" language (also called
user locale) in the offline Windows image. The
Argument: <locale_name> "standards and formats" language is a per-user setting
that determines default sort order and the default
settings for formatting dates, times, currency, and
numbers.
Example:
Dism /image:C:\test\offline /Set-UserLocale:fr-FR
OPTION/ARGUMENT DESCRIPTION
Option: /Set-InputLocale: Sets the input locales and keyboard layouts to use in
the offline Windows image.
Argument: <input_locale>:<keyboard_layout>
The value of the <input_locale>:<keyboard_layout>
pair can be one of the following:
<language_id:keyboard_layout>
For example, 0409:00000409
<locale_name>
For example, if you specify en-US as the local
name, The Set-InputLocale: option also sets the
default keyboard layout defined for this locale.
You can specify more than one value by using
semicolons as separators. This is useful when you want
to include support for multiple keyboards on a single
computer. The first value will be set as the default
keyboard.
The valid keyboard layouts that can be configured on
your computer are listed in the following registry key.
HKEY_LOCAL_MACHINE
\SYSTEM\CurrentControlSet\Control\Keyboard
Layouts
For a list of the values, see Default Input Locales and
Default Keyboard Settings.
Use the hexadecimal value of the language ID and
keyboard layout that you intend to configure.
This parameter is optional.
Example:
Option: /Set-AllIntl: Sets the default system UI language, the language for
non-Unicode programs, the "standards and formats"
Argument: <language_name> language, and the input locales and keyboard layouts to
the specified language in the offline Windows image.
This option specifies the language value for the
following:
UI language
System locale
User locale
Input locale
If used with any of the options that specify the
individual language or locales, then the individual
settings take precedence.
<language_name> specifies the language name and
locale code; for example, en-US, es-ES, or fr-FR.
Example:
Dism /image:C:\test\offline /Set-AllIntl:fr-FR
Option: /Set-TimeZone: Sets the default time zone in a Windows image. Before
setting the time zone, DISM verifies that the specified
Argument: <timezone_name> time zone string is valid for the image.
<timezone_name> specifies the name of the time zone
to use; for example, Pacific Standard Time. For a
complete list of time-zone strings, see the Windows®
Unattended Setup Reference. On a computer that is
running Windows 7, you can use the tzutil command-
line tool to list the time zone for that computer. The
tzutil tool is installed by default on Windows 7.
The name of the time zone must exactly match the
name of the time zone settings in the registry in
HKLM\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\TimeZones</strong>.
If you add a custom time zone to your computer,
you can specify that custom time-zone string.
Example:
Dism /image:C:\test\offline /Set-TimeZone:"W.
Europe Standard Time"
OPTION/ARGUMENT DESCRIPTION
Option: /Set-SKUIntlDefaults: Sets the default system UI language, the language for
non-Unicode programs, the "standards and formats"
Argument: <language_name> language, and the input locales, keyboard layouts, and
time zone values in an offline Windows image to the
default value specified by <language_name>. The /Set-
SKUIntlDefaults option does not change the keyboard
driver for Japanese and Korean keyboards. You must
use the /Set-LayeredDriver option to change this.
Use / Set-SKUIntlDefaults to change all the
international settings in an offline Windows image to
match the default values that are set during retail
installations. For more information about the default
values of each language pack, see Default Input Locales
for Windows Language Packs.
This parameter is optional. If combined with one of the
settings earlier in this section, the individual setting
takes priority.
If the language passed matches a Unicode-only locale
setting, the system locale will not be changed but the
command will not fail.
Example:
Dism /image:C:\test\offline /Set-SKUIntlDefaults:fr-
FR
Note
You will not be prompted for permission to overwrite
an existing Lang.ini file. The existing Lang.ini file will be
overwritten automatically.
Option: /Set-SetupUILang: Defines the default language that will be used by Setup.
If this language cannot be used, Setup automatically
Argument: <language_name> uses English.
This is an optional command. If not used, the default UI
language in the image will be used. If the language is
not present, the first language in the list of present
languages will be used.
Example:
Dism /image:C:\test\offline /Set-SetupUILang:fr-FR
/distribution:C:\windows_distribution
Limitations
The DISM International servicing commands cannot be used on a Windows Vista or a Windows Server 2008
image. For information about servicing Windows Vista and Windows Server 2008 images, see the Windows
Vista SP1 release of the Windows OEM Preinstallation Kit (Windows OPK) or Windows Automated
Installation Kit (Windows AIK).
You cannot use other servicing commands on the same command line with international servicing
commands.
You cannot set a Unicode-only language as the system locale.
The following languages are Unicode-only (Languages are listed in the table in the format: Language -
Country/Region):
Amharic - Ethiopia
Kazakh - Kazakhstan
Odia - India (Odia Script)
Armenian - Armenia
Khmer - Cambodia
Pashto - Afghanistan
Assamese - India
Konkani - India
Punjabi - India (Gurmukhi Script)
Bangla - Bangladesh
Lao - Lao PDR
Sanskrit - India
Bangla - India (Bengali Script)
Malayalam - India (Malayalam Script)
Sinhala - Sri Lanka
Divehi - Maldives
Maltese - Malta
Syriac - Syria
Georgian - Georgia
Maori - New Zealand
Tamil - India
Gujarati - India (Gujarati Script)
Marathi - India
Telugu - India (Telugu Script)
Hindi - India
Mongolian (Mongolian) - PRC
Tibetan - PRC
Inuktitut (Syllabics) - Canada
Nepali - Federal Democratic Republic of Nepal
Yi - PRC
Kannada - India (Kannada Script)
Do not install a language pack after an update.
If you install an update (hotfix, general distribution release [GDR], or service pack [SP]) that contains
language-dependent resources before you install a language pack, the language-specific changes
contained in the update are not applied. Always install language packs before installing updates.
When specifying a time zone by using /Set-TimeZone:<timezone_name> you must use straight
quotation marks for multiple words. For example, /Set-TimeZone:"Pacific Standard Time". If you
copy and paste the time zone name, including quotation marks, from a Microsoft® Word document, the
quotation marks might not be recognized and the command line might fail.
If you are servicing an international image, and your host environment does not support the language in
that image, you might not be able to read an error message that originates from the international image.
Related topics
What is DISM?
DISM Image Management Command-Line Options
Deployment Image Servicing and Management (DISM) Command-Line Options
DISM Capabilities Package Servicing Command-Line
Options
12/18/2017 • 1 min to read • Edit Online
Windows 10 for desktop editions (Home, Pro, Enterprise, and Education) only. Use Deployment Image Servicing
and Management (DISM.exe) to service Windows capabilities. Capabilities are a Windows package type allows
you to request services like .NET or languages without specifying the version. Use DISM to search multiple
sources like Windows Update or your corporate servers to find and install the latest version.
To see the available capabilities, go to Features On Demand.
OPTIONS DESCRIPTION
/Remove-Capability Example:
/CapabilityName:<capability_name> Dism /Online /Remove-Capability
/CapabilityName:Language.Basic~~~en-US~0.0.1.0
Example:
Dism /Image:C:\test\offline /Remove-Capability
/CapabilityName:Language.Basic~~~en-US~0.0.1.0
Related topics
Features On Demand
DISM - Deployment Image Servicing and Management Technical Reference for Windows
What is DISM?
DISM Global Options for Command-Line Syntax
DISM Operating System Package Servicing Command-Line Options
DISM Languages and International Servicing Command-Line Options
DISM Windows Edition-Servicing Command-Line
Options
3/2/2018 • 3 min to read • Edit Online
You can use the Windows edition-servicing commands to change one edition of Windows to a higher edition in
the same edition family. The edition packages for each potential target edition are staged in a Windows image.
This is referred to as an edition-family image. Because the target editions are staged, you can service a single
image, and the updates will be applied appropriately to each edition in the image. This can help reduce the
number of images that you have to manage, but it might increase the factory time or end-user time that must be
spent in the specialize configuration pass.
Offline changes do not require a product key. If you change to a higher edition using offline servicing, you can
add the product key using one of the following methods:
Enter the product key during the out-of-box experience (OOBE).
Use an unattended answer file to enter the product key during the specialize configuration pass.
Use Deployment Image Servicing and Management (DISM) and the Windows edition-servicing command-
line option /Set-ProductKey after you set the edition offline.
Command-line Syntax
The base syntax for servicing a Windows image using DISM is:
DISM.exe {/Image:<path_to_image_directory> | /Online} [dism_global_options] {servicing_option}
[<servicing_argument>]
You can use the following edition-servicing options on an offline image to list editions or to change a Windows
image to a higher edition:
DISM.exe /Image:<path_to_image_directory> {/Get-CurrentEdition | /Get-TargetEditions | /Optimize-
Image /WIMBoot | /Set-Edition | /Set-ProductKey:<product_key>}
The following edition-servicing options are available for a running Windows operating system:
DISM.exe /Online {/Get-CurrentEdition | /Get-TargetEditions | /Set-ProductKey:<product_key> | /Set-
Edition:<target_edition> {/GetEula:< path> | /AcceptEula /ProductKey:<product_key>}}
The following table provides a description for how each edition-servicing option can be used. These options are
not case-sensitive.
OPTION DESCRIPTION
Important
You should not use the /Set-Edition option on an
image that has already been changed to a higher
edition. It is recommended that you use this option on
the lowest edition available in the edition family.
Limitations
If you do not enter the product key when you set the edition of your offline image, you must either enter
the product key during OOBE, or use an unattended answer file to enter the product key during the
specialize configuration pass.
You cannot use edition-servicing commands on a Windows Preinstallation Environment (Windows PE)
image.
To maintain edition-specific customizations, you should apply edition-specific answer files after the edition
upgrade.
If you want to run the /Set-Edition option against a 64-bit image with more than 30 language packs, you
must run it from a 64-bit computer. Otherwise, you might receive an out-of-memory error. This limitation
only exists if you are manipulating a 64-bit image from a 32-bit computer. This limitation does not exist
when you run this option on a computer that matches the architecture of the image.
You cannot set a Windows image to a lower edition. The lowest edition will not appear when you run the
/Get-TargetEditions option.
You should not use the /Set-Edition option on an image that has already been changed to a higher
edition.
Related topics
What is DISM?
DISM Image Management Command-Line Options
Deployment Image Servicing and Management (DISM) Command-Line Options
Change the Windows Image to a Higher Edition Using DISM
DISM Driver Servicing (.inf ) Command-Line Options
7/13/2017 • 3 min to read • Edit Online
Use DISM with INF-style drivers to add, remove, or list drivers to an online or offline Windows image (.wim).
Microsoft Windows Installer or other driver package types (such as .exe files) are not supported.
You can specify a directory where the driver INF files are located, or you can point to a driver by specifying the
name of the INF file.
The base syntax for servicing a Windows image using DISM is:
DISM.exe {/Image:<path_to_ image_directory> | /Online} [dism_global_options] {servicing_option}
[<servicing_argument>]
The following driver servicing options are available for an offline image.
DISM.exe /image:<path_to_image_directory> [/Get-Drivers | /Get-DriverInfo | /Add-Driver | /Remove-
Driver | /Export-Driver]
The following driver servicing options are available for a running operating system.
DISM.exe /Online [/Get-Drivers | /Get-DriverInfo | /Export-Driver]
The following table provides a description of how each driver servicing option can be used. These options are not
case sensitive.
OPTION/ARGUMENT DESCRIPTION
Warning
Removing a boot-critical driver package can make the
offline Windows image unbootable.
Limitations
The driver servicing command supports only .inf files. Windows Installer or other driver package types (such
as .exe files) are not supported.
Drivers are installed in the order that they are listed in the command line. In the following example, 1.inf,
2.inf, and 3.inf will be installed in the order that they are listed in the command line.
Related topics
What is DISM?
DISM Image Management Command-Line Options
Deployment Image Servicing and Management (DISM) Command-Line Options
DISM Unattended Servicing Command-Line
Options
6/6/2017 • 2 min to read • Edit Online
If you are installing multiple packages to a Windows® image, use DISM to apply an unattend.xml answer file to
the image. Some packages require other packages to be installed first. If there is a dependency requirement, the
best way to ensure the correct order of the installation is by using an answer file. When you use DISM to apply
an unattend.xml answer file to an image, the unattended settings in the offlineServicing configuration pass are
applied to the Windows image.
The base syntax for servicing a Windows image using DISM is:
DISM.exe {/Image:<path_to_ image_directory> | /Online} [dism_global_options] {servicing_option}
[<servicing_argument>]
The following servicing options are available to apply an unattend.xml answer file to an offline Windows image:
DISM.exe /Image:<path_to_ image_directory> /Apply-Unattend:<path_to_unattend.xml>
The following servicing options are available to apply an unattend.xml answer file to a running operating system:
DISM.exe /Online /Apply-Unattend:<path_to_unattend.xml>
The following table provides a description of how an unattended servicing option can be used. These options are
not case sensitive.
OPTION DESCRIPTION
Limitations
You cannot use other servicing commands on the same command line with unattended servicing
commands.
Only a single unattend.xml answer file can be specified on any command line.
When you add packages to an image using an unattended answer file, the applicability of the package will
not be checked. The answer file will be applied, and the operation will complete even if there are packages
specified in the answer file which do not apply to the image. If you have to check the applicability of a
package when you add it to an image, use the DISM command together with the /Add-Package option
without the /ignorecheck option. For more information, see DISM Operating System Package Servicing
Command-Line Options.
If you are updating device drivers using an unattended answer file, you must apply the answer file to an
offline image.
When you use DISM.exe to apply an answer file to a running operating system, the answer file should only
contain elements in the offlineServicing configuration pass. This is because some settings in the
Specialize configuration pass might be applied to the operating system. We recommend that the answer
file that you use with DISM only contain settings in the offlineServicing configuration pass.
The recommended way to author answer files is to create them in Windows System Image Manager
(Windows SIM). However, if you use a manually authored answer file, you must validate the answer file in
Windows SIM to verify that it works. For more information, see Best Practices for Authoring Answer Files.
When you apply an answer file by using DISM, the answer file is not cached on the target computer.
Related topics
What is DISM?
DISM Image Management Command-Line Options
DISM Languages and International Servicing Command-Line Options
DISM Operating System Package Servicing Command-Line Options
DISM Windows Edition-Servicing Command-Line Options
DISM Driver Servicing Command-Line Options
DISM Windows PE Servicing Command-Line
Options
6/6/2017 • 2 min to read • Edit Online
You can mount a Windows Preinstallation Environment (Windows PE) image and add or remove packages,
drivers, and language packs using the appropriate driver, package, or international-servicing commands. There are
also commands that are specific to a Windows PE image, which can be used to prepare the Windows PE
environment, enable profiling, list packages and prepare the Windows PE image for deployment.
Important
Windows PE profiling functionality is removed beginning with Windows 8.1.
The base syntax for servicing a Windows PE image is:
DISM.exe /Image:<path_to_image_directory> [dism_global_options] {servicing_option}
[<servicing_argument>]
In addition to the Deployment Image Servicing and Management (DISM) options, the following Windows PE
servicing options are available for an offline image.
DISM.exe /Image: <path_to_image_directory> [/Get-PESettings | /Get-Profiling | /Get-ScratchSpace | /Get-
TargetPath | /Set-ScratchSpace:<size_of_ScratchSpace> | /Set-TargetPath :<target_path> | /Enable-
Profiling | /Disable-Profiling | /Apply-Profiles:<path_to_myprofile.txt>]
Important
These options cannot be used with an online, running version of Windows PE. You must specify a Windows PE
image using the /Image:<path_to_image_directory> option.
The following table provides a description for how each Windows PE servicing option can be used on a Windows
PE image. These options are not case sensitive.
OPTION DESCRIPTION
/Set-TargetPath :<target_path> For hard disk boot scenarios, this option sets the location
of the Windows PE image on the disk.
Note the following limitations when setting the target
path:
The path must be at least three characters and no
longer than 32 characters
The path must start with a letter (any letter from
C to Z)
The drive letter must be followed by *:*
The remainder of the path must not contain any
invalid characters, such as Unicode characters
The path must be absolute, no "." or ".." elements
The path must not contain any blank spaces or "\"
For example:
Dism /image:C:\test\offline /Set-TargetPath:X:
</strong>
/Enable-Profiling Enables profiling (file logging) so you can create your own
profiles. By default, profiling is disabled. For example:
Dism /image:C:\test\offline /Enable-profiling
/Disable-Profiling Turns off the file logging that is used to create a profile.
Dism /image:C:\test\offline /Disable-Profiling
Related topics
Windows PE for Windows 10
Wpeutil Command-Line Options
What is DISM?
DISM Image Management Command-Line Options
Deployment Image Servicing and Management (DISM) Command-Line Options
DISM Reference (Deployment Image Servicing and
Management)
6/6/2017 • 1 min to read • Edit Online
Deployment Image Servicing and Management (DISM) is a command-line tool that is used to service Windows®
images offline before deployment. You can use it to install, uninstall, configure, and update Windows features,
packages, drivers, and international settings. Subsets of the DISM servicing commands are also available for
servicing a running operating system. For more information, see What is DISM?.
In This Section
Deployment Image Servicing and Management (DISM) Lists the command-line options for managing and
Command-Line Options servicing a Windows image with the Dism.exe tool.
DISM Configuration List and WimScript.ini Files Describes how to create a configuration list to exclude
files and folders from an image capture or compression.
Deployment Image Servicing and Management (DISM) Describes some best practices related to servicing a
Best Practices Windows image. We recommend that you implement
these practices wherever possible.
Service a Windows PE Image with DISM Describes information specific to using DISM to configure
a Windows PE image.
Configure a Windows Repair Source Describes how to configure and maintain a Windows
image repair source to use within your network. The
repair source can be used to restore Windows features or
to repair a corrupted Windows image.
Related topics
What is DISM?
DISM How-to Topics (Deployment Image Servicing and Management)
Deployment Image Servicing and Management
(DISM) API
12/15/2017 • 1 min to read • Edit Online
Purpose
The Deployment Image Servicing and Management (DISM) API allows you to build customized solutions on the
DISM platform. You can use the DISM API to install, uninstall, configure, and update Windows features, packages,
and drivers in a Windows image.
Developer Audience
The DISM API is designed for use by C/C++ programmers.
Run-Time Requirements
DISM API can be used on any operating system supported by the Windows® Assessment and Deployment Kit
(Windows ADK). For more information, see the Windows ADK Technical Reference.
For more information, see Using the DISM API.
Additional Reference
The DISM platform also includes a command-line tool and Windows PowerShell cmdlets. For more information
about the DISM tool, see DISM Platform Technical Reference. For more information about DISM PowerShell
cmdlets, see DISM PowerShell Reference.
In This Section
TOPIC DESCRIPTION
Using the DISM API Review requirements, best practices, and other
considerations for using the DISM API.
DISM API Troubleshooting Use the DISM API log file to troubleshoot your custom
application.
DISM API Reference Find a function or object defined by the DISM API.
Related topics
DISM Platform Technical Reference
DISM PowerShell Reference
DISM Configuration List and WimScript.ini Files
7/13/2017 • 2 min to read • Edit Online
The Deployment Image Servicing and Management (DISM) tool is a command-line tool that you can use to
capture and apply Windows images. You can create a configuration list file to determine the following:
Which files and folders must be excluded from the capture process when you use the /Capture-Image
option with the DISM tool.
Which folders, files, and file types must be excluded from the compression process when you use the
/Compress argument.
The /ConfigFile argument enables you to customize specific compression, capture, and boundary alignment
actions for each file and folder when you capture an image using DISM.exe. You can create a configuration list (.ini)
file by using a text editor, such as Notepad.
SECTION DESCRIPTION
[CompressionExclusionList] Enables you to define the specific files and folders, and
also to specify file types, to exclude when you use the
/Compress argument.
Note
You can use file or folder matching to exclude a file
from compression. You can provide a full path match,
or you can use wildcard characters (*). For example, you
can use \WINDOWS\inf*.pnf to match a specific type
of file, or \WINDOWS\inf* to match a whole folder.
[CompressionExclusionList]
*.mp3
*.zip
*.cab
\WINDOWS\inf\*.pnf
myfolder\*.txt
You can use a preceding backslash to limit file-matching and directory-matching relative to the root
directory. For example, you can use this exclusion list:
\myfolder
\folder\subfolder
This list will exclude the following files and directories when you capture the "C:\" drive:
C:\myfolder
C:\folder\subfolder
However, DISM will not exclude files or directories that are contained in the following example.
C:\main\myfolder
C:\data\folder\subfolder
You can override the default exclusion list by using the [ExclusionException] section. For example:
[ExclusionException]
\pagefile.sys
"\System Volume Information"
If an explicit [ExclusionException] section is provided in the WIM configuration file, it will always take
precedence over the [Exclusion List] section.
You cannot override the default compression exclusion list by using the [ExclusionException] section.
or
where <configuration list> provides the complete directory location for the configuration file. For example,
c:\imaging\configuration_list.ini . You must use either the /Capture-Image option to create a new .wim file or
the /Append-Image option to append an existing .wim file.
Related topics
DISM Image Management Command-Line Options
Deployment Image Servicing and Management
(DISM) Best Practices
6/6/2017 • 6 min to read • Edit Online
This section describes some best practices related to servicing a Windows® image. We recommend that you
implement these practices wherever possible.
Servicing an Image
The best way to service a Windows image is offline with the DISM tool. DISM can be used to install, uninstall,
configure, and update drivers, features, and packages in Windows images and Windows Preinstallation
Environment (WinPE) images without booting the image. For more information, see DISM - Deployment Image
Servicing and Management Technical Reference for Windows.
You can use the /Commit-Image option at any point during servicing to save the changes that you have made so
far. You can recover a corrupted image more easily with the /Cleanup-Image /RestoreHealth option if you have
committed your changes often.
You can mount and modify multiple images on a single computer. However, performance may slow down on
some functions, such as /Unmount-Image, depending on the memory available on the computer. As a best
practice, you should not mount more than 20 images at the same time.
Note
If you have split a .wim file into smaller files for spanning across multiple media, you cannot mount the image for
servicing.
Package Locations
Do not put a package that you intend to install directly at the root of a partition on a Windows installation.
Related topics
DISM - Deployment Image Servicing and Management Technical Reference for Windows
Understanding Servicing Strategies
Service a Windows PE Image with DISM
6/6/2017 • 1 min to read • Edit Online
You can service a Windows® Preinstallation Environment (Windows PE) image and add or remove packages,
drivers, and language packs just as you would any Windows image using the appropriate driver, package, or
international-servicing commands in Deployment Image Servicing and Management (DISM.exe). There are also
commands that are specific to a Windows PE image, which you can use to prepare the Windows PE environment,
enable profiling, list packages and prepare the Windows PE image for deployment.
For more information about how to customize a Windows PE image, see WinPE: Mount and Customize. For more
information about DISM commands that are specific to a Windows PE image, see DISM Windows PE Servicing
Command-Line Options.
Related topics
WinPE for Windows 10
DISM Supported Platforms
6/6/2017 • 3 min to read • Edit Online
The Windows 10 version of Deployment Image Servicing and Management (DISM) is available in Windows 10
for desktop editions (Home, Pro, Enterprise, and Education), Windows Server 2016, and Windows Preinstallation
Environment (WinPE) for Windows 10.
To service Windows 10 images, you’ll need the Windows 10 version of DISM, otherwise the image may become
corrupted.
To use the Windows 10 version of DISM onto a previous version of Windows, install the Windows Assessment
and Deployment Kit (ADK) from this website, and install the Deployment Tools. Then, start the Deployment
and Imaging Tools Environment to run DISM commands.
To use the Windows 10 version of DISM with a previous version of Windows PE, see Install Windows 10 using a
previous version of Windows PE.
Note, newer DISM features don’t always work when servicing images of previous versions of Windows. To learn
more, see the DISM Reference.
Supported Platforms
The host deployment environment is the operating system where DISM runs. The target image is the image that
is being serviced.
TARGET IMAGE:
WINDOWS 8.1,
WINDOWS SERVER TARGET IMAGE: TARGET IMAGE:
TARGET IMAGE: 2016, WINDOWS WINDOWS 8, WINDOWS 7,
WINDOWS 10 OR SERVER 2012 R2, OR WINDOWS SERVER WINDOWS SERVER
HOST DEPLOYMENT WINPE FOR WINDOWS WINPE 5.0 (X86 OR 2012, OR WINPE 4.0 2008 R2, OR WINPE 3.0
ENVIRONMENT 10 X64) (X86 OR X64) (X86 OR X64)
WinPE for Supported: X64 Supported: X64 Supported: X64 Supported: X64
Windows 10 x64 target image only target image only target image only target image only
WinPE 5.0 x64 Supported, using Supported: X64 Supported: X64 Supported: X64
the Windows 10 target image only target image only target image only
version of DISM:
X64 target image
only
TARGET IMAGE:
WINDOWS 8.1,
WINDOWS SERVER TARGET IMAGE: TARGET IMAGE:
TARGET IMAGE: 2016, WINDOWS WINDOWS 8, WINDOWS 7,
WINDOWS 10 OR SERVER 2012 R2, OR WINDOWS SERVER WINDOWS SERVER
HOST DEPLOYMENT WINPE FOR WINDOWS WINPE 5.0 (X86 OR 2012, OR WINPE 4.0 2008 R2, OR WINPE 3.0
ENVIRONMENT 10 X64) (X86 OR X64) (X86 OR X64)
WinPE 4.0 x64 Supported, using Supported, using Supported: X64 Supported: X64
the Windows 10 the Windows 8.1 target image only target image only
version of DISM: version of DISM
X64 target image or later: X64
only target image only
WinPE 3.0 x86 Supported, using Supported, using Supported, using Supported
the Windows 10 the Windows 8.1 the Windows 8
version of DISM version of DISM version of DISM
or later or later
WinPE 3.0 x64 Supported, using Supported, using Supported, using Supported: X64
the Windows 10 the Windows 8.1 the Windows 8 target image only
version of DISM: version of DISM version of DISM
X64 target image or later: X64 or later: X64
only target image only target image only
Related topics
Install the Windows 10 Assessment and Deployment Kit (ADK)
DISM Reference (Deployment Image Servicing and Management)
Install Windows 10 using a previous version of Windows PE
Configure a Windows Repair Source
6/6/2017 • 4 min to read • Edit Online
You can use Group Policy to specify a Windows image repair source to use within your network. The repair
source can be used to restore Windows features or to repair a corrupted Windows image.
Features on demand enables you to remove an optional feature from a Windows® image and then restore it
later. You can disable optional features and remove files associated with those features from a Windows image
using the Deployment Image Servicing and Management (DISM) tools. When you use the /Remove argument
with the DISM /Disable-Feature option, the manifest files for the feature or Server role is maintained in the
image. However, all other files for the feature are removed. This enables you to store, download, and deploy
smaller images without losing features. Once the image has been deployed, users can enable the feature on their
computers at any time by using features on demand to retrieve the required files from the repair source. For
more information, see Enable or Disable Windows Features Using DISM.
Automatic corruption repair provides files to repair Windows if the operating system has become corrupted.
Users can also use a specified repair source on your network or use Windows Update to retrieve the source files
that are required to enable a feature or to repair a Windows image. For more information, see Repair a Windows
Image.
Related topics
What is DISM?
Enable or Disable Windows Features Using DISM
Repair a Windows Image
DISM Operating System Package Servicing Command-Line Options
Sysprep (System Preparation) Overview
6/6/2017 • 5 min to read • Edit Online
Sysprep (System Preparation) prepares a Windows installation (Windows client and Windows Server) for
imaging, allowing you to capture a customized installation. Sysprep removes PC-specific information from a
Windows installation, "generalizing" the installation so it can be installed on different PCs. With Sysprep you can
configure the PC to boot to audit mode, where you can make additional changes or updates to your image. Or,
you can configure Windows to boot to the Out-of-Box Experience (OOBE).
Sysprep is part of the Windows image, and is used during audit mode.
Feature description
Sysprep provides the following features:
Removes PC-specific information from the Windows image, including the PC’s security identifier (SID).
This allows you to capture the image and apply it to other PCs. This is known as generalizing the PC.
Uninstalls PC-specific drivers from the Windows image.
Prepares the PC for delivery to a customer by setting the PC to boot to OOBE.
Allows you to add answer file (unattend) settings to an existing installation.
Practical applications
Sysprep helps you solve business goals such as:
Helps you manage multiple PCs by creating a generic image that can be used across multiple hardware
designs.
Deploy PCs by capturing and deploying images with unique security identifiers.
Fine-tune setup of individual PCs by adding apps, languages, or drivers in audit mode. For more
information, see Audit Mode Overview.
Provide more reliable PCs by testing in audit mode before delivering them to customers.
Dependencies
You must run Windows Setup before you use Sysprep.
You need a tool to capture an image of the installation, such as DISM - Deployment Image Servicing and
Management Technical Reference for Windows or other disk-imaging software.
Note
When you copy Windows images between PCs, the reference and destination PCs may not have to have
compatible hardware abstraction layers (HALs). The /detecthal option in the Boot Configuration Data (BCD)
enables a system that has already run Sysprep to install the correct HAL.
Limitations
Sysprep has the following limitations:
The security identifier (SID) is only replaced on the operating system volume when you execute Sysprep. If
a single PC has multiple operating systems, you must run Sysprep on each image individually.
In some cases, customized applications that you install before you recapture the Windows image may
require a consistent drive letter. Some applications store paths that include the system's drive letter.
Uninstallation, servicing, and repair scenarios may not function correctly if the system's drive letter does
not match the drive letter that the application specifies.
The Plug and Play devices on the reference and destination PCs do not have to be from the same
manufacturer. These devices include modems, sound cards, network adapters, and video cards. However,
the installation must include the drivers for these devices.
Not all server roles support Sysprep. If you generalize a Windows Server installation that has specific
server roles configured, those server roles may not continue to function after the imaging and deployment
process. For more information, see Sysprep Support for Server Roles.
If you run Sysprep on an NTFS file system partition that contains encrypted files or folders, the data in
those folders becomes completely unreadable and unrecoverable.
The Sysprep tool runs only if the PC is a member of a workgroup, not a domain. If the PC is joined to a
domain, Sysprep removes the PC from the domain.
If a PC is joined to a domain, and the Group Policy of that domain assigns a strong account password
policy to the PC, all user accounts will require strong passwords. Running Sysprep or OOBE does not
remove the strong password policy.
Warning
If you do not assign a strong password to a user account before you run Sysprep or OOBE, you may not be
able to log on to the PC. We recommend that you always use strong passwords for your user accounts.
Unsupported Scenarios
The following scenarios are not supported:
Moving or copying a Windows image to a different PC without generalizing the PC is not supported.
Using a different version of the Sysprep tool to configure an image is not supported. You must use only
the version of the Sysprep tool that is installed with the Windows image that you intend to configure.
Sysprep is installed with every version of Windows. You must always run Sysprep from the
%WINDIR%\system32\sysprep directory.
If you are using a version of Windows earlier than Windows 10, Version 1607, using the Sysprep tool on
upgrade installation types, or to reconfigure an existing installation of Windows that has already been
deployed is not supported. In this case, Sysprep must be used only to configure new installations of
Windows. You can run Sysprep an unlimited number of times to build and configure your installation of
Windows.
Automating Sysprep by using a Microsoft-Windows-Deployment\RunSynchronous command is not
supported. However, you can use the Microsoft-Windows-Deployment\Generalize setting to prepare the
PC for imaging after installation.
Running VM mode outside a virtual machine (VM) is unsupported. You cannot use VM mode to prepare a
VHD for deployment to any PC.
Sysprep cannot be run under the context of a System account. Running Sysprep under the context of
System account by using Task Scheduler or PSExec, for example, is not supported.
See also
The following table contains links to resources related to this scenario.
The System Preparation (Sysprep) tool is used to change Windows® images from a generalized state to a
specialized state, and then back to a generalized state. A generalized image can be deployed on any computer. A
specialized image is targeted to a specific computer. You must reseal, or generalize, a Windows image before you
capture and deploy the image. For example, when you use the Sysprep tool to generalize an image, Sysprep
removes all system-specific information and resets the computer. The next time that the computer restarts, your
customers can add user-specific information through Out-Of-Box Experience (OOBE) and accept the Microsoft
Software License Terms.
Sysprep.exe is located in the %WINDIR%\system32\sysprep directory on all Windows installations.
If you transfer a Windows image to a different computer, you must run the Sysprep command together with the
/generalize option, even if the other computer has the same hardware configuration. The Sysprep /generalize
command removes unique information from your Windows installation so that you can reuse that image on a
different computer. For more information, see Sysprep (Generalize) a Windows installation.
Sysprep Executable
Sysprep.exe is the main program that calls other executable files that prepare the Windows installation.
Sysprep.exe is located in the %WINDIR%\system32\sysprep directory on all Windows installations. If you use
the command line instead of the System Preparation Tool GUI, you must first close the GUI and then run
Sysprep from the %WINDIR%\system32\sysprep directory. You must also run Sysprep on the same version of
Windows that you used to install Sysprep.
Important
Beginning with Windows 8.1, the Sysprep user interface is deprecated. The Sysprep UI will continue to be
supported in this release however it may be removed in a future release. We recommend that you update your
Windows deployment workflow to use the Sysprep command line. For more information about the Sysprep
Command line tool, see Sysprep Command-Line Options.
Generalize %WINDIR%\System32\Sysprep\Panther
Specialize %WINDIR%\Panther</strong>
To deploy a Windows image to different PCs, you have to first generalize the image to remove computer-
specific information such as installed drivers and the computer security identifier (SID). You can either use
Sysprep by itself or Sysprep with an unattend answer file to generalize your image and make it ready for
deployment.
Instead of using the Microsoft Store to update your apps, you should sideload updates to your line-of-business
apps, provision offline-licensed Microsoft Store for Business apps for all users, or have end-users update their
apps by using the Microsoft Store on their destination PCs. If Microsoft Store access in a managed environment
is disabled by an IT administrator, end-users will not be able to update the Microsoft Store apps.
For more information about sideloading line-of-business Microsoft Store apps, see Sideload Apps with DISM
and Customize the Start Screen.
Generalize an image
Generalize from Audit Mode
To generalize an image, you have to first boot into Audit Mode. You can boot into Audit Mode using an
unattend file or from the Out-Of-Box Experience (OOBE) screen. You can read about the different ways of
booting into Audit Mode at Boot Windows to Audit Mode or OOBE.
1. Boot a PC into Audit Mode. When Windows boots into Audit Mode, System Preparation Tool will
appear on the desktop. You can choose to either close the System Preparation Tool window or allow it
to remain open.
2. Customize Windows by adding drivers, changing settings, and installing programs. Do not install any
Microsoft Store apps using the Microsoft Store.
3. Run Sysprep.
If the System Preparation Tool window is still open, click Generalize, click Shutdown, and then
click OK to generalize the image and shut down the PC.
-or-
Use Sysprep from Command Prompt. Run %WINDIR%\system32\sysprep\sysprep.exe to open the
System Preparation Window. You can also use the Sysprep command together with the
/generalize, /shutdown, and /oobe options. See Sysprep command-line options to see
available options.
NOTE
If you are generalizing a VHD that will be deployed as a VHD on the same virtual machine or hypervisor,
use the /mode:vm option with the Sysprep command-line.
-or-
To generalize the system, and have it boot into Audit Mode, use the Microsoft-Windows-Deployment |
Reseal setting to the oobeSystem configuration pass. Set Mode to Audit.
Related topics
Sysprep Process Overview
Sysprep Command-Line Options
Sysprep Support for Server Roles
Work with Product Keys and Activation
Customize the Default User Profile by Using
CopyProfile
2/6/2018 • 5 min to read • Edit Online
You can use the CopyProfile setting to customize a user profile and then copy that profile to the default user
profile. Windows uses the default user profile as a template to assign a profile to each new user. By customizing the
default user profile, you can configure settings for all user accounts that are created on the computer. By using
CopyProfile , you can customize installed applications, drivers, desktop backgrounds, internet explorer settings, and
other configurations. Note that some settings are not preserved by using CopyProfile .
NOTE
Using CopyProfile for Start menu customization isn't supported. Here are the ways to manage custom Start layouts in
Windows 10:
OEMs can use layoutmodification.xml. See Customize the Start layout for more information.
IT pros can use the following resources learn about managing the Windows 10 Start Menu:
Customize Windows 10 Start and taskbar with Group Policy
Windows 10 Start Layout Customization
IMPORTANT
Don't use a domain account, because the CopyProfile setting runs after the computer is removed from the domain
when you run Sysprep. As a result, you'll lose any settings that you configured in a domain. If you change the default
user profile and then join the computer to a domain, the customizations that you made to the default user profile will
appear on new domain accounts.
2. Customize the built-in administrator account by installing applications, desktop shortcuts, and other settings.
IMPORTANT
There is a limit to the number of provisioned Windows Runtime-based apps that you can install. However you can
create scripts to install additional non-provisioned apps. For more information, see Sideload Apps with DISM.
3. After your customizations are completed, insert the media that contains the CopyProfile answer file in the
reference computer. For example, you can copy the answer file to a USB drive.
4. On the reference computer, open an elevated command prompt, and then type this command:
where F is the letter of the USB flash drive or other removable media. The Sysprep tool removes computer-
specific information from the image, while preserving the user profile settings that you configured. For more
information, see Sysprep (Generalize) a Windows installation.
After the image is generalized, the computer shuts down, capture the image by booting to Windows PE and then
capture the Windows installation by using DISM. For more information, see WinPE: Create USB Bootable drive and
Capture Images of Hard Disk Partitions Using DISM. After the image is captured, you can deploy it to a destination
computer by using DISM. For more information, see Apply Images Using DISM.
IMPORTANT
Apps based on the Windows Runtime won't start in audit mode because audit mode uses the built-in administrator account.
To run Windows Runtime-based apps you must modify a registry key before you can validate your Windows installation in
audit mode.
Troubleshooting CopyProfile
If the user profile settings aren't successfully copied:
1. Make sure that you set the CopyProfile setting only once during the deployment process.
2. When you customize user settings, only use only the built-in administrator account on the computer to
avoid accidentally copying settings from the wrong profile.
3. Confirm that you didn't use a domain account.
4. Verify that there are no additional user accounts other than the built-in administrator account that you
configured:
a. Click Start, and then type Control Panel.
b. Click Control Panel, and then click Add or remove user accounts.
c. Select any additional user account other than the built-in administrator account that you configured,
and then delete it.
NOTE
Delete all other user accounts on the computer before you customize the built-in administrator account.
5. Make sure that non-provisioned Windows Runtime-based apps that are stored in the tile layout are installed
within two hours of user logon to preserve the tile layout on the Start screen, when apps are registered after
the new user first logs on.
6. Some settings can be configured only by using the CopyProfile unattend setting, and other settings can be
configured by using Group Policy.
Use Group Policy to configure settings that are reset by the new user logon process. You can also
create scripts to define these user settings.
-or-
Use the CopyProfile unattend setting instead. For more information, see Unattended Windows Setup
Reference.
Related topics
Sysprep (System Preparation) Overview
Sysprep Process Overview
Sysprep Command-Line Options
Use Answer Files with Sysprep
7/7/2017 • 4 min to read • Edit Online
You can use an answer file together with the System Preparation (Sysprep) tool to configure unattended Windows
Setup settings. This topic describes some considerations and processes for using answer files together with
Sysprep. For more information about Windows components and settings that you can add to an answer file, see
the Unattended Windows Setup Reference.
Related topics
Sysprep (System Preparation) Overview
Sysprep Command-Line Options
Sysprep Support for Server Roles
Sysprep Process Overview
Deployment Troubleshooting and Log Files
Sysprep Command-Line Options
6/6/2017 • 3 min to read • Edit Online
Run Sysprep to prepare a Windows installation to be captured. This topic describes the command-line syntax for
the System Preparation (Sysprep) tool.
If you intend to create an image of an installation for deployment to a different computer, you must run the
Sysprep command together with the /generalize option, even if the other computer has the same hardware
configuration. The Sysprep /generalize command removes unique information from your Windows installation
so that you can safely reuse that image on a different computer. The next time that you boot the Windows image,
the specialize configuration pass runs.
OPTION DESCRIPTION
Sysprep /audit
Important
You can only run VM mode from inside a VM.
/reboot Restarts the computer. You can use this option to audit
the computer and to verify that the first-run experience
operates correctly.
Important
You must use the Sysprep /generalize command to generalize a complete Windows installation before you can
use the installation for deployment to a new computer, whether you use imaging, hard disk duplication, or
another method. Moving or copying a Windows image to a different computer without running the Sysprep
/generalize command is not supported.
Related topics
Sysprep (System Preparation) Overview
Sysprep Process Overview
Sysprep (Generalize) a Windows installation
Sysprep Support for Server Roles
Use Answer Files with Sysprep
Sysprep Support for Server Roles
6/6/2017 • 2 min to read • Edit Online
Many common server roles support the System Preparation tool (Sysprep). However, if you run the Sysprep
command together with the /generalize option against an installation of a server, and you are using an
unsupported server role, those roles may not function after the imaging and deployment process is completed.
Therefore, you must enable and configure any server roles that do not support Sysprep after you have performed
the imaging and deployment process.
The following table lists server roles and specifies whether the roles support Sysprep.
Active Directory No No No
Certificate Services (AD
CS)
Active Directory No No No
Federation Services (AD
FS)
Active Directory No No No
Lightweight Directory
Services (AD LDS)
Fax Server No No No
⁽¹⁾ NPAS includes Health Registration Authority (HRA), Network Policy Server (NPS), and Host Credential
Authorization Protocol (HCAP).
⁽²⁾ In Windows Server 2008 R2, Print Services was renamed Printing and Document Services.
⁽³⁾ In Windows Server 2008 R2, Terminal Services was renamed Remote Desktop Services, which is also known
as Remote Desktop Session Host.
⁽⁴⁾ UDDI Services was not included in Windows Server 2008 R2.
⁽⁵⁾ Volume Activation Services is new for Windows Server 2012.
⁽⁶⁾ You must uninitialize the server that has the Windows Deployment Services role installed before you run
Sysprep. You can uninitialize a server by using the wdsutil /uninitialize-server command.
Related topics
Sysprep (System Preparation) Overview
Sysprep Process Overview
Sysprep Command-Line Options
Sysprep (Generalize) a Windows installation
Windows PE (WinPE)
6/6/2017 • 4 min to read • Edit Online
Windows PE (WinPE) for Windows 10 is a small operating system used to install, deploy, and repair
Windows 10 for desktop editions (Home, Pro, Enterprise, and Education), Windows Server 2016, and other
Windows operating systems. From Windows PE, you can:
Set up your hard drive before installing Windows.
Install Windows by using apps or scripts from a network or a local drive.
Capture and apply Windows images.
Modify the Windows operating system while it's not running.
Set up automatic recovery tools.
Recover data from unbootable devices.
Add your own custom shell or GUI to automate these kinds of tasks.
Hardware requirements
Windows PE has the same requirements as Windows with these exceptions:
No hard drive is required. You can run Windows PE entirely from memory.
The base version requires only 512MB of memory. (If you add drivers, packages, or apps, you'll need
more memory.)
In order to boot Windows PE directly from memory (also known as RAM disk boot), a contiguous portion
of physical memory (RAM) which can hold the entire Windows PE (WIM) image must be available. To
optimize memory use, manufacturers should ensure that their firmware reserves memory locations
either at the beginning or at the end of the physical memory address space.
The 32-bit version of Windows PE can boot 32-bit UEFI and BIOS PCs, and 64-bit BIOS PCs.
The 64-bit version of Windows PE can boot 64-bit UEFI and BIOS PCs.
Limitations
Windows PE is not a general-purpose operating system. It may not be used for any purpose other than
deployment and recovery. It should not be used as a thin client or an embedded operating system. There are
other Microsoft products, such as Windows Embedded CE, which may be used for these purposes.
To prevent its use as a production operating system, Windows PE automatically stops running the shell and
restarts after 72 hours of continuous use. This period is not configurable.
When Windows PE reboots, all changes are lost, including changes to drivers, drive letters, and the Windows
PE registry. To make lasting changes, see WinPE: Mount and Customize.
The default Windows PE installation uses the FAT32 file format, which poses its own limitations, including a
maximum 4GB file size and maximum 32GB drive size. To learn more, see WinPE: Use a single USB key for
WinPE and a WIM file (.wim).
Windows PE does not support any of the following:
File server or Terminal Server use.
Joining to a network domain.
Connecting to an IPv4 network from Windows PE on an IPv6 network.
Remote Desktop.
.MSI installation files.
Booting from a path that contains non-English characters.
Running 64-bit apps on the 32-bit version of Windows PE.
Adding bundled app packages through DISM (.appxbundle packages).
Note In general, use the latest version of WinPE to deploy Windows. If you are using customized WinPE for
Windows 10 images, you may prefer to continue using your existing Windows PE image and run the latest
version of DISM from a network location. To learn more, see Copy DISM to Another Computer.
Notes on running Windows Setup in Windows PE:
You can use the 32-bit versions of Windows PE and Windows Setup to install 64-bit versions of Windows.
For more information, see Windows Setup Supported Platforms and Cross-Platform Deployments.
Although Windows PE supports dynamic disks, Windows Setup does not. If you install Windows to a
dynamic disk created in Windows PE, the dynamic disks won't be available in Windows.
For UEFI-based PCs that support both UEFI and legacy BIOS modes, Windows PE needs to be booted in
the correct mode in order to correctly install Windows. For more info, see WinPE: Boot in UEFI or legacy
BIOS mode.
See also
CONTENT TYPE REFERENCES
This topic describes the new and changed functionality of the Windows Preinstallation Environment (Windows
PE/WinPE) and compares it with previous versions of Windows PE and MS-DOS.
WINDOWS PE FOR
FEATURE WINDOWS 10 WINDOWS PE 5.0 WINDOWS PE 4.0 WINDOWS PE 3.X WINDOWS PE 2.X
Doesn't Doesn't
support support
servicing servicing
Windows 8.1 Windows 8.1
or Windows or Windows
Server 2012 Server 2012
R2 images. R2 images.
WINDOWS PE FOR
FEATURE WINDOWS 10 WINDOWS PE 5.0 WINDOWS PE 4.0 WINDOWS PE 3.X WINDOWS PE 2.X
To see which version of Windows PE you’re running, type regedit and locate this registry key:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinPE.
Before you can use WinPE, you'll have to create a bootable WinPE USB flash drive, CD, DVD, or virtual hard drive.
The files you need to create WinPE media are distributed as part of the Windows Assessment and Deployment Kit,
and are downloaded when you install the ADK with the Deployment tools and Windows Preinstallation
Environment options selected.
Related topics
WinPE for Windows 10
WinPE: Mount and Customize
WinPE: Create USB Bootable drive
7/13/2017 • 4 min to read • Edit Online
Create a Windows PE (WinPE) bootable USB flash drive or an external USB hard drive.
The default installation runs from memory (RAM disk), so you can remove the drive while Windows PE is
running. Do not remove the USB drive if you are applying an image from it.
diskpart
list disk
select <disk number>
clean
rem === Create the Windows PE partition. ===
create partition primary size=2000
format quick fs=fat32 label="Windows PE"
assign letter=P
active
rem === Create a data partition. ===
create partition primary
format fs=ntfs quick label="Other files"
assign letter=O
list vol
exit
3. Install Windows PE to the USB flash drive, specifying the WinPE drive letter:
Warning
This command reformats the partition.
Boot to Windows PE
1. Connect the USB device to the PC you want to work on.
2. Turn on the PC, and press the key that opens the firmware boot menus.
3. Select the USB drive. Windows PE starts automatically.
After the command window appears, the wpeinit command runs, which sets up the system. This
might take a few minutes.
Troubleshooting
If you're using a USB key with more than one partition, make sure that your WinPE partition is
Partition 1 on the USB drive.
If the copype command isn't recognized, make sure you're running the command from the
Deployment and Imaging Tools Environment, which is part of the Windows ADK.
If Windows PE doesn't appear, try the following workarounds, rebooting the PC each time:
To boot a PC that supports UEFI mode, in the firmware boot menus, try manually selecting the
boot files: \EFI\BOOT\BOOTX64.EFI.
Try a different USB port. Avoid hubs or cables.
Avoid USB 3.0 ports if the firmware doesn't contain native support for USB 3.0.
Clean the USB flash drive, and then reinstall Windows PE. This can help remove extra boot
partitions or other boot software.
diskpart
list disk
select disk <disk number>
clean
create partition primary
format quick fs=fat32 label="Windows PE"
assign letter="P"
exit
Try booting Windows PE from a DVD instead. Create an ISO file that you can burn onto a DVD:
In File Explorer, navigate to C:\winpe_amd64, right-click winpe.iso, and select Burn to disc.
Follow the prompts to create a DVD.
If your PC requires storage or video drivers to boot, try adding those same drivers to the
Windows PE image. For more info, see WinPE: Mount and Customize.
Update the firmware of the PC to the latest version.
1. If the PC doesn't connect to network locations, see WinPE Network Drivers: Initializing and adding drivers.
Related topics
WinPE for Windows 10
WinPE: Create a Boot CD, DVD, ISO, or VHD
WinPE: Install on a Hard Drive (Flat Boot or Non-RAM)
WinPE: Mount and Customize
WinPE: Boot in UEFI or legacy BIOS mode
Windows Setup Supported Platforms and Cross-Platform Deployments
WinPE: Create a Boot CD, DVD, ISO, or VHD
7/13/2017 • 1 min to read • Edit Online
Create a Windows PE (WinPE) bootable DVD, CD, ISO file, or virtual hard drive (VHD).
The default installation runs from memory (also known as a RAM disk), which allows you to remove the USB drive
while Windows PE is running.
Install the Windows ADK
Install the following features from the Windows Assessment and Deployment Kit (ADK):
Deployment Tools: includes the Deployment and Imaging Tools Environment.
Windows Preinstallation Environment : includes the files used to install Windows PE.
Install Windows PE to a DVD, a CD, or an ISO file
1. Click Start, and type deployment. Right-click Deployment and Imaging Tools Environment and then
select Run as administrator.
2. Create a working copy of the Windows PE files. Specify either x86 or amd64:
4. To burn a DVD or CD: In Windows Explorer, right-click the ISO file, and select Burn disc image > Burn,
and follow the prompts.
Using Hyper-V
When running Windows PE in Hyper-V, consider using an ISO file format instead of a VHD, to enable quick setup
of the virtual PC. For more information, see the previous section.
To install Windows PE to a VHD
1. Create a virtual hard drive (.vhd or .vhdx):
diskpart
create vdisk file="C:\WinPE.vhdx" maximum=1000
attach vdisk
create partition primary
assign letter=V
format fs=ntfs quick
exit
diskpart
select vdisk file="C:\WinPE.vhdx"
detach vdisk
exit
Troubleshooting
1. If Windows PE doesn't appear, try the following workarounds, rebooting the PC each time:
To boot a PC that supports UEFI mode: In the firmware boot menus, try manually selecting the boot
files: \EFI\BOOT\BOOTX64.EFI.
If your PC requires storage or video drivers to boot, try adding those same drivers to the Windows
PE image. For more information, see WinPE: Mount and Customize.
2. If the PC doesn't connect to network locations, see WinPE Network Drivers: Initializing and adding drivers.
Related topics
WinPE for Windows 10
WinPE: Create USB Bootable drive
WinPE: Install on a Hard Drive (Flat Boot or Non-RAM)
WinPE: Mount and Customize
WinPE: Boot in UEFI or legacy BIOS mode
Windows Setup Supported Platforms and Cross-Platform Deployments
WinPE: Install on a Hard Drive (Flat Boot or Non-
RAM)
7/13/2017 • 3 min to read • Edit Online
Windows Preinstallation Environment (Windows PE) is a minimal operating system where you can prepare a PC
for installation, deployment, and servicing of Windows. Here's how to download and install it to an internal or
external hard drive.
These instructions show how to set up a basic Windows PE installation that runs from the drive. This can
sometimes give you better performance than booting from memory, and can help you run Windows PE on PCs or
virtual environments with low memory. This procedure is also known as a non-RAMDISK boot, or a flat boot.
Note
When Windows PE is running from the drive, you must turn off the PC before disconnecting the drive to avoid
losing your work.
The 32-bit version of Windows PE can boot 32-bit UEFI, 32-bit BIOS, and 64-bit BIOS PCs:
diskpart
list disk
select <disk number>
clean
rem === Create the Windows PE partition. ===
create partition primary size=2000
format quick fs=fat32 label="Windows PE"
assign letter=P
active
rem === Create a partition for images ===
create partition primary
format fs=ntfs quick label="Images"
assign letter=I
list vol
exit
where <disk number> is the listed number of the external USB hard drive.
2. Apply the Windows PE image to the hard drive.
Note
Ignore any warning messages that say "Warning: Resume application not found."
Boot to Windows PE
1. Connect the device (internal or external USB hard drive) into the PC you want to work on.
2. Turn on the PC, and use the boot menus to select the Windows PE drive. Typically this requires pressing a
hardware button or a key, such as the Esc key.
Note
For UEFI-based PCs, you might need to find an option to manually select the UEFI boot files, for example,
USBDrive01\EFI\BOOT\BOOTX64.EFI.
Windows PE starts automatically. After the command window appears, the wpeinit command runs
automatically. This might take a few minutes.
Troubleshooting
1. If the PC does not boot, try the following steps in sequence, and try to boot the PC after each step:
a. For external USB drives, try inserting the drive into a different USB port. Avoid using USB hubs or
cables, because they might not be detected during the boot sequence. Avoid USB 3.0 ports if the
firmware does not contain native support for USB 3.0.
b. If your PC requires drivers to boot, such as storage drivers or video drivers, or if your driver requires
changes to the registry, add the driver to the Windows PE image. For more info, see WinPE: Mount
and Customize.
c. Update the firmware of the PC to the latest version.
2. For tips on connecting to a network, see WinPE Network Drivers: Initializing and adding drivers.
Running Windows Setup from Windows PE
See Windows Setup Supported Platforms and Cross-Platform Deployments for tips on installing Windows on
UEFI PCs that support both UEFI and legacy BIOS firmware modes, and for using the 32-bit (x86) version of
Windows PE to install a 64-bit version of Windows.
Related topics
WinPE for Windows 10
WinPE: Identify drive letters with a script
WinPE: Create USB Bootable drive
WinPE: Mount and Customize
WinPE: Boot in UEFI or legacy BIOS mode
Windows Setup Supported Platforms and Cross-Platform Deployments
WinPE: Add drivers
7/13/2017 • 2 min to read • Edit Online
The 32-bit version can boot 32-bit UEFI, 32-bit BIOS, and 64-bit BIOS PCs.
Add customizations
Add device drivers (.inf files)
1. Add the device driver to the Windows PE image.
Note
Although you can add multiple drivers to an image by using one command, it is often easier to
troubleshoot problems by adding each driver package individually.
2. Verify that the driver packages are part of the image:
Review the resulting list of drivers and verify that the list contains the driver package that you added.
Video drivers: Change the display resolution
For most graphics drivers, WinPE picks the maximum native resolution automatically.
To manually adjust the size, use an answer file and include settings for Microsoft-Windows-Setup/Display.
To learn more, see Wpeinit and Startnet.cmd: Using WinPE Startup Scripts.
Unmount the Windows PE image and create media
1. Unmount the Windows PE image.
3. Boot the media. Windows PE starts automatically. After the Windows PE window appears, the wpeinit
command runs automatically. This may take a few minutes. Verify your customizations.
Troubleshooting
1. Windows PE won’t boot? See the troubleshooting tips at the end of the topic: Install Windows PE.
2. For tips on connecting to a network, see WinPE Network Drivers: Initializing and adding drivers.
Related topics
WinPE: Optimize and shrink the image
WinPE for Windows 10
Install Windows PE
WinPE: Create USB Bootable drive
WinPE: Create a Boot CD, DVD, ISO, or VHD
WinPE: Install on a Hard Drive (Flat Boot or Non-RAM)
WinPE: Boot in UEFI or legacy BIOS mode
WinPE: Add packages (Optional Components Reference)
WinPE: Add packages (Optional Components
Reference)
3/8/2018 • 12 min to read • Edit Online
The 32-bit version can boot 32-bit UEFI, 32-bit BIOS, and 64-bit BIOS PCs.
Important
Some optional components have prerequisites that must be installed in order. See the list of optional
components on this page.
2. Verify that the optional component is part of the image:
Review the resulting list of packages and verify that the list contains the optional component and its
associated language pack.
Add more languages to images that include optional components
1. List the optional components in the Windows PE image:
2. Review the resulting list of packages, and add the corresponding language packs for each package in the
image, including the base Windows PE language pack.
Review the resulting list of packages and verify that the for each optional component, including the base
Windows PE image, that there is an associated language pack.
5. Change the regional settings to the language you'd like to use:
3. Boot the media. Windows PE starts automatically. After the Windows PE window appears, the wpeinit
command runs automatically. This may take a few minutes. Verify your customizations.
Fonts/WinPE-Font Support-ZH-HK The Hong Kong and Taiwan optional components contain
and two Chinese font families that are packaged as TTC files.
Simsun is the Simplified Chinese user interface font in
WinPE-Font Support-ZH-TW Windows versions before Windows Vista. Simsun contains
embedded bitmaps to ensure legible rendering at small sizes.
MingLiu has embedded bitmaps and provides support for
the HKSCS. JhengHei, a font that was introduced in Windows
Vista, is designed specifically for use in a ClearType rendering
environment. JhengHei does not include embedded bitmaps.
JhengHei relies on hinting instructions to produce legible
characters at small sizes. In addition, the module contains
one bitmap-only TrueType font, Cht_boot.ttf. This font is
used on boot screens.
Related topics
WinPE: Optimize and shrink the image
WinPE for Windows 10
WinPE: Mount and Customize
WinPE: Mount and Customize
12/6/2017 • 6 min to read • Edit Online
Add drivers to Windows Preinstallation Environment (WinPE), such as graphics drivers or network drivers.
Common customizations:
Device drivers (.inf files). You can customize device drivers, such as drivers that support network cards or
storage devices.
Packages (.cab files, also known as WinPE optional components) Add languages, hotfixes, or support for
features like PowerShell and the HTML Application Language (HTA).
Languages. To run WinPE in multiple languages, add the packages (optional components) for those
languages.
Add files and folders. These can be added directly to the WinPE image.
DISM: Use a newer version. When new versions of Windows require features from the latest version of
DISM, you can add DISM directly into WinPE.
Startup scripts. Examples include setting up a network connection, or adding a custom application, such as
diagnostic software.
Apps. Note, WinPE only supports legacy apps.
Temporary storage (scratch space). If your application requires temporary file storage, you can reserve
extra memory space in RAM.
Background image
Power scheme
WinPE settings
Windows updates
The 32-bit version of WinPE can boot 32-bit UEFI, 32-bit BIOS, and 64-bit BIOS PCs.
Add customizations
Add device drivers (.inf files)
Add the device driver to the WinPE image.
Although you can add multiple drivers to an image by using one command, it is often easier to
troubleshoot problems by adding each driver package individually.
To learn more about drivers, see Add device drivers (.inf files).
Add packages/languages/optional components/.cab files
Add the optional component into WinPE. To add optional components, you need to add both the
optional component and its associated language packs.
To learn more about adding packages, see WinPE: Add packages (Optional Components Reference).
Add files and folders
Copy files and folders into the C:\WinPE_amd64\mount folder. These files will show up in the X:\ folder
in WinPE.
Don't add too many files, as these will slow down WinPE and can fill up the available memory in the
default RAMDisk environment.
Add a startup script
Modify the Startnet.cmd script to include your customized commands. This file is located at
C:\WinPE_amd64\mount\Windows\System32\Startnet.cmd .
You can also call other batch files or command line scripts from this file.
For Plug and Play or networking support, make sure that you include a call to wpeinit in your
customized Startnet.cmd script. For more info, see Wpeinit and Startnet.cmd: Using WinPE Startup
Scripts.
Add an app
1. Create an app directory inside the mounted WinPE image.
md "C:\WinPE_amd64\mount\windows\<MyApp>"
3. Test the app later by booting WinPE and running the application from the X: directory.
X:\Windows\System32> X:\Windows\<MyApp>
If your app requires temporary storage, or if WinPE becomes unresponsive when it runs an app, you
may need to increase the amount of temporary storage (scratch space) allocated to WinPE.
4. To automatically launch a shell or application that runs when WinPE starts, add the path location to the
Winpeshl.ini file. For more info, see Winpeshl.ini Reference: Launching an app when WinPE starts.
Add temporary storage (scratch space )
WinPE reserves memory on the X: drive to unpack the WinPE files, plus additional temporary file
storage, known as scratch space, that can be used by your applications. By default, this is 512MB for
PCs with more than 1GB of RAM, otherwise the default is 32MB. Valid values are 32, 64, 128, 256, or
512.
3. Boot the media. WinPE starts automatically. After the WinPE window appears, the wpeinit command
runs automatically. This may take a few minutes. Verify your customizations.
Troubleshooting
WinPE won’t boot? See the troubleshooting tips at the end of the topic: WinPE: Create USB Bootable drive
For tips on connecting to a network, see WinPE Network Drivers: Initializing and adding drivers.
If the WinPE image becomes unserviceable, you may need to clean up the images before you can mount
the image again. For information, see Repair a Windows Image.
To delete a working directory:
In some cases, you may not be able to recover the mounted image. DISM protects you from accidentally
deleting the working directory, so you may have to try the following steps to get access to delete the
mounted directory. Try each of the following steps:
1. Try remounting the image:
dism /Cleanup-Mountpoints
Related topics
WinPE: Optimize and shrink the image
WinPE for Windows 10
WinPE: Create USB Bootable drive
WinPE: Create a Boot CD, DVD, ISO, or VHD
WinPE: Install on a Hard Drive (Flat Boot or Non-RAM)
WinPE: Boot in UEFI or legacy BIOS mode
WinPE: Add packages (Optional Components Reference)
WinPE: Adding Windows PowerShell support to
Windows PE
9/15/2017 • 1 min to read • Edit Online
The following sample script creates a version of Windows PE with Windows PowerShell and its DISM and Storage
cmdlets, which can be used to help automate Windows deployment.
Prepare a local copy of the Windows PE files
1. Install the Windows Assessment and Deployment Kit (ADK), adding the Deployment Tools and Windows
PE features.
2. Start the Deployment and Imaging Tools Environment as an administrator.
3. Create a working copy of the Windows PE files. Specify either x86, amd64, or arm:
Sample script
Use the following script to mount the Windows image, add the Windows PE optional components for Windows
PowerShell, and to unmount the image.
Dism /Mount-Image /ImageFile:"C:\WinPE_amd64_PS\media\sources\boot.wim" /Index:1
/MountDir:"C:\WinPE_amd64_PS\mount"
X:\Windows\system32\WindowsPowerShell\v1.0\powershell
Related topics
WinPE for Windows 10
WinPE: Add packages (Optional Components Reference)
WinPE: Create USB Bootable drive
WinPE: Create a Boot CD, DVD, ISO, or VHD
WinPE: Mount and Customize
WinPE: Boot in UEFI or legacy BIOS mode
8/24/2017 • 2 min to read • Edit Online
When you boot Windows PE on a UEFI PC, you may need to check whether the PC is booted in UEFI mode or
legacy BIOS-compatibility mode.
For example, running Windows Setup through Windows PE requires you to be in the correct firmware mode.
For many operations, such as applying Windows images using Diskpart and DISM, the firmware mode might not
make a difference.
For more in-depth details on booting to UEFI or BIOS mode, see Boot to UEFI mode or legacy BIOS mode.
Boot to UEFI mode
When booting the PC, you may need to manually select the UEFI boot files: \EFI\BOOT\BOOTX64.EFI.
1. Boot your PC and press the key to get into the firmware menus (examples: Esc, F2, F9, F12).
2. Look for a firmware option to choose the boot file (examples: Boot to file, Boot to EFI file).
3. Select the file from the USB drive: \EFI\BOOT\BOOTX64.EFI .
This command returns 0x1 if the PC is booted into BIOS mode, or 0x2 if the PC is booted in UEFI mode.
Sample script:
wpeutil UpdateBootInfo
for /f "tokens=2* delims= " %%A in ('reg query HKLM\System\CurrentControlSet\Control /v
PEFirmwareType') DO SET Firmware=%%B
:: Note: delims is a TAB followed by a space.
if %Firmware%==0x1 echo The PC is booted in BIOS mode.
if %Firmware%==0x2 echo The PC is booted in UEFI mode.
2. If this is a frequent problem, you can remove the boot files for UEFI mode or BIOS mode to prevent the PC
from booting in the wrong mode. If the PC firmware is set up to boot in the wrong mode, the media will
immediately fail to boot, allowing you to immediately retry booting the PC into the correct mode.
Boot in UEFI mode: To prevent Windows PE from booting in BIOS mode, remove the bootmgr
file on the root of the media.
Boot in BIOS mode: To prevent Windows PE from booting in UEFI mode, remove the efi folder on
the root of the media.
Related topics
Boot to UEFI mode or legacy BIOS mode
WinPE for Windows 10
Windows Setup: Installing using the MBR or GPT partition style
Wpeutil Command-Line Options
UEFI Firmware
WinPE: Store or split images to deploy Windows
using a single USB drive
7/13/2017 • 2 min to read • Edit Online
How can you deploy Windows to PCs with just one USB port?
The default Windows Preinstallation Environment (WinPE) drive format, FAT32, is used to boot UEFI-based PCs,
but that's too small to store most Windows images:
FAT32 has a maximum file size of 4GB in size. Most customized Windows images are over 4GB.
FAT32 has a maximum partition size of 32GB. Some Windows images are larger than 32GB.
(You can still use a 64GB or 128GB USB key, but you have to format it to use only uses 32GB of its space.)
Here's a few ways around these limitations:
List disk
select disk X (where X is your USB drive)
clean
create partition primary size=2048
active
format fs=FAT32 quick label="WinPE"
assign letter=P
create partition primary
format fs=NTFS quick label="Images"
assign letter=I
Exit
where:
C:\images\install.wim is the name and the location of the image file that you want to split.
D:\images\install.swm is the destination name and the location for the split .wim files.
4000 is the maximum size in MB for each of the split .wim files to be created.
In this example, the /split option creates an install.swm file, an install2.swm file, an install3.swm file, and so
on, in the D:\Images directory.
4. Copy the files to the WinPE key.
5. On the destination PC, boot to WinPE, and then apply an image using DISM /Apply-Image /SWMFile
command.
WinPE drive letter assignments change each time you boot, and can change depending on which hardware is
detected.
You can use a script to figure out which drive letter is which by searching for a file or folder.
This sample script looks for a drive that has a folder titled Images, and assigns it to a system variable:
%IMAGESDRIVE%.
Related topics
WinPE for Windows 10
Wpeinit and Startnet.cmd: Using WinPE Startup Scripts
WinPE: Install on a Hard Drive (Flat Boot or Non-RAM)
WinPE: Storage Area Network (SAN) Policy
7/13/2017 • 3 min to read • Edit Online
Storage area network (SAN) functionality enables a computer to mount disks and other storage devices
automatically from other computers. By configuring the SAN policy on a Windows Preinstallation Environment
(Windows PE) image, you can control whether or not disks are automatically mounted and which disks can be
mounted. You can also disable the policy to automatically mount disks.
where <image_index> is the number of the selected image in the .wim file.
2. Run the setsanpolicy command. For example:
where <image_path> is the path of a mounted Windows PE image, and <policy_number> is the SAN policy
number.
These values are valid <policy_number> values:
Note
All external disks and the boot disk are online.
This example shows how to configure the SAN policy on a Windows PE image to mount all disks except
those disks on a shared bus:
where <2> is the SAN policy number that mounts all storage device except those on a shared bus.
3. Unmount the image and commit the changes. For example:
Related topics
WinPE for Windows 10
WinPE: Mount and Customize
WinPE Network Drivers: Initializing and adding drivers
DISM Image Management Command-Line Options
Configure Network Settings in an Unattended Installation
Windows Deployment Options
WinPE Network Drivers: Initializing and adding
drivers
10/17/2017 • 3 min to read • Edit Online
The Wpeutil command initializes the Windows PE (WinPE) network drivers as soon as WinPE boots. The default
WinPE image includes support for many popular network adapters, and supports many of the same networking
commands as in Windows. Windows PE includes a basic set of network drivers for many popular network
adapters, and supports many of the same networking commands as in Windows.
Networking in WinPE has the following limitations:
The supported methods of connecting to file servers are TCP/IP and NetBIOS over TCP/IP. Other methods, like
the Internetwork Packet Exchange/Sequenced Packet Exchange (IPX/SPX) network protocol are not supported.
Distributed File System (DFS) name resolution is supported for stand-alone namespaces only. It doesn't
support domain namespaces. Stand-alone DFS namespaces allow for a DFS namespace that exists only on the
local PC and therefore doesn't use Active Directory Domain Services (AD DS).
General wireless networking functionality is not supported in WinPE.
Connecting to an IPv4 network from Windows PE on an IPv6 network is not supported.
Starting with WinPE for Windows 10, version 1709, SMB1 protocol is disabled by default. You can enable
SMB1 support by running dism.exe /enable-feature /featurename=SMB1Protocol-client .
To connect to another PC or shared folder on a network
1. While in Windows PE, you can connect (or map) to a shared network folder by using the net use command.
If you’re connecting to a domain-joined PC, Windows PE prompts for a username and password.
2. You can also host Windows PE from a network by using Preboot Execution Environment (PXE), which is
part of Windows Deployment Services.
Troubleshooting networking problems
1. Try adding a driver for your network device.
We recommend WinPE: Mount and Customize, especially for any driver that requires a reboot during the
installation process.
You may also be able to use the Drvload Command-Line Options to load some drivers while Windows PE
is running. However, any updates made to the registry during the installation process will not persist after
a reboot, even when Windows PE is running in a WinPE: Install on a Hard Drive (Flat Boot or Non-RAM).
2. Run Wpeinit and Startnet.cmd: Using WinPE Startup Scripts to initialize the network. By default, wpeinit
runs when Windows PE starts.
3. In some cases, you may need to configure firewall settings on the PC that you are trying to connect to.
Windows PE supports IPSec configuration.
4. Note, you cannot join Windows PE to a domain, or run Windows PE as a server. For more information, see
WinPE for Windows 10.
To connect to a wired network using 802.1x authentication protocols
1. Create a custom Windows PE image that includes the WinPE-Dot3Svc optional component.
2. Boot a PC to Windows PE.
3. Start the dot3svc service.
<?xml version="1.0"?>
<!-- Sample LAN profile: EthernetLANProfile.xml" -->
<LANProfile xmlns="http://www.microsoft.com/networking/LAN/profile/v1">
<MSM>
<security>
<OneXEnforced>false</OneXEnforced>
<OneXEnabled>true</OneXEnabled>
<OneX xmlns="http://www.microsoft.com/networking/OneX/v1">
<cacheUserData>true</cacheUserData>
<authMode>user</authMode>
<EAPConfig><EapHostConfig
xmlns="http://www.microsoft.com/provisioning/EapHostConfig"><EapMethod><Type
xmlns="http://www.microsoft.com/provisioning/EapCommon">25</Type><VendorId
xmlns="http://www.microsoft.com/provisioning/EapCommon">0</VendorId><VendorType
xmlns="http://www.microsoft.com/provisioning/EapCommon">0</VendorType><AuthorId
xmlns="http://www.microsoft.com/provisioning/EapCommon">0</AuthorId></EapMethod><Config
xmlns="http://www.microsoft.com/provisioning/EapHostConfig"><Eap
xmlns="http://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1">
<Type>25</Type><EapType
xmlns="http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV1">
<ServerValidation>
<DisableUserPromptForServerValidation>false</DisableUserPromptForServerValidation>
<ServerNames></ServerNames>
<TrustedRootCA>1a 2b 3c 4d 56 78 90 aa bb cc dd ee ff 1a 2b 3c 4d 5e 6f</TrustedRootCA>
</ServerValidation><FastReconnect>true</FastReconnect>
<InnerEapOptional>false</InnerEapOptional><Eap
xmlns="http://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1">
<Type>26</Type><EapType
xmlns="http://www.microsoft.com/provisioning/MsChapV2ConnectionPropertiesV1">
<UseWinLogonCredentials>false</UseWinLogonCredentials></EapType></Eap>
<EnableQuarantineChecks>false</EnableQuarantineChecks>
<RequireCryptoBinding>false</RequireCryptoBinding><PeapExtensions>
<PerformServerValidation
xmlns="http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2">false
</PerformServerValidation><AcceptServerName
xmlns="http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2">false
</AcceptServerName><PeapExtensionsV2
xmlns="http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2">
<AllowPromptingWhenServerCANotFound
xmlns="http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV3">true
</AllowPromptingWhenServerCANotFound></PeapExtensionsV2></PeapExtensions></EapType>
</Eap></Config></EapHostConfig></EAPConfig>
</OneX>
</security>
</MSM>
</LANProfile>
5. Link the EAP User Data with the profile. For example:
netsh lan set eapuserdata filename="g:\EAP_UserData.xml" alluser=yes Interface="ethernet"
<?xml version="1.0"?>
<!-- Sample EAP user data: EAP_UserData.xml" -->
<EapHostUserCredentials
xmlns="http://www.microsoft.com/provisioning/EapHostUserCredentials"
xmlns:eapCommon="http://www.microsoft.com/provisioning/EapCommon"
xmlns:baseEap="http://www.microsoft.com/provisioning/BaseEapMethodUserCredentials">
<EapMethod>
<eapCommon:Type>25</eapCommon:Type>
<eapCommon:AuthorId>0</eapCommon:AuthorId>
</EapMethod>
<Credentials
xmlns:eapUser="http://www.microsoft.com/provisioning/EapUserPropertiesV1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:baseEap="http://www.microsoft.com/provisioning/BaseEapUserPropertiesV1"
xmlns:MsPeap="http://www.microsoft.com/provisioning/MsPeapUserPropertiesV1"
xmlns:MsChapV2="http://www.microsoft.com/provisioning/MsChapV2UserPropertiesV1">
<baseEap:Eap>
<baseEap:Type>25</baseEap:Type>
<MsPeap:EapType>
<MsPeap:RoutingIdentity>onex\administrator</MsPeap:RoutingIdentity>
<baseEap:Eap>
<baseEap:Type>26</baseEap:Type>
<MsChapV2:EapType>
<MsChapV2:Username>actualuser</MsChapV2:Username>
<MsChapV2:Password>actualpassword</MsChapV2:Password>
<MsChapV2:LogonDomain>actualdomain</MsChapV2:LogonDomain>
</MsChapV2:EapType>
</baseEap:Eap>
</MsPeap:EapType>
</baseEap:Eap>
</Credentials>
</EapHostUserCredentials>
6. For more info, see How to enable computer-only authentication for an 802.1X-based network in Windows
Vista, in Windows Server 2008, and in Windows XP Service Pack 3.
Related topics
WinPE for Windows 10
WinPE: Mount and Customize
Wpeinit and Startnet.cmd: Using WinPE Startup Scripts
Drvload Command-Line Options
WinPE: Create Apps
7/13/2017 • 6 min to read • Edit Online
Windows PE (WinPE) is licensed to independent software vendors (ISVs) and original equipment manufacturers
(OEMs) to create customized deployment and recovery utilities. This topic provides guidelines for ISVs and OEMs to
develop deployment and recovery apps that run in Windows PE.
Note
Windows PE is not a general-purpose operating system. It may not be used for any purpose other than deployment
and recovery. It should not be used as a thin client or an embedded operating system. There are other Microsoft®
products, such as Windows Embedded CE, which may be used for these purposes.
Extensibility
The majority of Windows PE apps are fixed-function shell apps that provide their own GUI. Two examples are the
Windows Setup app and the Windows Recovery Environment (Windows RE).
If it is acceptable to show a command prompt, then modify Startnet.cmd – this is the most convenient way to
automatically start an app. See WinPE: Mount and Customize.
To have your app bypass the command line and start in your GUI, use Winpeshl.exe, Wpeinit.exe, wpeutil.exe,
and wpeutil.dll.
HKEY_LOCAL_MACHINE
System
Setup
CmdLine
Winpeshl.exe searches for a file called Winpeshl.ini. If the file does not exist, Winpeshl.exe starts a Cmd.exe process
that executes the Startnet.cmd script. If Winpeshl.ini does exist and it contains apps to launch, these apps are
executed instead of Cmd.exe.
Wpeinit.exe installs Plug and Play (PnP) devices, starting the networking stack, and processing Unattend.xml
settings when Windows PE starts. For more information, see Wpeinit and Startnet.cmd: Using WinPE Startup
Scripts.
Networking can be started at any time by running either by allowing Wpeinit.exe to run when Windows PE starts,
or by running the Wpeutil Command-Line Options command.
Customized shell apps can call directly into Wpeutil.dll with the LoadLibrary and GetProcAddress functions. For
related information, see INFO: Alternatives to Using GetProcAddress() With LoadLibrary().
Each of the functions exported by Wpeutil.dll has the same function signature as WinMain Function, as illustrated in
the following code sample.
int InitializeNetworkingW(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);
int result = 0;
{
_tprintf( _T("Unable to load wpeutil.dll \ n") );
return GetLastError();
}
InitializeNetwork = (WpeutilFunction)GetProcAddress(
hWpeutil,
"InitializeNetworkW"
);
FreeLibrary( hWpeutil );
return GetLastError();
{
_tprintf( _T("Network initialized. \ n") );
else
{
_tprintf( _T("Initialize failed: 0x%08x"), result );
FreeLibrary( hWpeutil );
return result;}
Related topics
WinPE for Windows 10
WinPE: Debug Apps
WinPE: Debug Apps
7/13/2017 • 3 min to read • Edit Online
You can use Windows Debuggers, such as Ntsd.exe, Cdb.exe, and Windbg.exe, and supporting tools to debug
applications on Windows PE and to debug the Windows PE kernel. Debugging tools are included in the Windows
10 SDK. You must make the debugging tools available on the Windows PE computer by either copying them
locally or using them from a share.
To debug Windows PE remotely, you may need to turn off the built-in firewall on the PC:
wpeutil disablefirewall
User-mode debugging
The easiest user-mode debugging method is to run a process server on the Windows PE computer, and connect to
it by using a debugger on another computer. The process server is included with the debugging tools in the
Windows 10 SDK.
To run a process server in user-mode
1. Copy the Windows Debugging Process Server tool: dbgsrv.exe, from the Windows 10 SDK debugging tools
folder (example: C:\Program Files (x86)\Windows Kits\10.0\Debuggers\x64), to the Windows PE computer.
2. At the Windows PE command prompt, disable the firewall.
wpeutil disablefirewall
3. Start the Windows Debugging Process Server, specifying a connection method to the PC, for example, a TCP
port:
dbgsrv.exe -t tcp:port=1234
Kernel-mode debugging
To debug in kernel-mode, you must enable kernel-mode debugging before the system is booted. The boot
configuration file has a setting for kernel mode debugging, which is enabled by using the bcdedit.exe command-
line tool to modify the Boot Configuration Data (BCD) store. Kernel debugging can only be performed by using
bcdedit.exe. Bcdedit.exe is located in the \Windows\System32 directory of the Windows partition.
The default debugger settings are as follows:
identifier {dbgsettings}
debugtype Serial
debugport 1
baudrate 115200
For creating ISOs for VM environments, enable the kernel with BCD entries before creating the ISO.
For information about how to modify the default BCD store (default.bcd), see How to Modify the BCD Store Using
Bcdedit.
To enable kernel-mode debugging
1. Locate the BCD store, which is contained in a file named bcd. This file is located within the boot directory in
the root of the media containing the Windows PE image.
2. At the command prompt, type the following bcdedit command to set the debug flag of the BCD store used
to boot the image to debug on :
The {default} might need to be replaced by the unique identifier (UID) of the boot option for Windows PE.
Alternatively, you can also enable kernel debugging by pressing F8 during boot and selecting the debug
option.
Note
To use a symbol server from within Windows PE, use the net use command on the server’s symbols and
file shares.
For more information about command-line options that control debugging, see BCDEdit Command-Line Options.
Related topics
WinPE for Windows 10
WinPE: Mount and Customize
Wpeutil Command-Line Options
Winpeshl.ini Reference: Launching an app when WinPE starts
BCDEdit Command-Line Options
Copype Command-Line Options
6/6/2017 • 1 min to read • Edit Online
The Copype tool creates a working directory that contains a standard set of Windows Preinstallation Environment
(Windows PE) files. You use these files to customize images and (together with the Makewinpemedia script) to
create bootable media. For more information, see Makewinpemedia Command-Line Options.
architecture Copies the boot files and the Windows PE base image
(Winpe.wim) to <WorkingDirectory>\Media.
Values include amd64, x86, or arm.
The x86 version of Windows PE can boot 32-bit UEFI, 32-
bit BIOS, or 64-bit BIOS-based PCs.
The amd64 version of Windows PE can boot either 64-bit
BIOS-based or 64-bit UEFI-based PCs.
The arm version of Windows PE can boot ARM-based PCs.
For more information about running Windows PE on PCs
with different architectures, see Windows Setup Supported
Platforms and Cross-Platform Deployments.
<WorkingDirectory>
<WorkingDirectory>\media
<WorkingDirectory>\mount
Related topics
WinPE for Windows 10
WinPE: Create USB Bootable drive
Makewinpemedia Command-Line Options
Drvload Command-Line Options
6/6/2017 • 1 min to read • Edit Online
The Drvload tool adds out-of-box drivers to a booted Windows Preinstallation Environment (Windows PE) image.
It takes one or more driver .inf files as inputs. To add a driver to an offline Windows PE image, use the Deployment
Image Servicing and Management (DISM) tool. For more information, see Add and Remove Drivers to an Offline
Windows Image.
If the driver .inf file requires a reboot, Windows PE will ignore the request. If the driver .sys file requires a reboot,
then the driver cannot be added with Drvload. For more information, see Device Drivers and Deployment
Overview and DISM Driver Servicing Command-Line Options.
Drivers added using the Drvload tool are marked as the preferred driver for that device. If you add an updated
driver during Windows Setup, the driver that you added with Drvload takes precedence.
OPTION DESCRIPTION
inf_path Specifies the path to the driver .inf file. The path can
contain environment variables.
If any drivers were not installed, then Drvload will return a non-zero status (%errorlevel%).
Related topics
WinPE for Windows 10
WinPE: Mount and Customize
Makewinpemedia Command-Line Options
6/6/2017 • 1 min to read • Edit Online
The Makewinpemedia tool is new for Windows 8. You can use Makewinpemedia to create bootable Windows
Preinstallation Environment (Windows PE) media. Running the Copype tool is a prerequisite for creating bootable
media. Copype creates a directory structure for Windows PE files and copies the necessary Windows PE media
files. For more information, see Copype Command-Line Options and WinPE: Create USB Bootable drive.
C:\winpe_amd64
<DestinationLocation> Specifies the drive letter of the USB flash drive if you are
using the /ufd option, or the name of the .iso file if you
are using the /iso option.
Related topics
WinPE for Windows 10
WinPE: Create USB Bootable drive
WinPE: Mount and Customize
Oscdimg Command-Line Options
Winpeshl.ini Reference: Launching an app when
WinPE starts
7/13/2017 • 1 min to read • Edit Online
Use the Winpeshl.ini file in Windows Preinstallation Environment (Windows PE) to replace the default command
prompt with a shell application or other app. For example, your shell app might provide a GUI for deployment
engineers to choose a method of installing Windows.
To add a customized app, create a file named Winpeshl.ini and place it in %SYSTEMROOT%\System32 a
customized Windows PE image. For more information, see WinPE: Mount and Customize.
Example
[LaunchApp]
AppPath = %SYSTEMDRIVE%\Fabrikam\shell.exe
[LaunchApps]
%SYSTEMDRIVE%\Fabrikam\app1.exe
%SYSTEMDRIVE%\Fabrikam\app2.exe, /s "C:\Program Files\App3"
The Wpeshl.ini file may have either or both of the sections: [LaunchApp] and [LaunchApps]. The apps listed in
[LaunchApp] and [LaunchApps] run in order of appearance, and don’t start until the previous app has terminated.
LaunchApp
Set the AppPath entry to the path to your app. You can use a fully qualified path, or you can include environment
variables, such as %SYSTEMDRIVE% to describe the path.
Note
The [LaunchApp] entry may only include one app.
You can’t specify a command that is greater than 250 characters.
You can’t specifiy any command-line options with LaunchApp.
LaunchApps
Use the [LaunchApps] section to run apps with command-line options.
Note
LaunchApps supports running apps, but does not support common scripting commands. To run commands,
add a startup script instead (startnet.cmd). For more information, see WinPE: Mount and Customize.
You can’t specify a command that is greater than 250 characters.
To add command-line options to an app: add a comma (,) after the app name:
%SYSTEMDRIVE%\Fabrikam\app2.exe, <option>
Related topics
WinPE for Windows 10
WinPE: Debug Apps
Wpeinit and Startnet.cmd: Using WinPE Startup
Scripts
7/13/2017 • 1 min to read • Edit Online
Use Wpeinit and Startnet.cmd to run startup scripts when Windows PE (WinPE) first runs.
Wpeinit outputs log messages to C:\Windows\system32\wpeinit.log.
Startnet.cmd
You can add customized command-line scripts in Windows PE by using Startnet.cmd. By default, Windows PE
includes a Startnet.cmd script located at %SYSTEMROOT%\System32 of your customized Windows PE image.
Startnet.cmd starts Wpeinit.exe. Wpeinit.exe installs Plug and Play devices, processes Unattend.xml settings, and
loads network resources.
For more info, see WinPE: Mount and Customize.
Wpeinit -unattend:"C:\Unattend-PE.xml"
Related topics
WinPE: Identify drive letters with a script
WinPE for Windows 10
Winpeshl.ini Reference: Launching an app when WinPE starts
WinPE: Mount and Customize
Unattended Windows Setup Reference
Wpeutil Command-Line Options
7/13/2017 • 4 min to read • Edit Online
The Windows® PE utility (Wpeutil) is a command-line tool that enables you to run commands during a Windows
PE session. For example, you can shut down or restart Windows PE, enable or disable a firewall, set language
settings, and initialize a network.
Wpeutil Shutdown
Wpeutil Enablefirewall
Wpeutil SetMuiLanguage de-DE
Note
Wpeutil can only accept one command per line.
COMMAND DESCRIPTION
CreatePageFile [/path=<path>] [/size=<size>] Creates a page file to a specified path and size. The
default path is C:\pagefile.sys and default size is 64
megabytes. At least one option must be specified. For
example:
-or-
Important
If a page file exists, the /CreatePageFile option must
be set equal to or greater than the current size of the
page file or the command will fail.
COMMAND DESCRIPTION
Wpeutil DisableExtendedCharactersForVolume C:
</code>
Wpeutil DisableFirewall
Wpeutil EnableExtendedCharactersForVolume C:
</code>
Note
If you are installing an operating system in a language
that has extended characters that are enabled by
default, such as ja-JP or ko-KR, or using a copy of
Windows PE in a language that doesn't have extended
characters enabled, such as en-US, the installation will
cause a Chkdsk error during first boot. Enabling this
option before you install to that volume will prevent
Chkdsk command from running.
Wpeutil EnableFirewall
Wpeutil InitializeNetwork
COMMAND DESCRIPTION
ListKeyboardLayouts <LCID> Lists the supported keyboard layouts (Name and ID) for a
given Locale ID (LCID) value. The keyboard layouts will
also be updated in the registry under the key:
HKEY_LOCAL_MACHINE
\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\WinPE\KeyboardLayouts. For
example:
-or-
Wpeutil Reboot
ListKeyboardLayouts LCID
Wpeutil Shutdown
Note
You can also do the following in the Command Prompt
window:
Click the Close button
Type EXIT
COMMAND DESCRIPTION
wpeutil UpdateBootInfo
reg query HKLM\System\CurrentControlSet\Control
/v PEBootType
Wpeutil WaitForRemovableStorage
Note
This spelling of WaitForRemovableStorage is correct.
Related topics
WinPE for Windows 10
WinPE: Mount and Customize
DISM Windows PE Servicing Command-Line Options
Where is WinPE.wim?
6/6/2017 • 1 min to read • Edit Online
WinPE.wim: In Windows 7, the main Windows PE boot file was renamed from winpe.wim to boot.wim. This file is in
Windows PE in the \sources folder. It can be modified in the same way as WinPE.wim.
Related topics
WinPE for Windows 10
WinPE: Create USB Bootable drive
WinPE: Add packages (Optional Components Reference)
Windows Recovery Environment (Windows RE)
6/6/2017 • 5 min to read • Edit Online
Windows Recovery Environment (WinRE) is a recovery environment that can repair common causes of
unbootable operating systems. WinRE is based on Windows Preinstallation Environment (Windows PE), and can
be customized with additional drivers, languages, Windows PE Optional Components, and other troubleshooting
and diagnostic tools. By default, WinRE is preloaded into the Windows 10 for desktop editions (Home, Pro,
Enterprise, and Education) and Windows Server 2016 installations.
Tools
WinRE includes these tools:
Automatic repair and other troubleshooting tools. For more info, see Windows RE Troubleshooting
Features.
Push-button reset (Windows 10 for desktop editions , Windows 8.1 and Windows 8 only). This tool enables
your users to repair their own PCs quickly while preserving their data and important customizations, without
having to back up data in advance. For more info, see Push-Button Reset Overview.
System image recovery (Windows Server 2016, Windows Server 2012 R2 and Windows Server 2012 only).
This tool restores the entire hard drive. For more info, see Recover the Operating System or Full Server.
In addition, you can create your own custom recovery solution by using the Windows Imaging API, or by using
the Deployment Image Servicing and Management (DISM) API.
Security considerations
When working with WinRE, be aware of these security considerations:
If users open the Boot options menu from Windows and select a WinRE tool, they must provide the user
name and password of a local user account with administrator rights.
By default, networking is disabled in WinRE. You can turn on networking when you need it. However, we
recommend that you disable networking when you don't need connectivity.
Customizing WinRE
You can customize WinRE by adding packages (Windows PE Optional Components), languages, drivers, and
custom diagnostic or troubleshooting tools. The base WinRE image includes these Windows PE Optional
Components:
Microsoft-Windows-Foundation-Package
WinPE-EnhancedStorage
WinPE-Rejuv
WinPE-Scripting
WinPE-SecureStartup
WinPE-Setup
WinPE-SRT
WinPE-WDS-Tools
WinPE-WMI
WinPE-StorageWMI-Package (added to the base image in Windows 8.1 and Windows Server 2012 R2)
WinPE-HTA (added to the base image in Windows 10)
Note
The number of packages, languages, and drivers is limited by the amount of memory available on the PC. For
performance reasons, we recommend that you minimize the number of languages, drivers, and tools that you
add to the image.
Memory requirements
In order to boot Windows RE directly from memory (also known as RAM disk boot), a contiguous portion of
physical memory (RAM) which can hold the entire Windows RE image (winre.wim) must be available. To optimize
memory use, manufacturers should ensure that their firmware reserves memory locations either at the beginning
or at the end of the physical memory address space.
See also
CONTENT TYPE REFERENCES
You can customize Windows Recovery Environment (Windows RE) by adding languages, packages drivers, and
custom diagnostic or troubleshooting tools.
The WinRE image is included inside the Windows 10 and Windows Server 2016 images, and is eventually copied
to the Windows RE tools partition on the destination PC or device. To modify it, you'll mount the Windows
image, then mount the WinRE image inside it. Make your changes, unmount the WinRE image, then unmount the
Windows image.
We recommend that when you update your Windows images with languages and boot-critical drivers, update
the Windows RE image at the same time.
This topic also gives optional steps to optimize the Windows RE image after updating it.
Prerequisites
To complete this walkthrough, you need the following:
A technician computer with the Windows Assessment and Deployment Kit (ADK) installed.
The Windows image (install.wim). This can be from the Windows installation media or from a reference
image.
md C:\mount\windows
2. Review the resulting list of packages, and then add the corresponding language packs for each package in
the image, including the base Windows PE language pack, but not including WinPE-WiFi-Package.
The following code shows how to add the French (fr-fr) language pack to the base Windows PE image,
and then to each of the optional components that are present in the default Windows RE image:
Dism /Add-Package /Image:C:\mount\winre /PackagePath:"C:\Program Files (x86)\Windows
Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-
fr\lp.cab"
The WinPE-WiFi-Package is not language-specific and does not need to be added when adding other
languages.
3. If you're adding language packs for Japan, Korea, or China, add the font packages for these languages.
Here's an example for Japan:
del c:\mount\windows\windows\system32\recovery\winre.wim
Next Steps
If you’re deploying Windows using Windows Setup, update the other Windows images inside the base
Windows file (Install.wim).
If you’re deploying your reference image by using Windows PE, Diskpart, and DISM, then continue to Deploy
Windows RE.
Related topics
Add a Custom Tool to the Windows RE Boot Options Menu
Deploy Windows RE
Deploy Push-Button Reset Features
REAgentC Command-Line Options
Add a custom tool to the Windows RE boot options
menu
7/13/2017 • 3 min to read • Edit Online
You can add a custom troubleshooting or diagnostic tool to the Windows Recovery Environment (WinRE) image.
This tool is displayed in the Boot Options menu.
By developing your custom tool to run in WinRE, you can leverage the touch and on-screen keyboard support
available in WinRE.
New for Windows 10: You won't be able to add WinRE optional components that aren't already in the default
WinRE tools. For example, if you have a app from Windows 8 that depended on the .NET optional components,
you'll need to rewrite the app for Windows 10.
To add a custom tool
1. Extract and mount a Windows image (install.wim) and its corresponding WinRE image (winre.wim):
md c:\mount
xcopy D:\sources\install.wim C:\mount
md C:\mount\windows
Dism /mount-image /imagefile:C:\mount\install.wim /index:1 /mountdir:C:\mount\windows
md C:\mount\winre
Dism /mount-image /imagefile:c:\mount\windows\windows\system32\recovery\winre.wim /index:1
/mountdir:C:\mount\winre
For more information about these steps, see the topic: Customize Windows RE.
2. In Notepad, create a configuration file that specifies the custom tool’s filename and parameters (if any):
Where C:\Tools\OEMDiagnostics.exe is the custom troubleshooting or diagnostics tool, and where /param1
and /param2 are optional parameters used when running this custom tool.
Note
You can only add one custom tool to the WinRE boot options menus.
Save the file using UTF-8 coding. Do not use ANSI:
Click File, and then click Save As. In the Encoding box, select UTF-8, and save this file as
C:\mount\WinREConfig.xml .
3. Create a \Sources\Recovery\Tools folder in the WinRE mount folder, and then copy the custom tool and its
configuration file into the new folder:
md C:\mount\winre\sources\recovery\tools
copy C:\Tools\OEMDiagnostics.exe C:\mount\winre\sources\recovery\tools
copy C:\mount\WinREConfig.xml C:\mount\winre\sources\recovery\tools
The custom tool and any associated folders must be in this folder so that it can continue to work after
future WinRE upgrades.
4. Commit your customizations and unmount the WinRE image:
Warning
Limit the <Name> and <Description> values to approximately 30 characters or less to make sure that they
appear correctly in the boot options menu.
Save the file using UTF-8 coding:
Click File, and then click Save As. In the Encoding box, select UTF-8, and save this file as
E:\Recovery\BootMenu\AddDiagnosticsToolToBootMenu.xml .
If the custom tool is registered properly, the output from running this command will be: <OEM Tool = 1> .
Note
For more information about deploying Windows, see the Deploy Windows RE topic.
To verify the custom tool appears in the Boot Options menu when launched from Windows
1. Restart the destination computer, and complete OOBE as your user.
Note
If you are prompted for a product key, click Skip.
2. Click Start > PC settings, and then select General.
3. In the Advanced startup section, select Restart now.
The Windows Boot Options menu appears.
4. In the Boot Options menu, select Troubleshoot, and then click the Fabrikam Utility link.
The computer restarts in WinRE, and the tool that is specified in the <RecoveryTools> section of the
WinREConfig.xml file, appears.
5. Confirm that the custom tool works properly, and then close the tool.
If the custom tool does not appear on the Boot Options menu, you can try the following:
Verify the WinREConfig.xml and the AddDiagnosticsToolToBootMenu.xml files are saved using the
UTF-8 encoding format.
Disable WinRE, register the custom tool again, and then enable WinRE. For example:
Reagentc /disable
Reagentc /setbootshelllink /configfile E:\Recovery\BootMenu\AddDiagnosticsToolToBootMenu.xml
Reagentc /enable
Related topics
Windows Recovery Environment (Windows RE) Technical Reference
Customize Windows RE
Deploy Windows RE
Windows RE Troubleshooting Features
Add a hardware recovery button to start Windows
RE
6/6/2017 • 2 min to read • Edit Online
On UEFI-based computers, you can configure a hardware recovery button (or button combination) to start
Windows RE, including push-button reset features for Windows 10 for desktop editions (Home, Pro, Enterprise,
and Education). This can help users get to the Windows RE menus more easily.
Relative to Windows 8/8.1, the recommended implementation in Windows 10 for such hardware buttons has been
greatly simplified. You no longer need to copy Windows boot files to an unmanaged location on the EFI system
partition (ESP) to create a secondary boot path. Instead, Windows configures and manages all the on-disk
resources required to support the hardware buttons. The design can be summarized as follows:
1. Windows 10 automatically creates a secondary Boot Configuration Data (BCD) store in the folder
\EFI\Microsoft\Recovery.
When Windows RE is installed, this secondary BCD store is automatically populated with the appropriate
settings to boot Windows RE by default.
If the location of Windows RE changes (for example, due to future updates), the secondary BCD store is
updated automatically.
2. You will still need to create a static boot device entry for recovery at the end of the UEFI firmware boot order
list.
This boot device entry should point to the default Windows Boot Manager (bootmgfw.efi) in the folder
\EFI\Microsoft\Boot on the ESP.
The boot device entry must specify the /RecoveryBCD parameter.
When the hardware button is triggered, the recovery boot device entry should be selected automatically.
To learn more, see your hardware manufacturer's instructions for modifying the UEFI firmware on the
device.
3. When Windows Boot Manager is launched with the /RecoveryBCD parameter, it uses the secondary BCD
store which is configured to boot Windows RE, instead of the default BCD store.
The following diagram illustrates the recommended implementation and the various boot paths:
Design recommendations for the hardware button:
The hardware recovery button (or button combination) should be usable even when the PC is powered off. When
triggered, the PC should power on and go through the secondary boot path. This eliminates the need for users to
press the button within a very short time window during and after POST.
For PCs which support firmware options menu, triggering the button (or button combination) should first display a
simple menu which gives users the options to either boot Windows RE or to enter the firmware options menu. This
removes the need to support multiple button combinations.
Note The hardware button will not be able to boot the PC into Windows RE until Windows RE is installed. In
general, this means after the PC has completed the Specialize configuration pass.
Related topics
Deploy Windows RE
Deploy Windows RE
7/13/2017 • 3 min to read • Edit Online
Use these steps to deploy Windows® Recovery Environment (Windows RE) to a new computer, to help end users
repair a PC when a system failure occurs.
Prerequisites
To complete this walkthrough, you need the following:
A destination computer that has been configured with a Windows RE tools partition, and optionally, a recovery
image partition. For more information, see Capture and Apply Windows, System, and Recovery Partitions.
Optional: Customize your recovery media. For more information, see Customize Windows RE.
Optional: Customize your recovery media to include custom tools. For more information, see Add a Custom
Tool to the Windows RE Boot Options Menu.
mkdir T:\Recovery\WindowsRE
where T: is the drive letter of your Windows RE Tools partition. For example:
BIOS:
mkdir S:\Recovery\WindowsRE
For more information about adding a custom tool, see Add a Custom Tool to the Windows RE Boot Options
Menu.
4. Optional: Configure a hardware recovery button (or button combination) to run a secondary boot path that
contains Windows RE. For more information, see Add a Hardware Recovery Button to Start Windows RE.
Step 2: Identify the Recovery Partitions and Hide the Drive Letters
Note If you want to configure push-button reset features for Windows 8 editions, skip this section, and go to the
topic: Deploy Push-Button Reset Features.
Configure your partitions as recovery partitions, and then conceal the drive letters so the partitions don't appear
in common Windows menus, such as File Explorer.
Prepare a DiskPart script to identify the recovery partitions and to hide drive letters
1. In Notepad, create a text file that includes commands to identify and hide the recovery partitions. The
following examples are based on your firmware type:
UEFI:
Use the ID: PARTITION_MSFT_RECOVERY_GUID (de94bba4-06d1-4d40-a16a-bfd50179d6ac) to define the
partitions as recovery partitions.
Use the GPT attributes: 0x8000000000000001 to hide the drive letters and to mark them as required, by
using a combination of two attributes: GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER and
GPT_ATTRIBUTE_PLATFORM_REQUIRED.
For more information about UEFI hard drive partition attributes, see PARTITION_INFORMATION_GPT
structure.
rem == HideRecoveryPartitions-UEFI.txt
select disk 0
select partition 1
remove
set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
gpt attributes=0x8000000000000001
rem == If Push-button reset features are included, add the following commands:
rem select partition 5
rem remove
rem set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
rem gpt attributes=0x8000000000000001
list volume
BIOS:
Use the attribute: id=27 to define the system partition, and use the remove command to remove the drive
letter.
rem == HideRecoveryPartitions-BIOS.txt
select disk 0
select partition 3
set id=27
remove
list volume
exit
Diskpart /s E:\Recovery\HideRecoveryPartitions-<firmware>.txt
reagentc /info
Related topics
Windows Recovery Environment (Windows RE) Technical Reference
DISM Image Management Command-Line Options
Customize Windows RE
Add a Custom Tool to the Windows RE Boot Options Menu
Push-button reset
6/6/2017 • 3 min to read • Edit Online
This topic is intended for original equipment manufacturers (OEMs) who want to add push-button reset features
to their Windows 10 desktop computer manufacturing processes. If you are a user who wants to reset a computer
that runs Windows 10, see Recovery options in Windows 10.
Push-button reset is a recovery tool that repairs the OS while preserving data and important customizations. It
reduces the need for custom recovery applications by providing users with more recovery options and the ability
to fix their own PCs with confidence.
Push-button reset is included in Windows 10 for desktop editions (Home, Pro, Enterprise, and Education), and was
introduced in Windows 8.
Hard drive setup Hard Drives and Partitions | UEFI/GPT-based hard drive
partitions | BIOS/MBR-based hard drive partitions
Refresh your PC
The Refresh your PC feature can be summarized in the following steps:
1. PC boots into the Windows Recovery Environment (Windows RE).
2. EXTENSIBILITY POINT A: OEMs can optionally add a script here. (See Extensibility points later in this topic).
3. User accounts, settings, and data are gathered and moved to a temporary location.
4. A new copy of the OS is constructed in a temporary location using files from the Windows Component Store.
5. Customizations stored in provisioning packages under C:\Recovery\Customizations are applied to the new OS.
6. Drivers are copied from the existing OS and injected into the new OS.
7. Preinstalled Windows apps are restored from their backup location.
8. System-critical settings are applied to the new OS.
9. Existing OS is moved to C:\Windows.old.
10. New OS is moved to the root of the OS volume.
11. EXTENSIBILITY POINT B: OEMs can optionally add a script here. (See Extensibility points later in this topic).
12. PC reboots to the new OS.
13. During first boot, user data and settings are reapplied.
Preserved settings
The Refresh your PC feature preserves a number of system and user settings that are required to keep the system
running while minimizing the need for users to reconfigure their PCs.
Preserved settings can be broadly categorized into one of the following categories:
Are required for users to log on to their PCs after running the Refresh your PC feature.
Affect how users access their documents and personal files.
Are difficult for most users to recreate.
Affect system security or user privacy.
Personalize the PC.
The preserved settings are summarized as follows:
User accounts (local, domain, Microsoft account), and group memberships
Domain settings
Windows Update settings
Library settings
Lock screen background
Desktop themes
International settings
Wireless network profiles
Settings configured in Windows Welcome
User data
Because user data can be stored in many locations, the Refresh your PC feature preserves most folders and files
that are not part of a standard Windows installation. The Refresh your PC feature refreshes the following system
locations and does not preserve the contents.
\Windows
\Program Files
\Program Files(x86)
\ProgramData
\Users\<user name>\AppData (in each user profile)
Note Some applications store user data in the \AppData folder in user profiles. The \AppData folders are available
in C:\Windows.old after using the Refresh your PC feature.
The Refresh your PC feature bypasses the following locations and preserves the contents:
File History versioning data
All files and folders on non-OS partitions
Windows Applications
The Refresh your PC feature handles application types differently in order to ensure that the PC can be restored to
a reliable state. Applications are handled as follows:
User-acquired Windows apps from the Microsoft Store are not preserved. Users will need to reinstall them from
the Microsoft Store. This is a change from Windows 8/8.1.
Preinstalled Windows apps are restored to their factory version and state. Updates to these apps will be
downloaded and reapplied automatically when internet connectivity is available.
User-acquired Windows desktop applications are not preserved. Users will need to reinstall them manually.
Preinstalled Windows desktop applications captured in the customizations provisioning package will be
restored to their factory condition, even if users have previously uninstalled them.
The Refresh your PC feature does not preserve user-installed Windows desktop applications by default, and
locations that are commonly used for storing application settings (\AppData and \ProgramData) are deleted.
Manufacturers can leverage the push-button reset extensibility points to save and later restore specific application
settings and data, if necessary.
Reset your PC
The Reset your PC feature can be summarized in the following steps:
1. PC boots into the Windows Recovery Environment (Windows RE).
2. User accounts, data and installed Windows apps and Windows desktop applications are removed from the OS
volume.
3. Data volumes are formatted (if requested by the user).
4. Data erasure is performed on OS and data volumes (if requested by the user).
5. EXTENSIBILITY POINT C: OEMs can optionally add a script here. (See Extensibility points later in this topic).
6. A new copy of the OS is constructed in a temporary location using files from the Windows Component Store.
7. Customizations stored in provisioning packages under C:\Recovery\Customizations are applied to the new OS.
8. Drivers are copied from the existing OS and injected into the new OS.
9. Preinstalled Universal Windows apps are restored from their backup location.
10. Existing OS is removed.
11. New OS is moved to the root of the OS volume.
12. EXTENSIBILITY POINT D: OEMs can optionally add a script here. (See Extensibility points later in this topic).
13. PC reboots to the new OS.
14. OOBE starts.
Data removal options
When users use the Reset your PC feature, they will be presented with options that affect the way that their data is
removed from the PC.
If the PC has more than one user-accessible hard drive volumes, users can choose to remove data from all
volumes or only the Windows volume.
The Windows volume is never formatted, as the files needed to rebuild the OS are on it. Instead, user data
files are deleted individually.
If user chooses to remove data from all volumes, the data volumes are formatted.
Users can choose to simply delete their files or to also perform data erasure on the drive(s) so that recovery
of the data by someone else is much more difficult.
Manufacturers must configure custom utility partitions as follows to ensure these partitions are not affected by the
reset process.
For UEFI-based PCs, utility partitions on GUID Partition Table (GPT) disks should have the
GPT_ATTRIBUTE_PLATFORM_REQUIRED attribute set. See PARTITION_INFORMATION_GPT structure for more
information on GPT partition attributes.
For BIOS-based PCs, utility partitions on Master Boot Record (MBR) disks must be of a type other than 0x7, 0x0c,
0x0b, 0x0e, 0x06, and 0x42.
The time it takes to perform data erasure depends on drive speed, partition size, and whether the drive is encrypted
using Windows BitLocker Drive Encryption. The data erasure functionality is targeted at consumers and does not
meet government and industry data erasure standards.
If Compact OS is enabled on the OS before the reset, Compact OS will remain enabled after the PC has been reset.
A Settings and data to be migrated have Copy files, drivers, or settings that are
been moved to a temporary location not migrated by default when the user
runs the Refresh your PC feature.
B The OS has been rebuilt. Drivers and Restore customization files (e.g.
customizations have been reapplied. unattend.xml, layoutmodification.xml),
Only critical system settings have been or files and settings you might have
migrated. backed up at extensibility point A.
The extensibility points for Reset your PC are summarized in the following table:
C All user data have been removed from Reconfigure data partitions if needed.
the Windows partition and data
partitions have (optionally) been Important Do not modify the
formatted. Windows partition.
D The OS has been rebuilt. Drivers and Restore customization files (e.g.
customizations have been reapplied. unattend.xml, layoutmodification.xml),
or apply additional customizations.
Compact OS
Compact OS is a collection of technologies which allow Windows 10 to be deployed on PCs with storage capacity
as low as 16 gigabytes (GB). The following two technologies in particular work in conjunction with the Push-button
reset changes to reduce Windows’ disk footprint:
Per-file compression When applying a reference image file (WIM) to a PC, the files written to the disk can be
compressed individually using the XPRESS Huffman codec. This is the same codec used by the WIMBoot
technology in Windows 8.1. When Push-button reset features rebuilds the OS, the runtime system files remain
compressed.
Single-instancing of installed customizations After the installed customizations (e.g. Windows desktop
applications) have been captured (using ScanState) into a reference device data image stored inside a
provisioning package, the two copies of the customizations can be singled-instanced to reduce disk footprint
impact. This is accomplished by converting the installed customizations (e.g. C:\Program Files\Foo\Foo.exe) into
file pointers linked to the contents of the reference device data image.
The following diagram illustrates the high-level content layout of PCs with Compact OS enabled:
Push-button reset features by default restore only drivers (installed through INF packages) and preinstalled
Windows apps. To configure the features to restore other customizations such as settings and Windows desktop
applications, you will need to prepare one or more customization packages which contain the customizations.
These customizations packages are in the form of provisioning packages (.ppkg).
Push-button reset features look for and automatically restore provisioning packages which are located in the folder
C:\Recovery\Customizations.
To protect the packages from tampering or accidental deletion, the Write/Modify permissions of
C:\Recovery\Customizations should be restricted to the local Administrators user group.
Some settings and customizations cannot be included in provisioning packages. Instead, you can restore them
using an unattend file applied using the Push-button reset extensibility scripts. For settings which are supported by
both provisioning packages and unattend, it is recommended that you specify them using only one of the
mechanisms, not both. To learn more, see How push-button reset features work.
PARAMETER USE
PARAMETER USE
Important
Although push-button reset features can restore multiple provisioning packages, only one of the packages can
contain reference device data image captured using ScanState.
ScanState should be used only after all customizations have been applied to the PC. It does not support
appending additional changes to an existing reference device data image.
A provisioning package captured using ScanState.exe can only be applied using push-button reset features and
deployment media created using Windows Imaging and Configuration Designer (ICD). It cannot be applied
using tools such as DISM or USMT’s LoadState.exe.
When you prepare ScanState for capturing customizations, you should exclude Windows Defender settings to
prevent possible failures during recovery that can be caused by file conflicts. For more information, see Step 1 in
Deploy push-button reset features.
OOBE – HID pairing Settings in the <hidSetup> section of Use PBR extensibility script to restore
OOBE.xml and images (e.g. .png files) OOBE.xml and images from
C:\Recovery\OEM
OOBE – OEM EULA <Eulafilename> setting in OOBE.xml Use PBR extensibility script to restore
and license terms .rtf file(s) stored under OOBE.xml and .rtf files from
%WINDIR%\System32\Oobe\Info C:\Recovery\OEM
OOBE – Preconfigured language and Settings in the <defaults> section of Use PBR extensibility script to restore
time zone OOBE.xml OOBE.xml from C:\Recovery\OEM
OOBE – Hide mobile broadband page Microsoft-Windows-WwanUI | Use PBR extensibility scripts to restore
NotInOOBE setting in unattend.xml unattend.xml from C:\Recovery\OEM
OOBE – OEM Registration page Settings in the <registration> section of Use PBR extensibility script to restore
OOBE.xml and HTML files for in-place OOBE.xml and HTML files from
links C:\Recovery\OEM
Start – Pinned tiles and groups LayoutModification.xml stored under Use PBR extensibility scripts to restore
%SYSTEMDRIVE%\Users\Default\AppDa LayoutModification.xml or unattend.xml
ta\Local\Microsoft\Windows\Shell or from C:\Recovery\OEM
settings under Microsoft-Windows-
Shell-Setup | StartTiles in unattend.xml
Start – Prepopulated MFU list LayoutModification.xml stored under Use PBR extensibility scripts to restore
%SYSTEMDRIVE%\Users\Default\AppDa LayoutModification.xml from
ta\Local\Microsoft\Windows\Shell C:\Recovery\OEM
CUSTOMIZATION HOW IT IS CONFIGURED HOW IT CAN BE RESTORED DURING PBR
Continuum – Form factor Settings in unattend.xml: Use PBR extensibility scripts to restore
• Microsoft-Windows-Deployment | unattend.xml from C:\Recovery\OEM
DeviceForm
• Microsoft-Windows-GPIOButtons
| ConvertibleSlateMode
Desktop – Default and additional accent RunSynchronous command in Use PBR extensibility scripts to restore
colors unattend.xml which adds the AGRB hex unattend.xml from C:\Recovery\OEM
color values to the registry under
HKLM\SOFTWARE\Microsoft\Windows\
CurrentVersion\Themes\Accents
Desktop – Pinned taskbar items Settings under Microsoft-Windows- Use PBR extensibility scripts to restore
Shell-Setup | TaskbarLinks in unattend.xml and .lnk files from
unattend.xml and shortcut (.lnk) files C:\Recovery\OEM
stored in a folder under
%ALLUSERSPROFILE%\Microsoft\Windo
ws\Start Menu\Programs</td>
Desktop – Systray icons Settings under Microsoft-Windows- Use PBR extensibility scripts to restore
Shell-Setup | NotificationArea in unattend.xml from C:\Recovery\OEM
unattend.xml
Mobile broadband – Rename “WiFi” to Microsoft-Windows-SystemSettings | Use PBR extensibility scripts to restore
“WLAN” in network list WiFiToWlan setting in unattend.xml unattend.xml from C:\Recovery\OEM
Mobile broadband – Enable Network Microsoft-Windows-SystemSettings | Use PBR extensibility scripts to restore
Selection control in Settings DisplayNetworkSelection setting in unattend.xml from C:\Recovery\OEM
unattend.xml
PC Settings – Preinstalled settings apps Settings apps are preinstalled in the Restored automatically along with other
same way as any other app, and preinstalled apps
automatically appear in Settings.
Capability declared in the app manifest
determines whether it is a settings app
or not.
Default browser and handlers of Default application association settings Use PBR extensibility scripts to re-
protocols XML file imported using the /Import- import the XML from C:\Recovery\OEM
DefaultAppAssociations command in using DISM
DISM
Support information in Contact Support Settings under Microsoft-Windows- Use PBR extensibility scripts to restore
app Shell-Setup | OEMInformation in unattend.xml and .bmp file from
unattend.xml and logo.bmp file C:\Recovery\OEM
CUSTOMIZATION HOW IT IS CONFIGURED HOW IT CAN BE RESTORED DURING PBR
Windows desktop applications MSI or custom installers Use ScanState to capture and store the
(including driver applets installed via resulting PPKG under
setup.exe) C:\Recovery\Customizations, which is
restored automatically during PBR.
RDX contents See UX WEG for details Should not be restored during PBR
Deploy push-button reset features
7/13/2017 • 13 min to read • Edit Online
Push-button reset features are included with Windows 10 for desktop editions (Home, Pro, Enterprise, and
Education), though you'll need to perform additional steps to deploy PCs with the following customizations.
Windows desktop applications
Windows settings, such as customized OOBE screens or Start Menus.
Customized partition layouts.
These steps also show you how to add your own scripts during a reset to capture logs or perform other cleanup
tasks.
Prerequisites
To complete these procedures, you'll need a technician PC which has Windows 10 and the following Windows
Assessment and Deployment Kit (ADK) for Windows 10 components installed:
Deployment Tools
Windows Preinstallation Environment (Windows PE)
Imaging and Configuration Designer (ICD)
User State Migration Tool (USMT)
You'll also need:
A destination PC with drive size of 100 GB or larger
A Windows 10 for desktop editions image (install.wim)
A Windows RE boot image (Winre.wim) (You'll extract this from a Windows 10 image).
For an overview of the entire deployment process, see the Desktop manufacturing guide.
Use the follow steps to prepare the ScanState tool to capture Windows desktop applications after they have been
installed:
Step 1: Prepare the ScanState tool
1. On the technician PC, copy the Windows ADK files from Windows User State Migration Tool (USMT) and
Windows Setup to a working folder. You'll need to match the architecture of the destination device. You
don't need to copy the subfolders.
md C:\ScanState_amd64
xcopy /E "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\User State Migration
Tool\amd64" C:\ScanState_amd64
xcopy /E /Y "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows
Setup\amd64\Sources" C:\ScanState_amd64
2. Copy the contents of the working folder to a network location or USB flash drive.
Use the following steps to customize your Windows RE boot image if additional drivers and language packs are
needed.
Step 2: Extract and customize the Windows RE boot image (optional)
1. On the technician PC, click Start, and type deployment. Right-click Deployment and Imaging Tools
Environment and then select Run as administrator.
2. In Deployment and Imaging Tools Environment, create the folder structure to store the Windows
image and its mount point.
Mkdir C:\OS_image\mount
3. Create the folder structure to store the Windows RE boot image and its mount point.
Mkdir C:\winre_amd64\mount
4. Mount the Windows image (install.wim) to the folder \OS_image\mount by using DISM.
where Index:1 is the index of the selected image in the Install.wim file.
5. Copy the Windows RE image from the mounted Windows image to the new folder.
6. Unmount the Windows image. Tip: If you haven't made any other changes in the Windows image, you can
unmount the image faster by using the /discard option.
where Index:1 is the number of the selected image in the Winre.wim file.
Once the Winre.wim file is extracted from the Install.wim file, you can customize the Windows RE boot
image.
8. Add language packs, boot-critical device drivers, and input device drivers to the Windows RE boot image.
To learn more, see Customize Windows RE.
9. Commit your customizations and unmount the image.
If you are planning to customize only the settings common to all editions of Windows 10 (including Windows 10
Mobile), use the following steps to create a provisioning package which specifies settings to be restored during
recovery:
Step 3: Create a provisioning package with settings to be restored (optional)
1. On the technician PC, start Windows Imaging and Configuration Designer (ICD).
2. Click File > New Project.
3. Enter a project name and description, and then click Next
4. In the Select project workflow step, select the Provisioning Package option, and then click Next.
5. In the Choose which settings to view and configure step, select the Common to all Windows editions
option, and then click Next.
6. In the Import a provisioning package (optional) step, click Finish to create the new project.
7. Use the Available customizations pane to add settings and specify the defaults which should be restored
during recovery. The settings will appear in the Selected customizations pane.
8. Click Export > Provisioning package.
9. In the Describe the provisioning package step, click Next.
10. In the Select the security details for the provisioning package step, click Next.
11. In the Select where to save the provisioning package step, enter a location to save the package (such as a
network share) and then click Next.
12. Click Build to create the provisioning package.
13. After the provisioning package is created, click Finish.
If your customizations include settings specific to editions of Windows 10 for desktop editions, use the following
steps to create an unattend.xml which specifies the settings to be restored during recovery:
Step 4: Create an unattend file to restore settings (optional)
1. On the technician PC, start Windows System Image Manager.
2. Click File > Select Windows image.
3. When prompted to create a catalog file, click Yes.
4. Use the Windows Image and Answer File panes to add settings to the Specialize or oobeSystem phase (or
both), and specify the defaults which should be restored during recovery.
5. Click Tool > Validate Answer File to check for errors. Correct any problem identified.
6. Click File > Save Answer File. Enter a location to save the answer file (such as a network share) and then click
Save.
If you plan to use Push-button reset’s extensibility points, use the following steps to prepare your extensibility
scripts and register them using a Push-button reset configuration file.
Important If you have created an unattend file, you must also create a script to reapply it using the
BasicReset_AfterImageApply and FactoryReset_AfterImageApply extensibility points.
Step 5: Prepare push-button reset extensibility scripts (optional)
1. Create scripts (.cmd) or executables (.exe) to run at the available extensibility points when the Refresh your
PC feature runs:
A: At BasicReset_BeforeImageApply
B: At BasicReset_AfterImageApply
2. Create scripts (.cmd) or executables (.exe) to run at the available extensibility points when the Reset your
PC feature runs:
C: At FactoryReset_AfterDiskFormat
D: At FactoryReset_AfterImageApply
3. Save the scripts to a network location, or USB flash drive.
4. Create a ResetConfig.xml file that specifies the location of the scripts that you created for the four
extensibility points. For example:
<?xml version="1.0" encoding="utf-8"?>
<Reset>
<Run Phase="BasicReset_BeforeImageApply">
<Path>Fabrikam\SampleScript_A.cmd</Path>
<Duration>2</Duration>
</Run>
<Run Phase="BasicReset_AfterImageApply">
<Path>Fabrikam\SampleScript_B.cmd</Path>
<Param></Param>
<Duration>2</Duration>
</Run>
<Run Phase="FactoryReset_AfterDiskFormat">
<Path>Fabrikam\SampleScript_C.cmd</Path>
<Duration>2</Duration>
</Run>
<Run Phase="FactoryReset_AfterImageApply">
<Path>Fabrikam\SampleScript_D.cmd</Path>
<Param></Param>
<Duration>2</Duration>
</Run>
</Reset>
Important If you use a text editor to author the ResetConfig.xml file, save the document with an .xml file
name extension and use UTF-8 encoding. Do not use Unicode or ANSI.
5. Save the ResetConfig.xml file together with the extensibility scripts that you created.
Step 6: Create bare-metal recovery configuration (optional)
To specify the partition layout to be used when users perform bare metal recovery using recovery media
created from their PCs, modify resetconfig.xml to include the following elements:
MinSize - Specifies the minimum size of the system disk in megabytes (MB). Recovery process will not
proceed if the system disk does not meet this minimum size.
DiskpartScriptPath - Path to Diskpart script relative to install.wim location. The script should assume
that all existing partitions have been deleted, and the system disk has focus in Diskpart.
OSPartition - The partition to which the recovery image should be applied must be specified. The ESP
or active partition must be on the same disk as the OS.
WindowsREPartition; WindowsREPath – (Optional) The location in which WinRE should be staged.
The WinRE boot image on the media will be copied and registered with the OS. (Same as running
“reagentc.exe /setreimage”)
If partitioning information is not specified in resetconfig.xml, users can still perform bare metal recovery
using media they have created. However, the default/recommended partition layout for Windows 10 will
be used instead.
Step 7: Create a diskpart script for initial deployment
1. Create a disk partitioning script for initial deployment.
UEFI example:
BIOS example:
BIOS example:
Diskpart /s N:\CreatePartitions.txt
Optional: You can also specify the /compact option so that the files written to disk are compressed. For
example:
This is useful if you are deploying Windows onto PCs with limited storage capacity, but is not
recommended on PCs with rotational storage devices.
4. Configure the system partition by using BCDboot.
W:\Windows\System32\Bcdboot W:\Windows
5. Create a folder in the Windows RE tools partition, and copy your custom Windows RE boot image to it.
Mkdir T:\Recovery\WindowsRE
xcopy /H N:\Winre.wim T:\Recovery\WindowsRE
7. Use Diskpart to conceal the Windows RE tools (T:\) partition from Windows Explorer.
For UEFI-based PCs:
select disk 0
select partition 4
remove
set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
gpt attributes=0x8000000000000001
exit
where N:\ is the location where the additional provisioning packages are located.
3. Copy any Push-button reset configuration file (resetconfig.xml) and extensibility scripts to the destination
PC, and then configure permissions to write/modify them. For example:
mkdir C:\Recovery\OEM
xcopy /E N:\RecoveryScripts\* C:\Recovery\OEM
where N:\ is the location where the configuration file and scripts are located.
4. Restrict the Write/Modify permissions of the customizations, and hide the root folder. For example:
icacls C:\Recovery\Customizations /inheritance:r /T
icacls C:\Recovery\Customizations /grant:r SYSTEM:(F) /T
icacls C:\Recovery\Customizations / grant:r *S-1-5-32-544:(F) /T
icacls C:\Recovery\OEM /inheritance:r /T
icacls C:\Recovery\OEM /grant:r SYSTEM:(F) /T
icacls C:\Recovery\OEM / grant:r *S-1-5-32-544:(F) /T
attrib +H C:\Recovery
5. Use the Sysprep tool to reseal the Windows image without using the /generalize option.
Note Important: You must configure the image that you are shipping to the customer to boot to OOBE.
6. (Optional) To save space, you can also convert your installed Windows desktop applications into file
pointers referencing the customizations package. To do so, boot the destination PC to Windows PE and run
the following:
7. Shut down the destination PC for packaging and shipment. When the user starts the PC for the first time, it
will boot to OOBE.
Step 11: Verify your customizations
1. Verify that your customizations are restored after recovery, and that they continue to function by running
the Refresh your PC and Reset your PC features from the following entry points:
Settings : From the Start Menu, click Settings > Update & security > Recovery. Click the Get Started
button under Reset this PC and follow the on-screen instructions.
Windows RE: From the Choose an option screen in Windows RE, click Troubleshoot > Reset this PC and
then follow the on-screen instructions
2. Verify that recovery media can be created, and verify its functionality by running the bare metal
recovery feature:
a. Launch Create a recovery drive from Control Panel.
b. Follow the on-screen instructions to create the USB recovery drive.
c. Boot the PC from the USB recovery drive
d. From the Choose an option screen, click Troubleshoot
e. Click Recover from a drive and then follow the on-screen instructions
Note The Push-button reset UI has been redesigned in Windows 10. The Keep my files option in the UI
now corresponds to the Refresh your PC feature, whereas the Remove everything option corresponds
to the Reset your PC feature.
Related topics
ScanState Syntax
Bare metal reset/recovery: Create recovery media while deploying new devices
Deploy push-button reset features using ScanState
Add a script to push-button reset features
7/13/2017 • 7 min to read • Edit Online
You can customize the Push-button reset experience by configuring extensibility points. This enables you to run
custom scripts, install additional applications, or preserve additional user or application data.
Prerequisites
To configure extensibility points and customize the Push-button reset experience, you need the following.
A configuration file named ResetConfig.xml
Scripts that execute custom operations at selected extensibility points.
Any additional files required by the scripts
Each script must meet the following requirements:
Be an executable (.exe) or a command script (.cmd)
Run without displaying a graphical user interface (GUI)
Return either 0 to indicate a successful operation, or a non-zero value to indicate an unsuccessful operation
These files should be placed in the folder C:\Recovery\OEM, and will automatically be detected by Push-button
reset features. It's OK to use subfolders.
This example script preserves files that would otherwise be removed, by placing them in a temporary location
in memory, to be retrieved by another sample script, **RetrieveLogFiles.cmd**.
```
:rem == SaveLogFiles.cmd
EXIT 0
```
This sample script retrieves the files that were saved in memory by the `SaveLogFiles.cmd` script, and adds
them back to the system. It also runs a system diagnostic, and then sends the output to the C:\\Fabrikam
folder.
```
:rem == RetrieveLogFiles.cmd
mkdir %TARGETOSDRIVE%\Fabrikam
%TARGETOS%\system32\dxdiag.exe /whql:off /t %TARGETOSDRIVE%\Fabrikam\DxDiag-TestLogFiles.txt
EXIT 0
```
EnableCustomizations.cmd:
rem EnableCustomizations.cmd
rem Define %TARGETOS% as the Windows folder (This later becomes C:\Windows)
for /F "tokens=1,2,3 delims= " %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\RecoveryEnvironment"
/v TargetOS') DO SET TARGETOS=%%C
rem Define %TARGETOSDRIVE% as the Windows partition (This later becomes C:)
for /F "tokens=1 delims=\" %%A in ('Echo %TARGETOS%') DO SET TARGETOSDRIVE=%%A
rem Add back Windows settings, Start menu, and OOBE.xml customizations
copy "%TARGETOSDRIVE%\Recovery\OEM\Unattend.xml" "%TARGETOS%\Panther\Unattend.xml" /y
copy "%TARGETOSDRIVE%\Recovery\OEM\LayoutModification.xml"
"%TARGETOSDRIVE%\Users\Default\AppData\Local\Microsoft\Windows\Shell\LayoutModification.xml" /y
xcopy "%TARGETOSDRIVE%\Recovery\OEM\OOBE\Info" "%TARGETOS%\System32\Info\" /s
rem Recommended: Create a pagefile for devices with 1GB or less of RAM.
wpeutil CreatePageFile /path=%TARGETOSDRIVE%\PageFile.sys /size=256
For multilingual deployments, OOBE.xml uses a more complicated folder structure. It's OK to just copy the entire
folder into C:\Recovery\OEM, and then modify the script to copy the entire folder:
Next Steps
Now that you have customized the push-button reset experience, you can deploy the recovery image for push-
button reset (Install.wim) to the recovery image partition.
To copy the Diskpart script, the ResetConfig.xml file, and the push-button reset recovery image (install.wim) to the
recovery image partition of the destination PC, follow the instructions in the Deploy Push-Button Reset Features
topic.
Related topics
Push-Button Reset Overview
Create Media to Run Push-Button Reset Features
Deploy Push-Button Reset Features
REAgentC Command-Line Options
ResetConfig XML Reference
Bare metal reset/recovery: create recovery media
while deploying new devices
7/13/2017 • 3 min to read • Edit Online
Recovery media (bare metal recovery) helps restore a Windows device to the factory state, even if the user needs
to replace the hard drive or completely wipe the drive clean.
You can include this media with new devices that you provide to your customers using the same Windows images
used to deploy the devices.
Note
The PC firmware/BIOS must be configured so that the PC can boot from the media (USB drive or DVD drive).
The USB flash drive or DVD recovery media must have enough space for the Windows image.
If the Windows images are larger than 32GB or are larger the media you're using (for example, 4.7GB DVDs),
you'll need to split the Windows image file to span across multiple DVDs.
To create a bootable USB recovery drive for a personal device, see Create a USB recovery drive.
md c:\mount\Windows
md C:\Images
where amd64 is the architecture of the system you are creating media for.
2. Replace the default Windows PE boot image (Boot.wim) with a Windows RE tools image.
where D:\sources\install.wim is either the base Windows image or a customized push-button reset
recovery image.
Step 5: Optional: Add bare metal recovery configuration scripts
If you're using a customized partition layout, add bare metal recovery configuration scripts to the working
folder, under \sources. For more info, see Bare Metal Reset/Recovery: Enable Your Users to Create Media.
copy E:\Recovery\RecoveryImage\ResetPartitions-UEFI.txt
C:\resetmedia_amd64\media\sources\ResetPartitions-UEFI.txt
2. Insert a DVD.
3. In File Explorer, navigate to C:\resetmedia_amd64 , right-click RecoveryImage.iso , and then click Burn disc
image.
Select **Yes, repartition the drives** > **Just remove my files** > **Reset**.
Windows resets the computer to its original state by using the recovery image.
Large-Scale Deployment
If you are deploying USB keys with your computers, you can create a basic copy of the Windows recovery media
on USB by using the steps above. After you have performed final customization of the image, you can boot the
computer to Windows PE, and update the install.wim image on the USB recovery media.
You can potentially save manufacturing time by appending the Windows image on the USB flash drive, rather
than recapturing the entire Windows image. If you do this, you must also update the ResetConfig.xml
configuration file element: RestoreFromIndex to the appropriate index number. For more information, see Append
a Volume Image to an Existing Image Using DISM and ResetConfig XML Reference.
Related topics
Bare Metal Reset/Recovery: Enable Your Users to Create Media
Push-Button Reset Overview
ResetConfig XML Reference
REAgentC Command-Line Options
Bare metal reset/recovery: enable your users to
create recovery media
7/13/2017 • 6 min to read • Edit Online
Recovery media (bare metal recovery) helps restore a Windows device to the factory state, even if the user needs
to replace the hard drive or completely wipe the drive clean.
Windows uses the built-in Windows files, including recent Windows and driver updates, plus any customizations
included in the OEM provisioning package, to create the recovery media.
If you deploy Windows using the default partition layout, your users will be able to create bare metal recovery
media by default.
If you're deploying Windows with a custom partition layout, you'll need to add a few configuration files to enable
your users to create bare metal recovery media:
A partition reset script, which is a modified DiskPart script that resets your custom partition layout.
A push-button reset configuration file (ResetConfig XML) that identifies the Windows and Windows RE
partitions.
Note: In Windows 10, version 1607, desktop applications and settings captured in siloed provisioning packages
will not be restored using this media. Regular customizations packages (.ppkg) captured using the ScanState tool
are not affected by this issue.
BIOS:
<?xml version="1.0" encoding="utf-8"?>
<!-- ResetConfig.xml for BIOS -->
<Reset>
<!-- May be combined with custom scripts – insert Run Phase elements here -->
<SystemDisk>
<DiskpartScriptPath>ResetPartitions-BIOS.txt</DiskpartScriptPath>
<MinSize>75000</MinSize>
<WindowsREPartition>3</WindowsREPartition>
<WindowsREPath>Recovery\WindowsRE</WindowsREPath>
<OSPartition>2</OSPartition>
</SystemDisk>
</Reset>
where E is the drive letter of the USB flash drive and R is the drive letter of the recovery image partition.
Step 2: Test that Windows can create recovery media
1. Restart the destination computer, and complete Out-Of-Box Experience (OOBE).
2. Click Start, type create a recovery drive, and select Create a recovery drive, and click Yes at the UAC
prompt.
3. Insert a USB flash drive.
4. Select Copy the recovery partition from the PC to the recovery drive > Next > Next > Create.
Step 3: Test the recovery media
1. On a computer that has no operating system, insert your recovery media.
2. Start the computer, press a key to open the firmware boot menus, and then select the appropriate boot device.
3. At the Windows RE Tools menus, select a keyboard layout, for example, US.
4. Click Troubleshoot > Reset your PC > Next. If you're prompted to clean the drive, select Yes.
5. Select Yes, repartition the drives > Just remove my files > Reset.
Troubleshooting:
Make sure that ResetConfig.xml is saved as a UTF-8 file.
Make sure that the filename listed in the <DiskpartScriptPath> element of the ResetConfig.xml file matches the
filename in the Diskpart script.
Make sure that the Diskpart script doesn't include commands to select the drive or clean the drive (
select disk 0 , clean ).
Related topics
Push-Button Reset Overview
ResetConfig XML Reference
Bare metal reset/recovery: create recovery media while deploying new devices
UEFI/GPT-based hard drive partitions
BIOS/MBR-based hard drive partitions
Push-button reset frequently-asked questions (FAQ)
6/6/2017 • 4 min to read • Edit Online
QUESTION ANSWER
Is Window RE required for a user to run the Push-button reset Yes. To run a Push-button reset feature, you must make the
features? Windows RE boot image (Winre.wim) available on the local
hard drive, and register its location by using the Reagentc tool.
You can use the default Winre.wim (available at
C:\Windows\System32\Recovery), or a custom Winre.wim
image. If Windows RE is not enabled on the local hard drive,
users will have to boot Windows RE from media to access
Push-button reset features.
When should I use Compact OS? Both the compression of system files and single-instancing of
customizations have similar characteristics as the WIMBoot
technology from Windows 8.1. While Compact OS is
supported on all hardware configurations, it is only
recommended to be used on PCs with flash-based storage.
How do I know if the OS is compressed? Compact.exe can be used to query the current compression
state.
How can I tell if a .ppkg is single-instanced? Run Fsutil.exe and specify the drive where the .ppkg is stored.
For example: fsutil.exe wim enumwims c:
Are there any formatting requirements for the ResetConfig.xml Yes. Always use UTF-8 encoding, and do not use Unicode or
file? ANSI. Add the following declaration in the ResetConfig.xml file,
and in other .xml files:
<?xml version="1.0" encoding="utf-8"?> .
What types of removable media are supported for DVDs or USB flash drives can be used as recovery media. Note
manufacturer-created recovery media? that Push-button reset features requires all recovery resources
to be located on the same piece of media.
Is Push-button reset supported on Windows Server ? No, this functionality is not supported on Windows Server
2016 Technical Preview.
Can custom recovery solutions (i.e. not Push-button reset) Provisioning packages can only be applied by Push-button
restore the provisioning packages created using either reset or deployment media created using Windows Imaging
Windows ICD or USMT’s ScanState tool. and Configuration Designer (ICD). Application of these
packages by custom recovery solutions is not supported.
QUESTION ANSWER
If the provisioning package created using USMT’s ScanState Yes, the Create a recovery drive utility will split the
tool is larger than 4GB, will the “Create a recovery drive” utility provisioning package into smaller pieces before copying them
allow customers to create USB recovery media? to the USB flash drive. During recovery, the pieces will be
reassembled into the original provisioning package.
I’ve preinstalled OS updates on the PC, how can I ensure that DISM.exe’s /Cleanup-Image command with the
they are restored during recovery? /StartComponentCleanup and /ResetBase options marks all
installed OS updates as permanent. Permanent updates are
always restored during recovery.
How can I determine when the /ResetBase option was last Check the LastResetBase_UTC registry entry under the
run? registry path:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\
CurrentVersion\Component Based Servicing
I have files that need to be persisted/restored when Reset your All contents under C:\Recovery\OEM are left unmodified
PC and Refresh your PC are performed, but I don’t want to during Reset your PC and Refresh your PC. However, it should
capture them using ScanState. Where should I put these files? be noted that these contents will also be backed up onto the
USB recovery media when using the Create a recovery drive
utility.
I can’t find the Refresh your PC option in Settings or Windows Both Refresh your PC and Reset your PC are now part of the
RE anymore. Where did the feature go? same user experience, under the Reset this PC option in
Settings and in Windows RE. When you launch the Reset this
PC experience, you’ll see additional options:
Keep my files – This initiates the Refresh your PC
feature.
Remove everything – This initiates the Reset your PC
feature.
Restore factory settings – On PCs upgraded from
Windows 8/8.1, this initiates factory recovery using the
existing recovery image.
Should I specify the /drivers option when using ScanState to The /drivers option is not required if the provisioning package
capture customizations? being created is to be used for Push-button reset features.
Push-button reset features persist the drivers which are
already installed, making it unnecessary to reapply the factory-
preinstalled drivers. Note: Driver applets installed outside of
the driver INF package are captured using ScanState’s /apps
option.
How much available disk space is required in order for the If you have converted the installed customizations into file
Refresh your PC feature to run successfully? pointers referencing the customizations package created using
ScanState, the required disk space is: 4GB + size_of_ppkg0.2
Otherwise, the required disk space is: 4GB +
size_of_ppkg2
Am I required to reduce the size of the MSR partition from No. Windows continues to support 128MB MSR partitions.
128MB to 16MB based on the updated partition layout However, on PCs with limited storage capacity, a 16MB MSR
recommendations? partition is recommended to give end users as much available
storage as possible.
QUESTION ANSWER
Is there any known issue with using Reset your PC to restore Although PBR features are not intended to be used on factory
PCs back to factory condition after going through factory floor floors, there’s no technical limitation which prevents it.
testing? However, keep the following in mind when using Reset your
PC on the factory floor:
If your factory floor testing includes activating
Windows, Reset your PC will not revert the unit back to
an non-activated state
Preinstalled RDX contents will be removed
If the unit is not reset for multiple days after factory
validation but remains powered on, the preinstalled
languages except for the one selected during OOBE will
be removed during maintenance
End users will be able to tell that a unit has been reset
during factory by looking for the PBR logs under
C:\Windows\Logs\PBR
REAgentC command-line options
8/5/2017 • 3 min to read • Edit Online
You can use the REAgentC.exe tool to configure a Windows Recovery Environment (Windows RE) boot image and
a push-button reset recovery image, and to administer recovery options and customizations. You can run the
REAgentC command on an offline Windows image or on a running Windows operating system.
Note
If you are using Windows PE 2.X, 3.X, or 4.X to configure recovery on an offline Windows 10 installation, you must
use the Winrecfg.exe file from the Recovery folder of the Windows Assessment and Deployment Kit (Windows
ADK). Winrecfg.exe supports only the offline operations that REAgentC.exe supports.
REAgentC Commands
The following command-line options are available for Windows RE:
reagentc.exe <command> <arguments>
The following table describes these command-line options:
Reagentc /enable
/auditmode
Reagentc /enable
/osguid {00000000-
0000-0000-0000-
000000000000}
OPTION ONLINE/OFFLINE DESCRIPTION
Reagentc /disable
Reagentc /boottore
Reagentc /info
Reagentc /setbootshelllink
/configfile
F:\BootMenu\AddDiagnosticsToo
lToBootMenu.xml
Reagentc /setbootshelllink
/target W:\Windows
Related topics
Windows RE Troubleshooting Features
ResetConfig XML reference
7/13/2017 • 3 min to read • Edit Online
This reference describes all XML elements that are used to author the ResetConfig.xml file, used to configure
Windows Recovery Environment push-button reset features.
Reset
The Reset XML element can contain the elements: Run and SystemDisk .
Run
The Run XML element is used to add custom scripts to push-button reset features.
You can specify up to four Run elements in a single ResetConfig.xml file. Each Run element must contain a
different [ExtPoint] value for the Phase attribute.
The following table describes the valid elements that can be added to the Run element:
ELEMENT DESCRIPTION
SystemDisk
The SystemDisk element customizes bare metal recovery functionality. For more information, see Create Media
to Run Push-Button Reset Features.
You can specify one SystemDisk section. Here's the required and optional elements:
ELEMENT DESCRIPTION
Using ResetConfig.xml
If you use a text editor to author your .xml files, you must save the document with an .xml file name extension,
and use UTF-8 encoding. You must not use ANSI coding.
These files should be placed in the folder C:\Recovery\OEM, and will automatically be detected by Push-button
reset features.
Example
This is a code example for the ResetConfig.xml file.
<?xml version="1.0" encoding="utf-8"?>
<Reset>
<Run Phase="BasicReset_BeforeImageApply">
<Path>Fabrikam\CopyFiles.cmd</Path>
<Duration>2</Duration>
</Run>
<Run Phase="BasicReset_AfterImageApply">
<Path>Fabrikam\InstallDrivers.cmd</Path>
<Param>/allDrivers</Param>
<Duration>2</Duration>
</Run>
<Run Phase="FactoryReset_AfterDiskFormat">
<Path>Fabrikam\FixPartitions.exe</Path>
<Duration>2</Duration>
</Run>
<Run Phase="FactoryReset_AfterImageApply">
<Path>Fabrikam\InstallDrivers.cmd</Path>
<Param>/allDrivers</Param>
<Duration>2</Duration>
</Run>
<SystemDisk>
<MinSize>75000</MinSize>
<DiskpartScriptPath>Fabrikam\CreatePartition.txt </DiskpartScriptPath>
<OSPartition>4</OSPartition>
<RestoreFromIndex>2</RestoreFromIndex>
<WindowsREPartition>1</WindowsREPartition>
<WindowsREPath>Recovery\WindowsRE</WindowsREPath>
<Compact>False</Compact>
</SystemDisk>
</Reset>
Related topics
Push-Button Reset Overview
Create Media to Run Push-Button Reset Features
Windows RE troubleshooting features
6/6/2017 • 4 min to read • Edit Online
If a Windows device can't start, it automatically fails over to the Windows Recovery Environment (Windows RE).
The Automatic Repair tool in Windows RE automates the diagnosis and repair of an unbootable Windows
installation. Windows RE is also a starting point for several tools for manual system recovery. This topic describes
the automatic failover behavior, manual diagnosis, and repair process in Windows RE.
Related topics
BCDboot Command-Line Options
REAgentC Command-Line Options
Windows Setup Technical Reference
6/6/2017 • 1 min to read • Edit Online
Windows Setup is a bootable program that installs the Windows operating system.
Practical applications
You can install or upgrade the Windows operating system on a PC from a USB key, a mounted .ISO file, DVD,
or network device.
You can automate the Windows installation process, including the configuration of drivers, packages, files,
and Windows system settings by using answer files created from Windows System Image Manager
Technical Reference.
You can use Windows Setup as an installer for your own customized Windows images.
You can use the menus in Windows Setup to prepare the hard drives before installation.
What's New
Windows 8.1 upgrades are different from previous Windows upgrade scenarios. For more info, see
Windows 8.1 Upgrade Scenarios for OEMs.
Windows Setup cannot be used to perform automated upgrades to most editions of Windows 8.1.
For volume-licensed editions of Windows, we've added a new command-line option, setup /auto , to
help enable upgrades. Note, we only plan to use this option for upgrades to Windows 8.1, and we may
remove the option in future versions of Windows. For more info, see Windows Setup Command-Line
Options.
Settings for Automating OOBE: The NetworkLocation setting is no longer needed to automate OOBE. The
functionality of the ProtectYourPC setting has changed.
See also
The following table contains links to resources related to this scenario.
This topic describes the supported platforms and deployment scenarios for running for Windows Setup.
When you’re deploying different types of PCs, you can use Windows Setup as a way to choose between your
images through the Windows Setup user interface to select a specific image. You can include images for a
variety of hardware platforms (such as BIOS and UEFI, 32-bit and 64-bit PCs), and across different versions of
Windows (such as Windows 8.1, Windows Server 2012 R2, and Windows 7).
You can also run Windows Setup through a script. Boot the PC to Windows PE, and then use the
\sources\setup.exe file to specify your image.
-or-
Run a 32-bit version of Windows Setup, and use the
Microsoft-Windows-Setup\ImageInstall\OSImage\ InstallFrom unattend setting to select a 64-bit
Windows image.
-or-
Use image-capturing tools to apply a 64-bit version of Windows to the PC.
Dism /Apply-Image /ImageFile:"Fabrikam_64-bit_image.wim" /Index:1 /ApplyDir:D:\
Windows 8 Yes
Windows 7 Yes
Windows Vista No
You can also run Windows Setup from the Windows Preinstallation Environment (Windows PE). The following
table lists the supported Windows PE environments:
Cross-Platform Deployment
Cross-platform deployment is the process of installing a specific architecture of Windows from an environment
of a different architecture. For example, you can deploy a 64-bit edition of Windows 8.1 or Windows 8 from a
32-bit edition of Windows PE. The benefit of using a cross-platform deployment solution is that you don't have
to maintain multiple versions of Windows PE for installing different architecture editions of Windows. You can
build a single Windows PE image that you can use to install both 32-bit and 64-bit editions of Windows.
When you install a 64-bit edition of Windows from a 32-bit version of Windows PE, you must use Windows PE
2.0 or a later version. For more information about Windows PE releases, see WinPE for Windows 10.
The following table lists the different architecture types of Windows images (32-bit or 64-bit) that a specific
version of Windows 8.1 Setup is able to install.
64-BIT WINDOWS 8.1 32-BIT WINDOWS 8.1 64-BIT WINDOWS 8 32-BIT WINDOWS 8
IMAGE IMAGE IMAGE IMAGE
Windows Setup installs the Windows operating system. Windows Setup uses a technology called Image-based
Setup (IBS) that provides a single, unified process with which all customers can install Windows. IBS performs
clean installations and upgrades of Windows and is used in both client and server installations. Windows Setup
also enables you to customize Windows during installation by using Setup answer file settings.
In this topic:
Common Usage Scenarios
Windows Setup Best Practices
Windows Setup Limitations
Related topics
Windows Setup Installation Process
Windows Setup Automation Overview
Audit Mode Overview
Windows Setup Configuration Passes
Windows Setup Supported Platforms and Cross-Platform Deployments
Windows Setup Automation Overview
7/13/2017 • 11 min to read • Edit Online
[SetupConfig]
NoReboot
ShowOobe=None
Telemetry=Enable
ReflectDrivers = <path of folder containing INF and SYS files for the encryption drivers>
If you include a parameter on the command line and the same parameter in the setupconfig file, the setupconfig
file parameter and value has precedence.
Using Windows Update
If the update is delivered through Windows Update, Windows Setup searches in a default location for a
setupconfig file. You can include the setupconfig file here:
"%systemdrive%\Users\Default\AppData\Local\Microsoft\Windows\WSUS\SetupConfig.ini"
Note
The answer file in the image may contain settings that have not yet been processed. If you want these
settings to get processed, edit the existing file rather than replacing it.
5. Unmount the image.
6. Test the image by deploying it to a new PC, without specifying an answer file. When Windows Setup runs,
it finds and uses this answer file.
Note
Windows Setup searches this
directory only on downlevel
installations. If Windows Setup
starts from Windows PE, the
%WINDIR%\Panther\Unattend
directory is not searched.
Important
Do not use, modify, or overwrite
the answer file in this directory.
The answer file in this directory
is annotated by Windows Setup
during installation. This answer
file cannot be reused in
Windows SIM or any other
Windows installations.
SEARCH ORDER LOCATION DESCRIPTION
8 Drive from where Windows Setup The name of the answer file must
(setup.exe) is running, at the root be Unattend.xml or
of the drive. Autounattend.xml, and must be
located at the root of the Windows
Setup folder path.
To use the new answer file, you can copy it to a directory of a higher precedence than the cached answer
file, or you can specify the answer file by using the **/unattend** option. For example:
```
sysprep /generalize /unattend:C:\MyAnswerFile.xml
```
Additional Resources
See the following topics for more information about answer files and configuration passes:
Best Practices for Authoring Answer Files
Create or Open an Answer File
Configure Components and Settings in an Answer File
Validate an Answer File
Hide Sensitive Data in an Answer File
How Configuration Passes Work
Related topics
Windows Setup Scenarios and Best Practices
Windows Setup Installation Process
Automate Windows Setup
Audit Mode Overview
Windows Setup Configuration Passes
Windows Setup Supported Platforms and Cross-Platform Deployments
Windows Setup Installation Process
6/6/2017 • 1 min to read • Edit Online
Windows® Setup is the program that installs Windows or upgrades an existing Windows installation. It is also the
basis for the following installation and upgrade methods:
Interactive Setup
Automated installation
Windows Deployment Services
In this topic:
Windows Setup Installation Types
Windows Setup Process
Downlevel (for custom installations and upgrades) 1. Specify Windows Setup configurations by using
either the Windows Setup dialog boxes
- or - (interactive) or an answer file (unattended), or a
Windows PE (for booting the Windows DVD or booting combination of the two. Windows Setup
a custom Windows PE image) configurations include adding a product key and
configuring a disk.
2. Apply answer file settings in the windowsPE
configuration pass to configure the installation
behavior and user experience.
3. Configure the disk.
4. Copy the Windows image to the disk.
5. Prepare boot information.
6. Process answer file settings in the offlineServicing
configuration pass. The settings are applied to the
Windows image before that Windows image
boots. When the computer first boots, any
optional components, drivers, updates, or
language packs are processed.
Related topics
Windows Setup Technical Reference
Automate Windows Setup
Settings for Automating OOBE
Windows Setup Scenarios and Best Practices
Windows Setup Automation Overview
Audit Mode Overview
Windows Setup Configuration Passes
Windows Setup Supported Platforms and Cross-Platform Deployments
Windows 8.1 Upgrade Scenarios for OEMs
10/26/2017 • 3 min to read • Edit Online
The Windows 8.1 upgrade retains the majority of OEM customizations, including OEM branding, apps, help and
support information, drivers, and OEM store listings. Some OEM solutions, including a custom Help and Support
experience or custom recovery solution might not persist through the upgrade. To mitigate any potential problems
for your customers, test the end-to-end upgrade experience.
The Windows 8.1 can be installed from the Microsoft Store or from media.
Upgrade options for Windows 8.1 include:
Full Upgrade preserves apps, user data, user accounts, and PC settings.
Data Only preserves user accounts and data, but doesn’t preserve desktop application installs or OS
settings. Drivers that are critical for installation (storage and networking drivers) are migrated to the new
installation.
Clean install doesn’t save any data or Windows configurations.
All personal files, and Windows files and directories, are moved to a Windows.old folder, and can be accessed after
Windows Setup is complete. Personal files will remain in Windows.old. After a period of time, Windows files from
the previous installation are removed.
The supported options for upgrade are:
Windows 8.1 upgrade installations from Windows Vista and Windows XP aren’t supported.
Windows RE
A Windows 8.1 version of Windows RE is installed so that the operating system can be repaired. During the
upgrade, boot critical and input device drivers are added to the new Windows RE image.
Windows RE is installed in the following ways:
1. The existing Windows RE partition is used on Windows RT.
2. The Windows RE partition is left in place on Windows 8 PCs with an OEM-configured Windows RE partition.
A new Windows RE partition is created by shrinking the Windows partition.
3. The existing Windows RE partition is used on Windows 8 PCs with a generic Windows RE partition.
Caution
Any OEM customizations to the existing Windows RE image aren’t migrated to the new Windows RE image.
Drivers
In Full upgrade scenarios, the following driver types are migrated:
Compatible drivers
Third-party drivers installed by an OEM or end-user
Storage drivers that are critical to installation are migrated to Windows PE as well as the operating system in
all upgrade scenarios.
The following drivers are not migrated:
Third-party in-box drivers, such as printer drivers, aren’t migrated because the new operating system
typically contains more up-to-date drivers.
Software filter drivers aren’t migrated, with the exception of antivirus filter drivers, or drivers installed by an
.inf file.
Network and Wi-Fi drivers are migrated on clean installations and Data Only upgrade scenarios.
All migrated drivers are placed in the driver repository and Windows automatically installs drivers during PnP
based on the criteria defined in How Windows Ranks Drivers.
Related topics
Windows Setup Technical Reference
Windows Setup Log Files and Event Logs
Boot from a DVD
6/6/2017 • 3 min to read • Edit Online
The simplest way to install Windows on new hardware is to start directly from the Windows product DVD by using
an answer file that is named Autounattend.xml. This method provides flexibility when network access is not
available or when you are building only a few computers. You can use this same method to build an initial image
in an image-based deployment scenario, typically known as a master installation.
By using the answer file, you can automate all or parts of Windows Setup. You can create an answer file by using
Windows System Image Manager (Windows SIM). For more information, see Create or Open an Answer File.
Prerequisites
To complete this walkthrough, you need the following:
An answer file on removable media (CD or DVD-ROM) or a USB flash drive. The answer file must be named
Autounattend.xml. The answer file must be located at the root of the media.
A Windows product DVD.
To install Windows from the Windows product DVD
1. Turn on the new computer.
Note
This example assumes that the hard disk drive is blank.
2. Insert both the Windows product DVD and the removable media that contains your answer file into the new
computer.
Note
When you use a USB flash drive, insert the drive directly into the primary set of USB ports for the computer.
For a desktop computer, this is typically in the back of the computer.
3. Restart the computer by pressing the CTRL+ALT+DEL keys. Windows Setup (Setup.exe) starts automatically.
By default, Windows Setup searches at the root of a drive and other locations, such as removable media, for
an answer file that is named Autounattend.xml. This occurs even if you do not explicitly specify an answer
file. For more information, see “Implicitly Searching for an Answer File” and “Implicit Answer File Search
Order” in Windows Setup Automation Overview.
4. After the Setup program is finished, validate that Windows applied all customizations, and then reseal the
computer by using the sysprep command together with the /generalize option.
The Sysprep tool removes all system-specific information and resets the computer. The next time that the
computer starts, your customers can accept the Microsoft Software License Terms and add user-specific
information.
Optional: To automatically run the Sysprep tool after the installation, set the Microsoft-Windows-
Deployment | Reseal component setting in your answer file (Autounattend.xml) as follows:
ForceShutdownNow = true, Mode =OOBE
Optional: To run the Sysprep tool manually from a running operating system, type the following at a
command prompt:
c:\windows\system32\sysprep /oobe /shutdown
Next Steps
This walkthrough illustrates a basic unattended installation that requires no user input. You can manually add
more customizations to the newly installed operating system. If this is a master installation or an installation that
you will use for image deployment, shut down the computer. Then, capture an image of the installation by using
the Deployment Image Servicing and Management (DISM) tool or any third-party imaging software.
Important
You must run the sysprep /generalize command before you move a Windows image to a new computer by any
method. These methods include imaging, hard disk duplication, and other methods. Moving or copying a Windows
image to a different computer without running the sysprep /generalize command is not supported, even if the
new computer has the same hardware configuration. Generalizing the image removes unique information from
the Windows installation so that you can apply that image on different computers.
The next time that you boot the Windows image, the specialize configuration pass runs. During this configuration
pass, many components perform actions that must occur when you boot a Windows image on a new computer.
For more information, see How Configuration Passes Work.
Related topics
Windows Setup Technical Reference
Use a Configuration Set with Windows Setup
Deploy a Custom Image
Boot Windows to Audit Mode or OOBE
Add Device Drivers to Windows During Windows Setup
Add a Custom Script to Windows Setup
Install Windows from a USB Flash Drive
3/1/2018 • 2 min to read • Edit Online
You can install Windows on a device without a DVD drive by using a USB flash drive.
NOTE
If you're looking for a tool that downloads Windows 10 and creates a bootable USB Windows installation drive, see
Download Windows 10.
This topic covers how to create a bootable Windows installation USB drive from a Windows 10 install .iso or DVD.
NOTE
If Mark Partition as Active isn't available, you can instead use diskpart to select the partition and mark it active.
robocopy D: E: /s /max:3800000000
2. Split the Windows image file into smaller files, and put the smaller files onto the USB drive:
Note, Windows Setup automatically installs from this file, so long as you name it install.swm.
Related topics
Windows Setup Technical Reference
Deploy a Custom Image
7/13/2017 • 4 min to read • Edit Online
In this topic you create a reference installation, capture an image of the installation, and rerun Windows® Setup
with an answer file that points to your custom image. Deploying a custom image using Windows Setup provides
several benefits over applying an image using an image capture tool.
Setup supports the following:
Applying another answer file for additional customizations during deployment.
Reconfiguring disk configuration.
Adding additional drivers.
Replacing a product key.
Selecting a different language to install.
Selecting from a list of images to install, if your image file contains more than one image.
Installing to a different drive location.
Upgrading an existing Windows installation.
Configuring the computer to dual-boot operating systems.
Ensuring that the hardware can support Windows 8.
There are some limitations to installing a custom image using Windows Setup. For more information, see
Windows Setup Scenarios and Best Practices.
In this topic:
Copy the Windows product DVD source files to a network share
Create a master installation
Capture an image of the installation
Create a custom answer file
Deploy the image by using Windows Setup
Prerequisites
To complete this walkthrough, you need the following:
A technician computer. A technician computer is any computer that has the Windows Assessment and
Deployment Kit (Windows ADK) tools installed..
A Windows 8 product DVD.
A master computer on which you will install and capture your custom image.
Bootable Windows PE media. There are several types of Windows PE media that you can create. For more
information about these options, see WinPE for Windows 10.
Access to a network share to store your custom image and Windows Setup source files.
Step 1: Copy the Windows product DVD source files to a network
share
On your technician computer, copy the entire content of the Windows product DVD to a network share. For
example:
3. Replace the default Install.wim on the network share with your custom image. The image must be called
Install.wim. For example:
Microsoft-Windows- windowsPE
Setup\DiskConfiguration\Disk\CreatePartitions\
CreatePartition
Microsoft-Windows- windowsPE
Setup\DiskConfiguration\Disk\ModifyPartitions\
ModifyPartition
Microsoft-Windows- windowsPE
Setup\ImageInstall\OSImage\InstallTo
Note
Expand the component list until you see the lowest setting listed in the previous table, and then add that
setting to your answer file. This shortcut will add the setting and all parent settings to your answer file in
one step.
5. All of the settings that you added must appear in the Answer File pane. Select and configure each setting
as specified in the following table.
COMPONENT VALUE
Microsoft-Windows-Setup\DiskConfiguration
WillShowUI = OnError
Microsoft-Windows-
Setup\DiskConfiguration\Disk DiskID = 0
WillWipeDisk = true
Microsoft-Windows-
Setup\DiskConfiguration\Disk\CreatePartitions\C Extend = false
reatePartition Order = 1
Size = 300
Type = Primary
Microsoft-Windows-
Setup\DiskConfiguration\Disk\CreatePartitions\C Extend = true
reatePartition Order = 2
Type = Primary
COMPONENT VALUE
Microsoft-Windows-
Setup\DiskConfiguration\Disk\ModifyPartitions\ Active = true
ModifyPartition Extend = false
Format = NTFS
Label = System
Letter = S
Order = 1
PartitionID = 1
Microsoft-Windows-
Setup\DiskConfiguration\Disk\ModifyPartitions\ Extend = false
ModifyPartition Format = NTFS
Label = Windows
Letter = C
Order = 2
PartitionID = 2
Microsoft-Windows-
Setup\ImageInstall\OSImage</strong> WillShowUI = OnError
Microsoft-Windows-
Setup\ImageInstall\OSImage\InstallTo DiskID = 0
PartitionID = 2
6. In a command prompt window copy the answer file to a network location. For example:
Next Steps
You can further customize your answer file to include additional options. You can also build a DVD deployment
media that contains the same content that you put on the network share. A single deployment DVD provides a
portable installation solution that requires no network or any additional resources. The process includes building a
configuration set and recapturing all source files into a single DVD.
Important
The DVD media that you create is for internal deployment use only. You cannot redistribute this media.
Related topics
Windows Setup Technical Reference
Boot from a DVD
Use a Configuration Set with Windows Setup
Boot Windows to Audit Mode or OOBE
Add Device Drivers to Windows During Windows Setup
Add a Custom Script to Windows Setup
Automate Windows Setup
9/5/2017 • 4 min to read • Edit Online
You can prevent some or all of the user interface (UI) pages from Windows Setup from being displayed during
installation. The default behavior of Windows Setup is to display the Setup UI if any of the required settings are
incorrect or empty.
List of settings
The following is a list of the settings used in these answer files:
Windows Setup language settings: Microsoft-Windows-International-Core-WinPE\UILanguage and
Microsoft-Windows-International-Core-WinPE\SetupUILanguage\UILanguage.
Product key: Microsoft-Windows-Setup\UserData\ProductKey\Key.
Note
When you use an Autounattend.xml file with Windows Setup and rely on an implicit answer-file search, the
language selection page in Setup is not displayed, even if you explicitly do not configure language settings in your
answer file. For more information about implicit answer files, see Windows Setup Automation Overview.
Type your Product Key for Activation Page
The product key must match the Windows edition you intend to install. For more information, see Work with
Product Keys and Activation.
SETTING DESCRIPTION
Microsoft-Windows-Setup | UserData | ProductKey | Key Specifies the product key used to install Windows.
Microsoft-Windows-Setup | ImageInstall | OSImage | Use Key and Value together to select a specific Windows
InstallFrom | MetaData | (Key and Value). image to install. Required for some Windows Server®
2012 editions.
You can get the image information by using the DISM
/Get-ImageInfo command. For more information, see
Image Management Command-Line Options.
SETTING DESCRIPTION
Microsoft-Windows-Setup | UpgradeData | Upgrade Specifies that the present installation is an upgrade from
a previous version of Windows.
SETTING DESCRIPTION
Microsoft-Windows-Setup | ImageInstall | OSImage | Specifies the disk where Windows will be installed.
InstallTo | DiskID
Microsoft-Windows-Setup | ImageInstall | OSImage | Specifies the partition where Windows will be installed.
InstallTo | PartitionID
-or-
SETTING DESCRIPTION
Microsoft-Windows-Setup | ImageInstall | OSImage | Specifies to install Windows on the first available partition.
InstallToAvailablePartition
Microsoft-Windows-Setup | WindowsDeploymentServices Specifies the image to be installed and the location where
| ImageSelection it is installed, as well as whether the UI is displayed.
SETTING DESCRIPTION
Microsoft-Windows-Setup | WindowsDeploymentServices Specifies the disk ID of the disk to which the image is to
| ImageSelection | InstallTo | DiskID be installed.
Related topics
Settings for Automating OOBE
Windows Setup Technical Reference
Use a Configuration Set with Windows Setup
7/13/2017 • 2 min to read • Edit Online
Use a configuration set to add applications, drivers, packages, scripts, files and folders to Windows during
installation. A configuration set is a portable collection of files and folders that you can place on a USB Flash Drive
(UFD) or on a network share.
To use a configuration set, you need the following:
A configuration set. For more information, see Create a Configuration Set.
A Windows product DVD.
A removable media, such as a USB flash drive (UFD), if you intend to install without a network.
A bootable Windows PE media if you intend to install from a network. For more information, see WinPE:
Create USB Bootable drive.
How to use a Configuration Set with a Windows DVD
1. Turn on the computer.
2. Insert both the removable media that contains your configuration set and the Windows product DVD into
the new computer.
Note
When using a USB flash drive, insert the drive directly into the primary set of USB ports for the computer.
For a desktop computer, this is typically in the back of the computer.
3. Restart the computer by pressing CTRL+ALT+DEL.
4. When the computer reboots, you might be prompted to press any key to boot from the CD-ROM drive.
Press any key and Windows Setup (Setup.exe) starts automatically.
By default, Windows Setup searches all removable media for an answer file that is named
Autounattend.xml. Autounattend.xml must be located at the root of the removable media.
Installation starts, and the settings you configured in your answer file will be applied.
How to use a Configuration Set from a Network
1. Create two folders on a network share to store the product DVD source files and your configuration set. For
example,
6. Run Windows Setup from the network and reference your answer file in your configuration set. For
example,
N:\WindowsDVD\setup /unattend:N:\ConfigurationSets\autounattend.xml
Related topics
Windows Setup Technical Reference
Add a Custom Command to an Answer File
Boot from a DVD
Deploy a Custom Image
Boot Windows to Audit Mode or OOBE
Add Device Drivers to Windows During Windows Setup
Add a Custom Script to Windows Setup
Add Device Drivers to Windows During Windows
Setup
7/13/2017 • 2 min to read • Edit Online
To install Windows® on some hardware designs, you may need to add device drivers to Windows Setup. You
can add drivers to Windows Setup by using an answer file that specifies the path to the driver files. To do this in
new installations, you add the Microsoft-Windows-PnpCustomizationWinPE component during the windowsPE
configuration pass, add the driver paths, and then specify the answer file.
You can also modify existing images and add and remove drivers. You can service offline images in several ways.
For example, you can add the Microsoft-Windows-PnpCustomizationsNonWinPE component during the
offlineServicing configuration pass, add or remove the driver paths, and then specify the name of the answer file.
For more information about how to modify drivers on an offline Windows image by using an answer file, and
also other methods of adding drivers to and removing drivers from an existing image, see Add and Remove
Drivers to an Offline Windows Image.
Setup /unattend:C:\unattend.xml
Windows Setup adds the device drivers in the \\server\share\drivers path to the system during the setup
process.
For more information about drivers, see Device Drivers and Deployment Overview and Add a Driver Online in
Audit Mode. For more information about Windows components, see Unattended Windows Setup Reference.
Related topics
Windows Setup Technical Reference
Boot from a DVD
Deploy a Custom Image
Boot Windows to Audit Mode or OOBE
Use a Configuration Set with Windows Setup
Add a Custom Script to Windows Setup
Add a Custom Script to Windows Setup
7/13/2017 • 4 min to read • Edit Online
Windows Setup scripts: Setupcomplete.cmd and ErrorHandler.cmd are custom scripts that run during or
after the Windows Setup process. They can be used to install applications or run other tasks by using
cscript/wscript scripts.
%WINDIR%\Setup\Scripts\SetupComplete.cmd: This script runs immediately after the user sees the
desktop. This setting is disabled when using OEM product keys. It runs with local system permission.
%WINDIR%\Setup\Scripts\ErrorHandler.cmd: This script runs automatically when Setup encounters a
fatal error. It runs with local system permission.
Windows Unattend scripts: Create an Unattend.xml file with one of these settings to run during the Windows
Setup process. This can be used with OEM product keys.
To run services or commands that can start at the same time, use RunAsynchronousCommands. To run
commands that need to finish before other commands can start, use RunSynchronousCommands.
Note As of Windows 10, Microsoft-Window-Shell-Setup\LogonCommands\AsynchronousCommand now works
like LogonCommands\AsynchronousCommand: all commands using these unattend settings are now started at
the same time, and no longer wait for the previous command to finish.
Some of these settings run in the user context, others run in the system context depending on the configuration
pass.
Add Microsoft-Windows-Setup\RunAsynchronousCommand or RunSynchronousCommand to run a script as
Windows Setup starts. This can be helpful for setting hard disk partitions.
Add Microsoft-Windows-Deployment\RunAsynchronousCommand or RunSynchronousCommand to the
auditUser configuration pass to run a script that runs when the PC enters audit mode. This can be helpful for
tasks like automated app installation or testing.
Add Microsoft-Windows-Shell-Setup\LogonCommands\AsynchronousCommand or
FirstLogonCommands\SynchronousCommand to run after the Out of Box Experience (OOBE) but before
the user sees the desktop. This can be especially useful to set up language-specific apps or content after
the user has already selected their language.
Use these scripts sparingly because long scripts can prevent the user from reaching the Start screen
quickly. For retail versions of Windows, additional restrictions apply to these scripts. For info, see the
Licensing and Policy guidance on the OEM Partner Center.
Note When you add a script using FirstLogonCommands, it will be triggered on the next boot, even if you
boot into audit mode using Ctrl+Shift+F3. To boot to audit mode without triggering these scripts, add the
setting: Microsoft-Windows-Deployment\Reseal\Mode = Audit.
Setup /m:C:\Temp
Related topics
Windows Setup Technical Reference
Boot from a DVD
Use a Configuration Set with Windows Setup
Deploy a Custom Image
Boot Windows to Audit Mode or OOBE
Add Device Drivers to Windows During Windows Setup
Boot Windows to Audit Mode or OOBE
7/13/2017 • 5 min to read • Edit Online
You can use audit mode to customize your computer, add applications and device drivers, and test your
computer in a Windows environment. Booting to audit mode starts the computer in the built-in administrator
account. Windows® removes this account automatically during the generalize configuration pass. After you
configure a computer to boot to audit mode, the computer will continue to boot to audit mode by default
until you configure the computer to boot to Out-Of-Box Experience (OOBE) when the computer ships to the
user.
If a password-protected screen saver starts when you are in audit mode, you cannot log back on to the
system. The built-in administrator account that is used to log on to audit mode is immediately disabled after
logon. To disable the screen saver, either change the power plan through Windows Control Panel or
configure and deploy a custom plan. For more information, see Create a Custom Power Plan.
where <image_index> is the number of the selected image on the .wim file.
3. Copy the new answer file to the C:\test\offline\Windows\Panther\Unattend folder.
4. Commit the changes, and then unmount the image. For example:
When the image is applied to the destination computer and Windows is booted, the computer boots
into audit mode automatically, and the Sysprep tool appears. For sample procedures, see Step 1:
Transfer an image to a different computer and Step 2: Prepare the computer for a customer in
Deployment examples.
Options for applying an image also include using answer file settings, such as specifying the image to install
and the disk configurations to make on the destination computer. For more information, see the Unattended
Windows Setup Reference Guide.
Deployment examples
To transfer an image to a different computer, you must first remove the computer-specific information from
the configured computer by generalizing the image with the Sysprep tool. To prepare a computer for the
customer, you must generalize the computer, and then set it to boot to OOBE when a customer starts the
computer for the first time. In the following examples we create and transfer a reference image to a different
computer, and then create a model-specific image that ships to a customer.
Step 1: Transfer an image to a different computer
1. Install Windows on a reference computer.
2. After the installation is complete, boot the computer and install any additional device drivers or
applications.
3. After you update the Windows installation, run Sysprep:
At the command line, run the Sysprep /generalize /shutdown command.
-or-
In the System Preparation Tool window, select the Generalize check box under the System
Cleanup Action box on the Shutdown Options box, select Shutdown, and then click OK.
Sysprep removes system-specific data from the Windows installation. System-specific information
includes event logs, unique security IDs (SIDs), and other unique information. After Sysprep removes
the unique system information, the computer shuts down.
4. After the computer shuts down, insert the Windows PE USB flash drive or other bootable media, and
reboot into Windows PE.
5. In the Windows PE session, capture the reference image by using the Dism /capture-image
command.
6. Proceed to the next step to create a model-specific reference image.
Step 2: Prepare the computer for a customer
1. Install the reference image you created in Step 1 that is destined for your customer.
2. After you update the Windows installation, at the command line run the Sysprep /audit /generalize
/shutdown command to configure Windows to boot the computer to audit mode. You can then
capture the Windows image by booting to another partition or by using Windows PE.
3. Use the new model-specific reference image to install Windows on a new computer. The Windows
image is applied to the computer, and Windows boots to audit mode.
4. (Optional) You can install additional applications and other updates based on a customer's order. You
can also test the computer to verify that all components are working correctly.
5. After you update the Windows installation, run the Sysprep /oobe /shutdown command.
Note
If you install Windows images by using the Sysprep /generalize /oobe command, the user
experience will not be ideal. On the next reboot after you run the Sysprep /generalize /oobe
command, Windows runs the specialize configuration pass, Plug and Play, and other Setup tasks
before Windows starts OOBE. This process can take additional time and can delay a customer's first
logon.
6. Package and deliver the computer to your customer.
When the customer starts the computer, OOBE runs.
Related topics
Windows Setup Technical Reference
DISM Image Management Command-Line Options
Audit Mode Overview
Add a Driver Online in Audit Mode
Enable and Disable the Built-in Administrator Account
Boot from a DVD
Use a Configuration Set with Windows Setup
Deploy a Custom Image
Add Device Drivers to Windows During Windows Setup
Add a Custom Script to Windows Setup
Add multilingual support to Windows Setup
7/13/2017 • 4 min to read • Edit Online
Windows Setup multilingual support allows you to choose different languages for Windows Setup and Windows
installation. This scenario allows for a technician to run Windows setup in one language, and install Windows in a
different language.
This walkthrough provides steps for creating Windows installation media with multilingual support.
Prerequisites
To complete this walkthrough, you need the following:
A technician computer that has the Windows Assessment and Deployment Kit (Windows ADK) installed
Windows installation media for all languages that you are creating media
The Windows language pack ISO
md C:\my_distribution
xcopy /E D: C:\my_distribution
md C:\mount\boot
md C:\mount\windows
Important
For Windows Server 2016, you must use the WinPE-Setup-Server optional components instead of the
WinPE-Setup-Client optional components.
4. For Japanese (ja-JP), Korean (ko-KR), and Chinese (zh-HK, zh-CN, zh-TW), you have to add additional font
support to your image. For example, to add Japanese font support:
Where E: is the location of the Windows installation media that contains the localized Windows Setup
resources.
2. Change the Windows Setup default language with DISM. For example:
For more information about specifying different international settings for input locale, and other items see
DISM Languages and International Servicing Command-Line Options.
3. Copy the lang.ini file in the Windows distribution to the boot.wim file.
Next Steps
You can now use the multilingual image to create media for distribution. To create bootable media such as a USB
flash drive, see WinPE: Create USB Bootable drive. You can also create a bootable CD or DVD. However, due to the
size of a multilingual image, you must first create a boot order file before you create a bootable image (.iso) file on
CD or DVD. For more information, see Oscdimg Command-Line Options.
Related topics
Windows Setup Technical Reference
DISM Image Management Command-Line Options
DISM Windows PE Servicing Command-Line Options
Oscdimg Command-Line Options
WinPE: Mount and Customize
WinPE: Install on a Hard Drive (Flat Boot or Non-RAM)
Windows Setup Command-Line Options
2/6/2018 • 13 min to read • Edit Online
The following command-line options are available for Windows Setup. Beginning with Windows 10, version 1607,
you can use a setupconfig file as an alternative to passing paramters to Windows Setup on a command line. For
more information, see Windows Setup Automation Overview.
setup.exe
OPTION DESCRIPTION
/1394Debug:<channel> [BaudRate:<baudrate>] Enables kernel debugging over an IEEE 1394 (FireWire) port
while Windows is running and during the windowsPE
configuration pass of Windows Setup.
Examples:
/BusParams:<bus.device.function> Specifies the PCI address of a 1394, USB, or NET debug port.
The bus, device, and function numbers must be in decimal
format. Example:
Setup /busparams:0.29.7
/CompactOS {Enable / Disable} Specifies whether to use the Compact OS feature to save hard
drive space. By default, Windows Setup determines whether
to use this feature automatically.
Example:
Example:
/DiagnosticPrompt {enable | disable} Specifies that the Command Prompt is available during
Windows Setup.
/DynamicUpdate {enable | disable} Specifies whether setup will perform Dynamic Update
operations (search, download, and install updates). Example:
/EMSPort: {COM1 | COM2 | off} [/emsbaudrate: Enables or disables Emergency Management Services (EMS)
<baudrate>] during Windows Setup and after the server operating system
has been installed. The following arguments are used to
specify the behavior of EMS during Windows Setup.
Can also be used with split image files (.swm). Select the first
split image file in the series, for example:
$OEM$\$1
$OEM$\$$
$OEM$\$progs
$OEM$\$docs
Pro\sources\setup.exe /m
Pro\sources\$OEM$\$$\i386\msmsgs.ex_
If you use files that are not on an installation share, you must
specify the folder name. In this example the <folder_name> is
C:\additional_files:
Setup /m:C:\additional_files
C:\additional_files\$$\i386\msmsgs.ex_
You can use this switch with /installdrivers, though it's not
required.
Use port to identify the port. The default start port is 49152,
and the default end port is 65535.
Examples:
setup
/netdebug:hostip=10.125.4.86,port=50000,key=0.0.0.0
setup /netdebug:hostip=10.125.4.86,port=50000,
key=abcdefg.123.hijklmnop.456,nodhcp
setup /netdebug:hostip=10.1.4.8,port=50000,
key=dont.use.previous.keys,busparams=1.5.0
Setup /noreboot
/PKey<product key> Supplies Setup with the specific product key. Example:
/PostRollback<location> [\setuprollback.cmd] If the user rolls back their version of Windows, run a script.
/Quiet This will suppress any Setup user experience including the
rollback user experience. Example:
/ResizeRecoveryPartition {Enable / Disable} Specifies whether it's OK to resize the existing Windows
Recovery Environment (Windows RE) partition or create a new
one during installation.
/ShowOOBE {full / none} full: Requires the user to interactively complete the out of box
experience (OOBE).
Example:
/Telemetry {Enable / Disable} Specifies whether Windows Setup should capture and report
installation data.
Setup /tempdrive H
/Unattend:<answer_file> Enables you to use an answer file with Windows Setup. This is
known as an unattended installation. You must specify a
value for <answer_file>. Windows Setup applies the values in
the answer file during installation.
Setup /unattend:\server\share\unattend.xml
/Uninstall {enable / disable} Determines whether Windows will include controls that allow
the user to go back to the previous operating system.
Setup /usbdebug:testmachine01
Related topics
Windows Setup States
Windows Setup Edition Configuration and Product ID Files (EI.cfg and PID.txt)
Windows Setup Log Files and Event Logs
Windows Setup States
7/13/2017 • 1 min to read • Edit Online
There are several states assigned to a Windows® image during installation. This state information can be used to
detect automatically the different states and stages of Windows Setup.
IMAGE_STATE _UNDEPLOYABLE This is the default state for an image in a given phase of
Windows Setup that is not yet complete. If a process
queries the IMAGE_STATE value and
IMG_UNDEPLOYABLE is returned, the image is in one of
the following states:
Setup is currently running and has not fully
completed the phase. Once a given phase is
complete, the IMAGE_STATE will be set to an
appropriate completion value.
If queried online when Setup is not running, there
was a failure when completing a Setup phase. This
image must be reinstalled.
If queried offline, the image did not finish a phase
and will never be deployable.
STATE NAME DESCRIPTION
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State
ImageState REG_SZ IMAGE_STATE_SPECIALIZE_RESEAL_TO_OOBE
C:\>type %windir%\Setup\State\State.ini
[State]
ImageState="IMAGE_STATE_SPECIALIZE_RESEAL_TO_OOBE"
Related topics
Windows Setup Command-Line Options
Windows Setup Edition Configuration and Product ID Files (EI.cfg and PID.txt)
Windows Setup Log Files and Event Logs
Windows Setup Edition Configuration and Product
ID Files (EI.cfg and PID.txt)
7/13/2017 • 2 min to read • Edit Online
The edition configuration (EI.cfg) file and the product ID (PID.txt) file are optional configuration files that you can
use to specify the Windows® product key and the Windows edition during Windows installation. You can use
these files to automate the product-key entry page in Windows Setup instead of using an answer file. If you use an
EI.cfg file to differentiate volume license media, but you do not include a PID.txt file, the user receives a prompt for
a product key to continue Windows Setup.
You can reuse the product key in the product ID file for multiple installations. The product key in the product ID file
is only used to install Windows. This key is not used to activate Windows. For more information, see Work with
Product Keys and Activation.
EI.cfg Format
The EI.cfg file specifies the values for the edition ID, the channel, and the volume license.
The EI.cfg file has the following format:
[EditionID]
{Edition ID}
[Channel]
{Channel Type}
[VL]
{Volume License}
{Edition ID} must be a valid Windows edition ID, for example, "Enterprise". To obtain the current EditionID, use the
Dism /Get-ImageInfo command or the Dism /Get-CurrentEdition command. For more information, see Take
Inventory of an Image or Component Using DISM and DISM Windows Edition-Servicing Command-Line Options.
{Channel Type} must be either "OEM" or "Retail"
{Volume License} must be either 1, if this is a volume license, or 0, if this is not a volume license. For example:
[EditionID]
Enterprise
[Channel]
OEM
[VL]
0
PID.txt Format
The PID.txt file contains the product key for the edition of Windows that you are installing.
The PID.txt file has the following format:
[PID]
Value=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
Troubleshooting
"The product key entered does not match any of the Windows images available for installation. Enter a
different product key.": You may need to download a separate version of Windows. OEM versions are only
available to OEMs, and volume licenses are only available to MSDN subscribers.
Related topics
Work with Product Keys and Activation
Windows Setup Command-Line Options
Windows Setup States
Windows Setup Log Files and Event Logs
7/13/2017 • 2 min to read • Edit Online
Windows® Setup creates log files for all actions that occur during installation. If you are experiencing problems
installing Windows, consult the log files to troubleshoot the installation.
Windows Setup log files are available in the following directories:
$windows.~bt\Sources\Rollback Log location when Setup rolls back in the event of a fatal
error.
-or-
Tracerpt /l C:\windows\panther\setup.etl
Related topics
Windows Setup Command-Line Options
Windows Setup States
Windows Setup Edition Configuration and Product ID Files (EI.cfg and PID.txt)
Windows Setup Configuration Passes
6/6/2017 • 1 min to read • Edit Online
Configuration passes are used to specify different phases of Windows® Setup. Unattended installation settings
can be applied in one or more configuration passes.
In This Section
The following topics describe the configuration passes used with Windows Setup.
How Configuration Passes Work A description of the different phases of Windows Setup,
and the different configuration passes used to install and
configure a Windows installation.
Related topics
Windows Setup Scenarios and Best Practices
Windows Setup Installation Process
Windows Setup Automation Overview
Audit Mode Overview
Windows Setup Supported Platforms and Cross-Platform Deployments
How Configuration Passes Work
7/13/2017 • 12 min to read • Edit Online
Configuration passes are the phases of a Windows® installation during which you can customize an image.
Windows unattended installation settings can be applied in one or more configuration passes, depending on the
setting you use. Understanding how and when configuration passes run is very important in developing a
Windows deployment strategy.
In this topic:
Understanding Configuration Passes
Configuring Device Drivers
Configuring International Settings
Examples
Not all configuration passes run in a particular installation of Windows. Some configuration passes, such as
auditSystem and auditUser, run only if you boot the computer to audit mode. Most Windows Setup unattend
settings can be added to either the specialize or the oobeSystem configuration pass. The other configuration
passes can also be useful in certain situations. The following table describes each of the configuration passes.
For more information about Windows components and settings that can be added to an answer file, see the
Unattended Windows Setup Reference Guide. For more information about logging, see Deployment
Troubleshooting and Log Files and Windows Setup Log Files and Event Logs.
Examples
The following sections describe sample deployment scenarios and describe when configuration passes run.
To run Windows Setup
In this scenario, you install Windows to a new computer. You start with the Windows product media and an
answer file.
1. Run Windows Setup and specify an answer file. Windows Setup starts.
2. The windowsPE configuration pass runs. Settings in the <settings pass="windowsPE"> section of an
answer file are processed. There are two different types of settings that you can configure during the
windowsPE configuration pass: Settings that apply to the Windows PE environment, such as the display
resolution and log file locations for Windows PE. You can also specify settings that apply to the Windows
installation, such as configuring disk partitions or enabling dynamic updates.
The Windows PE-specific settings in an answer file are applied only when you are running
Windows Setup from a Windows PE environment.
The Windows Setup options in the windowsPE configuration pass are applied when it runs from
either Windows PE or a previous Windows installation.
3. After the Windows image is copied to the hard disk, the offlineServicing configuration pass runs. Any
settings in the <servicing> and <settings pass="offlineServicing"> section of an answer file are applied
to the Windows image. Typically, the actions in this configuration pass install or remove packages,
language packs, or device drivers.
4. The system restarts and Windows Setup runs the specialize configuration pass. At this point, settings in
the <settings pass="specialize"> section of the answer file are processed.
5. After Windows Setup completes, the computer restarts. Then, the oobeSystem configuration pass runs
and settings in the <settings pass="oobeSystem> section of an answer file are processed.
Note
You can create a separate content file called Oobe.xml that you can use to customize Windows Welcome,
Getting Started, and ISP sign up. Using Oobe.xml is useful for organizing these customizations, because it
enables you to maintain a single file that lists all of the branding, license terms, and signup opportunities
for multiple countries, regions and/or languages. For more information, see Configure Oobe.xml.
Generally, Oobe.xml is used by OEMs and System Builders. However some aspects of Oobe.xml might
also benefit corporate deployment scenarios.
6. Windows Welcome starts and you can begin using the computer.
To run the Sysprep /generalize /shutdown command
In this scenario, you will create a reference Windows image to use throughout your environment. You start with
a customized Windows installation.
1. Run the sysprep command with the /generalize /shutdown /oobe options, to create a master image,
configure the computer to boot to Windows Welcome, and then shut down the computer.
2. The settings in the <settings pass="generalize"> section of an answer file are applied.
If you did not specify an answer file with the Sysprep command, the answer file cached to the
computer will be used. For more information about how to use answer files, see Windows Setup
Automation Overview.
If you specified an answer file with the sysprep command, that answer file is cached to the
%WINDIR%\Panther directory of the Windows installation and will be used on subsequent
configuration passes.
3. The computer shuts down, enabling you to boot to Windows PE or another operating system and capture
the image. The next time the Windows image boots, the specialize configuration pass will run and
Windows will boot the computer to Windows Welcome.
Using a Script to Deploy a Windows Image
In this scenario, you boot the computer with a master image on which the sysprep /generalize /shutdown
/oobe command was run and the image was captured. You start with a master image, Windows PE and the
DISM tool.
1. Apply the master image to a computer by using the dism command with the /apply-image option.
2. Boot the computer with the master image. Windows starts.
3. The specialize configuration pass runs. Settings in the <settings pass="specialize"> section of the
answer file are processed.
4. The computer restarts.
5. The oobeSystem configuration pass runs. Settings in the <settings pass="oobeSystem"> section of the
answer file are processed.
6. Windows Welcome starts and you can begin using your computer.
To boot Windows to audit mode
In this scenario, you boot a Windows image that is configured to start in audit mode. Audit mode is useful for
adding custom applications, drivers, and other updates to a master image. You can configure a Windows image
to boot the computer to audit mode by configuring the following setting in an answer file: Microsoft-Windows-
Deployment | Reseal | Mode =Audit or, run the Sysprep command with the /audit option.
1. Configure the Windows image to boot the computer to audit mode. In this scenario, run the sysprep
command with the /audit /reboot options.
2. Windows reboots the computer.
3. The auditSystem configuration pass runs. Settings in the <settings pass="auditSystem"> section of the
answer file are processed.
4. The Built-in administrator account is enabled.
5. The auditUser configuration pass runs. Settings in the <settings pass="auditUser"> section of the
answer file are processed.
6. The desktop appears.
The next time that you reboot the computer, it will boot to audit mode again.
To configure the computer to boot to Windows Welcome, you must use the sysprep command with the /oobe
option, or configure the Microsoft-Windows-Deployment | Reseal | Mode setting to oobe in an answer file.
To run DISM against an offline Windows image
In this scenario, you run DISM against an offline Windows image.
1. Run DISM tool against an offline Windows image and specify an answer file. For example, to list the
package in an offline Windows image, use the following command:
2. Settings in the <servicing> and <settings pass="offlineServicing"> sections of an answer file are
applied to the Windows image. The next time that you boot your computer, the packages and settings are
processed.
For more information, see DISM Image Management Command-Line Options.
To use DISM on a running Windows image
In this scenario, you run the DISM tool against a running Windows installation.
Run DISM against an online Windows image and specify an answer file. For example, to list driver
information in a Windows image, use the following command:
Important
When you use DISM with an answer file against an online Windows installation, the answer file should
contain only the elements in the offlineServicing configuration pass. This is because some settings in
the specialize configuration pass might be applied to the online Windows installation.
In some instances, you might be required to restart your computer. For example, if you add a language pack to
your Windows installation, you must reboot the computer.
Related topics
auditSystem
auditUser
generalize
offlineServicing
oobeSystem
specialize
windowsPE
auditSystem
6/6/2017 • 1 min to read • Edit Online
The auditSystem configuration pass processes unattended Windows® Setup settings in system context in audit
mode. The auditSystem configuration pass runs immediately before the auditUser configuration pass, which is
used to apply settings in user context. When Windows boots to audit mode, the auditSystem configuration
pass and the auditUser unattended Windows Setup settings are processed.
Audit mode enables OEMs and corporations to install additional device drivers, applications, and other updates
to a master Windows image. By using audit mode, you can maintain fewer images because you can create a
reference image with a minimal set of drivers and applications. The reference image can then be updated with
additional drivers during audit mode. Additionally, you can then test and resolve any issues related to
malfunctioning or incorrectly installed devices on the Windows image before shipping the computer to a
customer. Audit mode is optional.
The following diagram shows when the auditSystem configuration pass is processed in audit mode.
The auditSystem configuration pass runs only when you configure Windows Setup to boot into audit mode.
You can boot to audit mode by using the sysprep command with the audit option, or the sysprep command
with the generalize and audit options, or you can specify the Reseal setting in the Microsoft-Windows-
Deployment component. For more information, see Audit Mode Overview and Boot Windows to Audit Mode or
OOBE.
Related topics
How Configuration Passes Work
auditUser
generalize
offlineServicing
oobeSystem
specialize
windowsPE
auditUser
6/6/2017 • 1 min to read • Edit Online
The auditUser configuration pass processes unattended Windows® Setup settings in user context in audit
mode. The auditUser configuration pass always runs after the auditSystem pass, which is used to apply
settings in system context. Typically, the auditUser configuration pass is used to execute RunSynchronous or
RunAsynchronous commands. These commands are used to run scripts, applications, or other executables
during audit mode. When Windows boots to audit mode, the auditSystem and auditUser settings for
unattended Windows Setup are processed.
Audit mode enables OEMs and corporations to install additional device drivers, applications, and other
updates to a master Windows® image. By using audit mode, you can maintain fewer images because you can
create a reference image with a minimal set of drivers and applications. The reference image can then be
updated with additional drivers during audit mode. Additionally, you can test and resolve any issues related to
malfunctioning or incorrectly installed devices on the Windows image before shipping the computer to a
customer. Audit mode is optional.
The following diagram illustrates when the auditUser configuration pass is processed in audit mode.
The auditUser configuration pass runs only when you configure Windows Setup to boot into audit mode. You
can boot to audit mode by using the sysprep /audit or sysprep /generalize /audit commands, or you can
specify the Reseal setting in the Microsoft-Windows-Deployment component. For more information about
audit mode, see Audit Mode Overview and Boot Windows to Audit Mode or OOBE.
Related topics
How Configuration Passes Work
auditSystem
generalize
offlineServicing
oobeSystem
specialize
windowsPE
generalize
6/6/2017 • 1 min to read • Edit Online
The generalize configuration pass of Windows® Setup is used to create a Windows reference image that can
be used throughout an organization. Settings in the generalize configuration pass enable you to automate the
behavior for all deployments of this reference image. In comparison, settings applied in the specialize
configuration pass enable you to override behavior for a single, specific deployment.
When a system is generalized, specific configuration data for a given installation of Windows is removed. For
example, during the generalize configuration pass, the unique security ID (SID) and other hardware-specific
settings are removed from the image.
The generalize configuration pass runs only when you use the Sysprep command with the /generalize
option. Answer file settings in the <generalize> section of an answer file are applied to the system before
Sysprep generalization occurs. The system then shuts down.
The following diagram shows the process of the generalize configuration pass.
The specialize configuration pass runs immediately after the next time that the system boots. When you run
Sysprep, you can decide whether Windows will boot to audit mode or Windows Welcome by specifying /audit
or /oobe. The specialize configuration pass always runs after a computer has been generalized, regardless of
whether the computer is configured to boot to audit mode or Windows Welcome.
Any method of moving or copying a Windows image to a new computer must be prepared with the sysprep
/generalize command. For more information, see Sysprep (Generalize) a Windows installation.
Related topics
How Configuration Passes Work
auditSystem
auditUser
offlineServicing
oobeSystem
specialize
windowsPE
offlineServicing
6/6/2017 • 1 min to read • Edit Online
Use the offlineServicing configuration pass to apply unattended Setup settings to an offline Microsoft®
Windows® image. During this configuration pass, you can add language packs, updates, device drivers, or other
packages to the offline image.
The offlineServicing configuration pass runs during Windows Setup. Setup extracts and installs the Windows
image, and then executes the Deployment Image Servicing and Management (Dism.exe) tool. Packages listed in
the <servicing> section and settings in the <offlineServicing> section of the answer file are applied to the
offline Windows image.
Additionally, you can use the Deployment Image Servicing and Management tool with an answer file to apply
settings in the offlineServicing pass. For more information, see Service a Windows Image Using DISM.
Related topics
How Configuration Passes Work
auditSystem
auditUser
generalize
oobeSystem
specialize
windowsPE
oobeSystem
6/6/2017 • 1 min to read • Edit Online
The oobeSystem configuration pass configures settings that are applied during the end-user first-boot
experience, also called Out-Of-Box Experience (OOBE). The oobeSystem configuration pass settings are
processed before a user first logs on to Windows®.
Out-of-Box-Experience (OOBE) runs the first time the user starts a newly configured computer. OOBE runs
before the Windows shell or any additional software runs, and it performs a small set of tasks that are
required to configure and run Windows.
The following diagram illustrates the process that occurs when an end user first boots a newly configured
computer. The result is OOBE, or a user's first-boot experience.
You can configure Windows to boot to OOBE by running the sysprep command by using the /oobe option.
By default, after running Windows Setup, OOBE starts.
Related topics
How Configuration Passes Work
auditSystem
auditUser
generalize
offlineServicing
specialize
windowsPE
specialize
6/6/2017 • 1 min to read • Edit Online
During the specialize configuration pass of Windows® Setup, computer-specific information for the image
is applied. For example, you can configure network settings, international settings, and domain information.
The specialize configuration pass is used together with the generalize configuration pass. The generalize
pass is used to create a Windows reference image that can be used throughout an organization. From this
basic Windows reference image, you can add additional customizations that apply to different divisions in an
organization or to different installations of Windows. Any method of moving or copying a Windows image to
a new computer must be prepared with the sysprep /generalize command. For more information, see
Sysprep (System Preparation) Overview and Sysprep Command-Line Options.
The following diagram illustrates how the specialize configuration pass is used to apply these specific
customizations.
For example, during the specialize configuration pass, you can specify different home pages in Internet
Explorer® for different departments or branches in your business. This setting will then override the default
home page.
Related topics
How Configuration Passes Work
auditSystem
auditUser
generalize
offlineServicing
oobeSystem
windowsPE
windowsPE
6/6/2017 • 1 min to read • Edit Online
The windowsPE configuration pass is used to configure settings specific to Windows® Preinstallation
Environment (Windows PE) in addition to settings that apply to installation.
For example, you can specify the display resolution of Windows PE, where to save a log file, and other
Windows PE-related settings.
The following diagram illustrates the windowsPE configuration pass.
The windowsPE configuration pass also enables you to specify Windows Setup-related settings, including:
Partition and format a hard disk.
Select a specific Windows image to install, the path of that image, and any credentials required to
access that image.
Select a partition on the destination computer where you install Windows.
Apply a product key and administrator password.
Run specific commands during Windows Setup.
Related topics
How Configuration Passes Work
auditSystem
auditUser
generalize
offlineServicing
oobeSystem
Settings for Automating OOBE
6/6/2017 • 1 min to read • Edit Online
You can prevent some or all of the user interface (UI) pages from appearing in Windows Out of Box Experience
(OOBE).
Automating OOBE
To automate OOBE, add the following settings to your unattended Setup answer file:
Related topics
Automate Windows Setup
Deployment Troubleshooting and Log Files
6/6/2017 • 5 min to read • Edit Online
The following section describes the relationship between common deployment scenarios and their associated log
files. Windows® deployment is a highly customizable process, which has the potential for many points of failure.
Identifying the specific point of failure you have encountered begins with understanding how the underlying
technologies work.
When a failure occurs in Windows Setup, review the entries in the Setuperr.log file first, then the Setupact.log file
second, and then other log files as needed.
Windows Setup-Related Log Files
LOG FILE DESCRIPTION LOCATION
Setupact.log Primary log file for most errors that Setup (specialize):
occur during the Windows X:\Windows\panther
installation process. There are
several instances of the Setup (OOBE), LogonUI, OEM
Setupact.log file, depending on First Run:%windir%\panther
what point in the installation Out-Of-Box Experience (OOBE):
process the failure occurs. It is %windir%\panther\unattendGC
important to know which version of
the Setupact.log file to look at,
based on the phase you are in.
LOG FILE DESCRIPTION LOCATION
The Deployment Image Servicing and Management (DISM) tool is the primary tool for all offline-servicing tasks.
DISM runs from a command prompt from Windows PE or a running Windows operating system. If a failure occurs
when executing a DISM command, the tool will provide an immediate response, and log the issue in the DISM.log
file. The Session.xml file is a transaction log file that captures all servicing activities on the target operating system.
The Session.xml file can be used in conjunction with the DISM.log file to determine points of failures and the
required servicing activity.
When a failure occurs in offline servicing, look at the DISM.log file first for specific errors. If the DISM.log file
doesn’t contain any errors, review the Sessions.xml log file second, and then the CBS.log file.
Offline Servicing Related Log Files
LOG FILE DESCRIPTION LOCATION
Like offline servicing, all logging is captured in the DISM.log, CBS.log, and Sessions.xml files. If a failure occurs
when executing a DISM command, the tool will provide immediate response as well as log the issue in the
DISM.log file. The Session.xml file is a transaction log file that captures all servicing activities on the target
operating system. The Session.xml file can be used in conjunction with the DISM.log file to determine points of
failures and the required servicing activities.
When a failure occurs in offline servicing, look at the DISM.log file for specific errors. If the DISM.log file doesn’t
contain any errors, review the Sessions.xml log file and then the CBS.log file.
Online Servicing-Related Log Files
LOG FILE DESCRIPTION LOCATION
LOG FILE DESCRIPTION LOCATION
These command-line tools are often used when manufacturing Windows devices.
In This Section
BCDBoot Command-Line Options Initializes the boot configuration data (BCD) store and
copies boot environment files to the system partition
during image deployment.
Bootsect Command-Line Options Updates the master boot code for hard disk partitions to
switch between Windows Boot Manager (Bootmgr.exe)
and Windows NT Loader (NTLDR).
Oscdimg Command-Line Options Creates an image (.iso) file of a customized 32-bit or 64-
bit version of Windows PE.
Related topics
Server Manager command-line tools
Windows Deployment Tools Technical Reference
BCDBoot Command-Line Options
7/13/2017 • 7 min to read • Edit Online
BCDBoot is a command-line tool used to configure the boot files on a PC or device to run the Windows
operating system. You can use the tool in the following scenarios:
Add boot files to a PC after applying a new Windows image. In a typical image-based Windows
deployment, use BCDBoot to set up the firmware and system partition to boot to your image. To learn more,
see Capture and Apply Windows, System, and Recovery Partitions.
Set up the PC to boot to a virtual hard disk (VHD) file that includes a Windows image. To learn more,
see Boot to VHD (Native Boot): Add a Virtual Hard Disk to the Boot Menu.
Repair the system partition. If the system partition has been corrupted, you can use BCDBoot to recreate
the system partition files by using new copies of these files from the Windows partition.
Set up or repair the boot menu on a dual-boot PC. If you've installed more than one copy of Windows on
a PC, you can use BCDBoot to add or repair the boot menu.
File Locations
In Windows and Windows Preinstallation Environment %WINDIR%\System32\BCDBoot.exe
(WinPE)
In the Windows Assessment and Deployment Kit C:\Program Files (x86)\Windows Kits\10\Assessment and
(Windows ADK): Deployment Kit\Deployment
Tools\amd64\BCDBoot\BCDBoot.exe
How It Works
To configure the system partition, BCDBoot copies a small set of boot-environment files from the installed
Windows image to the system partition.
BCDBoot can create a Boot Configuration Data (BCD) store on the system partition using the latest version of the
Windows files:
BCDBoot creates a new BCD store and initialize the BCD boot-environment files on the system partition,
including the Windows Boot Manager, using the %WINDIR%\System32\Config\BCD-Template file.
New in Windows 10: During an upgrade, BCDBoot preserves any other existing boot entries, such as
debugsettings, when creating the new store. Use the /c option to ignore the old settings and start fresh with
a new BCD store.
If there is already a boot entry for this Windows partition, by default, BCDBoot erases the old boot entry and
its values. Use the /m option to retain the values from an existing boot entry when you update the system
files.
By default, BCDBoot moves the boot entry for the selected Windows partition to the top of the Windows Boot
Manager boot order. Use the /d option to preserve the existing boot order.
On UEFI PCs, BCDBoot can update the firmware entries in the device’s NVRAM:
BCDBoot adds a firmware entry in the NVRAM to point to the Windows Boot Manager. By default, this entry
is placed as the first item in the boot list. Use the /p option to preserve the existing UEFI boot order. Use
/addlast to add it to the bottom of the boot order list.
Command-Line Options
The following command-line options are available for BCDBoot.exe.
BCDBOOT <source> [/l <locale>] [/s <volume-letter> [/f <firmware type>]] [/v] [/m [{OS Loader GUID}]]
[/addlast or /p] [/d] [/c]
OPTION DESCRIPTION
bcdboot C:\Windows
bcdboot C:\Windows /s S:
bcdboot C:\Windows /v
/m [{OS Loader GUID}] Optional. Merges the values from an existing boot entry
into a new boot entry.
By default, this option merges only global objects. If you
specify an OS Loader GUID, this option merges the
loader object in the system template to produce a
bootable entry.
The following example merges the operating-system
loader in the current BCD store that the specified GUID
identifies in the new BCD store:
bcdboot C:\Windows /p
bcdboot C:\Windows /p /d
bcdboot C:\Windows /d
bcdboot C:\Windows /c
3. Optional: Format your system partition: format (drive letter of your system partition) /q
bcdboot D:\Windows
c. Reboot the PC. Now, the boot menu will show both menu options.
Troubleshooting
For information about repairing the boot files on a PC with Windows XP and a more recent version of Windows
such as Windows 7, see the Microsoft Knowledge Base Article 2277998.
Related topics
Capture and Apply Windows, System, and Recovery Partitions
Configure BIOS/MBR-Based Hard Drive Partitions
Configure UEFI/GPT-Based Hard Drive Partitions
BCDedit
Bootsect Command-Line Options
Diskpart Command line syntax
BCDEdit Command-Line Options
7/13/2017 • 5 min to read • Edit Online
bcdedit /? createstore
Operating on a store
OPTION DESCRIPTION
/export Exports the contents of the system store into a file. This file
can be used later to restore the state of the system store. This
command is valid only for the system store.
/import Restores the state of the system store by using a backup data
file previously generated by using the /export option. This
command deletes any existing entries in the system store
before the import takes place. This command is valid only for
the system store.
/sysstore Sets the system store device. This only affects EFI-based
systems. It does not persist across reboots, and is only used in
cases where the system store device is ambiguous.
For example, this command will enable the system to trust Windows Insider Preview builds that are signed with
certificates that are not trusted by default:
Controlling output
OPTION DESCRIPTION
/enum Lists entries in a store. The /enum option is the default value
for BCEdit, so running the bcdedit command without options
is equivalent to running the bcdedit /enum active command.
/default Specifies the default entry that the boot manager selects when
the timeout expires.
/displayorder Specifies the display order that the boot manager uses when
displaying boot options to a user.
/toolsdisplayorder Specifies the display order for the boot manager to use when
displaying the Tools menu.
/emssettings Sets the global EMS settings for the computer. /emssettings
does not enable or disable EMS for any particular boot entry.
Debugging
OPTION DESCRIPTION
To troubleshoot a new installation, enable debug mode by modifying the boot configuration file (BCD). For
example, use the following syntax to enable kernel or boot debug.
-or-
where <id> is the GUID of the Loader object that is used to load the operating system. "Default" can be used if the
operating system is the default option of the Boot Manager menu.
For examples of BCDEdit, see Boot Configuration Data in Windows Vista.
Remote event logging
OPTION DESCRIPTION
Related topics
BCDboot
BCD System Store Settings for UEFI
BCDEdit Commands for Boot Environment
4-Gigabyte Tuning: BCDEdit and Boot.ini
Boot Configuration Data in Windows Vista
Bootsect Command-Line Options
6/6/2017 • 2 min to read • Edit Online
Bootsect.exe updates the master boot code for hard disk partitions to switch between Bootmgr and NT Loader
(NTLDR). You can use this tool to restore the boot sector on your computer. This tool replaces FixFAT and
FixNTFS.
Bootsect Commands
Bootsect uses the following command-line options:
bootsect {/help | /nt52 | /nt60} {SYS | ALL | <DriveLetter:>} [/force] /mbr
For example, to apply the master boot code that is compatible with NTLDR to the volume labeled E, use the
following command:
bootsect /nt52 E:
ALL Updates the master boot code on all partitions. The ALL
option does not necessarily update the boot code for each
volume. Instead, this option updates the boot code on
volumes that can be used as Windows boot volumes,
which excludes any dynamic volumes that are not
connected with an underlying disk partition. This
restriction is present because boot code must be located
at the beginning of a disk partition.
COMMAND-LINE OPTIONS DESCRIPTION
Related topics
BCDboot Command-Line Options
Oscdimg Command-Line Options
7/13/2017 • 9 min to read • Edit Online
Oscdimg is a command-line tool that you can use to create an image (.iso) file of a customized 32-bit or 64-bit
version of Windows Preinstallation Environment (Windows PE). You can then burn the .iso file to a CD or DVD.
Oscdimg supports ISO 9660, Joliet, and Universal Disk Format (UDF) file systems.
In this topic:
File System Options
CD or DVD Boot Options
Optimization Options
Order Options
DVD Video and Audio Options
Messaging Options
General Image Creation Options
Examples
OPTION DESCRIPTION
-nt Permits long file names that are compatible with Windows
NT 3.51.
Joliet Options
Joliet is an extension of the ISO 9660 file system. Joliet allows longer file names, Unicode characters, and directory
depths larger than eight. Joliet options cannot be combined with ISO 9660 options.
The -j2 Joliet option cannot be used with any UDF options.
OPTION DESCRIPTION
-j1 Permits both file systems to view all the data on the disk.
Using this option does not duplicate all files on the image.
This option encodes Joliet Unicode file names and
generates DOS-compatible 8.3 file names in the ISO 9660
namespace. These file names can be read by either Joliet
systems or conventional ISO 9660 systems. However,
Oscdimg may change some of the file names in the ISO
9660 namespace to comply with DOS 8.3 and ISO 9660
naming restrictions.
-js Overrides the default text file that is used when the user
specifies the -j2 option. For example:
-jsC:\readme.txt
UDF Options
UDF options cannot be combined with ISO 9660 options. The -ue, -uf, and -us options only apply when they are
used together with the -u2 option.
OPTION DESCRIPTION
-u1 Produces an image that has both the UDF file system and
the ISO 9660 file system. The ISO 9660 file system is
written by using DOS-compatible 8.3 file names. The UDF
file system is written by using Unicode file names.
-ur Overrides the default text file that is used together with
the -u2 option. For example:
-urC:\Readme.txt
OPTION DESCRIPTION
-b<bootSectorFile> Specifies the El Torito boot sector file that will be written
in the boot sector or sectors of the disk. Do not use
spaces. For example:
On UEFI: -bC:\winpe_x86\Efisys.bin
On BIOS: -bC:\winpe_x86\Etfsboot.com
<sourceLocation> Required. Specifies the location of the files that you intend
to build into an .iso image.
Important
Single-boot entries and multi-boot entries cannot be combined in the same command.
The following boot options can be used to generate multi-boot entries. For more information, see Use multi-boot
entries to create an image file.
OPTION DESCRIPTION
OPTION DESCRIPTION
b<bootSectorFile> Specifies the El Torito boot sector file that will be written
in the boot sector or sectors of the disk. Do not use
spaces. For example:
On UEFI: bEfisys.bin
On BIOS: bEtfsboot.com
-bootdata:<3>#<defaultBootEntry>#<bootEntry1>#
<bootEntryN>
<sourceLocation> Required. Specifies the location of the files that you intend
to build into an .iso image.
Optimization Options
Optimization options can be used to optimize storage by encoding duplicate files only once.
OPTION DESCRIPTION
Order Options
Order options specify the file order on disk. The file order does not have to list all files. Any files that do not appear
in this file are ordered as they would be ordinarily (that is, if the ordering file did not exist). For more information,
see Specify the boot order.
The -yo option takes precedence over the -y5 option.
OPTION DESCRIPTION
-y5 Specifies file layout on disk. This option writes all files in an
i386 directory first and in reverse sort order.
-yo<bootOrder.txt> Specifies a text file that has a layout for the files to be put
in the image. Do not use spaces. For example:
-yoC:\temp\bootOrder.txt
OPTION DESCRIPTION
-ut Truncates the ISO 9660 section of the image during DVD
video and audio disk creation. When this option is used,
only the VIDEO_TS, AUDIO_TS, and JACKET_P directories
are visible from the ISO 9660 file system.
Messaging Options
Messaging options customize how file and directory information appears.
OPTION DESCRIPTION
-os Shows duplicate files when the system creates the image.
-w1 Reports all file names or directories that are not ISO-
compliant or Joliet-compliant.
OPTION DESCRIPTION
-l<volumeLabel>
-maxsize:<4096>
-q Scans the source files only. This option does not create an
image.
-t<mm/dd/yyyy,hh:mm:ss> Specifies the timestamp for all files and directories. Do not
use spaces. You can use any delimiter between the items.
For example:
-t12/31/2000,15:01:00
Examples
These examples illustrate how to do the following:
Create a bootable CD or DVD for a UEFI-based computer by using a single-boot entry.
Create a bootable CD or DVD for a UEFI-based or BIOS-based computer by using a multi-boot entry.
Specify the boot file order on a disk.
Use a single -boot entry to create a bootable image
You can use the Oscdimg tool to create a bootable CD or DVD by using a single-boot entry.
To use a single-boot entry
Create an image file for a UEFI-based computer. For example:
where this command starts the Etfsboot.com boot file for a BIOS image, and then starts the Efisys.bin boot
file for a UEFI image.
Specify the boot order
For images larger than 4.5 GB, you must create a boot order file to make sure that boot files are located at the
beginning of the image.
The rules for file ordering are as follows:
The order file must be in ANSI.
The order file must end in a new line.
The order file must have one file per line.
Each file must be specified relative to the root of the image.
Each file must be specified as a long file name. No short names are allowed.
Each file path cannot be longer than MAX_PATH. This includes the volume name.
For example, D:\cdimage would resemble the following (where D is the drive letter of the DVD drive):
D:\cdimage\1\1.txt
D:\cdimage\2\2.txt
D:\cdimage\3\3.txt
D:\cdimage\3\3_5.txt
D:\cdimage\<longFileName>.txt
To create a boot order file
Create a boot order file. For example:
Oscdimg -m -n -yoC:\temp\bootOrder.txt
-bC:\winpe_amd64\Efisys.bin C:\winpe_amd64\winpeamd64.iso
boot\bcd
boot\boot.sdi
boot\bootfix.bin
boot\bootsect.exe
boot\etfsboot.com
boot\memtest.efi
boot\memtest.exe
boot\en-us\bootsect.exe.mui
boot\fonts\chs_boot.ttf
boot\fonts\cht_boot.ttf
boot\fonts\jpn_boot.ttf
boot\fonts\kor_boot.ttf
boot\fonts\wgl4_boot.ttf
sources\boot.wim
Related topics
WinPE: Create USB Bootable drive
Windows Deployment Command-Line Tools Reference
Mobile manufacturing
6/6/2017 • 5 min to read • Edit Online
After you have a completed the steps covered in the other guides to prepare the device, the focus shifts to
preparing the device for the final retail configuration.
During this process, you set the final configuration values, remove debug logging, and optimize the OS for
shipment. Next, you determine how the OS will be transferred to the device hardware in the manufacturing line.
Manufacturing acronyms
Here are some common acronyms that might come in handy.
FA final assembly
Flashing tools
You can develop a custom flashing tool to address the life cycle needs of the device
Flashing tools
Developing custom OEM flashing tools
Manufacturing workflow
OEMs need to determine the manufacturing process to use to implement MMOS in their manufacturing facilities.
To discuss the manufacturing process, a simplified model of the manufacturing line workflow will be used. Note
that each OEM will have a unique process; this simplified model is used as a common reference point.
Simple factory flow
This approach makes it possible, if appropriate, to use a different version of the operating system for testing. This
may be a useful interim measure as test applications are being migrated to Windows 10 Mobile.
One tradeoff in this approach is that the manufacturing line must be designed to accommodate the reflashing time
that occurs near the end of the manufacturing process.
For more info on working with the flashing tools, see Flashing tools.
Modem RF calibration
Device testing
Display
Keypad
SIM interface
Storage card
Camera
RTC
Speaker
Microphone
Sensor – ALS
Sensor – Magnetometer
Sensor – Proximity
Sensor – Accelerometer
Handset interface
Device provisioning
IMEI
SIM Lock
Bluetooth MAC
Sensors calibration
Security provisioning
MO provisioning
Mobile deployment and imaging
6/6/2017 • 2 min to read • Edit Online
Windows 10 Mobile brings the features available in Windows 10 to mobile devices. In addition, on devices that
meet the required hardware components, Windows 10 Mobile also adds features like Continuum for Phones,
which allows users to connect their Windows phone to a monitor, and even to a mouse and keyboard, to make the
phone work like a desktop.
Intended audience
The entirety, or sections, of this walkthrough is intended for use by:
New or experienced Windows OEMs and ODMs who want to build and deploy a customized Windows 10
Mobile image.
Mobile operators who want to know the process of building and deploying a customized mobile image.
Overview
This mobile deployment and imaging guide is organized based on the two ways that you can customize, build, and
flash a Windows image to a mobile device:
Step 1: Prepare for Windows mobile development provides information about the preprequisites, tools, and how
to set up your development environment.
Step 2: Create mobile packages provides step-by-step information on how to create a mobile package using a
sample driver and when declaring an MCSF setting by using the MCSF settings schema within a .pkg.xml.
Step 3: Configure the Start layout shows how you can customize the Start layout on mobile devices to include Web
links, secondary tiles, folders, and so on. Start layout uses a new unified schema in win_threshold so it doesn't
matter if you are using the Start MCSF settings or the Start Windows Provisioning settings to add the layout to
your image. Also note that the default layout on mobile devices can only be customized as part of the imaging
process.
Step 4: Once you've done all the preparation steps, you're ready to start customizing and building your image. We
recommend learning the classic mobile deployment process first because MCSF still provides a more robust set of
customizations that OEMs and ODMs can configure for their image. However, Windows Provisioning offers many
enterprise policies, enrollment and enterprise settings not available through MCSF so we recommend becoming
familiar with the Windows Provisioning deployment process too.
Part 1: Classic mobile deployment
Configure customizations that are only available through the Managed Centralized Settings Framework
(MCSF) and use the classic Windows mobile command-line tools to build packages and a customized image,
and then flash the image to a device.
Part 2: Mobile deployment using Windows Provisioning
Use the Windows Provisioning answer file (WPAF) to configure customization settings that are only
available through the Windows Provisioning framework. Use the WPAF with an MCSF CAF as inputs to the
Windows Imaging and Configuration Designer (ICD) command-line interface to build a customized mobile
image.
Prepare for Windows mobile development
6/6/2017 • 7 min to read • Edit Online
Here's what you'll need to start customizing, testing, and deploying Windows on mobile devices.
Build packages Not required Required Not required Not required Not required
Sign binaries and Not required Required Not required Not required Not required
packages
Build and Required Required Not required Not required Not required
customize mobile
images using
Windows ICD
To confirm that the Windows SDK was properly installed, make sure that the subdirectories listed in the
following table exist on your technician PC. Some of these subdirectories may not appear in the kit install
directory if you didn't select them from the Windows SDK install wizard.
<table>
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead>
<tr class="header">
<th align="left">Windows installation directory tree</th>
<th align="left">Subdirectories within the directory tree</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left"><p>For a 32-bit OS: <strong>C:\Program Files\Windows Kits\10</strong></p>
<p>For a 64-bit OS: <strong>C:\Program Files (x86)\Windows Kits\10</strong></p></td>
<td align="left"><ul>
<li><strong>Bin</strong></li>
<li><strong>Catalogs</strong></li>
<li><strong>Debuggers</strong></li>
<li><strong>DesignTime</strong></li>
<li><strong>Include</strong></li>
<li><strong>Lib</strong></li>
<li><strong>Redist</strong></li>
<li><strong>References</strong></li>
<li><strong>Shortcuts</strong></li>
<li><strong>Testing</strong></li>
</ul></td>
</tr>
</tbody>
</table>
To confirm that the WDK was properly installed, make sure that the subdirectories listed in the following
table exist on your technician PC.
<table>
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead>
<tr class="header">
<th align="left">Windows installation directory tree</th>
<th align="left">Subdirectories within the directory tree</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left"><p>For a 32-bit OS: <strong>C:\Program Files\Windows Kits\10</strong></p>
<p>For a 64-bit OS: <strong>C:\Program Files (x86)\Windows Kits\10</strong></p></td>
<td align="left"><ul>
<li><strong>Build</strong></li>
<li><strong>BuildLabSupport</strong></li>
<li><strong>CodeAnalysis</strong></li>
<li><strong>CrossCertificates</strong></li>
<li><strong>Debug</strong></li>
<li><strong>Help</strong></li>
<li><strong>Remote</strong></li>
<li><strong>Tools</strong></li>
</ul></td>
</tr>
</tbody>
</table>
In Windows 10 Mobile, packages make up the building blocks for the OS and they can contain all the files,
libraries, registry settings, executables, and data on the mobile device. Every OS component, from device drivers to
system files, must be contained in a package.
As an OEM, if you have device-specific drivers or customizations that you want to add to the OS, you need to
create a package. This section shows you how to add a fictitious driver and an MCSF customization setting as part
of the package.
For more detailed information about mobile packages, including specifying other components and package
merging, see Adding mobile packages.
Add a driver component
To learn more about drivers and get started on writing your own, see Device and Driver Technologies.
In this walkthrough, we're downloading the sample echo KMDF driver, converting it to a universal Windows driver,
and then using Visual Studio to create a package file.
To add a driver
1. Download the echo universal driver sample.
a. Download the master.zip file and save it to your local hard drive:
https://github.com/microsoft/windows-driver-samples/archive/master.zip.
b. Extract all the contents of the master.zip file. Specify a new folder, such as C:\DriverSamples, or
browse to an existing one to store the extracted files.
c. After the files are extracted, go to the general\echo\kmdf subfolder within the folder where you
saved the extracted files to find the driver solution for the echo driver sample. For example, if you
created a C:\DriverSamples folder in the previous step, you can locate the driver solution under
C:\DriverSamples\general\echo\kmdf.
2. Convert the existing echo driver project to a universal Windows driver project.
a. In Visual Studio 2015, open the existing kmdfecho driver project, kmdfecho.sln.
b. Location the Solution Explorer in Visual Studio. In the Solution Explorer pane, right-click on Solution
'kmdfecho' (3 projects) and choose Configuration Manager.
c. In the Configuration Manager window, set the target operating system to Windows 10.
d. Right-click on the driver project and then choose Properties. Under Configuration Manager >
Driver, verify that the Target Platform is set to Universal.
Other choices in Target Platform include Mobile. You may select this option if you want to build a
driver that runs on Windows 10 Mobile only.
3. From Visual Studio 2015, use PkgGen to generate a package file.
a. Right-click on the driver project and choose Add->New Item.
b. Under Visual C++ > Windows Driver, choose Package Manifest, and then click Add.
Visual Studio adds a file called Package.pkg.xml to your driver project. You can right-click on the file
and choose Properties to verify that the item type is set to PkgGen. On the same property page,
you can set Excluded from Build to Yes if you decide later that you want to build this driver project
and not generate a package file.
c. Click OK.
d. Right-click on the driver project and choose Properties. Under Configuration Properties, open the
PackageGen node and change the Version to a any value that you like. For example, you can set the
version to 1.0.0.0.
e. Set the package Owner, Component, and SubComponent values.
4. Right-click on the driver project and choose Properties. Set the test certificates to one of the OEM test
certificates that was installed when you ran installoemcerts.cmd.
For example, you can use CN=Windows Phone OEM Root 2013 (TEST ONLY).
5. Save your work and then restart Visual Studio as an administrator.
6. Build your driver. Visual Studio links against the required libraries and generates a .cat file, an .inf file, a
driver binary, and an .spkg file.
Once the driver is built, you should see a new folder named ProjectName.spkg, which contains the .cab and
the .spkg.
We will use the driver .spkg that you built in this walkthrough and combining it with the .spkg from the next
walkthrough to build a mobile OS image.
To learn about how to run PkgGen.exe outside of Visual Studio, see the next section on adding a customization
setting. Also see the Run the pkggen.exe tool section in Creating mobile packages.
Add an MCSF customization setting
In Windows 10 Mobile, there are two supported customization frameworks: Managed Centralized Settings
Framework (MCSF) and Windows provisioning. For more information about these frameworks, see
Customizations for mobile devices. When it comes to adding a custom OEM customization setting, only MCSF is
extendable and available for OEMs to declare their own various mobile OS settings in a simple and consistent way
that's similar to the Microsoft customization settings.
To learn how to use MCSF and the package XML schema to declare and access custom OEM settings, see the
sections in Managed Centralized Settings Framework (MCSF).
In this walkthrough, we're extending the Configure Quick actions customization to use the MCSF schema to create
a policy setting that exposes the various slots so that they can be easily configured later without having to
remember the registry keys and values. To do this, we add the policy settings declarations in a .pkg.xml file and
then build this file to create a package.
To add a customization setting
1. Write the MCSF policy setting that corresponds to the following registry key:
$(HKLM.SOFTWARE)\Microsoft\Shell\OEM\QuickActions\Slot\X
Type: REG_SZ
Possible values:
Microsoft.QuickAction.AllSettings
Microsoft.QuickAction.Connect
Microsoft.QuickAction.Note
Microsoft.QuickAction.Flashlight
Microsoft.QuickAction.RotationLock
Microsoft.QuickAction.BatterySaver
Microsoft.QuickAction.Bluetooth
Microsoft.QuickAction.WiFi
Microsoft.QuickAction.AirplaneMode
Microsoft.QuickAction.Vpn
Microsoft.QuickAction.Cellular
Microsoft.QuickAction.MobileHotspot
Microsoft.QuickAction.Camera
Microsoft.QuickAction.Brightness
Microsoft.QuickAction.QuietHours
Microsoft.QuickAction.Location
The X in the registry key should be replaced with the slot number being configured (beginning with 1). Slots
are ordered right-to-left. There is a maximum of 5 slots on a large screen mobile device while mobile
devices without a large screen have 4 slots.
The following code example shows how the MCSF policy settings for the quick actions can be declared:
<SettingsGroup Path="Notifications/QuickActions">
<!-- Default Quick actions configuration -->
<Setting Name="QuickActionSlot1" Description="App to place in quick action slot 1.">
<RegistrySource Path="$(hklm.software)\Microsoft\Shell\OEM\QuickActions\Slot\1" Type="REG_SZ"
Default="Microsoft.QuickAction.AllSettings" />
<Validate>
<!-- Shows the available options for the quick action slot -->
<Option Value="Microsoft.QuickAction.AllSettings" FriendlyName="All settings" />
<Option Value="Microsoft.QuickAction.Connect" FriendlyName="Connect" />
<Option Value="Microsoft.QuickAction.Note" FriendlyName="Note" />
<Option Value="Microsoft.QuickAction.Flashlight" FriendlyName="Flashlight" />
<Option Value="Microsoft.QuickAction.RotationLock" FriendlyName="Rotation lock" />
<Option Value="Microsoft.QuickAction.BatterySaver" FriendlyName="Battery saver" />
<Option Value="Microsoft.QuickAction.Bluetooth" FriendlyName="Bluetooth" />
<Option Value="Microsoft.QuickAction.WiFi" FriendlyName="Wi-Fi" />
<Option Value="Microsoft.QuickAction.AirplaneMode" FriendlyName="Airplane mode" />
<Option Value="Microsoft.QuickAction.Vpn" FriendlyName="VPN" />
<Option Value="Microsoft.QuickAction.Cellular" FriendlyName="Cellular" />
<Option Value="Microsoft.QuickAction.MobileHotspot" FriendlyName="Mobile hotspot" />
<Option Value="Microsoft.QuickAction.Camera" FriendlyName="Camera" />
<Option Value="Microsoft.QuickAction.Brightness" FriendlyName="Brightness" />
<Option Value="Microsoft.QuickAction.QuietHours" FriendlyName="Quiet hours" />
<Option Value="Microsoft.QuickAction.Location" FriendlyName="Location" />
</Validate>
</Setting>
<Setting Name="QuickActionSlot2" Description="App to place in quick action slot 2.">
<RegistrySource Path="$(hklm.software)\Microsoft\Shell\OEM\QuickActions\Slot\2" Type="REG_SZ"
Default="Microsoft.QuickAction.RotationLock" />
<Validate>
<!-- Shows the available options for the quick action slot -->
<Option Value="Microsoft.QuickAction.AllSettings" FriendlyName="All settings" />
<Option Value="Microsoft.QuickAction.Connect" FriendlyName="Connect" />
<Option Value="Microsoft.QuickAction.Note" FriendlyName="Note" />
<Option Value="Microsoft.QuickAction.Flashlight" FriendlyName="Flashlight" />
<Option Value="Microsoft.QuickAction.RotationLock" FriendlyName="Rotation lock" />
<Option Value="Microsoft.QuickAction.BatterySaver" FriendlyName="Battery saver" />
<Option Value="Microsoft.QuickAction.Bluetooth" FriendlyName="Bluetooth" />
<Option Value="Microsoft.QuickAction.WiFi" FriendlyName="Wi-Fi" />
<Option Value="Microsoft.QuickAction.AirplaneMode" FriendlyName="Airplane mode" />
<Option Value="Microsoft.QuickAction.Vpn" FriendlyName="VPN" />
<Option Value="Microsoft.QuickAction.Vpn" FriendlyName="VPN" />
<Option Value="Microsoft.QuickAction.Cellular" FriendlyName="Cellular" />
<Option Value="Microsoft.QuickAction.MobileHotspot" FriendlyName="Mobile hotspot" />
<Option Value="Microsoft.QuickAction.Camera" FriendlyName="Camera" />
<Option Value="Microsoft.QuickAction.Brightness" FriendlyName="Brightness" />
<Option Value="Microsoft.QuickAction.QuietHours" FriendlyName="Quiet hours" />
<Option Value="Microsoft.QuickAction.Location" FriendlyName="Location" />
</Validate>
</Setting>
<Setting Name="QuickActionSlot3" Description="App to place in quick action slot 3.">
<RegistrySource Path="$(hklm.software)\Microsoft\Shell\OEM\QuickActions\Slot\3" Type="REG_SZ"
Default="Microsoft.QuickAction.Bluetooth" />
<Validate>
<!-- Shows the available options for the quick action slot -->
<Option Value="Microsoft.QuickAction.AllSettings" FriendlyName="All settings" />
<Option Value="Microsoft.QuickAction.Connect" FriendlyName="Connect" />
<Option Value="Microsoft.QuickAction.Note" FriendlyName="Note" />
<Option Value="Microsoft.QuickAction.Flashlight" FriendlyName="Flashlight" />
<Option Value="Microsoft.QuickAction.RotationLock" FriendlyName="Rotation lock" />
<Option Value="Microsoft.QuickAction.BatterySaver" FriendlyName="Battery saver" />
<Option Value="Microsoft.QuickAction.Bluetooth" FriendlyName="Bluetooth" />
<Option Value="Microsoft.QuickAction.WiFi" FriendlyName="Wi-Fi" />
<Option Value="Microsoft.QuickAction.AirplaneMode" FriendlyName="Airplane mode" />
<Option Value="Microsoft.QuickAction.Vpn" FriendlyName="VPN" />
<Option Value="Microsoft.QuickAction.Cellular" FriendlyName="Cellular" />
<Option Value="Microsoft.QuickAction.MobileHotspot" FriendlyName="Mobile hotspot" />
<Option Value="Microsoft.QuickAction.Camera" FriendlyName="Camera" />
<Option Value="Microsoft.QuickAction.Brightness" FriendlyName="Brightness" />
<Option Value="Microsoft.QuickAction.QuietHours" FriendlyName="Quiet hours" />
<Option Value="Microsoft.QuickAction.Location" FriendlyName="Location" />
</Validate>
</Setting>
<Setting Name="QuickActionSlot4" Description="App to place in quick action slot 4.">
<RegistrySource Path="$(hklm.software)\Microsoft\Shell\OEM\QuickActions\Slot\4" Type="REG_SZ"
Default="Microsoft.QuickAction.WiFi" />
<Validate>
<!-- Shows the available options for the quick action slot -->
<Option Value="Microsoft.QuickAction.AllSettings" FriendlyName="All settings" />
<Option Value="Microsoft.QuickAction.Connect" FriendlyName="Connect" />
<Option Value="Microsoft.QuickAction.Note" FriendlyName="Note" />
<Option Value="Microsoft.QuickAction.Flashlight" FriendlyName="Flashlight" />
<Option Value="Microsoft.QuickAction.RotationLock" FriendlyName="Rotation lock" />
<Option Value="Microsoft.QuickAction.BatterySaver" FriendlyName="Battery saver" />
<Option Value="Microsoft.QuickAction.Bluetooth" FriendlyName="Bluetooth" />
<Option Value="Microsoft.QuickAction.WiFi" FriendlyName="Wi-Fi" />
<Option Value="Microsoft.QuickAction.AirplaneMode" FriendlyName="Airplane mode" />
<Option Value="Microsoft.QuickAction.Vpn" FriendlyName="VPN" />
<Option Value="Microsoft.QuickAction.Cellular" FriendlyName="Cellular" />
<Option Value="Microsoft.QuickAction.MobileHotspot" FriendlyName="Mobile hotspot" />
<Option Value="Microsoft.QuickAction.Camera" FriendlyName="Camera" />
<Option Value="Microsoft.QuickAction.Brightness" FriendlyName="Brightness" />
<Option Value="Microsoft.QuickAction.QuietHours" FriendlyName="Quiet hours" />
<Option Value="Microsoft.QuickAction.Location" FriendlyName="Location" />
</Validate>
</Setting>
<Setting Name="QuickActionSlot5" Description="App to place in quick action slot 5.">
<RegistrySource Path="$(hklm.software)\Microsoft\Shell\OEM\QuickActions\Slot\5" Type="REG_SZ"
Default="Microsoft.QuickAction.Camera" />
<Validate>
<!-- Shows the available options for the quick action slot -->
<Option Value="Microsoft.QuickAction.AllSettings" FriendlyName="All settings" />
<Option Value="Microsoft.QuickAction.Connect" FriendlyName="Connect" />
<Option Value="Microsoft.QuickAction.Note" FriendlyName="Note" />
<Option Value="Microsoft.QuickAction.Flashlight" FriendlyName="Flashlight" />
<Option Value="Microsoft.QuickAction.RotationLock" FriendlyName="Rotation lock" />
<Option Value="Microsoft.QuickAction.BatterySaver" FriendlyName="Battery saver" />
<Option Value="Microsoft.QuickAction.Bluetooth" FriendlyName="Bluetooth" />
<Option Value="Microsoft.QuickAction.WiFi" FriendlyName="Wi-Fi" />
<Option Value="Microsoft.QuickAction.AirplaneMode" FriendlyName="Airplane mode" />
<Option Value="Microsoft.QuickAction.Vpn" FriendlyName="VPN" />
<Option Value="Microsoft.QuickAction.Vpn" FriendlyName="VPN" />
<Option Value="Microsoft.QuickAction.Cellular" FriendlyName="Cellular" />
<Option Value="Microsoft.QuickAction.MobileHotspot" FriendlyName="Mobile hotspot" />
<Option Value="Microsoft.QuickAction.Camera" FriendlyName="Camera" />
<Option Value="Microsoft.QuickAction.Brightness" FriendlyName="Brightness" />
<Option Value="Microsoft.QuickAction.QuietHours" FriendlyName="Quiet hours" />
<Option Value="Microsoft.QuickAction.Location" FriendlyName="Location" />
</Validate>
</Setting>
</SettingsGroup>
2. Create a .pkg.xml file and add the policy settings in the previous step to the .pkg.xml file. The following
example shows how to do this.
3. Add values for the Owner, Component, SubComponent, and ReleaseType elements. For example:
Owner="Contoso"
Component="Customization.Notifications"
SubComponent="QuickActions"
ReleaseType="Test"
To learn more about the elements and attributes, see Primary elements and attributes of a package project
file.
4. Name and save the .pkg.xml file as "QuickActions.pkg.xml".
5. Generate a package, or .spkg file, using the "QuickActions.pkg.xml" as input. For more information, see Run
the pkggen.exe tool in Adding mobile packages.
To generate a package using QuickActions.pkg.xml
a. Open a command line with administrator privileges.
b. Enter the following command to build a package from QuickActions.pkg.xml.
PkgGen QuickActions.pkg.xml
/config:"%WPDKCONTENTROOT%\Tools\bin\i386\pkggen.cfg.xml"
This command will generate a package called Customization.Notifications.QuickActions.spkg. In the
next section, we will use this package and add it to a feature manifest file.
Adding mobile packages
12/13/2017 • 8 min to read • Edit Online
Packages are the logical building blocks of Windows 10 Mobile. They contain all the files, libraries, registry settings,
executables, and data on the device. From device drivers to system files, every component must be contained in a
package. This modular architecture allows for precise control of updates: a package is the smallest serviceable unit
on the device. Packages usually represent a specific feature or functionality in the operating system. Individual
packages can be grouped together to form more manageable groups of components and used to create images
for flashing or updating a device.
Related topics
The following list shows additional topics related to package creation:
Primary elements and attributes of a package project file
Specifying components in a package project file
Specifying files and registry entries in a package project file
Command-line arguments for package generator
Merging packages before imaging
Merging packages using FeatureMerger
If you run the package generator (pkggen.exe) against this project file, a package with no contents will be created.
This example demonstrates how to specify the file source path and override the default path and name on the
device. It also demonstrates how to specify different registry values. If you run the package generator (pkggen.exe)
against this project file, it will create a package that contains the specified files and registry values. For more info
about how to run package generator, see Command-line arguments for package generator.
You can also add other objects such as COM servers and drivers. For additional schema and attribute information
for each type of object, see Specifying components in a package project file.
Relative DestinationDir references using a "." or ".." are not supported. Use absolute directory references instead.
Note
When a package is changed the /version field should always be incremented when running package
generator.
For additional info about package generator options and capabilities, see Command-line arguments for package
generator.
<FileEntry>
<FileType>Regular</FileType>
<DevicePath>\Windows\Packages\CustomMetadata\Contoso.PhoneTest.TestApp.meta.xml</DevicePath>
<CabPath>4_Contoso.xml</CabPath>
<Attributes>Normal</Attributes>
</FileEntry>
5. After you are done viewing the files, remove the ".cab" file extension from the package file name.
<Components>
<OSComponent>
...
<Files Language="*">
<File DestinationDir="$(runtime.default)\mui\$(langid)"
Source="$(_RELEASEDIR)\$(LANGID)\test.dll.mui"/>
</Files>
<Files Language="(zh-CN;zh-TW)">
<File DestinationDir="$(runtime.default)\mui\$(langid)"
Source="$(_RELEASEDIR)\$(LANGID)\testZH.dll.mui"/>
</Files>
<RegKeys Language="(zh-CN;zh-TW)">
<RegKey KeyName="$(hklm.software)\microsoft\testZH\$(LANGID)">
<RegValue Name="ZHConfig_$(LANGID)" Value="$(LANGID)" Type="REG_SZ"/>
<RegValue Name="ZHConfig_$(LANGID)_Test" Value="$(LANGID)"
Type="REG_EXPAND_SZ"/>
</RegKey>
</RegKeys>
...
</OSComponent>
</Components>
By specifying the Language attribute of File or RegKey elements, the package generator is notified that the
enclosed contents are language related and need to be expanded for all (or just the specified) languages. Inside the
element, you can use $(LANGID) to reference the actual language.
Note
While only File and RegKey elements have Language attributes, most of the package objects can contain File and
RegKey child elements. For more info about these elements, see Specifying files and registry entries in a package
project file.
<Components>
<OSComponent>
...
<Files Resolution="*">
<File Source="$(_RELEASEDIR)\$(RESID)\testA.jpg" Name="testA.$(resid).jpg"/>
</Files>
<Files Resolution="(320X480;240x320)">
<File Source="$(_RELEASEDIR)\$(RESID)\testB.jpg"
DestinationDir="$(runtime.system32)\$(resid)"/>
</Files>
<Files Resolution="(480x240)">
<File Source="$(_RELEASEDIR)\$(RESID)\testC.jpg"
DestinationDir="$(runtime.system32)\$(resid)" Name="testC_$(resid).jpg"/>
</Files>
<RegKeys Resolution="*">
<RegKey KeyName="$(hklm.software)\microsoft\ResRelatedSettings\$(RESID)">
<RegValue Name="Config" Value="$(RESID)" Type="REG_SZ"/>
</RegKey>
</RegKeys>
...
</OSComponent>
</Components>
<Components>
<Driver InfSource="$(_RELEASEDIR)\testDriver.inf">
<Reference Source="$(_RELEASEDIR)\testDriver.sys"/>
<Files>
<File Source="$(_RELEASEDIR)\testDriver.sys"/>
</Files>
</Driver>
</Components>
Package a driver
The default file location for driver installation is "$(runtime.drivers)". The staging of the driver object requires
access to the Mobile Core hive files. For a package that includes a driver, it is necessary to also set the variable
HIVE_ROOT to the directory with those hives, which should be %WPDKCONTENTROOT%\CoreSystem. Under
these circumstances, the command for package generator would be the following:
PkgGen SampleDriver.pkg.xml /config:"%WPDKCONTENTROOT%\Tools\bin\i386\pkggen.cfg.xml"
/variables:"HIVE_ROOT=%WPDKCONTENTROOT%\CoreSystem"
Note
If the driver uses the Include INF directive to reference other drivers that are part of the Mobile Core subset of the
operating system, use the WIM_ROOT variable instead of the HIVE_ROOT variable. The default directory for the
staging WIM image is the same as the hives.
For Windows 10 Mobile, you must use both the HIVE_ROOT and WIM_ROOT parameters. If you use only
WIM_ROOT, the package might not be complete.
<Components>
...
</Components>
</Package>
After defining the macro shown here, you could use $(testName) to reference the value "testValue" in your project.
For more info, see "The Macros element and local project macros" in Primary elements and attributes of a package
project file.
Send comments about this topic to Microsoft
Primary elements and attributes of a package project
file
11/17/2017 • 5 min to read • Edit Online
The root XML element in the package project XML file is the Package element. This element is the base container
element for all other package-related elements in a package project XML file. It must occur only once, and it
contains all the package information in the project file as attributes and child elements. The information in the
Package element can be divided into four key areas: attributes, macros, security capabilities, and components.
The following XML example shows the schema definition of the Package element.
<xs:element name="Package">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element minOccurs="0" maxOccurs="1" ref="CustomMetadata" />
<xs:element minOccurs="0" maxOccurs="1" ref="Macros" />
<xs:element minOccurs="0" maxOccurs="1" ref="Capabilities" />
<xs:element minOccurs="0" maxOccurs="1" ref="Components" />
<xs:element minOccurs="0" maxOccurs="1" ref="Authorization" />
</xs:sequence>
<xs:attribute name="Owner" type="xs:string" use="required" />
<xs:attribute name="Component" type="xs:string" use="required" />
<xs:attribute name="SubComponent" type="xs:string" use="optional" />
<xs:attribute name="BinaryPartition" type="xs:boolean" use="optional" />
<xs:attribute name="OwnerType" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Microsoft" />
<xs:enumeration value="OEM" />
<xs:enumeration value="SiliconVendor" />
<xs:enumeration value="MobileOperator" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="ReleaseType" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Production" />
<xs:enumeration value="Test" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Partition" type="xs:string" use="optional" />
<xs:attribute name="Platform" type="xs:string" use="optional" />
<xs:attribute name="GroupingKey" type="xs:string" use="optional" />
<xs:attribute name="Description" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
Package attributes
Attributes of the target package(s) are described by using the XML attributes of the Package element. This
element currently supports the following attributes.
ATTRIBUTE DEFINITION
Important
If a package is intended to be included in a retail image,
it must be marked as Production. Packages marked as
Test will fail retail signing and are not allowed in retail
images.
Partition Optional. String identifier for the target partition for the
package. By default, packages are installed to the MainOS
partition unless another is explicitly specified.
Warning
Packages that are intended to be updated must
not target the data partition. The reason for this
restriction is that the data partition is formatted
when the device reset feature is used.
Packages must only target a single partition.
ATTRIBUTE DEFINITION
Note
Although this attribute is specified as optional in the
schema, it is required for all packages where the
OwnerType attribute is not set to Microsoft.
The following XML example demonstrates how to specify the package attributes.
<Package xmlns="urn:Microsoft.WindowsPhone/PackageSchema.v8.00"
Owner="OEMName"
OwnerType="OEM"
ReleaseType="Test"
Platform="PlatformName"
Component="ComponentName"
SubComponent="SubName">
</Package>
Note
The package attributes shown in this example support the use of macros.
<Macros>
<Macro Id="TypeLibId" Value="{F5078F18-C551-11D3-89B9-0000F81FE221}"/>
<Macro Id="ProxyStubClsId"
Value="{00020424-0000-0000-C000-000000000046}"/>
</Macros>
The following XML example shows the schema definition of the Macros element.
<xs:element name="Macros">
<xs:complexType>
<xs:sequence>
<xs:element name="Macro" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
A Macro element defines a text substitution macro that can be used
in other elements. Macros are referenced using NMAKE syntax, i.e.
$(runtime.windows).
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="Id" type="MacroIdType" use="required">
<xs:annotation>
<xs:documentation>
Required. The Id for this macro, used in macro references.
For example, if the Id for this macro is "runtime.windows",
the macro would be referenced as $(runtime.windows).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Value" type="MacroValueStringType" use="required">
<xs:annotation>
<xs:documentation>
Required. The value that will be substituted for macro
references in macro- enabled XML attributes.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
ATTRIBUTE DEFINITION
Note
The Id for a macro is case sensitive and must be unique
for each defined Macro element in the package project
XML file.
Macros can be used throughout the project file by using the syntax $(MacroName). Although macros are valid in
most elements of the project file, they are not supported in all. Macros cannot be referenced in a nested fashion—
for example $(Macro1_$(Macro2)—and they cannot be used in the definition of package attributes. Some other
items of note about macros are:
A macro definition can include the use of a macro. For example, the following is valid.
<Macros>
<Macro Id="Windows" Value="\windows"/>
<Macro Id="System32" Value="$(Windows)\System32"/>
</Macros>
The order macros are defined does not matter as long as the definitions are not recursive.
There are additionally global macros that can be used in a package project XML file, but they cannot be redefined
within the package. Redefining a global macro causes a failure when the package generator tries to build the
package.
This section provides more detailed information about the supported children of the Components element in a
package project XML file.
OSComponent element
The OSComponent element is a container for Files and RegKeys elements. OSComponent has no attributes and
is usually used to include system components such as shared DLLs, data files, and registry settings. For additional
information about the Files and RegKeys elements, see Specifying files and registry entries in a package project
file.
Note
The OSComponent element must contain at least one Files element or RegKeys element.
The following XML example uses the OSComponents element to include various system files.
<Components>
<OSComponent>
<Files>
<File Source="$(_RELEASEDIR)\testdll.dll"/>
<File Source="$(_RELEASEDIR)\testzh.dll"/>
<File Source="$(_RELEASEDIR)\testEA.dll"/>
</Files>
<Files Language="*">
<File DestinationDir="$(runtime.default)\mui\$(langid)"
Source="$(_RELEASEDIR)\$(LANGID)\testdll.dll.mui"/>
</Files>
<Files Language="(zh-CN;zh-TW)">
<File DestinationDir="$(runtime.default)\mui\$(langid)"
Source="$(_RELEASEDIR)\$(LANGID)\testZH.dll.mui"/>
</Files>
<Files Language="(zh-CN;zh-TW;jp-jp;kr-kr)">
<File DestinationDir="$(runtime.default)\mui\$(langid)"
Source="$(_RELEASEDIR)\$(LANGID)\testEA.dll.mui"/>
</Files>
<RegKeys Language="(zh-CN;zh-TW)">
<RegKey KeyName="$(hklm.software)\microsoft\testZH\$(LANGID)">
<RegValue Name="ZHConfig_$(LANGID)" Value="$(LANGID)" Type="REG_SZ"/>
<RegValue Name="ZHConfig_$(LANGID)_Test" Value="$(LANGID)"
Type="REG_EXPAND_SZ"/>
</RegKey>
</RegKeys>
</OSComponent>
</Components>
The files and registry keys can represent language-neutral or language-specific components.
Driver element
Windows 10 Mobile uses some of the same driver model as Windows 10 for desktop editions (Home, Pro,
Enterprise, and Education). You must import an .inf file for your driver into a package by using the Driver element.
When an .inf file is specified, the packaging infrastructure calls the driver installation code to simulate the driver
installation and determine the necessary registry change for the driver.
The following table describes the attributes of the Driver element.
ATTRIBUTE DESCRIPTION
InfSource Required. Specifies the .inf file for your driver to import
into the driver package.
The following table describes the child elements of the Driver element.
ELEMENT DESCRIPTION
<Components>
<Driver InfSource=
"$(_WINPHONEROOT)\Sample.inf">
<Reference Source="$(_RELEASEDIR)\Sample.sys" />
<Files>
<File Source="$(_RELEASEDIR)\Sample.sys"/>
</Files>
</Driver>
</Components>
The default file location for driver installation is "$(runtime.drivers)". The staging of the driver object requires
access to the Mobile Core hive files. Therefore, it is necessary to set the variable HIVE_ROOT to the directory that
contains those hives, which by default is %WPDKCONTENTROOT%\CoreSystem. The following example shows a
package generator (PkgGen.exe) command that sets the HIVE_ROOT variable.
Note
If the driver uses the Include INF directive to reference other drivers that are part of the Mobile Core subset of the
operating system, use the WIM_ROOT variable instead of the HIVE_ROOT variable. The default directory for the
staging WIM image is the same as the hives.
For Windows 10 Mobile, you must use both the HIVE_ROOT and WIM_ROOT parameters. If you use only
WIM_ROOT, the package might not be complete.
For more information about command-line arguments for PkgGen.exe, see Command-line arguments for package
generator.
Security element
Under the default security policy for drivers, drivers are accessible to other TCB components (including other
drivers and the kernel) and to services. Some device experiences require a driver that can be accessed by
applications as well as services. To enable this scenario, OEMs may need to add a Security element under the
Driver element.
The Security element has the following attribute and child elements.
ATTRIBUTE DESCRIPTION
ELEMENT DESCRIPTION
Note
The product ID GUID must be specified including
brackets, for example
{263AF644-C573-4e00-BB49-740DD4C69664} .
ELEMENT DESCRIPTION
Service element
The Service element describes a service in the system and is used for the packaging and configuration of partner
services.
The following table describes the attributes of the Service element.
ATTRIBUTE DESCRIPTION
The following table describes the child elements of the Service element.
ELEMENT DESCRIPTION
ELEMENT DESCRIPTION
Executable Required for services that run in their own process. This
element defines the service executable through the
following four attributes.
Name - Optional. The name for the executable on
the device. If a name is not specified, the file name
in the source path is used.
Source – Required. The source path of the service
executable to be included in the package. This
path can be an absolute or relative path. It is also
valid to use macro references in the path.
Note
If the executable file does not exist, package
generation will fail.
Note
The file system might not support all of these
attributes.
ELEMENT DESCRIPTION
Note
If the value is NULL, the command is unchanged.
If the value is an empty string (""), the command
is deleted and no command is run when the
service fails.
Note
If the file does not exist, package generation will
fail.
Note
The file system might not support all of these
attributes.
BinaryPartition element
The BinaryPartition element is used to create binary partition packages. If a package contains a BinaryPartition
object, it can contain no other objects, including other BinaryPartition objects.
There is also a special package-level Boolean attribute called BinaryPartition. When this attribute is set, one and
only one BinaryPartition element must be added.
The BinaryPartition element has only one attribute, ImageSource, which points to a file that contains a binary
dump of the target partition. You must specify the appropriate value for the package-level Partition attribute.
ComServer element
The ComServer element describes a DLL and all of the COM classes and related items derived from the DLL. It is
designed to simplify how CLSID-related registry settings are specified. The ComServer element is derived from
OSComponent and includes three additional child elements:
Dll: This element specifies the DLL that exports all the COM classes in the ComServer object. The path of
the DLL will also be used for the path stored under the InprocServer32 registry key.
Classes: This element specifies the classes exported from the Dll element. It contains multiple Class
elements, each of which can have the following attributes.
ATTRIBUTE DESCRIPTION
``` syntax
<Class
Id="{2933BF90-7B36-11D2-B20E-00C04F983E60}"
Version="1.0"
TypeLib="{D63E0CE2-A0A2-11D0-9C02-00C04FC99C8E}"
ThreadingModel="Both"
ProgId="Microsoft.XMLDOM.1.0"
VersionIndependentProgId="Microsoft.XMLDOM"
Description="XML DOM Document">
<RegKey KeyName="$(hkcr.clsid)\SideBySide">
<RegValue Name="RefCount" Type="REG_DWORD" Value="00000001" />
<RegValue Name="Version30RefCount" Type="REG_DWORD" Value="00000001" />
</RegKey>
<RegKey KeyName="$(hkcr.clsid)\VersionList">
<RegValue Name="3.0" Type="REG_EXPAND_SZ"
Value="%SystemRoot%\System32\msxml3.dll" />
</RegKey>
</Class>
```
Interfaces: This element contains a list of Interface elements that describe the interfaces implemented by
the ComServer object. Similarly to Class elements, the following attributes and zero or more RegKey child
elements can be specified.
ATTRIBUTE DEFINITION
``` syntax
<Interface
Id="{D4D4A0FC-3B73-11D1-B2B4-00C04FB92596}"
TypeLib="$(TypeLibId)"
Name="IXMLAttribute"
ProxyStubClsId="{00020424-0000-0000-C000-000000000046}"
ProxyStubClsId32="$(ProxyStubClsId)">
<RegKey KeyName="$(hkcr.iid)\TypeLib">
<RegValue Name="Version" Type="REG_SZ" Value="3.0" />
</RegKey>
</Interface>
```
SettingsGroup element
A SettingsGroup element represents a settings group in the customization answer file. Managed Centralized
Settings Framework (MCSF) provides a standard way to describe settings that are customizable within packages.
PkgGen writes out the content of CustomMetadata tag to the .meta.xml file in the package. The layout of this file is
nearly identical to the input.
The output metadata file is included in the package, and is installed on the phone in
\Windows\Packages\CustomMetadataFiles, as PackageName.meta.xml. This folder is a sibling of the DsmFiles
folder that is used for packages.
The packaging and device update tools treat the .meta.xml file like any other file on the phone.
Walkthrough – adding custom metadata
Use the following process to add custom data to an existing package.
To add custom data to an existing package
1. Locate the desired package project XML file and open it in a text editor such as Notepad.
2. Add the desired metadata tags right after the <Package> element. For example, to track a targeted version,
model, and development team, add the following metadata value pairs.
<CustomMetadata>
<Field Name="TargetVersion">8.1</Field>
<Field Name="PrimaryPhoneModel">DCD6000</Field>
<Field Name="DevelopmentTeam">Alpha Team</Field>
</CustomMetadata>
3. Use PkgGen to generate a package. For more info, see Creating packages.
Walkthrough – viewing custom metadata
Use the following process to confirm that the metadata file is present in the generated package.
To confirm that the metadata file is in the generated package
1. On a Windows PC, locate the generated package and add a ".cab" file extension to the package name.
2. Double-click the renamed file to view files that are stored in the .cab file.
3. The package files are renamed in the .cab file. To locate the filename of the metadata file that will be used on
the device, click the man.dsm.xml file, extract it, and open it. One of the file entries will show the .meta.xml
package name and the .cab file name that is used. In this example, 4_Contoso.xml is the name of the
metadata XML file.
…
<FileEntry>
<FileType>Regular</FileType>
<DevicePath>\Windows\Packages\CustomMetadata\Contoso.TestApp.meta.xml</DevicePath>
<CabPath>4_Contoso.xml</CabPath>
<Attributes>Normal</Attributes>
</FileEntry>
4. Extract the 4_Contoso.xml and open it. Confirm that it contains the expected metadata.
Related topics
Creating packages
Send comments about this topic to Microsoft
Specifying files and registry entries in a package
project file
11/17/2017 • 5 min to read • Edit Online
Because files and registry entries are a key component of each object in a package, it is important to understand
how files and registry entries are specified in package project files.
Files
To include a file, use the File element, which is a child of the Files element. The following XML example shows the
schema definition of the File element.
<xs:complexType name="fileType">
<xs:attribute name="Name" type="xs:string" use="optional"/>
<xs:attribute name="Source" type="xs:string" use="required"/>
<xs:attribute name="DestinationDir" type="DevicePathType" use="optional"/>
<xs:attribute name="Attributes" type="attributesType" use="optional" />
<xs:attribute name="EmbeddedSigningCategory" type="xs:string" use="optional" />
</xs:complexType>
ATTRIBUTE DEFINITION
Note
The file must exist, or package generation will fail.
Name Optional. Specifies the name for this file on the device. If
a name is not specified, the file name in the source path
is used.
ATTRIBUTE DEFINITION
Attributes Optional. Specifies the file system attributes for this file
on the device. This value can be a combination of the
following separated by a space character
Archive
Hidden
Offline
ReadOnly
System
Temporary
SparseFile
NotContentIndexed
When not specified, a predefined default value is used.
Note
Although the above attributes can be specified, the file
system might not support all of them.
<Files>
<File Source="MyHalFileLocation\HalExt1.dll"
EmbeddedSigningCategory="-oem -hal" />
<File Source="MyHalFileLocation\HalExt2.dll"
EmbeddedSigningCategory="-oem -hal" />
<File Source="MyHalFileLocation\HalExt3.dll"
EmbeddedSigningCategory="-oem -hal" />
</Files>
ATTRIBUTE DEFINITION
Name Required. String that specifies the name of the value. The
symbol “@” can be used to specify the default value.
Additionally, macros can be used in the attribute value.
Value Required. String that represents the value of the key. This
attribute is dependent on the value type.
Type Required. The type of the value. The following list shows
the possible type values and the required format for the
paired Value attribute.
Note
A NULL
terminato
r
character
is
appended
to the
end of
this string
automati
cally. If
for some
reason
you don’t
want the
null
terminato
r, you
must use
REG_HEX
with a
raw hex
dump.
REG_EXPAN Same as
D_SZ REG_SZ.
Note
Given that the ‘;’ character is the delimiter for
REG_MULTI_SZ, the ‘;’ character cannot be used inside
the string because it would be parsed as the separator
of two strings. A workaround for this is to use the
REG_HEX type instead and specify the string with the
hex dump, e.g.: “hex(7):<exact hex dump of the
string>”.
Note
This attribute can be used along with the Language or
Resolution attribute.
Note
This attribute can be used along with the CpuFilter, but
it cannot be used at the same time as Resolution.
ATTRIBUTE DEFINITION
Note
This attribute can be used along with the CpuFilter, but
it cannot be used at the same time as Language.
The package generator tool (PkgGen.exe) is used to create a package from a package project XML file. The tool is
designed to process one project XML file at a time and by default is located at
%WPDKCONTENTROOT%\Tools\bin\i386. The following section outlines the command-line arguments.
Warning
Package generation requires catalog files to be signed. To perform this task, a certificate must be specified for use
with pkggen.exe. If a certificate is not provided, usage of pkggen.exe will return the following error message:
Failed to sign package integrity catalog file . To specify a signing certificate for pkggen.exe, follow the steps in
Set up the signing environment and Sign binaries and packages.
Usage
PkgGen [Project File] [Options] /config:[Configuration File]
Note
When using the package generator tool, make sure to use quote marks for input paths that contain spaces. For
example, if you defined a %WPDKCONTENTROOT% environment variable that is set to C:\Program Files
(x86)\Windows Kits\10, then the invocation of package generator should be
"%WPDKCONTENTROOT%\tools\bin\i386\pkggen.exe" with a leading and ending quote mark. This guidance should also
be followed for the path to the project file and the configuration file. For any parameter values, such as variables,
that start with the /<param_name>: syntax make sure to quote the entire string after the : symbol if there are any
spaces. An example would be
/variables:"WPDKCONTENTROOT=C:\Program Files (x86)\Windows Kits\10;MyVar=TestValue" .
Before you create an image, we recommend that you first merge your packages by using the FeatureMerger.exe
tool. This tool takes a feature manifest file as an input and merges your referenced packages into a small, well-
defined set of packages that adhere to a predictable and consistent naming system.
This topic provides general guidance about the package merging process.
Important
For retail images, you must generate merged packages that conform to the Windows Standard Package
Configuration (WSPC). WSPC is a set of rules that define the package naming requirements for retail devices. For
more info, see Windows Standard Packaging Configuration (WSPC) requirements for retail images.
Features All packages listed under the Features element with the
same FeatureID, partition, language, and resolution will
be merged together into a package with the following
naming convention.
<Owner>.OEM_<feature
ID>.<FeatureManifestID>.<Partition>.spkg
In the preceding table, the partition, language, and resolution metadata used for package merging are derived
from the following attributes in the package project XML file used to generate each package:
Partition attribute of the Package element.
Language attribute of the Files element.
Resolution attribute of the Files element.
Note
Language and resolution-specific merged packages (packages with the language or resolution suffix in the
package file name) do not comply with WSPC. For retail images, these packages should be merged into a WSPC-
compliant base package by referencing the packages under the BasePackages element in the feature manifest.
For more info about these attributes, see Primary elements and attributes of a package project file and Specifying
files and registry entries in a package project file.
Important
When building merged packages for retail images,
OEMs must specify either Phone or Variant for the
FeatureManifestID substring. For more info, see Windows
Standard Packaging Configuration (WSPC) requirements
for retail images.
Related topics
Merging packages using FeatureMerger
Windows Standard Packaging Configuration (WSPC) requirements for retail images
Send comments about this topic to Microsoft
Merging packages using FeatureMerger
11/17/2017 • 9 min to read • Edit Online
The package feature merger tool (FeatureMerger.exe) combines packages into a small, well-defined set of merged
packages that adhere to a predictable and consistent naming system. For retail images, OEMs must use
FeatureMerger.exe to merge their packages into a specific set of packages that conform to the Windows Standard
Package Configuration (WSPC).
For an overview of package merging, see Merging packages before imaging. For more information about the
WSPC requirements for retail images, see Windows Standard Packaging Configuration (WSPC) requirements for
retail images.
FeatureMerger.exe overview
FeatureMerger.exe can be used in two ways: by passing a single feature manifest XML file, or by passing an
FMFileList XML file that describes multiple feature manifests. The tool generates a set of merged packages and a
new feature manifest file that references the merged packages. The new feature manifest file can be referenced in
an OEMInput file that is passed to ImgGen.cmd to build an image from the new merged packages.
To generate merged packages that comply with the (WSPC) for retail images, you must organize all your packages
into a single feature manifest as described in Windows Standard Packaging Configuration (WSPC) requirements
for retail images and pass this feature manifest to FeatureMerger.exe. If you are starting with packages that are
described in multiple feature manifest files, you can generate merged packages that comply with WSPC in a multi-
step process:
1. Generate an initial set of merged packages and feature manifests by running FeatureMerger.exe with an
FMFileList XML file that references the feature manifest files.
2. Manually create a new feature manifest file that references all of the merged packages generated in the first
step. Make sure that the merged packages are referenced in the WSPC-compliant sections of the feature
manifest file, as described in Windows Standard Packaging Configuration (WSPC) requirements for retail
images.
3. Generate merged packages by running FeatureMerger.exe with the consolidated feature manifest file.
Note
The package version must be
incremented whenever a
package is changed. For more
info about package versioning
and updates, see Update
requirements.
en-us;de-de
ARGUMENT/SWITCH DESCRIPTION VALUE
480x800;720x1280;768x1280;108
0x1920
/Variables:_cputype=arm;build
type=fre;releasetype:producti
on
/OwnerType:Owner type Specifies the resulting package Text string – For OEM packages,
owner type. this value must be set to "OEM".
SWITCH DESCRIPTION VALUE
{+|-}Incremental Specifies to only re-merge existing Boolean value: Precede this switch
merged packages when one of the with either [+] to set to true or [-]
sources packages has changed. If to set to false
this value is not set, the default is
False. This means that all packages
will be rebuilt each time
FeatureMerger is called.
{+|-}Compress This value allows for the Boolean value: Precede this switch
compression of merged packages. with either [+] to set to true or [-]
When compress is true, the merge to set to false
tool run time increases, but the
package is optimized for storage
size. This setting has no impact on
imaging.
The following table lists the switches that are reserved for use by Microsoft when using FeatureMerger.exe with a
single feature manifest XML file.
Examples
The following examples demonstrate FeatureMerger.exe syntax when specifying a feature manifest file.
Note
The package version must be
incremented whenever a
package is changed. For more
info about package versioning
and updates, see Update
requirements.
/Variables:_cputype=arm;build
type=fre;releasetype:producti
on
{+|-}Incremental Specifies to only remerge existing Boolean value: Precede this switch
merged packages when one of the with either [+] to set to true or [-]
sources packages has changed. If to set to false
this value is not set, the default is
False. This means that all packages
will be rebuilt each time
FeatureMerger.exe is called.
SWITCH DESCRIPTION VALUE
{+|-}Compress This value allows for the Boolean value: Precede this switch
compression of merged packages. with either [+] to set to true or [-]
When compress is true, the merge to set to false
tool run time increases, but the
package is optimized for storage
size. This setting has no impact on
imaging.
The following table lists the switches that are reserved for use by Microsoft when using FeatureMerger.exe with an
FMFileList XML file.
Examples
The following example demonstrates FeatureMerger.exe syntax when specifying an FMFileList XML file.
ELEMENT DESCRIPTION
<FM Path="C:\MyDir\OEMSampleFM.xml"
ReleaseType="Test" OwnerType="OEM" ID="Phone"
OwnerName="Contoso" />
<Resolution>480x800</Resolution>
<Language>en-US</Language>
<Locale>en-US</Locale>
For example, the following sample file specifies two feature manifest files, a list of supported resolutions, a
supported language, and a supported locale.
<?xml version="1.0" encoding="utf-8"?>
<FMCollectionManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate">
<FMs>
<FM Path="D:\FeatureMergeTest\OEMSampleFM1.xml" ReleaseType="Test" OwnerType="OEM" ID="FM1"
OwnerName="Contoso"/>
<FM Path="D:\FeatureMergeTest\OEMSampleFM2.xml" ReleaseType="Test" OwnerType="OEM" ID="FM2"
OwnerName="Contoso"/>
</FMs>
<SupportedResolutions>
<Resolution>480x800</Resolution>
<Resolution>720x1280</Resolution>
<Resolution>768x1280</Resolution>
</SupportedResolutions>
<SupportedLanguages>
<Language>en-US</Language>
</SupportedLanguages>
<SupportedLocales>
<Locale>en-US</Locale>
</SupportedLocales>
</FMCollectionManifest>
This guidance also applies to the parameters that take paths, such as /InputFMDirpath.
Related topics
Merging packages before imaging
Windows Standard Packaging Configuration (WSPC) requirements for retail images
Windows Standard Packaging Configuration (WSPC)
requirements for retail images
11/17/2017 • 19 min to read • Edit Online
For mobile retail images, OEM firmware packages (sometimes referred to as BSP submissions) must comply with
the Windows Standard Package Configuration (WSPC).
WSPC is designed to achieve a better customer experience:
Smaller download sizes.
Reduced imaging and update errors.
Faster updates: Reduced system overhead needed to deliver and install updates.
Fewer updates: Device updates can make a "single hop" update from any image baseline.
Note
Microsoft requires that all OEM retail firmware packages (BSP submissions) conform to the WSPC. While there
are no exceptions to this policy, Microsoft has included tools and processes to ease the your transition to WSPC
compliance.
WSPC overview
The purpose of WSPC is to define a firmware package set and update rules for that package set where it is easy
to determine differences between any two arbitrary versions of the package set. The ability to easily and
definitively determine the changes between any two package set versions allows Microsoft to use more efficient
methods to update the device. The end result is a better customer experience as the user will experience only a
single update session and associated reboot as opposed to several.
Previous WSPC implementation
Microsoft’s previous implementation of WSPC mandated a static firmware package set using static package
names. The static package set and names applied globally to all of an OEM’s POPs. These packages were tightly
coupled to the processor’s (SOC’s) the file system partition layout. While this implementation fulfilled the goal
described in the summary above, it had two serious drawbacks. First, it put a high burden on you to achieve
compliance due to its complex implementation. Second, the implementation’s tight coupling to the SOC’s file
system partition layout does not accommodate new SOC’s with different partition configurations.
New WSPC implementation
The new WSPC implementation based on a simpler generalization of our previous implementation. As long as
we don’t remove or rename packages between firmware versions, determining the differences between any two
arbitrary firmware versions is straight forward. We simply compare the source and target firmware package sets,
and update any packages that have changed between the two. This includes the addition of packages from one
firmware version to another.
Complying with the new model is simple and requires less overhead. Instead of Microsoft prescribing the exact
contents of the firmware package set, the you will do this by declaring one of your firmware package sets as a
baseline. This baseline will apply to a specific set of POPs defined by the OEM. In addition, since this model is a
generalized form of the previous WSPC implementation, Windows Phone 8.1 WSPC compliance firmware
submissions are automatically compliant with the new WSPC implementation.
This implications of this model are:
1. You can define multiple baselines on a per POP basis.
2. Once a package is added to a firmware package set, it cannot be removed.
If necessary, you must include an empty package.
3. You cannot rename a package in a firmware package set.
This is effectively the removal of an existing and the addition of a new package.
4. You must be mindful to ensure the firmware package set does not grow beyond reasonable size.
Feature merge should be used to manage firmware package set growth.
WSPC requirements
Windows Phone Ingestion Client
You must upgrade to the version x.x.x.x of the Windows Phone Ingestion Client (WPIC). There are breaking
changes in this version that necessitate the upgrade, including:
1. A Baseline parameter has been added to the Initialize-FirmwareSubmission cmdlet. This will be used to
identify a firmware submission as a baseline for WSPC compliance validation.
2. The nonWSPCCompliant parameter of the Initialize-FirmwareSubmission cmdlet has been deprecated.
3. All requests for all cmdlets from previous versions of the WPIC will be rejected with the following error:
The Windows Phone Ingestion Client version you are using (Version {0}) is no longer supported. Please
make sure you are using the current version of the Windows Phone Ingestion Client, Version {1}.
Feature merge
Feature Merge continues to play a critical role in the new WSPC implementation. Packages must be feature
merged to greatest extent possible to smallest resultant set possible. Feature Merging firmware packages will
help manage package set growth as well avoid situations where you must work around deprecated packages for
WSPC compliance.
More information on using feature merge can be found at the links below:
Merging packages before imaging
Merging packages using FeatureMerger
Firmware submissions
Firmware updates are determined by comparing the baseline firmware submission with any subsequent
submissions.
Baseline firmware submission
To prepare a firmware submission for updating to retail devices by using a Request For Update (RFU), it must
first be declared as a baseline. By declaring a firmware submission as a baseline, the package set comprising
firmware submission will be used as the basis for WSPC compliance checks.
Prior to declaring a firmware submission as a baseline, you should have performed sufficient testing on the
firmware so that they are confident that the package set will experience minimal and/or manageable variance in
subsequent versions. Also, as discussed above, the package set should be feature merged to the greatest extent
possible.
To declare the firmware submission as a baseline, you will run the Initialize-FirmwareSubmission cmdlet with the
baseline parameter as shown below.
Initialize-FirmwareSubmission -TypeOfSubmission Image –UpdateHistoryPath [path] –OemInputPath [path] –
OutputFilePath [path] -Baseline
If the new firmware submission is not WSPC-compliant, the following warning will be returned:
The firmware submission is not WSPC compliant with the baseline submission {1}. This is because the
packages {0} are missing from the new submission. Since this is not a new baseline, the firmware submission
is allowed. However, since this submission not WSPC compliant and is not a baseline, it will not be
available for a retail servicing update. Retail servicing updates are only allowed for the following
scenarios: between an RTM source submission and an RTM target submission, or between a legacy non-WSPC
compliant source submission and an RTM target submission. To make this submission WSPC compliant, please
ensure the missing packages are included in the submission.
Microsoft will reject baseline firmware submissions that are not WSPC-compliant. The following error will be
shown:
The firmware submission is not WSPC compliant with the baseline submission {1}. This is because the
packages {0} are missing from the new submission. To make this submission WSPC compliant, please ensure the
missing packages are included in the submission.
The firmware submission is not WSPC compliant with the baseline submission {1}. This is because the
packages {0} are missing from the new submission. Since this is not a new baseline, the firmware submission
is allowed. However, since this submission not WSPC compliant and is not a baseline, it will not be
available for a retail servicing update. Retail servicing updates are only allowed for the following
scenarios: between an RTM source submission and an RTM target submission, or between a legacy non-WSPC
compliant source submission and an RTM target submission. To make this submission WSPC compliant, please
ensure the missing packages are included in the submission.
If either of the checks fail and the firmware submission v4 was submitted with the baseline parameter, the
firmware will be rejected with the following error:
The firmware submission is not WSPC compliant with the baseline submission {1}. This is because the
packages {0} are missing from the new submission. To make this submission WSPC compliant, please ensure the
missing packages are included in the submission.
Partial submissions
Partial firmware submissions with the Initialize-FirmwareSubmission cmdlet using the PartialImage parameter
will still be allowed, but the submission must not be a baseline submission.
NonWSPCCompliant parameter
The NonWspcCompliant parameter is not supported.
For more info, see Initialize-FirmwareSubmission cmdlet.
Request for update (RFU )
As we mentioned previously, retail servicing must be between baseline firmware submissions. By retail servicing,
we mean using the New-RequestForUpdate cmdlet with the retail servicing type. Example is shown below:
$result = New-RequestForUpdate
-FirmwareSubmissionTicketId <Target Firmware Submission>
–RequestForUpdateType RetailServicing
-SourceFirmwareSubmissionTicketId <Source Firmware Submission>
-OemDeviceName xxx
-MOId 000-yy
RFUs used for retail servicing must be:
Between two successful baseline firmware submissions
The version of the target firmware submission must be greater than the source firmware submission
If the target firmware submissions is not a baseline, the request will be rejected and the following error will be
shown:
The target firmware submission is not a Baseline submission, which is required for a retail servicing
update. A retail servicing update is only allowed for the following scenarios: between a Baseline source
submission and a Baseline target submission, or between a legacy non-WSPC compliant source submission and a
Baseline target submission. Please also make sure you are using the current version of the Windows Phone
Ingestion Client, Version {0}. Submission status in this request for update: [Target submission: {1}, {2}],
[Source submission: {3}, {4}].
If neither the source nor target firmware submissions are baseline but the source firmware submission is WSPC
compliant, the request will be rejected and the following error will be shown:
The source firmware submission is WSPC compliant, however it is not a Baseline submission, which is required
for a retail servicing update. A retail servicing update is only allowed for the following scenarios:
between a Baseline source submission and a Baseline target submission, or between a legacy non-WSPC
compliant source submission and a Baseline target submission. Please also make sure you are using the
current version of the Windows Phone Ingestion Client, Version {0}.
If the target firmware submissions is not a baseline, but the request is not for retail servicing, the request will be
accepted and processed with a warning similar to the following:
$result = New-RequestForUpdate
-FirmwareSubmissionTicketId <Target Firmware Submission>
–RequestForUpdateType Trial
-SourceFirmwareSubmissionTicketId <Source Firmware Submission>
-OemDeviceName xxx
-MOId 000-yy
The target firmware submission is not a Baseline submission, which is required for a retail servicing
update. A retail servicing update is only allowed for the following scenarios: between a Baseline source
submission and a Baseline target submission, or between a legacy non-WSPC compliant source submission and a
Baseline target submission. Since this is a non-retail RFU, it is being allowed, however the RFU should be
made WSPC compliant before submitting the retail RFU. RFU status in this request for update: [Target
submission: {0}, {1}], [Source submission: {2}, {3}].
If neither the source nor target firmware submissions are baseline but the source firmware submission is WSPC
compliant, but the request is not for retail servicing, the request will be accepted and processed with a warning
similar to the follow:
The source firmware submission is WSPC compliant, however it is not a Baseline submission, which is required
for a retail servicing update. A retail servicing update is only allowed for the following scenarios:
between a Baseline source submission and a Baseline target submission, or between a legacy non-WSPC
compliant source submission and a Baseline target submission. Since this is a non-retail RFU, it is being
allowed, however the RFU should be made WSPC compliant before submitting the retail RFU.
Tools
The Microsoft Windows Phone Ingestion Client (WPIC) and Phone Image Inspector (ImgVal) have both been
updated to determine if firmware submissions are WSPC-compliant or not. However, because WSPC compliance
is now determined by comparison to previously submitted baseline firmware, both tools must have access to
Microsoft’s UTS systems. As a result, ImgVal will not be capable of running in a standalone mode. During
installation, ImgVal will prompt you for your Microsoft Connect credentials as it does currently for WPIC. For
more info about WPIC, see Ingestion Client for Windows Phone.
Standard validation
In addition to WSPC validation, WPIC and ImgVal will also run a new set of standard validations against firmware
submissions. These standard validation rules are designed to catch common errors in firmware submissions that
may cause issues during retail servicing.
Previously, this validation was bypassed for NonWspcCompliant submissions. Going forward they will be applied
to all submissions. Standard validation errors are blocking and must be fixed for successful firmware
submissions.
The standard validation rules are listed below:
VALIDATION RULE
Note Firmware created through the Qualcomm Windows Phone Customization Tool (QWPCT) will automatically
conform to the standard compliance rules above.
Building merged packages
To conform to WSPC, OEMs should use FeatureMerger.exe to reduce the total number of packages in a firmware
submissions to the greatest extent possible. For more info about the package merging process and how the
merged package names are derived, see Merging packages before imaging.
Creating empty packages
Achieving WSPC compliance for a new firmware submission requires that it contain a superset of the packages
contained in the previous baseline submission. An impact of this WSPC compliance rule is that packages may not
be removed from new firmware submissions as compared to the previous baseline.
In some cases, it may be necessary to reconfigure your firmware in such a way that a package in the previous
baseline is no longer used. In order to achieve WSPC compliance in this case, you will need to create and include
an empty package in the firmware.
The following steps summarize the process of creating an empty feature merged package called
Contoso.BASE.MainOS.spkg:
1. Build one empty package for the partition targeted by the package using PkgGen.exe. Ensure the
<Components> element is empty. For example, the following package XML generates an empty project
for the MainOS partition.
<Package xmlns="urn:Microsoft.WindowsPhone/PackageSchema.v8.00"
Owner="Contoso" OwnerType="OEM" Component="EmptyPackage" SubComponent=”ForMainOS”
ReleaseType="Production" Platform="<PLAT>" Partition="MainOS">
<Components>
</Components>
</Package>
2. Reference the empty packages in the feature manifest. For example, the following feature manifest
generates merged base packages and includes a combination of empty packages for the MainOS
partition.
<FeatureManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate">
<BasePackages>
<PackageFile Path="C:\Packages" Name="Contoso.BASE.MainOS.spkg" Partition="MainOS" />
<PackageFile Path="C:\EmptyPackage" Name="Contoso.EmptyPackage.ForMainOS.spkg"/>
<PackageFile Path="C:\EmptyPackage" Name="Contoso.EmptyPackage.ForMainOS2.spkg"/>
<PackageFile Path="C:\EmptyPackage" Name="Contoso.EmptyPackage.ForMainOS3.spkg"/>
</BasePackages>
</FeatureManifest>
3. Generate merged packages by running FeatureMerger.exe with the feature manifests that reference the
empty packages. The generated merged packages will contain both the empty packages and, where
applicable, packages with content from the OEM.
Alternately, you can generate an empty package for the partition targeted by the package using PkgGen.exe
without using feature merge. Ensure the <component> element is empty. For example, the following package
XML generates an empty project for the MainOS partition called Contoso.BASE.MainOS.spkg.
<Package xmlns="urn:Microsoft.WindowsPhone/PackageSchema.v8.00"
Owner="Contoso" OwnerType="OEM" Component="BASE" SubComponent=”MainOS” ReleaseType="Production"
Platform="<Plat>" Partition="MainOS">
<Components>
</Components>
</Package>
Troubleshooting
ACTIVITY MESSAGE RESOLUTION
1 Any WPIC command The Windows Phone Download and install the
Ingestion Client version you latest Windows Phone
are using (Version {0}) is no Ingestion Client from
longer supported. Please Microsoft Connect.
make sure you are using
the current version of the
Windows Phone Ingestion
Client, Version {1}.
ACTIVITY MESSAGE RESOLUTION
5 Firmware submission Using a cached package list Ensure the Image Validation
for validation because a tool or Windows Phone
connection to the server Ingestion Client have access
cannot be established. '{0}' to Microsoft’s code signing
and publishing systems.
13 Firmware submission Could not get baseline Ensure the Image Validation
package lists online for tool or Windows Phone
validation because Ingestion Client have access
connection to server cannot to Microsoft’s code signing
be established. Error: '{0}' and publishing systems.
15 Firmware submission Could not retrieve the latest Ensure the Image Validation
baseline package list tool or Windows Phone
through partner service. Ingestion Client have access
Client local cache is used to Microsoft’s code signing
instead. and publishing systems.
Related topics
Merging packages before imaging
Merging packages using FeatureMerger
Configure the Start layout
6/6/2017 • 3 min to read • Edit Online
You can now easily configure the default Start layout to include Web links, secondary tiles, folders, and apps. The
converged Windows 10 Start layout requires that you create a LayoutModification.xml file, which we'll create in
this walkthrough.
Note The schema for the LayoutModification.xml file is different from the MCSF customization answer file schema
or the Windows provisioning answer file schema. You will need to use the LayoutModification.xml to fully take
advantage of the Start customization in Windows 10 and you can use the Start settings in either MCSF or Windows
Provisioning to reference LayoutModification.xml.
If you are not new to Windows mobile development and were using pre-existing MCSF settings pertaining to the
Start layout, we highly recommend that you switch to a LayoutModification.xml to take full advantage of the Start
experience. Also note that not all pre-existing MCSF Start settings are supported in Windows 10.
In this walkthrough, we will:
Create two versions of the Start layout, one with a folder and another without a folder.
Configure the MCSF Start layout settings to specify that we are using the new layout modification XML for
our layout, creating variants in the CAF file, and specifying which Start layout applies to the variants we've
created.
Note Make sure you've read Start layout for Windows 10 mobile editions before doing this walkthrough. The topic
provides more detailed information about each element in LayoutModification.xml, which is not covered in this
walkthrough, as well as limitations and restrictions that you need to be aware of.
To configure the Start layout modification file
1. Create a file called LayoutModification1.xml.
2. Add the XML code to:
Pin a medium-sized tile on row 6, column 0. The tile is for the MSN News app.
Pin a medium-sized tile on row 6, column 2. The tile is a Web link for the Contoso home page.
Pin a small-sized folder on row 6, column 4. The folder name is "Contoso apps" and it contains the
following:
A medium-sized tile for the MSN Apps app.
A medium-sized tile for the MSN Money app.
The following XML example shows what you need to add to the LayoutModification.xml file.
<?xml version="1.0" encoding="utf-8"?>
<LayoutModificationTemplate
xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification"
xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout"
xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout"
Version="1">
<DefaultLayoutOverride>
<StartLayoutCollection>
<defaultlayout:StartLayout>
<start:Group>
<start:Tile
AppUserModelID="Microsoft.BingNews_8wekyb3d8bbwe!ApplicationID"
Size="2x2"
Row="6"
Column="0"/>
<start:SecondaryTile
AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge"
TileID="MyWeblinkTile"
Arguments="http://www.contoso.com"
DisplayName="Contoso Homepage"
Square150x150LogoUri="ms-appx:///Assets/MicrosoftEdgeSquare150x150.png"
Wide310x150LogoUri="ms-appx:///Assets/MicrosoftEdgeWide310x150.png"
ShowNameOnSquare150x150Logo="true"
ShowNameOnWide310x150Logo="false"
BackgroundColor="#FF112233"
Size="2x2"
Row="6"
Column="2"/>
<start:Folder
Name="Contoso apps"
Size="2x2"
Row="6"
Column="4">
<start:Tile
AppUserModelID="Microsoft.BingMaps_8wekyb3d8bbwe!ApplicationID"
Size="2x2"
Row="0"
Column="0"/>
<start:Tile
AppUserModelID="Microsoft.BingFinance_8wekyb3d8bbwe!ApplicationID"
Size="2x2"
Row="0"
Column="2"/>
<!-- Remove these comments if you have an app that you can preload and want to add
to the folder
<start:Tile
AppUserModelID="TBD"
Size="2x2"
Row="0"
Column="4"/>
-->
</start:Folder>
</start:Group>
</defaultlayout:StartLayout>
</StartLayoutCollection>
</DefaultLayoutOverride>
</LayoutModificationTemplate>
3. Save the xml file and note the location of the file; for example,
C:\Contoso\Customizations\LayoutModification1.xml.
4. Using the same xml file, now save it as LayoutModification2.xml.
5. Modify the contents of the new LayoutModification2.xml file by deleting everything within the start:Folder
element and replacing that folder tile location with the MSN Money app.
The contents of your XML file should look like this:
6. Save the xml file and note the location of the file; for example,
C:\Contoso\Customizations\LayoutModification2.xml.
7. Add the layout modification files and configure the Start layout settings in the MCSF CAF or Windows
Provisioning answer file (WPAF).
For MCSF: See Configure the Start layout in Configure customization settings.
For Windows Provisioning: If you are using the Windows Imaging and Configuration Designer (ICD) UI,
see Configure the Start layout in Use the Windows ICD UI to customize and build a mobile image. If you
are using the Windows ICD CLI (hybrid method), see Configure the Start layout in Use the Windows ICD
CLI to customize and build a mobile image.
Part 1: Classic mobile deployment
6/6/2017 • 1 min to read • Edit Online
In this section, we'll go through the process of customizing and building a mobile image using the classic, or
Windows Phone 8.1, tools.
Configure customization settings
Add a package to an OEM manifest file
Configure the OEMInput file
Build a mobile image using ImgGen
Sign a mobile image
Flash an image to a mobile device
Configure customization settings
10/26/2017 • 13 min to read • Edit Online
Customizations are ways that you can modify the Windows device UI, connectivity settings, and user experience to
better reflect your brand and to meet the requirements of the network and market in which the device will ship.
Customizations can include adding apps, modifying the Start layout, configuring network settings using device
management, changing the default values in the Settings screen, or adding new wallpapers.
Windows 10 Mobile supports two customization frameworks: MCSF and Windows provisioning. For more
information about each framework, see Customizations for mobile devices.
In this section, we'll focus on adding the Start layout modification file, preloading an app, and configuring some
customization settings using MCSF.
For more detailed information about the various customizations you can do, see
https://msdn.microsoft.com/library/windows/hardware/dn757433.
<!-- Use to set up targets and conditions for the variants -->
<Targets>
<Target Id="">
<TargetState>
<Condition Name="" Value="" />
<Condition Name="" Value="" />
</TargetState>
</Target>
<Target Id="">
<TargetState>
<Condition Name="" Value="" />
<Condition Name="" Value="" />
</TargetState>
</Target>
</Targets>
</Targets>
<!-- Use to specify the customizations for a single variant when used without the Variant element,
or customizations that apply to all variants when used with the Variant element -->
<Static>
<!-- Use to preload apps to install for all variants -->
<Applications>
<Application Source=""
License=""
ProvXML="" />
</Applications>
<!-- Section where you specify the settings you want to configure -->
<Settings Path="">
<Setting Name="" Value="" />
</Settings>
</Static>
<!-- These settings in the Variant groups will only be applied if the associated target's
conditions are met. -->
<!-- The settings shown here will only be applied for this variant -->
<Variant Name="">
<!-- Only one TargetRef can be used for each variant -->
<TargetRefs>
<TargetRef Id="" />
</TargetRefs>
<Settings Path="">
<Setting Name="" Value="" />
</Settings>
<Settings Path="">
<Setting Name="" Value="" />
</Settings>
</Variant>
<!-- The settings shown here will only be applied for this variant -->
<Variant Name="">
<!-- Only one TargetRef can be used for each variant -->
<TargetRefs>
<TargetRef Id="" />
</TargetRefs>
<Settings Path="">
<Setting Name="" Value="" />
</Settings>
<Settings Path="">
<Setting Name="" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify the values for the following attributes, which determines the owner for the customizations:
Name - A string that specifies the name of the customization or package. You can specify the name
based on the device you're configure, such as "XDeviceCustomizations", or a generic name like
"MobileCustomizations".
Description - A string to help you identify the customizations defined within the CAF.
Owner - A string specifying the owner, such as the OEM name.
OwnerType - Set this to "OEM".
3. Specify the Targets to use for the variants. Targets describe keying for a variant and must be described or
pre-declared before being referenced by the variant. To do this:
To set up a Target
a. Name the Target Id.
b. Specify the Condition(s) for the target by providing the Name and Value.
For example, if we creating variants for two fictitious mobile operators, The Phone Company and Fabrikam,
and we have their MCC and MNC, we can create a target for each operator using the MCC and MNC.
<!-- Use to set up targets and conditions for the variants -->
<Targets>
<Target Id="Id_PhoneCo">
<TargetState>
<Condition Name="MCC" Value="410" />
<Condition Name="MNC" Value="510" />
</TargetState>
</Target>
<Target Id="Id_Fabrikam">
<TargetState>
<Condition Name="MCC" Value="310" />
<Condition Name="MNC" Value="610" />
</TargetState>
</Target>
</Targets>
To learn more about all the supported Condition Names that you can use, see the section Target,
TargetState, Condition, and priorities in Create a provisioning package with multivariant settings. Note that
in this walkthrough we are not using a provisioning package to declare our multivariant settings; instead,
we are adding this directly into the MCSF CAF.
4. Set up the variant. To do this:
To define a Variant
a. Specify the Variant Name.
b. Specify the TargetRef Id for the variant. This should match one of the Target Ids you specified in
the Targets section of the CAF. Note that there should only be one TargetRef Id per variant.
Using our fictitious mobile operators, The Phone Company and Fabrikam, we can define the variants for
each of these operators as shown in the following example:
<!-- The settings shown here will only be applied for The Phone Company -->
<Variant Name="ThePhoneCompany">
<TargetRefs>
<TargetRef Id="Id_PhoneCo" />
</TargetRefs>
<Settings Path="">
<Setting Name="" Value="" />
</Settings>
<Settings Path="">
<Setting Name="" Value="" />
</Settings>
</Variant>
<!-- The settings shown here will only be applied for Fabrikam -->
<Variant Name="Fabrikam">
<TargetRefs>
<TargetRef Id="Id_Fabrikam" />
</TargetRefs>
<Settings Path="">
<Setting Name="" Value="" />
</Settings>
<Settings Path="">
<Setting Name="" Value="" />
</Settings>
</Variant>
<Static>
<!-- Use to preload apps to install for all variants -->
<Applications>
<Application Source=""
License=""
ProvXML="" />
</Applications>
<!-- Section where you specify the settings you want to configure -->
<Settings Path="StartLayoutModificationFilePath">
<Setting Name="LayoutModificationFilePath"
Value="C:\Contoso\Customizations\LayoutModification1.xml" />
</Settings>
</Static>
By specifying a new default location for the LayoutModification.xml, you are overriding the default Start
layout that's in C:\Data\ProgramData\Microsoft\Start\Layouts.
3. Set C:\Contoso\Customizations\LayoutModification2.xml as the default Start layout for the fictitious mobile
operator, The Phone Company.
In the Variant section named ThePhoneCompany, set LayoutModificationFilePath to the file path for the
second layout modification file.
<!-- The settings shown here will only be applied for The Phone Company -->
<Variant Name="ThePhoneCompany">
<TargetRefs>
<TargetRef Id="Id_PhoneCo" />
</TargetRefs>
<Settings Path="StartLayoutModificationFilePath">
<Setting Name="LayoutModificationFilePath"
Value="C:\Contoso\Customizations\LayoutModification2.xml" />
</Settings>
</Variant>
Note LayoutModificationFilePath is a FirstVariationOnly setting, which means that it can only be modified during
first variation, which is typically when the first valid configuration is found (such as when a SIM is inserted and a
marked configuration is found for the SIM). If the configuration changes, such as during a SIM swap, the value for
the FirstVariationOnly setting will not be changed again.
In this example, when the device boots after flashing a new mobile image and there is no SIM is inserted into the
mobile device or a SIM for the fictitious Fabrikam mobile operator (MCC=310, MNC=610) is already in the device,
LayoutModification1.xml (Start layout with a folder) will be used. If a SIM for the fictitious The Phone Company
(MCC=410, MNC=510) is inserted after this, the Start layout will not change. However, if the device boots after
flashing a new mobile image and there is already a SIM for The Phone Company inserted in the device,
LayoutModification2.xml (Start layout with no folder) will be used instead.
Preload apps
Partners can preload apps to be packaged and configured to install on mobile devices during the initial device
setup process. In addition to preloading games, lifestyle apps, and other genres of apps, partners can preload
system settings apps or partner account setup apps, just to name a few. For more information about preloading
apps, see Preinstallable apps for mobile devices.
Important In Windows 10, if you are working with an app developer or creating your own app to preload on the
device, you must now request a preinstallation package for the app. For more information about this part of the
process, see Generate preinstall packages for OEMs. The .zip file that's returned as part of this process should
contain the app's source file (such as an .appx, .appxbundle, or .xap), a provisioning file (.provxml), and a license file
(.xml). If your preinstall package does not contain all of these files, you can't successfully preload the app.
To preload an app
1. Verify that the app preinstall package contains all the files you need to preload an app: source file,
provisioning file, and license file.
2. Add the app to the image. To do this, follow these steps:
a. Add an Applications section to the CAF.
<!-- Use to preload apps to install for all variants -->
<Applications>
<Application Source=""
License=""
ProvXML="" />
</Applications>
Note You can add the Applications section within the Static section of the CAF, which means the
app will be installed for all images regardless of the variant, or you can add it within a particular
Variant, which means it will only be installed for a particular variant. If you are preloading more than
one app, one can be common to all variants (or within the Static section), while another applies only
to a particular variant (or within a Variant section). An example of the latter case can be when you
have an app that you only need to install for one particular mobile operator, or country/region, and
so on.
b. Set Source to the location and name of your app source file; for example,
C:\Contoso\Customizations\Apps\SampleApp.appx.
c. Set License to the location and name of your app's license file; for example,
C:\Contoso\Customizations\Apps\SampleAppLicense.xml.
d. Set ProvXML to the location and name of your app's provisioning file; for example,
C:\Contoso\Customizations\Apps\mpap_sampleapp_001.provxml.
The provXML file follows a prescribed naming convention. See Preinstallable apps for mobile devices
for more information.
3. Save the CAF when you are done adding all the apps.
In some cases, you may need to preload an app that has dependencies on other packages or components. In this
case, you need to make sure that the other packages or components are preinstalled first before your app. If the
dependent packages or components are not installed first, your app preload will fail. We won't walk through this
scenario here, but you can find this documented in Preload an app with a dependency.
<Settings Path="DeviceInfo/Static">
<Setting Name="PhoneManufacturer" Value="" />
<Setting Name="PhoneManufacturerDisplayName" Value="" />
<Setting Name="PhoneROMVersion" Value="" />
<Setting Name="PhoneHardwareRevision" Value="" />
<Setting Name="PhoneSOCVersion" Value="" />
<Setting Name="PhoneFirmwareRevision" Value="" />
<Setting Name="PhoneRadioHardwareRevision" Value="" />
<Setting Name="PhoneRadioSoftwareRevision" Value="" />
<Setting Name="PhoneBootLoaderVersion" Value="" />
<Setting Name="PhoneROMLanguage" Value="" />
<Setting Name="PhoneHardwareVariant" Value="" />
</Settings>
</Static>
These settings are image-time only and will be put directly into the registry hive. Note that some settings in
the DeviceInfo/Static group are optional so you may choose not to specify any values for them or remove
them from the CAF. The following table summarizes which settings are required, optional, and which ones
come from the silicon vendor.
**Note** You will need to contact your Microsoft representative to find out the value that you should use for
`PhoneManufacturer`.
1. Within the Variant section of the CAF, add a DeviceInfo/Variant settings group.
Using our example, we'll add the settings within the variant section for ThePhoneCompany
<!-- The settings shown here will only be applied for The Phone Company -->
<Variant Name="ThePhoneCompany">
<TargetRefs>
<TargetRef Id="Id_PhoneCo" />
</TargetRefs>
<!-- Other settings with the Variant section not included here for simplicity -->
<Settings Path="DeviceInfo/Variant">
<Setting Name="PhoneMobileOperatorName" Value="" />
<Setting Name="PhoneManufacturerModelName" Value="" />
<Setting Name="PhoneMobileOperatorDisplayName" Value="" />
<Setting Name="PhoneSupportPhoneNumber" Value="" />
<Setting Name="PhoneSupportLink" Value="" />
<Setting Name="PhoneOEMSupportLink" Value="" />
<Setting Name="PhoneModelName" Value="" />
<Setting Name="RoamingSupportPhoneNumber" Value="" />
</Settings>
</Variant>
These settings are first variation only and can be configured at runtime, so potentially may be based on the
SIM value. Note that some settings in the DeviceInfo/Variant group are optional so you may choose not to
specify values for them or remove them from the CAF. The following table summarizes which settings are
required, optional, and which ones come from the silicon vendor.
PhoneMobileOperatorName PhoneMobileOperatorDisplayName
PhoneManufacturerModelName PhoneSupportPhoneNumber
PhoneModelName PhoneSupportLink
PhoneOEMSupportLink
PhoneRoamingSupportPhoneNumber
2. Save the CAF when you are done adding all the values for the required settings or any optional settings you
choose to set. Follow the guidance in Phone metadata in DeviceTargetingInfo to make sure you set the
correct values and their formats.
You can use a feature manifest (FM) file to define specific types of image builds that contain different sets of
optional packages. To learn more about FM files, see Feature manifest file contents. For more information about
additional logic that you can add to the build system, see Feature groupings and constraints.
In this walkthrough, we will add the packages you created in Creating mobile packages, to an FM file to define new
OEM features that you can later include to build a mobile OS image.
To add a package to an FM file
1. Create a new FM file or modify an existing FM file to include the two packages that you created and define
feature IDs for these packages. For an example of what the FM file looks like, see
%WPDKCONTENTROOT%\FMFiles\arm\MSOptionalFeatures.xml in your kit installation folder.
The following example shows what your FM file may look like.
<BasePackages>
<PackageFile Path="$(mspackageroot)\drivers\Fake\$(cputype)\$(buildtype)"
Name="Microsoft.Fake.AX88772.spkg"/>
</BasePackages>
-->
<Features>
<OEM>
<PackageFile Path="SourceDirectoryA" Name="MyEchoDriver.spkg">
<FeatureIDs>
<FeatureID>ECHO_DRIVER</FeatureID>
</FeatureIDs>
</PackageFile>
<PackageFile Path="SourceDirectoryB" Name="Contoso.Customization.Notifications.QuickActions.spkg">
<FeatureIDs>
<FeatureID>QUICK_ACTIONS</FeatureID>
</FeatureIDs>
</PackageFile>
</OEM>
</Features>
</FeatureManifest>
The OEMDevicePlatformPackages element and BasePackages element are placeholders and are only
there to show you what other options are available to configure in the FM file.
For more information about creating an FM file and other elements that you may need to fully define your
feature, see Feature manifest file contents. For more information about additional logic that you can add to
the build system, see Feature groupings and constraints.
2. In the first PackageFile element within the OEM section, replace SourceDirectoryA with the location of the
folder that contains the Echo driver package and replace MyEchoDriver.spkg with the real name of the .spkg
containing the driver.
3. In the second PackageFile element within the OEM section, replace SourceDirectoryB with the location of
the folder that contains the customization setting package and replace
Contoso.Customization.Notifications.QuickActions.spkg with the real name of the .spkg containing the
customization setting.
4. Save your FM file in the %WPDKCONTENTROOT%\FMFiles\arm folder. For this example, let's name the file
as ContosoOptionalFeatures.xml.
Configure the OEMInput file
9/28/2017 • 2 min to read • Edit Online
Now that you've configured your customization settings in the MCSF CAF and added custom OEM features in the
OEM manifest file, you'll need to create an OEMInput file that specifies the device platform, the feature manifest
files, the release type, device model, build type, languages you want to support, boot UI language, device
resolutions, and other attributes like optional features that you want to include as part of your image.
For more information about each element in the OEMInput file, see OEMInput file contents.
In this walkthrough, we will add the two features we defined in Adding a package to an OEM manifest file,
specifying the languages that we want to support, and defining the rest of our image.
To configure the OEMInput file
1. Create a new OEMInput.xml file or modify an existing OEMInput file. For an example of what the
OEMInput.xml file looks like, see %WPDKCONTENTROOT%\OEMInputSamples\Fake in your kit installation
folder.
In the following example, we copied the contents of the
%WPDKCONTENTROOT%\OEMInputSamples\Fake\TestOEMInput.xml file and made the following
modifications:
Added a new description.
Added English (United Kingdom), French (France), Spanish (Spain), and Chinese (Simplified) to the list
of included devices languages in addition to English (United States). We added this in the
UserInterface section. For more information about other languages you can add to your mobile
device, including how to change the default device language and regional format, see Mobile device
languages.
Added the ContosoOptionalFeatures.xml feature manifest file that we created in the Adding a package
to an OEM manifest file walkthrough and placed it under the AdditionalFMs section of the
OEMInput file by adding a new AdditionalFM entry and specifying the location and name of the
feature manifest file.
Added the ECHO_DRIVER and QUICK_ACTIONS features by adding a new OEM subsection within the
Features section of the OEMInput file. For each feature that we add within the OEM section, we add a
new Feature entry and then specify the name of the feature that we defined in the feature manifest
file.
Note If you're using a mobile reference device, make sure you update the values in the SOC, SV, and
Device sections of the OEMInput.xml. You may also change the ReleaseType depending on what you're
trying to do. Make sure you follow the guidance in OEMInput file contents when specifying values for these
elements.
<?xml version="1.0" encoding="utf-8"?>
<OEMInput xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate">
<Description>Windows mobile image test FFU generation</Description>
<SOC>FAKE_SOC_Test</SOC>
<SV>Microsoft</SV>
<Device>FAKE</Device>
<ReleaseType>Test</ReleaseType>
<BuildType>fre</BuildType>
<SupportedLanguages>
<UserInterface>
<Language>en-US</Language>
<Language>en-GB</Language>
<Language>fr-FR</Language>
<Language>es-ES</Language>
<Language>zh-CN</Language>
</UserInterface>
<Keyboard>
<Language>en-US</Language>
</Keyboard>
<Speech>
<Language>en-US</Language>
</Speech>
</SupportedLanguages>
<BootUILanguage>en-US</BootUILanguage>
<BootLocale>en-US</BootLocale>
<Resolutions>
<Resolution>480x800</Resolution>
</Resolutions>
<AdditionalFMs>
<AdditionalFM>%WPDKROOT%\FMFiles\arm\ContosoOptionalFeatures.xml</AdditionalFM>
<AdditionalFM>%WPDKROOT%\FMFiles\arm\MSOptionalFeatures.xml</AdditionalFM>
</AdditionalFMs>
<Features>
<Microsoft>
<Feature>IMGFAKEMODEM</Feature>
<Feature>TEST_DISABLE_DISK_IDLE</Feature>
<Feature>STANDARD_FEATURE_1</Feature>
<Feature>CODEINTEGRITY_TEST</Feature>
<Feature>SELFHOST_AUTOMATIC_DEVICE_CONFIGURATOR</Feature>
<Feature>LOCATIONFRAMEWORKAPP</Feature>
<Feature>FACEBOOK</Feature>
<Feature>COMMSENHANCEMENTGLOBAL</Feature>
<Feature>KDNETUSB_TEST_ON</Feature>
<Feature>TESTINFRASTRUCTURE</Feature>
<Feature>TEST</Feature>
<Feature>STARTUPOVERRIDES</Feature>
<Feature>GWPCERTTESTPROV</Feature>
<Feature>MOBILECORE_TEST</Feature>
<Feature>DRIVERS_WDTFINFRA</Feature>
<Feature>SKYPE</Feature>
<Feature>BOOTSEQUENCE_TEST</Feature>
<Feature>SKIPOOBE</Feature>
<Feature>CORTANADBG_TEST_PROTECTED</Feature>
<Feature>TEST_PROTECTED</Feature>
<Feature>PSEUDOLOCALES</Feature>
</Microsoft>
<OEM>
<Feature>ECHO_DRIVER</Feature>
<Feature>QUICK_ACTIONS</Feature>
</OEM>
</Features>
<Product>Windows Phone</Product>
</OEMInput>
2. Name and save your OEMInput.xml file. For our example, we named it ContosoTestOEMInput.xml and saved
it in a %WPDKCONTENTROOT%\ContosoOEMInput folder.
Build a mobile image using ImgGen
6/6/2017 • 1 min to read • Edit Online
You can use two different tools to build a customized mobile image (FFU image) in Windows 10:
Using ImgGen.cmd, which is a command file that runs the classic imaging tool, ImageApp.exe. This tool was
also available earlier releases of Windows 10 Mobile including Windows Phone 8.1 and the various GDRs.
Using the Windows Imaging and Configuration Designer (ICD) command-line interface, which is new for
Windows 10.
In this walkthrough, we'll show how to use ImgGen.cmd to build the custom mobile image. In another walkthrough,
we'll go through how to create another mobile image that includes the customizations we've done so far in
addition to other customizations available only through Windows Provisioning by using the Windows ICD CLI.
To build a customized image using ImgGen
1. Open a Developer Command Prompt for VS2015 window as an administrator.
2. If you are running Windows 8.1, complete the following steps to set the USN journal registry size to 1 Mb on
your development PC. Otherwise, skip to the next step.
a. Change the USN minimum size registry key by running the following command:
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem /v
NtfsAllowUsnMinSize1Mb /t REG_DWORD /d 1
b. Reboot the PC before proceeding to the next step.
3. Run ImgGen.cmd by using the following command.
ImgGen TestFlash.ffuContosoTestOEMInput.xml "%WPDKCONTENTROOT%\MSPackages"
MobileCustomizations.xml 10.0.0.1
This command will build an image that will be called TestFlash.ffu.
Note This command assumes you've gone through the rest of the walkthroughs in this section. For more
information about the command-line syntax for ImgGen.cmd, see Using ImgGen.cmd to generate the image
in Build a mobile image using ImgGen.cmd.
Once the image is built, you'll need to sign it so it can be flashed to a mobile device.
Sign a mobile image
6/6/2017 • 1 min to read • Edit Online
You need to sign a mobile image before you can deploy it to a device. For more information about signing images,
see Sign a full flash update (FFU) image.
Before you start, make sure you followed the steps in Step 5: Install OEM test certs in Prepare for Windows mobile
development. If you haven't done this yet, do this first before proceeding with the steps for signing an image.
In this walkthrough, we'll focus on test signing the image manually. In addition to ImageSigner, we'll also use
Sign.cmd.
To test sign an image
1. Open a developer prompt with administrator rights in the directory that contains the output from the image
generation process.
2. Extract the catalog of the unsigned FFU file by running the following command:
ImageSigner GETCATALOG TestFlash.ffu TestFlash.cat
3. Sign the catalog using the /pk option. There are two parts to this step:
Set SIGN_OEM=1
Sign.cmd /pk TestFlash.cat
4. Sign the FFU with the signed catalog file using ImageSigner.
ImageSigner SIGN TestFlash.ffu TestFlash.cat
Once the image is signed, you're ready to flash the image to your mobile device.
Flash an image to a mobile device
6/6/2017 • 1 min to read • Edit Online
Flashing is the process of getting a mobile image into a mobile device. Each manufacturer has different techniques
and tooling that they'll use to manufacture and service a Windows mobile device and this means that each OEM
needs to determine which flashing and manufacturing process works best for them. For more information, see
Flashing tools.
In this walkthrough, we'll use ffutool.exe, which is installed as part of the Windows ADK, to flash the image to a
mobile device. For more information about flashing and to learn more about what you need to get your device
ready for flashing, see Use the flashing tools provided by Microsoft.
To flash an image
1. Boot the device into FFU flashing mode while it is connected to the host computer.
If you didn't include the LABIMAGE optional feature when generating your test image, you can force the
device into FFU flashing mode manually by pressing and releasing the power button to boot the device and
then immediate pressing and holding the volume up button. However, note that this option is only available
if an FFU has been initially flashed to the device.
2. Open a command prompt with administrator rights.
3. Run ffutool.exe from the command line to flash the image.
ffutool -flash TestFlash.ffu
It will take a few minutes for the image to be fully flashed to the device. Once flashing is done, go through device
setup and verify that your customizations appear as part of the image.
Part 2: Mobile deployment using Windows
Provisioning
6/6/2017 • 1 min to read • Edit Online
In this section, we'll go through the process of customizing and building a mobile image using the Windows
Imaging and Configuration Designer (ICD). Windows ICD provides a hybrid method for customizing and building a
mobile image because it lets you use both a Windows Provisioning answer file (WPAF) to configure the runtime
settings, enterprise policies, and enrollment settings available in Windows Provisioning, and a Managed Centralized
Settings Framework (MCSF) customization answer file (CAF) to fully customize the device hardware and
connectivity settings, preload apps, and add assets such as ringtones and localized strings.
Use the Windows ICD CLI to customize and build a mobile image
This method uses the Windows ICD CLI to build a customized mobile image.
Legacy: Use the Windows ICD UI to customize and build a mobile image
Note, this method is not supported in Windows 10, version 1607.
Requirements
Before proceeding with either of the walkthroughs, you must first complete the steps in Prepare for Windows
mobile development and Configure the Start layout. Windows Provisioning/Windows ICD understands MCSF CAF
so if you want to learn how to create a CAF, see Configure customization settings.
Use the Windows ICD UI to customize and build a
mobile image
6/6/2017 • 8 min to read • Edit Online
You can use the Windows Imaging and Configuration Designer (ICD) UI to create a new Windows 10 Mobile image
and customize it by adding settings and some assets.
Note: This method is not supported in Windows 10, version 1607.
This imaging method requires a pre-installed OS kit so you must have all the necessary Microsoft OS packages
and feature manifest files in your default install path. A configuration data file (BSP.config.xml), which contains
information about the hardware component packages for your board support package (BSP), is also required. For
the BSP.config.xml file, you can:
Use the BSP.config.xml file you downloaded as part of the BSP kit, or,
Generate your own BSP.config.xml by running the BSP kit configuration tools from the SoC vendor and
selecting your component drivers.
You can use the Windows Imaging and Configuration Designer (ICD) command-line interface (CLI) to generate a
new Windows 10 Mobile image.
This imaging method requires a pre-installed OS kit so you must have all the necessary Microsoft OS packages and
feature manifest files in your default install path. You also need either a BSP.config.xml file, which contains
information about the hardware component packages for your board support package (BSP) or you can use an
OEMInput.xml file.
If you're using a BSP.config.xml file, you can:
Use the BSP.config.xml file you downloaded as part of the BSP kit, or,
Generate your own BSP.config.xml by running the BSP kit configuration tools from the SoC vendor and
selecting your component drivers.
3. Edit the customizations.xml file and create a Targets section to describe the conditions that will handle your
multivariant settings.
The following example shows the customizations.xml, which has been modified to include the conditions
MCC and MNC. For parity, the example uses the same fictitious IDs and conditions that were used in Create
an MCSF customization answer file section in Configure customization settings.
<?xml version="1.0" encoding="utf-8"?>
<WindowsCustomizations>
<PackageConfig xmlns="urn:schemas-Microsoft-com:Windows-ICD-Package-Config.v1.0">
<ID>{239b9121-9f26-42db-8ae2-0d62989caa66}</ID>
<Name>Contoso_ppkg</Name>
<Version>1.0</Version>
<OwnerType>OEM</OwnerType>
<Rank>0</Rank>
</PackageConfig>
<Settings xmlns="urn:schemas-microsoft-com:windows-provisioning">
<Customizations>
<Common>
<Policies>
<DeviceLock>
<MaxInactivityTimeDeviceLock>15</MaxInactivityTimeDeviceLock>
<ScreenTimeoutWhileLocked>15</ScreenTimeoutWhileLocked>
</DeviceLock>
</Policies>
<Start>
<StartLayout>C:\Contoso\Customizations\LayoutModification1.xml</StartLayout>
</Start>
</Common>
<Targets>
<Target Id="Id_PhoneCo">
<TargetState>
<Condition Name="MCC" Value="410" />
<Condition Name="MNC" Value="510" />
</TargetState>
</Target>
<Target Id="Id_Fabrikam">
<TargetState>
<Condition Name="MCC" Value="310" />
<Condition Name="MNC" Value="610" />
</TargetState>
</Target>
</Targets>
</Customizations>
</Settings>
</WindowsCustomizations>
5. Move compliant settings from the Common section to the Variant section.
Note Settings that reside in the Common section are applied unconditionally on every triggering event.
In the following example, we used the `DeviceLock/MaxInactivity` policy under ThePhoneCompany variant while
the `DeviceLock/ScreenTimeoutWhileLocked` policy was moved under the Fabrikam variant.
```XML
<?xml version="1.0" encoding="utf-8"?>
<WindowsCustomizations>
<PackageConfig xmlns="urn:schemas-Microsoft-com:Windows-ICD-Package-Config.v1.0">
<ID>{239b9121-9f26-42db-8ae2-0d62989caa66}</ID>
<Name>Contoso_ppkg</Name>
<Version>1.0</Version>
<OwnerType>OEM</OwnerType>
<Rank>0</Rank>
</PackageConfig>
<Settings xmlns="urn:schemas-microsoft-com:windows-provisioning">
<Customizations>
<Common>
<Start>
<StartLayout>C:\Contoso\Customizations\LayoutModification1.xml</StartLayout>
</Start>
</Common>
<Targets>
<Target Id="Id_PhoneCo">
<TargetState>
<Condition Name="MCC" Value="410" />
<Condition Name="MNC" Value="510" />
</TargetState>
</Target>
<Target Id="Id_Fabrikam">
<TargetState>
<Condition Name="MCC" Value="310" />
<Condition Name="MNC" Value="610" />
</TargetState>
</Target>
</Targets>
<Variant Name="ThePhoneCompany">
<TargetRefs>
<TargetRef Id="Id_PhoneCo" />
</TargetRefs>
<Policies>
<DeviceLock>
<MaxInactivityTimeDeviceLock>15</MaxInactivityTimeDeviceLock>
</DeviceLock>
</Policies>
</Variant>
<Variant Name="Fabrikam">
<TargetRefs>
<TargetRef Id="Id_Fabrikam" />
</TargetRefs>
<Policies>
<DeviceLock>
<ScreenTimeoutWhileLocked>15</ScreenTimeoutWhileLocked>
</DeviceLock>
</Policies>
</Variant>
</Customizations>
</Settings>
</WindowsCustomizations>
```
1. Save the updated customizations.xml file and note the path to this updated file. You will need the path as
one of the values when you get ready to build the image.
2. Use the Windows ICD command-line interface (CLI) to create a provisioning package using the updated
customizations.xml. For more information about how to build a provisioning package and a description of
the command switches and parameters, see To build a provisioning package in Use the Windows ICD
command-line interface.
For example:
In this example, the StoreFile corresponds to the location of the settings store that will be used to create the
package for the required Windows edition.
Note The provisioning package created during this step will contain the multivariant settings. You can use
this package either as a standalone package that you can apply to a Windows device, use it as the base when
starting another project, or use it as one of one of the inputs (/ProvisioningPackage) when building either
a Windows 10 for desktop editions (Home, Pro, Enterprise, and Education) image or Windows 10 Mobile
image.
Introduced in Windows 10 Mobile, manufacturing mode is a mode of the full operating system that can be used
for manufacturing-related tasks, such as component and support testing.
In Windows Phone 8.1, you had to flash the Microsoft Manufacturing Operating System (MMOS) to do
manufacturing tests and processes, such as test hardware, blow fuses, and provision security keys. Once the tests
were completed, you had to flash the full operating system. This added extra time on the manufacturing floor.
This new feature allows you to boot into a manufacturing mode of the full operating system (and do those
manufacturing steps) without having to flash an MMOS image.
Manufacturing profiles
A manufacturing profile defines settings that should be used when the operating system boots in manufacturing
mode. The device can have more than one manufacturing profile. A profile named Default is included with
Windows 10 Mobile. The default profile contains the settings for Microsoft components that let the device boot
into a minimal environment for Manufacturing Mode.
Manufacturing profiles are stored in the registry on the device in the following location:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ManufacturingMode You must create a
subkey for each manufacturing profile. Under the profile key, you can change the settings for some select
operating system components for when the system is booting in manufacturing mode. For example, you can alter
which services are started when this manufacturing profile is enabled. You can add your own services in the
Services subkey, as shown below. If you want to set all services to the same start type, you can use an * for the
service name. If the * wildcard is not used, all Win32 services that are not included in the manufacturing profile will
use their default start type.
Note The * wildcard only applies to Win32 services, excluding kernel-mode drivers.
The following example creates a manufacturing profile named CustomProfile, causes the service named
OEMFactoryTestService to automatically start, and all other Win32 services to demand start:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ManufacturingMode\CustomProfile]
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ManufacturingMode\CustomProfile\Services]
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ManufacturingMode\CustomProfile\Services\OEMFactoryTestSe
rvice]
"Start"=dword:00000002
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ManufacturingMode\CustomProfile\Services\*]
"Start"=dword:00000003
You can add manufacturing profiles to your device by using a package. For more info on creating packages, see
Creating packages . In some cases, you may need to create a custom profile. For example, perhaps you want to fine
tune what Microsoft services are running for performance or functionality reasons or perhaps you want to have
more than one manufacturing profile. When creating new custom profiles, you should start by copying the
provided default profile and customizing it to suit your needs.
For example, if you wanted to create a new custom profile for factory testing that is a copy of the default profile but
also starts your factory test service, it may look like this:
<Macros>
<Macro Id="MfgMode" Value="$(hklm.control)\ManufacturingMode" />
<Macro Id="CustomProfileServices" Value="$(MfgMode)\CustomProfile\Services" />
</Macros>
<Components>
<OSComponent>
<!-- Overrides copied from default profile -->
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\*">
<RegValue Name="Start" Type="REG_DWORD" Value="00000003" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\AccountProvSvc">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\adss">
<RegValue Name="Start" Type="REG_DWORD" Value="00000004" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\AudioSrv">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\BFE">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\BrokerInfrastructure">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\cellusermodeinterconnect">
<RegValue Name="Start" Type="REG_DWORD" Value="00000004" />
<RegValue Name="Start" Type="REG_DWORD" Value="00000004" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\DcomLaunch">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\DHCP">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\Fusion">
<RegValue Name="Start" Type="REG_DWORD" Value="00000004" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\KeepWifiOnSvc">
<RegValue Name="Start" Type="REG_DWORD" Value="00000003" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\LaunchAppSvc">
<RegValue Name="Start" Type="REG_DWORD" Value="00000004" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\MPSSvc">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\NETACT">
<RegValue Name="Start" Type="REG_DWORD" Value="00000004" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\nsi">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\Power">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\ProfSvc">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\RpcEptMapper">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\RpcSs">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\SamSs">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\SecMgr">
<RegKey KeyName="$(CustomProfileServices)\SecMgr">
<RegValue Name="Start" Type="REG_DWORD" Value="00000004" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\SirepSvc">
<RegValue Name="Start" Type="REG_DWORD" Value="00000004" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\SystemEventsBroker">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\TestSirepSvc">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
<!-- Custom overrides for OEM services -->
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\OEMFactoryTestService">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
</OSComponent>
</Components>
</Package>
You can then create the package by using pkggen.exe (included with the Windows Driver Kit):
You can also specify custom USBFN settings in a manufacturing profile that are only used when the device is in
manufacturing mode.
When the device is not in Manufacturing Mode, USBFN settings will still be read from the normal location. When
the device is in Manufacturing Mode and Manufacturing Mode-specific settings have been provided, the settings
are from a different location. If no settings have been provided in the active manufacturing profile, the settings will
be read from the normal location. This allows you to use different settings when the device is in manufacturing
mode versus when it is not.
Here's an example of a manufacturing profile package that specifies USBFN settings:
Value="28,00,00,00,00,01,04,00,01,00,00,00,00,00,00,00,00,01,4d,54,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00
,00,00,00,00,00"
/>
</RegKey>
<RegKey
KeyName="$(MfgModeUsbFn)\Interfaces\IpOverUsb"
>
<RegValue
Name="InterfaceDescriptor"
Type="REG_BINARY"
Value="09,04,00,00,02,FF,FF,FF,00,07,05,81,02,00,02,00,07,05,02,02,00,02,00"
/>
<RegValue
Name="InterfaceGuid"
Type="REG_SZ"
Value="{30613563-7df3-4afb-80e0-e8c427c7e9bf}"
/>
<RegValue
Name="MSOSExtendedPropertyDescriptor"
Type="REG_BINARY"
Value="74,01,00,00,00,01,05,00,05,00,84,00,00,00,01,00,00,00,28,00,44,00,65,00,76,00,69,00,63,00,65,00,49,00,6E
,00,74,00,65,00,72,00,66,00,61,00,63,00,65,00,47,00,55,00,49,00,44,00,00,00,4E,00,00,00,7B,00,32,00,36,00,66,00
,65,00,64,00,63,00,34,00,65,00,2D,00,36,00,61,00,63,00,33,00,2D,00,34,00,32,00,34,00,31,00,2D,00,39,00,65,00,34
,00,64,00,2D,00,65,00,33,00,64,00,34,00,62,00,32,00,63,00,35,00,63,00,35,00,33,00,34,00,7D,00,00,00,36,00,00,00
,04,00,00,00,24,00,44,00,65,00,76,00,69,00,63,00,65,00,49,00,64,00,6C,00,65,00,45,00,6E,00,61,00,62,00,6C,00,65
,00,64,00,00,00,04,00,00,00,01,00,00,00,34,00,00,00,04,00,00,00,22,00,44,00,65,00,66,00,61,00,75,00,6C,00,74,00
,49,00,64,00,6C,00,65,00,53,00,74,00,61,00,74,00,65,00,00,00,04,00,00,00,01,00,00,00,38,00,00,00,04,00,00,00,26
,00,44,00,65,00,66,00,61,00,75,00,6C,00,74,00,49,00,64,00,6C,00,65,00,54,00,69,00,6D,00,65,00,6F,00,75,00,74,00
,00,00,04,00,00,00,10,27,00,00,44,00,00,00,04,00,00,00,32,00,55,00,73,00,65,00,72,00,53,00,65,00,74,00,44,00,65
,00,76,00,69,00,63,00,65,00,49,00,64,00,6C,00,65,00,45,00,6E,00,61,00,62,00,6C,00,65,00,64,00,00,00,04,00,00,00
,01,00,00,00"
/>
</RegKey>
</RegKeys>
</OSComponent>
</Components>
</Package>
You can then create the package by using pkggen.exe (included with the Windows Driver Kit):
There may be cases where you want a service to be normally disabled but automatically run when the device is in
Manufacturing Mode. For example, your factory test suite would probably run in this configuration. You would set
your service start type to Disabled and then add a manufacturing profile override that makes your service auto-start
when using the appropriate manufacturing mode profile.
Here's an example manufacturing profile:
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="urn:Microsoft.WindowsPhone/PackageSchema.v8.00"
Owner="Contoso"
Component="MfgMode"
SubComponent="FactoryTest"
ReleaseType="Production"
OwnerType="OEM">
<Macros>
<Macro Id="MfgMode" Value="$(hklm.control)\ManufacturingMode" />
<Macro Id="CustomProfileServices" Value="$(MfgMode)\CustomProfile\Services" />
</Macros>
<Components>
<!-- Definition for the service -->
<Service
Name="FactoryService"
Start="Disabled"
Type="Win32OwnProcess"
ErrorControl="Ignore"
DisplayName="OEMFactoryTestService"
Description="A Sample OEM Factory Test Service">
<!-- Failure actions should reset once per day, for security reasons -->
<FailureActions ResetPeriod="86400">
<Action Type="RestartService" Delay="1000"/>
<Action Type="RestartService" Delay="1000"/>
<Action Type="RestartService" Delay="1000"/>
<!-- if it fails to start three times, services should just stop -->
<Action Type="None" Delay="0"/>
</FailureActions>
<RequiredCapabilities>
<!-- Needed to access and create RPC endpoints -->
<RequiredCapability CapId="ID_CAP_INTEROPSERVICES" />
</RequiredCapabilities>
</Service>
<OSComponent>
<!-- Set the factory test service to auto-start when the device is in Manufacturing Mode -->
<RegKeys>
<RegKey KeyName="$(CustomProfileServices)\OEMFactoryTestService">
<RegValue Name="Start" Type="REG_DWORD" Value="00000002" />
</RegKey>
</RegKeys>
</OSComponent>
</Components>
</Package>
Create a full operating system manufacturing profile
7/13/2017 • 1 min to read • Edit Online
When you boot into Manufacturing Mode, can you skip OOBE and preinstall apps to run your manufacturing tests.
Skipping OOBE can speed up manufacturing time.
To set this up, you add the apps that should be installed with the manufacturing profile. For more info about
manufacturing profiles, see Manufacturing Mode.
HKEY_LOCAL_MACHINE\System\ControlSet001\Control\ManufacturingMode\<Profile Name>\Apps\OobeInstall
Under the OOBEInstall registry key, you must create registry key (with REG_DWORD type) for each app. The name
of the registry key must match the filename of the app package.
For example, to add the Settings app to the manufacturing profile, you would add a registry key named
systemsettings.
Here are some things to consider when adding apps to a manufacturing profile:
The manufacturing profile must not disable any Windows services.
The value of the registry key is reserved. Only the registry key name is used.
The app can be a first or second party app, but the app package must be a part of the image.
The * wildcard can be used in the name of the app.
If you want the normal OOBE experience (with all apps installed), create a single registry key with the name of \*.
Find the name of the app
The name of the registry key must match the filename of the app package. You can get a list of the apps that are on
the device by running the following command on the device's drive root:
dir /S MPAP_*.provxml
MPAP_systemsettings_001.provxml
The part of the filename after MPAP_ and before _0xx.provxml is what you should use for the registry key name.
<Macros>
<Macro Id="MfgMode" Value="$(hklm.control)\ManufacturingMode" />
<Macro Id="CustomProfile" Value="$(MfgMode)\CustomProfile" />
</Macros>
<Components>
<OSComponent>
<RegKeys>
<RegKey KeyName="$(CustomProfile)\"/>
<RegKey KeyName="$(CustomProfile)\Services"/>
<RegKey KeyName="$(CustomProfile)\Apps"/>
<RegKey KeyName="$(CustomProfile)\Apps\OobeInstall">
<RegValue Name="FactoryTestOEMSample" Value="0" Type="REG_DWORD"/>
<RegValue Name="systemsettings" Value="0" Type="REG_DWORD"/>
</RegKey>
</RegKeys>
</OSComponent>
</Components>
</Package>
Detect Manufacturing Mode
7/13/2017 • 1 min to read • Edit Online
You can determine whether the device is in Manufacturing Mode or not by using either a kernel mode or user
mode API.
In kernel mode, a new API has been defined in wdm.h:
_IRQL_requires_max_(APC_LEVEL)
NTKERNELAPI
BOOLEAN
ExIsManufacturingModeEnabled (
VOID
);
NTSTATUS
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
...
ManufacturingModeEnabled = ExIsManufacturingModeEnabled();
...
}
NTSTATUS
DoManufacturingOperation(
VOID
)
{
if (ManufacturingModeEnabled == FALSE) {
return STATUS_NOT_SUPPORTED;
}
...
return STATUS_SUCCESS;
}
WINBASEAPI
BOOL
WINAPI
GetOsManufacturingMode(
_Out_ PBOOL pbEnabled
);
if (!GetOsManufacturingMode(&ManufacturingModeEnabled)) {
Error = GetLastError();
}
if ((Error != ERROR_SUCCESS) ||
(ManufacturingModeEnabled == FALSE)) {
return ERROR_NOT_SUPPORTED;
}
...
return ERROR_SUCCESS;
}
Enable or Disable Manufacturing Mode
7/13/2017 • 2 min to read • Edit Online
If you want to test Manufacturing Mode, you can enable it by using ffutool.exe or by using a BCD setting.
Note The recommended way to support manufacturing mode on shipping devices is to have the firmware support
the Boot mode management UEFI protocol. For more info on this protocol, see Boot mode management UEFI
protocol.
boot mode -- an integer that corresponds to the boot mode documented in EFI_BOOT_MODE_INFO
enumeration.
profile name -- the name of the manufacturing profile to enable. This is required when the boot mode is set to 1
and is ignored when the boot mode is set to 0.
The following example enables Manufacturing Mode and uses a manufacturing profile named CustomProfile:
The following example disables Manufacturing Mode, allowing the operating system to boot normally:
ffutool.exe -setBootMode 0
Or, you could start the device in Manufacturing Mode using a custom manufacturing profile named, CustomProfile,
by doing the following:
You can also enable it on an offline device that is plugged in and is in USB mass storage mode. For example:
bcdedit.exe /store "D:\EFIESP\efi\Microsoft\Boot\BCD" /set {default} mfgmode "default"
Note If you're using an older version of bcdedit.exe, you might have to use custom:22000140 instead of
mfgmode as the BCD setting name.
<Element>
<DataType>
<WellKnownType>Manufacturing Mode</WellKnownType>
</DataType>
<ValueType>
<StringValue>Default</StringValue>
</ValueType>
</Element>
</Elements>
</Object>
</Objects>
</BootConfigurationDatabase>
<Components>
<BCDStore Source=".\exampleBcd.bcd.xml"/>
</Components>
</Package>
Note There is a Partition attribute defining that these BCD entries need to apply to the EFIESP partition. This should
be updated to be the partition where the BCD store for your device resides. If this is different from the partition
where the main operating system resides, other operations such as adding files and registry keys to the main
operating system partition cannot be done from the same package.
To create the package, you can use pkggen.exe (included with the Windows Driver Kit):
pkggen.exe exampleBcd.pkg.xml /config:pkggen.cfg.xml
Optional features for Manufacturing Mode
6/6/2017 • 1 min to read • Edit Online
The following features can be used with devices running in Manufacturing Mode.
Note All optional features included with Windows 10 Mobile can be used, too. For more info about the other
optional features, see Optional features for building images.
FEATURE DESCRIPTION
The boot mode management protocol is used to determine which boot mode the operating system should use
when it starts.
EFI_BOOT_MODE_MGMT_PROTOCOL
This section provides a detailed description of the EFI_BOOT_MODE_MGMT_PROTOCOL.
GUID
#define EFI_BOOT_MODE_MGMT_PROTOCOL_GUID \
{ 0xBE464946, 0x9787, 0x4FEB, { 0xBD, 0x71, 0x14, 0xC1, 0xC5, 0x2D, 0x69, 0xD1 } }
Revision number
Members
Revision
The revision to which the EFI_BOOT_MODE_MGMT_PROTOCOL adheres. All future revisions must be backward
compatible. If a future version is not backward compatible, a different GUID must be used.
GetBootModeInfo
Determines the boot mode which the operating system should use when it starts. See
EFI_BOOT_MODE_MGMT_PROTOCOL.GetBootModeInfo
SetBootModeInfo
Specifies the boot mode the operating system should use when it starts, including an optional profile name. See
EFI_BOOT_MODE_MGMT_PROTOCOL.SetBootModeInfo
Requirements
Header: User generated
Related topics
Manufacturing Mode
EFI_BOOT_MODE_INFO enumeration
7/13/2017 • 1 min to read • Edit Online
Defines the possible boot modes that the operating system can use when it starts.
Syntax
typedef enum _EFI_OS_BOOT_MODE {
EfiOsBootModeFullOs = 0,
EfiOsBootModeManufacturingOs = 1
EfiOsBootModeMax
} EFI_OS_BOOT_MODE, *PEFI_OS_BOOT_MODE;
Constants
EfiOsBootModeFullOs
The device should boot normally into the operating system.
EfiOsBootModeManufacturingOs
The device is in manufacturing mode.
Related topics
Boot mode management UEFI protocol
EFI_BOOT_MODE_MGMT_PROTOCOL.GetBootModeInfo
7/13/2017 • 1 min to read • Edit Online
This function is used to retrieve the boot mode and optional profile name from the UEFI firmware.
typedef EFI_STATUS
(EFIAPI *EFI_GET_BOOT_MODE_INFO)(
IN struct _EFI_BOOT_MODE_MGMT_PROTOCOL *This,
OUT EFI_OS_BOOT_MODE *BootMode,
IN OUT UINT32 *ProfileNameElements,
OUT CHAR16 *ProfileName
);
Parameters
This
[in] A pointer to the EFI_BOOT_MODE_MGMT_PROTOCOL instance.
BootMode
[out] A pointer to the enumeration that holds the boot mode of the device.
ProfileNameElements
[in] [out] A pointer to a UINT32 value that receives the number of characters in the profile name.
ProfileName
[out] A pointer to the name of the current profile.
Return values
Returns one of the following status codes:
EFI_SUCCESS Success
Requirements
Header: User generated
Related topics
Boot mode management UEFI protocol
EFI_BOOT_MODE_MGMT_PROTOCOL.SetBootModeInfo
7/13/2017 • 1 min to read • Edit Online
This function supplies a boot mode and optional profile name to the firmware to use on subsequent boots.
typedef EFI_STATUS
(EFIAPI *EFI_SET_BOOT_MODE_INFO)(
IN struct _EFI_BOOT_MODE_MGMT_PROTOCOL *This,
IN EFI_OS_BOOT_MODE *BootMode,
IN UINT32 *ProfileNameElements OPTIONAL,
IN CHAR16 *ProfileName OPTIONAL
);
Parameters
This
[in] A pointer to the EFI_BOOT_MODE_MGMT_PROTOCOL instance.
BootMode
[in] A pointer to the enumeration that holds the boot mode of the device.
ProfileNameElements
[in] A pointer to a UINT32 value of the number of characters in the profile name to set.
ProfileName
[in] A pointer to the name of the boot mode profile to set.
Return values
Returns one of the following status codes:
EFI_SUCCESS Success
Requirements
Header: User generated
Related topics
Boot mode management UEFI protocol
Microsoft Manufacturing OS
7/13/2017 • 2 min to read • Edit Online
Microsoft Manufacturing OS (MMOS), an optimized configuration of the operating system, facilitates efficient
manufacturing. MMOS is intended to provide the following capabilities:
Fast boot time resulting from a smaller image that contains only the code necessary to support
manufacturing test execution. The smaller OS image can be flashed quickly, accelerating the manufacturing
process.
The ability to create an OEM-customized MMOS image that includes unique drivers and test applications.
Support for OEM-developed component-level testing, in addition to full-function quality and calibration
testing.
Access to low-level native APIs for direct testing of phone hardware components.
The ability to create a mechanism to remotely control the test application and retrieve test logs over a USB
communication channel.
No dependency on display or touch hardware, to allow for headless operation.
The ability to directly boot into MMOS in a manufacturing environment.
Automated launch of OEM test applications when MMOS is booted.
The ability to write to the DPP partition to store unique, per-phone data.
Battery charging is supported in both UEFI and MMOS. It is set using a feature setting, so partners can turn
it on and off as desired. For more info, see MMOS image definition.
<Components>
<Service
Name="SampleMMOSSvc"
Start="Auto"
…
Related topics
Develop MMOS test applications
MMOS image definition
7/13/2017 • 7 min to read • Edit Online
This section provides instructions for creating Windows 10 Mobile MMOS images. This process is similar to the process for
creating the primary OS image.
FEATURE DESCRIPTION
ENABLE_BOOT_KEYS_TEST Enables a boot menu that is launched by pressing and holding the
power button. Use the Volume key to navigate and the Camera
key to select. This feature is mutually exclusive with
ENABLE_BOOT_KEYS_RETAIL.
LABIMAGE This feature causes the device to enter the FFU download mode
automatically when the device is booted. For more info, see Use
the flashing tools provided by Microsoft.
MFGTSHELL Enables TShell in MMOS and manufacturing mode. If you use this,
you need to set the TestSirepServer service to auto in your
manufacturing profile.
FEATURE DESCRIPTION
OPTIMIZED_BOOT Modifies the behavior of the OS boot process to start some system
processes and services before all device drivers are started.
Enabling this feature may decrease boot time, but it may also cause
regressions in boot behavior in some scenarios.
BOOTKEYACTIONS_RETAIL This feature enables a set of button actions for use in retail devices.
Important
The device platform validation for flashing must not be disabled
in retail images.
PERF_TRACING_TOOLS Contains tools for doing performance analysis, such as tools for
stopping and merging ETL tracing.
Debug features
Use the following settings to specify the transport that is used for debugging. If a debugging feature is not specified, debugging will
not be enabled in MMOS.
FEATURE DESCRIPTION
KDNETUSB_ON Includes all kernel debugger transports and enables KDNET over
USB.
Note
Do not include either KDUSB_ON or KDNETUSB_ON if you need to
enable MTP or IP over USB in the image. If the kernel debugger is
enabled in the image and the debug transports are used to
connect to the phone, the kernel debugger has exclusive use of
the USB port and prevents MTP and IP over USB from working.
KDSERIAL_ON Includes all kernel debugger transports and enables KDSERIAL with
the following settings: 115200 Baud, 8 bit, no parity.
KD Includes all kernel debugger transports in the image, but does not
enable the kernel debugger.
MFGCRASHDUMPSUPPORT This feature enables offline crash dump functionality by using the
wpcrdmp method for MMOS images. When the device crashes, it
activates wpcrdmp and saves a dump of the memory and SOC
subsystems to the disk for an offline investigation.
FEATURE DESCRIPTION
MWDBGSRV This feature adds support for the user mode debug server.
FEATURE DESCRIPTION
DUMPSIZE512MB Specifies a pre-allocated crash dump file size of 592 MB. This is
intended for a phone with 512 MB of memory.
DUMPSIZE1G Specifies a pre-allocated crash dump file size of 1104 MB. This is
intended for a phone with 1024 MB of memory.
DUMPSIZE2G Specifies a pre-allocated crash dump file size of 2128 MB. This is
intended for a phone with 2048 MB of memory.
Dump data storage location - The next two settings control if crash
dump data is stored on eMMC or if crash dump data is stored on
an SD card. Only one of these settings can be selected at a time.
These two features must only be used with the Test, Health and
Selfhost image types. These features must not be used with retail
images.
MSVCRT_DEBUG This feature adds support for explicit linking of debug c-runtime
libs by including msvcp120d.dll and msvcr120d.dll in the image.
For more information, see this topic on MSDN: CRT Library
Features.
MWDBGSRV This feature adds support for the user mode debug server.
TELEMETRYONSDCARD This feature enables temporary storage of debugging logs and files
on the SD card. This feature is only appropriate for test/self-host
images and only on devices with less than 8 GB of free space of
primary storage.
FEATURE DESCRIPTION
ENABLE_BOOT_KEYS_RETAIL Enables a set of buttons on the phone for use in retail device. This
feature is mutually exclusive with ENABLE_BOOT_KEYS_TEST (see
the previous table).
ENABLE_USB_COMPOSITE Enables the systems on a chip (SoC) provided composite USB stack
in MMOS.
UEFI charging must be either disabled or enabled for MMOS to work. Only one of these options can be set at a time.
There are additional features that are defined in other image types of the operating system that are not supported in MMOS. This
list is not exhaustive, but it provides examples of features that are not supported in the manufacturing or retail environments:
TESTINFRASTRUCTURE
IMGFAKELED
LABIMAGE
LOCATIONFRAMEWORKAPP
Configuring the MMOS MfgOEMInput.xml file
1. Open the sample MfgOEMInput.xml file using a text editor. By default, this file is installed to
%WPDKCONTENTROOT%\OEMInputSamples\8960Fluid.
2. Add needed MMOS features as described previously.
3. Add any required OEM packages to the file.
4. Locate the Product element and confirm that it is set to " Manufacturing OS ".
You can optionally update the description to record information about the OS image.
5. Locate the SOC and Device elements and change them as necessary.
6. Add %WPDKCONTENTROOT%\Tools\bin\i386 to your environment Path variable.
Flash MMOS to the device
7/13/2017 • 1 min to read • Edit Online
After the MMOS image definition is complete, the image can be flashed to the device
1. Flashing on the host side is accomplished through a connection established with WinUSB, the Microsoft
generic USB device driver. The necessary drivers are included by default in Windows 8 and Windows 10. In
Windows 7, the necessary drivers can be installed from Windows Update. To configure a Windows 7
computer to install the necessary drivers, click Start, type “Device Installation Settings”, select Yes, do this
automatically (recommended), and then click Save Changes.
2. Put the device in flashing mode by holding the volume up button while powering up the device. After the
device is in flashing mode, connect the USB cable to your computer.
3. Verify that the device is detected in Device Manager as WinUsb Device.
4. To be able to use the ffutool, sign, and ImageSigner tools, add %WPDKCONTENTROOT%\Tools\bin\i386 to
your environment Path variable.
5. Prior to flashing the FFU file to the device, you must sign the FFU file using the following syntax in the
command prompt. The cat file is generated with the FFU, when using the ImgGen tool.
For example:
c:\>sign MMOS.cat
c:\>ImageSigner SIGN MMOS.ffu MMOS.cat
6. At a command prompt, run the ffutool command, which uses the following syntax:
For example:
8. The device will reboot into MMOS. The display on the device will show a small rotating graphic.
Working with WIM MMOS images
7/13/2017 • 2 min to read • Edit Online
You can temporarily copy a WIM (Windows Imaging) image over to a device and then boot to that image running
in volatile RAM memory. This capability can be used to service the device using MMOS. For more info about
MMOS, see Microsoft Manufacturing OS. The advantage of using this approach for servicing is that you will not
need to reserve space on the retail OS for code that is only used in servicing. Minimizing the space that is
consumed by the OS is an important consideration in low cost devices.
Important
Only MMOS test images are currently supported. Retail signing is not currently supported.
<Microsoft>
<Feature>MOBILECOREBOOTSH</Feature>
<Feature>ENABLE_BOOT_KEYS_TEST</Feature>
<Feature>ENABLE_IP_OVER_USB</Feature>
</Microsoft>
You may want to add additional features such as battery charging (ENABLE_MMOS_CHARGING) depending
on your needs. For additional info about the MMOS features, see MMOS image definition.
Do not include packages that access other partitions on the device. Because the WIM is loaded and running
in RAM, it is not able to access other partitions and the OS cannot contain packages that reference other
partitions.
After you complete the steps in the preceding topics, use the ImgToWIM command to convert the signed FFU
image to a WIM image. The ImgToWim executable is located in %WPDKCONTENTROOT%\Tools\bin\i386. The
usage is summarized here.
When you enter the ImgToWim command, you should see output that is similar to the following.
C:\TestWIM>ImgToWim MMOS.ffu MMOSWim.wim
Reading the image file: MMOS.ffu
ETW Log Path: C:\Users\USER1\AppData\Local\Temp\storage_session_1210.etl
OS Version: Microsoft Windows NT 6.2.9200.0
OpenDiskInternal: Creating empty virtual disk.
No mounted WP disks found.
Storage Service: Created a new image in 0.7 seconds.
AddAccessPath: Mount point for volume MainOS: C:\Users\USER1\AppData\Local\Temp
\oji20cvi.mq5.mnt\.
Capturing 'MainOS'...
WIM creation complete.
DismountFullFlashImage:[2.87] Cleaning up temporary paths.
CleanupTemporaryPaths: Cleaning up temporary path C:\Users\USER1\AppData\Local\
Temp\oji20cvi.mq5.mnt\.
Storage Service: Dismounting the image in 2.9 seconds.
To boot the device from a WIM image, complete the following steps.
1. Set up the PC side flashing tools.
2. Put the device in flashing mode by holding the volume up button while powering up the device. After the
device is in flashing mode, connect the USB cable to your computer.
3. Use the FFUTool command with the -WIM option to boot a device from a WIM image. It is located in
%WPDKCONTENTROOT%\Tools\bin\i386. When you enter the FFUTool -WIM command, you should see
output that is similar to the following.
The ffutool sends a WIM opcode to the device, along with information about the size of the image. Next a RAM
buffer is allocated that will hold image. The ffutool then transfers the WIM image to the device. Once it’s fully
transferred, the device boots into the WIM image in memory.
Note
The current MMOS WIM images may not display the rotating disc graphic but MMOS is still functional.
Creating a secure MMOS WIM image
7/13/2017 • 4 min to read • Edit Online
You can use the SecWimTool to create a secure WIM image that can be used to service retail devices.
Before you can create a secure WIM, you must first create the WIM image itself. For info about how to create a WIM
image, see Working with WIM MMOS images.
To use the MMOS WIM in retail, it will need to be signed using retail certificates. More info will be provided in a
later release of this documentation about how to work with the retail images.
For the secure WIM to run on the device, the signing certificates must match the certificates in the Platform Key (PK)
that is provisioned on the device.
2. The platform ID must be used to create the WIM for a specific platform. The platform ID is set in using a
device platform XML file.
You can display the platform ID using the ffutool command with the -list option.
Build the unsigned secure WIM targeted for a specific platform using the -platform command option as
shown here. No output is returned if the command completes successfully.
3. Extract the catalog from the secure WIM image. No output is returned if the command completes
successfully.
4. You can sign the WIM with test certificates to test the WIM process. For a retail secure WIM, the FFU must be
signed by Microsoft.
Important
Information about signing with the final retail certificates will be provided in a later release of the
documentation.
To sign the catalog using the test image certificate, use this command.
5. Replace the existing catalog with a signed catalog. No output is returned if the command completes
successfully.
Found device:
Name: Contoso.MSM8X0X.BD301_ATT.3.2.1
ID: 00000011-f151-a509-0000-FF0000000000
Booting WIM: MMOSwim.secwim
WIM transfer completed in 26.550073 seconds.
To build a secure WIM targeted for a specific device, use the –serial command option as shown here.
Troubleshooting
When you flash the image if the PK doesn’t match, you will receive this message.
An FFU error occurred: Device returned WIM boot failure status code 0x80000004.
-build - Packs the specified WIM into a secwim that is suitable for signing and transferring to a retail device.
Platform - Includes targeting information for a specific platform type that the WIM is intended for. This
option must be used to target the WIM for a specific platform.
Serial - Includes the serial number of a specific device the WIM will be used on. This option can be used when
including tools that should only be used for a specific device.
SecWimTool -build <WIM> <output file> [-platform <ID>] [-serial <serial number>]
-extractcat - Retrieves the catalog from the secure WIM file, and writes it either to the output file (if specified) or
stdout.
-replacecat - Replaces the catalog in the specified .secwim with the contents of the new catalog.
-? - Displays command line help. Use secwimtool -<command> -? for command level help.
Related topics
Working with WIM MMOS images
Develop MMOS test applications
7/13/2017 • 1 min to read • Edit Online
#include <stdio.h>
#include <Windows.h>
int main()
{
int i = 0;
for(;;)
{
wprintf(L"Test");
Sleep(500);
if (i == 12)
{
wprintf(L"Done");
break;
}
i++;
}
return 0;
}
sign.cmd ApplicationForDrivers.exe
6. To test your app, copy it to the device in the C:\Data\test directory by using FTP and run it via Telnet. For
more info, see Deploy and test a user-mode test application in MMOS.
Libraries in MMOS
Adding a lib in MMOS is similar to adding a lib in the production OS. Currently, this default lib location for the kit
is configured in Visual Studio.
$(WPDKInstallDir)lib\$(KitOs)\wp_um\$(Platform)
$(WPDKInstallDir)Tools\WPE\CRT\lib\$(Platform)
To add a lib in Visual Studio, select Project > Properties > Configuration Properties > VC++ Directories >
Include Directories. To use the MMOS libraries, append the following directory to the path.
$(WPDKContentRoot)include\mmos
Add the arm directory. In Visual Studio, select Project > Properties > Configuration Properties > Linker >
General > Additional Library Directories. To use the MMOS libraries, append the following directories to the
path.
$(WPDKContentRoot)lib\win8\mmos\arm
Security in MMOS
In development environments, user-mode test binaries can be test signed (not production signed). Use the process
described in Sign binaries and packages to test sign the binaries.
If the test binaries are not signed and code integrity checking is active as it normally is, you will receive an error
message similar to the following in the debug window.
* This is not a failure in CI, but a problem with the failing binary.
* Please contact the binary owner for getting the binary correctly signed.
Deploy and test a user-mode test application in
MMOS
7/13/2017 • 3 min to read • Edit Online
To copy files to an MMOS image and run programs, you can use FTP and Telnet over a Virtual Ethernet connection.
Important
The USB drivers and protocols described here must not be used in manufacturing or retail servicing. They are
provided as a convenience for engineering bring-up.
Note the 12-digit device MAC address from the VirtEth console window and use it in the next step to
determine the device's TCP/IP address.
2. Open a new command-prompt window and type arp -a. Output similar to the following will be displayed.
C:\>arp -a
Use the IP address that is associated with the device MAC address to connect to the device via FTP and Telnet.
Debugging in MMOS
To enable debugger support in MMOS, both communication and OS settings must be modified.
Enabling debug support
To enable debugging support in MMOS, specify the following internal optional feature in the MfgOEMInput.xml
file.
<Microsoft>
...
<Feature>KDNETUSB_ON</Feature>
...
</Microsoft>
This adds the required packages to the MMOS image. For more info about working with the MfgOEMInput.xml file,
see MMOS image definition.
Enabling communication settings
To enable the OS, communication settings must be changed after the image is flashed.
Establishing the debug connection
To connect to MMOS for debugging, use WinDbg to specify the key and port that you configured earlier by using
BCDEdit.
windbg.exe -k net:Port=50000,Key=1.2.3.4
Determine if MMOS is running
6/6/2017 • 1 min to read • Edit Online
You can check to see if MMOS is running the same way that you check when running in Manufacturing Mode. For
more info, see Detect Manufacturing Mode.
Note You should not query the ManufacturingOS registry setting as this key is obsolete.
Manufacturing test environment supported APIs
6/6/2017 • 2 min to read • Edit Online
The manufacturing test environment (MTE) supports APIs and techniques that are designed for use only in
manufacturing. This section describes the specific libraries that are supported in MTE.
MMOS.Lib
MMOS.Lib provides a mirror interface to the Windows 8 mincore.lib. For general information about mincore.lib,
see Windows API sets.
The primary user-mode native APIs for use in MTE are defined in the MMOS library (.lib) files installed by the
Windows Driver Kit (WDK) as %WPDKCONTENTROOT%\Lib\ folder.
Supported APIs
The following sections provide a preview of the features that the provided MMOS APIs allow for testing. Additional
information about the MMOS supported APIs will be provided in a later release of this documentation. The API
header sub-folders and Windows SDK headers are located in the “%ProgramFiles(x86)%\Windows
Kits\10\include\” folder. These APIs can be used in user-mode applications for MMOS. For more info on creating
and running MMOS applications, see the Develop MMOS test applications topic.
Microphone, audio and audio routing
The audio and audio routing APIs allow test apps to test the audio and audio routing capabilities. Some scenarios
that test apps can test are playing frequencies on each of the different audio end-points. The microphone can be
tested using the audio APIs. The following header files contain the audio and audio routing APIs.
Mmos\audiotunerapi.h
Mmos\audiotunerdef.h
Mmos\audiotunerprop.h
Km\ksmedia_phone.h
Um\initguid.h
Um\avrt.h (Windows SDK)
ctime.h (Windows SDK)
Um\audioclient.h (Windows SDK)
Um\mmdeviceapi.h (Windows SDK)
Um\functiondiscoverykeys.h (Windows SDK)
Display
You can use the Direct3D to display information. For general info, see this MSDN link Direct3D 11 Graphics. The
following header files contain the D3D APIs.
Um\D3DWrapper.h
Um\D3D11.h (Windows SDK)
Camera
You can use the Media Foundation CaptureEngine APIs to work with the camera. For general info about working
with Media Foundation, see Media Foundation Programming Reference on MSDN. For information about the
IMFCaptureEngine interface, see this MSDN topic, IMFCaptureEngine interface. The following header files contain
interfaces that may be useful for camera testing.
Um\mfapi.h
Um\mfobjects.h
Um\mfidl.h
Um\mfreadwrite.h
Um\mfcaptureengine.h
Um\wincodec.h
Sensors
For more information about sensors and APIs that are used for testing in MMOS, see the Sensors topic.
LED
The LED APIs allow test apps to test the notification LED by calling different IOCTLs to cause the notification LED to
turn on, turn off, or blink. The following header file contains the LED APIs.
Mmos\hwn.h
SD Card
The SD card APIs allow test apps to test the SD card driver by calling different IOCTLs to test cases such as reading
and writing to the card. The following header file contains the SD card APIs.
Um\sffdisk.h
Touch
For more info about testing the Touch controller, see the Access the touch interface in MMOS topic. The following
header files contain the touch APIs.
Um\InputDriverRawSamples.h
Um\WinPhoneInput.h
Vibrator
The vibrator APIs allow test apps to test the vibrator on the device by calling different IOCTLs. The IOCTLs allow the
apps to test various speeds and periods of the vibrator driver on the device. The following header file contains the
vibrator APIs.
Mmos\hwn.h
Hardware buttons
For more information about hardware buttons, see the Hardware buttons topic. The following header file contains
the hardware button APIs.
UM\ntddkbd.h
FM radio
The FM radio APIs allow test apps to test the FM radio tuner on the phone by calling FM IOCTLs. The IOCTLs allow
apps to test various scenarios such as tuning to a frequency or seeking. The following header files contain the FM
radio APIs.
Mmos\audiotunerapi.h
Mmos\audiotunerprop.h
Wi-Fi
For more information about Wi-Fi testing APIs, see the Wi-Fi manufacturing API topic. The following header file
contains the Wi-Fi APIs.
Um\wifimte.h
Related topics
Calling SetScreenOff to enter connected standby
Manufacturing Mode Phone Call Testing APIs
7/19/2017 • 1 min to read • Edit Online
These APIs are used by phone manufacturers to test phone call functionality while the device is booted into
Manufacturing Mode.
In this section
TOPIC DESCRIPTION
MfgPhoneInitialize Initializes the phone system and the internal state of the
API implemented by DLL.
Parameters
SimSlot [in]
The SIM-based phone line to use.
DialNumber [in]
The phone number to dial.
Return value
S_OK is returned upon success and an error code is returned otherwise.
Requirements
DLL MFGPHONE.DLL
MfgPhoneEndCall function
6/6/2017 • 1 min to read • Edit Online
Parameters
SimSlot [in]
The SIM-based phone line whose call should be ended.
Return value
S_OK is returned upon success and an error code is returned otherwise.
Requirements
DLL MFGPHONE.DLL
MfgPhoneGetSimLineCount function
6/6/2017 • 1 min to read • Edit Online
Parameters
SimLineCount [out]
Pointer to a UINT that specifies the number of currently detected SIM slots. Both active and inactive SIM slots are
included in the count.
Return value
S_OK is returned upon success and an error code is returned otherwise.
Requirements
DLL MFGPHONE.DLL
MfgPhoneGetSimLineDetail function
6/6/2017 • 1 min to read • Edit Online
Retrieves a struct that contains the current details for a given SIM-based phone line.
MfgPhoneGetSimLineDetail is for phone manufacturers and can only be called in Manufacturing Mode.
Syntax
Parameters
SimSlot [in]
Specifies the SIM-based phone line.
SimLineDetail [out]
Pointer to a MFGPHONE_SIMLINEDETAIL struct that contains the current details for the SIM-based phone line
specified by SimSlot.
SimLineDetailSize [in]
Specifies the size of the SimLineDetail parameter.
RequiredSize [out]
Specifies the required size for the SimLineDetail parameter.
Return value
S_OK is returned upon success and an error code is returned otherwise.
Requirements
DLL MFGPHONE.DLL
MfgPhoneGetSpeaker function
6/6/2017 • 1 min to read • Edit Online
Returns a boolean indicating whether the phone speaker is being used, as opposed to the handset earphone.
MfgPhoneGetSpeaker is for phone manufacturers and can only be called in Manufacturing Mode.
Syntax
Parameters
pbSpeakerOn [out]
TRUE if the speaker is being used, otherwise FALSE.
Return value
S_OK is returned upon success and an error code is returned otherwise.
Requirements
DLL MFGPHONE.DLL
MfgPhoneInitialize function
6/6/2017 • 1 min to read • Edit Online
Initializes the phone system and the internal state of the API implemented by DLL.
MfgPhoneInitialize is for phone manufacturers and can only be called in Manufacturing Mode.
Syntax
Parameters
This function has no parameters.
Return value
S_OK is returned upon success and an error code is returned otherwise.
Requirements
DLL MFGPHONE.DLL
MfgPhoneSetSimLineEventNotifyCallback function
6/6/2017 • 1 min to read • Edit Online
Parameters
Callback [in]
The callback function to call when the event occurs.
Context [in]
The context.
Return value
S_OK is returned upon success and an error code is returned otherwise.
Requirements
DLL MFGPHONE.DLL
MfgPhoneSetSpeaker function
6/6/2017 • 1 min to read • Edit Online
Sets a value indicating whether the phone speaker should be used, as opposed to the handset earphone.
MfgPhoneSetSpeaker is for phone manufacturers and can only be called in Manufacturing Mode.
Syntax
Parameters
bSpeakerOn [in]
TRUE if the speaker should be used, otherwise false.
Return value
S_OK is returned upon success and an error code is returned otherwise.
Requirements
DLL MFGPHONE.DLL
MfgPhoneUninitialize function
6/6/2017 • 1 min to read • Edit Online
Uninitializes the phone system and the internal state of the API implemented by DLL.
MfgPhoneUninitialize is for phone manufacturers and can only be called in Manufacturing Mode.
Syntax
Parameters
This function has no parameters.
Return value
S_OK is returned upon success and an error code is returned otherwise.
Requirements
DLL MFGPHONE.DLL
MFGPHONE_CALLSTATUS enumeration
6/6/2017 • 1 min to read • Edit Online
Constants
MFGPHONE_CALLSTATUS_UNKNOWN
The call status is unknown.
MFGPHONE_CALLSTATUS_IDLE
The call status is idle.
MFGPHONE_CALLSTATUS_CALLING
The call status is calling.
MFGPHONE_CALLSTATUS_INCOMING
The call status is incoming.
MFGPHONE_CALLSTATUS_ACTIVE
The call status is active.
Requirements
Constants
MFGPHONE_LINESYSTEMTYPE_UNKNOWN
The line system type is unknown.
MFGPHONE_LINESYSTEMTYPE_GSM
The type of line system is GSM.
MFGPHONE_LINESYSTEMTYPE_CDMA
The type of line system is CDMA.
MFGPHONE_LINESYSTEMTYPE_IMS
The type of line system is IMS.
Requirements
Constants
MFGPHONE_REGISTRATIONSTATE_UNKNOWN
The registration state is not known.
MFGPHONE_REGISTRATIONSTATE_NOSIGNAL
There is no signal to detect the registration state.
MFGPHONE_REGISTRATIONSTATE_UNREGISTERED
The registration state is unregistered.
MFGPHONE_REGISTRATIONSTATE_REGISTERING
The registration state is registering.
MFGPHONE_REGISTRATIONSTATE_REGISTERED
The registration state is registered.
MFGPHONE_REGISTRATIONSTATE_DENIED
The registration state is denied.
Requirements
Provides information about a particular SIM-based phone line. This struct is retrieved via the
MfgPhoneGetSimLineDetail function.
MFGPHONE_SIMLINEDETAIL iis for phone manufacturers and can only be called in Manufacturing Mode.
Syntax
Members
SimSlot
The SIM-based phone line to which the details in this struct pertain.
SimState
An enum specifying the current state of the SIM-based phone line.
RegistrationState
An enum specifying the current registration state of the phone line.
NetworkName
WCHAR containing the name of the network.
LineSystemType
An enum specifying the line system type of the phone line.
SignalStrength
Unsigned Integer containing the signal strength of the phone line.
CallStatus
An enum specifying the call status of the phone line.
Requirements
Constants
MFGPHONE_SIMSTATE_UNKNOWN
The SIM state is unknown.
MFGPHONE_SIMSTATE_NONE
The SIM state is none. There is no SIM.
MFGPHONE_SIMSTATE_ACTIVE
The SIM state is active.
MFGPHONE_SIMSTATE_INVALID
The SIM state is invalid.
MFGPHONE_SIMSTATE_LOCKED
The SIM state is locked.
MFGPHONE_SIMSTATE_DISABLED
The SIM state is disabled.
Requirements
The touch controller output can be captured and used in MMOS with proper touch driver support. The touch
interface sample illustrates how you can gather touch coordinates in MMOS to implement manufacturing tests.
After the handle is successfully opened, the application loops until a touch contact point is received near the top-left
corner of the screen. The application reads and displays the coordinates and the associated touch contact ID.
#include "sample.h"
#include <cfgmgr32.h>
#include <strsafe.h>
int main()
{
HANDLE testDriver = INVALID_HANDLE_VALUE;
BOOL exit = FALSE;
INT32 i;
TouchInfo touchInfo = {0};
//
// Open an exclusive handle to the device to get raw samples
//
testDriver = CreateFile(
L"\\\\.\\TouchRaw0",
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (INVALID_HANDLE_VALUE == testDriver)
{
goto exit;
}
//
// Loop, printing touches to the debugger.
// Release in upper-left corner ends the test.
// Release in upper-left corner ends the test.
//
while (!exit)
{
DWORD touchInfoBytesRead = 0;
//
// Wait for data
//
if (!ReadFile(
testDriver,
&touchInfo,
sizeof(TouchInfo),
&touchInfoBytesRead,
NULL))
{
goto exit;
}
if (touchInfoBytesRead == 0)
{
goto exit;
}
//
// Print to debugger
//
for (i=0; i<touchInfo.ContactCount; i++)
{
WCHAR infoString[MAX_PATH] = {0};
StringCchPrintf(
infoString,
MAX_PATH,
L"%d: Contact ID %d, at (%d,%d) is %s\r\n",
GetTickCount(),
touchInfo.ContactArray[i].ContactID,
touchInfo.ContactArray[i].ScreenX,
touchInfo.ContactArray[i].ScreenY,
FLAGS_TO_STRING(touchInfo.ContactArray[i].Flags));
OutputDebugString(infoString);
}
//
// Look for program exit
//
for (i=0; i<touchInfo.ContactCount; i++)
{
if ((touchInfo.ContactArray[i].ScreenX < 50) &&
(touchInfo.ContactArray[i].ScreenY < 50) &&
(touchInfo.ContactArray[i].Flags & InputEventFlag_Up))
{
OutputDebugString(L"Touch below (50,50), quitting!\r\n");
exit = TRUE;
}
}
}
exit:
if (testDriver != INVALID_HANDLE_VALUE)
{
CloseHandle(testDriver);
}
return 0;
}
The application uses the TouchInfo and TouchContact data structures, which are defined in
%WPDKCONTENTROOT%\include\um\WinPhoneInput.h. The header code is shown here.
#pragma once
#include <windows.h>
#include <initguid.h>
#include <devguid.h>
//
// This device name is used to access raw touch samples from user mode.
//
enum InputEventFlag
{
InputEventFlag_None = 0x0000,
InputEventFlag_Down = 0x0001,
InputEventFlag_Move = 0x0002,
InputEventFlag_Hold = 0x0002,
InputEventFlag_Up = 0x0004,
InputEventFlag_Empty = 0x1000,
InputEventFlag_Invalid = 0x2000,
InputEventFlag_TestSync = 0x8000
};
#define FLAGS_TO_STRING(x) \
(x & InputEventFlag_Down) ? L"Down" : \
(x & InputEventFlag_Move) ? L"Move" : \
(x & InputEventFlag_Up) ? L"Up" : \
L"Unknown"
Calling the SetScreenOff function turns the screen and backlight off, which causes the phone to enter the
connected standby power state. This lower power state can be helpful for testing power usage.
Important
This function is for use only in the Microsoft Manufacturing OS.
Syntax
HRESULT SetScreenOff();
Parameters
None
Return Value
HRESULT
Remarks
There is not an equivalent function to return the device to a full power state.
Example
To use SetScreenOff, include the header and call without any parameters.
#include <ManufacturingConnectedStandbyControl.h>
SetScreenOff();
Requirements
Header: ManufacturingConnectedStandbyControl.h
Library: ManufacturingConnectedStandbyControl.lib
Resetting a device during manufacturing
6/6/2017 • 1 min to read • Edit Online
The topic provides information about resetting a device during the manufacturing process.
ResetPhoneEx
You can reset the device using the ResetPhoneEx API while preserving the following data.
Map data.
Runtime configuration data.
Preinstalled apps.
Wi-Fi manufacturing API
6/6/2017 • 1 min to read • Edit Online
As part of the manufacturing process, you must run tests to ensure that the components are integrated,
functioning, and calibrated properly, and that they meet all regulatory requirements.
The API members documented in this section are interfaces defined for IHVs to use to write tests applications for
the Wi-Fi chipset. This API set requires that the Wi-Fi driver conform to the driver OID specification.
This test API must only be used in manufacturing mode. For more info, see Determine if MMOS is running.
In this section
The following interfaces are defined for this API.
WlanMTEEnumAdapters
Returns the list of the adapters that are recognized by the Wi-Fi stack.
WlanMTEOpenHandle
Opens a handle to the driver based on the interface GUID specified and returns the handle to the caller.
WlanMTECloseHandle
Closes a handle to the driver previously opened by WlanMTEOpenHandle.
WlanMTERegisterCallbackHandler
Registers a handler that will be called whenever the driver invokes a callback for a manufacturing functionality
event.
WlanMTEDeRegisterCallbackHandler
Unregisters a callback handler so that it will no longer be called when a manufacturing-related functionality
event occurs.
WlanMTEGetVendorInfo
Requests vendor-specific information, such as the vendor ID and vendor description.
WlanMTEResetAdapter
Resets the Wi-Fi adapter.
WlanMTEQueryMacAddress
Queries the MAC address of the Wi-Fi adapter.
WlanMTEQueryPhyTypes
Queries the list of 802.11 PHY types configured on the adapter.
WlanMTEStartSelfTest
Starts a preconfigured set of self-tests.
WlanMTEQuerySelfTestResult
Queries the driver for the results of a previously requested self-test.
WlanMTERxSignal
Queries information about the received signal at a specific band and channel.
WlanMTETxSignal
Requests the driver to transmit a signal at the specified band and channel.
WlanMTEQueryADC
Requests the value of the transmitted signal when performed over an open loop.
WlanMTESetData
Requests that the driver write data to a specified location and offset from that location.
WlanMTEQueryData
Queries the driver for data at a specific location and offset from that location.
WlanMTESleep
Requests that the driver to go to sleep either for a specified time interval or indefinitely until an awake request is
sent.
WlanMTEAwake
Requests that the driver wake up from its current sleep state.
Related topics
Adding Wi-Fi manufacturing test support to the OID interface
WlanMTEEnumAdapters
7/13/2017 • 1 min to read • Edit Online
Returns the list of adapters that are recognized by the Wi-Fi stack.
Syntax
DWORD WlanMTEEnumAdapters(
__out_opt WLAN_MTE_ADAPTER_LIST **ppWlanAdapterList
);
Parameters
ppWlanAdapterList
[out] A list of detected Wi-Fi adapters.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS. Otherwise, the function returns a system error code.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTEOpenHandle
7/13/2017 • 1 min to read • Edit Online
Opens a handle on the driver based on the interface GUID specified and returns the handle to the caller.
Syntax
DWORD WlanMTEOpenHandle(
__in GUID *pAdapterGuid,
__out HANDLE *phAdapter
);
Parameters
pAdapterGuid
[in] A pointer to the GUID identifying the Wi-Fi adapter on which the handle is to be opened.
phAdapter
[out] A pointer to the Wi-Fi handle, if it was opened successfully.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails one of the system error codes is returned. The following table lists the error codes that may
be returned.
Remarks
The list of Wi-Fi interface GUIDs can be obtained by calling WlanMTEEnumAdapters.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTECloseHandle
7/13/2017 • 1 min to read • Edit Online
Syntax
DWORD WlanMTECloseHandle(
__in HANDLE hAdapter
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTERegisterCallbackHandler
7/13/2017 • 1 min to read • Edit Online
Registers a handler that will be called whenever the driver invokes a callback for a manufacturing functionality
event.
Syntax
DWORD WlanMTERegisterCallbackHandler(
__in HANDLE hAdapter,
__in WLAN_MTE_NOTIFICATION_CALLBACK Callback
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
Callback
[in] The handler function being registered by the application for manufacturing callbacks.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Remarks
The callback function has the following prototype:
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTEDeRegisterCallbackHandler
7/13/2017 • 1 min to read • Edit Online
Unregisters a callback handler so that it will no longer be called when a manufacturing-related functionality event
occurs.
Syntax
DWORD WlanMTEDeRegisterCallbackHandler(
__in HANDLE hAdapter
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
Remarks
The calling application must have previously registered a callback by calling WlanMTERegisterCallbackHandler
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTEGetVendorInfo
7/13/2017 • 1 min to read • Edit Online
Syntax
DWORD WlanMTEGetVendorInfo(
__in HANDLE hAdapter,
__out ULONG *puVendorId,
__in ULONG uOutBufLen,
__out_bcount(uOutBufLen) PUCHAR pucOutBuffer
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
puVendorId
[out] The vendor ID.
uOutBufLen
[in] The length of the buffer for retrieving the vendor description.
pucOutBuffer
[out] The buffer that will contain the vendor description string.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTEResetAdapter
7/13/2017 • 1 min to read • Edit Online
Resets the Wi-Fi adapter. The application can specify an optional callback and context handle to be invoked when
the operation is complete.
Syntax
DWORD WlanMTEResetAdapter(
__in HANDLE hAdapter,
__in DOT11_RESET_REQUEST *pDot11ResetRequest,
__in WLAN_MTE_RESET_CALLBACK ResetCallback,
__in PVOID pvContext
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
pDot11ResetRequest
[in] Information about the reset request. If the application requires the reset in order to update the MAC address, it
should specify either dot11_reset_type_mac or dot11_reset_type_phy_and_mac in order for the updated MAC
address to be written to the DPP. Note that the MAC address change will only be valid when the device has booted
in manufacturing mode.
ResetCallback
[in, optional] The callback handler to be invoked on reset completion.
pvContext
[in, optional] If the callback is specified, this context value is provided when the handler is called.
Remarks
The callback function for Wi-Fi reset adapter notifications has the following prototype:
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
ERROR CODE DESCRIPTION
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTEQueryMacAddress
7/13/2017 • 1 min to read • Edit Online
Syntax
DWORD WlanMTEQueryMacAddress(
__in HANDLE hAdapter,
__out DOT11_MAC_ADDRESS *pDot11MacAddress
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
pDot11MacAddress
[out] The current MAC address of the Wi-Fi adapter.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTEQueryPhyTypes
7/13/2017 • 1 min to read • Edit Online
Syntax
DWORD WlanMTEQueryPhyTypes(
__in HANDLE hAdapter,
__out PWLAN_MTE_PHY_LIST *ppPhyList
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
ppPhyList
[out] The list of available PHY types as described in DOT11_PHY_TYPE enumeration.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTEStartSelfTest
7/13/2017 • 1 min to read • Edit Online
Syntax
DWORD WlanMTEStartSelfTest(
__in HANDLE hAdapter,
__in DOT11_MANUFACTURING_SELF_TEST_TYPE eTestType,
__in ULONG uTestID,
__in PVOID pvContext,
__in ULONG uPinBitMask,
__in ULONG uInBufLen,
__in_bcount_opt(uInBufLen) PUCHAR pucInBuffer
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
eTestType
[in] The type of self-test requested. The values of eTestType are defined by the
DOT11_MANUFACTURING_SELF_TEST_TYPE enumeration, shown below:
uTestID
[in] The ID for the self-test requested.
pvContext
[in] The context that uniquely identifies this request in the callback and in the subsequent results query.
uPinBitMask
[in] The bit mask for adapter pins to be tested.
uInBufLen
[in] The length of the buffer for passing in any additional information about the self-test.
pucInBuffer
[in] The buffer that will contain additional information about the self-test.
Remarks
On completion of the self-test, the application’s callback handler is called, if one was registered, with the
dot11ManufacturingCallbackType set to dot11_manufacturing_callback_self_test_complete, and the result
of the self-test is included.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTEQuerySelfTestResult
7/13/2017 • 1 min to read • Edit Online
Syntax
DWORD WlanMTEQuerySelfTestResult(
__in HANDLE hAdapter,
__in DOT11_MANUFACTURING_SELF_TEST_TYPE eTestType,
__in ULONG uTestID,
__in PVOID pvContext,
__out BOOLEAN *pbResult,
__out ULONG *puPinFailedBitMask,
__out ULONG *puBytesWrittenOut,
__in ULONG uOutBufLen,
__out_bcount_opt(uOutBufLen) PUCHAR pucOutBuffer
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
eTestType
[in] The type of self-test requested. The values of eTestType are defined by the
DOT11_MANUFACTURING_SELF_TEST_TYPE enumeration, shown below:
uTestID
[in] The ID for the self-test requested.
pvContext
[in] The context that was specified in the original self-test request.
pbResult
[out] The final result of the self-test. True if passed, False if failed.
puPinFailedBitMask
[out] The bit mask for adapter pins that failed the test.
puBytesWrittenOut
[out] The number of bytes of optional data returned from the self-test results.
uOutBufLen
[in] The length of the buffer for returning any additional information about the self-test.
pucOutBuffer
[out] The buffer of length *puBytesWrittenOut that provides additional information about the self-test. The value of
*puBytesWrittenOut must be less than or equal to the value of uOutBufLen.
Remarks
The application must have received a dot11_manufacturing_callback_self_test_complete callback prior to
calling this command. It should also provide the same context value that was used in the original self-test request in
order to the get the results for the appropriate self-test request.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTERxSignal
7/13/2017 • 1 min to read • Edit Online
Queries information about the received signal at a specific band and channel.
Syntax
DWORD WlanMTERxSignal(
__in HANDLE hAdapter,
__out BOOLEAN *pbEnabled,
__in DOT11_BAND Dot11Band,
__in ULONG uChannel,
__out LONG *pPowerLevel
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
pbEnabled
[out] True if the driver detected a signal at the specified band and channel. False if no signal was detected.
Dot11Band
[in] The band on which the signal is to be detected. The values of the Dot11Band parameter are defined by the
DOT11_BAND enum, shown below:
uChannel
[in] The channel on which the signal is to be detected. The channel range dependa on the band and on the
supported PHY types.
pPowerLevel
[out] The power level of the received signal detected at the antenna, returned as RSSI measured in dBm. This is
valid only if bEnabled is True.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
ERROR CODE DESCRIPTION
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTETxSignal
7/13/2017 • 1 min to read • Edit Online
Requests the driver to transmit a signal at the specified band and channel.
Syntax
DWORD WlanMTETxSignal(
__in HANDLE hAdapter,
__in BOOLEAN bEnable,
__in BOOLEAN bOpenLoop,
__in DOT11_BAND Dot11Band,
__in ULONG uChannel,
__in LONG SetPowerLevel,
__out LONG *pADCPowerLevel
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
bEnable
[in] If a value is set, the transmission is enabled. Otherwise, transmission at the specified band and channel is
disabled.
bOpenLoop
[in] When set to True, the driver must use an open loop power control and return the signal value in the
pADCPowerLevel parameter. If this parameter is set and the hardware does not support open loop power control,
an ERROR_NOT_SUPPORTED exception is returned.
Dot11Band
[in] The band on which the signal is to be detected. The values of the Dot11Band parameter are defined by the
DOT11_BAND enum, shown below:
uChannel
[in] The channel on which the signal is to be transmitted. The channel range depends on the band and supported
PHY types.
SetPowerLevel
[in] The power level of the transmitted signal, in dBm.
pADCPowerLevel
[out, optional] The current signal level detected at the antenna, returned as a RAW value. The interpretation of this
value is implemented by the IHV. This return parameter is valid if bOpenLoop is True and the hardware supports it.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists one of the error codes
that may be returned.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTEQueryADC
7/13/2017 • 1 min to read • Edit Online
Requests the value of the transmitted signal when performed over an open loop.
Syntax
DWORD WlanMTEQueryADC(
__in HANDLE hAdapter,
__in DOT11_BAND Band,
__in ULONG uChannel,
__out LONG *pADCPowerLevel
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
Band
[in] The band on which the signal is to be detected. The values of the Dot11Band parameter are defined by the
DOT11_BAND enum, shown below:
uChannel
[in] The channel on which the signal is being transmitted. The channel range will depend on the band and
supported PHY types.
pADCPowerLevel
[out] The current signal level detected at the antenna returned as a RAW value. The interpretation of this value will
be implemented by the IHV. This parameter is valid only if the device supports open loop power and is currently
transmitting a signal on the open loop.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Remarks
If open loop power is not supported, the driver will return ERROR_NOT_SUPPORTED.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists one of the error codes
that may be returned.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTESetData
7/13/2017 • 1 min to read • Edit Online
Requests that the driver write data to a specific location defined by a key and offset value.
Syntax
DWORD WlanMTESetData(
__in HANDLE hAdapter,
__in ULONG uKey,
__in ULONG uOffset,
__in ULONG uInBufLen,
__in_bcount(uInBufLen) PUCHAR pucInBuffer
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
uKey
[in] The key for the write request.
uOffset
[in] The offset for the write request.
uInBufLen
[in] The length of the buffer containing the data to be written.
pucInBuffer
[in] The buffer containing the data to be written.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Related topics
Wi-Fi manufacturing API
WlanMTEQueryData
7/13/2017 • 1 min to read • Edit Online
Queries the driver for data stored at a specific location defined by a key and offset value.
Syntax
DWORD WlanMTEQueryData(
__in HANDLE hAdapter,
__in ULONG uKey,
__in ULONG uOffset,
__out ULONG *puBytesWrittenOut,
__in ULONG uOutBufLen,
__out_bcount(uOutBufLen) PUCHAR pucOutBuffer
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
uKey
[in] The key for the query request.
uOffset
[in] The offset for the query request.
puBytesWrittenOut
[out] The number of bytes of data returned from the query request.
uOutBufLen
[in] The length of the buffer for returning the information requested.
pucOutBuffer
[out] The buffer that will contain the data returned per the query request.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
WlanMTESleep
7/13/2017 • 1 min to read • Edit Online
Requests that the driver to go to sleep either for a specified time interval, or indefinitely until an awake request is
sent.
Syntax
DWORD WlanMTESleep(
__in HANDLE hAdapter,
__in ULONG uSleepTime,
__in PVOID pvContext
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
uSleepTime
[in] The time in milliseconds for the adapter to remain in sleep mode. If a value of −1 is specified, the adapter
sleeps until a WlanMTEAwake request is sent.
pvContext
[in] The context that uniquely identifies this request in the callback.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists one of the error
codes that may be returned.
Remarks
During sleep mode, all radios are turned off and the Wi-Fi chip is powered off. When the adapter reawakens, the
application’s callback handler, if one was registered with WlanMTERegisterCallbackHandler, is called with the
dot11ManufacturingCallbackType set to dot11_manufacturing_callback_sleep_complete and the result of
the sleep operation is included.
Requirements
Header: wifimte.w
Related topics
WlanMTEAwake
Wi-Fi manufacturing API
WlanMTEAwake
7/13/2017 • 1 min to read • Edit Online
Requests that the driver wake up from its current sleep state.
Syntax
DWORD WlanMTEAwake(
__in HANDLE hAdapter
);
Parameters
hAdapter
[in] The handle to the Wi-Fi adapter, obtained by calling WlanMTEOpenHandle.
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the system error codes. The following table lists the error codes that
may be returned.
Remarks
The driver must have been put into the sleep state using the WlanMTESleep function before this function is called.
If the driver is not in a sleep state when this function is called, it returns STATUS_INVALID_PARAMETER.
Requirements
Header: wifimte.w
Related topics
Wi-Fi manufacturing API
Adding Wi-Fi manufacturing test support to the OID
interface
6/6/2017 • 1 min to read • Edit Online
To ensure that all device components are integrated, functioning correctly, calibrated properly, and meet all
regulatory requirements, OEMs run a number of standard ad-hoc tests to ensure that any problems are found and
corrected before the device goes to retail. These tests are also occasionally run at retail outlets to check for proper
component operation. The implementation of these test interfaces and mechanisms is performed by hardware
vendors (IHVs).
This section describes an extension to the existing Wi-Fi OID documentation so that IHVs can implement a
standard set of interfaces that OEMs can use to create test applications.
Assumptions
To perform these manufacturing tests, the device must be operating in a special operation mode called
manufacturing mode. In manufacturing mode, only specific parts of the operating system are loaded in order to
enable the proper execution of the component tests. Normal Wi-Fi operations, such as scanning and automatically
connecting to networks, are disabled when the device is running in manufacturing mode.
Manufacturing mode can be entered in the manufacturing environment or during customer service. Writing to the
Device Provisioning Partition (DPP) can only be performed in the manufacturing environment. If an OID that writes
to the DPP is invoked in a non-manufacturing environment, the attempt to write to the DPP fails. Manufacturing
operations should have only a transient effect on the system, and the state should not persist across reboots.
Driver requirements
The Wi-Fi miniport driver must be able to operate in normal mode or manufacturing test mode, and it must be
able to switch between modes at any time. The driver determines the appropriate mode during initialization by
querying a specific registry key.
The following illustration shows the architecture of the manufacturing test environment.
In this section
Reporting operating mode capabilities
Describes the requirements and behavior for reporting changes with drivers operating in manufacturing test
mode.
Supporting updated OID behavior in manufacturing mode
Describes the updated OIDs that must be supported by the Wi-Fi miniport driver.
Supporting existing OID commands in manufacturing mode
Describes the existing OIDs that must be supported by the Wi-Fi miniport driver.
Supporting new OID commands for manufacturing mode
Describes the new OIDs that must be supported by the Wi-Fi miniport driver.
Supporting new callbacks for manufacturing mode
Describes the new OID callback that must be supported by the Wi-Fi miniport driver.
Reporting operating mode capabilities
6/6/2017 • 1 min to read • Edit Online
If a Wi-Fi driver supports running in manufacturing mode, it should add manufacturing mode to its list of
supported capabilities. You can query the supported operation mode capabilities by using the
OID_DOT11_OPERATION_MODE_CAPABILITY command, which will return information on the operation modes
supported by the driver. For more info about OID_DOT11_OPERATION_MODE_CAPABILITY, see Supporting
updated OID behavior in manufacturing mode.
To switch the driver’s operation mode to manufacturing mode, use the
OID_DOT11_CURRENT_OPERATION_MODE command to ensure that manufacturing testing will not conflict with
the driver’s behavior in any of its other modes. For more info about OID_DOT11_CURRENT_OPERATION_MODE,
see Supporting updated OID behavior in manufacturing mode.
Related topics
Adding Wi-Fi manufacturing test support to the OID interface
Supporting updated OID behavior in manufacturing
mode
7/13/2017 • 1 min to read • Edit Online
When running in manufacturing mode, Wi-Fi miniport drivers must add support for the following updated OIDs.
OID_DOT11_OPERATION_MODE_CAPABILITY
The OID_DOT11_OPERATION_MODE_CAPABILITY command is called in query mode to return the list of
operation modes supported by the driver. This command functions as previously documented, but drivers are now
required to support a new operation mode, DOT11_OPERATION_MODE_MANUFACTURING, which is the
context in which manufacturing operations are performed. For complete documentation of this OID, see
OID_DOT11_OPERATION_MODE_CAPABILITY on MSDN.
OID_DOT11_CURRENT_OPERATION_MODE
The OID_DOT11_CURRENT_OPERATION_MODE command can be called in either set or query mode to
configure or return the driver’s current operation mode.
This command functions as previously documented, but the driver is now required to support the
DOT11_OPERATION_MODE_MANUFACTURING operation mode. For complete documentation of this OID, see
OID_DOT11_CURRENT_OPERATION_MODE on MSDN.
uCurrentOpMode
[in] Specifies the driver operation mode to be set. This parameter also functions as a placeholder for the driver to
return the operation mode when called in query mode. If the driver does not support the requested operation
mode, it should return NDIS_STATUS_BAD_VERSION.
Related topics
Adding Wi-Fi manufacturing test support to the OID interface
Supporting existing OID commands in manufacturing
mode
6/6/2017 • 1 min to read • Edit Online
When running in manufacturing mode, Wi-Fi miniport drivers must add support for the following existing OIDs.
OID_GEN_SUPPORTED_GUIDS
The OID_GEN_SUPPORTED_GUIDS command is called in query mode to return the set of supported GUIDS. For
complete documentation, see OID_GEN_SUPPORTED_GUIDS on MSDN.
Note
This OID is typically called for compatibility purposes. The driver can choose to ignore it, if desired, and return
NDIS_STATUS_NOT_SUPPORTED instead.
OID_GEN_VENDOR_ID
The OID_GEN_VENDOR_ID command is called in query mode to return the 3-byte IEEE-registered vendor code
followed by a single byte assigned by the vendor that identifies a particular NIC. For complete documentation, see
OID_GEN_VENDOR_ID on MSDN.
OID_GEN_VENDOR_DESCRIPTION
The OID_GEN_VENDOR_DESCRIPTION command is called in query mode to return a NULL-terminated string
that describes the NIC in ANSI format. For complete documentation, see OID_GEN_VENDOR_DESCRIPTION on
MSDN.
OID_GEN_CURRENT_LOOKAHEAD
The OID_GEN_CURRENT_LOOKAHEAD command is called in set mode to specify the number of bytes of received
packet data to be sent to the protocol driver. For complete documentation, see OID_GEN_CURRENT_LOOKAHEAD
on MSDN.
Note
This OID is typically called for compatibility purposes. The driver can choose to ignore it, if desired, and return
NDIS_STATUS_NOT_SUPPORTED instead.
OID_PM_ADD_WOL_PATTERN
The OID_PM_ADD_WOL_PATTERN command is called in set mode to specify the WOL pattern. For complete
documentation, see OID_PM_ADD_WOL_PATTERN on MSDN.
Note
This OID is typically called for compatibility purposes. The driver can choose to ignore it, if desired, and return
NDIS_STATUS_NOT_SUPPORTED instead.
OID_DOT11_RESET_REQUEST
The OID_DOT11_RESET_REQUEST command is called in query mode to return the IEEE MAC address used by the
driver. For complete documentation, see OID_DOT11_RESET_REQUEST on MSDN.
OID_DOT11_CURRENT_ADDRESS
The OID_DOT11_CURRENT_ADDRESS command is called in query mode to return the IEEE MAC address used by
the driver. For complete documentation, see OID_DOT11_CURRENT_ADDRESS on MSDN.
OID_DOT11_SUPPORTED_PHY_TYPES
The OID_DOT11_SUPPORTED_PHY_TYPES command is called in query mode to request the list of PHY types
supported by the 802.11 station. For complete documentation, see OID_DOT11_SUPPORTED_PHY_TYPES on
MSDN.
OID_DOT11_CURRENT_PHY_ID
The OID_DOT11_CURRENT_PHY_ID command is called in set mode to set the current PHY ID. For complete
documentation, see OID_DOT11_CURRENT_PHY_ID on MSDN.
OID_DOT11_HARDWARE_PHY_STATE
The OID_DOT11_HARDWARE_PHY_STATE command is called in query mode to return the PHY power state. For
complete documentation, see OID_DOT11_HARDWARE_PHY_STATE on MSDN.
OID_DOT11_NIC_POWER_STATE
The OID_DOT11_NIC_POWER_STATE command is called in query mode to return the NIC power state. For
complete documentation, see OID_DOT11_NIC_POWER_STATE on MSDN.
Related topics
Adding Wi-Fi manufacturing test support to the OID interface
Supporting new OID commands for manufacturing
mode
7/13/2017 • 7 min to read • Edit Online
When running in manufacturing mode, Wi-Fi miniport drivers must add support for the following new OID
commands. The driver should ensure that the device is currently in manufacturing mode prior to calling any of
these commands. For more info, see Determine if MMOS is running. Some of the parameters specified in the API
may be IHV-specific.
OID_DOT11_MANUFACTURING_TEST
OID_DOT11_MANUFACTURING_TEST is called as a method request in the driver to perform a specific test. This OID
should never be used during normal operation.
dot11ManufacturingTestType
[in] Specifies the manufacturing test to be run. The data type for this member is one of the values of the
DOT11_MANUFACTURING_TEST_TYPE enumeration.
The DOT11 manufacturing test type enumeration is defined as follows:
uBufferLength
[in] The length, in bytes, of the DOT11_MANUFACTURING_TEST structure and any additional data specific to the
test appended at the end.
ucBuffer
[in] The buffer containing optional data as specified by the dot11DiagnosticsTestType member.
dot11_manufacturing_test_self_start
The dot11_manufacturing_test_self_start command is called to request the driver to test WLAN IC connectivity,
FEM IC connectivity, or the WLAN-BT coexistence interface.
DOT11_DIAGNOSTIC_SELF_TEST_BT_COEXISTENCE is only applicable if the WLAN and Bluetooth chips are on
separate ICs. If they are on the same module, this test is not supported and the miniport should return
NDIS_STATUS_NOT_SUPPORTED.
When called, the driver should run the requested tests as defined in the
DOT11_MANUFACTURING_SELF_TEST_SET_PARAMS structure and return success when the tests have been
started. On completion, whether the tests have succeeded or failed, the driver should indicate the test status by
using the NDIS_STATUS_DOT11_MANUFACTURING_CALLBACK callback handler, with the
dot11ManufacturingCallbackType set to dot11_manufacturing_callback_self_test_complete and the status
describing the result of the test. The driver will then call the OID_DOT11_MANUFACTURING_TEST oid with the
dot11_manufacturing_test_self_query_result command to query the detailed result of the test.
SelfTestType
[in] Specifies the type of self-test to be run by the driver. The data type for this member is the
DOT11_MANUFACTURING_SELF_TEST_TYPE enumeration with one of the following values:
DOT11_MANUFACTURING_SELF_TEST_INTERFACE
Control and data interface to WLAN
Clock request
Sleep clock
Interrupt and power supply lines
All related connections
DOT11_MANUFACTURING_SELF_TEST_RF_INTERFACE
Control and RF interface to FEM IC
FEM power supply
Transmit signal on loopback path from TX interface to RX interface and validate.
DOT11_MANUFACTURING_SELF_TEST_BT_COEXISTENCE
Set line states from Bluetooth side and read line states from WLAN side
Verify each pin’s state
uTestID
[in] ID of the test to be run.
uPinBitMask
[in] Bit mask of pins to be tested.
pvContext
[in] The context value to be returned to the application by using
dot11_manufacturing_callback_self_test_complete callback when the driver has completed the tests.
uBufferLength
[in, optional] The length of the buffer containing additional input for the self-test.
ucBufferIn
[in, optional] The buffer that contains additional input for the self-test.
dot11_manufacturing_test_self_query_result
This command gets the results of a previously requested self-test. It should only be called when the driver has
indicated that the self-test is complete by using the NDIS_STATUS_DOT11_MANUFACTURING_CALLBACK with
the dot11ManufacturingCallbackType set to dot11_manufacturing_callback_self_test_complete and the status
describing the result of the test.
SelfTestType
[in] Specifies the type of self-test whose result is being queried. The data type for this member is the
DOT11_MANUFACTURING_SELF_TEST_TYPE enumeration.
uTestID
[in] ID of the test to be run.
bResult
[out] The result of the test. True if the test passed, False if it failed.
uPinFailedBitMask
[out] The bit mask of any detected PIN faults.
pvContext
[in] The context used when the driver indicated that the tests were complete.
uBytesWrittenOut
[out] The length of the buffer that contains any additional returned output from the self-test.
ucBufferOut
[in, out, optional] The buffer of length uBytesWrittenOut that contains additional output from the self-test.
dot11_manufacturing_test_rx
The dot11_manufacturing_test_rx read-only command tests and verifies that there is connectivity between the
antenna port and WLAN IC.
To test this connectivity, a signal generator generates a non-modulated carrier wave (CW) at a certain frequency
and power that will be measured and returned by the device under test (DUT). If the band and/or channel setting
are inconsistent, then the driver returns STATUS_INVALID_PARAMETER.
typedef struct _DOT11_MANUFACTURING_FUNCTIONAL_TEST_RX {
BOOLEAN bEnabled;
DOT11_BAND Dot11Band;
ULONG uChannel;
LONG PowerLevel;
} DOT11_MANUFACTURING_FUNCTIONAL_TEST_RX, * PDOT11_MANUFACTURING_FUNCTIONAL_TEST_RX;
bEnabled
[out] True if the driver detected a signal at the specified band and channel. False if no signal was detected.
Dot11Band
[in] The band on which the signal is to be detected.
uChannel
[in] The channel on which the signal is to be detected. The channel range depends on the band and supported PHYs.
PowerLevel
[out] The power level of the received signal detected at the antenna, returned as the RSSI measured in dBm. This is
valid only if bEnabled is True.
dot11_manufacturing_test_tx
The dot11_manufacturing_test_tx set-only command validates the connection from the chipset to the FEM
output.
To perform this test, a signal analyzer is physically connected to the antenna port and the DUT is requested to
transmit a CW with specific band, channel, and power level settings. The driver also measures its own ADC reading
for the transmitted signal and returns it to the application.
bEnable
[in] If set, this command enables transmission. If not set, transmission at the specified band and channel are
disabled.
bOpenLoop
[in] If set to true, this parameter indicates that the driver is requested to use an open loop power control and return
the read signal value in ADCPowerLevel. If set to false, the driver will not use an open loop power control.
If this value is set and the hardware does not support open loop power control, the driver returns
NDIS_STATUS_NOT_SUPPORTED.
Dot11Band
[in] The band on which the signal is to be transmitted.
uChannel
[in] The channel on which the signal is to be transmitted. The channel range depends on the band and supported
PHYs.
uSetPowerLevel
[in] The power level of the transmitted signal. This is returned as a percentage of the maximum possible power
level.
ADCPowerLevel
[out, optional] The current signal level detected at the antenna, returned as a RAW value. The interpretation of this
value is specified by the IHV.
This must be set if bOpenLoop is True and the hardware supports it.
dot11_manufacturing_test_set_data
The dot11_manufacturing_test_set_data set-only command enables the application to write data at a specific
location.
uKey
[in] The key is IHV specific and can be either a reference to a specific register or an entry from a named table.
uOffset
[in] The offset within the data.
uBufferLength
[in] The number of data bytes to be contained in the buffer of additional test data.
ucBufferIn
[in] The buffer containing the additional test data of length uBufferLength.
dot11_manufacturing_test_query_data
The dot11_manufacturing_test_query_data command enables the application to read data at a specific location.
uKey
[in] The key is IHV specific and can be either a reference to a specific register or an entry from a named table.
uOffset
[in] The offset within the data.
uBufferLength
[in] The number of data bytes to be read in the buffer.
uBytesRead
[out] The actual number of data bytes read by the driver.
ucBufferOut
[out] Contains the data read by the driver.
dot11_manufacturing_test_sleep
The dot11_manufacturing_test_sleep command instructs the Wi-Fi chipset to go into its lowest power state, for
either a specified time or indefinitely.
For this test, all radios should be turned off and the Wi-Fi chipset should be powered off. The test verifies that Wi-Fi
can enter the sleep state, that the current consumption is within the specified limits, and that there is no current
drawn when Wi-Fi is switched off.
The driver can be awakened from the sleep state at any time by using the dot11_manufacturing_test_awake
command. If the sleep time-out is set to −1, the driver should sleep indefinitely unless asked to wake up by using
dot11_manufacturing_test_awake. When the driver wakes up, either due to the time-out expiring or as a result
of the awake command, it should indicate its awake status by using the
NDIS_STATUS_DOT11_MANUFACTURING_CALLBACK callback handler with the
dot11ManufacturingCallbackType set to dot11_manufacturing_callback_sleep_complete.
uSleepTime
[in] The amount of time for the driver to sleep, in milliseconds. If set to −1, the driver enters sleep state until
awakened by using the dot11_manufacturing_test_awake command.
pvContext
[in] The context used when the driver returns the test completion state to the application by using
dot11_manufacturing_callback_sleep_complete.
dot11_manufacturing_test_awake
The dot11_manufacturing_test_awake command causes the Wi-Fi chipset to wake up from its lowest-power
sleep state. The driver returns STATUS_INVALID_PARAMETER if this command is sent when the chipset is already
awake.
Related topics
Adding Wi-Fi manufacturing test support to the OID interface
Supporting new callbacks for manufacturing mode
7/13/2017 • 1 min to read • Edit Online
When running in manufacturing mode, Wi-Fi miniport drivers must add support for the following new callback.
NDIS_STATUS_DOT11_MANUFACTURING_CALLBACK
The NDIS_STATUS_DOT11_MANUFACTURING_CALLBACK callback is used to indicate completion status for
certain requests. The data structure used for this callback is defined here.
dot11_manufacturing_callback_self_test_complete
dot11_manufacturing_callback_self_test_complete is called by the driver when a requested self-test is
completed by the driver. This callback must return the context for self-test request as well as the self-test result. The
driver then calls the OID_DOT11_MANUFACTURING_TEST OID with the
dot11_manufacturing_test_self_query_result command to obtain the detailed result of the test.
dot11_manufacturing_callback_sleep_complete
dot11_manufacturing_callback_sleep_complete is called when a requested sleep command is executed by the
driver. This callback must return the context for the sleep request as well as the status, whether success or failure.
This callback is also called by the driver when the application sends a request to wake the driver from a sleep state.
Related topics
Adding Wi-Fi manufacturing test support to the OID interface
Flashing tools
6/6/2017 • 3 min to read • Edit Online
Each manufacturer has different techniques and tooling that they will use to manufacture and service a Windows
10 Mobile device. The best technical expertise regarding manufacturing resides within those who built the OEM
manufacturing line. This means that the OEM will need to determine which flashing and manufacturing process
will work best for them. OEM service centers may have unique needs that will also influence the selection of
flashing tools. The OEM will need to determine how to test and validate that the selected tools and processes
meets their cost, quality, and other unique manufacturing objectives.
The OEM uses the Microsoft supplied imaging tools to create the FFU OS images that are flashed to the device.
SOC PROVIDED
MICROSOFT FFU OEM CUSTOM FFU MANUFACTURING
SCENARIO ENGINEERING TOOL TOOL FLASHING TOOL GANG PROGRAMMER
Gang programmer
There are a number of options available to the OEM to flash binary images. The OEM can use their unique
flashing tools as well as gang programmer technologies to manufacture the device if they find that those options
are more suitable to their environment.
If the OEM uses a gang programmer they will need to develop a custom tool to convert the FFU image to a raw
binary image. The conversion tool will need to:
1. Open a raw binary file in the format expected by the gang programmer.
2. Read in the FFU file and parse the file data as specified in FFU image format.
3. Write out the data referenced in the FFU BLOCK_DATA_ENTRY elements to the raw file.
4. When there are no more entries, write out any metadata or padding needed for the raw format and then
close the raw binary file.
OEMs can use the full flash update (FFU) image format and simple UEFI USB protocols to create custom flashing
tools. An OEM custom flashing tool can integrate in with existing systems and support a range of scenarios
discussed in Flashing tools.
For more info on available USB APIs see, UEFI flashing protocols.
PC flashing application
The image is transferred to the device that is running the UEFI flashing application using a simple PC side client
program. The PC application establishes a USB connection to the device and writes the data over that connection.
The validation and verification of the image occurs in the UEFI flashing application running on the device.
The following diagram summarizes the overall flow of the OEM custom flashing PC application and the UEFI
application.
Note
This diagram illustrates one possible solution. The OEM is encouraged to modify this approach to create an
optimal solution that best suits their needs.
Related topics
Flashing tools
Manufacturing
Flashing security requirements
6/6/2017 • 2 min to read • Edit Online
Before flashing occurs, all OEM flashing mechanisms must validate cryptographic signatures in the image that chain
to keys owned by the OEM. This validation of the cryptographic signature on the image must be done on the device
(not on a desktop flashing tool) and must be done before the image is flashed to eMMC memory. This requirement
is intended to protect devices from being compromised by users attempting to subvert the security protections in
the system. Mechanisms that can flash or update the state of the device (debuggers, memory inspectors, etc.) and
that are not properly secured could be used by an attacker to circumvent the device’s security mechanisms.
The implemented solutions must be fully resilient even if the device is reverse engineered (that is, even if the user
understands the operation of the security code in the firmware or SoC).
The following diagram shows both V1 and V2 FFU format. A major changed introduced in V2 FFU format is the
support for multiple data stores – each store contains sector-based data targeting a unique physical partition.
Security header region
cbSize
The size of the SECURITY_HEADER struct. Used in conjunction with the signature string to identify the FFU security
header.
Signature string
A hard-coded ASCII string of "SignedImage " that identifies this image as a secure FFU image.
Chunk size in KB
The size of chunks used to generate the hash table. Used to break the image up into hashable chunks for validation
against the hash table entries and ensure the image has not been tampered with since creation.
Hash algorithm ID
Defines which hash algorithm was used to generate the hash table.
Catalog size
The size in bytes of the catalog after the security header.
Hash table size
The size in bytes of the hash table after the security header and catalog.
Security header, byte count: cbSize
MajorVersion 1 2
MinorVersion 0 0
FullFlashMajorVersion 2 2
FullFlashMinorVersion 0 0
Note
The OEM should not flash the image to the device unless the version of the image matches these values.
NumOfStores (V2 only)
Number of stores and their payloads in this FFU.
StoreIndex (V2 only)
Current store index, starting from 1.
StorePayloadSize (V2 only)
Size of the store payload in bytes, excluding padding.
DevicePathLength (V2 only)
Size of the device path that follows, in characters, without including the terminating null character.
DevicePath (V2 only)
Actual device path that the store is targeted for. This should be the same as device path retrieved from UEFI
protocol: DEVICE_PATH_TO_TEXT_PROTOCOL. ConvertDevicePathToText()
enum DISK_ACCESS_METHOD
{
DISK_BEGIN = 0,
DISK_END = 2
};
Related topics
Flashing tools
Implementing image integrity validation in custom
flashing tools
6/6/2017 • 2 min to read • Edit Online
The FFU image contains a signed catalog file, a hash within the catalog, and a table of hashes corresponding to
each chunk of the image. The hash table contents are generated using the SHA256 secure hash algorithm. Three
checks must be performed before the image is flashed:
Catalog signature validation - Validating the signature of the signed catalog file helps to verify that the
image came from a trusted source.
Hash of the table of hashes validation - Validating the hash of the table of hashes in the table helps to
verify that the image has not been tampered with.
Data chunk validation using the hash table entries - The FFU application must check each chunk
against its corresponding chunk hash before flashing the image to the device.
Checking the signature on the catalog and checking the hash of the
table of hashes
The goal in signature validation is to make sure that the signature in the catalog matches the PK certificate on the
phone. This approach allows checking for a signature up front without having the full image on the device before
flashing. The signature check assumes that catalog contains a SHA1 hash.
Microsoft provides a UEFI protocol which exposes a function for this purpose, EFI_CHECK_SIG_AND_HASH. For
more information, see UEFI check signature protocol. This function also validates the hash of the table of hashes.
Example code flow
1. Establish pointers to catalog and hash table data.
2. Determine the size of the catalog and hash table data in bytes.
3. Use the UEFI check signature protocol to call EFI_CHECK_SIG_AND_HASH, passing the pointers and data
sizes.
4. Based on the EFI return code either continue to process the image, or post a security message such as
EFI_SECURITY_VIOLATION.
Note
If secure boot is not enabled on the device, a signature check in not performed.
Error handling
Standard error handling code techniques should be used. A few common situations to handle are listed here:
Missing catalog data
Insufficient resources
Empty image
Encryption library
Locate and include an appropriate encryption library in the image to support hash validation, such as
EFI_HASH_PROTOCOL.
Related topics
Developing custom OEM flashing tools
Field service scenarios
6/6/2017 • 3 min to read • Edit Online
Scenarios can help to identify security vulnerabilities in field service processes. Each scenario should be reviewed to
verify that a secure solution has been implemented by the OEM.
Phone troubleshooting Field test and diagnostics apps can be used by the mobile
operator store, mobile operator service centers, and OEM
service centers to perform specific tests on a phone in two
different scenarios.
The first troubleshooting scenario is when the customer is
experiencing difficulties with the device and a diagnostic
test is run to gather information on the reported issue.
The second scenario is when the mobile operator or OEM
service centers seek to establish quality status of a device.
This scenario is the more general form of the previous
troubleshooting scenario. This is because there could be
more reasons than customer difficulties that would trigger
the need for diagnostics and testing of retail phones. For
example, to perform field quality measures, the test could
be initiated to perform random-sample testing.
Engineering flashing The engineering staffs of silicon vendors and OEMs need
access to flashing technologies during development of
hardware and software for the phones. This scenario is
typically supported by low-level technologies such as
JTAG, UEFI-based flashing, or OEM-specific flashing
technologies. Which technology is selected depends on
issues being worked on, development processes, and the
supporting tools. The granularity of flashing options
varies; lower-level tools have more flexibility in choosing
which partitions can be flashed.
Engineering diagnostics The engineering staffs of silicon vendors and OEMs need
access to diagnostics technologies during development of
hardware and software for the phones. These scenarios
are typically supported by technologies provided by the
SV or OEM that will be disabled on retail devices. Some of
the SV technologies provide a broad set of capabilities—
including features that support reading and writing to
flash memory—that must be disabled before the device is
shipped.
Mobile operator trials There may be a need to flash OS images to the device to
support mobile operator trials.
Related topics
Manufacturing
Using a host PC to reboot a device to flashing mode
and get version information
7/13/2017 • 6 min to read • Edit Online
When a Windows 10 Mobile device is connected to a host PC via a USB cable, you can perform the following tasks
in an application that is running on the host PC. These tasks are useful in certain manufacturing or customer care
scenarios.
Reboot the device into flashing mode.
Retrieve version information from the device.
The host app uses the Windows Portable Devices API to accomplish these tasks.
0x59f12ea9, 0x53ce, 0x452d, 0x97, 0x11, 0xca, 0x4e, 0xea, 0xf1, 0x80, 0x89
The pid field must have one of the values shown in the table below
The build string for the image on the device Use the data returned by the following pid values to
construct the build string:
4 (the name of the internal Microsoft branch
the OS was built from)
6 (the Windows build number)
7 (the Windows 10 Mobile build number)
8 (the time stamp for the build)
An example build string is
WPMAIN.9600.12186.20130906-1624.
The OS version 12
For more info about working with device services, see Opening a service, Accessing service object properties and
Retrieving Object Properities.
Disabling the initial setup process
7/13/2017 • 1 min to read • Edit Online
To disable the device's initial setup process (also sometimes called the out-of-box experience or OOBE) in a Test,
Health, or Production image that is used during manufacturing, include the SKIPOOBE imaging feature in the
OEMnput.xml file that is used to build the image.
The SKIPOOBE feature sets the OobeHeadless registry value (a REG_DWORD value under the
HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\OOBE entry) to 1. Alternatively, you can configure this registry
value directly in one of your own packages. The following example demonstrates a package XML file that sets this
registry value.
<Macros>
<Macro Id="hklm.shell" Value="$(hklm.microsoft)\Shell"/>
</Macros>
<Components>
<OSComponent>
<RegKeys>
<RegKey KeyName="$(hklm.shell)\OOBE">
<RegValue Name="OobeHeadless" Type="REG_DWORD" Value="00000001" />
</RegKey>
</RegKeys>
</OSComponent>
</Components>
</Package>
Related topics
Specifying files and registry entries in a package project file
Reset protection
7/13/2017 • 9 min to read • Edit Online
Reset Protection helps you secure a device in case it is stolen. It must be enabled on the device during
manufacturing time.
Reset Protection consists of the following parts:
Reset and reactivation protection – The stolen device cannot be reused by resetting or flashing the device.
When a user performs a factory reset on the device, they will be asked to enter the Microsoft Account
credentials that are associated with that device. Additionally, if the device is flashed with a new image and Reset
Protection is turned on, the Microsoft Account credentials that were associated with that device is required to
finish OOBE and use the device.
Anti-rollback protection – If Reset Protection is enabled, the stolen device cannot be flashed to an earlier
version of the operating system that did not support Reset Protection.
To turn on Reset Protection, you must configure two secure UEFI variables:
ANTI_THEFT_ENABLED –This variable needs to be set with a value that will be provided by Microsoft and
indicates that the device can support Reset Protection. The operating system enables Reset Protection on the
device based on this setting. This variable is in the 1A597235-6378-4910-9F8B-720FEE9357A3 namespace.
DBX - This variable must contain the image hashes of the builds to which the device cannot be rolled back.
These image hashes are provided by Microsoft. This variable is in the EFI_IMAGE_SECURITY_DATABASE_GUID
namespace.
2. Reset and Reactivation Protection provisioning -- After setting the DBX variable, you must also set the
ANTI_THEFT_ENABLED authenticated variable. The content of this variable will be provided by Microsoft in
the OEM_ResetProtection_Enable_Resource.bin file. The name of the variable is ANTI_THEFT_ENABLED
and the namespace GUID is 1A597235-6378-4910-9F8B-720FEE9357A3. You can set this in the same way
as the secure boot keys.
Reverse logistics
With reverse logistics, you can get information about the status of Reset Protection on a device, such as the device
IMEI, or check if Reset Protection is currently enabled on the device. You can also use this to remove Reset
Protection if you have the appropriate recovery key for that device. Reverse logistics can help you in refurbishment
scenarios where Reset Protection is turned on, but you don’t have the Microsoft Account credentials that are
required to turn it off. We’ve provided sample code on how to use reverse logistics in the Portable Devices COM
API Sample.
How to get started using reverse logistics
In order to use Microsoft's automated reverse logistics program, organizations need to sign up for an account with
the Microsoft Dashboard and perform the following tasks:
Purchase an Authenticode signing certificate.
Install the certificate on all machines that will be used to submit requests.
Assign an administrator(s) to manage the program.
For each user in your company who will contribute submissions to the Dashboard, add the Microsoft account
for the user and grant each user the Reverse Logistics permission. To grant permissions, click Your Profile
and then click Permissions.
Register your company
Your company may already have an account with the Microsoft Dashboard. In that case, you will need to find the
administrator of your account with the Dashboard. To find the administrator, click Administration and then click
My Administrators. We recommend adding a reverse logistics manager as an additional administrator so it's
easier to approve users' reverse logistics requests. The administrators responsibilities include approving requests
to join the company, approving request for permissions, and removing users after they leave the company.For
more information, see Manage users and permissions.
If your company does not yet have an account with then Dashboard, here is how to get started:
Get a code signing certificate
In order to use revers logistics, you must purchase a standard class 3 certificate, NOT an EV certificate.
Make sure you establish your company with the same name that you used to purchase the certificate.
This is the name that will be exposed to users.
Establish a company
Make sure you save this certificate and that it is accessible. You will need to install it on multiple computers later in
this section. We recommend that you save a copy of the certificate on a thumb drive, or something easily
accessible.
Add users for your company
After you register your company, add other users who need reverse logistics permission:
The first person to register a company becomes an administrator for that company account.
Subsequent users need to register by using a Microsoft account. On the top right-hand corner of the Dashboard,
click Register to add yourself to your company and request the Reverse Logistics permission under
Additional Permissions Request.
The administrator receives notification and approves the request.
For more information about signing in to the Dashboard, see Before you sign in.
Set up your workstation for reverse logistics
Prerequistes
You need a workstation that runs Windows 7 or later and has browser access to the internet.
Each reverse logistics submitter must have his or her own Microsoft account; account credentials should not be
shared amongst multiple people.
Only computers that have the certificate installed locally will be able to perform reverse logistics.
Process
1. Plug in the thumb drive that contains the certificate you purchased.
2. On each computer where you plan to submit reverse logistics requests, sign in as a local Administrator and
install the code signing certificate:
a. Open a command prompt.
b. Type mmc and press ENTER.
c. On the File menu, click Add/Remove Snap-in.
d. Click Add.
e. In the Add Standalone Snap-in dialog box, select Certificates.
f. Click Add.
g. In the Certificates Snap-in dialog box, select Computer account and click Next.
h. In the Select Computer dialog box, click Finish.
i. On the Add/Remove Snap-in dialog box, click OK.
j. In the Console Root window, click Certificates (Local Computer) to view the certificate stores for the
computer.
k. In the Actions pane, under Certificates, select More Actions, then All Tasks, and then Import:
l. Click Browse and find the certificate you purchased.
m. Click OK. The certificate should be installed in you Personal certificate store.
Authentication and Use
The next step is to create a client tool on a provisioned workstation to submit reverse logistics requests. You will
need to create a third-party app with Microsoft account. The app will use a browser to allow a user to enter
credentials using a Microsoft account website. That will grant access to your tool to get the appropriate token to call
the Reverse Logistics API. For more information about how to build the app, see Mobile and Windows desktop
apps, and use "dds.reverse_logistics" scope (instead of "wl.basic") to get the appropriate token.
After your tool has the token, it can call the Reverse Logistics API with that token, your client certificate, and the
target IMEI in order to retrieve the recovery key for the target device.
API specification
Request
Reverse Logistics API endpoint:
POST
https://cs.dds.microsoft.com/Command/ExternalClientCert/AdministrativeUnprotect/%7BPartnerName%7D/%7BD
eviceId%7D
{PartnerName} should be replaced with an end-user readable string that will be included in an email to the user
whose Microsoft account is protecting the phone.
{DeviceId} should be replaced with a string in one of the following formats (leaving the square brackets and
replacing the text inside and including the curly braces):
ImeiOrMeid[{IMEI or MEID of the device}]
Duid[{DUID of the device}]
Include the Microsoft account user token in the “Authorization” header of the request.
The certificate provisioned with the Dashboard for your organization must be used as the client certificate for
mutual HTTPS.
Response
{
"UnprotectResult": "{UnprotectResult}"
"RecoveryKey": "{RecoveryKey}"
}
/// <summary>
/// Result of the unprotect operation
/// </summary>
public enum UnprotectResult
{
/// <summary>
/// Device was not found in DDS
/// </summary>
DeviceNotFound,
/// <summary>
/// Device was already unprotected
/// </summary>
DeviceAlreadyUnprotected,
/// <summary>
/// Device has been unprotected
/// </summary>
DeviceUnprotected,
/// <summary>
/// IF we find more than 1 device, we don't currently have a way to resolve the conflict. So, we
don't unprotect.
/// </summary>
MultipleDevicesFound,
}
Response codes:
200: Success.
400: The request is malformed.
401: The request is unauthorized. Your organization may not be provisioned properly, the user may not be
provisioned with the organization, or there may be a problem or mismatch with the client certificate or the
Microsoft account user token. The response may include text giving a reason for the authorization problem.
404: The API path or device specified was not found.
500: An unexpected error. If this persists, contact Microsoft for resolution of the issue.
503: Storage error. If this persists, contact Microsoft for resolution of the issue.
Building and flashing mobile images
7/12/2017 • 1 min to read • Edit Online
Here's information to help you build and flash images to your Windows 10 Mobile device.
2. Sign an image
No matter which method you used to customize and build your image, you'll need to cryptographically sign your
image before you can deploy it to a device.
Sign a full flash update (FFU) image
Windows Imaging and Configuration Designer (ICD) is a Windows provisioning tool that lets you streamline
customizing and provisioning a Windows image. It offers both a GUI or command-line interface that you can use to:
Configure settings and policies for a mobile image, including new customizations primarily focused on
enterprise and education-specific scenarios such as bulk enrollment and enterprise policies, and then build the
customized image.
Create a multivariant image by creating a provisioning package that defines targets and adds conditions that
specify when settings for a variant will be applied, and then using the provisioning package as input to building
a mobile image.
Use Windows ICD if you are building a device that is based on a reference design from a SoC vendor or if you are
looking for a simple and streamlined process for creating a mobile image.
You can use ImgGen.cmd to generate an image for a Windows 10 Mobile device that is based on your own
hardware design or if you're using MCSF customization answer files and other assets that were generated using
the legacy tools that shipped in Windows Phone 8.1.
Here's the high-level view of the steps you'll take to build an image using ImgGen.cmd:
1. Identify the packages to include in the image. For more info, see Getting packages for the image.
2. Reference the packages by adding them to one or more feature manifest files, and save those files in the
root directory for Microsoft packages, for example, %WPDKCONTENTROOT%\MSPackages. For more info,
see Specifying packages to include in images by using feature manifest files.
3. For each device platform, do the following:
a. Create a device platform package, and save it in the root directory for Microsoft packages. For more
info, see Set device platform information.
b. Reference the device platform package in a feature manifest file by using the
OEMDevicePlatformPackages element.
You can include several device platforms in a feature manifest file. The OEMInput file will specify
which device to use by its DeviceName.
Image creation will fail unless a valid device platform package is specified for the image.
4. Create an OEMInput file that specifies the device platform, the feature manifest files, and other attributes
used to define the image. For more info, see Creating an OEMInput file to define the image.
5. Create an MCSF customization answer file. At minimum, specify the required device platform information
and the information required for the mobile operator network. For more info, see Customization answer
file and Phone metadata in DeviceTargetingInfo.
Note If you want to support multivariant settings in the answer file, the same set of conditions are
supported in MCSF as in Windows provisioning. See the section Target, TargetState, Condition and
priorities in Create a provisioning package with multivariant settings for a list of supported conditions but
be sure to follow the schema for a MCSF customization answer file when you specify your Targets in the
answer file.
6. Run the ImgGen.cmd to build the image. For more info, see Using ImgGen.cmd to generate the image
below.
7. Sign the image so that it can be flashed to a device. For more info, see Sign a full flash update (FFU) image.
ECHO %WPDKCONTENTROOT%
Feature manifest files abstract the location and groupings of packages that Microsoft provides. This allows
for the specification of a group of related packages by specifying a single feature name. For example,
specifying the TESTINFRASTRUCTURE feature includes multiple packages that support test execution. For
more info, see Optional features for building images.
SoC vendor packages. These include packages for drivers and firmware components implemented by the
SoC vendor. For more info about these packages, refer to documentation provided by the SoC vendor.
Note
Several UEFI packages are required from the SoC vendor to create bootable images. These packages vary
depending on the layout of the device and the SoC vendor. Most of the packages populate binary
partitions on the device. For more info about creating binary partition packages to populate these
partitions, see Specifying components in a package project file. The EFI system partition (ESP) is populated
using Microsoft content and OEM content.
OEM packages. These are packages created by OEMs for content such as drivers and applications. For
info about creating packages, see Creating packages.
Note
To generate an image that
includes OS tools such as
ipconfig.exe, kill.exe, ping.exe,
minshutdown.exe, reg.exe,
tracelog.exe, sc.exe, and
tlist.exe, build a test image.
<Features>
<Microsoft>
<!-- Features from Microsoft OEMInput sample -->
<!-- Additional OEM-selected features defined by Microsoft
Include detailed comments about why each feature was chosen for this image -->
</Microsoft>
<OEM>
<!-- Additional OEM-selected features defined by the OEM
Include detailed comments about why each feature was chosen for this image -->
</OEM>
</Features>
2. When the OEM integrates a new WDK and MobileOS release, compare the Features elements in the
OEMInput sample from the latest release against the same elements in the OEMInput file created by the
OEM.
3. Identify any changes to the Microsoft-specified features in the latest sample, and port the changes into the
Features element in the OEMInput file created by the OEM.
ARGUMENT DESCRIPTION
OEMInputXML The name of the OEMInput xml file that defines the
image to be created. If this file is not in the current
directory, you must include the path to the file.
OEMCustomizationXML The path to the OEM customization XML file. For more
info about customization answer files, see Customization
answer file
OEMCustomizationVer The version number that will be used for the generated
OEM customization package.
Usage samples
The following sample shows the basic use of ImgGen.cmd.
Output files
After an image is successfully generated in the folder specified by the FFU_file command-line argument, the
imaging tools copy the following files to the folder of the output FFU file:
<FFUName>.ImageApp.log: This file contains all the logging information about creating the image. Any
failures are reported in this file as well as the Console window.
<FFUName>.UpdateOutput.xml: This file describes each of the packages applied to the image.
<FFUName>.UpdateHistory.xml: This file contains a list of all the update and imaging events that have
occurred on the image.
<FFUName>.UpdateInput.xml: This file lists all of the packages that are included in the image.
<FFUName>.PackageList.xml: This is a list of the package files contained in the image.
<FFUName>.cat: This is a code signing catalog that can be used to sign the image. For more info see, Sign
a full flash update (FFU) image.
If a customization answer file is provided, this file is generated:
<Owner>.<DeviceName>.Customizations.<Partition>.spkg
If any of the customizations include static applications, the following file will be generated.
<Owner>.<DeviceName>.CustomizationsApps.spkg
ARGUMENT DESCRIPTION
OEMInputXML The name of the OEMInput xml file that defines the
image to be created. If this file is not in the current
directory, you must include the path to the file.
OEMCustomizationVer This is the version number that will be used for the
generated OEM customization package.
Related topics
Building and flashing mobile images
OEMInput file contents
Sign a full flash update (FFU) image
Build a mobile image using a hybrid method
7/12/2017 • 2 min to read • Edit Online
You can take advantage of the benefits offered by both the Windows provisioning framework and MCSF by using a
hybrid method to build your customized mobile image. This means that:
You can use a MCSF customization answer file to fully customize the device hardware and connectivity
settings, preload apps, add assets such as ringtones and localized strings, and configure any other MCSF
settings not supported in Windows provisioning.
You can use a Windows provisioning answer file to define the new runtime settings, enterprise policies,
enrollment settings, and configure any other mobile settings supported only in Windows Provisioning.
You can use the Windows Imaging and Configuration Designer (ICD) CLI to build your image.
Note Only the Windows ICD CLI allows you to use both a MCSF customization answer file and a Windows
provisioning answer file to create a customized mobile image.
Related topics
Building and flashing mobile images
Define the image using OEMInput and feature
manifest files
7/12/2017 • 1 min to read • Edit Online
Learn how to create an OEMInput and feature manifest files to fully define the contents of your mobile image.
In this section
TOPIC DESCRIPTION
OEMInput file contents An OEMInput.xml file contains the required and optional
elements used to define a mobile image. The OS uses this
file to determine the applications processor, build type, UI
languages, default region format, resolution, and other
properties to include in the image that will be generated.
This topic provides a full listing of the XML schema for the
file.
Optional features for building mobile images You can add optional features to images by including
them under the Features element in the OEMInput XML
file.
Feature manifest file contents Feature manifest (FM) files are used to define specific
types of image builds that contain different sets of
optional packages. This topic describes the required and
optional elements in a FM file.
Create a feature and include it in an image This topic shows you how to create a feature and add it to
an image.
Adding a driver to a test image This topic shows you how to create a feature and add it to
a test image.
Feature groupings and constraints Feature groups and feature constraints allow additional
logic to be added to the build system to support
intelligent processing of the OEMInput XML.
Set device platform information Learn about the prerequisites for building an image that
can be flashed to a mobile device, including additional
device platform information such as partner names,
version numbers, and device names, before the image is
finalized for retail devices.
Related topics
Building and flashing mobile images
OEMInput file contents
7/13/2017 • 10 min to read • Edit Online
An OEMInput.xml file contains the required and optional elements used to define a mobile image. The OS uses
this file to determine the applications processor, build type, UI languages, default region format, resolution, and
other properties to include in the image that will be generated.
This topic provides a full listing of the XML schema for the file.
ELEMENT DESCRIPTION
SOC A string that identifies the SoC used on the device. The
following values are currently supported:
QC8974 QC8974:
Creates an
image without a
crash dump
partition. Use
this value for
Production
images.
QC8974_Test:
Creates an
image with a
crash dump
partition that is
more than 2 GB
in size. Use this
value when
generating Test
images for
devices with
more than 4 GB
of storage.
QC8x26 QC8x26:
Creates an
image without
any crash dump
partitions. Use
this value for
production
images.
QC8x26_Test:
ELEMENT APPLICATIO NS PRO CESSO R
DESCRIPTION SUPPO RTED SO C VALUES
Creates an
image with two
dedicated crash
dump partitions
on eMMC. The
combined size
of the two
partitions is 3.5
times the size of
the total RAM
memory on the
phone. To
create a test
image that
supports full
dumps and
offline dumps
on a device with
at least 8GB of
eMMC, use this
value and
include the
DEDICATEDUMP
ONEMMC
feature.
QC8x26_UseSD_
Test: Creates an
image without
dedicated
partitions for
storing crash
dumps on
devices with
less than 8 GB
of eMMC. To
create full,
kernel, or offline
crash dumps,
an SD card
must be present
and the feature
DEDICATEDUMP
ONSD feature
must be
specified to
redirect dumps
to the SD card.
The
recommended
SD card size for
offline dumps is
16 or 32 GB. For
more
information
about
specifying
debug features,
see Optional
features for
building
images.
To build a QC8x26 test
image that supports
full dumps and offline
dumps on a device with
less than 8GB of
eMMC, use
QC8x26_UseSD_Test.
Include the
DEDICATEDUMPONSD
feature to redirect
ELEMENT APPLICATIO NS PRO CESSO R
DESCRIPTION SUPPO RTED SO C VALUES
dumps to the SD card.
The recommended SD
card size for offline
dumps is 16 or 32 GB.
To build a QC8x26 test
image that supports
full dumps and offline
dumps on a device with
at least 8GB of eMMC,
use QC8x26_Test and
include the
DEDICATEDUMPONEM
MC feature.
To build a QC8x26
retail or production
image where full
dumps and offline
dumps are not
enabled, use QC8x26.
ELEMENT APPLICATIO NS PRO CESSO R
DESCRIPTION SUPPO RTED SO C VALUES
QC8960 QC8960:
Creates an
image without a
crash dump
partition. Use
this value for
Production
images.
QC8960_Test:
Creates an
image with a
crash dump
partition that is
more than 2 GB
in size. Use this
value when
generating Test
images for
phones with
more than 4 GB
of storage.
QC8960_Test_4
gb: Creates an
image with a
crash dump
partition that is
approximately
600 MB in size,
large enough to
store a single
crash dump for
a device with
512 MB of RAM.
Use this value
when
generating Test
images for
phones with
only 4 GB of
storage.
Important
The 8960 SOC
options must only be
used for images that
are used to create
updates for Windows
10 Mobile. For more
information see
Update.
ReleaseType A string that indicates the release type of the image. Use
this setting to include packages marked with the
corresponding ReleaseType attribute value of a
ReleasePackages element in the feature manifest file.
The following values are supported:
Production: This value indicates that all packages
in the image are production signed, and the
image only includes production packages (that is,
packages where the ReleaseType attribute in the
package XML is set to Production). In addition,
all Microsoft-owned packages must be signed
with a certificate issued by Microsoft. This value
should only be used when generating the final
retail image.
Test: This value indicates that the image can
contain test-signed packages as well as
production-signed packages, and the image
contains a mixture of production and test
packages (that is, packages where the
ReleaseType attribute in the package XML is set
to Test or Production). This value is used in
production, test, health, and manufacturing
images. For more information about the different
image types, see Building a phone image using
ImgGen.cmd.
BootUILanguage A string that specifies the language code for the default
display language to include in the image.
ELEMENT DESCRIPTION
BootLocale A string that specifies the language code for the default
region format for the image.
ELEMENT DESCRIPTION
Important
The PackageFiles element can only be used in pre-
retail images such as Test and Health images. It is only
intended to be used in scenarios you need to quickly
add an ad-hoc package to a pre-retail image. In retail
images, all packages must be referenced using a
feature that is listed under the Features element or
listed in a feature manifest that is referenced under the
AdditionalFMs element. For more information about
features and feature manifests, see Building a phone
image using ImgGen.cmd and Feature manifest file
contents.
Related topics
Building an image using ImgGen.cmd
Optional features for building mobile images
7/12/2017 • 17 min to read • Edit Online
You can add optional features to images by including them under the Features element in the OEMInput XML file. Adding a feature
will add the packages associated with the feature to the image. Some features can only be used with certain types of images. For
more information about using optional features, see Building an image using ImgGen.cmd.
Updates should be tested by submitting OS update requests using the Ingestion Client and verifying successful OS updates.
Conditional features
If a device meets the installation conditions listed for a feature in the following table, then the update path for the device will fail
unless the feature is installed. For example, if there’s an update for Rich Communications Suite Platform support for Windows 10
Mobile, and you removed that feature from a device that’s otherwise capable of using it, then that entire update package (and all
subsequent updates) will fail to install. To get updates again, you need to deliver an image that includes the feature to customers,
and have them re-flash the device.
Rich Communications Suite Platform support Windows 8.1 to Windows 10 Install if PhoneManufacturer=NOKIA
(RCS_FEATURE_PACK)
Update if installed
FEATURE DESCRIPTION
OPTIMIZED_BOOT Modifies the behavior of the OS boot process to start some system
processes and services before all device drivers are started.
Enabling this feature may decrease boot time, but it may also cause
regressions in boot behavior in some scenarios.
STANDARD_FEATURE_1 This feature includes standard features that must be included in all
images.
NAVIGATIONBAR This feature adds a phone setting that enables users to configure
the color of the software buttons.
SKYPE This feature includes the Skype Windows Phone Silverlight app in
the image.
BINGAPPS This feature adds Bing News, Finance, Sports and Weather.
COMMSENHANCEMENTGLOBAL The feature includes message and call filtering application in image.
COMMSENHANCEMENTCHINA The feature includes message&call filter, call location, and category
application in the image. It’s used for China only.
SPATIALSOUND_FILTERDATA Contains all the data files and registry keys necessary to enable
Spatial Audio functionality on a mobile device. Spatial audio is used
to make audio sound like it is coming from a specific direction, and
to make the audio sound like it exists naturally inside a specific type
of room.
MYANMAR_ZAWGYI_ENABLEMENT Enable this image to use the Zawgyi encoding in Myanmar. You
should also add the Zawgyi keyboard when adding this feature.
SOCProdTest_HSTI This feature installs the correct driver for the security watermark
checks and is required for Windows 10 Mobile. If this package is
not installed, you will see the Not For Retail watermark.
ATTWIFI This feature installs a third-party plugin that allows devices with an
AT&T SIM to automatically connect to AT&T hotspots.
DISABLE_ABNORMAL_RESET This feature disables abnormal resets and does not report it to
Watson.
RESET_PROTECTION This feature enables Reset Protection on a retail image. When the
device boots for the first time, the appropriate secure UEFI variable
are written.
PERF_TRACING_TOOLS Contains tools for doing performance analysis, such as tools for
stopping and merging ETL tracing.
MESSAGINGGLOBAL This feature installs the Messaging package that includes Skype
integration. It must be used for any devices except those being
submitted for NAL certification in China.
FieldMedicCustomProfiles This feature adds additional tracing profiles used by Field Medic.
RESET_PROTECTION_INTERNAL This feature enables Reset Protection on a test image. When the
device boots for the first time, the appropriate secure UEFI variable
are written.
BOOTSEQUENCE_TEST This feature includes the BCD boot sequence configuration for
booting into the full OS in a test image. This feature also includes a
pre-boot crash dump application and a pre-boot crash dump
entry.
Note
The following features are mutually exclusive; only one of them
can be referenced in an OEMInput file: BOOTSEQUENCE_TEST,
MMOSLOADER_TEST.
Note
The following features are mutually exclusive; only one of them
can be referenced in an OEMInput file: BOOTSEQUENCE_TEST,
MMOSLOADER_TEST.
PRODUCTION_CORE This feature adds production boot and main OS binaries to the
image. PRODUCTION_CORE automatically includes the following
features:
CODEINTEGRITY_PROD
Because these features are already included, they should not be
manually included in PRODUCTION_CORE builds.
Important
The device platform validation for flashing must not be disabled
in retail images.
RESET_PROTECTION_INTERNAL This feature enables Reset Protection on the device. When the
device boots for the first time, the appropriate secure UEFI variable
are written.
RELEASE_PRODUC PRODUCTION_CO
TION TEST HEALTH PRODUCTION SELFHOST RE
STARTUPOVERRIDES This feature starts the FTP service (ftpd.exe) and Telnet service
(telnetd.exe) automatically on startup.
LABIMAGE This feature causes the device to enter the FFU download mode
automatically when the device is booted. For more information, see
Use the flashing tools provided by Microsoft.
BOOTKEYACTIONS_RETAIL This feature enables a set of button actions for use in retail devices.
SKIPOOBE This feature disables the initial setup process wizard. This feature is
supported in Test, Health and Production image types. This feature
must not be used in Retail images.
FEATURE DESCRIPTION
CODEINTEGRITY_PROD This feature includes code integrity binaries that are used for
signature verification on production images. Code integrity verifies
the integrity of binary files as they are loaded into memory by the
operating system. This feature is automatically included when
PRODUCTION_CORE is selected. Because of this,
CODEINTEGRITY_PROD should not be manually added when
PRODUCTION_CORE is selected.
CODEINTEGRITY_TEST This feature includes code integrity binaries that are used for
signature verification on test images. Code integrity verifies the
integrity of binary files as they are loaded into memory by the
operating system.
FEATURE DESCRIPTION
TEST This feature adds many test drivers, applications, and other
components to be used for testing the OS in different conditions.
HEALTH This feature adds components for running tests related to power
and performance.
FEATURE DESCRIPTION
KDNETUSB_ON Includes all kernel debugger transports and enables KDNET over
USB.
The default debug transport settings for this feature are an IP
address of "1.2.3.4", a port address of "50000", and a debugger key
of "4.3.2.1". To use the default IP address of 1.2.3.4, run VirtEth.exe
with the /autodebug flag. To establish a kernel debugger
connection to the phone, use the following command.
Windbg -k net:port=50000,key=4.3.2.1
Note
Do not include either KDUSB_ON or KDNETUSB_ON if you need to
enable MTP or IP over USB in the image. If the kernel debugger is
enabled in the image and the debug transports are used to
connect to the device, the kernel debugger has exclusive use of
the USB port and prevents MTP and IP over USB from working.
KDSERIAL_ON Includes all kernel debugger transports and enables KDSERIAL with
the following settings: 115200 Baud, 8 bit, no parity.
KD Includes all kernel debugger transports in the image, but does not
enable the kernel debugger.
KD_TEST Includes all kernel debugger transports in the image, but does not
enable the kernel debugger.
KDNETUSB_TEST_ON Includes all kernel debugger transports and enables KDNET over
USB in test images. This option must only be used with test
images.
FEATURE DESCRIPTION
DUMPSIZE512MB Specifies a pre-allocated crash dump file size of 592 MB. This is
intended for a phone with 512 MB of memory.
DUMPSIZE1G Specifies a pre-allocated crash dump file size of 1104 MB. This is
intended for a phone with 1024 MB of memory.
DUMPSIZE2G Specifies a pre-allocated crash dump file size of 2128 MB. This is
intended for a phone with 2048 MB of memory.
FEATURE DESCRIPTION
Dump data storage location - The next two settings control if crash
dump data is stored on eMMC or if crash dump data is stored on
an SD card. Only one of these settings can be selected at a time.
These two features must only be used with the Test, Health and
Selfhost image types. These features must not be used with retail
images.
Test disk idle power behavior - The next two settings determine if
storage devices (internal and SD card) can enter into a low power
state after they become idle. They must not be used with retail
images.
TEST_ENABLE_DISK_IDLE This feature will allow the storage devices (internal and SD card) to
go into a low power state shortly after they become idle. This
setting may prevent the collection of crashdumps on the
MSM8960 processor devices. If crashdumps need to be gathered
from an MSM8960 device, use the TEST_DISABLE_DISK_IDLE
feature instead.
TEST_DISABLE_DISK_IDLE This feature will prevent the storage devices (internal and SD card)
from going into a low power state after they become idle. This
setting should be used if crashdumps need to be gathered from
MSM8960 devices.
DRVRF_SIPLAT Sets driver verifier parameters for OEM and SoC drivers. This
feature sets the VerifyDriverLevel to a value of 002209BB and
VerifierOptions to 00000009. Windows drivers provided by
Microsoft are excluded using the VerifyDrivers key. You can use the
following debug command to list the drivers that are being verified
in your environment.
!verifier 1
FEATURE DESCRIPTION
MSVCRT_DEBUG This feature adds support for explicit linking of debug c-runtime
libs by including msvcp120d.dll and msvcr120d.dll in the image.
For more information, see this topic on MSDN: CRT Library
Features.
MWDBGSRV This feature adds support for the user mode debug server.
TELEMETRYONSDCARD This feature enables temporary storage of debugging logs and files
on the SD card. This feature is only appropriate for test/self-host
images and only on devices with less than 8 GB of free space of
primary storage.
Non-production features
The following are some features that can be used for development and testing support.
FEATURE DESCRIPTION
DISABLEPREBOOTCRASHDUMP This feature adds a registry setting that disables offline crash
dumps.
ALWAYSKEEPMEMORYDUMP This feature adds a registry setting that tells the device to keep
kernel dump files.
AUTOREBOOT This feature adds a registry setting that restarts the device
immediately after a crash dump is complete.
DISABLEDEBUGCHECKSCREEN This feature adds a registry setting that suppresses the bug check
screen.
Other features
FEATURE DESCRIPTION
FAKEVIBRA This feature adds a test hardware notification driver for controlling
the vibration feedback mechanism.
IMGFAKELED This feature adds a test hardware notification driver for controlling
LEDs to the image.
LOCATIONFRAMEWORKAPP This feature adds LFApp, a test and debug application for the
location framework.
GRAPHICSSOFTWAREDRIVERS This feature adds BasicDisplay and WARP graphics drivers. This
feature is normally used by the SoC vendor in early device bring-
up.
FEATURE DESCRIPTION
Related topics
Building and flashing images
Feature manifest file contents
7/13/2017 • 24 min to read • Edit Online
Feature manifest (FM) files are used to define specific types of image builds that contain different sets of optional
packages. This topic describes the required and optional elements in a FM file. For more information about how
FM files are used while generating images, see Building a phone image using ImgGen.cmd.
Note
Most of the elements in a FM file include a path to a package. If the package is under the root directory for
Microsoft packages (%WPDKCONTENTROOT%\MSPackages), this path can use the $(mspackageroot) macro in
the path name. If the package is in some other location, you can use an environment variable, such as
%oempackageroot%, and set this environment variable in the command-line window.
Example FM file
The following example shows a sample OEM FM file.
You may wish to examine MSOptionalFeaturesFM.xml that is included with the mobileOS packagesunder
%WPDKCONTENTROOT%\FMFiles to see additional FM XML files.
Elements in a FM file
The following sections describe the supported elements in a FM file.
FeatureManifest
The FeatureManifest element is the root XML element in the FM file. This element is the base container element
for all other elements in the file. It must occur only once.
BasePackages
The BasePackages element specifies packages that are always included in the image if the FM file is referenced
in the AdditionalFMs element of the OEMInput XML file. The BasePackages element has no supported
attributes.
The following table describes the child elements of the BasePackages element.
ELEMENT DESCRIPTION
ELEMENT DESCRIPTION
Features
There are both Microsoft and OEM elements, each of which can contain Features. The OEM should only add
their features to the <OEM> element. This provides multiple benefits, including the easier integration of newer
versions of the OEMInput.xml files into the OEM’s build system.
The Features element defines one or more optional features that can be referenced in the Features element in
the OEMInput file to include optional packages in the image. The Features element has no supported attributes.
The following table describes the child elements of the Features element.
ELEMENT DESCRIPTION
ELEMENT DESCRIPTION
PrereleasePackages
Describes packages that can be excluded using the ExcludePrereleaseFeatures element in the OEMInput file.
For more information, see OEMInput file contents.
ELEMENT DESCRIPTION
Important
No replacement packages should be included
in a retail image.
SOCPackages
The SOCPackages element specifies packages that are included in images that are generated for a specific SoC,
as specified by the SOC element in the OEMInput file. The SOCPackages element has no supported attributes.
The following table describes the child elements of the SOCPackages element.
ELEMENT DESCRIPTION
SVPackages
The SVPackages element specifies packages that are included in images that are generated for a specific SoC
manufacturer, as specified by the SV element in the OEMInput file. The SVPackages element has no supported
attributes.
The following table describes the child elements of the SVPackages element.
ELEMENT DESCRIPTION
OEMDevicePlatformPackages
The OEMDevicePlatformPackages element specifies the device platform package to include in an image for a
specific device type. OEMs must specify the device platform package by using this element in a FM file. For more
information about device platform packages, see Set device platform information. The
OEMDevicePlatformPackages element has no supported attributes.
The following table describes the child elements of the OEMDevicePlatformPackages element.
ELEMENT DESCRIPTION
ELEMENT DESCRIPTION
DeviceSpecificPackages
The DeviceSpecificPackages element specifies packages to include in images that are generated for a specific
device type, as specified by the Device element in the OEMInput file. The DeviceSpecificPackages element has
no supported attributes.
The following table describes the child elements of the DeviceSpecificPackages element.
ELEMENT DESCRIPTION
ELEMENT DESCRIPTION
BootLocalePackageFile
Reserved for internal Microsoft use. This element should not be used by OEMs.
ELEMENT DESCRIPTION
DeviceLayoutPackages
Reserved for internal Microsoft use. This element should not be used by OEMs.
ELEMENT DESCRIPTION
ELEMENT DESCRIPTION
KeyboardPackages
Reserved for internal Microsoft use. This element should not be used by OEMs.
ELEMENT DESCRIPTION
ELEMENT DESCRIPTION
SpeechPackages
Reserved for internal Microsoft use. This element should not be used by OEMs.
ELEMENT DESCRIPTION
ELEMENT DESCRIPTION
Related topics
Building a phone image using ImgGen.cmd
Create a feature and include it in an image
7/13/2017 • 4 min to read • Edit Online
This topic shows you how to create a feature and add it to an image.
<Macros>
<Macro Id="testDir" Value="\test" />
</Macros>
<Components>
<OSComponent>
<Files>
<File Source="TestApplication.exe" DestinationDir="$(testDir)" />
</Files>
</OSComponent>
</Components>
</Package>
You can update the owner and platform attributes to match the name of your organization name and the
name of your device. These attribute changes will modify the name of the generated package.
The <Macro> element is used to specify the \data\test destination directory on the device.
3. Open an administrator command prompt window to build the package.
4. Display the environment variables by typing SET in the command prompt window. Look for
WPDKCONTENTROOT to confirm that the build environment is properly configured.On a Windows 64-bit
PC, the path should look similar to the following.
...
WPDKCONTENTROOT=C:\Program Files (x86)\Windows Phone Kits\10
5. Generate the package using PkgGen. Provide the version number of 1.0.0.0. The /config parameter points to
the location of the pkggen.cfg.xml file.
6. If PkgGen creates the package successfully, it should return output that is similar to the following.
info: Using external macro file: 'C:\Program Files (x86)\Windows Phone Kits\10\
Tools\bin\i386\pkggen.cfg.xml'
info: Building project file C:\TestApplication\TestApplication.
pkg.xml
info: Building package '.\Contoso.TestApps.TestApplication.spkg'
info: Adding file 'TestApplication.exe' to package '.\Contoso.TestApps.TestApplication.spkg' as
'\test\TestApplication.exe'
info: Done package ".\Contoso.TestApps.TestApplication.spkg"
info: Packages are generated to . successfully
For more information about working with packages, see Creating packages.
Create the feature manifest file
Create a feature manifest file that will define a TEST_APP OEM feature by completing the following steps.
1. Create a feature manifest file named OEMCustomAppFM.xml in the following directory:
%WPDKCONTENTROOT%\FMFiles
2. Define the TEST_APP feature by adding the following XML to the OEMCustomAppFM.xml file.
For more info about feature manifests, see Feature manifest file contents.
Add the feature to the OEMInput file
Add the TEST_APP OEM feature to the OEMInput.xml file by completing the following steps.
1. This walkthrough assumes that you have an existing, functional test OEMInput file that enables TShell. For
more information about creating test images, see Building and flashing images. For more information about
specifying optional features, see Optional features for building images.
2. Edit the OEMinput.xml file to include the OEMCustomAppFM.xml feature manifest file that you created in the
previous step. The XML will be similar to the following.
...
<AdditionalFMs>
...
<AdditionalFM>%WPDKCONTENTROOT%\FMFiles\OEMCustomAppFM.xml</AdditionalFM>
</AdditionalFMs>
3. Later in the <Features> section of the OEMInput.xml file add the new TEST_APP feature to the list of existing
features.
<Features>
<Microsoft>
...
</Microsoft>
<OEM>
...
<Feature>TEST_APP</Feature>
</OEM>
</Features>
2. Before you can sign images, you must first install the test OEM certificates on the PC by following the steps
in Set up the signing environment.
3. Sign the generated catalog using the /pk option.
4. Sign the FFU with the signed catalog file using ImageSigner.
For more information about generating and flashing images, see Building and flashing images.
Verify that the TestApplication executes as expected
Verify that the TestApplication executes as expected by completing the following steps.
1. Configure a TShell connection to test the image.
2. Establish a connection to the device using the Open-device TShell command. Provide the MAC address of
the device.
3. Confirm that the TestApplication is on the device by using the TShell Dir-Device command. The short form
of the command, DirD, is shown.
4. Execute the application by entering the Exec-Device cmdlet in the TShell window. The Exec-Device cmdlet
starts a process on the connected device. By default, the Exec-Device cmdlet waits for the process to exit
before returning. Use the -Async switch to return immediately. Use the –displayoutput parameter to echo the
output.
This topic shows you how to create a feature and add it to a test image.
...
{
WDF_DRIVER_CONFIG config;
NTSTATUS status;
WDF_OBJECT_ATTRIBUTES attributes;
//
// IoReportRootDevice routine reports a device that cannot be detected by
// a PnP bus driver to the PnP Manager. This allows our software-only
// driver to remain loaded.
IoReportRootDevice(DriverObject);
//
// Initialize WPP tracing.
//
WPP_INIT_TRACING( DriverObject, RegistryPath );
TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DRIVER, "%!FUNC! Entry");
...
4. Save Driver.c.
5. To build your driver and create a driver package, choose Build Solution from the Build menu. Visual Studio
displays the build progress in the Output window. (If the Output window is not visible, choose Output from
the View menu.)
6. To view the built driver package, navigate in Windows Explorer to your KmdfDriver1 folder, and then to
ARM\Win8.1Debug\. This directory contains the following files:
KmdfDriver1.sys - A kernel-mode driver file.
KmdfDriver1.inf - An information file that Windows uses to install the driver.
KmdfDriver1.pdb – A file that contains the debug symbols that will be used for debugging.
KmdfDriver1.cat - A catalog file that is not used in this walkthrough.
There are also co-installer files for the Windows Driver Frameworks (WDF) that will not be used with
Windows Phone.
7. Because of the differences in Windows 10 Mobile INF files, we will not use the desktop INF file that is
generated by Visual Studio.
;
; KmdfDriver1.inf
;
[Version]
Signature="$WINDOWS NT$"
Class=System
ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318}
Provider=%MSFT%
DriverVer=11/01/2012,1.00.00.00
BootCritical=1
[DestinationDirs]
DefaultDestDir = 12
[Manufacturer]
%StdMfg%=KMDFDriver1_DevDesc, NTARM, NTx86
;*******************************
;** models section (required) **
;*******************************
; For ARM platforms
[KMDFDriver1_DevDesc.NTARM]
; DisplayName Section DeviceId
; ----------- ------- --------
%KMDFDriver1_DevDesc%=KMDFDriver1, Root\KMDFDriver1
; For Win2K+
[KMDFDriver1_DevDesc.NTx86]
; DisplayName Section DeviceId
; ----------- ------- --------
%KMDFDriver1_DevDesc%=KMDFDriver1, Root\KMDFDriver1
;********************************
;* ddinstall section (required) *
;********************************
[KMDFDriver1.NT]
CopyFiles=KMDFDriver1.NT.Copy
[KMDFDriver1.NT.Copy]
KMDFDriver1.sys
[KMDFDriver1.NT.Services]
AddService = KMDFDriver1, %SPSVCINST_ASSOCSERVICE%, KMDFDriver1_Service_Inst
[KMDFDriver1_Service_Inst]
DisplayName = %KMDFDriver1_DevDesc%
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_SYSTEM_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
ServiceBinary = %12%\KMDFDriver1.sys
[Strings]
SPSVCINST_ASSOCSERVICE= 0x00000002
MSFT = "Microsoft"
KMDFDriver1_DevDesc = "KMDF Driver 1"
SERVICE_KERNEL_DRIVER = 1
SERVICE_AUTO_START = 2
SERVICE_SYSTEM_START = 1
SERVICE_BOOT_START = 0
SERVICE_ERROR_NORMAL = 1
```
1. Sign the driver using the following commands:
C:>set SIGN_OEM=1
sign KMDFDriver1.sys
You can update the owner and platform attributes to match the name of your organization name and the
name of your device. These attribute changes will modify the name of the generated package.
Specify the Windows\System32\Drivers directory on the device using the $(runtime.system32) macro.
3. The next step is to generate the package by opening an administrator command prompt window.
4. Display the environment variables by typing SET in the administrator command prompt window. Look for
WPDKCONTENTROOT to confirm that the build environment is properly configured. You should see that
WPDKCONTENTROOT is set. On a Windows 64-bit PC, the path should look similar to the following.
...
WPDKCONTENTROOT=C:\Program Files (x86)\Windows Kits\10
5. Generate the package using PkgGen. Provide the version number of 1.0.0.0. The /config parameter points to
the location of the pkggen.cfg.xml file provided with the Windows DriverKit. The /hive parameter points to
the location of the hive root.
6. If PkgGen creates the package successfully, it will display many lines of information as the registry entries
are created based on the provided INF file. The last part of the output will be similar to the following.
...
info: Import Log: : sto: Unloaded hive key '{bf1a281b-ad7b-4476-ac95-f47682
990ce7}C:/Users/User1/AppData/Local/Temp/gs5gvfgc.pou/windows/system32/config/S
OFTWARE'. Time = 0 ms
info: Import Log: : <<< Section end 2015/08/06 13:10:22.413
info: Import Log: : <<< [Exit status: SUCCESS]
info: Import Log: :
info: Import Log: :
info: Import Log: : >>> [Unload Offline Registry Hive - DRIVERS]
info: Import Log: : >>> Section start 2014/08/06 13:10:22.413
info: Import Log: : os: Version = 6.3.9600, Service Pack = 0.0, Suite = 0
x0100, ProductType = 1, Architecture = x86
info: Import Log: : cmd: PkgGen KmdfDriver1.pkg.xml /version:1.0.0.0 /var
iables:"HIVE_ROOT=C:\Program Files (x86)\Windows Kits\10\CoreSystem" /con
fig:"C:\Program Files (x86)\Windows Kits\10\Tools\bin\i386\pkggen.cfg.xml
"
info: Import Log: : sto: Closed hive key '{bf1a281b-ad7b-4476-ac95-f4768299
0ce7}C:/Users/User1/AppData/Local/Temp/gs5gvfgc.pou/windows/system32/config/DRI
VERS'.
info: Import Log: : sto: Unloaded hive key '{bf1a281b-ad7b-4476-ac95-f47682
990ce7}C:/Users/User1/AppData/Local/Temp/gs5gvfgc.pou/windows/system32/config/D
RIVERS'. Time = 0 ms
info: Import Log: : <<< Section end 2014/08/06 13:10:22.513
info: Import Log: : <<< [Exit status: SUCCESS]
info: Import Log: :
info: Building package '.\Contoso.Phone.Test.BaseOS.KmdfDriver1.spkg'
info: Adding file 'KmdfDriver1.sys' to package '.\Contoso.Phone.Test.BaseOS.Kmdf
Driver1.spkg' as '\windows\System32\drivers\KmdfDriver1.sys'
info: Adding file 'C:\Users\User1\AppData\Local\Temp\5bgjkx3p.j01\reg.reg' to p
ackage '.\Contoso.Phone.Test.BaseOS.KmdfDriver1.spkg' as '\Windows\Packages\Regi
stryFiles\Contoso.Phone.Test.BaseOS.KmdfDriver1.reg'
info: Adding file 'C:\Users\User1\AppData\Local\Temp\5bgjkx3p.j01\regMultiSz.rg
a' to package '.\Contoso.Phone.Test.BaseOS.KmdfDriver1.spkg' as '\Windows\Packag
es\RegistryFiles\Contoso.Phone.Test.BaseOS.KmdfDriver1.rga'
info: Done package ".\Contoso.Phone.Test.BaseOS.KmdfDriver1.spkg"
info: Packages are generated to . successfully
For more information about working with packages, see Creating packages.
Create a feature manifest file that references the package
Create a feature manifest file that will define a DRIVER1 OEM feature by completing the following steps.
1. Create a feature manifest file named OEMCustomAppFM.xml in the following directory.
%WPDKCONTENTROOT%\FMFiles
2. Define the DRIVER1 feature by adding the following XML to the OEMCustomDriverFM.xml file. Update the
package name to match the name of the package file generated in the previous step.
<?xml version="1.0" encoding="utf-8"?>
<FeatureManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate">
<!-- DRIVER1 FM File 7/31/2014 -->
<Features>
<OEM>
<PackageFile Path="C:\KmdfDriver1\" Name="Contoso.Phone.Test.BaseOS.KmdfDriver1">
<FeatureIDs>
<FeatureID>DRIVER1</FeatureID>
</FeatureIDs>
</PackageFile>
</OEM>
</Features>
</FeatureManifest>
For more information about feature manifests, see Feature manifest file contents.
Add the feature to the OEMInput.xml file
Add the DRIVER1 feature to the OEMInput.xml file by completing the following steps.
1. This walkthrough assumes that you have an existing, functional test OEMInput file that enables TShell. For
more information about creating test images, see Building and flashing images. For more information about
specifying optional features, see Optional features for building images.
Confirm that that you are using a test image that has debugging enabled. For more information, see
Optional features for building images.
2. Edit the OEMinput.xml file to include the OEMCustomAppFM.xml feature manifest file that you created in the
previous step. The XML will be similar to the following.
...
<AdditionalFMs>
...
<AdditionalFM>%WPDKCONTENTROOT%\FMFiles\OEMCustomDriverFM.xml</AdditionalFM>
</AdditionalFMs>
3. In the <Features> section of the OEMInput.xml file, add the new DRIVER1 feature to the list of existing
features.
<Features>
<Microsoft>
...
</Microsoft>
<OEM>
...
<Feature>DRIVER1</Feature>
</OEM>
</Features>
2. Before you can sign images, you must first install the test OEM certificates on the PC by following the steps
in Set up the signing environment.
3. Sign the generated catalog using the Sign.cmd with the /pk option.
4. Sign the FFU with the signed catalog file using ImageSigner.
For more information about generating and flashing images, see Building and flashing images.
Verify that the KMDFDriver1 is on the device
Verify that the KMDFDriver1 is present on the device by using TShell.
1. Configure a TShell connection to test the image.
2. Establish a connection to the device using the Open-device TShell command. Provide the MAC address of
the device.
3. Confirm that the KMDFDriver1 is on the device by using the Dir-Device TShell command. The short form of
the command, DirD, is shown.
5. Enable debug output for KdPrint(), KdPrintEx(), and DbgPrint() messages by setting a registry key. Set the
registry key so that it is persistent across reboots (for non-retail images) by using the RegD Add TShell
command.
DEVICE C:\
PS C:\Windows\system32> RegD Add "HKLM\SYSTEM\ControlSet001\Control\Session Manager\Debug Print Filter"
/v DEFAULT /t REG_DWORD /d 0xFFFFFFFF
DEVICE C:\
PS C:\Windows\system32> RegD Query "HKLM\SYSTEM\ControlSet001\Control\Session Manager\Debug Print
Filter"
…
WDF_DRIVER_CONFIG config;
NTSTATUS status;
WDF_OBJECT_ATTRIBUTES attributes;
Warning
The debug break statement will stop the phone from booting unless a debugger is attached to the device.
3. Rebuild the project in Visual Studio.
4. If necessary, copy the updated .sys file to the directory that you will use to create to generate the package.
5. Then, repeat the steps described above to:
a. Generate an updated driver package.
b. Generate, sign, and flash the image.
Note
It is also possible to update the version of the driver by including the driver version in the INF file and then
using the IUTool to deploy the updated driver to the phone. For more information about using IUTool, see
IUTool.exe: Update packages on a phone. This process is similar to the process that is used to create a driver
update. For more information about that, see Update a KMDF device driver.
6. Set up a KDNET over USB connection to the phone for debugging.
7. Start the Windows debugger.
windbg -k net:port=5000,key=1.2.3.4
8. After the device has booted, it will hit the break point and code execution will stop. The debugger will
indicate that break point has been hit.
9. Set the symbol path to the location of the Windows Driver Kit symbols and reload the symbols.
.SYMPATH+ C:\SYMBOLS
.reload /f
10. Set the source path to the location of your .c source code that you created earlier in Visual Studio.
.srcpath+ C:\KMDFDriver1\Source\
0: kd> k
# Child-SP RetAddr Call Site
00 85679c68 90fd2abe KMDFDriver1!DriverEntry+0xa
01 85679ce0 90fd2b38 KMDFDriver1!FxDriverEntryWorker+0x6a
02 85679d00 81770990 KMDFDriver1!FxDriverEntry+0x18
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntkrnlmp.exe -
03 85679d10 818f8004 nt!SeTokenIsAdmin+0x1790
04 85679e10 8190d630 nt!KeFindConfigurationNextEntry+0x7c48
05 85679e68 8185719e nt!KeHwPolicyLocateResource+0x4698
06 85679e70 814c5e0c nt!IoReplacePartitionUnit+0x192
07 85679e80 81460172 nt!IoAllocateIrp+0x57c
08 85679ec8 00000000 nt!KiDispatchInterrupt+0x234a
The call stack is the chain of function calls that have led to the current location of the program counter. The
top function on the call stack is the current function, and the next function is the function that called the
current function, and so on.
12. Display symbol information associated with KMDFDriver1 using the x command.
0: kd> x KMDFDriver1!*
90fd4750 KMDFDriver1!WdfDriverGlobals = 0x88ff4de8
90fd4754 KMDFDriver1!WdfDriverStubDriverObject = 0x88fed768
90fd4004 KMDFDriver1!__security_cookie_complement = 0x568f867
90fd336c KMDFDriver1!__gsfailure_xdata_end = <unknown base type 80000013>
90fd33b4 KMDFDriver1!__memcpy_reverse_large_neon_xdata = <unknown base type 80000013>
90fd30c0 KMDFDriver1!WPP_c0dfc8e231dc218098dc0c2ed20d6e73_Traceguids = struct _GUID [1]
90fd30a0 KMDFDriver1!GUID_DEVINTERFACE_KmdfDriver1 = struct _GUID {e7a4cfb0-56d4-4234-bf60-
fe627cb5e981}
90fd474c KMDFDriver1!WdfDriverStubDisplacedDriverUnload = 0x00000000
90fd3370 KMDFDriver1!memcpy_xdata_prolog = <unknown base type 80000013>
90fd3388 KMDFDriver1!__memcpy_forward_large_neon_xdata = <unknown base type 80000013>
90fd4758 KMDFDriver1!WdfDriverStubOriginalWdfDriverMiniportUnload = 0x00000000
13. List information about the modules on KMDFDriver1 by using the lm m command.
0: kd> lm m KMDFDriver1 v
Browse full module list
start end module name
90fd1000 90fd9000 KMDFDriver1 (private pdb symbols) c:\kmdfdriver1\KmdfDriver1.pdb
Loaded symbol image file: KMDFDriver1.sys
Image path: KMDFDriver1.sys
Image name: KMDFDriver1.sys
Browse all global symbols functions data
Timestamp: Thu Jul 31 14:39:34 2014 (53DAB796)
CheckSum: 000037D2
ImageSize: 00008000
Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e
14. Load the WDF driver extensions using the .load command.
.load C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\winext\Wdfkd.dll
15. Confirm that the WDF debug extension is loaded by using the !wdfkd.help WDK driver extension help
command.
!wdfkd.help
16. Display information about the driver using the !wdfkd.wdfdriverinfo command.
17. End the debugging session using the qd quit and detach command.
0: kd> qd
Feature groupings and constraints
7/13/2017 • 3 min to read • Edit Online
Feature groups and feature constraints allow additional logic to be added to the build system to support intelligent
processing of the OEMInput XML.
Feature groupings
Feature groupings allow for better management of optional features and allow the organization of packages for
easier management. Feature grouping is used to implement feature constraints by Microsoft and optionally, by the
OEM.
Feature constraints
Feature constraints can be specified to avoid illogical or inappropriate build configurations.
Some settings are mutually exclusive and only one setting should be specified at a time. For example, consider the
features, RELEASE_PRODUCTION and RELEASE_TEST. These features are mutually exclusive. This means that if
RELEASE_TEST is set, RELEASE_PRODUCTION must not be set.
Constraints are grouped at the Microsoft and OEM level of features. OEMs cannot override Microsoft constraints.
The following constraints are supported:
The following XML sample illustrates the use of constraints to appropriately restrain the fake modem feature.
<Features>
<Microsoft>
<FeatureGroup Constraint="OneAndOnlyOne">
<FeatureIDs>
<FeatureID>MS_IMGFAKEMODEM</FeatureID>
<FeatureID>MS_IMGNOFAKEMODEM</FeatureID>
</FeatureIDs>
</FeatureGroups >
</Microsoft>
</Features>
The constraints in the sample specify that either IMGFAKEMODEM or IMGNOFAKEMODEM must be selected. Both
values cannot be set at the same time. One and only one value must be set at a time. This constraint is required
because the fake modem test feature must either be enabled or disabled.
The following XML sample illustrates the use of constraints to appropriately restrain the production build settings.
This sample shows how multiple constraints can be associated with a single feature.
<Features>
<Microsoft>
<FeatureGroups>
<FeatureGroup Constraint="ZeroOrOne">
<FeatureIDs>
<FeatureID>RELEASE_PRODUCTION</FeatureID>
<FeatureID>MS_CODEINTEGRITY_PROD</FeatureID>
</FeatureIDs>
</FeatureGroup>
<FeatureGroup Constraint="ZeroOrOne">
<FeatureIDs>
<FeatureID>RELEASE_PRODUCTION</FeatureID>
<FeatureID>MS_DISABLETESTSIGNING</FeatureID>
</FeatureIDs>
</FeatureGroup>
</Microsoft>
</Features>
These settings in the sample specify that PRODUCTION_CORE is mutually exclusive with RELEASE_PRODUCTION
and TEST, but is not mutually exclusive with HEALTH, PRODUCTION, or SELFHOST.
For additional information about the build features, see Optional features for building images.
<Features>
<OEM>
<PackageFile Path="%oempackageroot%\test\"
Name="Contoso.Test.MinTE.spkg">
<FeatureIDs>
<FeatureID>TEST_FEATURE1</FeatureID>
</FeatureIDs>
</PackageFile>
</OEM>
</Features>
To create a feature constraint to make sure this test feature is only shipped with test release types, use the
following XML.
<FeatureGroup Constraint="ZeroOrOne">
<FeatureIDs>
<FeatureID>RELEASE_PRODUCTION</FeatureID>
<FeatureID>OEM_TEST_FEATURE1</FeatureID>
</FeatureIDs>
</FeatureGroup>
Related topics
Optional features for building images
Set device platform information
10/26/2017 • 6 min to read • Edit Online
To prepare for building an image, OEMs must perform the following tasks to specify required information for the
targeted device platform:
Set several device platform values in the SMBIOS system information structure on the devices.
Build a device platform package.
The engineering flashing tool set provided by Microsoft compares the values in the SMBIOS system information
structure with corresponding values in the device platform package before flashing an image. This check helps to
ensure that an image can be flashed to a particular device only if it was built for the corresponding device
platform. It is recommended that the flashing tools that OEMs create for their manufacturing environments do the
same verification. For more information, see Validating the device platform information before flashing an image
to a device in this topic.
Note
This topic describes prerequisites for building an image that can be flashed to a device. OEMs must set additional
device platform information including partner names, version numbers, and device names before an image is
finalized for retail devices.
ELEMENT DESCRIPTION
DevicePlatformIDs OEMs can set multiple device platform IDs using the
following XML syntax, where each string has the same
format as described for the DevicePlatformID element.
<DevicePlatformIDs>
<ID>Contoso.ContosoPhoneFamily.Z101._012</ID>
<ID>Contoso.ContosoPhoneFamily.Z101._013</ID>
<ID>Contoso.ContosoPhoneFamily.Z102</ID>
</DevicePlatformIDs>
<MainOSRTCDataReservedSectors>102400</MainOSRTCD
ataReservedSectors>
<CompressedPartitions>
<Name>MainOS</Name>
</CompressedPartitions>
Related topics
Developing custom OEM flashing tools
Use the flashing tools provided by Microsoft
Sign a full flash update (FFU) image
7/13/2017 • 5 min to read • Edit Online
You must cryptographically sign an FFU image before you can deploy it to a device. This step is required to help
prevent tampering and malicious attacks. You can only flash images to a Windows 10 Mobile device after they are
properly signed.
The OEM must sign the FFU image using a certificate that chains to the UEFI PK boot key that an OEM provisions.
During development and testing, a test certificate is used to sign the FFU image instead of a retail certificate. Use
the secure boot test tool to provision the appropriate test certificates to the device
For retail phones, retail certificates are provisioned on the device using retail secure boot tools.
3. Open a developer prompt with administrator rights in the directory that contains the output from the
image generation process.
4. Confirm that you have the latest version of the kit that includes updated versions of imagesigner.exe and
imagecommon.dll by typing the following command. Confirm that the truncate option is displayed.
C:\> ImageSigner /?
Usage:
imagsigner sign <FFU> <catalog file>
imagesigner getcatalog <FFU> <catalog file>
imagesigner truncate <FFU> <truncated FFU>
If you do not have a recent version of the kit that includes the updated ImageSigner, download and install
the latest kit.
5. Extract the first one MB of the FFU image which contains the FFU catalog and associated metadata using
the truncate option.
C:\> ImageSigner TRUNCATE OEM.ffu OEM.trunc
7. Validate that the <OEMID> returned in Step 6 is identical to the OEMID assigned to you by Microsoft.
8. Create and submit a TFS ticket to the Microsoft Service Desk to sign the FFU catalog. Ensure that you attach
the truncated FFU image that you created in Step 4.
a. Open an Update type ticket.
b. For the ticket title, enter FFU Catalog Signing Request from <OEMID>. Specify your OEM ID in the
ticket tile where <OEMID> is shown.
c. Set the Category to Ingestion and Publishing.
d. Set the Issue Type to New.
9. Microsoft will process the request and resolve the ticket back to the OEM. Within the resolved ticket,
Microsoft will include a retail signed version of the FFU catalog extracted from the FFU truncated image
attached to the original ticket. For this example, assume that Microsoft returns the signed FFU catalog
named OEM.cat.
10. Sign the FFU with the retail Microsoft signed catalog file using ImageSigner.
11. Flash the retail signed retail image on to a device and verify that it behaves as expected.
12. After the retail signed image has been tested it can be used to flash to retail devices. For more information
see Flashing tools and Use the flashing tools provided by Microsoft.
Important
Secure all of the retail signed binaries using industry best practices.
3. Open a developer prompt with administrator rights in the directory that contains the output from the
image generation process.
4. Extract the catalog of the unsigned FFU file.
6. Sign the FFU with the signed catalog file using ImageSigner.
Important
You should only use the signtool.exe with the local file /f option internally in a development test
environment. When a hardware security modules (HSM) is used, the /csp option is used to specify the
cryptographic service provider (CSP) that contains the private key container. You should follow industry
best practices when signing image update packages for final distribution.
3. Create a signed .ffu file from the unsigned .ffu file and the matching signed .cat file using ImageSigner.exe
tool.
Related topics
Building a phone image using ImgGen.cmd
Use the flashing tools provided by Microsoft
7/13/2017 • 7 min to read • Edit Online
Microsoft provides a tool set for flashing images to devices. This tool set includes ffutool.exe, a command-line tool
that runs on the development computer, and ffuloader.efi, a device-side UEFI flashing application. This topic
describes how to set up your device and development computer to use this tool set, and provides usage
instructions.
Important
In Windows 10, version 1607, ffutool.exe is installed by the Assessment and Deployment Kit (ADK). In
earlier versions of Windows 10, ffutool.exe is installed by the Windows Driver Kit (WDK), Enterprise WDK
(EWDK), or Windows Hardware Lab Kit (HLK).
The device-side UEFI flashing application from Microsoft is automatically included in all images. This
application must be included in all retail devices.
For flashing images to devices during manufacturing, OEMs can build their own flashing tools by using the
information provided in Developing custom OEM flashing tools or by using ffutool.exe. If you use ffutool to
flash your image, it might be slower than other flashing tools.
Host-side setup
Flashing on the host side is performed by using a connection established with WinUSB, the Microsoft generic USB
device driver. The necessary drivers are included by default in Windows 8 and later.
In Windows 7, the necessary drivers can be installed from Windows Update. To configure a Windows 7 computer
to install the necessary drivers:
1. Click Start.
2. Type Device Installation Settings.
3. Select Yes, do this automatically (recommended).
4. Click Save Changes.
Flashing procedure
After the device-side and host-side setup is complete, perform the following steps to flash a device:
1. Boot the device into the FFU download mode while it is connected to the host computer. There are several
ways to force the device into the FFU download mode during boot:
Include the Microsoft.BCD.Lab.spkg package in your image by specifying the LABIMAGE optional
feature when generating the test image. When this package is included in the test image, the device
automatically enters the FFU download mode when it is booted. For more information about
generating an image, see Building a phone image using ImgGen.cmd.
To force the device into the FFU download mode manually, press and release the power button to
boot the device, and then immediately press and hold the volume up button. This option is available
only after an initial FFU has been flashed to the device.
2. Run ffutool.exe from the command line to flash an image. This program is in
%ProgramFiles(x86)%\Windows Kits\10\Tools\bin\i386. The following is a usage example.
PARAMETER DESCRIPTION
-flash FFU file Specifies the path to the FFU file to be flashed to the
device.
You can flash more than one device at a time by using ffutool.exe. To do this, make sure that all devices are
connecting before running ffutool.exe. Also, we recommend that you use a USB card that contains a dedicated
root hub per port so an issue flashing one device does not affect all devices.
Note
Flashing speed will decrease as you add devices.
Error: Failed to flash with device error { 0x18, 0x0, 0x0, 0x2, 0xa, 0x5 }
The first hexadecimal number is an event code that indicates the type of flashing failure. The following table
provides a description of the FFU tool flashing errors.
Common errors
Additional errors
Related topics
Building and flashing images
IUTool.exe: Update packages on a device
7/13/2017 • 1 min to read • Edit Online
The Windows Driver Kit (WDK) includes a tool for updating packages on a device or to add a new package to a
device. (IUTool.exe). This tool is available under %WPDKCONTENTROOT%\Tools\bin\i386.
PARAMETER DESCRIPTION
IUTool -p
C:\ContosoPackages\Contoso.Device.SampleDr
iver.spkg;C:\ContosoPackages\Contoso.Devic
e.SampleApplication.spkg
IUTool -p C:\ContosoPackages
Package versioning
If the specified package already exists on the device, the new version of the package must have a higher version
than the package currently on the device or the update will fail. To specify the version for a package, use the
/version command-line parameter for PkgGen.exe when generating the package. For more information, see
Command-line arguments for package generator.
Using GetDULogs.exe to get package update logs from a device
Use GetDULogs.exe to get package update logs from a device.
The following are error codes from IUTool.exe. For more info, see IUTool.exe: Update packages on a device.
0x80004001 E_NOTIMPL
0x80004002 E_NOINTERFACE
0x80004003 E_POINTER
0x80004004 E_ABORT
0x80004005 E_FAIL
0x8000FFFF E_UNEXPECTED
0x80070002 ERROR_FILE_NOT_FOUND
0x80070003 E_PATH_NOT_FOUND
0x80070005 E_ACCESSDENIED
0x80070006 E_HANDLE
0x80070008 ERROR_NOT_ENOUGH_MEMORY
0x80070009 ERROR_INVALID_BLOCK
0x8007000B ERROR_BAD_FORMAT
0x8007000D ERROR_INVALID_DATA
ERROR CODE ERROR NAME ADDITIONAL NOTES
0x8007000E ERROR_OUTOFMEMORY
0x80070013 ERROR_WRITE_PROTECT
0x80070015 ERROR_NOT_READY
0x80070017 ERROR_CRC
0x80070019 ERROR_SEEK
0x8007001F ERROR_GEN_FAILURE
0x80070020 ERROR_SHARING_VIOLATION
0x80070021 ERROR_LOCK_VIOLATION
0x80070026 ERROR_HANDLE_EOF
0x80070032 ERROR_NOT_SUPPORTED
0x80070076 ERROR_INVALID_VERIFY_SWITCH
0x8007007A ERROR_INSUFFICIENT_BUFFER
0x8007007B ERROR_INVALID_NAME
0x8007007E ERROR_MOD_NOT_FOUND
0x8007007F ERROR_PROC_NOT_FOUND
0x80070098 ERROR_TOO_MANY_MUXWAITERS
0x800700B7 ERROR_ALREADY_EXISTS
ERROR CODE ERROR NAME ADDITIONAL NOTES
0x800700CE ERROR_FILENAME_EXCED_RANGE
0x80070160 ERROR_FAIL_RESTART
0x80070216 ERROR_ARITHMETIC_OVERFLOW
0x80070241 ERROR_INVALID_IMAGE_HASH
0x800703E5 ERROR_IO_PENDING
0x800703FA ERROR_KEY_DELETED
0x80070422 ERROR_SERVICE_DISABLED
0x80070423 ERROR_CIRCULAR_DEPENDENCY
0x80070424 ERROR_SERVICE_DOES_NOT_EXIST
0x80070426 ERROR_SERVICE_NOT_ACTIVE
0x80070428 ERROR_EXCEPTION_IN_SERVICE
0x8007042B ERROR_PROCESS_ABORTED
0x8007042E ERROR_SERVICE_START_HANG
0x80070459 ERROR_NO_UNICODE_TRANSLATIO
N
ERROR CODE ERROR NAME ADDITIONAL NOTES
0x80070486 ERROR_NO_MORE_USER_HANDLES
0x800704C7 ERROR_CANCELLED
0x800704EC ERROR_ACCESS_DISABLED_BY_POLI
CY
0x80070522 ERROR_PRIVILEGE_NOT_HELD
0x80070525 ERROR_NO_SUCH_USER
0x8007053C ERROR_BAD_INHERITANCE_ACL
0x8007054E ERROR_INTERNAL_DB_CORRUPTIO
N
0x80070570 ERROR_FILE_CORRUPT
0x80070571 ERROR_DISK_CORRUPT
0x800705AA ERROR_NO_SYSTEM_RESOURCES
0x8007065D ERROR_DATATYPE_MISMATCH
0x800706B5 RPC_S_UNKNOWN_IF
0x800706BA RPC_S_SERVER_UNAVAILABLE
0x800706BE RPC_S_CALL_FAILED
0x800706BF RPC_S_CALL_FAILED_DNE
ERROR CODE ERROR NAME ADDITIONAL NOTES
0x800706D9 EPT_S_NOT_REGISTERED
0x80072EE2 ERROR_WINHTTP_TIMEOUT
0x80072EE4 ERROR_WINHTTP_INTERNAL_ERRO
R
0x80072EE5 ERROR_WINHTTP_INVALID_URL
0x80072EE6 ERROR_WINHTTP_UNRECOGNIZED
_SCHEME
0x80072EE7 ERROR_WINHTTP_NAME_NOT_RES
OLVED
0x80072EE9 ERROR_WINHTTP_INVALID_OPTIO
N
0x80072EEC ERROR_WINHTTP_SHUTDOWN
0x80072EEF ERROR_WINHTTP_LOGIN_FAILURE
0x80072EF1 ERROR_WINHTTP_OPERATION_CAN
CELLED
0x80072EF3 ERROR_WINHTTP_INCORRECT_HAN
DLE_STATE
0x80072EFD ERROR_WINHTTP_CANNOT_CONNE
CT
0x80072EFE ERROR_WINHTTP_CONNECTION_A
BORTED
0x80072EFF ERROR_WINHTTP_CONNECTION_RE
SET
0x80072F05 ERROR_WINHTTP_SEC_CERT_DATE_I
NVALID
0x80072F06 ERROR_WINHTTP_SEC_CERT_CN_IN
VALID
ERROR CODE ERROR NAME ADDITIONAL NOTES
0x80072F0C ERROR_WINHTTP_CLIENT_AUTH_CE
RT_NEEDED
0x80072F0D ERROR_WINHTTP_INVALID_CA
0x80072F30 ERROR_WINHTTP_NO_CM_CONNE
CTION
0x80072F76 ERROR_WINHTTP_HEADER_NOT_FO
UND
0x80072F78 ERROR_WINHTTP_INVALID_SERVER
_RESPONSE
0x80072F7A ERROR_WINHTTP_INVALID_QUERY_
REQUEST
0x80072F7C ERROR_WINHTTP_REDIRECT_FAILE
D
0x80072F7D ERROR_WINHTTP_SECURE_CHANNE
L_ERROR
0x80072F89 ERROR_WINHTTP_SECURE_INVALID
_CERT
0x80072F8F ERROR_WINHTTP_SECURE_FAILURE
0x80072F98 ERROR_WINHTTP_RESPONSE_DRAI
N_OVERFLOW
0x80073B01 ERROR_MUI_FILE_NOT_LOADED
0x80090305 ERROR_BAD_ACCESSOR_FLAGS
0x80092002 CRYPT_E_BAD_ENCODE
0x80092003 CRYPT_E_FILE_ERROR
0x80096004 TRUST_E_CERT_SIGNATURE
ERROR CODE ERROR NAME ADDITIONAL NOTES
0x80096005 TRUST_E_TIME_STAMP
0x80096010 TRUST_E_BAD_DIGEST
0x800B0100 TRUST_E_NOSIGNATURE
0x800B0101 CERT_E_EXPIRED
0x800B010A CERT_E_CHAINING
0x800B010B TRUST_E_FAIL
0xC00CE01D XML_E_INVALID_DECIMAL
0xC00CE01E XML_E_INVALID_HEXIDECIMAL
0xC00CE01F XML_E_INVALID_UNICODE
0xC00CE06E XML_E_INVALIDENCODING
0xC00CEE01 MX_E_INPUTEND
0xC00CEE02 MX_E_ENCODING
0xC00CEE03 MX_E_ENCODINGSWITCH
0xC00CEE04 MX_E_ENCODINGSIGNATURE
0xC00CEE20 WC_E_WC
0xC00CEE21 WC_E_WHITESPACE
0xC00CEE22 WC_E_SEMICOLON
ERROR CODE ERROR NAME ADDITIONAL NOTES
0xC00CEE23 WC_E_GREATERTHAN
0xC00CEE24 WC_E_QUOTE
0xC00CEE25 WC_E_EQUAL
0xC00CEE26 WC_E_LESSTHAN
0xC00CEE27 WC_E_HEXDIGIT
0xC00CEE28 WC_E_DIGIT
0xC00CEE29 WC_E_LEFTBRACKET
0xC00CEE2A WC_E_LEFTPAREN
0xC00CEE2B WC_E_XMLCHARACTER
0xC00CEE2C WC_E_NAMECHARACTER
0xC00CEE2D WC_E_SYNTAX
0xC00CEE2E WC_E_CDSECT
0xC00CEE2F WC_E_COMMENT
0xC00CEE30 WC_E_CONDSECT
0xC00CEE31 WC_E_DECLATTLIST
0xC00CEE32 WC_E_DECLDOCTYPE
0xC00CEE33 WC_E_DECLELEMENT
0xC00CEE34 WC_E_DECLELEMENT
0xC00CEE35 WC_E_DECLNOTATION
ERROR CODE ERROR NAME ADDITIONAL NOTES
0xC00CEE36 WC_E_NDATA
0xC00CEE37 WC_E_PUBLIC
0xC00CEE38 WC_E_SYSTEM
0xC00CEE39 WC_E_NAME
0xC00CEE3A WC_E_ROOTELEMENT
0xC00CEE3B WC_E_ELEMENTMATCH
0xC00CEE3C WC_E_UNIQUEATTRIBUTE
0xC00CEE3D WC_E_TEXTXMLDECL
0xC00CEE3E WC_E_LEADINGXML
0xC00CEE3F WC_E_TEXTDECL
0xC00CEE40 WC_E_XMLDECL
0xC00CEE41 WC_E_ENCNAME
0xC00CEE42 WC_E_PUBLICID
0xC00CEE43 WC_E_PESINTERNALSUBSET
0xC00CEE44 WC_E_PESBETWEENDECLS
0xC00CEE45 WC_E_NORECURSION
0xC00CEE46 WC_E_ENTITYCONTENT
0xC00CEE47 WC_E_UNDECLAREDENTITY
0xC00CEE48 WC_E_PARSEDENTITY
ERROR CODE ERROR NAME ADDITIONAL NOTES
0xC00CEE49 WC_E_NOEXTERNALENTITYREF
0xC00CEE4A WC_E_PI
0xC00CEE4B WC_E_SYSTEMID
0xC00CEE4C WC_E_QUESTIONMARK
0xC00CEE4D WC_E_CDSECTEND
0xC00CEE4E WC_E_MOREDATA
0xC00CEE4F WC_E_DTDPROHIBITED
0xC00CEE50 WC_E_INVALIDXMLSPACE
0xC00CEE60 NC_E_NC
0xC00CEE61 NC_E_QNAMECHARACTER
0xC00CEE62 NC_E_QNAMECOLON
0xC00CEE63 NC_E_NAMECOLON
0xC00CEE64 NC_E_DECLAREDPREFIX
0xC00CEE65 NC_E_UNDECLAREDPREFIX
0xC00CEE66 NC_E_EMPTYURI
0xC00CEE67 NC_E_XMLPREFIXRESERVED
0xC00CEE68 NC_E_XMLNSPREFIXRESERVED
0xC00CEE69 NC_E_XMLURIRESERVED
0xC00CEE6A NC_E_XMLNSURIRESERVED
ERROR CODE ERROR NAME ADDITIONAL NOTES
0xC00CEE80 SC_E_SC
0xC00CEE81 SC_E_MAXELEMENTDEPTH
0xC00CEE82 SC_E_MAXENTITYEXPANSION
0xC00CEF00 WR_E_WR
0xC00CEF01 WR_E_NONWHITESPACE
0xC00CEF02 WR_E_NSPREFIXDECLARED
0xC00CEF03 WR_E_NSPREFIXWITHEMPTYNSURI
0xC00CEF04 WR_E_DUPLICATEATTRIBUTE
0xC00CEF05 WR_E_XMLNSPREFIXDECLARATION
0xC00CEF06 WR_E_XMLPREFIXDECLARATION
0xC00CEF07 WR_E_XMLURIDECLARATION
0xC00CEF08 WR_E_XMLNSURIDECLARATION
0xC00CEF09 WR_E_NAMESPACEUNDECLARED
0xC00CEF0A WR_E_INVALIDXMLSPACE
0xC00CEF0B WR_E_INVALIDACTION
0xC00CEF0C WR_E_INVALIDSURROGATEPAIR
Update packages on a device and get package
update logs
7/13/2017 • 1 min to read • Edit Online
The Windows Driver Kit (WDK) includes a tool for updating packages on a device (IUTool.exe) and a tool for getting
package update logs from a device (GetDULogs.exe). These tools are available under
%WPDKCONTENTROOT%\Tools\bin\i386.
PARAMETER DESCRIPTION
IUTool -p
C:\ContosoPackages\Contoso.Device.SampleDr
iver.spkg;C:\ContosoPackages\Contoso.Devic
e.SampleApplication.spkg
IUTool -p C:\ContosoPackages
Package versioning
If the specified package already exists on the device, the new version of the package must have a higher version
than the package currently on the device or the update will fail. To specify the version for a package, use the
/version command-line parameter for PkgGen.exe when generating the package. For more information, see
Command-line arguments for package generator.
PARAMETER DESCRIPTION
-ooutput file path The full path of the file on the development computer to
write the log information to.
Update packages in an .FFU image file
7/13/2017 • 2 min to read • Edit Online
You can use ImageApp.exe to add a new or updated package to an existing .FFU image file for production, health
and test images.
ImageApp has the following important limitations:
ImageApp should only be used for adding packages to production, test and health images. Do not use
ImageApp to modify retail images, as it may negatively impact update reliability and the security of the device.
ImageApp cannot be used to change the partition layout of an existing image. If a different partition layout is
needed, the image will need to be rebuilt. For more information, see Building a device image using ImgGen.cmd.
ImageApp cannot be used to remove packages from an image.
To prepare a device platform to use compressed partitions with CompactOS, you'll need a PC with the Windows
10 version of DISM. If your technician PC is running a previous version of Windows, you can get this by
installing the Windows Assessment and Deployment Kit (ADK) for Windows 10, or by copying and installing the
DISM driver. This process is the same as the one used to install DISM on Windows PE. To learn more, see Install
Windows 10 using a previous version of Windows PE: To add DISM into your Windows PE image.
When updating an existing package, be sure to increment the version number. For more information, see Update
requirements. When adding a package that does not already exist in the image, any version number can be used.
Specify the packages to be added in an input XML file similar to the one shown here.
For example, if the updateInput.xml file is in the C:\temp folder, use this command to add the specified packages to
the existing flash.ffu image file.
PARAMETER DESCRIPTION
/UpdateInputXML:updateInputfile.xml The name of the XML file that identifies the package to be
added to the image. If this file is not in the current
directory, you must include the path to the file.
Troubleshooting
"STATUS_FILE_IS_A_DIRECTORY": This error message appears when building an image with CompactOS from a
PC that doesn't have the Windows 10 version of DISM. You can get this by installing the Windows ADK for
Windows 10, or by just installing the DISM driver from another PC with the Windows ADK for Windows 10
installed. To learn more, see Install Windows 10 using a previous version of Windows PE.
Related topics
Building an image using ImgGen.cmd
IoT Core manufacturing
9/29/2017 • 1 min to read • Edit Online
Windows 10 IoT Core (IoT Core) is a version of Windows 10 that is optimized for smaller devices with or without a
display. IoT Core uses the rich, extensible Universal Windows Platform (UWP) API for building great solutions.
OEMs can manufacture and deploy IoT Core using existing or custom-built hardware. To see existing
recommended hardware, see device options and the Hardware Compatibility List.
When developing your own board, see the Minimum hardware requirements for IoT Core.
In this section
TOPIC DESCRIPTION
What's new in IoT Manufacturing Find out what we've been working on.
IoT Core manufacturing guides This guide walks you through creating IoT Core images
that can be flashed to retail devices and maintained after
they have been delivered to your customers.
IoT Core feature list Here's the features you can add to IoT Core images.
Windows ADK IoT Core Add-ons contents The IoT Core ADK Add-Ons include tools to help you
customize and create new images for your devices with
the apps, board support packages (BSPs), drivers, and
Windows features that you choose, and a sample
structure you can use to quickly create new images.
IoT Core Add-ons command-line options These tools are part of the IoT Core ADK Add-Ons, in the
\Tools folder. To learn more about these tools, see
Windows ADK IoT Core Add-ons.
Related topics
Learn about Windows 10 IoT Core
IoT Core Developer Resources
IoT Core manufacturing guide
10/5/2017 • 5 min to read • Edit Online
Thinking about mass-producing devices running Windows 10 IoT Core? Use the Windows ADK IoT Core Add-ons
to create images that you can quickly flash onto new devices.
You can create test images, which include tools for quickly accessing and modifying devices. Test images are
great for:
Developers, hardware vendors, and manufacturers (OEMs) who are trying out new device designs.
Hobbyists and organizations that are creating devices designed to run in non-networked or controlled network
environments.
You can create retail images, which can be made more secure for public or corporate networks while still
receiving updates.
You can add customizations, including apps, settings, hardware configurations, and board support packages
(BSPs).
For OEM-style images, you’ll wrap your customizations into package (.cab) files. Packages let OEMs, ODMs,
developers, and Microsoft work together to help deliver security and feature updates to your devices without
stomping on each other's work.
Scenarios
Get the tools needed to customize Windows IoT Core
Lab 1a: Create a basic image
Lab 1b: Add an app to your image
Lab 1c: Add a file and a registry setting to an image
Lab 1d: Add networking and other provisioning package settings to an image
Lab 1e: Add a driver to an image
Lab 1f: Build a retail image
Lab 2: Creating your own board support package
Lab 3: Update your apps
Concepts
You can use the walkthrough as a guide to build both your test and retail images. In general terms:
1. Test your customizations, including apps, settings, drivers, and BSPs, to make sure they work.
2. Install test certificates on your PC, and package your customizations into .cab files.
3. Create a test image that includes your customizations, along with the IoT Core package, and any updates from
your hardware manufacturer.
4. Flash the image to a device and test it. Use the test tools built into the test images to troubleshoot any new
issues.
5. If it works, sign your customizations, and repackage them into new .cab files.
6. Create a retail image with your signed files, and use it to manufacture new devices.
Packages
Packages are the logical building blocks of IoT Core. They contain all the files, libraries, registry settings,
executables, and data on the device. From device drivers to system files, every component must be contained in a
package. This modular architecture allows for precise control of updates: a package is the smallest serviceable unit
on the device.
Each package contains:
The contents of the package, such as a signed driver binary or a signed appx binary.
A package definition (.pkg.xml) file specifies the contents of the package and where they should be placed in
the final image. See %SRC_DIR%\Packages\ directory for various samples of package files.
A signature. This can be a test or retail certificate.
The pkggentool combines these items into signed packages. Our samples include scripts: createpkg , and
createprovpkg , which call pkggen to create packages for our drivers, apps, and settings.
The process is similar to that used by Windows 10 Mobile. To learn more about creating packages, see Creating
mobile packages.
Feature manifests (FMs)
After you've put everything into packages, you'll use FM files to list which of your packages belong in the final
image.
You can use as many FMs into an image as you want. In this guide, we refer to the following FMs:
OEMFM.xml includes features an OEM might add to a device, such as the app and a provisioning package.
BSPFM.xml includes features that a hardware manufacturer might use to define a board. For example,
OEM_RPi2FM.xml includes all of the features used for the Raspberry Pi 2.
The process is similar to that used by Windows 10 Mobile. To learn more, see Feature manifest file contents.
You'll list which of the features to add by using these tags:
<BasePackages>: Packages that you always included in your images, for example, your base app.
<Features>\<OEM>: Other individual packages that might be specific to a particular product design.
The Feature Merger tool generates the required feature identifier packages that are required for servicing the
device. Run this tool whenever any changes are made to the FM files. After you change OEM FM or OEM
COMMON FM files, run Buildfm oem . After you change bspfm files, run buildfm bsp <bspname> .
Creating the image: ImgGen and the image configuration file (OEMInput.xml)
To create the final image, you'll use the imggen tool with an image configuration file, OEMInput.xml file.
These are the same tools used to create Windows 10 Mobile images. To learn more, see OEMInput file contents.
The image configuration file lists:
The feature manifests (FMs) and the packages that you want to install from each one.
An SoC chip identifier, which is used to help set up the device partitions. The supported values for soc are
defined in the corresponding bspfm.xml, under <devicelayoutpackages>.
A Device identifier, which is used to select the device layout. The supported values for device are defined
in the corresponding bspfm.xml, under <oemdeviceplatformpackages>.
The ReleaseType (either Production or Test).
Retail builds: We recommend creating retail images early on in your development process to verify that
everything will work when you are ready to ship.
These builds contain all of the security features enabled.
To use this build type, all of your code must be signed using retail (not test) code signing certificates.
For a sample, see %SRC_DIR%\Products\SampleA\RetailOEMInput.xml.
Test builds: Use these to try out new versions of your apps and drivers created by you and your hardware
manufacturer partners.
These builds have some security features disabled, which allows you to use either test-signed or
production-signed packages.
These builds also include developer tools such as debug transport, SSH, and PowerShell, that you can use
to help troubleshoot issues.
For a sample, see %SRC_DIR%\Products\SampleA\TestOEMInput.xml.
Package release type Only Production Type packages are Both Production Type or Test Type are
supported supported
RETAIL BUILDS TEST BUILDS
Related topics
Learn about Windows 10 IoT Core
IoT Core Developer Resources
What's in the Windows ADK IoT Core Add-ons
IoT Core feature list
IoT Core Add-ons command-line options
Get the tools needed to customize Windows IoT
Core
10/18/2017 • 2 min to read • Edit Online
Here's the software you'll need to create OEM images using the Windows 10 IoT Core (IoT Core) ADK Add-Ons:
Storage
A Micro SD card. (Note, we just use this for our guide. You can build devices with other drives. Learn more
about existing supported storage options.)
If your technician PC doesn't include a Micro SD slot, you may also need an adapter.
Software
Install the following tools on your technician PC
1. Windows Assessment and Deployment Kit (Windows ADK) including at least the Deployment Tools and
Imaging and Configuration Designer (ICD) features. You'll use these tools to create images and
provisioning packages.
2. Windows Driver Kit (WDK) 10
3. Windows 10 IoT Core Packages. The .iso package adds the IoT Core packages and feature manifests used to
create IoT Core images. By default, these packages are installed to C:\Program Files (x86)\Windows
Kits\10\MSPackages\Retail.
4. IoT Core ADK Add-Ons. Click Clone or Download > Download ZIP, and extract it to a folder, for example,
C:\IoT-ADK-AddonKit. This kit includes the sample scripts and base structures you'll use to create your
image. To learn about the contents, see What's in the Windows ADK IoT Core Add-ons).
5. Windows 10 IoT Core Dashboard.
6. The Raspberry Pi BSP. Since this lab uses a Raspberry Pi, you'll need to download the Raspberry Pi BSP. If
you're working with a device other than Raspberry Pi, visit the Windows 10 IoT Core BSP page to download
other BSPs.
Other helpful software:
A text editor such as Notepad++. You can also use the Notepad tool, though for some files, you won't
see the line breaks unless you open each file as a UTF-8 file.
A compression program such as 7-Zip, which can uncompress Windows app packages.
Visual Studio 2017, used to create an app in Lab 1b: Add an app to your image.
Other software
An app built for IoT Core. Our samples use the IoT Core Default app, though you can use your own.
A driver built for IoT Core. Our samples use the Hello, Blinky driver, though you can use your own.
Next steps
Lab 1a: Create a basic image
Lab 1a: Create a basic image
10/17/2017 • 4 min to read • Edit Online
To get started, we'll create a basic Windows 10 IoT Core (IoT Core) image, flash it to a micro SD card, and put it
into a device to make sure that everything's working properly.
We'll create a product folder that represents our first design. For our first product design, we'll customize just
enough for the IoT core device to boot up and run the built-in OOBE app, which we should be able to see on an
HDMI-compatible monitor.
To make running these commands easier, we'll install and use the IoT Core shell, which presets several
frequently-used paths and variables.
Prerequisites
See Get the tools needed to customize Windows IoT Core to get your technician PC ready.
set OEM_NAME=Fabrikam
Start the IoT Core shell, choose your architecture, and install test certificates
1. In Windows Explorer, go to the folder where you installed the IoT Core ADK Add-Ons, for example, C:\IoT-
ADK-AddonKit, and open IoTCoreShell.cmd. It should prompt you to run as an administrator.
The new value for OEM_NAME should appear when you start the tool.
Troubleshooting: Error: "The system cannot find the path specified". If you get this, right-click the icon and
modify the path in "Target" to the location you've chosen to install the tools.
2. At the Set Environment for Architecture prompt, select 1 for ARM, 2 for x86, or 3 for x64, based on the
architecture for the boards that you'll be developing. For example, press 1 to create an image that's
compatible with the Raspberry Pi 2 or Raspberry Pi 3, or press 2 to create an image that's compatible with
the Minnowboard Max.
The launch tool sets the default architecture, and sets a version number for the design, which you can use
for future updates. The first version number defaults to 10.0.0.0.
(Why a four-part version number? Learn about versioning schemes in Update requirements)
Install certificates
From the IoT Core Shell, install the test certificates, which you'll use to sign your test binaries. You'll only need to
do this the first time you install the IoT ADK Add-on Kit.
installoemcerts
The certificates are added to the root. To learn more, see Set up the signing environment
Build a Raspberry Pi BSP (New for Windows 10, Version 1703)
1. Extract rpibsp.zip to a folder on your hard drive, for example C:\BSP
2. From the IOT Core Shell, navigate to C:\BSP, and run build.cmd . This will add the pakages necessary to
create a project with the RPi2 BSP
cd c:\BSP
build.cmd
For more information on available bsps, see Windows 10 IoT Core BSPs.
Build packages
From the IoT Core Shell, get your environment ready to create products by building all of the packages in the
working folders.
buildpkg All
The BSP name is the same as the folder name for the BSP. You can see which BSPs are available by looking in the
C:\IoT-ADK-AddonKit\Source-\<arch>\BSP folders.
Next steps
Leave the device on for now, and continue to Lab 1b: Add an app to your image.
Lab 1b: Add an app to your image
10/5/2017 • 3 min to read • Edit Online
We're now going to take an app (like the sample IoT Core Default app), package it up, and create a new image you
can load onto new devices.
For background apps, use the same method to install and run them. Note, only one app can be selected as the
startup app, all other apps installed using this method run as background apps.
Note As we go through this manufacturing guide, ProjectA will start to resemble the SampleA image that's in
C:\IoT-ADK-AddonKit\Source-arm\Products\SampleA.
Prerequisites
We'll use the ProjectA image we created from Lab 1a: Create a basic image.
newAppxPkg
"C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx"
fga Appx.MyUWPApp
3. Run buildfm oem to generate updated files in the MergedFMs folder. This has to be done every time any
time an FM file is modified.
You'll now be able to add your app to any of your products by adding a reference to this feature manifest
and Feature ID.
<Features>
<Microsoft>
...
<!-- Sample Apps, remove this when you introduce OEM Apps
<Feature>IOT_BERTHA</Feature> -->
<Feature>IOT_ALLJOYN_APP</Feature>
<Feature>IOT_NANORDPSERVER</Feature>
<Feature>IOT_SHELL_HOTKEY_SUPPORT</Feature>
<Feature>IOT_APPLICATIONS</Feature>
</Microsoft>
<OEM>
<!-- Include BSP Features -->
<Feature>RPI2_DRIVERS</Feature>
<Feature>RPI3_DRIVERS</Feature>
<!-- Include OEM features -->
<Feature>OEM_CustomCmd</Feature>
<Feature>OEM_ProvAuto</Feature>
<Feature>OEM_MyUWPApp</Feature>
</OEM>
Next steps
Lab 1c: Add a file and a registry setting to an image
Related topics
Update apps on your IoT Core devices
Test an appx file on an IoT device
10/17/2017 • 1 min to read • Edit Online
http://100.100.0.100:8080
This opens the Windows Device Portal. From here, you can upload app packages, see what apps are installed,
and switch between them.
4. If you've added the IOT_ENABLE_ADMIN feature in your package, log in using Administrator/p@ssw0rd. If
you created a custom username and password, use that now. To learn more, see Lab 1b: Add an app to your
image.
Test the app by installing it**
1. Click on Apps.
2. Under Install app, under App package, click Browse, and select your .appx file. Note If you built your app
as a bundle, you may need to use a tool such as 7-Zip to extract these files from the bundle.
3. Add your app's Certificate the same way.
4. Click Add Dependency and add each of your app's dependency files.
5. Under Deploy, click Go. The app installs.
6. Under Installed apps, click the drop-down box and select your app. Your app should start on the device.
Great, your app works! Now let's package it up so you can maintain your app even after it's been delivered to your
customers.
Lab 1c: Add a file and a registry setting to an image
10/18/2017 • 4 min to read • Edit Online
Files and registry keys that you add to your image often won't be specific to an architecture. For these, we
recommend creating a common package that you can use across all of your device architectures.
We'll create some test files and registry keys to the image, and again package them up so that they can be
serviced after they reach your customers.
We'll add these to the common feature manifest (OEMCommonFM.xml), which is used in x86, x64, and ARM
builds, and give it a new feature ID, OEM_FilesAndRegKeys.
For this lab, we'll start an new product, ProductB, so that later we can use the IoT sample app to get the IP address
of our device and verify that our files and reg keys have made it.
Prerequisites
See Get the tools needed to customize Windows IoT Core to get your technician PC ready.
newcommonpkg Registry.FilesAndRegKeys
3. From the IoT Core Shell, build the package. (The BuildPkg All command builds everything in the source
folders.)
buildpkg Registry.FilesAndRegKeys
<Features>
<OEM>
<!-- Feature definitions below -->
<PackageFile Path="%PKGBLD_DIR%" Name="%OEM_NAME%.Registry.FilesAndRegKeys.cab">
<FeatureIDs>
<FeatureID>OEM_FilesAndRegKeys</FeatureID>
</FeatureIDs>
</PackageFile>
3. Run buildfm oem to generate updated files in the MergedFMs folder. This has to be done every time any time
an FM file is modified.
You'll now be able to add your files and registry keys to any of your products by adding a reference to this feature
manifest and Feature ID.
Create a new product
1. Create a new product folder.
<AdditionalFMs>
<!-- Including BSP feature manifest -->
<AdditionalFM>%BLD_DIR%\MergedFMs\RPi2FM.xml</AdditionalFM>
<!-- Including OEM feature manifest -->
<AdditionalFM>%BLD_DIR%\MergedFMs\OEMCommonFM.xml</AdditionalFM>
<AdditionalFM>%BLD_DIR%\MergedFMs\OEMFM.xml</AdditionalFM>
<!-- Including the test features -->
<AdditionalFM>%AKROOT%\FMFiles\arm\IoTUAPNonProductionPartnerShareFM.xml</AdditionalFM>
</AdditionalFMs>
<Features>
<Microsoft>
...
<!-- Sample Apps, remove this when you introduce OEM Apps -->
<Feature>IOT_BERTHA</Feature>
<Feature>IOT_ALLJOYN_APP</Feature>
<Feature>IOT_NANORDPSERVER</Feature>
<Feature>IOT_SHELL_HOTKEY_SUPPORT</Feature>
<Feature>IOT_APPLICATIONS</Feature>
<Feature>IOT_ENABLE_ADMIN</Feature>
</Microsoft>
<OEM>
<!-- Include BSP Features -->
<Feature>RPI2_DRIVERS</Feature>
<Feature>RPI3_DRIVERS</Feature>
<!-- Include OEM features -->
<Feature>OEM_CustomCmd</Feature>
<Feature>OEM_ProvAuto</Feature>
<Feature>OEM_FilesAndRegKeys</Feature>
</OEM>
\\10.100.0.100\c$
Use the devicename, the default Administrator account, and password to log on. (Default is:
minwinpc\Administrator / p@ssw0rd)
4. Check to see if the files exist. Look for:
\\10.100.0.100\c$\Windows\system32\TestFile1.txt
\\10.100.0.100\c$\OEMInstall\TestFile2.txt
Where Fabrikam is your OEM name. The registry tool should return your test values.
Next steps
Lab 1d: Add a provisioning package to an image
Lab 1d: Add networking and other provisioning
package settings to an image
1/2/2018 • 5 min to read • Edit Online
We'll create a provisioning package that contains some sample Wi-Fi settings. You can use Windows Configuration
Designer to create provisioning packages that add apps, drivers, features, or modify many common settings, such
as IT device management and policy settings.
Note, to test Wi-Fi, your board will need Wi-Fi support. You can use a Wi-Fi adapter/dongle, or use a board like the
Raspberry Pi 3 that has Wi-Fi built-in.
For this lab, we'll use the ProductB, that includes the default app (Bertha), which shows network status.
Prerequisites
See Get the tools needed to customize Windows IoT Core to get your technician PC ready.
Use ProductB that you created in Lab 1c: Add a file and a registry setting to an image.
9. At the All done! page, click the link to the Output location.
Copy customizations.xml into your product's prov folder
1. Copy customizations.xml to C:\IoT-ADK-AddonKit\Source-<arch>\Products\ProductB\prov.
2. Optional: update customizations.xml with any desired changes. Make sure you increment the version
number if you make changes. See Windows provisioning answer file for more info.
Add the auto-provisioning scripts to the feature manifest and product configuration file
1. Review the package definition file: Provisioning.Auto.wm.xml: C:\IoT-ADK-
AddonKit\Common\Packages\Provisioning.Auto\Provisioning.Auto.wm.xml.
Make sure the file source resolves correctly. ($PROD)Prov.ppkg resolves to C:\IoT-ADK-
AddonKit\Source-<arch>\Products\ProductB\prov\ProductBProv.ppkg, this should match your
provisioning package's file name.
2. Make sure that the package definition file %OEM_NAME%.Provisioning.Auto.cab" and the feature ID:
OEM_ProvAuto are referenced in the common feature manifest, C:\IoT-ADK-
AddonKit\Common\Packages\OEMCommonFM.xml:
<OEM>
<!-- Include BSP Features -->
<Feature>RPI2_DRIVERS</Feature>
<Feature>RPI3_DRIVERS</Feature>
<!-- Include OEM features-->
<Feature>OEM_CustomCmd</Feature>
<Feature>OEM_ProvAuto</Feature>
<Feature>OEM_FilesAndRegKeys</Feature>
</OEM>
http://10.123.45.67:8080
3. When prompted, enter your device's default username and password. (Default is: Administrator \
p@ssw0rd)
This opens the Windows Device Portal. From here, you can upload app packages, see what apps are
installed, and switch between them.
4. Click Networking > Profiles. You should see the Wi-Fi profile you created.
If the device is able to automatically connect to the WiFi network, then under Available Networks, you
should see a checkmark next to the network you configured.
If your network requires steps such as accepting license terms, the device may not auto-connect.
Troubleshooting
Check your Wi-Fi broadcast frequency (2.4GHz vs 5GHz). Some Wi-Fi adapters, such as the built-in Wi-Fi
adapter on the Raspberry Pi 3, only support 2.4GHz Wi-Fi networks. While this is the most common Wi-Fi
broadcast frequency, many Wi-Fi networks broadcast at frequencies of 5GHz. Either change the broadcast
frequency or use a different adapter.
Confirm that the provisioning package settings work on your network. Use a laptop PC to test:
1. Disconnect the laptop from the network: Click on the network icon in the system tray, select the wireless
network, and click Disconnect.
2. Confirm that the network is no longer connected.
3. Install the provisioning package by double-clicking ProductAProv.ppkg. The wireless network should
connect automatically.
Check to see if the profile has been added to the device
1. Connect using an ethernet connection to the device.
2. Connect using an SSH client, such as PuTTY.
3. When connected, check to see what profiles have been installed:
Next steps
Lab 1e: Add a driver to an image
Lab 1e: Add a driver to an image
12/6/2017 • 3 min to read • Edit Online
In this lab, we'll add the sample driver: Hello, Blinky!, package it up, and deploy it to the to a Windows 10 IoT Core
device.
Prerequisites
Create a product folder (ProductB) that's set up to boot to the default (Bertha) app, as shown in Lab 1a: Create a
basic image or Lab 1c: Add a file and a registry setting to an image.
buildpkg Drivers.HelloBlinky
3. Generate feature identifier packages and merged FM files. This has to be done every time any time an FM
file is modified.
You'll now be able to add your driver to your product by adding a reference to this feature manifest.
<AdditionalFMs>
<!-- Including BSP feature manifest -->
<AdditionalFM>%BLD_DIR%\MergedFMs\RPi2FM.xml</AdditionalFM>
<!-- Including OEM feature manifest -->
<AdditionalFM>%BLD_DIR%\MergedFMs\OEMCommonFM.xml</AdditionalFM>
<AdditionalFM>%BLD_DIR%\MergedFMs\OEMFM.xml</AdditionalFM>
<!-- Including the test features -->
<AdditionalFM>%AKROOT%\FMFiles\arm\IoTUAPNonProductionPartnerShareFM.xml</AdditionalFM>
</AdditionalFMs>
<OEM>
<!-- Include BSP Features -->
<Feature>RPI2_DRIVERS</Feature>
<Feature>RPI3_DRIVERS</Feature>
<!-- Include OEM features-->
<Feature>OEM_CustomCmd</Feature>
<Feature>OEM_ProvAuto</Feature>
<Feature>OEM_FilesAndRegKeys</Feature>
<Feature>OEM_DriverHelloBlinky</Feature>
</OEM>
Next steps
Lab 1f: Build a retail image
Lab 1f: Build a retail image
10/18/2017 • 2 min to read • Edit Online
We'll take our customizations, put them together, and test them in a retail build.
Prerequisites
Lab 1a: Create a basic image
Lab 1b: Add an app to your image
Lab 1c: Add a file and a registry setting to an image
Lab 1d: Add networking and other provisioning package settings to an image
Lab 1e: Add a driver to an image
<AdditionalFMs>
<!-- Including BSP feature manifest -->
<AdditionalFM>%BLD_DIR%\MergedFMs\RPi2FM.xml</AdditionalFM>
<!-- Including OEM feature manifest -->
<AdditionalFM>%BLD_DIR%\MergedFMs\OEMCommonFM.xml</AdditionalFM>
<AdditionalFM>%BLD_DIR%\MergedFMs\OEMFM.xml</AdditionalFM>
</AdditionalFMs>
3. Add the FeatureIDs for the your app package, and the OEM_CustomCmd package.
<OEM>
<!-- Include BSP Features -->
<Feature>RPI2_DRIVERS</Feature>
<Feature>RPI3_DRIVERS</Feature>
<!-- Include OEM features -->
<Feature>OEM_CustomCmd</Feature>
<Feature>OEM_ProvAuto</Feature>
<Feature>OEM_MyUWPApp</Feature>
<Feature>OEM_FilesAndRegKeys</Feature>
<Feature>OEM_DriverHelloBlinky</Feature>
</OEM>
Issuer : Issuer of the Certificate ( see Certificate -> Details -> Issuer )
Subject : Subject in the certificate ( see Certificate -> Details -> Subject)
CrossCertRoot : Microsoft-supplied Cross Certificate Root. See Cross-Certificate List in Cross-
Certificates for Kernel Mode Code Signing.
3. From the IoT Core Shell, enable retail signing.
retailsign On
buildpkg all
If the BSP drivers/packages are test signed, you need to rebuild them to have retail signature. You can re-
sign the cabs and its contents using
Next steps
Lab 2: Creating your own board support package
Lab 2: Creating your own board support package
(BSP)
10/18/2017 • 2 min to read • Edit Online
A BSP includes a set of device drivers that are specific to the components/silicon used in the board. These are
provided by the component vendors / silicon vendors, mostly in the form of .inf and associated .sys/.dll files.
Create a new Board Support Package (BSP) when:
Creating a new hardware design
Replacing a driver or component on an existing hardware design
Whether you're creating a new BSP or modifying an existing BSP, you become the owner. This lets you decide
whether to allow updates to install on your boards.
In our lab, we'll create a new BSP based on the Raspberry Pi 2, removing the existing GPIO driver and replacing it
with the sample GPIO driver: Hello, Blinky!.
newbsp MyRPi2
Note: To make grouping packages easier, you can combine them into one or more Feature IDs. For example,
all of the Raspberry Pi 2 optional drivers use the Feature ID: RPI2_DRIVERS.
5. Add the HelloBlinky driver:
<Microsoft>
<Feature>IOT_GENERIC_POP</Feature>
...
</Microsoft>
<OEM>
<Feature>RPI2_DRIVERS</Feature>
<Feature>IOT_DISABLE_UMCI</Feature>
<Feature>IOT_ENABLE_TESTSIGNING</Feature>
<Feature>OEM_CustomCmd</Feature>
<Feature>OEM_AppxHelloWorld</Feature>
<Feature>OEM_FileAndRegKey</Feature>
</OEM>
Build and test the image
Build the image
1. From the IoT Core Shell, create the image:
Next steps
Congratulations, you've completed Lab 2.
Lab 3: Update apps
Related topics
Device layout
IoT Device Layout
10/17/2017 • 2 min to read • Edit Online
When modifying an IoT Core board support package (BSP), you can change the drive partitions and layout by
modifying the DeviceLayout files.
Partition layout
IoT Core supports UEFI (GPT) and legacy BIOS (MBR) partition layouts. Most IoT Core devices use UEFI and GPT-
style partitions, though Raspberry Pi 2 uses MBR-style partitions. To learn more about UEFI, read Boot and UEFI
and the Windows and GPT FAQ.
Sample partition layouts included in the ADK Add-Ons:
\iot-adk-addonkit\Common\Packages\DeviceLayout.GPT4GB\devicelayout.xml
\iot-adk-addonkit\Common\Packages\DeviceLayout.GPT4GB-R\devicelayout.xml
\iot-adk-addonkit\Common\Packages\DeviceLayout.MBR4GB\devicelayout.xml
\iot-adk-addonkit\Common\Packages\DeviceLayout.MBR4GB-R\devicelayout.xml
These files use three component files:
**DeviceLayout..pkg.xml: Package file, creates packages for DeviceLayout and OEMDevicePlatform.xml.
DeviceLayout.xml: Specifies the device partition layout
OEMDevicePlatform.xml: Specifies the amount of free blocks available in the device and which partitions are
compressed.
Partition layout (DeviceLayout.xml)
IoT Core requires 3 mandatory partitions (EFIESP, MainOS and Data). You can optionally include other partitions,
for example, a CrashDump partition. Sizes are calculated in sectors, the default sector is 512 bytes.
Supported properties:
EFI: Fixed-size partition with the boot manager, boot configuration database. This partition is required for both
MBR/GPT-style devices.
Name: EFIESP
FileSystem: FAT
RequiredToFlash: true
MainOS: OS and OEM-preloaded apps. This partition requires a minimum number of free sectors
(MinFreeSectors) for normal operations.
Name: MainOS
FileSystem: NTFS
MinFreeSectors: 1048576 (= 512MB)
ByteAlignment: 0x800000
ClusterSize: 0x1000 (This size is recommended to keep the partition size manageable.)
Data: User data partition, user registry hives, apps, apps data. This partition is typically set to use the remainder of
the storage space on the device. (UseAllSpace: True)
Name: Data
FileSystem: NTFS
UseAllSpace: true
ByteAlignment: 0x800000
ClusterSize: 0x4000 (This partition tends to be larger, so 0x4000 is recommended. 0x1000 is also OK.)
Crash dump partition: Optional partition, used to collect data from crash dumps. When used, size is given in total
sectors.
Name: CrashDump
FileSystem: FAT32
SectorSize: 512
ChunkSize: 128
DefaultPartitionByteAlignment: 0x200000
Related topics
Windows 10 IoT Core BSPs
Creating your own board support package (BSP)
Boot and UEFI Windows and GPT FAQ.
IoT Core feature list
2/6/2018 • 5 min to read • Edit Online
Here's the features you can add to Windows 10 IoT Core (IoT Core) images.
Add features using the OEMInput XML file. To learn more, see the IoT Core manufacturing guide.
IOT_EFIESP Boots the device using UEFI, required feature in all images
IOT_UAP_OOBE Includes the inbox OOBE app that is launched during the first
boot and also during installation of apps, required feature in
all images
IOT_USBFN_CLASS_EXTENSION Adds USB function WDF class extension for USB function
mode support. This is new in Windows 10, version 1703.
IOT_GENERIC_POP Adds the Generic device targeting info for OS only Updates.
Supported starting with Windows 10, version 1607.
IOT_EFIESP_BCD_MBR Sets boot configuration data (BCD) for MBR-based drives. This
is new in Windows 10, version 1703.
IOT_DISABLEBASICDISPLAYFALLBACK Disables the inbox basic render driver. This feature should only
be used with the Qualcomm DragonBoard (DB).
Developer Tools
IMPORTANT
The following developer features shall not be used in Retail builds and in images for commercial devices.
FEATURES DESCRIPTION
IOT_BERTHA Adds a sample app: "Bertha". This app provides basic version
info and connectivity status.
Speech Data
FEATURES DESCRIPTION
IOT_SPEECHDATA_EN_CA Adds speech data for en-CA. This is new in Windows 10,
version 1703.
IOT_SPEECHDATA_ES_MX Adds speech data for Mexico. This is new in Windows 10,
version 1703.
IOT_SPEECHDATA_ZH_HK Adds speech data for Chinese (Hong Kong S.A.R.). Supported
starting with Windows 10, version 1607.
OEM_CustomCmd Adds scripts which support adding OEM Apps using the ADK
Add-Ons.
Test features
The following table describes the Microsoft-defined test features that can be used by OEMs in the Features
element in the OEMInput file for Test builds ONLY.
FEATURES DESCRIPTION
IOT_EFIESP_TEST UEFI packages required for booting test images. Should not
be used with IOT_EFIESP
Related topics
What's in the Windows ADK IoT Core Add-ons
IoT Core manufacturing guides
Windows ADK IoT Core Add-ons: contents
10/18/2017 • 3 min to read • Edit Online
The Windows 10 IoT Core ADK Add-Ons include OEM-specific tools to create images for your IoT Core devices
with your apps, board support packages (BSPs), settings, drivers, and features.
This kit
makes IoT Core image creation process easy and simple
enables creation of multiple images/image variants easily
provides automation support for nightly builds
The IoT Core manufacturing guide walks you through building images with these tools.
Code Architecture
Root folder
IoTCoreShell.cmd: Launches the IoT Core Shell command-line
README.md: Version info, links to documentation
Build
This is the output directory where the build contents are stored. It starts as empty.
Common/Packages
Architecture independent, platform independent packages
OEMCommonFM.xml - feature manifest file that enumerates common packages and defines common
features.
Source-<arch>
Packages
Architecture specific, platform independent packages
versioninfo.txt: Current version number.
OEMFM.xml - the feature manifest file that enumerates arch specific packages and defines arch
specific features.
OEMFMList.xml - enumeration of OEM FM files.
BSP
<bspname>/Packages
Architecture specific, platform specific packages
<bspname>FM.xml - feature manifest that enumerates the bsp packages and defines
supported device layouts and features
<bspname>FMList.xml - enumeration of BSP FM files.
<bspname>/OemInputSamples
sample oeminput files demonstrating how to use the bsp, these files are used as
templates in newproduct.cmd
Products
architecture specific named products
Templates
Templates used by tools to create new bsp/product
Tools
Includes the IoT Core Add-ons command-line tools
Sample packages
Sample packages are provided in the iot-adk-addonkit that can be used as a reference or as is in your image, if it
meets your needs. Few of such packages are listed here.
Common Packages
PACKAGE NAME DESCRIPTION
NOTE
The security packages contain test contents and you should replace them with your own device specific content when
creating your final image. See Security, BitLocker and Deviceguard for more details.
BSP
Source files to create board support packages (BSPs).
Some BSPs are included in each folder as a start. You can create your own BSPs based on these packages.
Driver packages
PACKAGE NAME DESCRIPTION
Products
Source file for product configurations. Use our samples (SampleA, SampleB) or create your own.
PRODUCT DESCRIPTION
Related topics
IoT Core manufacturing guides
IoT Core feature list
IoT Core Add-ons command-line options
1/22/2018 • 7 min to read • Edit Online
These tools are part of the Windows 10 IoT Core (IoT Core) ADK Add-Ons, in the \Tools folder. To learn more about
these tools, see What's in the Windows ADK IoT Core Add-ons.
appx2pkg.cmd
Creates the folder structure and copies the template files for a new package.
BuildAgent.cmd
Builds FFUs for all OEMInputSamples under the Addon Kit directory. Can be used to automate nightly builds.
buildbsp.cmd
Builds BSP packages after signing all the required binaries.
Usage:
PARAMETERS DESCRIPTION
Examples
buildbsp rpi2
buildbsp rpi2 10.0.1.0
buildbsp all
buildbsp all 10.0.2.0
buildfm.cmd
Builds feature merger files.
Usage:
BSPName Required for BSP. Name of the BSP. Not required with OEM or
All
Examples
buildfm oem
buildfm bsp Rpi2
buildfm all
buildimage.cmd
Builds an image file (FFU), using the product-specific packages. Uses createimage.cmd, includes additional options.
Usage:
PARAMETERS DESCRIPTION
Examples:
PARAMETERS DESCRIPTION
packagefile.wm.xml Use this to refer to the package by its package definition XML
file.
Examples:
buildpkg Appx.Main
buildpkg Appx.Main 10.0.1.0
buildpkg sample.wm.xml
buildpkg sample.wm.xml 10.0.1.0
buildpkg All
buildpkg All 10.0.2.0
buildpkg Clean
buildrecovery.cmd
Creates a recovery image by adding required wim files to the recovery partition. See Add a recovery mechanism to
your image. This command also invokes newwinpe.cmd and buildimage.cmd if the winpe.wim and Flash.ffu files
are not present.
Usage:
PARAMETER DESCRIPTION
Example:
exportpkgs.cmd
Exports all the packages used in a product configuration to a directory.
Usage:
PARAMETERS DESCRIPTION
Examples:
flashsd.cmd
Flashes an image to a specified SD card. FlashSD.cmd requires you to specify a physical drive number. Connect
your SD card to your PC, and then open diskmgr.msc to see the physical drive number of the SD card.
Usage:
PARAMETERS DESCRIPTION
Example:
GetAppXInfo.exe
Extracts appx package-related information for a given .appx or .appbundle package.
Usage:
GetAppxInfo.exe appxfile
Example:
GetAppXInfo.exe IOTCoreDefaultApp_1.1.0.0_ARM.appx
inf2cab.cmd
Converts a .inf driver package to a .cab file.
Inf2cab saves the package in the \Build\<arch>\pkgs folder (example: Drivers.GPIO.cab).
Usage
PARAMETERS DESCRIPTION
Examples:
inf2cab C:\test\gpiodriver.inf
inf2cab C:\test\gpiodriver.inf Drivers.GPIO
inf2pkg.cmd
Creates the folder structure and copies the template files for a new package
Usage:
inf2pkg input.inf [CompName.SubCompName] OwnerName
PARAMETERS DESCRIPTION
Example:
inf2pkg C:\test\testdriver.inf
IoTCoreShell.cmd
Opens the IoT Core Shell as an administrator. (This file is in the root folder, and uses LaunchTool.cmd)
After you open IoTCoreShell, you'll be prompted to choose a default architecture (ARM or x86) for the devices
you'll be building. This sets your default starting set of system variables.
LaunchTool.cmd
Configures the command shell with required settings.
newappxpkg.cmd
Creates a new package folder to help you convert appx packages to .cab files. The provisioning package version
(version field in customizations.xml) is set to the appx version itself.
This command creates the working folder in the \Source-<arch>\Packages\ folder.
If you run this command without any variables, you'll also see the other working folders in the \Source-
<arch>\Packages\ folder.
Usage:
PARAMETERS DESCRIPTION
Example:
newbsp.cmd
Creates the folder structure and copies the template files for creating a new board support package (BSP).
Usage:
newbsp BSPName
PARAMETER DESCRIPTION
Example:
newbsp CustomRPi2
newcommonpkg.cmd
Creates a new working folder to help you add files, folders, registry keys, and provisioning packages as .cab files.
After using this command, use the buildpkg command to create your final .cab file.
This command creates the working folder in the \Common\Packages\ folder.
If you run this command without any variables, you'll also see the other working folders in the
\Common\Packages\ folder.
Usage:
newcommonpkg CompName.SubCompName
PARAMETER DESCRIPTION
Example:
newcommonpkg Registry.FilesAndRegKeys
To learn more, see Lab 1c: Add a file and a registry setting to an image.
newdrvpkg.cmd
Used to add a driver to an image. Creates a new working folder to help you convert driver packages to .cab files.
After using this command, use the buildpkg command to create your final .cab file.
This command creates the working folder in the \Source-<arch>\Packages\ folder.
If you run this command without any variables, you'll also see the other working folders in the \Source-
<arch>\Packages\ folder.
Usage:
PARAMETERS DESCRIPTION
Example:
newproduct.cmd
Used to create new product configuration. Creates a new working product directory under \Products and copies
the contents from the template file.
Usage:
PARAMETER DESCRIPTION
Example:
newwinpe.cmd
Creates a WinPE image for a specified bsp and a device layout (identified by the socname). See Add a recovery
mechanism to your image.
Usage:
newwinpe <bspname> <socname>
PARAMETER DESCRIPTION
Example:
retailsign.cmd
Toggles between using OEM cross-certificate and test certificates for signing
Usage:
retailsign {On/Off}
PARAMETERS DESCRIPTION
Off Disables Cross Cert for signing and enables OEM Test Signing.
Examples:
retailsign On
retailsign Off
setenv.cmd
Resets your environment variables, including IOTADK_ROOT, COMMON_DIR, SRC_DIR, BLD_DIR, PKGBLD_DIR,
TOOLS_DIR, and more.
Open setenv.cmd in a text editor to see the full list of variables set.
Usage:
setenv {arm|x86|x64}
PARAMETER DESCRIPTION
Example:
setenv.cmd arm
setOEM.cmd
Sets your OEM company name. Edit this file with a text editor.
Example:
set OEM_NAME=Fabrikam
Where Fabrikam is the OEM company name.Only alphanumeric characters are supported in the OEM_NAME as
this is used as a prefix for various generated file names.
setsignature.cmd
Sets the Cross-Certificates for kernel-mode code signing
setversion.cmd
Sets the version numbers used when creating a package with createpkg.cmd or a provisioning package with
createprovpkg.cmd.
This version information is stored in %PRJ_DIR%\versioninfo.txt and loaded back when the IoT Core Shell is
launched again. Whenever the package contents are changed, the version has to be updated and all packages need
to be recreated.
Usage:
setversion x.y.z.a
PARAMETERS DESCRIPTION
Example:
setversion 10.0.0.1
signbinaries.cmd
Signs different file types in a directory
Usage:
PARAMETERS DESCRIPTION
file extension Signs all files of a specified type. For example, .cab, .dll, .sys,etc.
Example:
Related topics
IoT Core Add-ons
IoT Core manufacturing guides
Update the time server
9/29/2017 • 1 min to read • Edit Online
By default, IoT Core devices are setup to synchronize time from time.windows.com. If you don’t have internet
connectivity or behind a firewall, then you’ll need to synchronize the system time for your IoT Core devices to a
time server reachable in your network. You can change the time server or add multiple time servers using the
information below.
Update the server from a command line (for example, using a tool like
PuTTY):
1. Identify the required NTP server(s) and make sure you can reach them from your network. For example, if
time.windows.com, NTPServer1, NTPServer2 are the three desired NTP servers, make sure the following
commands succeed when run on a Windows computer on the network before using in an IoT device:
2. Modify the W32Time service configuration on the IoT device to use your NTP time server(s).
4. Verify the time servers from which the device is currently receiving time.If you restarted the time service,
allow a minute or so before verifying the time service.
<OSComponent>
<RegKeys>
<RegKey KeyName="$(hklm.system)\CurrentControlSet\Services\w32time\Parameters">
<RegValue Name="NtpServer" Value="time.windows.com,0x9 NtpServer1,0x9 NtpServer2,0x9"
Type="REG_SZ"/>
</RegKey>
</RegKeys>
</OSComponent>
Create Windows Universal OEM Packages
11/7/2017 • 5 min to read • Edit Online
The Windows Universal OEM packaging standard is supported on Windows IoT Core, version 1709.
This new packaging schema is built to be compatible with more types of devices in the future. If you've built
packages for IoT Core devices using the legacy packaging standard (pkg.xml), and you'd like to use them on IoT
devices, you can convert them to the new packaging standard.
Packages
Packages are the logical building blocks used to create IoT Core images.
Everything you add is packaged. Every driver, library, registry setting, system file, and customization that you
add to the device is included in a package. The contents and location of each item are listed in a package
definition file (*.wm.xml).
Packages can be updated by trusted partners. Every package on your device is signed by you or a trusted
partner. This allows OEMs, ODMs, developers, and Microsoft work together to help deliver security and feature
updates to your devices without stomping on each other's work.
Packages are versioned. This helps make updates easier and makes system restores more reliable.
3. Create the empty package file (*.cab). The filename created is based on the owner, namespace, and name
from the file.
Directory of c:\oemsample
Example:
<drivers>
<driver>
<inf source="$(_RELEASEDIR)\Media.inf"/>
</driver>
</drivers>
If the default file import path is not equal to the INF source path, you can use the defaultImportPath attribute. In the
following example, the INF is in the current directory, but the files to be imported are relative to $(_RELEASEDIR).
<drivers>
<driver defaultImportPath="$(_RELEASEDIR)">
<inf source="Media.inf"/>
</driver>
</drivers>
If files to be imported are not relative to how they are defined in the INF, file overrides can be applied. This is not
recommended, but is available for special cases.
<drivers>
<driver>
<inf source="Media.inf"/>
<files>
<file name="mdr.sys" source="$(_RELEASEDIR)\path1\mdr.sys" />
<file name="mdr.dll" source="$(_RELEASEDIR)\path2\mdr.dll" />
</files>
</driver>
</drivers>
<service
dependOnService="AudioSrv;AccountProvSvc"
description="@%SystemRoot%\system32\MediaService.dll,-201"
displayName="@%SystemRoot%\system32\MediaService.dll,-200"
errorControl="normal"
imagePath="%SystemRoot%\system32\svchost.exe -k netsvcs"
name="MediaService"
objectName="LocalSystem"
requiredPrivileges="SeChangeNotifyPrivilege,SeCreateGlobalPrivilege"
sidType="unrestricted"
start="delayedAuto"
startAfterInstall="none"
type="win32UserShareProcess"
>
<identity
xmlns="urn:Microsoft.CompPlat/ManifestSchema.v1.00"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="MediaService"
namespace="Media"
owner="OEM"
buildWow="true"
>
Running PkgGen.exe with now generate one WOW package for each host package.
Typically, the 64 bit device will get its Host 64 bit package and either its Guest 32 bit or WOW package, both
generated from myPackage.wm.xml. To avoid resource conflicts between the two packages, use build filters:
<regKeys buildFilter="not build.isWow and build.arch = arm" >
<regKey keyName="$(hklm.software)\OEMName\MediaService">
<regValue
name="StringValue"
type="REG_SZ"
value="MediaService"
/>
</regKey>
In this case, the registry keys are exclusive to the Host 32 bit ARM package. The CPU switch is used to set build.arch,
and build.isWow is set by PkgGen to false when building the 32 bit Host Package, then true when building the 32
bit Guest or WOW package.
Or, from the IoTCoreShell prompt, convert using either convertpkg or buildpkg. The output wm.xml files are saved
to the same folder.
convertpkg.cmd MyPackage.pkg.xml
buildpkg.cmd MyPackage.pkg.xml
buildpkg.cmd MyPackage.wm.xml
After you’ve converted the files to wm.xml format, it’s safe to delete the pkg.xml files.
Regenerate your app packages
Use the newAppxPkg with the same component name. This regenerates the customizations.xml file. The version
number of the appx is retained as the version number for ppkg.
newAppxPkg
"C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga
Appx.MyUWPApp
<Customizations>
<Common>
<Policies>
<ApplicationManagement>
<AllowAppStoreAutoUpdate>Allowed</AllowAppStoreAutoUpdate>
<AllowAllTrustedApps>Yes</AllowAllTrustedApps>
</ApplicationManagement>
Provisioning packages (PPKG) now support four-part versioning similar to the package versioning. So with this
change, version 1.19 > 1.2. Previous versions used character-based sorting, so version 1.19 was considered earlier
than 1.2.
Learn more: Add provisioning files
Windows Universal OEM Package Schema
10/5/2017 • 1 min to read • Edit Online
You can manually edit your packages using the Universal OEM Package Schema.
Creating Windows Universal OEM Packages
Schema
Only the common elements and attributes are documented here.
To get the full schema run "pkggen /universalbsp /wmxsd:.", then open WM0.XSD with Visual Studio.
identity
ATTRIBUTE TYPE REQUIRED MACRO NOTES
owner string *
name string * *
namespace string *
onecorePackageInfo
ATTRIBUTE TYPE REQUIRED MACRO NOTES
file
ATTRIBUTE TYPE REQUIRED MACRO NOTES
source string * *
buildFilter string
buildFilter string
To see the registry keys that map to these locations, see C:\Program Files (x86)\Windows
Kits\10\tools\bin\i386\pkggen.cfg.xml.
regValue
ATTRIBUTE TYPE REQUIRED MACRO NOTES
value string
buildFilter string
<regKey buildFilter="buildFilter1" keyName="keyName1">
<regValue buildFilter="buildFilter1" name="name1" value="value1" type="REG_SZ" />
<regValue buildFilter="buildFilter2" name="name2" value="value1,value2" type="REG_MULTI_SZ" />
<regValue buildFilter="buildFilter3" name="name3" value="00000000FFFFFFFF" type="REG_QWORD" />
<regValue buildFilter="buildFilter4" name="name4" value="FFFFFFFF" type="REG_DWORD" />
<regValue buildFilter="buildFilter5" name="name5" value="0AFB2" type="REG_BINARY" />
<regValue buildFilter="buildFilter6" name="name6" value=""%ProgramFiles%\MediaPlayer\wmplayer.exe""
type="REG_EXPAND_SZ" />
</regKey>