Windows Deployment Customization
Windows Deployment Customization
Get started
Design
Customize
Overview
Desktop customizations
Taskbar
Customize the Windows 11 Taskbar
Customize the Windows 10 Taskbar
Start layout
Customize the Windows 11 Start layout
Customize the Windows 10 Start layout
Out of Box Experience (OOBE)
OOBE for Windows 11
Out of Box Experience overview
OOBE.xml
OOBE screen details
Windows updates during OOBE
OEM license terms
OEM registration pages
OOBE for Windows 10
Out of Box Experience (OOBE)
OOBE.xml
Cortana voice support
OOBE screen details
Windows updates during OOBE
OEM license terms
OEM registration pages
Design your registration pages
Configure OOBE.xml
OEM HID pairing
Protect and collect user data
Automate OOBE
Themes
Wallpaper and themes in Windows 11
Dark mode
Settings for better tablet experiences
Retail demo experience
Windows performance power slider
Themes
Desktop background and themes in Windows 11
Dark mode
Get Help app
SIM card slot names
Country and Operator Settings Asset
Mobile broadband: SAR table
Pen and Windows ink
Enterprise desktop customizations
WEDL_AssignedAccess
Custom Logon
Complementary features to Custom Logon
Troubleshooting Custom Logon
Keyboard Filter
Keyboard Filter key names
Predefined key combinations
Keyboard Filter WMI provider reference
WEKF_CustomKey
WEKF_PredefinedKey
WEKF_Scancode
WEKF_Settings
Windows PowerShell script samples for Keyboard Filter
Add blocked key combinations
Disable all blocked key combinations
List all configured key combinations
Modify global settings
Remove key combination configurations
Shell Launcher
WESL_UserSetting
WESL_UserSetting.GetCustomShell
WESL_UserSetting.RemoveCustomShell
WESL_UserSetting.SetCustomShell
WESL_UserSetting.SetDefaultShell
WESL_UserSetting.GetDefaultShell
WESL_UserSetting.IsEnabled
WESL_UserSetting.SetEnabled
Unbranded Boot
Unified Write Filter (UWF) feature
Hibernate Once/Resume Many (HORM)
Write filter exclusions
Overlay location and size
Turn on UWF
Service UWF-protected devices
Antimalware support on UWF-protected devices
Apply Windows updates to UWF-protected devices
Apply OEM updates to UWF-protected devices
UWF master servicing script
UWF servicing screen saver
Troubleshooting Unified Write Filter (UWF)
Unified Write Filter WMI provider reference
UWF_ExcludedFile
UWF_ExcludedRegistryKey
UWF_Filter
UWF_Overlay
UWF_RegistryFilter
UWF_Servicing
UWF_Volume
Windows Embedded Systems7 Enhanced Write Filter to Windows 10 Unified
Write Filter
uwfmgr.exe
Windows System Image Manager Technical Reference
Overview
Scenarios Overview
User Interface Overview
Windows Image Files and Catalog Files Overview
Answer Files Overview
Best Practices for Authoring Answer Files
Distribution Shares and Configuration Sets Overview
How-to Topics
Open a Windows Image or Catalog File
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
Add a Device Driver Path to an Answer File
Add a Package to an Answer File
Add a Custom Command to an Answer File
Find a Component, Setting, or Package in Windows SIM
Create a Configuration Set
Create or Open a Distribution Share
Add languages to a Windows distribution share
Manage Files and Folders in a Distribution Share
Add Packages to a Distribution Share
Reference
Component Settings and Properties Reference
Windows System Image Manager Architecture
Windows System Image Manager Supported Platforms
Unattended Windows Setup Reference
Power settings
Power settings overview
Update power settings
Adaptive hibernate
Adaptive hibernate overview
StandbyBudgetPercent
StandbyReserveTime
Power controls
Power controls overview
EnableInputSuppression
LidNotificationsAreReliable
Processor power management options
Processor power management options overview
Static configuration options for core parking
Static configuration options for core parking overview
CPMinCores
CPMaxCores
CPIncreaseTime
CPDecreaseTime
CPConcurrency
CPDistribution
CPHeadroom
CpLatencyHintUnpark
Static configuration options for the performance state engine
Static configuration options for the performance state engine overview
MaxFrequency
MaxPerformance
MinPerformance
PerfBoostMode
PerfIncreaseThreshold
PerfIncreaseTime
PerfDecreaseThreshold
PerfDecreaseTime
PerfLatencyHint
PerfAutonomousMode
PerfEnergyPreference
PerfAutonomousWindow
DutyCycling
Static configuration options for heterogeneous power scheduling
Static configuration options for heterogeneous power scheduling overview
HeteroIncreaseThreshold
HeteroDecreaseThreshold
HeteroIncreaseTime
HeteroDecreaseTime
HeteroClass1InitialPerf
HeteroClass0FloorPerf
SchedulingPolicy
ShortSchedulingPolicy
Battery settings
Battery settings overview
Critical battery action
Critical battery threshold
Low battery action
Low battery threshold
Low battery warning
Reserve battery level
Power button and lid settings
Power button and lid settings overview
Lid open wake action
Lid switch close action
Power button action
Power button forced shutdown
Sleep button action
Display settings
Display settings overview
Adaptive display idle timeout
Advanced color quality bias
Allow display required policy
Dim annoyance timeout
Dim display brightness
Display brightness level
Display idle timeout
Disk settings
Disk settings overview
Disk burst ignore time
Disk idle timeout
Link power management mode - adaptive
Link power management mode - HIPM/DIPM
Energy Saver settings
Energy Saver settings overview
Battery threshold
Brightness
PCI Express settings
PCI Express settings overview
Link state power management
Sleep settings
Sleep settings overview
Allow away mode
Allow sleep with open remote files
Allow sleep states
Allow system required requests
Automatically wake for tasks
Hibernate idle timeout
Hybrid sleep
Sleep idle timeout
Sleep unattended idle timeout
Other power settings
Other power settings overview
Device idle policy
Prompt for password on resume
Allow networking during standby
Legacy configuration options
PERFBOOSTPOL
Preinstalled and exclusive apps
Preinstallable apps for desktop devices
Preinstall tasks
Change history for customization docs
Manufacture
Service
Test for performance and compatibility
Customize
6/24/2021 • 2 minutes to read
Purpose
Customizations of the Windows OS are ways in which partners can modify the Windows device UI, connectivity
settings, and user experience to better reflect the partners' brand, and to fit the network and market in which the
device ships. Customization options include adding applications, modifying icons and Start layouts, configuring
network settings by using device management, changing defaults in Settings , and adding brand-specific art
and sounds to the OS.
See the following sections for more information about what you can do to customize your devices.
TO P IC DESC RIP T IO N
Customizations for desktop This section includes topics describing key desktop
customization opportunities, as well the Unattended
Windows Setup Reference, and Windows System Image
Manager Technical Reference.
Customizations for enterprise desktop Learn about the customizations available to you if you are
providing a controlled and specialized experience on a
Windows device running Windows 10 Enterprise.
Configure power settings Learn about the power settings you can configure using the
Windows provisioning framework. Each power setting topic
includes the identification GUID, allowed values, meaning,
and common usage scenarios for the setting.
Preinstalled and exclusive apps If you're a Windows OEM or mobile operator partner, find
out how you can create partner apps that you can package
and configure to install during the initial device setup
process. While the user is going through the initial setup
process, the preinstalled apps are installed in the
background. OEMs can also work with software developers
to target OEM devices for apps to appear exclusively on,
based on registry keys.
Change history for Customize Review the timeline of Customization topics that have been
created, updated, or deleted.
Audience
This section of the partner documentation is intended for Original Equipment Manufacturers (OEMs), Original
Design Manufacturers (ODMs), Independent Hardware Vendors (IHVs), system builders, mobile operators, and IT
administrators.
If you have purchased a Windows 10 device and would like to learn more about using its features, please see
Microsoft's Windows support site online at https://support.microsoft.com/en-us/products/windows?
os=windows-10.
Customizations for desktop devices
3/5/2021 • 2 minutes to read
You have the following options to customize your image. Depending on which options you’d like to use, you’ll
employ the associated method or choice of methods to apply the customization.
NOTE
All desktop customization options listed above are supported in Windows 10 in S mode. To learn more, see Windows 10
in S mode manufacturing overview.
In this section
These are some common ways to customize your desktop device. You will also find the technical reference for
Unattend and WSIM.
TO P IC DESC RIP T IO N
Customize the taskbar You can pin up to three additional apps to the taskbar by
adding a taskbar layout modification file, for example,
TaskbarLayoutModification.xml. You can specify different
taskbar configurations based on SKU, device locale, or
region.
Customize the Start layout Learn how to customize the Start menu with a group of your
own tiles.
Customize OOBE When customers turn on their Windows PCs for the first
time, they will see the Windows Out of Box Experience
(OOBE). Customize OOBE to determine how much work
customers must do to complete the OOBE screens before
they can enjoy their PCs running Windows 10.
Customize the Retail Demo Experience (RDX) Showcase your new devices on the retail sales floor with a
rich, engaging videos and experiences.
TO P IC DESC RIP T IO N
Customize the Windows power slider The Windows Performance Power slider enables end
customers to quickly and intelligently trade performance of
their system for longer battery life. You can set the default
slider mode for both AC and DC, and configure the power
settings and PPM options that are engaged in each power
slider mode.
Set dark mode This personalization setting for end users allows them to
express preference whether to see applications which
support the setting in a dark or light mode. You can set the
dark mode as the default for apps using Unattend.
Customize the Get Help app The Get Help app empowers customers to self-help with
troubleshooters, instant answers, Microsoft support articles,
and more, before contacting assisted support. You can
customize the Get Help app to surface your support app or
support website.
Customize SIM card slot names You can customize the names of SIM card slots on the device
to more easily differentiate between them. For example, if
the device has both an embedded SIM slot and an external
SIM slot, customizing the names will help your customers
understand which is which.
Customize a Specific Absorption Rate mapping table You can configure and store a Specific Absorption Rate (SAR)
table for mobile broadband modems in the registry. When a
mobile broadband modem is connected to the Windows
device, Windows automatically uses the table to map the
mobile country code (MCC) of the modem's registered
mobile operator (MO) to its appropriate SAR back-off index,
and configures the modem with it.
Pen and Windows ink You can create an advanced Pen settings app, or link to your
own apps, in the Pen and Windows Ink settings.
Windows SIM Technical Reference Settings reference for Windows System Image Manager.
Related topics
OEM deployment of Windows 10 for desktop editions
Planning a Windows 10 in S mode deployment
Deployment options
Customize the Taskbar
6/24/2021 • 5 minutes to read
TIP
For the Windows 10 version of this topic, see Customize the Windows 10 Taskbar
You can pin up to three additional apps to the Taskbar. You can configure Taskbar pins using one of these two
methods:
TaskbarLayoutModification.XML method (recommended)
Supports multivariant images; you can specify different sets of taskbar layouts for different regions.
Uses a single XML file.
Only method that allows you to add UWP apps to the taskbar.
In the examples below, the file name "TaskbarLayoutModification.xml" is used, however, you can
choose any name you like.
Classic Unattend method (still supported in Windows 10, but marked as deprecated and may not be
available in future builds)
Uses the Unattend setting: TaskbarLinks
<CustomTaskbarLayoutCollection PinListPlacement="Replace">
<defaultlayout:TaskbarLayout>
<taskbar:TaskbarPinList>
<taskbar:UWA AppUserModelID ="Microsoft.WindowsNotepad_8wekyb3d8bbwe!App"/>
<taskbar:UWA AppUserModelID="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
<taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start
Menu\Programs\System Tools\Command Prompt.lnk"/>
</taskbar:TaskbarPinList>
</defaultlayout:TaskbarLayout>
</CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>
The above example defines a default layout that has three pinned items: Notepad, the Calculator UWP app, and
Command Prompt.
Adding pins to your layout
Pin Classic Windows applications or Universal Windows Apps to your Taskbar by adding up to three elements
under the <taskbar:TaskbarPinList> element:
To add a Classic Windows application , add a <taskbar:DesktopApp> element with a
DesktopApplicationLinkPath attribute that specifies the path to a shortcut (.lnk) file. We recommend using
the same shortcut .lnk files in the All Users Start menu. Example:
<taskbar:TaskbarPinList>
<taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start
Menu\Programs\System Tools\Command Prompt.lnk"/>
</taskbar:TaskbarPinList>
NOTE
Some classic Windows applications are now packaged differently than they were in previous versions of Windows.
See Notepad and Paint to learn more.
For Universal Windows apps , add a <Taskbar:UWA> element with a AppUserModelID attribute that
specifies the a Universal Windows app's user model ID (AUMID). Example:
<taskbar:TaskbarPinList>
<taskbar:UWA AppUserModelID="Microsoft.Windows.Photos_8wekyb3d8bbwe!App"/>
</taskbar:TaskbarPinList>
See Find the Application User Model ID of an installed app to learn how to find the AUMID of an installed
app.
NOTE
Links to .url files are not supported.
<defaultlayout:TaskbarLayout Region="CN|TW">
NOTE
These regions use the second half of the language/region tags listed in Available Language Packs for Windows.
The example below shows a TaskbarLayoutModification.xml file with a default configuration, and two
configurations for specific regions:
<CustomTaskbarLayoutCollection PinListPlacement="Replace">
<defaultlayout:TaskbarLayout>
<taskbar:TaskbarPinList>
<taskbar:UWA AppUserModelID="Microsoft.Windows.Photos_8wekyb3d8bbwe!App" />
<taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start
Menu\Programs\System Tools\Command Prompt.lnk"/>
</taskbar:TaskbarPinList>
</defaultlayout:TaskbarLayout>
<defaultlayout:TaskbarLayout Region="US|GB">
<taskbar:TaskbarPinList >
<taskbar:UWA AppUserModelID ="Microsoft.WindowsNotepad_8wekyb3d8bbwe!App"/>
<taskbar:UWA AppUserModelID="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
</taskbar:TaskbarPinList>
</defaultlayout:TaskbarLayout>
<defaultlayout:TaskbarLayout Region="CN|TW">
<taskbar:TaskbarPinList>
<taskbar:UWA AppUserModelID ="Microsoft.WindowsNotepad_8wekyb3d8bbwe!App"/>
<taskbar:UWA AppUserModelID="Microsoft.Windows.Photos_8wekyb3d8bbwe!App" />
<taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start
Menu\Programs\System Tools\Command Prompt.lnk"/>
</taskbar:TaskbarPinList>
</defaultlayout:TaskbarLayout>
</CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>
NOTE
We recommend using the file location C:\Windows\OEM\TaskbarLayoutModification.xml because this is the
default path used for Push-button reset auto-apply folders.
How Windows parses the setting for Unattend and Taskbar Layout
Modification XML
While you’re transitioning to the new method to customize the taskbar, you may end up using existing images
that still include your old Unattend TaskbarLinks settings. When that happens:
1. If Windows finds a valid Taskbar Layout Modification XML file, it uses the XML file, and ignores any of the
Unattend taskbar settings.
2. If the Taskbar Layout Modification XML file isn't found, or is invalid, Windows looks for the old Unattend
TaskbarLinks settings. If it finds them, it uses them.
3. If Windows can't find either a valid Taskbar Layout Modification XML file, or Unattend TaskbarLink settings,
then only the Windows-provided pins and Star t , Search (Glyph) , Task View , Widgets , Chat , and Taskbar
corner icons are shown.
Customize the Windows 10 Taskbar
6/24/2021 • 4 minutes to read
TIP
For the Windows 11 version of this topic, see Customize the Windows 11 Taskbar
You can pin up to three additional apps to the taskbar. There are two methods to do this:
Taskbar Layout Modification XML method (recommended)
Supports multivariant images; you can specify different sets of taskbar layouts for different regions.
Uses a single XML file.
Is the only method that allows you to add UWP apps to the taskbar.
In the examples below, the file name “TaskbarLayoutModification.xml” is used, however, you can
choose any name you like.
Classic Unattend method (still supported in Windows 10, but marked as deprecated, and may not be
available in future builds)
Uses the Unattend setting: TaskbarLinks
Configure taskbarlayoutmodification.xml
1. Install the Windows image to a technician computer.
2. After the image boots, go into audit mode by pressing CTRL+SHIFT+F3.
3. Add the following registry key to define a default location for the Taskbar Layout Modification file:
cmd /c reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ /v LayoutXMLPath /d
C:\Windows\OEM\TaskbarLayoutModification.xml
4. Add a Taskbar Layout Modification file (TaskbarLayoutModification.xml) in the default location, for
example: C:\Windows\OEM\TaskbarLayoutModification.xml . We also recommend placing a backup copy of
the file at C:\Recovery\AutoApply\TaskbarLayoutModification.xml so it will be restored during a push-
button reset.
<CustomTaskbarLayoutCollection PinListPlacement="Replace">
<defaultlayout:TaskbarLayout>
<taskbar:TaskbarPinList>
<taskbar:UWA AppUserModelID="Microsoft.Windows.Photos_8wekyb3d8bbwe!App" />
<taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start
Menu\Programs\Accessories\Paint.lnk"/>
</taskbar:TaskbarPinList>
</defaultlayout:TaskbarLayout>
<defaultlayout:TaskbarLayout Region="US|GB">
<taskbar:TaskbarPinList >
<taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start
Menu\Programs\Accessories\Notepad.lnk" />
<taskbar:UWA AppUserModelID="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
</taskbar:TaskbarPinList>
</defaultlayout:TaskbarLayout>
<defaultlayout:TaskbarLayout Region="CN|TW">
<taskbar:TaskbarPinList>
<taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start
Menu\Programs\Accessories\Notepad.lnk" />
<taskbar:UWA AppUserModelID="Microsoft.Windows.Photos_8wekyb3d8bbwe!App" />
<taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start
Menu\Programs\Accessories\Paint.lnk"/>
</taskbar:TaskbarPinList>
</defaultlayout:TaskbarLayout>
</CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>
For Universal Windows apps , use the Universal Windows app user model ID. Example:
UWA AppUserModelID="Microsoft.Windows.Photos_8wekyb3d8bbwe!App"
NOTE
Links to .url files are not supported.
<defaultlayout:TaskbarLayout Region="CN|TW">
How Windows parses the setting for Unattend and Taskbar Layout
Modification XML
While you’re transitioning to the new method to customize the taskbar, you may end up using existing images
that still include your old Unattend TaskbarLinks settings. When that happens:
1. If Windows finds a valid Taskbar Layout Modification XML file, it uses the XML file, and ignores any of the
Unattend taskbar settings.
2. If the Taskbar Layout Modification XML file isn't found, or is invalid, Windows looks for the old Unattend
TaskbarLinks settings. If it finds them, it uses them.
3. If Windows can't find either a valid Taskbar Layout Modification XML file, or Unattend TaskbarLink settings,
then only the Windows-provided pins and Star t , Search , and Task View are shown.
IMPORTANT
This registry key should only be used to change the taskbar transparency for OLED screens. We do not advise changing
the default transparency on non-OLED displays.
Action Center
Most quick action tiles that are pinned in the Action Center are not customizable. You can, however, enable one
of the desktop quick action tiles, Color Profile , if more than one color profile is installed on the device. By
default, this quick action tile is not available. To let users see Color Profile in the Action Center:
1. Install at least two ICC color profiles on the primary display. For more information on how to accomplish
this, please work with your Microsoft representative.
2. Add the following registry key to enable the Microsoft.QuickAction.ColorProfile quick action:
HKLM\Software\Microsoft\Windows\Shell\OEM\QuickActions\ColorProfileQuickAction = 0x1 (DWORD)
Customize the Windows 11 Start layout
7/13/2021 • 18 minutes to read
TIP
For the Windows 10 version of this topic, see Customize the Windows 10 Start layout
OEMs can customize the Windows 11 Start layout so that OEM-defined items (apps and/or websites) are pinned
in certain areas of the Start menu.
Start layout customizations are configured with LayoutModification.json and, optionally,
LayoutModification.xml :
NOTE
You can't use Windows Configuration Designer or Unattend to configure the Windows 11 Start Menu.
NOTE
An item can only appear in the Pinned section once. It's not possible to pin an app in more than one location in this
section, whether on the same page or on different pages.
OEMs can customize the Start layout by creating a custom LayoutModification.json file and adding it to an
image, in the %localappdata%\Microsoft\Windows\Shell folder. You only need one LayoutModification.json in
your image, as these files can contain one or more of the top-level members in any combination.
If you're pinning web links, you'll also need to create a LayoutModification.xml file to use in combination with
LayoutModification.json .
IMPORTANT
Make sure your LayoutModification.json uses UTF-8 encoding.
LayoutModification.json
LayoutModification.json enables you to configure the pins within a Start layout's customizable sections.
LayoutModification.json members
M EM B ER DESC RIP T IO N
LayoutModification.json keys
Each of the above members can use the following possible members to define pins for each section:
K EY DESC RIP T IO N
TIP
Each single backslash character ( \ ) need to be escaped as \\ per JSON syntax.
Pin Conflicts
Third-party apps: Before Microsoft attempts to pin a third-party app, it first checks whether the exact
same app is already pinned by the OEM on any page. If it is, Microsoft keeps the OEM app pinned in its
place.
First-party apps defined by Microsoft on Page 1: Microsoft first-party apps (ex: Microsoft Edge, Mail,
Store) pinned on Page 1 cannot be moved by the OEM. If the OEM attempts to pin one of these apps on
Page 1 as well, it will be ignored.
Elevating Microsoft first-party apps: OEMs may pin a Microsoft first-party app (ex: Calculator, Camera) on
Page 1 and move its position to Page 1 so long as either it is not already pinned by Microsoft on Page 1
or is not pinned.
Web links use both LayoutModification.xml and LayoutModification.json. Each web link that's specified in
LayoutModification.json must have a corresponding SecondaryTile element in LayoutModification.xml:
LayoutModification.xml is used to configure the web link
LayoutModification.json references the configured web link
IMPORTANT
Make sure to include both LayoutModification files to your image.
Create a LayoutModification.xml
The easiest way to create a Start layout .xml file is to add website links on a Windows 10 reference PC's Start
menu, and then use PowerShell to export the layout. You'll need to include both the exported layout and your
LayoutModification.json in your image if you're using web pins.
See Export the Start Layout to learn how to export a Start Layout.
Use your exported Start layout to pin a web link
Your exported Start layout will contain SecondaryTile elements for each of the web links you've configured.
Make note of the AppUserModelID and TileID elements. You'll add these to your LayoutModification.json to pin
the web link.
Example web pin
Below is an example of a web pin from a LayoutModification.xml:
<start:SecondaryTile
AppUserModelID="Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App"
TileID="MSEdge.anfoedbkjbcacemdbigf.UserData.Default"
Arguments="--launch-tile --profile-directory=Default --app-id=anfoedbkjbhcfgooaffkopcacemdbigf --app-
url=https://www.bing.com/"
DisplayName="(Text of your choice to display in Start)"
Square150x150LogoUri="msappdata:///local/Favicons/Taskbar/anfoedbkjbhcfgooaffkopcacemdbigf/largefavicon.png"
Wide310x150LogoUri="ms-appx:///"
ShowNameOnSquare150x150Logo="true"
ShowNameOnWide310x150Logo="false"
BackgroundColor="#000000"
Size="2x2"
Row="0"
Column="0"/>
Add this tile to LayoutModification.json by adding a new JSON object in the section you want to add the pin:
Use the attribute from AppUserModelID ( "Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App" ) for the
packagedAppID value in LayoutModification.json.
Use the attribute from TileID ( "MSEdge.anfoedbkjbcacemdbigf.UserData.Default" ) for the tileID value in
LayoutModification.json.
Here's what it looks like, using the above example, to pin the web link to the bottom of the "Pinned" section:
...
"secondaryOEMPins": [
{ "packagedAppId": "Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!App",
"tileId": "MSEdge.anfoedbkjbcacemdbigf.UserData.Default" },
],
...
Pre-pinning Office
Office Click-to-Run (C2R) apps will automatically be pinned to Start by Windows if the apps are pre-installed.
Install the C2R version of Office using the Office pre-installation kit (OPK), and Windows will automatically
detect the Office installation and add the appropriate pins to Start. Not every C2R Office app will be pinned to
Start, only Word, Excel, and PowerPoint. This behavior is entirely automatic and does not require anything in
LayoutModification.json.
If C2R Office is not pre-installed, the other items pinned to Start will slide over to fill the place of these apps so
there are no gaps left in the middle of the layout.
Afrikaans af af-ZA
Albanian sq sq-AL
Amharic am am-ET
Armenian hy hy-AM
Assamese as as-IN
Basque eu eu-ES
Belarusian be be-BY
Bulgarian bg bg-BG
Burmese my my-MM
Catalan ca ca-ES
Czech cs cs-CZ
Danish da da-DK
Divehi dv dv-MV
Dzongkha dz dz-BT
Estonian et et-EE
Faroese fo fo-FO
Finnish fi fi-FI
Frisian fy fy-NL
Galician gl gl-ES
Georgian ka ka-GE
Greek el el-GR
Gujarati gu gu-IN
Hebrew he he-IL
Hindi hi hi-IN
Hungarian hu hu-HU
Icelandic is is-IS
Indonesian id id-ID
Irish ga ga-IE
isiXhosa xh xh-ZA
isiZulu zu zu-ZA
Japanese ja ja-JP
Kalaallisut kl kl-GL
TA G TO USE IN O L DER- ST Y L E TA G ( DO N OT USE IF
W IN DO W S L A N GUA GE L AY O UT M O DIF IC AT IO N . JSO N DIF F EREN T F RO M 2N D C O L UM N )
Kannada kn kn-IN
Kazakh kk kk-KZ
Khmer km km-KH
Kinyarwanda rw rw-RW
Kiswahili sw sw-KE
Korean ko ko-KR
Lao lo lo-LA
Latvian lv lv-LV
Lithuanian lt lt-LT
Luxembourgish lb lb-LU
Macedonian mk mk-MK
Malayalam ml ml-IN
Maltese mt mt-MT
Marathi mr mr-IN
Odia or or-IN
Pashto ps ps-AF
Persian fa fa-IR
Polish pl pl-PL
Romansh rm rm-CH
Russian ru ru-RU
TA G TO USE IN O L DER- ST Y L E TA G ( DO N OT USE IF
W IN DO W S L A N GUA GE L AY O UT M O DIF IC AT IO N . JSO N DIF F EREN T F RO M 2N D C O L UM N )
Sinhala si si-LK
Slovak sk sk-SK
Slovenian sl sl-SI
Telugu te te-IN
Thai th th-TH
Turkish tr tr-TR
Ukrainian uk uk-UA
Vietnamese vi vi-VN
Welsh cy cy-GB
Yi ii-Yiii ii-CN
JSON example
The example JSON snippet below shows examples of how to use each available language tag
For languages/locales you have localized text for, replace the placeholder language name in the snippet
with your actual text.
For languages/locales you don’t plan to have localized text for, remove the corresponding line in the
snippet. System will fall back to the default entry at the bottom for the text to display for those
languages/locales.
For any language that have multiple locale variants, you can specify just the major tag (the part before
the first hyphen) as a fallback for all other locales for that language. For example:
"caption": {
"en-US": "English (United States)",
"en-GB": "English (United Kingdom)",
"en": "text for all other locale variants of English"}
This would provide texts specifically for US English and UK English, and then for all the other locale
variants of English (eg. en-CA for Canada English), system will use the “en” caption text.
Full list of available caption languages:
"caption": {
"af": "Afrikaans",
"sq": "Albanian",
"gsw": "Alsatian",
"am": "Amharic",
"ar-DZ": "Arabic (Algeria)",
"ar-BH": "Arabic (Bahrain)",
"ar-EG": "Arabic (Egypt)",
"ar-IQ": "Arabic (Iraq)",
"ar-JO": "Arabic (Jordan)",
"ar-KW": "Arabic (Kuwait)",
"ar-LB": "Arabic (Lebanon)",
"ar-LY": "Arabic (Libya)",
"ar-MA": "Arabic (Morocco)",
"ar-OM": "Arabic (Oman)",
"ar-QA": "Arabic (Qatar)",
"ar-SA": "Arabic (Saudi Arabia)",
"ar-SY": "Arabic (Syria)",
"ar-TN": "Arabic (Tunisia)",
"ar-AE": "Arabic (United Arab Emirates)",
"ar-YE": "Arabic (Yemen)",
"hy": "Armenian",
"as": "Assamese",
"az-Cyrl": "Azerbaijani (Cyrillic)",
"az-Latn": "Azerbaijani (Latin)",
"bn-BD": "Bangla (Bangladesh)",
"ba-Cyrl": "Bashkir",
"eu": "Basque",
"be": "Belarusian",
"bn-IN": "Bengali (India)",
"bs-Cyrl": "Bosnian (Cyrillic)",
"bs": "Bosnian (Latin)",
"br-Latn": "Breton",
"bg": "Bulgarian",
"my": "Burmese",
"ca": "Catalan",
"ceb-Latn-PH": "Cebuano (Latin, Philippines)",
"ku-Arab": "Central Kurdish",
"ccp-Cakm-BD": "Chakma (Chakma, Bangladesh)",
"ccp-Cakm-IN": "Chakma (Chakma, India)",
"chr-Cher": "Cherokee (Cherokee)",
"zh-Hans-CN": "Chinese (Simplified, China)",
"zh-Hans-SG": "Chinese (Simplified, Singapore)",
"zh-Hant-HK": "Chinese (Traditional, Hong Kong SAR)",
"zh-Hant-MO": "Chinese (Traditional, Macao SAR)",
"zh-Hant-TW": "Chinese (Traditional, Taiwan)",
"co-Latn": "Corsican",
"hr-BA": "Croatian (Bosnia and Herzegovina)",
"hr-HR": "Croatian (Croatia)",
"cs": "Czech",
"da": "Danish",
"da": "Danish",
"prs-Arab": "Dari",
"dv": "Divehi",
"nl-BE": "Dutch (Belgium)",
"nl-NL": "Dutch (Netherlands)",
"dz": "Dzongkha",
"en-AU": "English (Australia)",
"en-BZ": "English (Belize)",
"en-CA": "English (Canada)",
"en-029": "English (Caribbean)",
"en-IN": "English (India)",
"en-IE": "English (Ireland)",
"en-JM": "English (Jamaica)",
"en-MY": "English (Malaysia)",
"en-NZ": "English (New Zealand)",
"en-PH": "English (Philippines)",
"en-SG": "English (Singapore)",
"en-ZA": "English (South Africa)",
"en-TT": "English (Trinidad and Tobago)",
"en-AE": "English (United Arab Emirates)",
"en-GB": "English (United Kingdom)",
"en-US": "English (United States)",
"en-ZW": "English (Zimbabwe)",
"et": "Estonian",
"fo": "Faroese",
"fil-Latn": "Filipino",
"fi": "Finnish",
"fr-BE": "French (Belgium)",
"fr-CA": "French (Canada)",
"fr-029": "French (Caribbean)",
"fr-FR": "French (France)",
"fr-LU": "French (Luxembourg)",
"fr-MC": "French (Monaco)",
"fr-CH": "French (Switzerland)",
"fy": "Frisian",
"ff-Adlm-BF": "Fulah (Adlam, Burkina Faso)",
"ff-Adlm-CM": "Fulah (Adlam, Cameroon)",
"ff-Adlm-GM": "Fulah (Adlam, Gambia)",
"ff-Adlm-GH": "Fulah (Adlam, Ghana)",
"ff-Adlm-GN": "Fulah (Adlam, Guinea)",
"ff-Adlm-GW": "Fulah (Adlam, Guinea-Bissau)",
"ff-Adlm-LR": "Fulah (Adlam, Liberia)",
"ff-Adlm-MR": "Fulah (Adlam, Mauritania)",
"ff-Adlm-NE": "Fulah (Adlam, Niger)",
"ff-Adlm-NG": "Fulah (Adlam, Nigeria)",
"ff-Adlm-SN": "Fulah (Adlam, Senegal)",
"ff-Adlm-SL": "Fulah (Adlam, Sierra Leone)",
"ff-Latn-BF": "Fulah (Latin, Burkina Faso)",
"ff-Latn-CM": "Fulah (Latin, Cameroon)",
"ff-Latn-GM": "Fulah (Latin, Gambia)",
"ff-Latn-GH": "Fulah (Latin, Ghana)",
"ff-Latn-GN": "Fulah (Latin, Guinea)",
"ff-Latn-GW": "Fulah (Latin, Guinea-Bissau)",
"ff-Latn-LR": "Fulah (Latin, Liberia)",
"ff-Latn-MR": "Fulah (Latin, Mauritania)",
"ff-Latn-NE": "Fulah (Latin, Niger)",
"ff-Latn-NG": "Fulah (Latin, Nigeria)",
"ff-Latn-SN": "Fulah (Latin, Senegal)",
"ff-Latn-SL": "Fulah (Latin, Sierra Leone)",
"gl": "Galician",
"ka": "Georgian",
"de-AT": "German (Austria)",
"de-DE": "German (Germany)",
"de-LI": "German (Liechtenstein)",
"de-LU": "German (Luxembourg)",
"de-CH": "German (Switzerland)",
"el": "Greek",
"gu": "Gujarati",
"ha-Latn": "Hausa (Latin)",
"haw-Latn": "Hawaiian",
"he": "Hebrew",
"hi": "Hindi",
"hu": "Hungarian",
"is": "Icelandic",
"ig-Latn": "Igbo",
"smn-Latn": "Inari Sami",
"id": "Indonesian",
"iu-Cans": "Inuktitut (Canadian Aboriginal Syllabics)",
"iu-Latn": "Inuktitut (Latin)",
"ga": "Irish",
"ga-GB": "Irish (United Kingdom)",
"xh": "isiXhosa",
"zu": "isiZulu",
"it-IT": "Italian (Italy)",
"it-CH": "Italian (Switzerland)",
"ja": "Japanese",
"quc-Latn": "K’iche’",
"kl": "Kalaallisut",
"kn": "Kannada",
"kk": "Kazakh",
"km": "Khmer",
"rw": "Kinyarwanda",
"sw": "Kiswahili",
"kok": "Konkani",
"ko": "Korean",
"ky-Cyrl": "Kyrgyz",
"lo": "Lao",
"lv": "Latvian",
"lt": "Lithuanian",
"dsb": "Lower Sorbian",
"smj-Latn-NO": "Lule Sami (Norway)",
"smj-Latn-SE": "Lule Sami (Sweden)",
"lb": "Luxembourgish",
"mk": "Macedonian",
"ms-BN": "Malay (Brunei)",
"ms-MY": "Malay (Malaysia)",
"ml": "Malayalam",
"mt": "Maltese",
"mi-Latn": "Maori",
"arn-Latn": "Mapuche",
"mr": "Marathi",
"moh-Latn": "Mohawk",
"mn-Cyrl": "Mongolian (Cyrillic)",
"mn-Mong": "Mongolian (Traditional Mongolian)",
"ne-IN": "Nepali (India)",
"ne-NP": "Nepali (Nepal)",
"se-Latn-FI": "Northern Sami (Finland)",
"se-Latn-NO": "Northern Sami (Norway)",
"se-Latn-SE": "Northern Sami (Sweden)",
"nb": "Norwegian (Bokmål)",
"nn": "Norwegian (Nynorsk)",
"oc-Latn": "Occitan",
"or": "Odia",
"ps": "Pashto",
"ps-PK": "Pashto (Pakistan)",
"fa": "Persian",
"pl": "Polish",
"pt-BR": "Portuguese (Brazil)",
"pt-PT": "Portuguese (Portugal)",
"pa-Arab": "Punjabi (Arabic)",
"pa": "Punjabi (Gurmukhi)",
"quz-Latn-BO": "Quechua (Bolivia)",
"quz-Latn-EC": "Quechua (Ecuador)",
"quz-Latn-PE": "Quechua (Peru)",
"ro-MD": "Romanian (Moldova)",
"ro-RO": "Romanian (Romania)",
"rm": "Romansh",
"ru": "Russian",
"sah-Cyrl": "Sakha",
"sa-Deva": "Sanskrit",
"gd-Latn": "Scottish Gaelic",
"sr-Cyrl-BA": "Serbian (Cyrillic, Bosnia and Herzegovina)",
"sr-Cyrl-ME": "Serbian (Cyrillic, Montenegro)",
"sr-Cyrl-RS": "Serbian (Cyrillic, Serbia)",
"sr-Latn-BA": "Serbian (Latin, Bosnia and Herzegovina)",
"sr-Latn-ME": "Serbian (Latin, Montenegro)",
"sr-Latn-RS": "Serbian (Latin, Serbia)",
"nso": "Sesotho sa Leboa",
"tn-BW": "Setswana (Botswana)",
"tn-ZA": "Setswana (South Africa)",
"sd-Arab": "Sindhi (Arabic)",
"si": "Sinhala",
"sms-Latn": "Skolt Sami",
"sk": "Slovak",
"sl": "Slovenian",
"sma-Latn-NO": "Southern Sami (Norway)",
"sma-Latn-SE": "Southern Sami (Sweden)",
"es-AR": "Spanish (Argentina)",
"es-BO": "Spanish (Bolivia)",
"es-CL": "Spanish (Chile)",
"es-CO": "Spanish (Colombia)",
"es-CR": "Spanish (Costa Rica)",
"es-DO": "Spanish (Dominican Republic)",
"es-EC": "Spanish (Ecuador)",
"es-SV": "Spanish (El Salvador)",
"es-GT": "Spanish (Guatemala)",
"es-HN": "Spanish (Honduras)",
"es-419": "Spanish (Latin America)",
"es-MX": "Spanish (Mexico)",
"es-NI": "Spanish (Nicaragua)",
"es-PA": "Spanish (Panama)",
"es-PY": "Spanish (Paraguay)",
"es-PE": "Spanish (Peru)",
"es-PR": "Spanish (Puerto Rico)",
"es-ES": "Spanish (Spain)",
"es-US": "Spanish (United States)",
"es-UY": "Spanish (Uruguay)",
"es-VE": "Spanish (Venezuela)",
"zgh-Tfng": "Standard Moroccan Tamazight",
"sv-FI": "Swedish (Finland)",
"sv-SE": "Swedish (Sweden)",
"syr-Syrc": "Syriac",
"tg-Cyrl": "Tajik (Cyrillic)",
"ta-IN": "Tamil (India)",
"ta-MY": "Tamil (Malaysia)",
"ta-SG": "Tamil (Singapore)",
"ta-LK": "Tamil (Sri Lanka)",
"tt-Cyrl": "Tatar (Cyrillic)",
"te": "Telugu",
"th": "Thai",
"bo-Tibt": "Tibetan",
"ti-ER": "Tigrinya (Eritrea)",
"ti-ET": "Tigrinya (Ethiopia)",
"tr": "Turkish",
"tk-Latn": "Turkmen (Latin)",
"uk": "Ukrainian",
"hsb": "Upper Sorbian",
"ur-IN": "Urdu (India)",
"ur-PK": "Urdu (Pakistan)",
"ug-Arab": "Uyghur",
"uz-Cyrl": "Uzbek (Cyrillic)",
"uz-Latn": "Uzbek (Latin)",
"ca-ES-valencia": "Valencian",
"vi": "Vietnamese",
"cy": "Welsh",
"wo-Latn": "Wolof",
"ii-Yiii": "Yi",
"ii-Yiii": "Yi",
"yo-Latn": "Yoruba",
"default": "fallback caption for other languages"
}
Customize the Start layout
6/24/2021 • 10 minutes to read
TIP
For the Windows 11 version of this topic, see Customize the Windows 11 Start layout
OEMs can customize the Start layout by adding an OEM group of tiles to the end of the Start layout. The layout
is customized by creating a LayoutModification.xml file. After following the instructions below to customize the
Start layout with the LayoutModification.xml file, use Windows Configuration Designer to add the file to the
device image. See Add the LayoutModification.xml file to the device for instructions.
The following image shows the default Start layout for Home and Pro SKUs (non-domain joined) with the
placement of an example OEM group of tiles. (The down arrow tiles represent apps specified by Microsoft that
are dynamically delivered – see below for more details.)
LayoutModification.xml
The LayoutModification.xml file specifies the OEM group, group name, the tiles in the group, what app or
website each tile launches, and the size and location of these tiles.
Sample LayoutModification.xml file
The sample LayoutModification.xml file below demonstrates how to pin three medium tiles to the OEM group
that appear in a single row and that launch UWP apps. (Note: The AppUserModelID for the apps in this sample
are not valid – see below for more details on how to find this ID.)
<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>
<AppendGroup Name="OEM Group Name">
<start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="OEMApp1AUMID" />
<start:Tile Size="2x2" Column="2" Row="0" AppUserModelID="OEMApp2AUMID" />
<start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="OEMApp3AUMID" />
</AppendGroup>
</RequiredStartGroups>
</RequiredStartGroupsCollection>
</LayoutModificationTemplate>
This XML would create an OEM group that looks like this:
More info:
To determine the overall look of the Start layout, the default layout is applied based on SKU and region, and
then the LayoutModification.xml or Unattend.xml file is processed.
Comments are not supported in the LayoutModification.xml file.
For an inclusive list of settings that can be configured in LayoutModification.xml (including those NOT
supported for OEM scenarios), other XML examples, and instructions on adding the XML file to the device,
see Start layout XML for desktop editions of Windows 10 (Reference).
We recommend placing a backup copy of the file at C:\Recovery\AutoApply\LayoutModification.xml so it will
be restored during a push-button reset.
We recommend that your tile layouts don't create the appearance of gaps in the layout.
Group name
Starting with Windows 10, version 1809, the OEM group must include a group name that describes either the
OEM name or hardware brand. Exception: the group name can be ommitted if there's only a single row of tiles in
the group, and the first tile in the row prominently contains the OEM or brand name or logo.
To set a group name, specify the Name attribute within the AppendGroup element, like this:
<AppendGroup Name="OEM Group Name">
NOTE
Each tile pinned to the Start layout must launch a single app or website. It must not launch a group of apps or be a folder.
App tiles
Use the start:Tile element to pin a Universal Windows app or a Windows 8/8.1 app to the Start layout. To
specify the app to launch, set the AppUserModelID attribute of start:Tile to the application user model ID
(AUMID) associated with the app. The AUMID is case-sensitive.
TIP
To find the AUMID for an installed app, see Find the Application User Model ID of an installed app.
<start:Tile
AppUserModelID="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
Size="2x2"
Row="0"
Column="0"/>
Use the start:DesktopApplicationTile element to pin a Windows (Win32) desktop application to the Start
layout. There are two ways to specify which application to launch for these tiles:
1. Set the DesktopApplicationLinkPath to a path to a shortcut link (.lnk file) to a Windows (Win32) desktop
application. The following shows how to pin the Command Prompt desktop application using the .lnk
method:
<start:DesktopApplicationTile
DesktopApplicationLinkPath="%appdata%\Microsoft\Windows\Start Menu\Programs\System Tools\Command
Prompt.lnk"
Size="2x2"
Row="0"
Column="0"/>
2. Set the DesktopApplicationID to the application's ID, if it's known. If the application doesn't have one, use
the shortcut link option above. The following example shows how to pin the File Explorer Windows
desktop application by specifying the desktop application ID:
<start:DesktopApplicationTile
DesktopApplicationID="Microsoft.Windows.Explorer"
Size="2x2"
Row="0"
Column="0"/>
IMPORTANT
In Windows 10, version 1803, all apps must either be pinned to the Start layout, and/or pre-installed using the new
region parameter in DISM, otherwise they will be removed on any system that uses that layout. See Preinstall apps using
DISM for guidance on using the new parameter.
To create a web link tile that will open in the default browser, create a .url file:
1. Right click on Desktop > New > Shortcut
2. Type a URL such as https://www.fabrikam.com
3. Click Next
4. Type a name for the shortcut such as Fabrikam and click Finish. The .url file is saved to your desktop.
5. Add the .url file to the image in the %ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\ folder, and
then add a DesktopApplicationTile element to the layout:
<start:DesktopApplicationTile
DesktopApplicationID="https://www.fabrikam.com"
Size="2x2"
Row="0"
Column="2"/>
<AppendOfficeSuite/>
<AppendOfficeSuiteChoice Choice="Desktop2016"/>
<AppendOfficeSuite/>
<AppendOfficeSuiteChoice Choice="DesktopBridgeSubscription"/>
<AppendOfficeSuite/>
<AppendOfficeSuiteChoice Choice="DesktopBridge"/>
<AppendOfficeSuite/>
If this property is set, devices that ship with the Pro SKU will be treated as Commercial, meaning they will
receive the Enterprise Start layout with fewer tiles and no dynamically delivered apps even if the end user
doesn't join a domain during OOBE. This property may not be used for Home SKU, nor may it be used for Pro
SKU devices that may be used by consumer customers.
Additionally, dynamically delivered apps will begin to transition to a "click-to-install" delivery mechanism. After
OOBE, app and game programmable tiles will appear, but the app or game will not yet be downloaded to the
device. When a customer launches a "click-to-install" app or game in Start, that specific app or game will
download to the device without redirecting the user to the Store (assuming the user is connected to the
internet). Not all apps and games will transition to "click-to-install" immediately.
Note: Due to government regulations, beginning with Windows 10, version 1809, dynamically delivered apps
and games have been disabled for devices that select the China region during OOBE.
First run tasks
First Run Tasks are background tasks that are active when the user first signs into Windows. First Run Tasks are
not available in LayoutModification.xml . However, you can still use them by including an Unattend.xml file with
StartTiles tags using the same AppID as in LayoutModification.xml .
If the AppendGroup tag is present in LayoutModification.xml , it will override Unattend.xml for all Start pinning.
However, if an Unattend.xml StartTiles tag exists for the same AppID as in LayoutModification.xml, the
FirstRunTask from Unattend.xml will be respected.
For example, include a LayoutModfication.xml file specifying an app like this:
Also include an Unattend.xml file specifying the same AppID like this:
<SquareOrDesktopTile5>
<AppId>Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge</AppId>
<FirstRunTask>BackgroundTasks_Notifications.Services.MessagingBackgroundTask</FirstRunTask>
</SquareOrDesktopTile5>
Related topics
Start layout XML for desktop editions of Windows (Reference)
Add the LayoutModification.xml file to the device
StartTiles Unattend setting
Customize the Out of Box Experience (OOBE)
6/24/2021 • 3 minutes to read
When customers turn on their Windows 11 PCs for the first time, they'll see the Windows Out of Box Experience
(OOBE). OOBE is a series of screens that require customers to accept license agreements, connect to the internet,
log in with, or sign up for a Microsoft Account (MSA), and share information with the OEM. The choices you
make in your hardware and software determine how much work customers must do to complete OOBE before
they can enjoy their new devices.
The OOBE flow is also designed to reduce cognitive load significantly by breaking up tasks into discrete chunks.
Although there are several pages in the OOBE flow, each one requests a specific action or input from the user.
This is helpful for our average customer (and even many power users) and has shown to reduce fatigue
significantly.
OOBE flow
The following is a non-exhaustive list of screens the user may see during OOBE. The order below is the generally
expected order of pages, however, some pages may not appear or may appear in a different order than the flow
below.
1. Language selection
2. Region selection
3. Keyboard selection
4. Connect to a network . Note that connecting to a network is required to complete OOBE on Home SKUs.
5. Download of critical patches and driver updates . See Windows updates during OOBE for more details.
6. End User License Agreement (EUL A)
7. Get the latest from Windows .
8. Sign in to, or create, a local account or Microsoft account (MSA) .
9. Welcome back . This screen displays if a user logs in with a Microsoft account and has previously backed up
a Windows device.
10. Windows Hello setup
11. Privacy settings . Users will see up to seven privacy settings on this screen. Not all users will see the same
settings.
12. Customize your device . See Device usage intent for more details
13. Save files to OneDrive
14. Microsoft 365 trial
15. OEM Registration pages . See Design guidance for OEM registration pages for design guidance.
Reboot scenarios
A device will reboot during OOBE if one or more of the following occurs:
A customer chooses a language that isn't the default language.
A device downloads a ZDP update during OOBE
After a reboot, a device will repeat one or more pages during OOBE if any of the following occurs:
A device didn't previously connect to a network
A device loses its network connection during the reboot.
Reaching the Desktop and the Quiet Period
When a user completes OOBE and get to the desktop, they'll see a calm experience. Windows has a post-OOBE
quiet period during which no apps automatically launch to show any UI. Background services can run, but can't
show on the screen.
Instead of automatically launching apps, Windows automatically opens the Start menu to encourage customers
to familiarize themselves with Windows and see the apps that Microsoft and OEMs have pinned to the Start
menu.
In this section
The following topics describe OOBE customization considerations.
TO P IC DESC RIP T IO N
OOBE screen details Learn about the Let's connect you to a network ,
Create security questions , and Payment information
screens in OOBE. Although these screens aren't
customizable, they are described here to provide insight to
the user experience during OOBE.
Windows Updates during OOBE Learn how both critical and non-critical Windows updates
can download during a user's Out of Box Experience.
OEM HID pairing On PCs that ship with an unpaired wireless mouse and
keyboard, you can customize the HID pairing screens shown
to the customer during the first-run experience in OOBE. If
you include written instructions, you must include those
instructions in every language that ships with the PC.
OEM license terms You can add your OEM license terms to the License Terms
screen in the first-run experience of OOBE.
OEM registration pages You can display OEM registration screens during OOBE to
encourage customers to provide you with their information.
This enables you to provide them with a more personalized
experience and information.
Automate OOBE Use Unattend settings to hide certain pages that appear in
OOBE.
Related topics
OOBE Unattend component
OOBE.xml
6/24/2021 • 2 minutes to read
Create a file named Oobe.xml to organize text and images displayed during OOBE, and to specify settings for
customizing the first-run experience. You can use multiple Oobe.xml files for language- and region-specific
license terms and settings so that users see appropriate info as soon as they start their PCs. By specifying
information in the Oobe.xml file, you help fill in some of the required information so that users are asked to do
only the core tasks required to set up their PCs.
OOBE.xml settings
You can set the default language, location, and keyboard layout using Oobe.xml. The default values you set in
Oobe.xml will be the default values the user sees on the Language, Region, and Keyboard layout selection
screens during OOBE. The user can select another value from the list if desired, and their selection will override
the Oobe.xml settings.
You can also specify a default timezone for the device using Oobe.xml. If the device has network connectivity
during OOBE, Windows will attempt to detect the user’s time zone and this will override the value set in
Oobe.xml. If the device does not have connectivity, or the user has turned off Location settings in OOBE,
Windows will not be able to detect the timezone, and will default to the value you set in Oobe.xml. In this case,
the user will see this timezone reflected by their clock once they reach the desktop.
For a list of time zones you can set, see Default Time Zones.
There are a number of other settings available to enable further customization of OOBE. See Configure
Oobe.xml for information about all of the settings available to you.
Oobe.xml example
<FirstExperience>
<oobe>
<oem>
<name>Fabrikam</name>
<eulafilename>eula.rtf</eulafilename>
<computername>Fabrikam-PC</computername>
<registration>
<title>Register your PC</title>
<subtitle>This page will help Fabrikam know about you.</subtitle>
<customerinfo>
<label>Let Fabriakm contact you</label>
<defaultvalue>true</defaultvalue>
<showphonenumber>True</showphonenumber>
</customerinfo>
<checkbox1>
<label>Use Contoso Antimalware to help protect your PC</label>
<defaultvalue>true</defaultvalue>
</checkbox1>
<checkbox2>
<label>Let Fabrikam send you offers</label>
</checkbox2>
<checkbox3>
<label>Let Fabrikam send you offers</label>
</checkbox3>
<link1>
<label>Learn more about Contoso Antimalware</label>
</link1>
<link2>
<label>Learn more about Fabrikam offers</label>
</link2>
<link3>
<label>Fabrikam privacy statement</label>
</link3>
<hideSkip>true</hideSkip>
</registration>
</oem>
<defaults>
<language>1033</language>
<location>244</location>
<keyboard>0409:00000409</keyboard>
<timezone>Central Europe Daylight Time</timezone>
<adjustForDST>true</adjustForDST>
</defaults>
<hidSetup>
<title>Pair Your Fabrikam MouseKeyboard</title>
<mouseImagePath>c:\fabrikam\mouse.png</mouseImagePath>
<mouseErrorImagePath>c:\fabrikam\errormouse.png</mouseErrorImagePath>
<mouseText>Pair your mouse now.</mouseText>
<mouseErrorText>Something has gone wrong.</mouseErrorText>
<keyboardImagePath>c:\fabrikam\keyboard.png</keyboardImagePath>
<keyboardErrorImagePath>C:\fabrikam\errorkeyboard.png</keyboardErrorImagePath>
<keyboardText>Now pair the keyboard.</keyboardText>
<keyboardErrorText>Keyboard pairing did not happen.</keyboardErrorText>
<keyboardPINImagePath>c:\fabrikam\keyboardpin.png</keyboardPINImagePath>
<keyboardPINText>Enter the PIN for your keyboard.</keyboardPINText>
</hidSetup>
</oobe>
</FirstExperience>
OOBE screen details
6/28/2021 • 3 minutes to read
This topic describes some of the screens users will see as they progress through OOBE. Although the screens
described here are not customizable, the information is provided to give insight to the user's experience, and
what the user can expect, as they work through OOBE.
If the device is LTE-enabled, but no SIM card is present, Cellular data will appear as a connection option along
with any available Wi-Fi networks. The user must insert a SIM card before they can connect to the Cellular
network.
A user can choose to connect to both a Wi-Fi and Cellular network at the same time. In this case, Wi-Fi will be
used throughout OOBE and no data traffic is transmitted via the Cellular network (metered connection).
Windows will always use the Wi-Fi connection if it is available. Cellular will only be used if the user is out of
range of their Wi-Fi network, or chooses to disconnect from Wi-Fi.
Windows has logic in place to protect the user from draining their data during OOBE if they are on a metered
connection (either metered Cellular or metered Wi-Fi). For example, if a user is on a metered network, only
critical updates (for example, critical driver updates and zero-day patch (ZDP) Windows updates) are allowed on
the device.
For more information on the cellular settings, see Cellular settings.
Download critical updates after connecting
Immediately after the user connects to a network, critical driver updates, and Windows ZDP updates, will begin
downloading to the device. Only critical updates that are required for the device to function, such as security
fixes, will download during this time. As such, the user can't opt out of downloading them. Windows will alert
the user that the device is checking for, and applying, the updates:
The time required to download the updates depends on the size of the download and the user's network
conditions. Their device may restart automatically during the download.
If a newer version of Windows has become available since the device was shipped, the user will be asked if they
would like to download this non-critical Windows Update at the end of OOBE. For more information, see
Windows updates during OOBE.
Critical driver updates, and critical Windows zero-day patch (ZDP) updates, will begin downloading
automatically during OOBE after the user has connected to a network. The user can't opt-out of these critical
updates as they are required for the device to operate properly. Windows will alert the user that the device is
checking for, and applying, the updates.
A user can also opt-in to Get the latest from Windows during OOBE, if a newer version of Windows is
available than the version that shipped with the device. Version updates are considered non-critical, as the
device will still continue to perform well after OOBE if the user does not download the update.
NOTE
Users will only see this screen in OOBE if there is a newer version of Windows available than the version that shipped with
the device.
This screen informs the user of the size of the update. The size of the update, and the user's network conditions,
will determine the download time.
The user has the option to click Get it or Skip for now . In either case, the user's selection will not disrupt their
progression through OOBE. Clicking either Get it or Skip for now will cause the user to move to the next
screen in OOBE.
If the user clicks Get it , the Windows update will begin downloading as soon as the user has completed OOBE
and reached their desktop. It will not begin downloading during OOBE. The user will see a toast message letting
them know that the download is taking place, and they will be prompted to restart the device when Windows is
ready to install the update. They can continue to use their device while the latest version of Windows is
downloading, although performance may be impacted.
If the user selects Skip for now , the Windows update will not download after the user has completed OOBE
and reached their desktop. The user can choose to download the update at a time of their choosing from the
Settings app in Windows.
Adding OEM license terms
6/24/2021 • 11 minutes to read
You can add your OEM license terms to the License Terms screen in the first-run experience. These terms will
appear on the same screen as the Windows License Terms.
To add your license terms:
1. Create a version of your End User License Agreement (EULA) in RTF (.rtf).
2. Create a version of your EULA in HTML (.html). Files with an .htm extension are ignored. All HTML files in
OOBE must use UTF-8 encoding. See HTML EULA example for an example.
EULAs will have their background and text colors modified so they align with OOBE.
If a EULA doesn't specify a font for an html element, a default font will be use that matches the rest of
OOBE. Specified fonts in a EULA won't be overridden.
3. The names of your EULA files should be identical, except for the extension (.rtf and .html).
4. Place both versions of your EULA in the Windows\System32\Oobe\Info directory, or in subdirectories that you
create per the country or region and languages of the image you're shipping. For more information on how
to configure subdirectories for multi-language and region deployments, see How OOBE.xml works.
5. In your Oobe.xml file, set the <eulafilename> value to the absolute path of your RTF EULA. You do not need
to include the path to the HTML EULA in Oobe.xml. The system will correctly handle both files as long as they
have the same name and are stored in the same location. See Oobe.xml Settings for more information on
this setting.
IMPORTANT
The following tags are prohibited and should not be included in your files:
<script>
<iframe>
<input>
<img>
<a>
You must include a version of the EULA in each language that you preinstall onto the PC. If you don't include
terms for a specific language, an English (EN) version of the license terms displays. The terms must be specific to
each language, but they don't need to be specific to each country or region that uses the language. Although the
acceptance of the terms isn't recorded, customers can’t proceed unless they accept them.
[dir='ltr'] dir {
padding-left: 12px; }
[dir='ltr'] [align=right] {
text-align: right; }
[dir='ltr'] [align=left] {
text-align: left; }
[dir='rtl'] [align=right] {
text-align: left; }
[dir='rtl'] [align=left] {
text-align: right; }
[dir='rtl'] body {
padding-left: 12px;
}
[dir='ltr'] body {
padding-right:12px;
}
body {
-ms-overflow-style:scrollbar;
background:#004275;
color:#FFF;
font-family:"Segoe UI", Selawik, Tahoma, Verdana, Arial, sans-serif;
font-size:.9375rem;
font-weight:400;
line-height:1.25rem;
margin:0;
max-width:100%;
overflow:auto;
padding-bottom:0;
padding-top:0;
}
body b * {
font-weight:700;
}
html {
font-size:100%;
}
p {
font-size:.9375rem;
font-weight:400;
line-height:1.25rem;
max-width:100%;
padding-bottom:.0141875rem;
padding-top:.0141875rem;
}
</style>
</head>
<body>
<B><FONT SIZE=3><P ALIGN="RIGHT">Last updated: </P>
<P>PRE-RELEASE SOFTWARE LICENSE TERMS</P>
<P></P>
<P></P>
<P></P>
</B>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<B><P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<DIR>
<DIR>
<P>Overview.</P>
<DIR>
<P>Applicability.
</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<B><P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<DIR>
<DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P></DIR>
</DIR>
</DIR>
<P>License.
</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<B><P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<DIR>
<DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat; and</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P></DIR>
</DIR>
</DIR>
<B><P>Privacy; Consent to Use of Data.</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</P>
<B><P>Updates.</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.</P>
<B><P>Geographic and Export Restrictions.</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</P>
<B><P>Support.</B>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.</P>
</B>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<B><P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Arbitration fees and payments.</P>
<DIR>
<DIR>
</B>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P></DIR>
</DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat..</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P></DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<B><P></B> <B>Additional Notices.</P>
<DIR>
<P>Networks, data and Internet usage.
</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P><B>Malware protection.</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.</P></DIR>
<B><P>DISCLAIMER OF WARRANTY.</B>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat. </P>
<B><P>Limitation on and Exclusion of Remedies and Damages.</B>Lorem ipsum dolor sit amet, consectetur
adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <B>Lorem ipsum dolor sit
amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</B>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Entire Agreement.</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.</P>
<DIR>
<DIR>
<DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>ALorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.</P>
<P></P></DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</FONT>
</body>
</html>
OEM registration pages
6/24/2021 • 2 minutes to read
You can customize OEM registration pages to gather customer information, and introduce offers, during OOBE.
If you choose to implement the optional registration pages, we recommend that you use them to provide
information and opportunities that benefit your customers. The Windows OOBE is designed to maximize
customer engagement by creating pages that focus on one thing at a time. As a result, OEM registration fields
are divided between two separate pages.
Here is an example of the two OEM registration pages:
The OEM registration pages work with a Microsoft Account (MSA) to help customers enter in their information
only once during OOBE. Microsoft prompts customers to sign up for an MSA or sign into an existing MSA
during OOBE. When a customer does this, their first name, last name, and email address for the MSA, if
provided, will be pre-filled in on the first registration page. The customer can change their information before
clicking Next if desired.
If the customer has not used an MSA, the fields on the OEM registration pages will be empty, and the customer
can fill them in if and as desired.
The OEM registration pages are the last screens in the OOBE flow, after the user goes through all other steps in
OOBE.
The customer information submitted through the registration pages will be stored in the
%systemroot%\System32\Oobe\Info\ folder, and will be encrypted using a public key that you place into the
Windows image. Collect the encrypted data using a Microsoft Store app designated as your OEM App, or write a
service that does this, and upload the data to your server. Decrypt the data using the corresponding private key
once it's on your server.
To include your registration pages in OOBE, you must configure the appropriate settings of your OOBE.xml file.
For the registration pages to display, you have to provide a minimum amount of information: a page title, a page
subtitle, the customerinfo element, and at least one additional checkbox or one link, and a public key for
public/private encryption.
NOTE
If the MSA used during OOBE is recognized as owned by a minor, the OEM registration pages will be hidden during the
OOBE flow to maintain compliance with the Age Appropriate Design Code (AADC) in the United Kingdom and European
Union.
In this section
The following topics describe how to add your registration pages to OOBE.
TO P IC DESC RIP T IO N
Design your registration pages Guidance on customizing the registration page fields and
HTML flyout pages.
Protect and collect user data To protect customer privacy, Windows encrypts the
customer data that's created via the Registration pages using
a public key that you generate and store in the Windows
image. Create an OEM App or write a service that collects
the encrypted data and uploads it to your server using SSL.
You can then decrypt the data using the corresponding
private key.
Customize the Windows 10 Out of Box Experience
(OOBE)
6/24/2021 • 5 minutes to read
When customers turn on their Windows PCs for the first time, they will see the Windows Out of Box Experience
(OOBE). OOBE consists of a series of screens that require customers to accept the license agreement, connect to
the internet, log in with, or sign up for a Microsoft Account, and share information with the OEM.
During OOBE, Cortana voice-over strings will assist users by setting the context of each screen, and requesting
their input. While voice assistance is more accessible to the non-sighted, the design is focused at being inclusive
to all our customers. Cortana voice is intended to be novel and supplementary to increase user engagement in
all places in OOBE. Cortana voice also helps reduce cognitive load by offering informationally-identical, but
differently-phrased information. We still expect non-sighted users to enable screen readers to get through
OOBE. Some pages in OOBE do not accept voice input, and instead require a keyboard or mouse to complete
the action. Cortana voice will clearly communicate input requirements (voice or keyboard/mouse) to the user.
TIP
We recommend you target a 65 decibel peak volume during OOBE. To test for this volume, measure an audio sample
from 2 feet (60 centimeters) away from the device.
The OOBE flow is also designed to reduce cognitive load significantly by breaking up tasks into discrete chunks.
Although there are several pages in the OOBE flow, each one requests a specific action or input from the user.
This is helpful for our average customer (and even many power users) and has shown to reduce fatigue
significantly.
OOBE flow
The following is a non-exhaustive list of screens the user may see during OOBE, in order:
1. Language selection
2. Cor tana welcome
3. Region selection
4. Keyboard selection
5. Connect to a network
6. Automatic download of critical ZDP and driver updates . See Windows updates during OOBE for more
details.
7. Get the latest from Windows . Prior to Windows 10, version 1803, this screen was named Your PC has
an update waiting and it appeared at the end of OOBE.
8. End User License Agreement (EUL A)
9. Sign in to, or create, a local account or Microsoft account (MSA) . If a user chooses the local account
option, the Sign in with Microsoft instead? screen will appear next in the OOBE flow. This screen
encourages the user to sign in with their MSA for an optimal Windows experience.
10. Create security questions for a local account . New in Windows 10, version 1803. Only displays if the
user chose to create a local account, rather than logging into their MSA, on the previous screen. See OOBE
screen details to learn more about this new screen in OOBE.
11. Windows Hello setup
12. Link your phone and PC . This screen will only appear if the user signed into their Microsoft account, and
connected to a network, on the previous screens.
13. Save files to OneDrive . This is a cloud service page.
14. Set up Office . This screen is only displayed if the user is connected to a network, and has provided their
Microsoft account information. Content on the page will vary depending on the user’s account type. For
example, if their Microsoft account qualifies for a free trial of Office, the page will encourage them to setup
their free trial. This is a cloud service page.
15. Payment information . New in Windows 10, version 1803. Only displays if a user opts-in to a free trial of
Office from the Set up Office screen. This is a cloud service page.
16. Make Cor tana my personal assistant
17. Privacy settings . Users will see up to seven privacy settings on this screen. Not all users will see the same
settings.
18. OEM Registration pages
NOTE
Some pages displayed during OOBE are delivered via cloud service, as opposed to being delivered as part of a Windows
release. Cloud service pages can be rolled out to users, or groups of users, at any time. Page content can also be modified
or adapted based on user input. Using cloud service for OOBE pages enables Microsoft to offer targeted, relevant content
to users quickly, rather than waiting for the next Windows release.
When testing OOBE, keep in mind that you may not see cloud service pages during the flow.
Windows Welcome
In Windows 10, version 1803, Windows Welcome is displayed to more users than ever as soon as they complete
OOBE and reach their desktop. Here's an example Windows Welcome experience:
In this section
The following topics describe OOBE customization considerations.
TO P IC DESC RIP T IO N
TO P IC DESC RIP T IO N
Cortana voice support Learn how Cortana voice walks the user through the OOBE
experience, enabling the user to complete parts of OOBE by
responding to spoken prompts.
OOBE screen details Learn about the Let's connect you to a network ,
Create security questions , and Payment information
screens in OOBE. Although these screens aren't
customizable, they are described here to provide insight to
the user experience during OOBE.
Windows Updates during OOBE Learn how both critical and non-critical Windows updates
can download during a user's Out of Box Experience.
OEM HID pairing On PCs that ship with an unpaired wireless mouse and
keyboard, you can customize the HID pairing screens shown
to the customer during the first-run experience in OOBE. If
you include written instructions, you must include those
instructions in every language that ships with the PC.
OEM license terms You can add your OEM license terms to the License Terms
screen in the first-run experience of OOBE.
OEM registration pages You can display OEM registration screens during OOBE to
encourage customers to provide you with their information.
This enables you to provide them with a more personalized
experience and information.
Automate OOBE Use Unattend settings to hide certain pages that appear in
OOBE.
Related topics
OOBE Unattend component
OOBE.xml settings
6/24/2021 • 2 minutes to read
Create a file named Oobe.xml to organize text and images displayed during OOBE, and to specify settings for
customizing the Windows 10 first-run experience. For Windows 10, you can use multiple Oobe.xml files for
language- and region-specific license terms and settings so that users see appropriate info as soon as they start
their PCs. By specifying information in the Oobe.xml file, you help fill in some of the required information so that
users are asked to do only the core tasks required to set up their PCs.
OOBE.xml settings
You can set the default language, location, and keyboard layout using Oobe.xml. The default values you set in
Oobe.xml will be the default values the user sees on the Language, Region, and Keyboard layout selection
screens during OOBE. The user can select another value from the list if desired, and their selection will override
the Oobe.xml settings.
You can also specify a default timezone for the device using Oobe.xml. If the device has network connectivity
during OOBE, Windows will attempt to detect the user’s time zone and this will override the value set in
Oobe.xml. If the device does not have connectivity, or the user has turned off Location settings in OOBE,
Windows will not be able to detect the timezone, and will default to the value you set in Oobe.xml. In this case,
the user will see this timezone reflected by their clock once they reach the desktop.
For a list of time zones you can set, see Default Time Zones.
There are a number of other settings available to enable further customization of OOBE. See Configure
Oobe.xml for information about all of the settings available to you.
Oobe.xml example
<FirstExperience>
<oobe>
<oem>
<name>Fabrikam</name>
<eulafilename>eula.rtf</eulafilename>
<computername>Fabrikam-PC</computername>
<registration>
<title>Register your PC</title>
<subtitle>This page will help Fabrikam know about you.</subtitle>
<customerinfo>
<label>Let Fabriakm contact you</label>
<defaultvalue>true</defaultvalue>
</customerinfo>
<checkbox1>
<label>Use Contoso Antimalware to help protect your PC</label>
<defaultvalue>true</defaultvalue>
</checkbox1>
<checkbox2>
<label>Let Fabrikam send you offers</label>
</checkbox2>
<checkbox3>
<label>Let Fabrikam send you offers</label>
</checkbox3>
<link1>
<label>Learn more about Contoso Antimalware</label>
</link1>
<link2>
<label>Learn more about Fabrikam offers</label>
</link2>
<link3>
<label>Fabrikam privacy statement</label>
</link3>
<hideSkip>true</hideSkip>
</registration>
</oem>
<defaults>
<language>1033</language>
<location>244</location>
<keyboard>0409:00000409</keyboard>
<timezone>Central Europe Daylight Time</timezone>
<adjustForDST>true</adjustForDST>
</defaults>
<hidSetup>
<title>Pair Your Fabrikam MouseKeyboard</title>
<mouseImagePath>c:\fabrikam\mouse.png</mouseImagePath>
<mouseErrorImagePath>c:\fabrikam\errormouse.png</mouseErrorImagePath>
<mouseText>Pair your mouse now.</mouseText>
<mouseErrorText>Something has gone wrong.</mouseErrorText>
<keyboardImagePath>c:\fabrikam\keyboard.png</keyboardImagePath>
<keyboardErrorImagePath>C:\fabrikam\errorkeyboard.png</keyboardErrorImagePath>
<keyboardText>Now pair the keyboard.</keyboardText>
<keyboardErrorText>Keyboard pairing did not happen.</keyboardErrorText>
<keyboardPINImagePath>c:\fabrikam\keyboardpin.png</keyboardPINImagePath>
<keyboardPINText>Enter the PIN for your keyboard.</keyboardPINText>
</hidSetup>
</oobe>
</FirstExperience>
Cortana voice support
3/5/2021 • 4 minutes to read
Cortana voice walks the user through the OOBE experience, enabling the user to complete parts of OOBE by
responding to spoken prompts. Cortana voice during OOBE is currently available in the following languages:
en-US , es-MX , ja-JP , en-GB , fr-FR , it-IT , de-DE , es-ES , fr-CA , en-CA , en-AU , pt-BR , zh-CN .
NOTE
With Windows 10 1903 and later, the Cortana voice-over will be disabled by default on Windows 10 Pro, Enterprise, and
Education. The Cortana voice-over will still be enabled for Windows 10 Home editions.
The value you set in OOBE.xml impacts the voice used during OOBE. The OOBE.xml value for
language
language must be a language/region decimal ID associated with a Windows language pack. For example, the
English (United States) language pack has an associated language/region decimal ID of 1033 . For a full list of
language/region decimal IDs that you can set in OOBE.xml, see Available Language Packs for Windows.
Cortana voice is enabled after the customer selects a language from the Language selection screen in OOBE. If
the language selected by the customer, combined with the language in OOBE.xml, is supported by Cortana,
Cortana will assist in that language upon entering the Region selection page.
Cortana voice will continue to assist throughout the OOBE process in that same supported language. Even if the
user selects a region on the Region page that is not supported by Cortana, or selects a region that would cause
Cortana to use a different accent after OOBE, Cortana voice will not change during OOBE.
If the language selected by the customer on the Language page combined with the language in OOBE.xml is not
one of the supported combinations for Cortana, then the OOBE experience will be silent.
After the user completes OOBE, the voice used in the Cortana app will be based on the Language and Region
selected during OOBE. At that point, Cortana will no longer consider the language in OOBE.xml.
Here are a few examples:
L A N GUA GE
SEL EC T ED B Y REGIO N SEL EC T ED C O RTA N A VO IC E C O RTA N A A P P
C USTO M ER ( DURIN G L A N GUA GE SET IN B Y C USTO M ER A SSISTA N C E RESULT VO IC E RESULT
O O B E) O O B E. XM L ( DURIN G O O B E) ( DURIN G O O B E) ( A F T ER O O B E)
NOTE
This setting should only be disabled for testing purposes. Shipping a device with Cortana voice support disabled is an
unsupported configuration.
This topic describes some of the screens users will see as they progress through OOBE. Although the screens
described here are not customizable, the information is provided to give insight to the user's experience, and
what the user can expect, as they work through OOBE.
The following screens are described below:
Cloud service pages
Connect users to the network
Create security questions for this account (new in Windows 10, version 1803)
Set up Office
The option to create security questions from the Settings app is also available to users who upgrade to
Windows 10, version 1803 from a previous version of Windows, and to any new local account created for a
device running Windows 10, version 1803.
Set up Office
Users will see the Set up Office screens in OOBE if they are connected to a network, and have provided their
Microsoft account (MSA) information. Content on the page will vary depending on the user’s account type, and
the version of Office pre-installed to the device. The Set up Office screens, including the payment
information screen, are cloud service pages.
Office 365 subscribers
If Office 365 (Office Desktop Bridge) is pre-installed to the device, and the user's MSA is already associated with
an Office 365 subscription, they will see the following Set up Office 365 screen:
The screen reminds the user of their existing subscription, and asks if they would like to have their Office apps
ready by the time OOBE is complete.
Office 365 free trial
If Office 365 (Office Desktop Bridge) is pre-installed to the device, and the user's MSA is eligible for a free trial,
they will see the following Set up Office 365 trial screen:
The user can choose to begin the trial by clicking Yes , or can opt-out of the trial by clicking No .
Add credit card information
In Windows 10, version 1803, if a user opts-in to the free trial, they are prompted to enter the credit card to
charge when the free trial expires.
If a user is eligible for a free trial of Office 365, and they already have a credit card on file for their Microsoft
account, they will not be prompted to Add your credit card during OOBE. Instead, they will be asked to
confirm that the credit card on file should be charged when the free trial expires.
Collecting this payment information during OOBE enables customers to seamlessly auto-renew Office 365 after
the free trial, with no disruption to their service. The credit card will be saved to the user’s MSA, so it can be
used for future purchases.
A credit card is now required to start a free trial of Office 365. If the user does not provide their payment
information during OOBE, they will not be able to start a free trial at that time. The customer can start a free trial
of Office 365 later but will still be required to enter their payment information.
Office 2016
If Office 2016 (Activation For Office (AFO) Perpetual) is pre-installed to the device, users will see the following
Set up Office screen:
The screen informs the user that Office 2016 is included with their device, and asks if they would like to have
their Office apps ready by the time OOBE is complete.
Windows updates during Windows 10 OOBE
6/24/2021 • 2 minutes to read
Critical driver updates, and critical Windows zero-day patch (ZDP) updates, will begin downloading
automatically during OOBE after the user has connected to a network. The user can't opt-out of these critical
updates as they are required for the device to operate properly. Windows will alert the user that the device is
checking for, and applying, the updates:
A user can also opt-in to Get the latest from Windows during OOBE, if a newer version of Windows is
available than the version that shipped with the device. Version updates are considered non-critical, as the
device will still continue to perform well after OOBE if the user does not download the update. In Windows 10,
version 1803, the Get the latest from Windows screen is displayed right after the Let's connect you to a
network screen in OOBE. This is a change from previous versions of Windows, where this screen had a different
title and was displayed at the end of OOBE.
NOTE
Users will only see this screen in OOBE if there is a newer version of Windows available than the version that shipped with
the device. For example, the screen above will be displayed on devices shipped with Windows, version 1803, but only after
the next version of Windows is available.
This screen informs the user of the size of the update. The size of the update, and the user's network conditions,
will determine the download time.
The user has the option to click Get it or Skip for now . In either case, the user's selection will not disrupt their
progression through OOBE. Clicking either Get it or Skip for now will cause the user to move to the next
screen in OOBE.
If the user clicks Get it , the Windows update will begin downloading as soon as the user has completed OOBE
and reached their desktop. It will not begin downloading during OOBE. The user will see a toast message letting
them know that the download is taking place, and they will be prompted to restart the device when Windows is
ready to install the update. They can continue to use their device while the latest version of Windows is
downloading, although performance may be impacted.
If the user selects Skip for now , the Windows update will not download after the user has completed OOBE
and reached their desktop. The user can choose to download the update at a time of their choosing from the
Settings app in Windows.
OEM license terms
3/5/2021 • 11 minutes to read
You can add your OEM license terms to the License Terms screen in the first-run experience. These terms will
appear next to the Windows License Terms.
To add your license terms:
1. Create a version of your End User License Agreement (EULA) in RTF (.rtf).
2. Create a version of your EULA in HTML (.html). Files with an .htm extension are ignored. All HTML files in
OOBE must use UTF-8 encoding. See HTML EULA example for an example.
3. The names of your EULA files should be identical, except for the extension (.rtf and .html).
4. Place both versions of your EULA in the Windows\System32\Oobe\Info directory, or in subdirectories that you
create per the country or region and languages of the image you're shipping. For more information on how
to configure subdirectories for multi-language and region deployments, see How OOBE.xml works.
5. In your Oobe.xml file, set the <eulafilename> value to the absolute path of your RTF EULA. You do not need
to include the path to the HTML EULA in Oobe.xml. The system will correctly handle both files as long as they
have the same name and are stored in the same location. See Oobe.xml Settings for more information on
this setting.
IMPORTANT
The following tags are prohibited and should not be included in your files:
<script>
<iframe>
<input>
<img>
<a>
You must include a version of the EULA in each language that you preinstall onto the PC. If you don't include
terms for a specific language, an English (EN) version of the license terms displays. The terms must be specific to
each language, but they don't need to be specific to each country or region that uses the language. Although the
acceptance of the terms isn't recorded, customers can’t proceed unless they accept them.
[dir='ltr'] dir {
padding-left: 12px; }
[dir='ltr'] [align=right] {
text-align: right; }
[dir='ltr'] [align=left] {
text-align: left; }
[dir='rtl'] [align=right] {
text-align: left; }
[dir='rtl'] [align=left] {
text-align: right; }
[dir='rtl'] body {
padding-left: 12px;
}
[dir='ltr'] body {
padding-right:12px;
}
body {
-ms-overflow-style:scrollbar;
background:#004275;
color:#FFF;
font-family:"Segoe UI", Selawik, Tahoma, Verdana, Arial, sans-serif;
font-size:.9375rem;
font-weight:400;
line-height:1.25rem;
margin:0;
max-width:100%;
overflow:auto;
padding-bottom:0;
padding-top:0;
}
body b * {
font-weight:700;
}
html {
font-size:100%;
}
p {
font-size:.9375rem;
font-weight:400;
line-height:1.25rem;
max-width:100%;
padding-bottom:.0141875rem;
padding-top:.0141875rem;
}
</style>
</head>
<body>
<B><FONT SIZE=3><P ALIGN="RIGHT">Last updated: </P>
<P>PRE-RELEASE SOFTWARE LICENSE TERMS</P>
<P></P>
<P></P>
<P></P>
</B>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<B><P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<DIR>
<DIR>
<P>Overview.</P>
<DIR>
<P>Applicability.
</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<B><P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<DIR>
<DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P></DIR>
</DIR>
</DIR>
<P>License.
</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<B><P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<DIR>
<DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat; and</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P></DIR>
</DIR>
</DIR>
<B><P>Privacy; Consent to Use of Data.</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</P>
<B><P>Updates.</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.</P>
<B><P>Geographic and Export Restrictions.</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</P>
<B><P>Support.</B>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.</P>
</B>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<B><P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Arbitration fees and payments.</P>
<DIR>
<DIR>
</B>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P></DIR>
</DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat..</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P></DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<B><P></B> <B>Additional Notices.</P>
<DIR>
<B><P>DISCLAIMER OF WARRANTY.</B>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat. </P>
<B><P>Limitation on and Exclusion of Remedies and Damages.</B>Lorem ipsum dolor sit amet, consectetur
adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <B>Lorem ipsum dolor sit
amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</B>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat.</P>
<P>Entire Agreement.</B> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.</P>
<DIR>
<DIR>
<DIR>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.</P>
<P>ALorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.</P>
<P></P></DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</FONT>
</body>
</html>
OEM registration pages overview
6/24/2021 • 2 minutes to read
You can customize OEM registration pages to gather customer information, and introduce offers, during OOBE.
If you choose to implement the optional registration pages, we recommend that you use them to provide
information and opportunities that benefit your customers. The Windows 10 OOBE is designed to maximize
customer engagement by creating pages that focus on one thing at a time. As a result, OEM registration fields
are divided between two separate pages.
Here is an example of the two OEM registration pages:
The OEM registration pages work with a Microsoft Account (MSA) to help customers enter in their information
only once during OOBE. Microsoft prompts customers to sign up for an MSA or sign into an existing MSA
during OOBE. When a customer does this, their first name, last name, and email address for the MSA, if
provided, will be pre-filled in on registration page one. The customer can change their information before
clicking Next if desired.
If the customer has not used an MSA, the fields on the OEM registration pages will be empty, and the customer
can fill them in if and as desired.
The OEM registration pages are the last screens in the OOBE flow, after the user goes through all other steps in
OOBE.
The customer information submitted through the registration pages will be stored in the
%systemroot%\System32\Oobe\Info\ folder, and will be encrypted using a public key that you place into the
Windows image. Collect the encrypted data using a Microsoft Store app designated as your OEM App, or write a
service that does this, and upload the data to your server. Decrypt the data using the corresponding private key
once it's on your server.
In this section
The following topics describe how to add your registration pages to OOBE.
TO P IC DESC RIP T IO N
Design your registration pages Guidance on customizing the registration page fields and
HTML flyout pages.
Protect and collect user data To protect customer privacy, Windows encrypts the
customer data that's created via the Registration pages using
a public key that you generate and store in the Windows
image. Create an OEM App or write a service that collects
the encrypted data and uploads it to your server using SSL.
You can then decrypt the data using the corresponding
private key.
Design OEM registration pages
6/24/2021 • 8 minutes to read
The OEM registration pages present many customization opportunities. This topic describes all elements on
each of the two OEM registration pages, indicating the customization options for each element. This topic also
provides style guidance and code samples you can use to design your HTML flyout pages.
The layout of both OEM registration pages are locked, so the page elements themselves can't be rearranged.
NOTE
A minimum amount of information is required for the registration pages to display. You must provide a page title, a page
subtitle, the customerinfo element, at least one additional checkbox or one link, and a public key for public/private key
encryption.
Page title . Create a title that makes sense for your use of the page. This title also appears on registration
page two.
Page subtitle . Add a subtitle to help customers understand the tasks on the page or in some other way
guide them to complete the form. This subtitle also appears on registration page two. The page title and
subtitle can be customized using the registration element of Oobe.xml.
Customer information fields . These fields are not customizable. Customer information consists of four
input fields: First Name, Last Name, Region, and Email. If the Email field is filled in, it will be validated as well-
formed prior to allowing the customer to proceed. The Country/Region input field is a drop-down list. The
associated value of each country/region is its associated two-letter country/region code based on ISO 3166-
1 Alpha-2.
One link . Customize the title, and path to, an HTML file using the link1 element of Oobe.xml. When using
this link to surface a privacy policy, ensure the policy is current.
Skip button . The Skip button is visible by default, but you can configure the hideSkip element of Oobe.xml
to hide it. No registration data of any kind is provided if the customer chooses Skip . The button text is not
customizable.
Next button . The Next button moves the customer forward in OOBE. This button is not customizable.
Pre -populated customer information
When a user signs in to or signs up for an MSA in OOBE, they provide some of the customer information
requested on the OEM Registration pages. To streamline the setup process for users, Windows pre-populates
some of the customer information fields on OEM registration page one, if the customer used an MSA earlier in
OOBE.
Depending on the SKU a user may choose to setup different account choices which will impact whether the
account information is pre-filled.
A C C O UN T PAT H O EM PA GE P RE- F IL L ED
Page title . Create a title that makes sense for your use of the page. This title also appears on registration
page one.
Page subtitle . Add a subtitle to help customers understand the tasks on the page or in some other way
guide them to complete the form. This subtitle also appears on registration page one. The page title and
subtitle can be customized using the registration element of Oobe.xml.
Four checkboxes . Up to four checkboxes with labels can be displayed on registration page two. You can set
the descriptive labels for the checkboxes, and their default states, using the customerinfo , checkbox1 ,
checkbox2 , and checkbox3 elements of Oobe.xml.
Two links . Up to two links can be displayed beneath the checkboxes. You can specify the link labels and file
paths using the link2 and link3 elements of Oobe.xml. Any text you associate with these links must be in
HTML files stored locally in the %systemroot%\system32\Oobe\Info directory.
Next button . The Next button moves the customer forward in OOBE. This button is not customizable.
NOTE
You can't skip showing a link on registration page one by providing only link2 and link3 elements in Oobe.xml. A
missing link1 will cause the link2 element to appear on the first registration page instead of the second.
NOTE
Inline CSS styling is required so that the iFrame host elements render correctly in the registration pages.
Colors
Text and background colors are defined in the CSS code example.
Background color: #2b2b2b
Font color: #FFF
Please use these colors to ensure a consistent user experience throughout OOBE.
Font
The standard font used throughout OOBE is Segoe UI. Please use the Segoe UI Webfont for your HTML
documents to ensure the font matches the rest of OOBE.
Sizes and spacing
Use two different styles for headers and body content.
Headers: should be rendered using the <h4> tag.
Body text: should be rendered using the <p> tag.
Bold text: should be rendered using the <b> tag.
Hierarchy of information: indented sections or groups of bulleted items can be displayed with the <DIR> tag,
required for EULA content template, optional for Flyouts.
We require that the files for the in-place links are HTML. These files are rendered in a flyout. Documents in the
flyout are sandboxed, such that links to external and online resources will not function.
IMPORTANT
The following tags are prohibited and should not be included in your files:
<script>
<iframe>
<input>
<img>
<a>
<style type="text/css">
[dir='rtl'] dir {
padding: 0 12px;
}
[dir='ltr'] dir {
padding: 0 12px;
}
[dir='ltr'] [align=right] {
text-align: right;
}
[dir='ltr'] [align=left] {
text-align: left;
}
[dir='rtl'] [align=right] {
text-align: left;
}
[dir='rtl'] [align=left] {
text-align: right;
}
[dir='rtl'] body {
padding: 0 12px;
}
[dir='ltr'] body {
padding: 0 12px;
}
body {
-ms-overflow-style: scrollbar;
background: #2b2b2b;
color: #FFF;
font-family: "Segoe UI", "Segoe UI Webfont", "Ebrima", "Nirmala UI", "Gadugi", "Segoe Xbox
Symbol", "Segoe UI Symbol", "Meiryo UI", "Khmer UI", "Tunga", "Lao UI", "Raavi", "Iskoola Pota", "Latha",
"Leelawadee", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Estrangelo Edessa",
"Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi
Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Cambria Math", Selawik, Tahoma, Verdana, Arial, sans-
serif;
font-size: .9375rem;
font-weight: 400;
line-height: 1.25rem;
margin: 0;
max-width: 100%;
overflow: auto;
padding-bottom: 0;
padding-bottom: 0;
padding-top: 0;
}
body b * {
font-weight: 700;
}
html {
font-size: 100%;
}
p {
font-size: .9375rem;
font-weight: 400;
line-height: 1.25rem;
max-width: 100%;
padding-bottom: .0141875rem;
padding-top: .0141875rem;
}
h4 {
font-size: 1.25rem;
font-weight: 400;
line-height: 100%;
max-width: 100%;
padding-top: 12px;
margin: 0;
}
</style>
[dir='ltr'] dir {
padding: 0 12px;
}
[dir='ltr'] [align=right] {
text-align: right;
}
[dir='ltr'] [align=left] {
text-align: left;
}
[dir='rtl'] [align=right] {
text-align: left;
}
[dir='rtl'] [align=left] {
text-align: right;
}
[dir='rtl'] body {
padding: 0 12px;
}
[dir='ltr'] body {
padding: 0 12px;
}
body {
-ms-overflow-style: scrollbar;
background: #2b2b2b;
color: #FFF;
font-family: "Segoe UI", "Segoe UI Webfont", "Ebrima", "Nirmala UI", "Gadugi", "Segoe Xbox
Symbol", "Segoe UI Symbol", "Meiryo UI", "Khmer UI", "Tunga", "Lao UI", "Raavi", "Iskoola Pota", "Latha",
"Leelawadee", "Microsoft YaHei UI", "Microsoft JhengHei UI", "Malgun Gothic", "Estrangelo Edessa",
"Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi
Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Cambria Math", Selawik, Tahoma, Verdana, Arial, sans-
serif;
font-size: .9375rem;
font-weight: 400;
line-height: 1.25rem;
margin: 0;
max-width: 100%;
overflow: auto;
padding-bottom: 0;
padding-top: 0;
}
body b * {
font-weight: 700;
}
html {
font-size: 100%;
}
p {
font-size: .9375rem;
font-weight: 400;
line-height: 1.25rem;
max-width: 100%;
padding-bottom: .0141875rem;
padding-top: .0141875rem;
}
h4 {
font-size: 1.25rem;
font-weight: 400;
line-height: 100%;
max-width: 100%;
padding-top: 12px;
margin: 0;
}
</style>
</head>
<body>
<H4>Learn more about the sample</H4>
<P>Quisque efficitur lorem nec mauris semper consequat. Aliquam sollicitudin rhoncus sollicitudin. Integer
ligula mauris, euismod ac lacus et, cursus pulvinar mauris. Aliquam sollicitudin blandit vehicula. Morbi ac
arcu vitae mi placerat facilisis eu sed enim. Ut ornare aliquet tincidunt. Maecenas posuere et nisi in
tempor.</P>
<B><P>Donec malesuada bibendum nibh, in semper nunc efficitur sit amet. Vestibulum vehicula hendrerit elit
et congue.</P>
<DIR>
<DIR>
<B><P>2.	Nullam ullamcorper placerat finibus.</B> Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Donec vitae tincidunt quam, viverra vehicula urna. Sed sit amet volutpat ex, id egestas odio.
Aliquam at urna mollis, commodo ex sit amet, auctor erat. Proin elit neque, pretium ut lorem eget, cursus
condimentum ante. Quisque placerat tempor nunc, a pulvinar augue interdum sit amet. Sed eget sem quis tellus
rutrum rhoncus. Suspendisse potenti. Vestibulum sem ipsum, volutpat ac condimentum ut, porttitor ac nulla.
Quisque rhoncus sapien eu dolor posuere, ac auctor mi dapibus. Aenean egestas mauris sed tellus dapibus, sed
sagittis velit volutpat:</P>
<DIR>
<DIR>
<DIR>
To include your registration pages in OOBE, you must configure the appropriate settings of your OOBE.xml file.
A minimum amount of information is required for the registration pages to display. You must provide a page
title , a page subtitle , the customerinfo element, at least one additional checkbox or one link, and a public
key for public/private key encryption.
The following table shows the Oobe.xml elements that correspond to customizable fields on the OEM
registration pages:
<oem >
<registration >
<customerinfo >
<checkbox1 >
EL EM EN T SET T IN G DESC RIP T IO N VA L UE
<checkbox2 >
<checkbox3 >
<link1 >
<link2 >
<link3 >
NOTE
If you only include one link element in your Oobe.xml file, it will appear on registration page one underneath the
customer information fields, regardless of which link element was used. Similarly, if you only include two link
elements in your Oobe.xml file, the first will appear on registration page one, and the second will appear as the top link on
registration page two.
For example, if you omit link1 and link2 from Oobe.xml, and only include link3 , link3 will appear underneath
the customer information fields on registration page one. If you omit only link1 , link2 will appear on registration
page one, and link3 will appear as the top link on registration page two.
For more information on these settings, and the others you can configure, please see Oobe.xml Settings.
XML example
<oobe>
<oem>
<registration>
<title>Register your PC</title>
<subtitle>This page will help Fabrikam know about you.</subtitle>
<customerinfo>
<label>Let Fabrikam contact you</label>
</customerinfo>
<checkbox1>
<label>Use Contoso Antimalware to help protect your PC</label>
<defaultvalue>true</defaultvalue>
</checkbox1>
<checkbox2>
<label>Let Fabrikam send you offers</label>
</checkbox2>
<checkbox3>
<label>This is checkbox3, and its default state is unselected</label>
</checkbox3>
<link1>
<label>Fabrikam privacy statement</label>
</link1>
<link2>
<label>Learn more about Contoso Antimalware</label>
</link2>
<link3>
<label>Learn more about Fabrikam offers</label>
</link3>
<hideSkip>false</hideSkip>
</registration>
</oem>
</oobe>
Here are the OEM registration pages that will appear as a result of the XML example above:
OEM HID pairing
3/5/2021 • 4 minutes to read
You can provide clear and precise Human Interface Device (HID) pairing instructions within OOBE to enable
customers who buy new PCs running Windows 10 with an unpaired wireless mouse and keyboard to finish
their PC setup. For this feature to work, the mouse and/or keyboard must be included with the PC, and the PC
must not have any other mice or keyboards attached or connected to it. For example, laptops are not qualified
for this feature.
The following conditions should be met to correctly display HID pairing screens during OOBE:
The PC must have Bluetooth capability and Bluetooth must be turned on.
The Bluetooth radio must be certified for Windows 10.
For the keyboard pairing page to appear, you must ensure that no wired keyboard is connected to the PC.
For the mouse pairing page to appear, you must ensure that no wired mouse is connected to the PC.
Oobe.xml settings in the <hidsetup> section should be provided for the corresponding pairing pages.
We recommend that OEMs include Bluetooth radios with HEM to provide a working end-to-end scenario,
because there is no Bluetooth support in the BIOS before Windows loads. The radio looks like a USB mouse and
keyboard to the PC and takes over the Bluetooth communication to the mouse and keyboard. This lets the
devices work outside of Windows and allows customers to use their paired Bluetooth mouse and keyboard
during BIOS.
IMPORTANT
The OOBE.xml file that has HID pairing instructions must be used only for PCs that use the OOBE HID pairing feature. For
PCs that don't use the OOBE HID pairing feature, a different OOBE.xml file that doesn’t contain the HID pairing
instructions must be used. Otherwise, there’s a risk that users might go through the HID pairing experience even if they
don't need to or can’t use this feature.
Configure OOBE.xml
On PCs that ship with an unpaired wireless mouse and keyboard, the HID pairing screens are shown to the
customer during the first experience, which is before language selection or any other screen that requires user
input in OOBE. You can also choose to include written instructions, however, if you do this you must include
those instructions in every language that ships with the PC.
To provide a thorough, reliable, and satisfactory HID pairing experience, OEMs who ship these systems must
include the following Oobe.xml settings:
<mouseErrorText> Error that displays to users along with mouse pairing error
image.
<keyboardText> Specifies the text to prompt the user to pair the keyboard.
<keyboardPINText> Specifies the prompt text for the user to enter a pin for the
keyboard.
Any text in the Oobe.xml file or files — for example, any text in the <mouseText> setting — is the text read by the
Narrator, so make sure the text is clear, concise, and easy to understand. Cortana shares duties with Narrator, so
that Cortana speaks the UI display text and Narrator speaks the instructional text.
For more information on these settings, see Oobe.xml settings
NOTE
Images must not be larger than 630 x 372 pixels. Images are scaled to fit in portrait mode or on small form factors.
These illustrations are examples of how HID pairing instructions might look:
Example 1: Image for mouse pairing
Example 2: Image for keyboard pairing
XML example
<hidSetup>
<mouseImagePath>c:\fabrikam\MouseFirstInstruction.png</mouseImagePath>
<mouseText>Set up your Fabrikam mouse. Insert batteries, turn on, and press the Bluetooth button.
</mouseText>
<mouseErrorImagePath>c:\fabrikam\MouseError.png</mouseErrorImagePath>
<mouseErrorText>An error has occurred. Please contact Fabrikam.</mouseErrorText>
<keyboardImagePath>c:\fabrikam\KeyboardFirstInstruction.png</keyboardImagePath>
<keyboardText>Set up your Fabrikam keyboard. Insert batteries, turn on, and press the Bluetooth
button.</keyboardText>
<keyboardPINImagePath>c:\fabrikam\KeyboardSecondInstruction.png</keyboardPINImagePath>
<keyboardPINText>Enter PIN and press the Enter key.</keyboardPINText>
<keyboardErrorImagePath>C:\fabrikam\KeyboardError.png</keyboardErrorImagePath>
<keyboardErrorText>An error has occurred. Please contact Fabrikam.</keyboardErrorText>
</hidSetup>
Protect and collect user data
3/5/2021 • 9 minutes to read
If a customer enters information into the OEM registration pages, the following files are created when they
complete OOBE:
Userdata.blob . An encrypted XML file that contains all the values in all user-configurable elements on the
registration pages, including customer information fields and checkbox states.
SessionKey.blob . Generated during encryption of Userdata.blob. Contains a session key needed for the
decryption process.
Userchoices.xml . An un-encrypted XML file that contains the checkbox labels and values for all checkboxes
included on the registration pages.
NOTE
If a customer clicks Skip on the first registration page, no data is written or stored to these files, not even the checkbox
default states.
The timestamp of the user's out of box experience is also added to the Windows registry under this key:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE\Stats [EndTimeStamp]
This registry value is created regardless of whether the registration pages are included in OOBE. The timestamp
is written in UTC (Coordinated Universal Time) format; specifically, it is a SYSTEMTIME value written as a serialized
blob of data to the registry.
In order for you to access and use the customer information, take the following steps:
1. Generate a public/private key pair, and place the public key in the %systemroot%\system32\Oobe\Info folder of
the image.
2. Collect the encrypted customer data using an app or a service that runs roughly 30 minutes after the first
logon completes.
3. Send the data to your server for decryption using SSL. You can then decrypt the session key to decrypt the
customer data.
IMPORTANT
You must never place the private key on the customer's PC. Instead, it should be stored securely on your servers so the
data can be decrypted after it's uploaded. If a customer clicks Next on the Registration pages, Windows uses the public
key to create Sessionkey.blob in the %systemroot%\system32\Oobe\Info folder. Your service or Microsoft Store app
should upload the data to your server by using SSL. You then need to decrypt the session key to decrypt the customer
data.
If there's no public key in the %systemroot%\system32\Oobe\Info folder, the registration pages aren't shown.
Generate public and private keys
Make this sequence of calls to generate the public and private keys.
1. Acquire crypt context using the CryptAcquireContext API. Provide these values:
pszProvideris MS_ENH_RSA_AES_PROV
dwProvType is PROV_RSA_AES
2. Generate RSA crypt key using the CryptGenKey API. Provide these values:
Algid is CALG_RSA_KEYX
dwFlags is CRYPT_EXPORTABLE
3. Serialize the public key portion of the crypt key from Step 2 using the CryptExportKey API. Provide this
value:
dwBlobType is PUBLICKEYBLOB
4. Write the serialized public key bytes from Step 3 to file Pubkey.blob using the standard Windows File
Management functions.
5. Serialize the private key portion of the crypt key from Step 2 using the CryptExportKey API. Provide this
value
dwBlobType is PRIVATEKEYBLOB
6. Write the serialized private key bytes from step 5 to file Prvkey.blob using the standard Windows File API.
This code snippet shows how to generate the keys:
// This method generates an OEM public and private key pair and writes it to Pubkey.blob and Prvkey.blob
HRESULT GenerateKeysToFiles()
{
// Acquire crypt provider. Use provider MS_ENH_RSA_AES_PROV and provider type PROV_RSA_AES to decrypt
the blob from OOBE.
HCRYPTPROV hProv;
HRESULT hr = CryptAcquireContext(&hProv, L"OEMDecryptContainer", MS_ENH_RSA_AES_PROV,
PROV_RSA_AES, CRYPT_NEWKEYSET) ? S_OK : HRESULT_FROM_WIN32(GetLastError());
if (hr == NTE_EXISTS)
{
hr = CryptAcquireContext(&hProv, L"OEMDecryptContainer", MS_ENH_RSA_AES_PROV,
PROV_RSA_AES, 0) ? S_OK : HRESULT_FROM_WIN32(GetLastError());
}
if (SUCCEEDED(hr))
{
// Call CryptGenKey to generate the OEM public and private key pair. OOBE expects the algorithm to
be CALG_RSA_KEYX.
HCRYPTKEY hKey;
hr = CryptGenKey(hProv, CALG_RSA_KEYX, CRYPT_EXPORTABLE, &hKey) ? S_OK :
HRESULT_FROM_WIN32(GetLastError());
if (SUCCEEDED(hr))
{
// Call CryptExportKeyHelper to serialize the public key into bytes.
BYTE *pbPubBlob;
DWORD cbPubBlob;
hr = CryptExportKeyHelper(hKey, NULL, PUBLICKEYBLOB, &pbPubBlob, &cbPubBlob);
if (SUCCEEDED(hr))
{
{
// Call CryptExportKey again to serialize the private key into bytes.
BYTE *pbPrvBlob;
DWORD cbPrvBlob;
hr = CryptExportKeyHelper(hKey, NULL, PRIVATEKEYBLOB, &pbPrvBlob, &cbPrvBlob);
if (SUCCEEDED(hr))
{
// Now write the public key bytes into the file pubkey.blob
hr = WriteByteArrayToFile(L"pubkey.blob", pbPubBlob, cbPubBlob);
if (SUCCEEDED(hr))
{
// And write the private key bytes into the file Prvkey.blob
hr = WriteByteArrayToFile(L"prvkey.blob", pbPrvBlob, cbPrvBlob);
}
HeapFree(GetProcessHeap(), 0, pbPrvBlob);
}
HeapFree(GetProcessHeap(), 0, pbPubBlob);
}
CryptDestroyKey(hKey);
}
CryptReleaseContext(hProv, 0);
}
return hr;
}
// Call CryptExportKey the first time to determine the size of the serialized key.
DWORD cbBlob = 0;
HRESULT hr = CryptExportKey(hKey, hExpKey, dwBlobType, 0, nullptr, &cbBlob) ? S_OK :
HRESULT_FROM_WIN32(GetLastError());
if (SUCCEEDED(hr))
{
// Allocate a buffer to hold the serialized key.
BYTE *pbBlob = reinterpret_cast<BYTE *>(CoTaskMemAlloc(cbBlob));
hr = (pbBlob != nullptr) ? S_OK : E_OUTOFMEMORY;
if (SUCCEEDED(hr))
{
// Now export the key to the buffer.
hr = CryptExportKey(hKey, hExpKey, dwBlobType, 0, pbBlob, &cbBlob) ? S_OK :
HRESULT_FROM_WIN32(GetLastError());
if (SUCCEEDED(hr))
{
*ppbBlob = pbBlob;
*pcbBlob = cbBlob;
pbBlob = nullptr;
}
CoTaskMemFree(pbBlob);
}
}
return hr;
}
HRESULT WriteByteArrayToFile(_In_ PCWSTR pszPath, _In_reads_bytes_(cbData) BYTE const *pbData, DWORD cbData)
{
bool fDeleteFile = false;
HANDLE hFile = CreateFile(pszPath, GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
nullptr);
HRESULT hr = (hFile == INVALID_HANDLE_VALUE) ? HRESULT_FROM_WIN32(GetLastError()) : S_OK;
if (SUCCEEDED(hr))
{
DWORD cbWritten;
hr = WriteFile(hFile, pbData, cbData, &cbWritten, nullptr) ? S_OK :
HRESULT_FROM_WIN32(GetLastError());
fDeleteFile = FAILED(hr);
CloseHandle(hFile);
}
if (fDeleteFile)
{
DeleteFile(pszPath);
}
return hr;
}
// This method uses the specified Userdata.blob (pszDataFilePath), Sessionkey.blob (pszSessionKeyPath), and
Prvkey.blob (pszPrivateKeyPath)
// and writes the plaintext XML user data to Plaindata.xml
HRESULT UseSymmetricKeyFromFileToDecrypt(_In_ PCWSTR pszDataFilePath, _In_ PCWSTR pszSessionKeyPath, _In_
PCWSTR pszPrivateKeyPath)
{
// Acquire crypt provider. Use provider MS_ENH_RSA_AES_PROV and provider type PROV_RSA_AES to decrypt
the blob from OOBE.
HCRYPTPROV hProv;
HRESULT hr = CryptAcquireContext(&hProv, L"OEMDecryptContainer", MS_ENH_RSA_AES_PROV, PROV_RSA_AES,
CRYPT_NEWKEYSET) ? S_OK : HRESULT_FROM_WIN32(GetLastError());
if (hr == NTE_EXISTS)
{
hr = CryptAcquireContext (&hProv, L"OEMDecryptContainer", MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0) ?
S_OK : HRESULT_FROM_WIN32(GetLastError());
}
if (SUCCEEDED(hr))
{
// Read in the OEM private key file.
BYTE *pbPrvBlob;
DWORD cbPrvBlob;
hr = ReadFileToByteArray(pszPrivateKeyPath, &pbPrvBlob, &cbPrvBlob);
if (SUCCEEDED(hr))
{
// Convert the private key file bytes into an HCRYPTKEY.
HCRYPTKEY hKey;
hr = CryptImportKey(hProv, pbPrvBlob, cbPrvBlob, 0, 0, &hKey) ? S_OK :
HRESULT_FROM_WIN32(GetLastError());
if (SUCCEEDED(hr))
{
// Read in the encrypted session key generated by OOBE.
BYTE *pbSymBlob;
DWORD cbSymBlob;
hr = ReadFileToByteArray(pszSessionKeyPath, &pbSymBlob, &cbSymBlob);
if (SUCCEEDED(hr))
{
// Convert the encrypted session key file bytes into an HCRYPTKEY.
// This uses the OEM private key to decrypt the session key file bytes.
HCRYPTKEY hSymKey;
hr = CryptImportKey(hProv, pbSymBlob, cbSymBlob, hKey, 0, &hSymKey) ? S_OK :
HRESULT_FROM_WIN32(GetLastError());
if (SUCCEEDED(hr))
{
// Read in the encrypted user data written by OOBE.
BYTE *pbCipher;
DWORD dwCipher;
hr = ReadFileToByteArray(pszDataFilePath, &pbCipher, &dwCipher);
if (SUCCEEDED(hr))
{
// Use the session key to decrypt the encrypted user data.
BYTE *pbPlain;
DWORD dwPlain;
hr = DecryptHelper(pbCipher, dwCipher, hSymKey, &pbPlain, &dwPlain);
hr = DecryptHelper(pbCipher, dwCipher, hSymKey, &pbPlain, &dwPlain);
if (SUCCEEDED(hr))
{
hr = WriteByteArrayToFile(L"plaindata.xml", pbPlain, dwPlain);
HeapFree(GetProcessHeap(), 0, pbPlain);
}
HeapFree(GetProcessHeap(), 0, pbCipher);
}
CryptDestroyKey(hSymKey);
}
HeapFree(GetProcessHeap(), 0, pbSymBlob);
}
else if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
{
wcout << L"Couldn't find session key file [" << pszSessionKeyPath << L"]" << endl;
}
CryptDestroyKey(hKey);
}
HeapFree(GetProcessHeap(), 0, pbPrvBlob);
}
else if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
{
wcout << L"Couldn't find private key file [" << pszPrivateKeyPath << L"]" << endl;
}
CryptReleaseContext(hProv, 0);
}
return hr;
}
You can use Unattend settings to prevent some or all of the user interface (UI) pages from appearing in
Windows OOBE. To fully automate OOBE, use Unattend to configure what a user would normally configure
during OOBE. OOBE screens that aren't configured in Unattend will display when a user goes through OOBE.
To learn more about creating an answer file using Unattend, as well as a full list of Unattend settings available to
you, see the Unattended Windows Setup Reference.
Customize the following Unattend settings to automate OOBE:
WARNING
Don't use the SkipMachineOOBE setting to automate OOBE. Instead, use the above unattend settings.
Related topics
Automate Windows Setup
Windows Auto Pilot
Desktop Background and Themes Customizations
6/28/2021 • 2 minutes to read
Desktop backgrounds and themes are an opportunity to provide a range of visuals that appeal to the diverse
users of Windows-based devices. By setting the default desktop background and adding additional themes, you
are can provide our shared customers with a visual sense of style that can highlight the design of the device.
Desktop Background
The new Windows desktop background highlights and draws attention to the newly designed customer
experience. This iconic design complements the centered emphasis in the customer experience and radiates
from the center outward. The centered taskbar and Start menu are highlighted by this design.
The design is both simple and bold. It consisted of multiple parts but creates a singular and strong form. The
centered design uses negative space around the object to bring attention to the center, again, in harmony with
the new design of the customer experience.
While Microsoft encourages you to use the new iconic desktop background, you can choose instead to create
and add your own custom background, following these design goals of the Windows iconic background:
1. Choose an image that complements the centered design, radiates from the bottom outward, and envelopes
the Start menu.
2. Use negative space around the object in your design to bring focus to the center of the user experience.
3. Use a form that is simple and bold for the central image.
4. Use color and texture to communicate brand and personality. The colors you choose should complement the
acrylic materials design.
The following images show the cropping composition guideline for different aspect ratios and default postures.
The image you choose should complement the Start menu. Use an image that can frame the open Start menu.
The size of the Start menu is approximately 642x724 pixels, the height of the taskbar is 48px, and the gap
between the taskbar and Start menu is 12px.
Themes
A customized theme and desktop background for Windows can be provided by defining the Themes setting
within your Unattend.xml.
The following child elements must be defined:
ThemeName element to specify the name of the customized Windows default theme.
DesktopBackground element to specify the path to a custom background graphics file of type .png. jpg, or
.bmp located in a subfolder under %windir%
UWPAppsUseLightTheme element to enable or disable light theme.
Supplemental themes added by OEMs must be stored in %WinDir%\Resources\ to show up in the Theme
selector in Settings.
More information about the Unattend settings and the Theme File Format is available at these links:
Themes
Theme File Format
Set dark mode
3/5/2021 • 2 minutes to read
This personalization setting for end users allows them to express preference whether to see applications which
support the setting in a dark or light mode.
Many Microsoft first party applications apply the setting and it is easy for you to support the functionality in
your UWP applications as well.
You can customize the default Windows theme via Unattend.xml. The Unattend component includes a setting
UWPAppsUseLIghtTheme that configures dark mode as the default for apps that support it.
<settings pass="oobeSystem">
<Themes>
<ThemeName>MyOLEDTheme</ThemeName>
<DefaultThemesOff>false</DefaultThemesOff>
<DesktopBackground>c:\windows\OLEDFriendlyImage.jpg</DesktopBackground>
<WindowColor>Lime</WindowColor>
<UWPAppsUseLightTheme>false</UWPAppsUseLightTheme>
</Themes>
</settings>
To learn more about customizing Windows themes, see Themes in the Unattended Windows Setup Reference.
Recommended settings for better tablet experiences
6/28/2021 • 2 minutes to read
Windows 11 provides optimized experiences when tablets and 2-in-1 devices are in tablet posture. For example,
the taskbar will provide larger space among the icons for better touch experiences.
To enable these optimizations by default, the devices must indicate to the Windows operating system whether
they are tablet or 2-in-1 devices. Microsoft recommends using the following settings to correctly set the device
type.
1. Enclosure Type in SMBIOS
Set the Enclosure Type of the device as Tablet (1Eh), Convertible (1Fh), or Detachable (20h) based on the
definition.
2. DeviceForm
Set DeviceForm value of the device as Tablet (2), Convertible (5), or Detachable (6) based on the
definition.
3. ConvertibleSlateMode
Set ConvertibleSlateMode value as 0 if the device is Tablet, Convertible or Detachable. Set it as 1 for other
form factors like Desktop, Laptop, or Notebook.
If one of the Enclosure Type and DeviceForm is set as above, and CSM is 0, Windows will provide tablet
experiences by default until a keyboard is attached.
Without this information, Windows won't know whether to show as tablet until a keyboard is attached or
detached for a 2-in-1 device.
For a tablet device or an attachable device without a keyboard, Windows will stay in desktop mode and not
provide tablet experiences to the customer.
Enclosure Type is preferable to DeviceForm because it is in SMBIOS and won't be wiped out when the device is
clean installed.
Customize the Retail Demo Experience (RDX)
3/5/2021 • 20 minutes to read
Showcase your new devices on the retail sales floor with a rich, engaging experience with the Windows Retail
Demo Experience (RDX).
Attract shoppers with demo videos . We’ve included videos that show off the latest Windows 10 features.
Add your own videos to show off your own unique hardware, apps, and services.
Let shoppers tr y it out . Shoppers can experience the device first-hand, working with sample data in
contacts, photos, email and messaging apps.
Retail mode works best when demo devices have high-speed Internet access.
Customizable components of RDX:
Attract loop app : a perpetually looping video or images intended to attract customers to the device. The
content is intended to draw the customer in to interact with the device.
Retail Demo app : an app that launches automatically when a customer ends the attract loop by tapping a
keyboard key, clicking the mouse, or touching the screen (if touchscreen) while the Attract loop app plays.
The Retail Demo app educates the customer about the device, Windows, and associated services available
with the purchase of the device. After a period of inactivity, the attract loop begins playing again.
Demo mode content : content the customer can interact with during the demo. This includes pre-loaded
(image) or downloaded app content, documents, music, photos, videos, and Store apps.
Setup and operation of retail demo mode : determine RDX enablement on the device, automatic device
clean-up between customers, and automated removal of RDX content after purchase.
Digital Fact Tag app : an app that launches automatically at the same time as the Retail Demo app. This app
sits on the right side of the screen and displays key information in a perpetual way for the shopper. The app
cannot be closed by the shopper, nor do apps display above or behind the app.
RDX 3.0
RDX 3.0 is included in Windows 10, version 1809. For Windows 10, version 1803, you can preload RDX 2.0, and
once the device is connected, it will upgrade to RDX 3.0 automatically.
Key updates include:
The Retail Demo app has a new webpage-style layout . New home page, navigation style, and content.
New: RD Provisioning extension API allows you to manage online assets yourself. In RDX 2.0, online
assets are managed through the Retail Demo Asset Manager (RDAM), and the time from start to finish
(submission > review > approval > sent to devices) is 2-3 weeks. If you manage your own online assets
using our API, you may be able to complete these tasks faster.
New: On-device admin (ODA) app (part of the provisioning API) allows retailers to update specs, price
locally on non-networked devices.
Coming soon: Digital fact tag (DFT) shows customers device specs and price. This feature will be
available as part of an online update. After receiving the online update, retailers can manually update the DFT
through the Retail Demo Mode Advanced Configuration menus. To learn more, see the RDX Windows
Experience Guide (WEG).
Attract loop
The retail demo experience begins with a video, which plays repeatedly while the device is idle. When the video
attract loop plays, the Start screen is restored back to a pre-set state. Photos and videos taken by previous
customers are deleted and the demo photos are also restocked.
IMPORTANT
The device must be plugged into AC power for the video attract loop to start.
Design recommendations
Create your own custom attraction video that highlights key features of your device.
Use full-screen imagery to focus on key selling points (KSPs) of the device. Our research shows that shoppers
are attracted to loops that show off hardware features with fast moving graphics and colorful imagery, but loops
that function as advertisements don't resonate with shoppers.
Limit the video message to 1 or 2 KSPs. The loop is designed to get shoppers to interact with device. If the
attract loop looks like an advertisement, shoppers are less likely to pay attention and interact with the system.
Avoid text in your video. Videos without text are easier to scale across multiple markets and locales since there
are no localization costs. In addition, shoppers typically view only part of the video, so your text might not be
viewed in its entirety.
We strongly recommend that you use the attract loop to show how your brand, apps, services, and the devices
themselves are differentiated from your competitors.
Requirements
The following are the specifications for the attract loop video.
Videos must be less than 60 seconds.
Must not include an audio track.
Acceptable compression format: H.264/MPEG4
Videos must be designed so they don’t cause screen burn even when played for hours at a time for the entire
shelf life of the device.
The source video should be appropriate quality to ensure the best possible playback on the device based on
its graphics rendering capabilities (resolution, color capabilities, and graphics processing power).
We recommend matching the video resolution to the optimal resolution on each device when possible.
Otherwise, resolution should be 1920 x 1080.
Add the video to the image
You can replace the default attract loop video with your own customized video, which you can save to your
device images. Doing so makes this video available to the shopper even if the retailer never connects the demo
device to the internet. This content should not be time-sensitive or seasonal, and it should be appropriate for all
regions and languages the device will ship to.
Create the default set of content first. This content is stored in the \Neutral file path, and it must be named:
attract.wmv :
%programdata%\Microsoft\Windows\RetailDemo\OfflineContent\OEM\Content\Neutral\AttractContent\attract.wmv
For devices sold in multiple regions or with multiple languages: You can add region and/or language-
specific versions for attract loops. When there is no region-specific or language-specific content, the default
(\Neutral) content is displayed.
For a complete list of supported languages and locales, see Language Identifier Constants and Strings.
%programdata%\Microsoft\Windows\RetailDemo\OfflineContent\OEM\Content\ [locale] \AttractContent\attract.wmv
%programdata%\Microsoft\Windows\RetailDemo\OfflineContent\OEM\ [region]
\Content\Neutral\AttractContent\attract.wmv
%programdata%\Microsoft\Windows\RetailDemo\OfflineContent\OEM\ [region] \Content\ [locale]
\AttractContent\attract.wmv
Each content page contains one or more sections that are comprised of media (images and video), text copy, and
Call-to-Action (CTA) buttons or links to encourage the shopper to explore the featured content. If a content page
contains multiple sections, a feature bar displays at the bottom. The customer can move between content
sections of the page by selecting features in the bar or by scrolling up and down the page.
The app highlights key features as determined by the Microsoft marketing team. Some content in the app only
appears when Office is installed or certain hardware is detected. For example, when Office 365 is installed, the
Office section may show a “Try it now” button to open Word or PowerPoint. When a digitizer is detected, the
Office section may display an collection of videos showing how Office works with a pen.
The content shown changes based on the device. For example, if you have preinstalled Office 365, the demos
show Office's pen and inking functionality.
When a shopper closes the Retail Demo app, they see the desktop of the device.
In RDX 3.0, they'll also see a Digital Fact Tag to the right (unless the language reads right-to-left, in which case
then the Digital Fact Tag is on the left).
Create custom content
OEMs and Retailers can create new custom content for the Retail Demo app using the Microsoft RDX
Submission Tool. If you don’t currently have an account for the RDX Submission Tool, please reach out to your
Account Manager, and let them know which Microsoft Account (MSA) you'd like to use to access the tool.
In the tool, you can create a base set of content which you can save to your device images. Doing so makes this
content available to the shopper even if the retailer never connects the demo device to the internet. This content
should not be time-sensitive or seasonal, and it should be appropriate for all regions and languages the device
will ship to.
In the tool you can also create new or updated content which can be delivered online to your devices. This
content can be targeted by language, region, and model, so that when a targeted device is connected to the
internet, it automatically receives the updates and shows the new content.
OEMs can specify a theme color, navigation selected-button color, and logos for the Retail Demo app, in addition
to adding unique page content. Colors and logos are specified at the app level, and content is specified at the
page level. OEMs can also choose between one of three templates: Hero, Immersive Hero, and Mosaic (described
below).
Template options, examples, and requirements
There are four templates available for the Retail Demo app content sections: Hero, Feature, Immersive Hero, and
Mosaic.
Hero template
Use the Hero template to showcase key content. A full-bleed image must be used – this can be combined with a
title, copy, and/or call-to-action link. This template can also support full-bleed videos. All text in a video must be
embedded into the media. Below are the media and copy requirements for the Hero template:
EL EM EN T REQ UIREM EN T S
Call-to-action (CTA) button text We recommend an 11-character limit, not counting spaces
in between characters.
EL EM EN T REQ UIREM EN T S
Call-to-action (CTA) button text We recommend an 11-character limit, not counting spaces
in between characters.
Mosaic template
Use this template to show components as a graphic montage. This template is very versatile because you can
use it with or without a text file. It always extends the full content area. Use the mosaic to support a theme,
communicate an idea, or present top picks around particular topics. Add call-to-action links if you need to direct
users to another page. CTAs are typically centrally aligned and appear at the bottom of the tile.
The mosaic layout follows several predefined patterns, depending on the number of tiles you wish to include.
The layout will appear as follows:
Below are the media and copy requirements for the Mosaic template:
EL EM EN T REQ UIREM EN T S
Mosaic layout Mosaic template allows for 2 – 4 tiles. The layout of the tiles
is auto-generated based on number of tiles input into the
RDX Submission Tool. The layout is not adjustable, so you
will need to place tiles in the correct order for the layout.
Tile background image Resolution varies based on number of tiles used, but
generally images should be square or 2:1 resolution
appropriate to the screen; images must be PNG, have a
transparent background and no padding
Tile paragraph image Recommend 220 x 220 pixels; images must be PNG, have a
transparent background and no padding
Call-to-action (CTA) button text We recommend an 11-character limit, not counting spaces
in between characters.
Legal Text Mosaic does not support legal text on tiles due to tile size.
NOTE
Keep in mind that if you are building content for offline devices, CTA buttons should not open URLs as this will create a
poor user experience.
4. Create a folder of all assets (images and video) and name the folder oem_assets . Create a zipped
version of the oem_assets folder and name it oem.zip .
5. Copy the oem.zip folder of assets for the Retail Demo app to the default and US-English folders:
%programdata%\Microsoft\Windows\RetailDemo\OfflineContent\OEM \Content\Neutral\HubContent\oem.zip
%programdata%\Microsoft\Windows\RetailDemo\OfflineContent\OEM\US\Content\en-us\HubContent\oem.zip
File paths for localized content (optional):
%programdata%\Microsoft\Windows\RetailDemo\OfflineContent\OEM\Content\ [locale] \HubContent\oem.zip
%programdata%\Microsoft\Windows\RetailDemo\OfflineContent\OEM\ [region]
\Content\Neutral\HubContent\oem.zip
%programdata%\Microsoft\Windows\RetailDemo\OfflineContent\OEM\ [region] \Content\ [locale]
\HubContent\oem.zip
6. Build the image.
NOTE
“SKU” is optional and is only required if the retailer associated with the Retail Access Code (RAC) explicitly designed
an experience under a specific SKU. The RAC (Retail Access Code), SKU, and Retailer store ID only apply and are
only used by Retailers. If this applies to you, the codes should be requested through your Microsoft Account
Manager. A list of SKUs will only be available if the retailer associated with the Retail Access Code (RAC) has
previously provided it to Microsoft with this intent. If a SKU is not entered, the device will get content specific to
the retailer and specific to the model of the hardware.
5. If you would like to specify start up and shut down times, select Advanced configuration .
6. In the Automatic shutdown page, configure and click Next .
7. In the RDX admin settings page, you can choose up to 21 days to keep admin account active, or you
can choose to keep it active perpetually. A password is required to make an admin account perpetually
active.
8. If the device is online, select Finish on the next page.
Retail demo setup will reboot the device soon after the desktop appears, and then retail demo
configuration will continue in the background until the device begins showing the video attract loop.
Highlight your device
Retail Demo mode can showcase additional Windows features and apps based on the type of device’s form
factor.
To access this content, make sure that the DeviceForm Unattend setting is set.
For example, when DeviceForm identifies the device as a Convertible laptop, Retail Demo mode includes
content to show off Convertible features in Windows.
Additional recommendations:
If you are setting up your demo on a tablet device, configure your devices to boot to tablet mode and turn
hardware-based prompting off:
Make sure that ConvertibleSlateMode is always accurate for your devices.
To support booting to tablet mode, configure the SignInMode setting.
To remove prompts triggered by changes to ConvertibleSlateMode, configure
ConvertibleSlateModePromptPreference setting.
Schedule automatic shutdown
Windows provides a way to set times for the devices to turn on and start retail demo mode automatically.
Likewise, you can schedule when the devices shut down. These features allow you to save energy costs, to
schedule updates, and to restore the retail demo experience automatically. You can configure shutdown times on
the client during the out-of-box experience (OOBE), or post-OOBE during the retail demo mode setup.
Additionally, you can configure automatic shutdown times using Retail Demo Asset Management (RDAM) after
retail demo mode has been set up.
To schedule shutdowns on a local device
1. Open retail demo mode configuration. For instructions, see this section in the RDX Windows Experience
Guide (WEG).
2. The retail demo mode configuration UI is displayed. Select the Advanced configuration button.
3. In the Advanced RDX settings page, under Automatic Shutdown , select Edit settings . This allows you
to configure the automatic shutdown of the device.
For devices with more than 32GB of storage, the components are automatically removed 7 days after the
customer completes OOBE.
For devices with 32GB of storage or less, by default, the components are automatically removed 30 minutes
after the customer completes OOBE. To change this schedule, find the registry key
HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE and set the value DeleteDemoContentDelay to a
number of minutes from 30 and 10080 (= 7 days).
md c:\HWID
Set-Location c:\HWID
Set-ExecutionPolicy Unrestricted
Install-Script -Name Get-WindowsAutoPilotInfo
Get-WindowsAutoPilotInfo.ps1 -OutputFile AutoPilotHWID.csv
Customize the Windows performance power slider
3/5/2021 • 9 minutes to read
The Windows performance power slider enables end customers to quickly and intelligently trade performance
of their system for longer battery life. As a customer switches between the four slider modes to trade
performance for battery life (or vice versa), Windows power settings are engaged behind the scenes. You are
able to customize the default slider mode for both AC and DC, and can also configure the power settings, and
PPM options, that are engaged for each slider mode.
Customers can access the slider on their Windows device by clicking or tapping the battery icon in the task bar.
The slider appears in the battery flyout.
Customers can choose their power mode by moving the slider to the left and right. Customers can choose to
prioritize the remaining battery life on the device, or the performance of apps and services running on the
device. The screenshot above shows the slider is in the Better Performance slider mode, which is the out-of-
box Windows default.
Slider availability
The Windows power slider is available for AMD and Intel platforms running Windows 10, build 1709 and newer
builds of Windows. It is not available on devices with ARM64 processors. The slider will appear on a device only
when the Balanced power plan, or any plan that is derived from Balanced, is selected. There is not an option for
either users or OEMs to remove the slider UX.
Devices that have the High Performance, Power Saver, or any "OEM Recommended" power plans will not be
disturbed during the Windows upgrade process. If a user upgrades from a version of Windows that does not
support the slider, to a version that does, there will be no change to their High Performance, Power Saver, or
"OEM Recommended" power plan. These users will not see the slider UX, and they can still configure their
power plans in the same way they could before upgrading.
Users will see the power slider appear only when they apply the Balanced power plan from the Settings app,
under System > Power & Sleep > Additional power settings .
NOTE
After the user changes to a Balanced performance plan, there is no way for them to go back to using the High
Performance plan from the UI, although it is possible from the cmd line (via powercfg).
NOTE
Game mode operates independently of the Windows performance power slider, and can be engaged in any slider mode.
NOTE
Battery Saver is not available as a default slider mode.
First, create a provisioning package using Windows Configuration Designer. You will then edit the
customizations.xml file contained in the package to include your power settings. Use the XML file as one of the
inputs to the Windows Configuration Designer command-line to generate a provisioning package that contains
the power settings, then apply the package to the image. For information on how to use the Windows
Configuration Designer CLI, see Use the Windows Configuration Designer command-line interface.
W IN DO W S P RO VISIO N IN G PAT H P RO VISIO N IN G SET T IN G N A M E VA L UES
NOTE
If no default is configured, Better Performance will be the default slider mode for both AC and DC.
XML Example
Below is an example customizations.xml file that defines default slider modes.
NOTE
Settings such as disk and display timeouts, and other legacy power settings, are not customizable via the
performance/power slider. Only settings which can affect perceived performance differences can be customized across
slider modes. Each slider mode should be thought of as a "lite" power plan, which only contains settings that impact
performance, such as CPU settings (PPM) and power throttling. Other factors which control performance (GPU, thermals
etc) are in OEM/SVs control and they can create custom power-settings for those and connect them to the slider via the
INF.
<Power>
<Policy>
<Settings>
<Processor>
<SchemePersonality>
<!-- EPP override for default PPM profile for "Better Battery" -->
<Profile SchemeAlias="BetterBatteryLifeOverlay">
<Setting ProfileAlias="Default">
<PerfEnergyPreference>
<DcValue>60</DcValue>
</PerfEnergyPreference>
</Setting>
</Profile>
<!--EPP override for default PPM profile for "Best Performance" -->
<Profile SchemeAlias="MaxPerformanceOverlay">
<Setting ProfileAlias="Default">
<PerfEnergyPreference>
<DcValue>30</DcValue>
</PerfEnergyPreference>
</Setting>
</Profile>
</SchemePersonality>
</Processor>
</Settings>
</Policy>
</Power>
NOTE
The slider will appear on a device only when the Balanced power plan, or any plan that is derived from Balanced is
selected.
<Power>
<Policy>
<Settings>
<Processor>
<SchemePersonality>
<!-- EPP override for default PPM profile for "Better Battery" -->
<Profile SchemeAlias="BetterBatteryLifeOverlay">
<Setting ProfileAlias="Default">
<PerfEnergyPreference>
<AcValue>60</AcValue>
</PerfEnergyPreference>
</Setting>
</Profile>
<!--EPP override for default PPM profile for "Best Performance" -->
<Profile SchemeAlias="MaxPerformanceOverlay">
<Setting ProfileAlias="Default">
<PerfEnergyPreference>
<AcValue>30</AcValue>
</PerfEnergyPreference>
</Setting>
</Profile>
</SchemePersonality>
</Processor>
</Settings>
</Policy>
</Power>
Power throttling
Most Windows users have multiple apps running on the operating system at the same time, and often, the apps
running in the background consume significant power. Windows leverages modern silicon capabilities to run
background work in an energy-efficient manner, significantly enhancing battery life. Power throttling saves up to
11% in CPU power by throttling CPU frequency of applications running in the background. With power
throttling, when background work is running, Windows places the CPU in its most efficient operating modes.
Learn more about this feature in our blog post: Introducing power throttling.
Power throttling does not suspend or close apps and services on the device.
Power throttling is always engaged, unless the slider is set to Best Performance . In this case, all applications
will be opted out of power throttling. Users can also opt individual apps out of power throttling in the Battery
usage UX:
OEMs do not have an option to disable or change power throttling on any of the Windows slider modes.
NOTE
Power throttling is available for devices using Intel's 6th or 7th generation processors (including those without Intel's
SpeedShift technology) only.
Desktop backgrounds and themes are an opportunity to provide a range of visuals that appeal to the diverse
users of Windows-based devices. By setting the default desktop background and adding additional themes, you
are can provide our shared customers with a visual sense of style that can highlight the design of the device.
Desktop Background
The new Windows desktop background highlights and draws attention to the newly designed customer
experience. This iconic design complements the centered emphasis in the customer experience and radiates
from the center outward. The centered taskbar and Start menu are highlighted by this design.
The design is both simple and bold. It consisted of multiple parts but creates a singular and strong form. The
centered design uses negative space around the object to bring attention to the center, again, in harmony with
the new design of the customer experience.
While Microsoft encourages you to use the new iconic desktop background, you can choose instead to create
and add your own custom background, following these design goals of the Windows iconic background:
1. Choose an image that complements the centered design, radiates from the bottom outward, and envelopes
the Start menu.
2. Use negative space around the object in your design to bring focus to the center of the user experience.
3. Use a form that is simple and bold for the central image.
4. Use color and texture to communicate brand and personality. The colors you choose should complement the
acrylic materials design.
The following images show the cropping composition guideline for different aspect ratios and default postures.
The image you choose should complement the Start menu. Use an image that can frame the open Start menu.
The size of the Start menu is approximately 642x724 pixels, the height of the taskbar is 48px, and the gap
between the taskbar and Start menu is 12px.
Themes
A customized theme and desktop background for Windows can be provided by defining the Themes setting
within your Unattend.xml.
The following child elements must be defined:
ThemeName element to specify the name of the customized Windows default theme.
DesktopBackground element to specify the path to a custom background graphics file of type .png. jpg, or
.bmp located in a subfolder under %windir%
UWPAppsUseLightTheme element to enable or disable light theme.
Supplemental themes added by OEMs must be stored in %WinDir%\Resources\ to show up in the Theme
selector in Settings.
More information about the Unattend settings and the Theme File Format is available at these links:
Themes
Theme File Format
Set dark mode
3/5/2021 • 2 minutes to read
This personalization setting for end users allows them to express preference whether to see applications which
support the setting in a dark or light mode.
Many Microsoft first party applications apply the setting and it is easy for you to support the functionality in
your UWP applications as well.
You can customize the default Windows theme via Unattend.xml. The Unattend component includes a setting
UWPAppsUseLIghtTheme that configures dark mode as the default for apps that support it.
<settings pass="oobeSystem">
<Themes>
<ThemeName>MyOLEDTheme</ThemeName>
<DefaultThemesOff>false</DefaultThemesOff>
<DesktopBackground>c:\windows\OLEDFriendlyImage.jpg</DesktopBackground>
<WindowColor>Lime</WindowColor>
<UWPAppsUseLightTheme>false</UWPAppsUseLightTheme>
</Themes>
</settings>
To learn more about customizing Windows themes, see Themes in the Unattended Windows Setup Reference.
Customize the Get Help app
3/5/2021 • 4 minutes to read
The Get Help app empowers customers to self-help with troubleshooters, instant answers, Microsoft support
articles, and more, before contacting assisted support.
If you have a support app or support website you would like to direct customers towards, you can use
unattend.xml to display your support option within the Get Help app. A link to your support app or website is
surfaced wherever options to contact support are shown in the Get Help app. The first item in the list will be the
link you provided.
Customers are sent to the Get Help from the Settings app, Cortana, Bing Instant Answers, the Start Menu, and
numerous Microsoft web experiences. It is also possible to launch Get Help from your own apps and websites.
Consumer experience
For consumers, the Get Help app provides a way to ask a question and get recommended solutions or contact
assisted support. Depending on the country/region and language of the device, one of two experiences will be
shown: Virtual Agent, or Search support.
Virtual Agent
Microsoft's Virtual Agent is a support chat bot designed to help with issues related to Windows and other
products. This brings a conversational approach to understanding problems and providing the most appropriate
solution. If the Virtual Agent is unable to provide a solution, it will direct customers to the options for contacting
support; it is also possible to ask for those options at any time. This experience is only available in en-US.
OEM customization provides the top support option in the list — a link to either your support website, or your
support app.
Search support
In markets that do not have the Virtual Agent experience available, customers can utilize search support by
entering a question and receiving back recommended support content. Beneath the search results, the options
for contacting support will be listed.
OEM customization provides the top support option in the list — a link to either your support website, or your
support app.
Enterprise experience
For Enterprise SKUs, the Get Help app provides a different experience that focuses on getting customers to the
right kind of support. The support options listed are shown to all enterprise customers. Availability of support
within each option depends upon support agreements with the enterprise.
NOTE
OEM support options are not displayed in the Enterprise experience of the Get Help app.
See the OEMInformation setting in the Unattended setup reference to learn more about how to add your
support information to the Get Help app.
Link to your support app
Here is an example where a path for SupportAppURL is supplied. In this case , the Get Help app will direct
customers to the OEM's support app:
<OEMInformation>
<SupportProvider>Contoso</SupportProvider>
<SupportAppURL>ContosoSupport://path/?param=val</SupportAppURL>
</OEMInformation>
SupportAppURL must be present and contain valid string values, otherwise Get Help won't pick up your support
information. SupportProvider is an optional override for the name shown on the link; the default when
SupportProvider is not present is SystemManufacturer from SystemInformation (msinfo32.exe).
"ContosoSupport" is a sample protocol name; you can pick your app's own protocol name, if it does not conflict
with an existing protocol name in the system.
To register a protocol handler for your app:
For a Universal app, the protocol handler is specified in the package.appxmanifest file (part of the Visual
Studio project), under the <Extensions> section. See Handle URI activation for more details.
For a Win32 app, the protocol handler is specified in the registry. See Registering an Application to a URI
Scheme for more details.
NOTE
Win32 apps are not supported in Windows 10 in S mode.
<OEMInformation>
<SupportProvider>Contoso</SupportProvider>
<SupportURL>https://www.contoso.com/support?param=val</SupportURL>
</OEMInformation>
SupportURL must be present and contain valid string values, otherwise Get Help won't pick up your support
information. SupportProvider is an optional override for the name shown on the link; the default when
SupportProvider is not present is SystemManufacturer from SystemInformation (msinfo32.exe).
The Get Help app will launch the specified SupportURL in Microsoft Edge when the OEM support option is
chosen.
Where <Manufacturer> is an all lowercase, unbroken name such as "contoso" or "fabrikaminc". Generally, this
should be the simplest version of your brand name, not the longer formal business name. This information is
used to identify where users launched the Get Help app from; it is not used to customize the app directly.
Customize SIM card slot names
5/19/2021 • 2 minutes to read
In Windows 10, version 1803, you can customize the names of SIM card slots on the device to more easily
differentiate between them. For example, if the device has both an embedded SIM slot and an external SIM slot,
customizing the names will help your customers understand which is which.
IMPORTANT
Only devices with a Dual SIM Single Activation (DSSA) configuration support this customization.
The SIM card slot names that you choose are displayed in Settings , under Network & Internet > Cellular . If
no custom names are provided, the default names are SIM1 and SIM2 .
Instructions
1. Create a provisioning XML file (prov.xml). For instructions, see Create a Prov.xml.
2. Add the following XML to your provisioning XML file:
<wap-provisioningdoc>
<characteristic type="Registry">
<characteristic type="HKLM\Software\Microsoft\Cellular\MVSettings\DeviceSpecific\CellUX">
<parm name="SlotSelectionSim1Name" value="Your SIM name 1" datatype="string"/>
<parm name="SlotSelectionSim1Name" value="Your SIM name 2" datatype="string"/>
</characteristic>
</characteristic>
</wap-provisioningdoc>
3. Replace "Your SIM name 1" and "Your SIM name 2" with the desired names for your SIM card slots.
4. Create a resource-only .dll for the localized versions of your SIM card slot names. See Create a resource-
only .dll for localized strings for instructions.
5. In your resource-only .dll, set the BaseD11 asset to point to the location of your base MUI DLL file. For
example: C:\Path\DisplayStrings.dll .
6. Add the language MUI packages (*.dll.mui) for all the languages you are supporting and have localized
strings for. To do this:
Set the asset's Name to LanguageDll/$(langid) where $(langid) corresponds to the language. For
example: LanguageDll/en-US .
Set the asset's Source to the location of the .dll.mui file for that language. For example:
C:\Path\en-us\DisplayStrings.dll.mui .
Repeat these steps for other languages. For example, the following XML has entries for en-US, fr-CA,
and es-MX languages.
The Country and Operator Settings Asset (COSA) is a database of mobile operator profiles. It is included in
Windows 10 as a provisioning package. When a SIM is inserted in a COSA-enabled Windows-based device, the
provisioning framework attempts to establish a cellular connection by searching for the matching profile and
APN in COSA.
NOTE
This feature is only supported in Windows 10, version 1703 and above for desktop editions (Home, Pro, Enterprise, and
Education)
COSA can be extended with OEM-generated provisioning packages during desktop imaging. This enables OEMs
to introduce new COSA profiles to the database, as well as replace or extend existing Windows COSA profiles.
For example, you can add a profile for a mobile virtual network operator (MVNO) not currently in COSA, or a
new partner for Mobile Plans, by creating an answer file that contains the settings. You can also change or
remove an existing profile using the Replace operator in the existing answer file.
IMPORTANT
Please ensure that you read the How to support the COSA OEM-generated provisioning package once the device is in
market section below.
Generally you should only add APNs that are not included in the Windows COSA database. If you replace entries that
already exist in COSA, and the mobile operator changes those in the future, they will not be automatically updated
since the database will look to the OEM COSA package for those entries.
We recommend consulting the latest APNs for the mobile operator you are planning to add, to ensure that if there are
data device specific APNs that those are added to the OEM COSA file (in case the operator uses different APNs for
tablets than phones).
Microsoft recommends Mobile Operators to submit any profile changes made to extend COSA to Microsoft. To learn
more, see COSA/APN database submission.
IMPORTANT
Microsoft is collecting the following telemetry data related to the COSA:
AfterMarketProfile – Published when an OEM package adds a new profile. Data includes the profile ID (typically a
GUID) as well as the targeting info for the profile (such as MCC, MNC, SPN, and so on).
ProfileReplaced – Published when the OEM package replaces a COSA profile. Data is the profile ID.
ProfileSuppressedByAfterMarketProfile – Published when an OEM package contains a profile that matches when a
COSA profile also matches. The telemetry data contains the Profile ID.
2. Create a provisioning package that includes the answer file. For more information, see To build a
provisioning package.
3. Place your provisioning packages (PPKG) in the following location: %WINDIR%\Provisioning\COSA\OEM.
4. Perform necessary tests for validation.
Below is a list of the Purpose Groups relevant for the APNs.
Internet 3E5545D2-1137-4DC8-A198-33F1C657515F
Purchase 95522B2B-A6D1-4E40-960B-05E6D3F962AB
Administrative 2FFD9261-C23C-4D27-8DCF-CDE4E14A3364
For a full list of COSA settings, please see Planning your COSA/APN database submission.
2. For any operators you add via the COSA OEM-generated provisioning package, will need to be
maintained by the OEM in case of future changes by the mobile operator so you should ensure you have
a mechanism to update these in the future.
Update of the package is handled by a driver and Windows Update
You will need to ensure you have an existing device driver on the device for the cellular component
and the INF file is set to copy the PPKG
Follow the instructions in this document to author the INF file Example:
[SourceDisksNames]
1 = %DiskId1%
[SourceDisksFiles]
ContosoCosaCustomization.ppkg = 1
ContosoCosaCustomizationWithDataClass.xml = 1
; other driver package files omitted from example for brevity
[DestinationDirs]
CosaCustomization.CopyList =10,Provisioning\Cosa\OEM
; other CopyFiles sections in DestinationDirs omitted from example for brevity
; Manufacturer and Models sections omitted for brevity. Assume Models section indicates a
DDInstall section of ContosoInstallSection
[ContosoInstallSection]
CopyFiles=CosaCustomization.CopyList
[CosaCustomization.CopyList]
ContosoCosaCustomization.ppkg
ContosoCosaCustomizationWithDataClass.xml
The driver needs to be preloaded on your factory image so that if you update the driver on Windows
Update in the future the device will scan for and find a newer version of this driver to download and
install.
You should test the update mechanism via Windows Update in the same mechanism as you would
test driver updates for a prerelease device or driver.
If you have an alternate mechanism to update the COSA OEM-generated provisioning package,
ensure that it works both on the factory image, and on the device after push button reset is run to test
the end user scenario.
NOTE
The PPKG will be applied in the following conditions. It is by design that they are not applied at the event of the
PPKG being copied to the specified location
After OS Reboot when system is idle
After User Login when system is idle
3. If the mobile operator updates any provisioning information (for instance APNs) and the device is COSA
OEM-generated provisioning package for that mobile operator, the OEM will need to get the new
provisioning information and update their COSA OEM-generated provisioning package on the shipped
devices via Windows Update.
Customize a Specific Absorption Rate (SAR)
mapping table
3/5/2021 • 5 minutes to read
You can configure and store a Specific Absorption Rate (SAR) table for mobile broadband modems in the
registry. When a mobile broadband modem is connected to the Windows device, Windows automatically uses
the table to map the mobile country code (MCC) of the modem's registered mobile operator (MO) to its
appropriate SAR back-off index, and configure the modem with it.
You may choose to configure the registry settings at imaging time, or run-time. If you build the registry settings
into the image at image deployment time within a package, the SAR mapping table will be ready for any OS
component as soon as it starts. If you use a run-time component to configure the registry settings after device
bootup, you ensure that the static SAR configuration will not be changed and/or wiped out by Windows
installation or upgrade, and that it stays consistent to the device and independent of OS installation.
For more details on SAR support for mobile broadband modems, please see Mobile Broadband Specific
Absorption Rate Platform Support.
Here is an overview of how Windows will read and configure the modem based on your customized SAR
mapping table:
1. Create a package that contains your registry settings, including those for the SARMappingTable and
SARConfiguration.
2. Build the package into the image for the device.
3. Windows (the WWAN service, in particular) will read the registry at start-up and store the settings for
later usage when an embedded, SAR-capable modem registers with a particular MO.
4. Windows also listens to registry change notifications to know if the registry for the settings is changed.
This means you may use your own way of adding and changing the settings at run-time, and Windows
will accept the changes immediately.
5. When a modem is registered with an MO at run-time, Windows takes the MCC of the MO and finds the
corresponding SAR back-off index(es) from the SAR mapping table.
6. Windows will then send the SAR back-off index to the modem using the MBIM interface defined in
Mobile Broadband Specific Absorption Rate Platform Support.
7. When the modem roams to another country, the MCC for the new MO will change. Windows will again
find the corresponding SAR back-off index(es) from the SAR mapping table using the MCC of the new
MO and send it to modem.
NOTE
If you have components update the settings at run-time, you must increment the configuration version number in the
registry value ConfigurationVersion as the last write to the registry. Whenever the ConfigurationVersion registry
value is changed, Windows will read all configuration settings and put them into effect.
SARMappingTable subkey
The SARMappingTable subkey may have up to 1000 registry values. The SAR back-off index(es) is per country.
The SAR back-off table will be able to support one entry per country. A country in this context is identified by
the standard MCC (Mobile Country Code).
NOTE
The value name must consist of three decimal-digit characters that represents the MCC. There may be up to 1000
registry value names, "000" through "999".
VA L UE N A M E TYPE DATA
If a registry value for a particular MCC is absent, the data in the special reg value 000 will be used. You may use
this default value for countries that do not need specific back-off indexes. If both a registry value for the MCC
and the special reg value 000 are absent, no SAR index will be used for the MCC.
SARConfiguration subkey
The SARConfiguration settings do not affect your ability to use modem DSI messages to pass through. For
example, SAR proxy may implement a custom design for SAR control and mapping using the existing API (the
WWAN service API and/or the corresponding WinRT APIs).
For the BackOffEnabled and ControlMode settings, the value in modem DSI messages will take precedence. If a
modem DSI message passes through the WWAN service, the values of these two settings will be saved and will
be used next time they are needed, regardless what values the registry settings for those are. If the
BackOffEnabled and ControlMode settings in registry contain 0xFFFFFFFF (no change) and no modem DSI
message ever passes through, the WWAN service will use the value currently in the modem. The WWAN service
queries the modem at start to obtain and remember the values in the modem.
VA L UE N A M E TYPE DATA
Customers see the the Pen & Windows Ink workspace when they click Settings > Devices > Pen and
Windows Ink .
Windows provides a few means for you to customize the Pen and Ink workspace:
You can create an advanced Pen settings app, and link to it directly within the Pen & Windows Ink Settings
using Unattend.xml. See Microsoft-Windows-TwinUI | CustomProtocol.
You can hide the Pen shortcut settings from the Pen & Windows Ink Settings using Unattend. This is
helpful for devices that are not compatible with pen settings. See Microsoft-Windows-TwinUI | Hide.
You can add up to three links to your own apps to the Pen & Windows Ink settings.
You can hide the “Ignore touch input when I’m using my pen” option within Pen & Windows Ink settings.
Hide the “Ignore touch input when I’m using my pen” setting
In Windows 10, build 1703, you have the option to hide the Ignore touch input when I’m using my pen
setting if the device doesn’t accept touch and pen input simultaneously.
To hide the simultaneous pen and touch settings UI, create the following registry key as a DWORD and set it to a
1. Setting it to 0 (default) will show the setting again.
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Pen\HideSPTSettings
Customizations for enterprise desktop
3/5/2021 • 2 minutes to read
Windows 10 Enterprise customizations provide a controlled and specialized experience for the end-users of a
Windows 10 device by allowing OEMs and system administrators to lock down the Windows 10 device
interaction experience.
There are many reasons for locking down a device, such as protecting the system from malicious users,
providing a custom defined user experience, and increasing system reliability.
You can lock down your Windows 10 desktop device by using the lock down features individually or in
combination with each other to get the effect you desire for your image. You can, for instance, create a dedicated
cashier device that runs a full screen Point of Service (POS) application.
TO P IC DESC RIP T IO N
Custom Logon You can use the Custom Logon feature to suppress
Windows 10 UI elements that relate to the Welcome screen
and shutdown screen. For example, you can suppress all
elements of the Welcome screen UI and provide a custom
logon UI. You can suppress the ease of access option on the
logon screen. You can also suppress the Blocked Shutdown
Resolver (BSDR) screen and automatically end applications
while the OS waits for applications to close before a
shutdown.
Shell Launcher Use Shell Launcher to replace the default Windows 10 shell
with a custom shell. You can use almost any application or
executable as your custom shell, such as a command window
or a custom dedicated application.
Unified Write Filter (UWF) Use Unified Write Filter (UWF) on your device to help protect
your physical storage media, including most standard
writable storage types that are supported by Windows, such
as physical hard disks, solid-state drives, internal USB
devices, external SATA devices, and so on. You can also use
UWF to make read-only media appear to the OS as a
writable volume.
TIP
In addition to the customizations above for OEMs, Windows 10 provides a Mobile device management (MDM) to help IT
pros manage company security policies and business applications, while avoiding compromise of the users’ privacy on
their personal devices. Under MDM, mobile device OEMs can also create custom configuration service providers (CSPs) to
manage their devices. For more information, see Mobile device management.
Related topics
Keyboard Filter reference : Keyboard Filter key names
Keyboard Filter WMI provider reference
Shell Launcher reference : WESL_UserSetting
Unified Write Filter reference : Unified Write Filter WMI provider reference
WEDL_AssignedAccess
1/18/2019 • 2 minutes to read
This Windows Management Instrumentation (WMI) provider class configures settings for assigned access.
Syntax
class WEDL_AssignedAccess {
[Key] string UserSID;
[Read, Write] string AppUserModelId;
[Read] sint32 Status;
};
Members
The following tables list any methods and properties that belong to this class.
Methods
This class contains no methods.
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
D ESCR IP TI
VA L U E ON
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N D ESCR IP TI
VA L U E ON
0 A
valid
accou
nt is
config
ured,
but
no
Wind
ows
app is
specifi
ed.
Assig
ned
acces
s is
not
enabl
ed.
1 Assig
ned
acces
s is
enabl
ed.
0x100 UserSI
D
error:
canno
t find
the
accou
nt.
0x103 UserSI
D
error:
the
accou
nt
profil
e
does
not
exist.
0x200 AppU
serM
odelI
D
error:
canno
t find
the
Wind
ows
app.
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N D ESCR IP TI
VA L U E ON
0x201 Task
Sched
uler
error:
Could
not
sched
ule
task.
Make
sure
that
the
Task
Sched
uler
servic
e is
runnin
g.
0xffffff Unspe
ff cified
error.
Remarks
Changes to assigned access do not affect any sessions that are currently signed in; you must sign out and sign
back in.
Example
The following Windows PowerShell script demonstrates how to use this class to set up an assigned access
account.
#
#---Define variables---
#
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
$AssignedAccessAccount = "KioskAccount"
# Define the Windows app to launch, in this example, use the Application Model User ID (AUMID) for Windows
Calculator.
# To use a different Windows app, change $AppAUMID to the AUMID of the Windows app to launch.
# The Windows app must be installed for the account.
$AppAUMID = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
#
#---Define helper functions---
#
function Get-UsernameSID($AccountName) {
# This function retrieves the SID for a user account on a machine.
# This function does not check to verify that the user account actually exists.
return $NTUserSID.Value
}
#
#---Set up the new assigned access account---
#
$AssignedAccessUserSID = Get-UsernameSID($AssignedAccessAccount)
# Check to see if an assigned access account is already set up, and if so, clear it.
if ($AssignedAccessConfig) {
# Configuration already exists. Delete it so that we can create a new one, since only one assigned access
account can be set up at a time.
$AssignedAccessConfig.delete();
# Configure assigned access to launch the specified Windows app for the specified account.
if ($AssignedAccessConfig) {
} else {
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
You can use the Custom Logon feature to suppress Windows 10 UI elements that relate to the Welcome screen
and shutdown screen. For example, you can suppress all elements of the Welcome screen UI and provide a
custom logon UI. You can also suppress the Blocked Shutdown Resolver (BSDR) screen and automatically end
applications while the OS waits for applications to close before a shutdown.
Custom Logon settings do not modify the credential behavior of Winlogon , so you can use any credential
provider that is compatible with Windows 10 to provide a custom sign-in experience for your device.
Requirements
Windows 10 Enterprise or Windows 10 Education.
Terminology
Turn on, enable: To make the setting available to the device and optionally apply the settings to the device.
Generally turn on is used in the user interface or control panel, whereas enable is used for command line.
Configure: To customize the setting or sub-settings.
Embedded Logon: This feature is called Embedded Logon in Windows 10, version 1511.
Custom Logon: This feature is called Custom Logon in Windows 10, version 1607 and later.
md c:\wim
<settings pass="specialize">
<component name="Microsoft-Windows-Embedded-EmbeddedLogon" processorArchitecture="x86"
publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BrandingNeutral>17</BrandingNeutral>
<AnimationDisabled>1</AnimationDisabled>
<NoLockScreen>1</NoLockScreen>
<UIVerbosityLevel>1</UIVerbosityLevel>
<HideAutoLogonUI>1</HideAutoLogonUI>
</component>
</settings>
In this section
Complementary features to Custom Logon
Troubleshooting Custom Logon
Related topics
Unbranded Boot
Shell Launcher
Complementary features to Custom Logon
1/18/2019 • 2 minutes to read
You may want to use or change some of the following features in conjunction with Custom Logon to complete
the user experience.
Power button
We recommend that you remove the power button from the Welcome screen and block the physical power
button so that a user cannot turn off the device when using assigned access or Shell Launcher.
Go to Power Options > Choose what the power button does , change the setting to Do nothing , and then
Save changes .
Welcome screen
To remove buttons from the Welcome screen
To remove buttons from the Welcome screen, set the appropriate value for BrandingNeutral in the
following registry key:
HKLM\Software\Microsoft\Windows Embedded\EmbeddedLogon
The following table shows the possible values. To disable multiple Welcome screen UI elements, combine these
values using bitwise exclusive-or logic.
A C T IO N REGIST RY VA L UE
Disable the Blocked Shutdown Resolver (BSDR) screen so static const DWORD
that restarting or shutting down the system causes the EMBEDDED_DISABLE_BSDR= 0x20
OS to immediately force close any open applications that
are blocking system shut down. No UI is displayed, and
users are not given a chance to cancel the shutdown
process
In the following image of the [ctrl + alt + del] screen, you can see the Switch user button highlighted by a
light green outline, the Language button highlighted by an orange outline, the Ease of Access button highlighted
by a red outline, and the power button highlighted by a yellow outline. If you disable these buttons, they are
hidden from the UI.
You can remove the Wireless UI option from the Welcome screen by using Group Policy.
Remove Wireless UI from the Welcome screen
To remove Wireless UI from the Welcome screen
1. From a command prompt, run gpedit.msc to open the Local Group Policy Editor.
2. In the Local Group Policy Editor, under Computer Configuration , expand Administrative Templates ,
expand System , and then tap or click Logon .
3. Double-tap or click Do not display network selection UI .
Related topics
Custom Logon
Troubleshooting Custom Logon
Troubleshooting Custom Logon
1/18/2019 • 2 minutes to read
This section highlights some common issues that you may encounter when using Custom Logon.
uwfmgr.exe restart
2. In Contol Panel , search for Power Options , and then click the Power Options heading.
3. Under the Power Options heading, click Require a password on wakeup .
4. On the Define power buttons and turn on password protection page, under Password
protection on wakeup , select Don’t require a password .
5. If you disabled write filters, perform the following steps to enable them again:
a. At an administrator command prompt, type the following command:
uwfmgr.exe restart
WARNING
When the BSDR screen is disabled, restarting or shutting down the device causes the OS to immediately force close any
open applications that are blocking system shutdown. No UI is displayed, and users are not given a chance to cancel the
shutdown process. This can result in lost data if any open applications have unsaved data.
The device displays a black screen when the device is suspended and
then resumed
HideAutoLogonUI and ForceAutoLogon have known issues when used together. To avoid a black screen, we
recommend you disable the password protection on wakeup.
To disable password protection on wakeup
1. In Control Panel , click Power Options .
2. In the Power Options item, click Require a password on wakeup .
3. On the Define power buttons and turn on password protection page, under Password
protection on wakeup , select Don’t require a password .
The device displays a black screen when a password expiration screen is displayed
HideAutoLogonUI has a known issue. To avoid a black screen, we recommend you set the password to never
expire.
To set a password to never expire on an individual user account
1. On your device, open a command prompt with administrator privileges.
2. Type the following, replacing <accountname> with the name of the account you want to remove the
password expiration from.
Related topics
Custom Logon
Complementary features to Custom Logon
Keyboard Filter
3/5/2021 • 8 minutes to read
You can use Keyboard Filter to suppress undesirable key presses or key combinations. Normally, a customer can
use certain Microsoft Windows key combinations like Ctrl+Alt+Delete or Ctrl+Shift+Tab to alter the operation
of a device by locking the screen or using Task Manager to close a running application. This may not be
desirable if your device is intended for a dedicated purpose.
The Keyboard Filter feature works with physical keyboards, the Windows on-screen keyboard, and the touch
keyboard. Keyboard Filter also detects dynamic layout changes, such as switching from one language set to
another, and continues to suppress keys correctly, even if the location of suppressed keys has changed on the
keyboard layout.
NOTE
Keyboard filter is not supported in a remote desktop session.
Requirements
Windows 10 Enterprise or Windows 10 Education.
Terminology
Turn on, enable: To make the setting available to the device and optionally apply the settings to the
device. Generally turn on is used in the user interface or control panel, whereas enable is used for
command line.
Configure: To customize the setting or sub-settings.
Embedded Keyboard Filter : This feature is called Embedded Keyboard Filter in Windows 10, version
1511.
Keyboard Filter : This feature is called Keyboard Filter in Windows 10, version 1607 and later.
NOTE
In the Select Windows Edition window, choose Common to all Windows desktop editions .
2. On the Available customizations page, select Runtime settings > SMISettings , and then set the
desired values for the keyboard filter settings.
3. Once you have finished configuring the settings and building the provisioning package, you can apply the
package to the image deployment time or runtime. See Apply a provisioning package for more
information. Note that the process for applying the provisioning packageg to a Windows 10 Enterprise
image is the same.
This example uses a Windows image called install.wim, but you can use the same procedure to apply a
provisioning package. For more information on DISM, see What Is Deployment Image Servicing and
Management.
Turn on and configure Keyboard Filter by using DISM
1. Open a command prompt with administrator privileges.
2. Copy install.wim to a temporary folder on hard drive (in the following steps, we'll assume it's called
C:\wim).
3. Create a new directory.
md c:\wim
Keyboard breakout
You may need to sign in to a locked down device with a different account in order to service or configure the
device. You can configure a breakout key to break out of a locked down account by specifying a key scan code.
When you press Ctrl+Alt+Delete, Windows presents the Welcome screen so that you can sign in to a different
account.
The breakout key is set to the scan code for the left Windows logo key by default. You can use the
WEKF_SettingsWMI class to change the breakout key scan code. If you change the breakout key scan code, you
must restart the device before the change takes effect.
You can configure Keyboard Filter to block keys or key combinations. A key combination consists of one or more
modifier keys, separated by a plus sign (+), and either a key name or a key scan code. In addition to the keys
listed in the tables below, you can also use the predefined key combinations names as custom key combinations,
but we recommend using the predefined key settings when enabling or disabling predefined key combinations.
The key names are grouped as follows:
Modifier keys
System keys
Cursor and math keys
State keys
OEM keys
Function keys
Modifier keys
You can use the modifier keys listed in the following table when you configure keyboard filter. Multiple modifiers
must be separated by a plus sign (+). You can also configure Keyboard Filter to block any modifier key even if it’s
not part of a key combination..
System keys
K EY N A M E VIRT UA L K EY DESC RIP T IO N
##
State keys
OEM keys
K EY N A M E VIRT UA L K EY DESC RIP T IO N
Function keys
K EY N A M E VIRT UA L K EY DESC RIP T IO N
Related topics
Keyboard filter
Predefined key combinations
3/5/2021 • 5 minutes to read
This topic lists a set of key combinations that are predefined by a keyboard filter. You can list the value of the
WEKF_PredefinedKey.Id to get a complete list of key combinations defined by a keyboard filter.
You can use the values in the WEKF_PredefinedKey.Id column to configure the Windows Management
Instrumentation (WMI) class WEKF_PredefinedKey.
Accessibility keys
The following table contains predefined key combinations for accessibility:
Left Alt + Left Shift + Print Screen LShift+L Alt+PrintScrn Open High Contrast.
Left Alt + Left Shift + Num Lock LShift+L Alt+NumLock Open Mouse Keys.
Application keys
The following table contains predefined key combinations for controlling application state:
Shell keys
The following table contains predefined key combinations for general UI control:
Alt + Tab Alt+Tab Switch task. Also blocks the Alt + Shift
+ Tab key combination.
Windows logo key + Tab Win+Tab Cycle through Microsoft Store apps.
Also blocks the Windows logo key +
Ctrl + Tab and Windows logo key +
Shift + Tab key combinations.
Windows logo key + T Win+T Set focus on taskbar and cycle through
programs.
Windows logo key + Down Arrow Win+Down Minimize the active window.
Windows logo key + Left Arrow Win+Left Snap the active window to the left half
of screen.
Windows logo key + Right Arrow Win+Right Snap the active window to the right
half of screen.
Windows logo key + Shift + Up Arrow Win+Shift+Up Maximize the active window vertically.
Windows logo key + Shift + Down Win+Shift+Down Minimize the active window.
Arrow
K EY C O M B IN AT IO N W EK F _P REDEF IN EDK EY. ID B LO C K ED B EH AVIO R
Windows logo key + Shift + Left Win+Shift+Left Move the active window to left
Arrow monitor.
Windows logo key + Shift + Right Win+Shift+Right Move the active window to right
Arrow monitor.
Windows logo key + Page Up Win+PageUp Move a Microsoft Store app to the left
monitor.
Windows logo key + Page Down Win+PageDown Move a Microsoft Store app to right
monitor.
Windows logo key + Period Win+. Snap the current screen to the left or
right gutter. Also blocks the Windows
logo key + Shift + Period key
combination.
Modifier keys
The following table contains predefined key combinations for modifier keys (such as Shift and Ctrl):
K EY C O M B IN AT IO N W EK F _P REDEF IN EDK EY. ID B LO C K ED K EY
Security keys
The following table contains predefined key combinations for OS security:
Browser keys
The following table contains predefined key combinations for controlling the browser:
Media keys
The following table contains predefined key combinations for controlling media playback:
Related topics
Keyboard filter
Keyboard Filter WMI provider reference
1/18/2019 • 2 minutes to read
Describes the Windows Management Instrumentation (WMI) provider classes that you use to configure
Keyboard Filter during run time.
WEKF_CustomKey Blocks or unblocks custom defined key combinations.
WEKF_PredefinedKey Blocks or unblocks predefined key combinations.
WEKF_Scancode Blocks or unblocks key combinations by using keyboard scan codes.
WEKF_Settings Enables or disables settings for Keyboard Filter.
Related topics
Keyboard filter
WEKF_CustomKey
1/18/2019 • 2 minutes to read
Syntax
class WEKF_CustomKey {
[Static] uint32 Add(
[In] string CustomKey
);
[Static] uint32 Remove(
[In] string CustomKey
);
Members
The following tables list any methods and properties that belong to this class.
Methods
M ET H O DS DESC RIP T IO N
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
D ESCR IP TI
VA L U E ON
true Indica
tes
that
the
key is
block
ed.
false Indica
tes
that
the
key is
not
block
ed.
Remarks
You can specify key combinations by including the modifier keys in the name. The most common modifier
names are “Ctrl”, “Shift”, “Alt”, and “Win”. You cannot block a combination of non-modifier keys. For example, you
can block a key combination of “Ctrl+Shift+F”, but you cannot block a key combination of “A+D”.
When you block a shift-modified key, you must enter the key as “Shift” + the unmodified key. For example, to
block the % key on an English keyboard layout, you must specify the key as “Shift+5”. Attempting to block “%”,
results in Keyboard Filter blocking “5” instead.
When you specify the key combination to block, you must use the English names for the keys. For a list of the
key names you can specify, see Keyboard Filter key names.
Example
The following code demonstrates how to add or enable a custom key combination that Keyboard Filter will
block by using the Windows Management Instrumentation (WMI) providers for Keyboard Filter. This example
modifies the properties directly and does not call any of the methods defined in WEKF_CustomKey .
<#
.Synopsis
This script shows how to use the WMI provider to enable and add
Keyboard Filter rules through Windows PowerShell on the local computer.
.Parameter ComputerName
Optional parameter to specify a remote machine that this script should
manage. If not specified, the script will execute all WMI operations
locally.
#>
param (
[String] $ComputerName
)
$CommonParams = @{"namespace"="root\standardcimv2\embedded"}
$CommonParams += $PSBoundParameters
function Enable-Custom-Key($Id) {
<#
.Synopsis
Toggle on a Custom Key Keyboard Filter Rule
.Description
Use Get-WMIObject to enumerate all WEKF_CustomKey instances,
filter against key value "Id", and set that instance's "Enabled"
property to 1/true.
In the case that the Custom instance does not exist, add a new
instance of WEKF_CustomKey using Set-WMIInstance.
.Example
Enable-Custom-Key "Ctrl+V"
if ($custom) {
# Rule exists. Just enable it.
$custom.Enabled = 1;
$custom.Put() | Out-Null;
"Enabled Custom Filter $Id.";
} else {
Set-WMIInstance `
-class WEKF_CustomKey `
-argument @{Id="$Id"} `
@CommonParams | Out-Null
Enable-Custom-Key "Ctrl+V"
Enable-Custom-Key "Numpad0"
Enable-Custom-Key "Shift+Numpad1"
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Keyboard Filter WMI provider reference
Keyboard Filter key names
WEKF_CustomKey.Add
3/5/2021 • 2 minutes to read
Creates a new custom key combination and enables Keyboard Filter to block the new key combination.
Syntax
[Static] uint32 Add(
[In] string CustomKey
);
Parameters
CustomKey
[in] The custom key combination to add. For a list of valid key names, see Keyboard Filter key names.
Return Value
Returns an HRESULT value that indicates a WMI Non-Error Constant or a WMI Error Constant.
Remarks
WEKF_CustomKey.Add creates a new WEKF_CustomKey object and sets the Enabled property of the new
object to true , and the Id property to CustomKey.
If a WEKF_CustomKey object already exists with the Id property equal to CustomKey, then
WEKF_CustomKey.Add returns an error code and does not create a new object or modify any properties of
the existing object. If the existing WEKF_CustomKey object has the Enabled property set to false , Keyboard
Filter does not block the custom key combination.
Example
The following code demonstrates how to add or enable a custom key that Keyboard Filter will block by using the
Windows Management Instrumentation (WMI) providers for Keyboard Filter.
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
# Create a handle to the class instance so we can call the static methods
$classCustomKey = [wmiclass]"\\$COMPUTER\${NAMESPACE}:WEKF_CustomKey"
# Create a function to add or enable a key combination for Keyboard Filter to block
function Enable-Custom-Key($KeyId) {
if ($objCustomKey) {
} else {
# Create a new custom key object by calling the static Add method
$retval = $classCustomKey.Add($KeyId);
Enable-Custom-Key "Ctrl+v"
Enable-Custom-Key "Ctrl+v"
Enable-Custom-Key "Shift+4"
Enable-Custom-Key "Ctrl+Alt+w"
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Removes a custom key combination, causing Keyboard Filter to stop blocking the removed key combination.
Syntax
[Static] uint32 Remove(
[In] string CustomKey
);
Parameters
CustomKey [in] The custom key combination to remove.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
WEKF_CustomKey.Remove removes an existing WEKF_CustomKey object. If the object does not exist,
WEKF_CustomKey.Remove returns an error with the value 0x8007007B.
Because this method is static, you cannot call it on an object instance, but must instead call it at the class level.
Example
The following code demonstrates how to remove a custom key from Keyboard Filter so it is no longer blocked
by using the Windows Management Instrumentation (WMI) providers for Keyboard Filter.
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
# Create a handle to the class instance so we can call the static methods
$classCustomKey = [wmiclass]"\\$COMPUTER\${NAMESPACE}:WEKF_CustomKey"
# Example of removing all custom keys that have the Enabled property set to false
$objDisabledCustomKeys = Get-WmiObject -Namespace $NAMESPACE -Class WEKF_CustomKey;
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
WEKF_CustomKey
Keyboard Filter
WEKF_PredefinedKey
1/18/2019 • 2 minutes to read
Syntax
class WEKF_PredefinedKey {
[Static] uint32 Enable (
[In] string PredefinedKey
);
[Static] uint32 Disable (
[In] string PredefinedKey
);
Members
The following tables list any constructors, methods, fields, and properties that belong to this class.
Methods
M ET H O DS DESC RIP T IO N
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
Remarks
All accounts have read access to the WEKF_PRedefinedKey class, but only administrator accounts can modify
the class.
For a list of predefined key combinations for Keyboard Filter, see Predefined key combinations.
Example
The following sample Windows PowerShell script blocks the Ctrl+Alt+Delete and the Ctrl+Esc key combinations
when the Keyboard Filter service is running.
<#
.Synopsis
This script shows how to use the built in WMI providers to enable and add
Keyboard Filter rules through Windows PowerShell on the local computer.
.Parameter ComputerName
Optional parameter to specify a remote machine that this script should
manage. If not specified, the script will execute all WMI operations
locally.
#>
param (
[String] $ComputerName
)
$CommonParams = @{"namespace"="root\standardcimv2\embedded"}
$CommonParams += $PSBoundParameters
function Enable-Predefined-Key($Id) {
<#
.Synposis
Toggle on a Predefined Key Keyboard Filter Rule
.Description
Use Get-WMIObject to enumerate all WEKF_PredefinedKey instances,
filter against key value "Id", and set that instance's "Enabled"
property to 1/true.
.Example
Enable-Predefined-Key "Ctrl+Alt+Delete"
if ($predefined) {
$predefined.Enabled = 1;
$predefined.Put() | Out-Null;
Write-Host Enabled $Id
} else {
Write-Error $Id is not a valid predefined key
}
}
Enable-Predefined-Key "Ctrl+Alt+Delete"
Enable-Predefined-Key "Ctrl+Esc"
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Keyboard Filter WMI provider reference
Keyboard Filter
WEKF_PredefinedKey.Disable
3/5/2021 • 2 minutes to read
Syntax
[Static] uint32 Disable(
[In] string PredefinedKey
);
Parameters
PredefinedKey [in] The predefined key combination to unblock. For a list of predefined keys, see Predefined key
combinations.
Return Value
Returns an HRESULT value that indicates WMI Non-error constant or a WMI error constant.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
WEKF_PredefinedKey
Keyboard Filter
WEKF_PredefinedKey.Enable
3/5/2021 • 2 minutes to read
Syntax
[Static] uint32 Enable(
[In] string PredefinedKey
);
Parameters
PredefinedKey The predefined key combination to block. For a list of predefined keys, see Predefined key
combinations.
Return Value
Returns an HRESULT value that indicates WMI non-error constant or a WMI error constant.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
WEKF_PredefinedKey
Keyboard Filter
WEKF_Scancode
1/18/2019 • 2 minutes to read
Blocks or unblocks key combinations by using the keyboard scan code, which is an integer number that is
generated whenever a key is pressed or released.
Syntax
class WEKF_Scancode {
[Static] uint32 Add(
[In] string Modifiers,
[In] uint16 scancode
);
[Static] uint32 Remove(
[In] string Modifiers,
[In] uint16 Scancode
);
Members
The following tables list any constructors, methods, fields, and properties that belong to this class.
Methods
M ET H O DS DESC RIP T IO N
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
D ESCR IP TI
VA L U E ON
true Indica
tes
that
the
scan
code
is
block
ed.
false Indica
tes
that
the
scan
code
is not
block
ed.
Remarks
Scan codes are generated by the keyboard whenever a key is pressed. The same physical key will always
generate the same scan code, regardless of which keyboard layout is currently being used by the system.
You can specify key combinations by including the modifier keys in the Modifiers parameter of the Add method
or by modifying the Modifiers property. The most common modifier names are “Ctrl”, “Shift”, “Alt”, and “Win”.
Example
The following code demonstrates how to add or enable a keyboard scan code that Keyboard Filter will block by
using the Windows Management Instrumentation (WMI) providers for Keyboard Filter. This example modifies
the properties directly, and does not call any of the methods defined in WEKF_Scancode .
<#
.Synopsis
This script shows how to use the WMI provider to enable and add
Keyboard Filter rules through Windows Powershell on the local computer.
.Parameter ComputerName
Optional parameter to specify a remote machine that this script should
manage. If not specified, the script will execute all WMI operations
locally.
#>
param (
[String] $ComputerName
)
$CommonParams = @{"namespace"="root\standardcimv2\embedded"}
$CommonParams += $PSBoundParameters
In the case that the Scancode instance does not exist, add a new
instance of WEKF_Scancode using Set-WMIInstance.
.Example
Enable-Predefined-Key "Ctrl+V"
$scancode =
Get-WMIObject -class WEKF_Scancode @CommonParams |
where {
($_.Modifiers -eq $Modifiers) -and ($_.Scancode -eq $Code)
}
if($scancode) {
$scancode.Enabled = 1
$scancode.Put() | Out-Null
"Enabled Custom Scancode {0}+{1:X4}" -f $Modifiers, $Code
} else {
Set-WMIInstance `
-class WEKF_Scancode `
-argument @{Modifiers="$Modifiers"; Scancode=$Code} `
@CommonParams | Out-Null
Enable-Scancode "Ctrl" 37
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Pro No
Related topics
Keyboard Filter WMI provider reference
Keyboard Filter
WEKF_Scancode.Add
3/5/2021 • 2 minutes to read
This method adds a new custom scan code combination and enables Keyboard Filter to block the new
combination.
Syntax
[Static] uint32 Add(
[In] string Modifiers,
[In] uint16 Scancode
);
Parameters
Modifers The modifier keys that are part of the key combination to block.
Scancode The hardware scan code of the key to block.
Return Value
Returns an HRESULT value that indicates WMI non-error constant or a WMI error constant.
Remarks
WEKF_Scancode.Add creates a new WEKF_Scancode object and sets the Enabled property of the new
object to true .
If a WEKF_Scancode object already exists with same Modifiers and Scancode properties, then
WEKF_Scancode.Add returns an error code and does not create a new object or modify any properties of the
existing object. If the existing WEKF_Scancode object has the Enabled property set to false , Keyboard Filter
does not block the scan code.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
WEKF_Scancode
Keyboard Filter
WEKF_Scancode.Remove
3/5/2021 • 2 minutes to read
This method removes a custom scan code key combination, causing Keyboard Filter to stop blocking the
removed combination.
Syntax
[Static] uint32 Remove(
[In] string Modifiers,
[In] uint16 Scancode
);
Parameters
Modifiers The modifier keys of the combination to remove.
Scancode The scan code of the combination to remove.
Return Value
Returns an HRESULT value that indicates WMI non-error constant or a WMI error constant.
Remarks
WEKF_Scancode.Remove removes an existing WEKF_Scancode object. If the object does not exist,
WEKF_Scancode.Remove returns an error with the value 0x8007007B.
Because this method is static, you cannot call it on an object instance, but must instead call it at the class level.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
WEKF_Scancode
Keyboard Filter
WEKF_Settings
1/18/2019 • 3 minutes to read
Syntax
class WEKF_Settings {
[Key] string Name;
[Read, Write] string Value;
};
Members
The following tables list any methods and properties that belong to this class.
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
Remarks
You must be signed in to an administrator account to make any changes to this class.
Each WEKF_Settings object represents a single Keyboard Filter setting. You can enumerate across all
WEKF_Settings objects to see the value of all Keyboard Filter settings.
The following table lists all settings available for Keyboard Filter.
BreakoutKeyScanCode This setting specifies the scan code of the key that
enables a user to break out of an account that is locked
down with Keyboard Filter. A user can press
CTRL+ALT+DELETE to switch to the Welcome screen.
Set to the scan code for the left Windows logo key by
default.
One instance of the WEKF_Settings class exists for each valid setting.
Changes to the DisableKeyboardFilterForAdministrator setting are applied when an administrator account
signs in, and applies to all applications run during the user session. If a user without an administrator account
runs an application as an administrator, Keyboard Filter is still enabled, regardless of the
DisableKeyboardFilterForAdministrator setting.
Changes to the BreakoutKeyScanCode setting do not take effect until you restart the device.
If the BreakoutKeyScanCode is set to the scan code for either the left Windows logo key or the right Windows
logo key, both Windows Logo keys will work as the breakout key.
The BreakoutKeyScanCode setting only applies to accounts where Keyboard Filter is active. If the scan code is
set to a value that does not map to any key, such as 0 (zero), then you must use another method to access the
Welcome screen if you need to service the device, such as remotely connecting, or restarting the device if
automatic sign-in is not enabled.
Impor tant On some devices, if the breakout key is pressed too rapidly, the key presses may not register. We
recommend that you include a slight pause between each breakout key press.
WARNING
When setting the BreakoutKeyScanCode , be sure to use the scan code of the key, and not the virtual key value.
Example
The following Windows PowerShell script demonstrates how to use this class to modify the breakout mode key
for Keyboard Filter. This example sets the BreakoutKeyScanCode setting to the scan code for the Home key on
a standard keyboard.
#---Define variables---
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
$HomeKeyScanCode = 71
$BreakoutMode.value = $HomeKeyScanCode
# Push the change into the WMI configuration. You must restart your device before this change takes effect.
$BreakoutMode.put()
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Keyboard Filter WMI provider reference
Keyboard Filter
Windows PowerShell script samples for Keyboard
Filter
1/18/2019 • 2 minutes to read
The list below describes sample Windows PowerShell scripts that demonstrate how to use the Windows
Management Instrumentation (WMI) providers for Keyboard Filter.
Add blocked key combinations Demonstrates how to block key combinations for Keyboard Filter.
Disable all blocked key combinations Demonstrates how to disable all blocked key combinations for Keyboard
Filter.
List all configured key combinations Demonstrates how to list all defined key combination configurations for
Keyboard Filter.
Modify global settings Demonstrates how to modify global settings for Keyboard Filter.
Remove key combination configurations Demonstrates how to remove a custom defined key combination
configuration for Keyboard Filter.
Related topics
Keyboard Filter WMI provider reference
Keyboard Filter
Add blocked key combinations
1/18/2019 • 2 minutes to read
The following sample Windows PowerShell script uses the Windows Management Instrumentation (WMI)
providers for Keyboard Filter to create three functions to configure Keyboard Filter so that Keyboard Filter
blocks key combinations. It demonstrates several ways to use each function.
The first function, Enable-Predefine-Key , blocks key combinations that are predefined for Keyboard Filter.
The second function, Enable-Custom-Key , blocks custom key combinations by using the English key names.
The third function, Enable-Scancode , blocks custom key combinations by using the keyboard scan code for the
key.
Enable-rules.ps1
#
# Copyright (C) Microsoft. All rights reserved.
#
<#
.Synopsis
This script shows how to use the built in WMI providers to enable and add
keyboard filter rules through Windows PowerShell on the local computer.
.Parameter ComputerName
Optional parameter to specify a remote machine that this script should
manage. If not specified, the script will execute all WMI operations
locally.
#>
param (
[String] $ComputerName
)
$CommonParams = @{"namespace"="root\standardcimv2\embedded"}
$CommonParams += $PSBoundParameters
function Enable-Predefined-Key($Id) {
<#
.Synopsis
Toggle on a Predefined Key keyboard filter Rule
.Description
Use Get-WMIObject to enumerate all WEKF_PredefinedKey instances,
filter against key value "Id", and set that instance's "Enabled"
property to 1/true.
.Example
Enable-Predefined-Key "Ctrl+Alt+Del"
Enable CAD filtering
#>
if ($predefined) {
$predefined.Enabled = 1;
$predefined.Put() | Out-Null;
Write-Host Enabled $Id
} else {
Write-Error "$Id is not a valid predefined key"
}
}
function Enable-Custom-Key($Id) {
<#
.Synopsis
Toggle on a Custom Key keyboard filter Rule
.Description
Use Get-WMIObject to enumerate all WEKF_CustomKey instances,
filter against key value "Id", and set that instance's "Enabled"
property to 1/true.
In the case that the Custom instance does not exist, add a new
instance of WEKF_CustomKey using Set-WMIInstance.
.Example
Enable-Custom-Key "Ctrl+V"
Enable filtering of the Ctrl + V sequence.
#>
if ($custom) {
# Rule exists. Just enable it.
$custom.Enabled = 1;
$custom.Put() | Out-Null;
"Enabled Custom Filter $Id.";
} else {
Set-WMIInstance `
-class WEKF_CustomKey `
-argument @{Id="$Id"} `
@CommonParams | Out-Null
"Added Custom Filter $Id.";
}
}
In the case that the Scancode instance does not exist, add a new
instance of WEKF_Scancode using Set-WMIInstance.
.Example
Enable-Scancode "Ctrl" 37
Enable filtering of the Ctrl + keyboard scancode 37 (base-10)
sequence.
#>
$scancode =
Get-WMIObject -class WEKF_Scancode @CommonParams |
where {
($_.Modifiers -eq $Modifiers) -and ($_.Scancode -eq $Code)
}
if($scancode) {
$scancode.Enabled = 1
$scancode.Put() | Out-Null
"Enabled Custom Scancode {0}+{1:X4}" -f $Modifiers, $Code
} else {
Set-WMIInstance `
Set-WMIInstance `
-class WEKF_Scancode `
-argument @{Modifiers="$Modifiers"; Scancode=$Code} `
@CommonParams | Out-Null
Related topics
Windows PowerShell script samples for keyboard filter
Keyboard filter WMI provider reference
Keyboard filter
Disable all blocked key combinations
1/18/2019 • 2 minutes to read
The following sample Windows PowerShell script uses the WMI providers to disable all blocked key
combinations for Keyboard Filter by using the Windows Management Instrumentation (WMI) providers for
Keyboard Filter. The key combination configurations are not removed, but Keyboard Filter stops blocking any
keys.
Disable-all-rules.ps1
#
# Copyright (C) Microsoft. All rights reserved.
#
<#
.Synopsis
This Windows PowerShell script shows how to enumerate all existing keyboard filter
rules and how to disable them by setting the Enabled property directly.
.Description
For each instance of WEKF_PredefinedKey, WEKF_CustomKey, and WEKF_Scancode,
set the Enabled property to false/0 to disable the filter rule, thus
allowing all key sequences through the filter.
.Parameter ComputerName
Optional parameter to specify the remote computer that this script should
manage. If not specified, the script will execute all WMI operations
locally.
#>
param(
[String]$ComputerName
)
$CommonParams = @{"namespace"="root\standardcimv2\embedded"}
$CommonParams += $PSBoundParameters
Related topics
Windows PowerShell script samples for keyboard filter
Keyboard filter WMI provider reference
Keyboard filter
List all configured key combinations
1/18/2019 • 2 minutes to read
The following sample Windows PowerShell script uses the Windows Management Instrumentation (WMI)
providers for Keyboard Filter to displays all key combination configurations for Keyboard Filter.
List-rules.ps1
#
# Copyright (C) Microsoft. All rights reserved.
#
<#
.Synopsis
Enumerate all active keyboard filter rules on the system.
.Description
For each instance of WEKF_PredefinedKey, WEKF_CustomKey, and WEKF_Scancode,
get the Enabled property. If Enabled, then output a short description
of the rule.
.Parameter ComputerName
Optional parameter to specify the remote machine that this script should
manage. If not specified, the script will execute all WMI operations
locally.
#>
param (
[String] $ComputerName
)
$CommonParams = @{"namespace"="root\standardcimv2\embedded"}
$CommonParams += $PSBoundParameters
Related topics
Windows PowerShell script samples for keyboard filter
Keyboard filter WMI provider reference
Keyboard filter
Modify global settings
1/18/2019 • 2 minutes to read
The following sample Windows PowerShell scripts use the Windows Management Instrumentation (WMI)
providers to modify global settings for Keyboard Filter.
The function Get-Setting retrieves the value of a global setting for Keyboard Filter.
In the first script, the function Set-DisableKeyboardFilterForAdministrators modifies the value of the
DisableKeyboardFilterForAdministrators setting.
In the second script, the function Set-ForceOffAccessibility modifies the value of the ForceOffAccessibility
setting.
Set-DisableKeyboardFilterForAdministrators.ps1
#
# Copyright (C) Microsoft. All rights reserved.
#
<#
.Synopsis
This script shows how to enumerate WEKF_Settings to find global settings
that can be set on the keyboard filter. In this specific script, the
global setting to be set is "DisableKeyboardFilterForAdministrators".
.Parameter ComputerName
Optional parameter to specify a remote computer that this script should
manage. If not specified, the script will execute all WMI operations
locally.
.Parameter On
Switch if present that sets "DisableKeyboardFilterForAdministrators" to
true. If not present, sets the setting to false.
#>
param (
[Switch] $On = $False,
[String] $ComputerName
)
$CommonParams = @{"namespace"="root\standardcimv2\embedded"};
if ($PSBoundParameters.ContainsKey("ComputerName")) {
$CommonParams += @{"ComputerName" = $ComputerName};
}
return $Entry
}
$Setting = Get-Setting("DisableKeyboardFilterForAdministrators")
if ($Setting) {
if ($Value) {
$Setting.Value = "true"
} else {
$Setting.Value = "false"
}
$Setting.Put() | Out-Null;
} else {
Write-Error "Unable to find DisableKeyboardFilterForAdministrators setting";
}
}
Set-DisableKeyboardFilterForAdministrators $On
Set-ForceOffAccessibility.ps1
#
# Copyright (C) Microsoft. All rights reserved.
#
<#
.Synopsis
This script shows how to enumerate WEKF_Settings to find global settings
that can be set on the keyboard filter. In this specific script, the
global setting to be set is "ForceOffAccessibility".
.Parameter ComputerName
Optional parameter to specify a remote computer that this script should
manage. If not specified, the script will execute all WMI operations
locally.
.Parameter Enabled
Switch if present that sets "ForceOffAccessibility" to true. If not
present, sets the setting to false.
#>
param (
[Switch] $Enabled = $False,
[String] $ComputerName
)
$CommonParams = @{"namespace"="root\standardcimv2\embedded"};
if ($PSBoundParameters.ContainsKey("ComputerName")) {
$CommonParams += @{"ComputerName" = $ComputerName};
}
return $Entry
}
$Setting = Get-Setting("ForceOffAccessibility")
if ($Setting) {
if ($Value) {
$Setting.Value = "true"
} else {
$Setting.Value = "false"
}
$Setting.Put() | Out-Null;
} else {
Write-Error "Unable to find ForceOffAccessibility setting";
}
}
Set-ForceOffAccessibility $Enabled
Related topics
Windows PowerShell script samples for keyboard filter
WEKF_Settings
Keyboard filter
Remove key combination configurations
1/18/2019 • 2 minutes to read
The following sample Windows PowerShell script uses the Windows Management Instrumentation (WMI)
providers for Keyboard Filter to create two functions to remove custom-defined key combination configurations
from Keyboard Filter. It demonstrates several ways to use each function.
The first function, Remove-Custom-Key , removes custom key combination configurations.
The second function, Remove-Scancode , removes custom scan code configurations.
You cannot remove the predefined key combination configurations for Keyboard Filter, but you can disable
them.
Remove-rules.ps1
#
# Copyright (C) Microsoft. All rights reserved.
#
<#
.Synopsis
This script shows how to use the build in WMI providers to remove keyboard filter rules. Rules of type
WEKF_PredefinedKey cannot be removed.
.Parameter ComputerName
Optional parameter to specify the remote computer that this script should
manage. If not specified, the script will execute all WMI operations
locally.
#>
param(
[string] $ComputerName
)
$CommonParams = @{"namespace"="root\standardcimv2\embedded"}
$CommonParams += $PSBoundParameters
function Remove-Custom-Key($Id) {
<#
.Synopsis
Remove an instance of WEKF_CustomKey
.Description
Enumerate all instances of WEKF_CustomKey. When an instance has an
Id that matches $Id, delete it.
.Example
Remove-Custom-Key "Ctrl+V"
if ($customInstance) {
$customInstance.Delete();
"Removed Custom Filter $Id.";
} else {
"Custom Filter $Id does not exist.";
}
}
function Remove-Scancode($Modifiers, [int]$Code) {
<#
.Synopsis
Remove and instance of WEKF_Scancode
.Description
Enumerate all instances of WEKF_Scancode. When an instance has a
matching modifiers and code, delete it.
.Example
Remove-Scancode "Ctrl" 37
if ($scancodeInstance) {
$scancodeInstance.Delete();
"Removed Scancode $Modifiers+$Code.";
} else {
"Scancode $Modifiers+$Code does not exist.";
}
}
Related topics
Windows PowerShell script samples for keyboard filter
Keyboard filter WMI provider reference
Keyboard filter
Shell Launcher
3/5/2021 • 11 minutes to read
You can use Shell Launcher to replace the default Windows 10 shell with a custom shell. You can use almost any
application or executable as your custom shell, such as a command window or a custom dedicated application.
You can also configure Shell Launcher to launch different shell applications for different users or user groups.
There are a few exceptions to the applications and executables you can use as a custom shell:
You cannot use the following executable as a custom shell: C:\\Windows\\System32\\Eshell.exe . Using
Eshell.exe as the default shell will result in a blank screen after user signs in.
You cannot use a Universal Windows app as a custom shell.
You cannot use a custom shell to launch Universal Windows apps, for example, the Settings app.
You cannot use an application that launches a different process and exits as a custom shell. For example, you
cannot specify write.exe in Shell Launcher. Shell Launcher launches a custom shell and monitors the process
to identify when the custom shell exits. Write.exe creates a 32-bit wordpad.exe process and exits. Because
Shell Launcher is not aware of the newly created wordpad.exe process, Shell Launcher will take action based
on the exit code of Write.exe , and restart the custom shell.
You cannot prevent the system from shutting down. For Shell Launcher V1 and V2, you cannot block the
session ending by returning FALSE upon receiving the WM_QUERYENDSESSION message in a graphical
application or returning FALSE in the handler routine that is added through the SetConsoleCtrlHandler
function in a console application.
NOTE
You cannot configure both Shell Launcher and assigned access on the same system.
Use Shell Launcher V2 , you can specify a Universal Windows app as a custom shell. Check Use Shell Launcher to create
a Windows 10 kiosk for the differences between Shell Launcher v1 and Shell Launcher V2.
Shell Launcher processes the Run and RunOnce registry keys before starting the custom shell, so your custom
shell doesn’t need to handle the automatic startup of other applications and services.
Shell Launcher also handles the behavior of the system when your custom shell exits. You can configure the
shell exit behavior if the default behavior does not meet your needs.
Requirements
Windows 10 Enterprise or Windows 10 Education.
Terminology
Turn on, enable: To make the setting available to the device and optionally apply the settings to the device.
Configure: To customize the setting or sub-settings.
Embedded Shell Launcher : This feature is called Embedded Shell Launcher in Windows 10, version 1511.
Custom Shell Launcher : This feature is called Shell Launcher in Windows 10, version 1607 and later.
NOTE
Turning on Shell Launcher does not require a device restart.
md c:\wim
A C T IO N DESC RIP T IO N
3 Do nothing.
IMPORTANT
Make sure that your shell application does not automatically exit and is not automatically closed by any features such as
Dialog Filter, as this can lead to an infinite cycle of exiting and restarting, unless the return code action is set to do
nothing.
EXIT C O DE A C T IO N
1 3 (do nothing)
EXIT C O DE A C T IO N
}
"@
return $type[0]::IsShellLauncherLicenseEnabled()
}
[bool]$result = $false
$result = Check-ShellLauncherLicenseEnabled
"`nShell Launcher license enabled is set to " + $result
if (-not($result))
{
"`nThis device doesn't have required license to use Shell Launcher"
exit
}
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
# Create a handle to the class instance so we can call the static methods.
try {
$ShellLauncherClass = [wmiclass]"\\$COMPUTER\${NAMESPACE}:WESL_UserSetting"
} catch [Exception] {
write-host $_.Exception.Message;
write-host "Make sure Shell Launcher feature is enabled"
exit
}
}
$Admins_SID = "S-1-5-32-544"
function Get-UsernameSID($AccountName) {
return $NTUserSID.Value
}
# Get the SID for a user account named "Cashier". Rename "Cashier" to an existing account on your system to
test this script.
$Cashier_SID = Get-UsernameSID("Cashier")
$restart_shell = 0
$restart_device = 1
$shutdown_device = 2
$do_nothing = 3
# Examples. You can change these examples to use the program that you want to use as the shell.
# This example sets the command prompt as the default shell, and restarts the device if the command prompt
is closed.
$ShellLauncherClass.SetDefaultShell("cmd.exe", $restart_device)
$DefaultShellObject = $ShellLauncherClass.GetDefaultShell()
"`nDefault Shell is set to " + $DefaultShellObject.Shell + " and the default action is set to " +
$DefaultShellObject.defaultaction
# Set Internet Explorer as the shell for "Cashier", and restart the machine if Internet Explorer is closed.
$ShellLauncherClass.SetCustomShell($Admins_SID, "explorer.exe")
$ShellLauncherClass.SetEnabled($TRUE)
$IsShellLauncherEnabled = $ShellLauncherClass.IsEnabled()
$ShellLauncherClass.RemoveCustomShell($Admins_SID)
$ShellLauncherClass.RemoveCustomShell($Cashier_SID)
$ShellLauncherClass.SetEnabled($FALSE)
$IsShellLauncherEnabled = $ShellLauncherClass.IsEnabled()
NOTE
The script above includes examples of multiple configuration options, including removing a custom shell and disabling
Shell Launcher. It is not intended to be run as-is.
WARNING
If your shell application requires administrator rights and needs to be elevated, and User Account Control (UAC) is
present on your device, you must disable UAC in order for Shell Launcher to launch the shell application.
Related topics
Unbranded Boot
Custom Logon
WESL_UserSetting
3/5/2021 • 4 minutes to read
This class configures which application Shell Launcher starts based on the security identifier (SID) of the signed
in user, and also configures the set of return codes and return actions that Shell Launcher performs when the
application exits.
Syntax
class WESL_UserSetting {
[read, write, Required] string Sid;
[read, write, Required] string Shell;
[read, write] Sint32 CustomReturnCodes[];
[read, write] Sint32 CustomReturnCodesAction[];
[read, write] sint32 DefaultAction;
Members
The following tables list any methods and properties that belong to this class.
Methods
M ET H O DS DESC RIP T IO N
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
D ESCR IP TI
VA L U E ON
0 Restar
t the
shell.
1 Restar
t the
device
.
2 Shut
down
the
device
.
3 Do
nothin
g.
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
D ESCR IP TI
VA L U E ON
0 Restar
t the
shell.
1 Restar
t the
device
.
2 Shut
down
the
device
.
3 Do
nothin
g.
Remarks
Only one WESL_UserSetting instance exists on a device with Shell Launcher.
Shell Launcher uses the custom configuration defined for the SID of the user currently signed in, if one exists.
Otherwise, Shell Launcher uses a custom configuration defined for a group SID that the user is a member of, if
any exist. If multiple group custom configurations for the user exist, Shell Launcher uses the first valid
configuration it finds. The search order is not defined.
If there is no custom configuration for the user’s SID or any group SIDs that the user is a member of, Shell
Launcher uses the default configuration.
You can find the SID for a user and any groups that the user is a member of by using the whoami command-line
tool.
Example
The following Windows PowerShell script demonstrates how to add and remove custom shell configurations for
Shell Launcher by using the Windows Management Instrumentation (WMI) providers for Shell Launcher.
$COMPUTER = "localhost"
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
# Create a handle to the class instance so we can call the static methods.
$ShellLauncherClass = [wmiclass]"\\$COMPUTER\${NAMESPACE}:WESL_UserSetting"
$Admins_SID = "S-1-5-32-544"
function Get-UsernameSID($AccountName) {
return $NTUserSID.Value
# Get the SID for a user account named "Cashier". Rename "Cashier" to an existing account on your system to
test this script.
$Cashier_SID = Get-UsernameSID("Cashier")
$restart_shell = 0
$restart_device = 1
$shutdown_device = 2
$do_nothing = 3
# Examples
# Set the command prompt as the default shell, and restart the device if it's closed.
$ShellLauncherClass.SetDefaultShell("cmd.exe", $restart_device)
$DefaultShellObject = $ShellLauncherClass.GetDefaultShell()
"`nDefault Shell is set to " + $DefaultShellObject.Shell + " and the default action is set to " +
$DefaultShellObject.defaultaction
# Set Internet Explorer as the shell for "Cashier", and restart the machine if it's closed.
$ShellLauncherClass.SetCustomShell($Admins_SID, "explorer.exe")
$ShellLauncherClass.RemoveCustomShell($Admins_SID)
$ShellLauncherClass.RemoveCustomShell($Cashier_SID)
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Shell Launcher
WESL_UserSetting.GetCustomShell
3/5/2021 • 2 minutes to read
This method retrieves the Shell Launcher configuration for a specific user or group, based on the security
identifier (SID).
Syntax
[Static] uint32 GetCustomShell (
[In, Required] string Sid,
[Out, Required] string Shell,
[Out, Required] sint32 CustomReturnCodes[],
[Out, Required] sint32 CustomReturnCodesAction[],
[Out, Required] sint32 DefaultAction
);
Parameters
Sid [in, required] A string containing the security identifier (SID) of the user or group that Shell Launcher is
configured for.
Shell [out, required] The application or executable that Shell Launcher starts as the shell.
CustomReturnCodes [out, required] An array of custom return codes returned by the shell application.
CustomReturnCodesAction [out, required] An array of custom return code actions that determine the action that
Shell Launcher takes when the shell application exits. The custom actions map to the array of
CustomReturnCodes.
The possible actions are defined in the following table:
VA L UE DESC RIP T IO N
3 Do nothing.
DefaultAction [out, required] The default action that Shell Launcher takes when the shell application exits.
The possible actions are defined in the following table:
VA L UE DESC RIP T IO N
3 Do nothing.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
Shell Launcher uses the CustomReturnCodes and CustomReturnCodesAction arrays to determine the system
behavior when the shell application exits, based on the return value of the application.
If the return value does not exist in CustomReturnCodes, or if the corresponding action defined in
CustomReturnCodesAction is not a valid value, Shell Launcher uses DefaultAction to determine system behavior.
If DefaultAction is not defined, or is not a valid value, Shell Launcher restarts the shell application.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.RemoveCustomShell
3/5/2021 • 2 minutes to read
This method removes a Shell Launcher configuration for a specific user or group, based on the security identifier
(SID).
Syntax
[Static] uint32 RemoveCustomShell (
[In, Required] string Sid
);
Parameters
Sid
[in, required] A string containing the security identifier (SID) of the user or group that Shell Launcher is
configured for.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
You must restart your device for the changes to take effect.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.SetCustomShell
3/5/2021 • 2 minutes to read
This method configures Shell Launcher for a specific user or group, based on the security identifier (SID).
Syntax
[Static] uint32 SetCustomShell (
[In, Required] string Sid,
[In, Required] string Shell,
[In] sint32 CustomReturnCodes[],
[In] sint32 CustomReturnCodesAction[],
[In] sint32 DefaultAction
);
Parameters
Sid [in, required] A string containing the security identifier (SID) of the user or group that Shell Launcher is
being configured for.
Shell [in, required] The application or executable that Shell Launcher starts as the shell.
CustomReturnCodes [in] An array of custom return codes that can be returned by the shell application.
CustomReturnCodesAction [in] An array of custom return code actions that determine the action that Shell
Launcher takes when the shell application exits. The custom actions map to the array of CustomReturnCodes.
The possible actions are defined in the following table:
VA L UE DESC RIP T IO N
3 Do nothing.
DefaultAction [In] The default action that Shell Launcher takes when the shell application exits.
The possible actions are defined in the following table:
VA L UE DESC RIP T IO N
3 Do nothing.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
Shell Launcher uses the CustomReturnCodes and CustomReturnCodesAction arrays to determine the system
behavior when the shell application exits, based on the return value of the shell application.
If the return value does not exist in CustomReturnCodes, or if the corresponding action defined in
CustomReturnCodesAction is not a valid value, Shell Launcher uses DefaultAction to determine system behavior.
If DefaultAction is not defined, or is not a valid value, Shell Launcher restarts the shell application.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.SetDefaultShell
3/5/2021 • 2 minutes to read
Syntax
[Static] uint32 SetDefaultShell (
[In, Required] string Shell,
[In, Required] sint32 DefaultAction
);
Parameters
Shell [in, required] The application or executable that Shell Launcher starts as the shell.
DefaultAction [in, required] The default action that Shell Launcher takes when the Shell application exits.
The possible actions are defined in the following table:
VA L UE DESC RIP T IO N
3 Do nothing.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
Shell Launcher uses the default configuration when the security identifier (SID) of the user who is currently
signed in does not match any custom defined Shell Launcher configurations.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
W IN DO W S EDIT IO N SUP P O RT ED
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.GetDefaultShell
3/5/2021 • 2 minutes to read
Syntax
[Static] uint32 GetDefaultShell (
[Out, Required] string Shell,
[Out, Required] sint32 DefaultAction
);
Parameters
Shell [out, required] The application or executable that Shell Launcher starts as the shell.
DefaultAction [out, required] The default action Shell Launcher takes when the shell application exits.
The possible actions are defined in the following table:
VA L UE DESC RIP T IO N
3 Do nothing.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
Shell Launcher uses the default configuration when the security identifier (SID) of the user who is currently
signed in does not match any custom defined Shell Launcher configurations.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
W IN DO W S EDIT IO N SUP P O RT ED
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.IsEnabled
3/5/2021 • 2 minutes to read
This method retrieves a value that indicates if Shell Launcher is enabled or disabled.
Syntax
[Static] uint32 IsEnabled(
[Out, Required] boolean Enabled
);
Parameters
Enabled [out, required] A Boolean value that indicates if Shell Launcher is enabled.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.SetEnabled
3/5/2021 • 2 minutes to read
Syntax
[Static] uint32 SetEnabled(
[In, Required] boolean Enabled
);
Parameters
Enabled
[in, required] A Boolean value that indicates whether to enable or disable Shell Launcher.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
This method enables or disables Shell Launcher by modifying the Shell value in the registry key
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon . If Unified
Write Filter (UWF) is enabled, you may need to disable UWF or commit this registry key by using
UWF_RegistryFilter.CommitRegistry in order to enable or disable Shell Launcher.
Enabling or disabling Shell Launcher does not take effect until a user signs in.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
WESL_UserSetting
Shell Launcher
Unbranded Boot
3/5/2021 • 5 minutes to read
You can suppress Windows elements that appear when Windows starts or resumes and can suppress the crash
screen when Windows encounters an error that it cannot recover from. This feature is known as Unbranded
Boot.
IMPORTANT
The first user to sign in to the device must be an administrator. This ensures that the RunOnce registry settings correctly
apply the settings. Also, when using auto sign-in, you must not configure auto sign-in on your device at design time.
Instead, auto sign-in should be configured manually after first signing in as an administrator.
Requirements
Windows 10 Enterprise, Windows 10 Professional, or Windows 10 Education.
Terminology
Turn on, Enable: To make the setting available to the device and optionally apply the settings to the
device. Generally "turn on" is used in the user interface or control panel, whereas "enable" is used for
command line.
Configure: To customize the setting or sub-settings.
Embedded Boot Experience: this feature is called "Embedded Boot Experience" in Windows 10, build
1511.
Custom Boot Experience: this feature is called "Custom Boot Experience" in Windows 10, build 1607
and later.
3. To disable the F10 key during startup to prevent access to the Advanced star tup options menu, type
the following:
4. To suppress all Windows UI elements (logo, status indicator, and status message) during startup, type the
following:
3. Once you have finished configuring the settings and building the package or image, you use DISM to
apply the settings.
a. Open a command prompt with administrator privileges.
b. Copy install.wim to a temporary folder on hard drive (in the following steps, it assumes it's called
c:\wim).
c. Create a new directory.
md c:\wim
In the following image, the BootLogo is identified by the green outline, the BootStatusIndicator is identified by
the red outline, and the BootStatusMessage is identified by the blue outline.
Replace the startup logo
The only supported way to replace the startup logo with a custom logo is to modify the Boot Graphics Resource
Table (BGRT) on a device that uses UEFI as the firmware interface. If your device uses the BGRT to include a
custom logo, it is always displayed and you cannot suppress the custom logo.
Related topics
Custom Logon
Unified Write Filter (UWF) feature
5/6/2021 • 5 minutes to read
Unified Write Filter (UWF) is an optional Windows 10 feature that helps to protect your drives by intercepting
and redirecting any writes to the drive (app installations, settings changes, saved data) to a virtual overlay. The
virtual overlay is a temporary location that is usually cleared during a reboot or when a guest user logs off.
Benefits
Provides a clean experience for thin clients and workspaces that have frequent guests, like school, library
or hotel computers. Guests can work, change settings, and install software. After the device reboots, the
next guest receives a clean experience.
Increases security and reliability for kiosks, IoT-embedded devices, or other devices where new apps are
not expected to be frequently added.
Can be used to reduce wear on solid-state drives and other write-sensitive media.
UWF replaces the Windows 7 Enhanced Write Filter (EWF) and the File Based Write Filter (FBWF).
Features
UWF can protect most supported writable storage types, including physical hard disks, solid-state drives,
internal USB devices, and external SATA devices. You cannot use UWF to protect external removable
drives, USB devices or flash drives. Supports both master boot record (MBR) and GUID partition table
(GPT) volumes.
You can use UWF to make read-only media appear to the OS as a writable volume.
You can manage UWF directly on a Windows 10 device using uwfmgr.exe, or remotely using MDM tools
with the UnifiedWriteFilter CSP or the UWF WMI.
You can update and service UWF-protected devices, either by using UWF servicing mode or by adding
file and registry exclusions to specific system areas.
On Windows 10, version 1803, you can use a persistent overlay to allow data saved in the virtual overlay
to remain even after a reboot.
On devices with a disk overlay, you can use freespace passthrough to access your drive's additional free
space.
UWF supports paging to increase virtual memory, if the page file exists on an unprotected volume. When
paging is used together with a RAM-based overlay, the uptime of the system can be significantly
increased.
Requirements
Windows 10 Enterprise, Windows 10 IoT Core, or Windows 10 IoT Enterprise.
Limitations
File systems:
FAT: fully supported.
NTFS: fully supported. However, during device startup, NTFS file system journal files can write to a
protected volume before UWF has started protecting the volume.
Other file systems (example: exFAT): You can protect the volume, but cannot create file exclusions or do
file commit operations on the volume. Writes to excluded files still influence the growth of the Overlay.
The overlay does not mirror the entire volume, but dynamically grows to keep track of redirected writes.
UWF supports up to 16 terabytes of protected volumes.
UWF does not support the use of fast startup when shutting down your device. If fast startup is turned
on, shutting down the device does not clear the overlay. You can disable fast startup in Control Panel by
navigating to Control Panel > All Control Panel Items > Power Options > System Settings and
clearing the checkbox next to Turn on fast star tup (recommended) .
UWF does not support Storage Spaces.
On a computer on which UWF is enabled and used to protect drive C, you cannot permanently set the
date and time to a past time. If you make such a change, the original date and time settings will be
restored after the computer restarts.
To work around this issue, you must disable UWF before you change the date and time. To do this, run
uwfmgr.exe filter disable.
NOTE
Do not add the file that retains date and time settings ("%windir%\bootstat.dat") to the write filter exclusions to
work around this issue. Doing this causes Stop error 0x7E (SYSTEM_THREAD_EXCEPTION_NOT_HANDLED) to
occur.
UWF overlay
You can choose where the overlay is stored (RAM or disk), how much space is reserved, whether the overlay
persists after a reboot.
To increase uptime, set up monitoring to check if your overlay is filling up. At certain levels, your device can
warn users and/or reboot the device.
To learn more, see UWF Overlay location and size.
Volumes
A volume is a logical unit that represents an area of persistent storage to the file system that is used by the OS.
A volume can correspond to a single physical storage device, such as a hard disk, but volumes can also
correspond to a single partition on a physical storage device with multiple partitions, or can span across
multiple physical storage devices. For example, a collection of hard disks in a RAID array can be represented as a
single volume to the OS.
When you configure UWF to protect a volume, you can specify the volume by using either a drive letter or the
volume device identifier. To determine the device identifier for a volume, query the DeviceID property in the
Win32_Volume WMI class.
If you specify a volume using a drive letter, UWF uses loose binding to recognize the volume. By using loose
binding, drive letters can be assigned to different volumes if the hardware or volume configuration changes. If
you specify a volume using the volume device identifier, UWF uses tight binding to recognize the volume. By
using tight binding, the device identifier is unique to the storage volume and is independent from the drive
letter assigned to the volume by the file system.
Exclusions
If you want to protect a volume with UWF while excluding specific files, folders, or registry keys from being
filtered by UWF, you can add them to a write filter exclusion list.
Troubleshooting UWF
UWF uses Windows Event Log to log events, errors and messages related to overlay consumption, configuration
changes, and servicing.
For more information about how to find event log information for troubleshooting problems with Unified Write
Filter (UWF), see Troubleshooting Unified Write Filter (UWF).
Related topics
Unbranded Boot
Custom Logon
Shell Launcher
Hibernate Once/Resume Many (HORM)
2/26/2020 • 4 minutes to read
You can use the Hibernate Once/Resume Many (HORM) feature with Unified Write Filter (UWF) to start your
device in a preconfigured state. When HORM is enabled, your system always resumes and restarts from the last
saved hibernation file (hiberfil.sys).
A device with HORM enabled can quickly be turned off or shut down, and then restarted into the preconfigured
state, even in the event of a sudden power loss.
NOTE
HORM can be used on Unified Extensible Firmware Interface (UEFI) devices running Windows 10, version 1709, or newer
versions of Windows, only. In previous Windows versions, the installation procedure for UEFI creates a hidden system
partition. Because UWF cannot protect hidden partitions, HORM cannot be used on any devices that contain a hidden
partition, including UEFI-capable devices on older versions of Windows.
Requirements
Windows 10 Enterprise, Windows 10 Education, or Windows IoT Core (IoT Core). Supported on x86-based and
x64-based devices.
UWF configuration
UWF must be enabled before you can enable or disable HORM. UWF must be configured in the following ways
to protect the hibernation file from becoming invalid:
All fixed volumes that are mounted on the system must be protected by UWF.
Your system must not have any file, folder, or registry exclusions configured for UWF.
The UWF overlay must be configured to use RAM mode. HORM does not support disk-backed overlays.
UWF does not filter hibernation files from being written to disk. If you want to protect the preconfigured state of
your device, lock down any functionality that can modify the hibernation file. For example, disable hibernation,
hybrid sleep, and fast startup on your device for standard user accounts so that the saved hibernation file is not
overwritten when entering a sleep, hibernate, or shutdown state.
To disable hybrid sleep and fast startup on your device, follow these steps.
How to disable hybrid sleep
1. Open the Local Group Policy Editor (gpedit.msc) and navigate to the following path.
Computer Configuration\Administrative Templates\System\Power Management\Sleep settings
2. Enable the following two settings under the path:
Turn off hybrid sleep (plugged in)
Turn off hybrid sleep (on battery)
How to disable fast startup
To disable fast startup, set the following registry value:
IMPORTANT
Follow the steps in this section carefully. Serious problems might occur if you modify the registry incorrectly. Before you
modify it, back up the registry for restoration in case problems occur.
NOTE
Don’t disable hibernate (i.e. powercfg /h off) because it will delete the hiberfil.sys which HORM requires.
Even after you set all these settings, the timestamp of hiberfil.sys is updated after the system reboot. This is because
UWF cannot filter the hiberfil.sys file, and the file needs to be compressed and decompressed during the system
reboot. However, this doesn’t change the content of hiberfil.sys so the preconfigured state of the device is protected.
Configure HORM
1. On the device, open a command prompt as an administrator.
2. To enable hibernation on the device, type the following command:
powercfg /h on
6. After the device restarts, to verify the UWF changes that you made on your device, type the following
command:
uwfmgr.exe get-config
NOTE
Remove all file and registry exclusions before you enable HORM.
8. (Optional) In Control Panel, set the Power Option When I press the power button to avoid displaying
the command prompt when resuming from hibernation, or use a script to close the command prompt on
startup.
9. To hibernate the system one time to create an initial hibernation file, at the command prompt, type the
following command:
shutdown /h
10. Press the power button to wake the system from hibernation.
11. After the system starts from hibernation to create an initial hibernation file, to shut down and restart the
system, type the following command:
uwfmgr.exe restart
12. When HORM is enabled, you cannot change the UWF configuration. To make changes, you must first
disable HORM. To disable HORM, type the following command:
uwfmgr.exe filter disable-horm
13. To restart the system to finish disabling HORM, type the following command:
uwfmgr.exe restart
WARNING
Do not uninstall UWF when the filter is enabled or when HORM is enabled, either online or offline by using Windows PE.
4. Disable HORM:
uwfmgr.exe filter disable-horm
5. Enable HORM:
uwfmgr.exe filter enable-horm
You can add specific files or folders on a protected volume to a file exclusion list to exclude those files and
folders from being filtered by UWF. When a file or folder is in the exclusion list for a volume, all writes to that file
or folder bypass UWF filtering, and are written directly to the protected volume and persist after the device
restarts.
You must use an administrator account to add or remove file or folder exclusions during run time, and you must
restart the device for new exclusions to take effect.
IMPORTANT
Don't add exclusions for the following:
\Windows\System32\config\DEFAULT
\Windows\System32\config\SAM
\Windows\System32\config\SECURITY
\Windows\System32\config\SOFTWARE
\Windows\System32\config\SYSTEM
\Users\<User Name>\NTUSER.DAT
\Windows\BOOTSTAT.DAT
<System Drive>\EFI\Microsoft\Boot\BOOTSTAT.DAT
<System Drive>\Boot\BOOTSTAT.DAT
You cannot rename or move a file or folder from a protected location to an unprotected location, or vice versa.
When write filters are active and you attempt to delete an excluded file or folder in Windows Explorer, the
system attempts to move the file or folder to the Recycle Bin. This causes an error, because you cannot move
files that are not filtered to a location that is write filter protected.
To work around this, you can disable the Recycle Bin. Alternatively, the user can press Ctrl+Shift and then left-
click on the file to directly delete the excluded file, bypassing the Recycle Bin, or the user can delete the excluded
file directly from a command prompt. You must restart the device for new exclusions to take effect.
uwfmgr.exe file add-exclusion <drive containing VHD file>:\<path to VHD file>\<VHD file name>.vhd
For example:
Registry exclusions
You can add specific registry keys to an exclusion list to exclude those keys from being filtered by UWF. When a
registry key is in the exclusion list, all writes to that registry key bypass UWF filtering and are written directly to
the registry and persist after the device restarts.
You must use an administrator account to add or remove registry exclusions during run time, and you must
restart the device for new exclusions to take effect.
If you exclude a registry key, all its subkeys are also excluded from filtering. You can exclude registry subkeys
only under the following registry keys:
HKEY\LOCAL\MACHINE\BCD00000000
HKEY\LOCAL\MACHINE\SYSTEM
HKEY\LOCAL\MACHINE\SOFTWARE
HKEY\LOCAL\MACHINE\SAM
HKEY\LOCAL\MACHINE\SECURITY
HKEY\LOCAL\MACHINE\COMPONENTS
IMPORTANT
Don't add exclusions for the following:
HKLM\SECURITY\Policy\Secrets\$MACHINE.ACC
NOTE
UWF automatically excludes certain registry keys from being filtered. These registry keys are primarily related to UWF
configuration settings and cannot be removed from the exclusion list.
For more information about common registry exclusions, see Common write filter exclusions.
dir *.sqm /s
Add file and folder exclusions as required for any .sqm files located on your device.
Add registry exclusions for the following registry keys:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\SQMClient\Windows\CEIPEnable
HKEY_LOCAL_MACHINE\Software\Microsoft\SQMClient\Windows\CEIPEnable
HKEY_LOCAL_MACHINE\Software\Microsoft\SQMClient\UploadDisableFlag
Background Intelligent Transfer Service (BITS )
Background Intelligent Transfer Service (BITS) downloads or uploads files between a client and server and
provides progress information related to the transfers.
Add file exclusions for the following folders and files:
% ALLUSERSPROFILE%\Microsoft\Network\Downloader
Add registry exclusions for the following registry keys:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\BITS\StateIndex
Windows Explorer
When write filters are active and you attempt to delete an excluded file or folder in Windows Explorer, the
system attempts to move the file or folder to the Recycle Bin. This causes an error, because you cannot move
files that are not filtered to a location that is write filter protected.
To work around this, you can disable the Recycle Bin. Alternatively, the user can press Ctrl+Shift and then left-
click on the file to directly delete the excluded file, bypassing the Recycle Bin, or the user can delete the excluded
file directly from a command prompt.
Networks
When you use write filters on your device, you can add file and registry exclusions to enable your device to join
wired and wireless networks. The following file and registry exclusions may be required on your device.
Client Group Policy Object (GPO) registry keys:
Wireless:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Wireless\GPTWirelessPolicy
Wired: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WiredL2\GP_Policy
GPO policy files:
Wireless: C:\Windows\wlansvc\Policies
Wired: C:\Windows\dot2svc\Policies
Interface profile registry keys:
Wireless: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\wlansvc
Wired: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\dot3svc
Interface policy file:
Wireless: C:\ProgramData\Microsoft\wlansvc\Profiles\Interfaces\{ <Interface GUID>}\{ <Profile
GUID>}.xml
Wired: C:\ProgramData\Microsoft\dot3svc\Profiles\Interfaces\{ <Interface GUID>}\{ <Profile
GUID>}.xml
Services registry keys:
Wireless: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ser vices\Wlansvc
Wireless: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ser vices\WwanSvc
Wired: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ser vices\dot3svc
IMPORTANT
Folders need to exist prior to adding them to the exclusion list.
Related topics
Unified Write Filter
Service UWF-protected devices
Unified Write Filter WMI provider reference
Unified Write Filter (UWF) overlay location and size
3/5/2021 • 4 minutes to read
The Unified Write Filter (UWF) protects the contents of a volume by intercepting write attempts to a protected
volume and redirects those write attempts to a virtual overlay.
You can choose where the overlay is stored (RAM or disk), how much space is reserved, and what happens when
the overlay fills up.
To increase uptime, set up monitoring to check if your overlay is filling up. At certain levels, your device can
warn users and/or reboot the device.
Overlay size
Default=1024MB. Set with:
CMD: uwfmgr overlay set-size
CSP: NextSession/MaximumOverlaySize
WMI: UWF\Overlay.SetMaximumSize
When planning device rollouts, we recommend optimizing the overlay size to fit your needs.
For RAM overlays, you'll need to budget some RAM for the system. For example, if the OS requires 2 GB of RAM,
and your device has 4 GB of RAM, set the maximum size of the overlay to 2048MB (2 GB) or less.
We recommend enabling UWF on a test device, installing the necessary apps, and putting the device through
usage simulations. You can use this Powershell script to find out which files are consuming space:
NOTE
This mode is experimental, and we recommend thoroughly testing it before deploying to multiple devices. This option is
not used by default.
On devices with a disk overlay, you can choose to keep working using the overlay data, even after a reboot. This
can be helpful in situations where your guest users may need to access for longer periods, and may need to
power off the device between uses.
This option gives your IT department more control over when the overlay is reset. You can also provide your
users with scripts that will help them reset the overlay on demand.
To turn persistent overlay on or off:
CMD: uwfmgr overlay set-persistent (on|off)
To reset the overlay:
CMD: uwfmgr overlay reset-persistentstate on
Overlay exhaustion
If the size of the overlay is close to or equal to the maximum overlay size, any write attempts will fail, returning
an error indicating that there is not enough space to complete the operation. If the overlay on your device
reaches this state, your device may become unresponsive and sluggish, and you may need to restart your
device.
When Windows shuts down, it attempts to write a number of files to the disk. If the overlay is full, these write
attempts fail, causing Windows to attempt to rewrite the files repeatedly until UWF can determine that the
device is trying to shut down and resolve the issue. Attempting to shut down by using normal methods when
the overlay is full or near to full can result in the device taking a long time, in some cases up to an hour or
longer, to shut down.
You can often avoid this issue by using UWF to automatically initiate the shut down or restart:
Shut down :
CMD: uwfmgr shutdown
CSP: ShutdownSystem
WMI: UWF\Filter.ShutdownSystem
Restar t :
CMD: uwfmgr restart
CSP: RestartSystem
WMI: UWF\Filter.RestartSystem
Related topics
Unified Write Filter
Use the Unified Write Filter (UWF) feature
3/18/2021 • 4 minutes to read
uwfmgr.exe get-config
md c:\wim
NOTE
When setting the file exclusion in Windows Configuration Designer, you do not need to specify the drive letter
since that is already input via the Volume protection setting. For example, if the file being excluded is
C:\testdir\test.txt , after adding a drive in Volume protection, you only need to input \testdir\test.txt
to add this file exclusion.
2. In the Available customizations page, select Runtime settings > SMISettings and then set the value for
the Unified Write Filter setting.
3. Once you have finished configuring the settings and building the provisioning package, you can apply the
package to the image deployment time or runtime. See Apply a provisioning package for more
information.
To activate UWF, you can use a command-line script, CSP, or WMI:
CMD: uwfmgr filter enable , then uwfmgr.exe volume protect C:
CSP: CurrentSession/FilterEnabled , then CurrentSession/Volume
WMI: UWF\Filter.Enable , then UWF\Volume .
IMPORTANT
If you add UWF to your image by using SMI settings in an unattend.xml file, turning on UWF only sets the
bootstatuspolicy BCD setting and turns off the defragmentation service. In this case, you must manually turn off the
other features and services if you want to increase the performance of UWF.
All configuration settings for UWF are stored in the registry. UWF automatically excludes these registry entries
from filtering.
UWF maintains configuration settings in the registry for the current session and for the next session after a
device restart. Static configuration changes do not take effect until after a device restart, and these changes are
saved in the registry entries for the next session. Dynamic configuration changes occur immediately and persist
after a device restart.
Related topics
Unified Write Filter
Unified Write Filter WMI provider reference
UWF Command-line tool: uwfmgr.exe
Service UWF-protected devices
5/18/2021 • 2 minutes to read
To update your devices, use UWF servicing mode. UWF servicing mode allows you to apply Windows updates,
antimalware signature file updates, and custom software or third-party software updates.
Normally, when the Unified Write Filter (UWF) is active, system updates are disabled, as they would be erased
when the overlay is cleared.
When UWF servicing mode is triggered, Windows does the following:
1. Clears the UWF overlay.
2. Reboots the devices.
3. Triggers a system maintenance hour.
4. Disables the UWF filter.
5. Scans for and applies Windows updates.
6. Scans for and applies app updates from the Microsoft store.
7. After servicing is complete, it re-enables the UWF filter and resumes UWF protection.
NOTE
Servicing mode requires that all user accounts on the system have a password. If there is a user account that does not
include a password, UWF servicing will fail.
In this section
TO P IC DESC RIP T IO N
Antimalware support on UWF-protected devices Describes the procedures to add support for Microsoft
Defender and System Center Endpoint Protection
(SCEP/Forefront) antimalware to your UWF-protected
devices.
Apply OEM updates to UWF-protected devices Provides information about how to apply OEM updates to a
UWF-protected device.
Apply Windows updates to UWF-protected devices Describes the procedures to apply Windows updates to your
UWF-protected devices.
UWF master servicing script Provides information about the UWF master servicing script
(UwfServicingMasterScript.cmd).
UWF servicing screen saver Provides information about how to modify the default UWF
servicing screen saver.
Antimalware support on UWF-protected devices
3/5/2021 • 2 minutes to read
Learn how to enable antimalware support on your USB Filter-enabled Windows 10 Enterprise device.
When using antimalware software on your Unified Write Filter (UWF)-protected device, you must add the
required file and registry exclusions that enable the software to apply updates to signature files and persist
changes to the device after a system restart.
NOTE
Windows 10 Enterprise does not include System Center Endpoint Protection. You can purchase licenses and install System
Center Endpoint Protection independently.
Related topics
Service UWF-protected devices
Apply Windows updates to UWF-protected devices
1/18/2019 • 2 minutes to read
When a device is protected with Unified Write Filter (UWF), you must use UWF servicing mode commands to
service the device and apply updates to an image.
UWF servicing mode uses the following files to when it applies Windows updates to your device:
UWFMgr.exe command-line tool
UwfServicingScr.scr screen saver
UwfServicingMasterScript.cmd script
NOTE
The master servicing script can be modified to service third-party applications, service custom OEM applications, or call
custom OEM servicing scripts.
shutdown /r /t 0
On restart, the device will automatically sign in to the servicing account and servicing will start.
IMPORTANT
The default servicing account that is automatically created and used for servicing is named UWF-Ser vicing . It is
important that you do not have a user account that has that same name on a device before starting UWF servicing.
Once servicing has started, no user interaction is required. The system may restart if it is required by the
Windows updates that are installing. If a restart is required, the system will re-enter servicing mode on restart
and continue until all updates have been installed.
While servicing is underway, the UwfServicingScr.scr screen saver displays on the device.
NOTE
The UwfServicingScr.scr screen saver that is included with Windows 10 Enterprise is a standard Windows screen saver and
can be replaced by a custom OEM screen saver if required.
When Windows update servicing is finished, the system will disable UWF servicing and restart the system with
UWF-protection enabled and all file and registry exclusions restored to their original pre-servicing state.
NOTE
Be aware that during UWF servicing in Windows 10 Enterprise, Windows Update automatically accepts all Microsoft
Software License Terms.
NOTE
If Windows updates cannot be installed or return an error, servicing will be disabled and the system will restart with UWF-
protection re-enabled and all file and registry exclusions restored to their original pre-servicing state.
Related topics
Unified Write Filter
UWF master servicing script
UWF servicing screen saver
Apply OEM updates to UWF-protected devices
1/18/2019 • 2 minutes to read
To apply OEM updates on a Unified Write Filter (UWF)-protected Windows 10 device, you can modify the
UPDATE_SUCCESS block of UWF master servicing script (UwfServicingMasterScript.cmd) to call a custom OEM
script that applies any required OEM updates. The OEM script should return control back to the UWF Master
Servicing Script when finished.
The UWF Master Servicing Script (UwfServicingMasterScript.cmd) is located in the \Windows\System32 folder.
UPDATE_SUCCESS (UwfServicingMasterScript.cmd)
The UPDATE_SUCCESS block of the UWF master servicing script follows:
:UPDATE_SUCCESS
echo UpdateAgent returned success.
REM
REM echo UpdateAgent executing OEM script
REM OEM can call their custom scripts
REM at this point through a "call".
REM
REM The OEM script should hand control
REM back to this script once it’s done.
REM
REM Any error recovery for OEM script
REM should be handled outside of this script
REM post a reboot.
REM
uwfmgr servicing disable
echo Restarting system
goto UPDATE_EXIT
Related topics
Service UWF-protected devices
UWF master servicing script
Unified Write Filter
UWF master servicing script
1/18/2019 • 2 minutes to read
The UWF master servicing script (UwfServicingMasterScript.cmd) is located in the \Windows\System32 folder.
UwfServicingMasterScript.cmd
The full UWF master servicing script follows:
REM servicing of the device with UWF installed. The script will
REM call UWF manager application to update the system with the
REM latest available updates.
REM The script will detect whether the update operation
REM ended successfully or requires a reboot.
REM
REM The script will change the "SERVICING" state of the device
REM only when the update operation results in a "SUCCESS".
REM A state change of the device requires a reboot.
REM
REM If the update operation requires a "REBOOT" the script will
REM reboot device without changing the "SERVICING" state. The
REM Will then run again on the following reboot until
REM the update operation either return a "SUCCESS" or a "ERROR"
REM
REM Any third-party script that needs to run before the state
REM change should run in the UPDATE_SUCCESS block
REM
REM Environment :
REM It is expected that UWF is turned "OFF", "SERVICING" mode
REM enabled and all other preconditions
REM for servicing are in place.
REM
REM
REM
:UPDATE_ERROR
uwfmgr servicing disable
echo Restarting system
goto UPDATE_EXIT
:UPDATE_REBOOT
echo UpdateAgent requires a reboot.
echo UpdateAgent restarting system
goto UPDATE_EXIT
:UPDATE_SUCCESS
echo UpdateAgent returned success.
REM
REM echo UpdateAgent executing OEM script
REM OEM can call their custom scripts
REM at this point through a "call".
REM
REM The OEM script should hand control
REM back to this script once it is done.
REM
REM Any error recovery for OEM script
REM should be handled outside of this script
REM post a reboot.
REM
uwfmgr servicing disable
echo Restarting system
goto UPDATE_EXIT
:UPDATE_EXIT
echo UpdateAgent exiting.
shutdown -r -t 5
EXIT /B
Related topics
Service UWF-protected devices
Unified Write Filter
UWF servicing screen saver
1/18/2019 • 2 minutes to read
The default settings for the Unified Write Filter (UWF) servicing screen saver can be changed through the
Windows registry to use custom text, title, font, and color settings.
The UWF servicing screen saver (UwfServicingScr.scr) is located in the \Windows\System32 folder.
IMPORTANT
When UWF is installed on your device, when you right-click on the Desktop , and then click Personalize > Screen
Saver , the UWF servicing screen saver will appear in the list of available screen savers in the Screen Saver Settings
dialog box.
Do not select UwfSer vicingScr as the screen saver and then click Preview , as you will not be able to exit the
UWF servicing screen saver by moving the mouse or pressing a key. The only way to exit the UWF servicing
screen saver in this case is by pressing the Ctrl+Alt+Delete keys.
Modify the default registry settings for the UWF servicing screen
saver
1. To modify the default registry settings for the UWF servicing screen saver, from the example shown here,
change the values in a text editor, and then save as a .reg file (for example, Overridescreensaver.reg).
2. On the device, open a command prompt as an administrator. For Windows Shell, to open a command
prompt, do the following:
a. In Windows Explorer, move to \Windows\System32, right-click cmd.exe , and then click Run as
Administrator .
b. Accept the UAC prompt.
3. To apply the custom registry settings for the screen saver to the device, type the following command:
regedit.exe /s overridescreensaver.reg
The next time the device enters UWF servicing mode, the UwfServicingScr.scr screen saver will use the custom
settings.
Related topics
Service UWF-protected devices
Unified Write Filter
Troubleshooting Unified Write Filter (UWF)
1/18/2019 • 2 minutes to read
Review the log files and error message information locations for Unified Write Filter (UWF) on your Windows 10
Enterprise device.
If you are having difficulties configuring Unified Write Filter (UWF) on your device, see the following information
about how to find event log and error message information for troubleshooting problems with UWF.
Event logs
UWF uses Windows Event Log to log events, errors and messages.
Events related to overlay consumption are sent by UWF kernel mode components and are logged in the
Windows Logs\System event log.
Event related to configuration changes and servicing logs are sent by UWF user mode components:
Error messages are logged in the Applications and Ser vices
Logs\Microsoft\Windows\UnifiedWriteFilter\Admin event log.
Informational messages are logged in the Applications and Ser vices
Logs\Microsoft\Windows\UnifiedWriteFilter\Operational event log.
Related topics
Unified Write Filter
Common write filter exclusions
Service UWF-protected devices
Unified Write Filter WMI provider reference
uwfmgr.exe
Unified Write Filter WMI provider reference
3/5/2021 • 2 minutes to read
To help protect physical storage media, you can use the WMI providers for Unified Write Filter (UWF) to
configure UWF.
This section describes the WMI provider classes for UWF.
In this section
UWF_ExcludedFile: A container class that contains the files and folders that are currently in the file exclusion
list for a volume protected by UWF.
UWF_ExcludedRegistryKey: A container class that contains the registry keys that are currently in the registry
key exclusion list for UWF.
UWF_Filter: Enables or disables Unified Write Filter (UWF), resets configuration settings for UWF, and shuts
down or restarts your device.
UWF_Overlay: Contains the current size of the UWF overlay and manages the critical and warning thresholds
for the overlay size.
UWF_OverlayConfig: Manages the configuration of the UWF overlay.
UWF_OverlayFile: Displays and configures global settings for the UWF overlay. You can modify the maximum
size and the type of the UWF overlay.
UWF_RegistryFilter: Adds or removes registry exclusions from UWF filtering.
UWF_Servicing: Contains properties and methods that enable you to query and control UWF servicing
mode.
UWF_Volume: Manages a volume protected by UWF.
NOTE
We recommend setting the authentication level to PacketIntegrity or PacketPrivacy for remote clients when you connect
to WMI providers under root\standardcimv2\embedded when using WMI scripts or applications. For more information
about how to use authentication with WMI providers, see this WMI Enhancements in Windows PowerShell 2.0 CTP on
TechNet.
Requirements
Windows 10 Enterprise, Windows 10 Education, or Windows 10 IoT Core Enterprise
Related topics
uwfmgr.exe
UWF_ExcludedFile
1/18/2019 • 2 minutes to read
Contains the files and folders that are currently in the file exclusion list for a volume protected by Unified Write
Filter (UWF).
Syntax
class UWF_ExcludedFile {
[Read] string FileName;
};
Members
The following tables list any methods and properties that belong to this class.
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IER DESC RIP T IO N
Remarks
UWF_ExcludedFile does not represent an actual WMI object, and you cannot use this class to get or set file
exclusions.
You must use the UWF_Volume.GetExclusions method to retrieve UWF_ExcludedFile objects.
You can use the UWF_Volume.AddExclusion and UWF_Volume.RemoveExclusion methods to add or remove file
and folder exclusions to a volume.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter WMI provider reference
Unified Write Filter
UWF_ExcludedRegistryKey
1/18/2019 • 2 minutes to read
Contains the registry keys that are currently in the registry key exclusion list for Unified Write Filter (UWF).
Syntax
class UWF_ExcludedRegistryKey {
[Read] string RegistryKey;
};
Members
The following tables list any methods and properties that belong to this class.
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IER DESC RIP T IO N
Remarks
UWF_ExcludedRegistryKeydoes not represent an actual WMI object, and you cannot use this class to get or set
registry key exclusions.
You can use the UWF_RegistryFilter.GetExclusions or UWF_RegistryFilter.FindExclusion methods to retrieve
UWF_ExcludedRegistryKey objects.
You can use the UWF_Volume.AddExclusion and UWF_Volume.RemoveExclusion methods to add or remove
registry keys to the UWF registry key exclusion list.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter WMI provider reference
Unified Write Filter
UWF_Filter
1/18/2019 • 3 minutes to read
Enables or disables Unified Write Filter (UWF), resets configuration settings for UWF, and shuts down or restarts
your device.
Syntax
class UWF_Filter{
[key] string Id;
[read] boolean CurrentEnabled;
[read] boolean NextEnabled;
UInt32 Enable();
UInt32 Disable();
UInt32 ResetSettings();
UInt32 ShutdownSystem();
UInt32 RestartSystem();
};
Members
The following tables list any methods and properties that belong to this class.
Methods
M ET H O DS DESC RIP T IO N
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
Remarks
You must use an administrator account to make any changes to the configuration settings for UWF. Users with
any kind of account can read the current configuration settings.
Example
The following example demonstrates how to enable or disable UWF by using the WMI provider in a PowerShell
script.
The PowerShell script creates three functions to help enable or disable UWF. It then demonstrates how to use
each function.
The first function, Disable-UWF , retrieves a WMI object for UWF_Filter , and calls the Disable() method to
disable UWF after the next device restart.
The second function, Enable-UWF , retrieves a WMI object for UWF_Filter , and calls the Enable() method to
enable UWF after the next device restart.
The third function, Display-UWFState , examines the properties of the UWF_Filter object, and prints out the
current settings for UWF_Filter .
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
# Create a function to disable the Unified Write Filter driver after the next restart.
function Disable-UWF() {
if(!$objUWFInstance) {
"Unable to retrieve Unified Write Filter settings."
return;
}
# Call the method to disable UWF after the next restart. This sets the NextEnabled property to false.
$retval = $objUWFInstance.Disable();
# Create a function to enable the Unified Write Filter driver after the next restart.
function Enable-UWF() {
# Retrieve the UWF_Filter settings.
$objUWFInstance = Get-WMIObject -namespace $NAMESPACE -class UWF_Filter;
if(!$objUWFInstance) {
"Unable to retrieve Unified Write Filter settings."
return;
}
# Call the method to enable UWF after the next restart. This sets the NextEnabled property to false.
$retval = $objUWFInstance.Enable();
# Create a function to display the current settings of the Unified Write Filter driver.
function Display-UWFState() {
if(!$objUWFInstance) {
"Unable to retrieve Unified Write Filter settings."
return;
}
# Check the CurrentEnabled property to see if UWF is enabled in the current session.
if($objUWFInstance.CurrentEnabled) {
$CurrentStatus = "enabled";
} else {
$CurrentStatus = "disabled";
}
# Check the NextEnabled property to see if UWF is enabled or disabled after the next system restart.
if($objUWFInstance.NextEnabled) {
$NextStatus = "enabled";
} else {
$NextStatus = "disabled";
}
}
Display-UWFState
Display-UWFState
Display-UWFState
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter WMI provider reference
Unified Write Filter
UWF_Filter.Disable
3/5/2021 • 2 minutes to read
Syntax
UInt32 Disable();
Parameters
None.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
You must use an administrator account to disable UWF.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Filter
Unified Write Filter
UWF_Filter.Enable
3/5/2021 • 2 minutes to read
Syntax
UInt32 Enable();
Parameters
None.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
You must use an administrator account to enable UWF.
You must restart your device after you enable or disable UWF before the change takes effect.
The first time you enable UWF on your device, UWF makes the following changes to your system to improve the
performance of UWF:
Paging files are disabled.
System restore is disabled.
SuperFetch is disabled.
File indexing service is turned off.
Defragmentation service is turned off.
Fast boot is disabled.
BCD setting bootstatuspolicy is set to ignoreallfailures .
You can change these settings after you enable UWF if you want to. For example, you can move the page file
location to an unprotected volume and re-enable paging files.
Additionally, after you run uwfmgr filter enable , restart the computer and exit the servicing mode, the
following things are disabled:
Windows Update (by setting
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\NoAutoUpdate.)
Windows Store Update (by setting
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsStore\AutoDownload.)
Registry Reorganization (by setting HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session
Manager\Configuration Manager\RegistryReorganizationLimitDays.)
Maintenance Hour (by setting HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Schedule\Maintenance\MaintenanceDisabled.)
After you run uwfmgr filter disable , restart the computer and enter the serving mode, the changes are
reverted.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Filter
Unified Write Filter
UWF_Filter.ResetSettings
3/5/2021 • 2 minutes to read
Syntax
UInt32 ResetSettings();
Parameters
None.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
You must use an administrator account to reset UWF settings.
The original configuration settings are captured the first time that you enable UWF after you add UWF to your
device by using Turn Windows features on or off . You can change the original configuration settings by
using Turn Windows features on or off to remove and then add UWF, and then modifying the configuration
to the desired state before you enable UWF.
If you added UWF to your device by using SMI settings in an unattend.xml file, the original configuration
settings are captured when Windows 10 Enterpriseis installed on your device.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Filter
Unified Write Filter
UWF_Filter.RestartSystem
3/5/2021 • 2 minutes to read
Syntax
UInt32 RestartSystem();
Parameters
None.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
You must use an administrator account to call this method.
If the overlay is full, or near full, shutting down or restarting the system normally can cause the system to take
an extremely long time to shut down. This occurs when the system repeatedly tries to write files during
shutdown, which constantly fail due to the overlay being full. You can call this method to safely restart a system
by avoiding this scenario.
If the overlay becomes full while the system is performing a large amount of writes, such as copying a large
group of files, calling this method can still result in a long shutdown time.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Filter
Unified Write Filter
UWF_Filter.ShutdownSystem
3/5/2021 • 2 minutes to read
Safely shuts down a system protected by UWF, even if the overlay is full.
Syntax
UInt32 ShutdownSystem();
Parameters
None.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
You must use an administrator account to call this method.
If the overlay is full, or near full, shutting down or restarting the system normally can cause the system to take
an extremely long time to shut down. This occurs when the system repeatedly tries to write files during
shutdown, which constantly fail due to the overlay being full. You can call this method to safely shutdown a
system by avoiding this scenario.
If the overlay becomes full while the system is performing a large amount of writes, such as copying a large
group of files, calling this method can still result in a long shutdown time.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Filter
Unified Write Filter
UWF_Overlay
1/18/2019 • 2 minutes to read
Contains the current size of the Unified Write Filter (UWF) overlay and manages the critical and warning
thresholds for the overlay size.
Syntax
class UWF_Overlay {
[key] string Id;
[read] UInt32 OverlayConsumption;
[read] UInt32 AvailableSpace;
[read] UInt32 CriticalOverlayThreshold;
[read] UInt32 WarningOverlayThreshold;
UInt32 GetOverlayFiles(
[in] string Volume,
[out, EmbeddedInstance("UWF_OverlayFile")] string OverlayFiles[]
);
UInt32 SetWarningThreshold(
UInt32 size
);
UInt32 SetCriticalThreshold(
UInt32 size
);
};
Members
The following tables list any methods and properties that belong to this class.
Methods
M ET H O DS DESC RIP T IO N
UWF_Overlay.SetWarningThreshold Sets the warning threshold for monitoring the size of the
UWF overlay.
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
Examples
The following example demonstrates how to use the UWF overlay by using the WMI provider in a PowerShell
script.
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
function Set-OverlayWarningThreshold($ThresholdSize) {
if(!$OverlayInstance) {
"Unable to get handle to an instance of the UWF_Overlay class"
return;
}
$retval = $OverlayInstance.SetWarningThreshold($ThresholdSize);
# Check the return value to verify that setting the warning threshold is successful
if ($retval.ReturnValue -eq 0) {
"Overlay warning threshold has been set to " + $ThresholdSize + " MB"
} else {
"Unknown Error: " + "{0:x0}" -f $retval.ReturnValue
}
}
# Function to set the Unified Write Filter overlay critical threshold
function Set-OverlayCriticalThreshold($ThresholdSize) {
if(!$OverlayInstance) {
"Unable to get handle to an instance of the UWF_Overlay class"
return;
}
$retval = $OverlayInstance.SetCriticalThreshold($ThresholdSize);
# Check the return value to verify that setting the critical threshold is successful
if ($retval.ReturnValue -eq 0) {
"Overlay critical threshold has been set to " + $ThresholdSize + " MB"
} else {
"Unknown Error: " + "{0:x0}" -f $retval.ReturnValue
}
}
function Get-OverlayInformation() {
if(!$OverlayInstance) {
"Unable to get handle to an instance of the UWF_Overlay class"
return;
}
Remarks
Only one UFW_Overlay instance exists for a system protected with UWF.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter
UWF_OverlayConfig
1/18/2019 • 3 minutes to read
Displays and configures global settings for the Unified Write Filter (UWF) overlay. You can modify the maximum
size and the type of the UWF overlay.
Syntax
class UWF_OverlayConfig{
[key, Read] boolean CurrentSession;
[read] UInt32 Type;
[read] SInt32 MaximumSize;
UInt32 SetType(
UInt32 type
);
UInt32 SetMaximumSize(
UInt32 size
);
};
Members
The following tables list the methods and properties that belong to this class.
Methods
M ET H O D DESC RIP T IO N
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
Remarks
Changes to the overlay configuration take effect on the next restart in which UWF is enabled.
Before you can change the Type or MaximumSize properties, UWF must be disabled in the current session.
Example
The following example demonstrates how to change the maximum size or the storage type of the overlay in
UWF by using the Windows Management Instrumentation (WMI) provider in a PowerShell script.
The PowerShell script creates two functions to modify the overlay configuration. It then demonstrates how to
use the functions. The first function, Set-OverlaySize , sets the maximum size of the overlay. The second
function, Set-OverlayType , sets the type of the overlay to RAM-based or disk-based.
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
# This function sets the size of the overlay to which file and registry changes are redirected
# Changes take effect after the next restart
if ($nextConfig) {
$nextConfig.SetMaximumSize($size);
write-host "Set overlay max size to $size MB."
}
} else {
write-host "UWF must be disabled in the current session before you can change the overlay size."
}
}
}
# This function sets the type of the overlay to which file and registry changes are redirected
# Changes take effect after the next restart
# $overlayType is the type of storage that UWF uses to maintain the overlay. 0 = RAM-based; 1 = disk-based.
if ($nextConfig) {
$nextConfig.SetType($overlayType);
write-host "Set overlay type to $overlayTypeText[$overlayType]."
}
} else {
write-host "UWF must be disabled in the current session before you can change the overlay type."
}
} else {
write-host "Invalid value for overlay type. Valid values are 0 (RAM-based) or 1 (disk-based)."
}
}
# The following sample commands demonstrate how to use the functions to change the overlay configuration
$RAMMode = 0
$DiskMode = 1
Set-OverlaySize 2048
Set-OverlayType $DiskMode
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Sets the maximum cache size of the Unified Write Filter (UWF) overlay.
Syntax
UInt32 SetMaximumSize(
UInt32 size
);
Parameters
size An integer that represents the maximum cache size, in megabytes, of the overlay.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
When the size of the overlay reaches the size value, UWF returns an error for any attempt to write to a protected
volume.
If the overlay type is disk-based, your device must meet the following requirements to change the maximum
size of the overlay.
UWF must be disabled in the current session.
The size value must be at least 1024.
The system volume on your device must have available free space greater than the new maximum size value.
If the overlay type is RAM-based, your device must meet the following requirement to change the maximum
size of the overlay.
UWF must be disabled in the current session.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_OverlayConfig
Unified Write Filter
UWF_OverlayConfig.SetType
3/5/2021 • 2 minutes to read
Sets the type of the Unified Write Filter (UWF) overlay to either RAM-based or disk-based.
Syntax
UInt32 SetType(
UInt32 type
);
Parameters
type The type of overlay. Set to 0 for a RAM-based overlay; set to 1 for a disk-based overlay.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
Changes to the overlay type take effect during the next device restart in which UWF is enabled.
When you change the overlay type from RAM-based to disk-based, UWF creates a file on the system volume.
The file has a size equal to the MaximumSize property of UWF_OverlayConfig.
Before you can change the overlay type to disk-based, your device must meet the following requirements.
UWF must be disabled in the current session.
The system volume on your device must have available free space greater than the maximum size of the
overlay.
The maximum size of the overlay must be at least 1024 MB.
Before you can change the overlay type to RAM-based, your device must meet the following requirements.
UWF must be disabled in the current session.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Contains a file that is currently in the overlay for a volume protected by Unified Write Filter (UWF).
Syntax
class UWF_OverlayFile {
[read] string FileName;
[read] UInt64 FileSize;
};
Members
The following table lists any properties that belong to this class.
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IER DESC RIP T IO N
Remarks
You cannot use the UWF_ OverlayFile class directly to get overlay files. You must use the
UWF_Overlay.GetOverlayFiles method to retrieve UWF_ OverlayFile objects.
For more information about specific limitations and conditions when using the GetOverlayFiles method, see
the Remarks section in the UWF_Overlay.GetOverlayFiles topic in the UWF WMI provider technical reference.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter WMI provider reference
Unified Write Filter
UWF_Overlay.GetOverlayFiles
3/5/2021 • 2 minutes to read
Returns a list of files of a volume that were cached in the Unified Write Filter (UWF) overlay.
Syntax
UInt32 GetOverlayFiles(
[in] string Volume,
[out, EmbeddedInstance("UWF_OverlayFile")] string OverlayFiles[]
);
Parameters
Volume A string that specifies the drive letter or volume name.
OverlayFiles An array of UWF_OverlayFiles objects embedded as strings.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
You must use an administrator account to access this method.
The GetOverlayFiles method is intended to be used as a diagnostic tool.
Do not base decisions about what to commit based on this method’s output.
You should be aware of the following limitations:
This method is only supported on the NTFS file system.
This method requires a significant amount of free system memory to succeed (in a linear relationship to
overlay usage). The method call fails when there is insufficient memory available to complete the call.
This method requires significant time to complete (in an exponential relationship to overlay usage).
This method may show files that are affected by seemingly unrelated operations to both registry and file
exclusions and commits.
You should also be aware of the following items when you use the GetOverlayFiles method:
Files that were committed with the uwfmgr.exe file commit command are also contained in the overlay files
list.
Excluded files may be contained in the overlay files list.
Files that are smaller than the cluster size (for example, 4 KB in most cases) will not be listed even if they are
cached in overlay.
Changes and deletions in excluded directories, excluded files, or excluded registry items add to overlay
usage.
File and registry commits add to overlay usage.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Overlay
Unified Write Filter
UWF_Overlay.SetCriticalThreshold
3/5/2021 • 2 minutes to read
Sets the critical threshold for monitoring the size of the Unified Write Filter (UWF) overlay.
Syntax
UInt32 SetCriticalThreshold(
UInt32 size
);
Parameters
size An integer that represents the size, in megabytes, of the critical threshold level for the overlay. If size is 0
(zero), UWF does not raise critical threshold events.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
When the size of the overlay reaches or exceeds the size threshold value, UWF writes the following notification
event to the event log.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Overlay
Unified Write Filter
UWF_Overlay.SetWarningThreshold
3/5/2021 • 2 minutes to read
Sets the warning threshold for monitoring the size of the Unified Write Filter (UWF) overlay.
Syntax
UInt32 SetWarningThreshold(
UInt32 size
);
Parameters
size An integer that represents the size, in megabytes, of the warning threshold level for the overlay. If size is set
to 0 (zero), UWF does not raise warning threshold events.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
When the size of the overlay reaches or exceeds the size threshold value, UWF writes the following notification
event to the event log.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Overlay
Unified Write Filter
UWF_RegistryFilter
1/18/2019 • 4 minutes to read
Adds or removes registry exclusions from Unified Write Filter (UWF) filtering, and also commits registry
changes.
Syntax
class UWF_RegistryFilter{
[key, Read] boolean CurrentSession;
[Read, Write] boolean PersistDomainSecretKey;
[Read, Write] boolean PersistTSCAL;
UInt32 AddExclusion(
string RegistryKey
);
UInt32 RemoveExclusion(
string RegistryKey
);
UInt32 FindExclusion(
[in] string RegistryKey,
[out] boolean bFound
);
UInt32 GetExclusions(
[out, EmbeddedInstance("UWF_ExcludedRegistryKey")] string ExcludedKeys[]
);
UInt32 CommitRegistry(
[in] string RegistryKey,
[in] string ValueName
);
UInt32 CommitRegistryDeletion(
string Registrykey,
string ValueName
);
};
Members
The following tables list the methods and properties that belong to this class.
Methods
M ET H O D DESC RIP T IO N
UWF_RegistryFilter.AddExclusion Adds a registry key to the registry exclusion list for UWF.
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
Remarks
Additions or removals of registry exclusions, including changes to the values of PersistDomainSecretKey and
PersistTSCAL , take effect after the next restart in which UWF is enabled.
You can only add registry keys in the HKLM registry root to the UWF registry exclusion list.
You can also use UWF_Registr yFilter to exclude the domain secret registry key and the TSCAL registry key
from UWF filtering.
Example
The following example demonstrates how to manage UWF registry exclusions by using the Windows
Management Instrumentation (WMI) provider in a PowerShell script.
The PowerShell script creates four functions, and then demonstrates how to use them.
The first function, Get-Registr yExclusions , displays a list of UWF registry exclusions for both the current
session and the next session that follows a restart.
The second function, Add-Registr yExclusion , adds a registry entry to the UWF registry exclusion list after you
restart the device.
The third function, Remove-Registr yExclusion , removes a registry entry from the UWF exclusion list after you
restart the device.
The fourth function, Clear-Registr yExclusions , removes all UWF registry exclusions. You must restart the
device before UWF stops filtering the exclusions.
$COMPUTER = "EMBEDDEDDEVICE"
$NAMESPACE = "root\standardcimv2\embedded"
function Get-RegistryExclusions() {
# Get the UWF_RegistryFilter configuration for the next session after a restart
if ($currentConfig) {
Write-Host ""
Write-Host "The following registry entries are currently excluded from UWF filtering:";
$currentExcludedList = $currentConfig.GetExclusions()
if ($currentExcludedList.ExcludedKeys) {
foreach ($registryExclusion in $currentExcludedList.ExcludedKeys) {
Write-Host " " $registryExclusion.RegistryKey
}
} else {
Write-Host " None"
}
} else {
Write-Error "Could not retrieve UWF_RegistryFilter.";
}
if ($nextConfig) {
Write-Host ""
Write-Host "The following registry entries will be excluded from UWF filtering after the next
restart:";
$nextExcludedList = $nextConfig.GetExclusions()
if ($nextExcludedList.ExcludedKeys) {
foreach ($registryExclusion in $nextExcludedList.ExcludedKeys) {
Write-Host " " $registryExclusion.RegistryKey
}
} else {
Write-Host " None"
}
Write-Host ""
}
}
function Add-RegistryExclusion($exclusion) {
# Get the UWF_RegistryFilter configuration for the next session after a restart
if ($nextConfig) {
$nextConfig.AddExclusion($exclusion) | Out-Null;
Write-Host "Added exclusion $exclusion.";
} else {
Write-Error "Could not retrieve UWF_RegistryFilter";
}
}
function Remove-RegistryExclusion($exclusion) {
# Get the UWF_RegistryFilter configuration for the next session after a restart
if ($nextConfig) {
try {
$nextConfig.RemoveExclusion($exclusion) | Out-Null;
Write-Host "Removed exclusion $exclusion.";
} catch {
} catch {
Write-Host "Could not remove exclusion $exclusion."
}
} else {
Write-Error "Could not retrieve UWF_RegistryFilter";
}
}
function Clear-RegistryExclusions() {
if ($nextConfig) {
$nextExcludedList = $nextConfig.GetExclusions()
if ($nextExcludedList) {
foreach ($registryExclusion in $nextExcludedList.ExcludedKeys) {
Write-Host "Removing:" $registryExclusion.RegistryKey
$nextConfig.RemoveExclusion($registryExclusion.RegistryKey) | Out-Null
}
} else {
Write-Host "No registry exclusions to remove."
}
Write-Host ""
}
}
Clear-RegistryExclusions
Get-RegistryExclusions
Get-RegistryExclusions
Get-RegistryExclusions
Clear-RegistryExclusions
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
W IN DO W S EDIT IO N SUP P O RT ED
Related topics
Unified Write Filter
UWF_RegistryFilter.AddExclusion
3/5/2021 • 2 minutes to read
Adds a registry key to the registry exclusion list for Unified Write Filter (UWF).
IMPORTANT
Only registry subkeys under the following registry keys can be added to the exclusion list.
HKEY_LOCAL_MACHINE\BCD00000000
HKEY_LOCAL_MACHINE\SYSTEM
HKEY_LOCAL_MACHINE\SOFTWARE
HKEY_LOCAL_MACHINE\SAM
HKEY_LOCAL_MACHINE\SECURITY
HKEY_LOCAL_MACHINE\COMPONENTS
IMPORTANT
Excluding a registry key from filtering also excludes all subkeys from filtering.
Syntax
UInt32 AddExclusion(
string RegistryKey
);
Parameters
RegistryKey A string that contains the full path of the registry key.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
You must restart the device before the registry key is excluded from UWF filtering.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_RegistryFilter.CommitRegistry
3/5/2021 • 2 minutes to read
Syntax
UInt32 CommitRegistry(
[in] string RegistryKey,
[in] string ValueName
);
Parameters
RegistryKey A string that contains the full path of the registry key to be committed.
ValueName A string that contains the name of the value to be committed.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
This method will commit only the value specified by ValueName under RegistryKey if ValueName is specified.
You must use an administrator account to change any properties or call any methods that change the
configuration settings.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_RegistryFilter.CommitRegistryDeletion
3/5/2021 • 2 minutes to read
Deletes the specified registry key or registry value and commits the deletion.
Syntax
UInt32 CommitRegistryDeletion(
string Registrykey,
string ValueName
);
Parameters
RegistryKey A string that contains the full path of the registry key that contains the value to be deleted. If
ValueName is empty, the entire registry key is deleted.
ValueName A string that contains the name of the value to be deleted.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
If ValueName is specified, this method will delete only the value specified by ValueName that is contained by
RegistryKey. If ValueName is empty, the entire RegistryKey and all its sub keys are deleted.
This method deletes the registry key or registry value from both the overlay and the persistent storage.
You must use an administrator account to change any properties or call any methods that change the
configuration settings.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_RegistryFilter.FindExclusion
3/5/2021 • 2 minutes to read
Checks if a specific registry key is excluded from being filtered by Unified Write Filter (UWF).
Syntax
UInt32 FindExclusion(
[in] string RegistryKey,
[out] boolean bFound
);
Parameters
RegistryKey [in] A string that contains the full path of the registry key.
bFound [out] Indicates if the RegistryKey is in the exclusion list of registry keys.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_RegistryFilter.GetExclusions
3/5/2021 • 2 minutes to read
Retrieves all registry key exclusions from a device that is protected by Unified Write Filter (UWF).
Syntax
UInt32 GetExclusions(
[out, EmbeddedInstance("UWF_ExcludedRegistryKey")] string ExcludedKeys[]
);
Parameters
ExcludedKeys [out] An array of UWF_ExcludedRegistryKey objects that represent the registry keys excluded from
UWF filtering.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
If this method does not find any registry keys in the registry key exclusion list, it sets the ExcludedKeys
parameter to null.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_RegistryFilter.RemoveExclusion
3/5/2021 • 2 minutes to read
Removes a registry key from the registry exclusion list for Unified Write Filter (UWF).
Syntax
UInt32 RemoveExclusion(
string RegistryKey
);
Parameters
RegistryKey A string that contains the full path of the registry key.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
You must restart the device before the registry key is excluded from UWF filtering.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_Servicing
1/18/2019 • 2 minutes to read
This class contains properties and methods that enable you to query and control Unified Write Filter (UWF)
servicing mode.
Syntax
class UWF_Servicing {
[key, read] boolean CurrentSession;
[read] boolean ServicingEnabled;
UInt32 Enable();
UInt32 Disable();
UInt32 UpdateWindows(
[out] UInt32 UpdateStatus
);
};
Members
The following tables list the methods and properties that belong to this class.
Methods
M ET H O D DESC RIP T IO N
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
Remarks
This class only has two instances, one for the current session, and another for the next session that follows a
restart.
Example
The following example shows how to enable and disable UWF servicing mode on a device by using the
Windows Management Instrumentation (WMI) provider in a PowerShell script.
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
if ($nextSession) {
$nextSession.Enable() | Out-Null;
Write-Host "This device is enabled for servicing mode after the next restart."
}
if ($nextSession) {
$nextSession.Disable() | Out-Null;
Write-Host "Servicing mode is now disabled for this device."
}
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter
UWF_Servicing.Disable
3/5/2021 • 2 minutes to read
Syntax
UInt32 Disable();
Parameters
None.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
When this method is called, the system will leave servicing mode in the next session after a restart.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Servicing
Unified Write Filter
UWF_Servicing.Enable
3/5/2021 • 2 minutes to read
Syntax
UInt32 Enable();
Parameters
None.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
When this method is called, the system will enter servicing mode in the next session after a restart.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Servicing
Unified Write Filter
UWF_Servicing.UpdateWindows
3/5/2021 • 2 minutes to read
Calls Windows Update to download and install critical and security updates for your device running
Windows 10 Enterprise.
Syntax
UInt32 UpdateWindows(
[out] UInt32 UpdateStatus
);
Parameters
UpdateStatus [out] An integer that contains the status of the Windows Update operation, according to the
following table:
0 Success.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
This method is meant to be used as part of a servicing script. For more information, see Service UWF-protected
devices.
This method does not disable or enable Unified Write Filter (UWF). If you call this method while UWF is enabled,
updates may be lost when the device restarts.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Servicing
Unified Write Filter
UWF_Volume
3/5/2021 • 7 minutes to read
Syntax
class UWF_Volume {
[key, Read] boolean CurrentSession;
[key, Read] string DriveLetter;
[key, Read] string VolumeName;
[Read, Write] boolean BindByDriveLetter;
[Read] boolean CommitPending;
[Read, Write] boolean Protected;
};
Members
The following tables list the methods and properties that belong to this class.
Methods
M ET H O D DESC RIP T IO N
UWF_Volume.AddExclusion Adds a file or folder to the file exclusion list for a volume
protected byUWF.
UWF_Volume.RemoveAllExclusions Removes all files and folders from the file exclusion list
for a volume protected byUWF.
UWF_Volume.RemoveExclusion Removes a specific file or folder from the file exclusion list
for a volume protected byUWF.
Properties
P RO P ERT Y DATA T Y P E Q UA L IF IERS DESC RIP T IO N
Remarks
You must use an administrator account to change any properties or call any methods that change the
configuration settings.
Turn UWF protection on or off
The following example demonstrates how to protect or unprotect a volume with UWF by using the Windows
Management Instrumentation (WMI) provider in a PowerShell script.
The PowerShellscript creates a function, Set-ProtectVolume , that turns UWF protection on or off for a volume.
The script then demonstrates how to use the function.
$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
# Create a function to protect or unprotect a volume based on the drive letter of the volume
# Each volume has two entries in UWF_Volume, one for the current session and one for the next session after
a restart
# You can only change the protection status of a drive for the next session
# If a volume entry is found for the drive letter, enable or disable protection based on the $enabled
parameter
if ($nextConfig) {
# If the drive letter does not match a volume, create a new UWF_volume instance
else {
Write-Host "Error: Could not find $driveLetter. Protection is not enabled."
}
}
# The following sample commands demonstrate how to use the Set-ProtectVolume function
# to protect and unprotect volumes
function Get-FileExclusions($driveLetter) {
# This function lists the UWF file exclusions for a volume, both
# for the current session as well as the next session after a restart
# Get the UWF_Volume configuration for the next session after a restart
if ($currentConfig) {
Write-Host "The following files and folders are currently excluded from UWF filtering for
$driveLetter";
$currentExcludedList = $currentConfig.GetExclusions()
if ($currentExcludedList) {
foreach ($fileExclusion in $currentExcludedList.ExcludedFiles) {
Write-Host " " $fileExclusion.FileName
}
} else {
Write-Host " None"
}
} else {
Write-Error "Could not find drive $driveLetter";
}
if ($nextConfig) {
Write-Host ""
Write-Host "The following files and folders will be excluded from UWF filtering for $driveLetter
after the next restart:";
$nextExcludedList = $nextConfig.GetExclusions()
if ($nextExcludedList) {
foreach ($fileExclusion in $nextExcludedList.ExcludedFiles) {
Write-Host " " $fileExclusion.FileName
}
} else {
Write-Host " None"
}
Write-Host ""
}
}
}
# Get the configuration for the next session for the volume
if ($nextConfig) {
$nextConfig.AddExclusion($exclusion) | Out-Null;
Write-Host "Added exclusion $exclusion for $driveLetter";
} else {
Write-Error "Could not find drive $driveLetter";
}
}
# Get the configuration for the next session for the volume
if ($nextConfig) {
try {
$nextConfig.RemoveExclusion($exclusion) | Out-Null;
Write-Host "Removed exclusion $exclusion for $driveLetter";
} catch {
Write-Host "Could not remove exclusion $exclusion on drive $driveLetter"
}
} else {
Write-Error "Could not find drive $driveLetter";
}
}
function Clear-FileExclusions($driveLetter) {
# Get the configuration for the next session for the volume
if ($nextConfig) {
$nextConfig.RemoveAllExclusions() | Out-Null;
Write-Host "Cleared all exclusions for $driveLetter";
} else {
Write-Error "Could not clear exclusions for drive $driveLetter";
}
}
Clear-FileExclusions "C:"
Get-FileExclusions "C:"
Get-FileExclusions "C:"
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter
UWF_Volume.AddExclusion
3/5/2021 • 2 minutes to read
Adds a file or folder to the file exclusion list for a volume protected by Unified Write Filter (UWF).
Syntax
UInt32 AddExclusion(
string FileName
);
Parameters
FileName A string that contains the full path of the file or folder relative to the volume.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
You must use an administrator account to add or remove file or folder exclusions during run time, and you must
restart the device for new exclusions to take effect.
IMPORTANT
You can’t add exclusions for the following items:
The volume root. For example, C: or D:.
The \Windows folder on the system volume.
The \Windows\System32 folder on the system volume.
The \Windows\system32\drivers folder on the system volume.
Paging files.
However, you can exclude subdirectories and files under these items.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Commits changes from the overlay to the physical volume for a specified file on a volume protected by Unified
Write Filter (UWF).
Syntax
UInt32 CommitFile(
[in] string FileName
);
Parameters
FileName [in] A string that contains the path of the file to commit on the overlay, but does not include the drive
letter or volume name. For example, “\users\test.dat”.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error constant.
Remarks
The FileName must contain the name of a file that exists. The CommitFile method cannot commit a file that
does not exist.
You must use an administrator account to change any properties or call any methods that change the
configuration settings.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.CommitFileDeletion
3/5/2021 • 2 minutes to read
Deletes the specified file and commits the deletion to the physical volume.
Syntax
UInt32 CommitFileDeletion(
string FileName
);
Parameters
FileName [in] A string that contains the path of the file to delete, but does not include the drive letter or volume
name. For example: “\users\test.dat”.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error constant.
Remarks
The FileName must contain the name of a file that exists on the physical volume. The CommitFileDeletion
method cannot delete a file that does not exist.
You must use an administrator account to call this method.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.FindExclusion
3/5/2021 • 2 minutes to read
Checks if a specific file or folder is in the exclusion list for a volume protected by Unified Write Filter (UWF).
Syntax
UInt32 FindExclusion (
[in] string FileName,
[out] boolean bFound
);
Parameters
FileName [in] A string that contains the full path of the file or folder relative to the volume.
bFound [out] Indicates if FileName is in the file exclusion list for the volume.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error constant.
Remarks
FindExclusion sets bFound to true only for file and folder exclusions that have been explicitly added to the
exclusion list. Files and subfolders that are in an excluded folder are not identified as excluded by
FindExclusion , unless they have been explicitly excluded.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.GetExclusions
3/5/2021 • 2 minutes to read
Gets a list of all file exclusions for a Unified Write Filter (UWF) protected volume.
Syntax
UInt32 GetExclusions(
[out, EmbeddedInstance("UWF_ExcludedFile")] string ExcludedFiles[]
);
Parameters
ExcludedFiles
[out] An array of UWF_ExcludedFile objects that represent the files and folders that are excluded from UWF
filtering for a volume.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error constant.
Remarks
If GetExclusions does not find any files or folders in the file exclusion list for the volume, GetExclusions sets
the ExcludedFiles parameter to null.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.Protect
3/5/2021 • 2 minutes to read
Enables Unified Write Filter (UWF) to protect the volume after the next system restart, if UWF is enabled after
the restart.
Syntax
UInt32 Protect();
Parameters
None.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error constant.
Remarks
UWF starts protecting the volume after the next device restart in which UWF is enabled.
This method does not enable UWF if it is disabled; you must explicitly enable UWF for the next session to start
volume protection.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.RemoveAllExclusions
3/5/2021 • 2 minutes to read
Removes all files and folders from the file exclusion list for a volume protected by Unified Write Filter (UWF).
Syntax
UInt32 RemoveAllExclusions();
Parameters
None.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI errorj constant.
Remarks
This command does not remove registry exclusions.
You must use an administrator account to remove file or folder exclusions, and you must restart the device for
this change to take effect.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.RemoveExclusion
3/5/2021 • 2 minutes to read
Removes a specific file or folder from the file exclusion list for a volume protected by Unified Write Filter (UWF).
Syntax
UInt32 RemoveExclusion(
string FileName
);
Parameters
FileName A string that contains the full path of the file or folder relative to the volume.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error constant.
Remarks
You must use an administrator account to remove file or folder exclusions, and you must restart the device for
this change to take effect.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.SetBindByDriveLetter
3/5/2021 • 2 minutes to read
Sets the BindByDriveLetter property, which indicates if the Unified Write Filter (UWF) volume is bound to the
physical volume by drive letter or volume name.
Syntax
UInt32 SetBindByDriveLetter(
boolean bBindByDriveLetter
);
Parameters
bBindByDriveLetter A Boolean value that indicates the type of binding to use. The BindByDriveLetter property
is set to this value.
VA L UE DESC RIP T IO N
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error.
Remarks
Binding by volume name is considered more reliable than binding by drive letter, since drive letters can change
for a volume if devices are added or removed.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Disables UWF protection of the volume after the next system restart.
Syntax
UInt32 Unprotect();
Parameters
None.
Return Value
Returns an HRESULT value that indicates WMI status or a WMI error constant.
Remarks
Unprotecting the volume does not remove the UWF_Volume entry or any configuration settings from the UWF
configuration registry. This means that you can unprotect a volume, and then protect it again later, while keeping
any file exclusions or volume configurations that you have defined.
Requirements
W IN DO W S EDIT IO N SUP P O RT ED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
Windows Embedded Systems7 Enhanced Write
Filter to Windows 10 Unified Write Filter
5/13/2021 • 3 minutes to read
Allowing UWF swapfile (aka. DISK Overlay) to be created and used on any volume
We added ability for Overlay in DISK mode to use file on any available volume unrelated to whether the volume
is protected or not. The main purpose for the change is to allow booting from devices susceptible to wear by
writings (such as Flash/SD/SSD devices) while redirecting the DISK overlay to less “precious” media. Prior to that
change, DISK mode Overlay was exclusively restricted to OS (aka C:) volume.
New subcommand “create-swapfile” was introduced under “uwfmgr.exe volume” to allow user control over the
location of the DISK mode Overlay swapfile. This command requires volume DOS name (such as C:, D:, and so
on.) or volume GUID as argument. The initial size of the file is deduced from the size of the Overlay at the time
and may be later changed by issuing “uwfmgr.exe overlay set-size” subcommand. The new subcommand
“create-swapfile” is only allowed when UWF filter is disabled and UWF Overlay is in DISK mode.
NOTE
After enabling Read-Only Media mode, all writes will be filtered out as earlier as next reboot, so anything that
is written until then may cause changes on the physical device.
All existing exclusions are ignored (nonfunctional) and no file/registry commits are possible in Read Only
Media mode. See "Full Volume Commit" in this document).
Enabling Read Only Media mode is only possible when UWF is configured to use RAM overlay.
UWF CSP provider was updated by allowing setting new bit (0x4) in CFG_DATATYPE_INTEGER
UnifiedWriteFilter\NextSession\OverlayFlags property.
After the implementation of Read-Only Media mode we were able to make HORM mode transitions significantly
more consistent, safe, and reliable. To enable HORM mode, UWF must be configured and booted into Read Only
Media mode, which eliminates the need for user to care about exclusions and situation where HORM
enablement is not possible by other reasons.
Full Volume Commit in Read-Only Media mode
After introduction of Read-Only Media mode, we were able to implement ability to commit entire state of the
UWF protected volumes to the physical disk at once, which was architecturally impossible before in presence of
active file/registry exclusions.
The new subcommand “commit” was introduced under "uwfmgr.exe overlay" to allow the user to commit all
accumulated changes since, previous boot and all following changes until next reboot to the underlying physical
device. After successful “full volume commit” and until the next reboot OS behaves like being totally
unprotected. Protection is restored on the next reboot.
NOTE
The UWFMgr tool can be used at the command-line or in PowerShell to configure and retrieve settings for
Unified Write Filter (UWF).
IMPORTANT
Users with standard accounts can use commands that retrieve information, but only users who have administrator
accounts can use commands that change the configuration settings.
Syntax
uwfmgr.exe
Help | ?
Get-Config
Filter
Help | ?
Enable
Disable
Reset-Settings
Shutdown
Restart
Volume
Help | ?
Get-Config {<volume> | all}
Protect {<volume> | all}
Unprotect <volume>
File
Help | ?
Get-Exclusions {<volume> | all}
Add-Exclusion <file>
Remove-Exclusion <file>
Commit <file>
Commit-Delete <file>
Registry
Help | ?
Get-Exclusions
Add-Exclusion <key>
Remove-Exclusion <key>
Commit <key> [<value>]
Commit-Delete <key> [<value>]
Overlay
Help | ?
Get-Config
Get-AvailableSpace
Get-Consumption
Set-Size <size>
Set-Type {RAM | DISK}
Set-WarningThreshold <size>
Set-CriticalThreshold <size>
Set-Passthrough <on/off>
Set-Persistent <on/off>
Reset-PersistentState <on/off>
Servicing
Enable
Disable
Update-Windows
Get-Config
Help
Location
Uwfmgr can be found under the %WINDIR%\System32\ folder.
Related topics
Unified Write Filter
Windows System Image Manager Technical
Reference
3/5/2021 • 2 minutes to read
Windows System Image Manager (Windows SIM) is the tool that you use to create unattended Windows Setup
answer files.
Windows SIM is included with the Windows ADK. Download the Windows ADK from this website.
You can create an answer file by using information from a Windows image (.wim) file and a catalog (.clg) file.
Component settings are added to an appropriate configuration pass in the answer file. You can also add
packages to be installed during Windows Setup. The following topics describe conceptual information about
Windows SIM.
IMPORTANT
If you experience problems creating catalog files by using Windows SIM, see Windows Image Files and Catalog Files
Overview. This topic contains information about known issues and workarounds for creating catalog files.
In This Section
Windows System Image Manager Overview Topics Provides an overview of Windows SIM, the user
interface, and important concepts for deploying
Windows.
Windows System Image Manager How-to Topics Provides how-to instructions for using Windows SIM.
Windows System Image Manager Reference Topics Describes reference information for Windows SIM. This
information includes components and settings and how
Windows SIM works.
Related topics
Deployment Image Servicing and Management (DISM) Technical Reference
Windows System Image Manager Overview Topics
1/18/2019 • 2 minutes to read
Windows® System Image Manager (Windows SIM) is a GUI that you use to create and manage answer files.
Answer files are .xml files that are used in Windows Setup, Sysprep , Deployment Image Servicing and
Management (DISM), and other deployment tools to configure and customize the default Windows installation.
You can access Windows SIM by searching for "Windows System Image Manager" on your computer.
You can use answer files to customize different aspects of Windows, including the default language settings, the
partitions to create and format during installation, and the default settings for the Windows Internet Explorer®
home page.
You can use Windows SIM to do the following:
Create and manage answer files.
Validate the settings of an answer file against a Windows image (.wim) file.
View all of the configurable component settings in a Windows image.
Create a configuration set that contains a complete set of portable folders with Setup files.
Add third-party drivers, applications, or other packages to an answer file.
In This Section
Windows System Image Manager Scenarios Overview Describes Windows SIM scenarios and when to use
which scenario.
Windows System Image Manager User Interface Describes the user interface of Windows SIM.
Overview
Windows Image Files and Catalog Files Overview Describes conceptual information about Windows image
files and catalog (.clg) files.
Best Practices for Authoring Answer Files Describes recommendations to consider when you are
creating and managing answer files.
Distribution Shares and Configuration Sets Overview Describes information about distribution shares, how
they work, and when to create a configuration set.
Related topics
Windows System Image Manager How-to Topics
Windows System Image Manager Reference Topics
Windows System Image Manager Scenarios
Overview
3/5/2021 • 5 minutes to read
Windows® System Image Manager (Windows SIM) creates and manages unattended Windows Setup answer
files in a GUI.
Answer files are .xml files that are used during Windows Setup to configure and customize the default Windows
installation.
For example, you can use Windows SIM to create an answer file that partitions and formats a disk before
installing Windows. Windows SIM also changes the default setting for the Windows Internet Explorer® home
page, and it configures Windows to boot to audit mode after installation. By modifying settings in the answer
file, Windows SIM can also be used to install third-party applications, device drivers, language packs, and other
updates.
NOTE
Windows SIM does not modify the Windows image itself. You use Windows SIM only to create an answer file. During
Windows Setup, the answer file applies the settings to the Windows installation. Windows SIM does not modify the
settings in a Windows image (.wim) file.
NOTE
By using the Microsoft-Windows-PnpCustomizationsWinPE component, you must add boot-critical device drivers
that are required for installation during the windowsPE configuration pass. For more information, see How to Add
Device Drivers by Using Windows Setup. You can also use Deployment Image Servicing and Management (DISM ) to add
device drivers to an offline image. For more information, see How to Add and Remove Drivers Offline.
Related topics
Windows Setup Technical Reference
Deployment Image Servicing and Management (DISM) Technical Reference
System Preparation (Sysprep) Technical Reference
Windows System Image Manager User Interface
Overview
1/18/2019 • 5 minutes to read
The Windows System Image Manager (Windows SIM) user interface contains a series of panes. You can use
these panes to open Windows image (.wim ) files, create unattended answer files, and then add components and
packages to the respective configuration passes in an answer file.
The following screen shot illustrates the Windows SIM user interface.
Save Answer File As… Opens a dialog box to enable naming of the answer file
with which you are currently working.
Close Distribution Share Closes the currently open distribution share folder.
Close Windows Image Closes the currently open Windows image file.
Edit Menu
M EN U C O M M A N D DESC RIP T IO N
Write Image Value Writes the value of the setting in the currently open
Windows image to the answer file.
Add to Answer File For components, a submenu opens that shows the
available passes. The item and its children are added to
the Unattend.xml answer file. Packages are automatically
added to the packages section of the Unattend.xml
answer file.
Insert Menu
M EN U C O M M A N D DESC RIP T IO N
Driver Path Adds a driver path to a configuration pass. You can use
Driver Path to select the configuration pass in which to
add the driver path. Driver Path then opens a window
where you can select a file or folder.
Tools Menu
M EN U C O M M A N D DESC RIP T IO N
Validate Answer File Validates the XML and other settings in the answer file.
Settings are validated against the currently open
Windows image.
M EN U C O M M A N D DESC RIP T IO N
Create Catalog Generates a catalog file. For more information, see Open
a Windows Image or Catalog File.
Help Menu
M EN U C O M M A N D DESC RIP T IO N
Validate Answer File Validates the answer file against the settings in the
opened catalog file.
Related topics
Windows System Image Manager Scenarios Overview
Windows System Image Manager Overview Topics
Windows Image Files and Catalog Files Overview
3/5/2021 • 4 minutes to read
Windows System Image Manager (Windows SIM) uses Windows image (.wim) files and catalog (.clg) files to
display the available components and packages that can be added to an answer file (Unattend.xml ). Windows
images and catalog files contain configurable settings that you can modify after the component or package is
added to an answer file.
TIP
Install.wim is located in the Sources folder of your Windows Installation Media download. See OEM deployment of
Windows 10 for desktop editions for steps to make and deploy Windows images.
You can open Windows SIM by searching your computer for "Windows System Image Manager".
Supported architectures
Windows SIM can create catalog files for Windows images of the following architecture types
An answer file is an XML-based file that contains setting definitions and values to use during Windows Setup. In
an answer file, you specify various setup options. These options include how to partition disks, where to find the
Windows image that will be installed, and which product key to apply. You can also specify values that apply to
the Windows installation, such as names of user accounts and display settings. The answer file for Setup is
typically called Unattend.xml.
Answer files that are created in Windows System Image Manager (Windows SIM) are associated with a
particular Windows image. You can therefore validate the settings in the answer file to the settings in the
Windows image. However, because any answer file can be used to install any Windows image, if there are
settings in the answer file for components that are not in the Windows image, those settings are ignored. For
information about how to create answer files, see Best Practices for Authoring Answer Files.
Related topics
Create or Open an Answer File
Windows System Image Manager Overview Topics
Best Practices for Authoring Answer Files
3/5/2021 • 6 minutes to read
NOTE
Delete the answer file only if no settings will be processed during the oobeSystem configuration pass. The
oobeSystem configuration pass is processed immediately before Out-Of-Box Experience (OOBE) starts. This is
typically the first time that a customer turns on the computer. If you delete the answer file from this folder, those
settings will not be processed.
Do Not Overwrite Existing Files When You Are Using Data Images or
$OEM$ Folders
When you add data, such as additional drivers or applications, do not overwrite Windows system files.
Overwriting system files can corrupt your computer. For information about how to add drivers and applications,
see How to Create a Data Image and How to Manage Files and Folders in a Distribution Share.
WARNING
Never overwrite Windows system files by using $OEM$ subfolders or data images.
If you have additional device drivers to add to a computer, add these drivers offline by using DISM . You can also
include additional drivers in an unattended installation by using the Microsoft-Windows-
PnPCustomizationsNonWinPE and Microsoft-Windows-PnPCustomizationWinPE components. For
more information, see How to Add and Remove Drivers Offline.
Related topics
Windows System Image Manager (Windows SIM) Technical Reference
Sysprep Overview
Windows Setup Technical Reference
Deployment Image Servicing and Management (DISM)
Distribution Shares and Configuration Sets
Overview
3/5/2021 • 5 minutes to read
A distribution share is an optional set of folders that contain custom scripts, images, branding, applications,
drivers, and other files. These files can be copied to Windows® during installation through an answer file
(Unattend.xml).
During installation, Windows connects to the path of the server share by using the credentials that you specify
in an answer file. Only the files that you specify in the answer file are copied to the Windows installation.
If you are installing Windows in an environment that does not have a network share or server share, you can
copy the necessary files from the distribution share to a configuration set. A configuration set is a subset of the
files in a distribution share. You can copy a configuration set to external storage, such as a USB flash drive or an
external hard disk, to use during installation.
IMPORTANT
Do not overwrite existing files that are carried and serviced by the operating system. Using the $OEM$ folder to update
or overwrite these files can cause the operating system to behave unpredictably and cause serious issues.
The following table describes the $OEM$ folder and its subfolders.
F O L DER DEF IN IT IO N
Out-of-Box Drivers
Drivers are a type of software that enables hardware or devices to function.
The Out-of-Box Drivers folder includes additional device drivers that you install during Windows Setup by
using Windows SIM. Windows Setup uses the following types of drivers:
In-box drivers . Windows Setup handles in-box drivers the same way that it handles packages.
Out-of-box drivers . By using Windows SIM, you can add out-of-box device drivers that are based on .inf
files. Typically, these out-of-box drivers are processed during the auditSystem configuration pass. Your .inf-
based out-of-box drivers must be in a distribution-share subfolder that is called Out-of-Box Drivers. For more
information, see How to Manage Files and Folders in a Distribution Share.
In-box drivers that are installed via a .msi file. In-box drivers that require a .msi file are added the
same way that applications are added.
NOTE
By using the Microsoft-Windows-PnpCustomizationsWinPE component, you must add boot-critical device
drivers that are required for installation during the windowsPE configuration pass. For more information, see
How to Add Device Drivers by Using Windows Setup. You can also add device drivers to an offline image by using
Deployment Image Servicing and Management (DISM ). For more information, see How to Add and Remove
Drivers Offline.
Packages
The Packages folder is a location for Windows software updates. Package types include service packs, security
updates, language packs, and other packages that Microsoft issues. You must use Windows SIM to import
packages to a distribution share. After a package is imported and available in the Distribution Share pane, you
can add the package to the answer file. For more information, see How to Add Packages to a Distribution Share.
Configuration Sets
After an answer file (Unattend.xml ) has been validated and saved, you can create a configuration set. A
configuration set is a subset of a distribution share that you can create by using Windows SIM. Configuration
sets are useful when a network share is not available. You can store configuration sets on removable media and
use them in the field. Creating a configuration set exports binaries that are referenced in the answer file and
puts them together in a self-contained file set that can be accessed from the Unattend.xml file.
Contents of a Configuration Set
A configuration set contains a complete collection of files, drivers, applications, patches, and answer files that are
used to customize Windows installations. A configuration set contains all the required binaries, which are
packaged with an associated answer file (Unattend.xml ).
Benefits of Configuration Sets
Using configuration sets for unattended installations provides the following benefits:
A configuration set is a smaller and more portable version of a distribution share, which can have a size of
several gigabytes. You can use configuration sets to install Windows operating systems while you are in the
field.
Configuration sets are completely self-contained and have no references outside the file set.
You can duplicate a configuration set and then edit it for each computer model that you manufacture and
release.
IMPORTANT
If a configuration set is used during Windows Setup, all the contents at the root of the media where the answer file exists
are copied to the Windows installation. Having many files and folders at the same level as the answer file might slow
down installation. In some cases, you might run out of disk space.
Related topics
How to Create or Open a Distribution Share
How to Manage Files and Folders in a Distribution Share
How to Add Packages to a Distribution Share
Windows SIM Technical Reference
Windows System Image Manager How-to Topics
3/5/2021 • 2 minutes to read
The following topics describe how to use Windows System Image Manager (Windows SIM).
In This Section
Open a Windows Image or Catalog File Open a Windows image in Windows SIM and create a
catalog (.clg) file.
Create or Open an Answer File Use Windows SIM to open or create an answer file.
Configure Components and Settings in an Answer File Use Windows SIM to add a component or change a
setting in an answer file.
Validate an Answer File Use Windows SIM to validate an answer file against a
Windows image.
Hide Sensitive Data in an Answer File Hide sensitive data, such as local account passwords, in
an answer file.
Add a Device Driver Path to an Answer File Add a path for a device driver to an answer file.
Add a Package to an Answer File Add a package, such as a language pack, to an answer
file.
Add a Custom Command to an Answer File Create a custom command to run during installation.
Find a Component, Setting, or Package in Windows SIM Use Windows SIM to find a component, setting, or
package.
Create or Open a Distribution Share Use Windows SIM to create or open a distribution share.
Manage Files and Folders in a Distribution Share Add files and folders, or remove files and folders, from a
distribution share.
Add Packages to a Distribution Share Use Windows SIM to add a package, such as a language
pack, to a distribution share.
Related topics
Windows Deployment Options
Windows System Image Manager Technical Reference
Open a Windows Image or Catalog File
3/5/2021 • 2 minutes to read
When you open a Windows® image (.wim) file in Windows System Image Manager (Windows SIM), a catalog
(.clg) file is automatically created. If a catalog file already exists, Windows SIM re-creates the catalog file based
on the contents of the Windows image that you select. When a catalog file is created, it queries the Windows
image for a listing of all the settings in that image.
To create an answer file, you must first open a Windows image file or catalog file in Windows SIM. For more
information about Windows image files and catalog files, see Windows Image Files and Catalog Files Overview.
TIP
Install.wim is located in the Sources folder of your Windows Installation Media download. See OEM deployment
of Windows 10 for desktop editions for steps to make and deploy Windows images.
2. On the technician computer, open Windows SIM. One way to do this is to search for "Windows System
Image Manager".
3. On the File menu, click Select Windows Image .
4. In the Select a Windows Image dialog box, select the file type in the Files of type drop-down list, and
then browse to a Windows image file or catalog file. If you open a Windows image file, Windows SIM will
automatically create a catalog of that Windows image.
5. If there is more than one type of Windows image in the file, select a specific Windows image in the
Select an Image box. The Windows image file or catalog file appears in the Windows Image pane.
6. Click Open . If you have not previously opened that Windows image file or have not refreshed the catalog
file recently, Windows SIM prompts you to create or re-create the catalog file.
Troubleshooting
If Windows SIM does not create the catalog file, try the following steps:
Make sure you are using the Windows 8.1 version of the Windows Assessment and Deployment Kit
(Windows ADK).
To create a catalog file for 32-bit or ARM-based PCs, use a 32-bit PC.
Make sure the Windows base-image file (Install.wim) is in a folder that has read-write privileges, such as a
USB flash drive or on your hard drive.
IMPORTANT
Windows SIM cannot create catalog files for some Windows images of different architecture types. For information about
the support of cross-platform catalog creation, see Windows Image Files and Catalog Files Overview.
Related topics
Windows System Image Manager How-to Topics
Create or Open an Answer File
1/18/2019 • 2 minutes to read
The following procedure describes how to create a new answer file or open an existing answer file by using
Windows® System Image Manager (Windows SIM).
After you create or open an answer file, you can add settings and packages to it. For more information, see
Configure Components and Settings in an Answer File and Add a Package to an Answer File.
NOTE
The Windows image file that generated the answer file also opens if it is still in its original location.
Troubleshooting
In some cases, Windows SIM might display validation errors when opening an existing answer file. If this
happens, try the following options:
Problems with individual settings in an answer file appear in the Messages pane. Use this information to
identify and address the problem.
If the answer file opens, but all the settings are listed as “does not exist” in the Messages pane, then the file
you’re using might be for the wrong PC architecture – for instance, your original answer file might be based
on x86, and your Windows catalog file is amd64. To fix this, you can find and replace
processorArchitecture="x86" for processorArchitecture="amd64" and re-open the file.
If Windows SIM can’t open the file at all, this often means there’s some malformed XML in the answer file.
You can often narrow down the problem by cutting out sections of the answer file, one large block at a time,
and trying again to re-open the file.
Related topics
Windows System Image Manager How-to Topics
Configure Components and Settings in an Answer File
Validate an Answer File
Hide Sensitive Data in an Answer File
Add a Device Driver Path to an Answer File
Add a Package to an Answer File
Add a Custom Command to an Answer File
Find a Component, Setting, or Package in Windows SIM
Configure Components and Settings in an Answer
File
1/18/2019 • 2 minutes to read
NOTE
To search the entire Windows image (.wim) file, press Ctrl+F.
IMPORTANT
Each list item should contain a unique Key value to differentiate the list item from other list items of the same type.
Related topics
Windows System Image Manager How-to Topics
Create or Open an Answer File
Validate an Answer File
Hide Sensitive Data in an Answer File
Add a Device Driver Path to an Answer File
Add a Package to an Answer File
Add a Custom Command to an Answer File
Find a Component, Setting, or Package in Windows SIM
Validate an Answer File
1/18/2019 • 2 minutes to read
Before you can save an answer file, you must validate the settings. After you successfully validate an answer file,
you can apply all the setting values in the answer file to the Windows® image.
1. Open Windows System Image Manager (Windows SIM).
2. Open a Windows image. For more information, see Open a Windows Image or Catalog File.
3. Create or open an answer file. For more information, see Create or Open an Answer File.
4. On the Tools menu, click Validate Answer File .
Windows SIM compares the setting values in the answer file with the available settings in the Windows image.
If the answer passes validation, a message appears in the Messages pane on the Validation tab. This
message verifies that no warnings or errors occurred in the answer file. Otherwise, error messages appear in
the same location.
If an error occurs, double-click the error in the Messages pane to browse to the setting.
If no modifications have been made to component settings, the values of the component settings are not
saved in the answer file.
Related topics
Windows System Image Manager How-to Topics
Create or Open an Answer File
Configure Components and Settings in an Answer File
Hide Sensitive Data in an Answer File
Add a Device Driver Path to an Answer File
Add a Package to an Answer File
Add a Custom Command to an Answer File
Find a Component, Setting, or Package in Windows SIM
Hide Sensitive Data in an Answer File
1/18/2019 • 2 minutes to read
You can use Windows® System Image Manager (Windows SIM) to hide the password for the administrator
account, and for any other user accounts on the local system, in an answer file. Hiding passwords in an answer
file prevents users from reading the answer file and identifying passwords for local accounts.
The settings that you can hide include the following:
Microsoft-Windows-Shell-Setup | AutoLogon | Password
Microsoft-Windows-Shell-Setup | UserAccounts | AdministratorPassword
Microsoft-Windows-Shell-Setup | UserAccounts | LocalAccounts | LocalAccount | Password
This option only hides the passwords in an answer file. It does not provide encryption or other security benefits.
Consider answer files as sensitive data and be careful about authorizing access to your answer files.
NOTE
You can hide only local account passwords in an answer file. Domain passwords, product keys, and other sensitive data
may still be available as clear text in an answer file.
NOTE
Windows SIM adds the PlainText element to the answer file. This element is used during Windows Setup to indicate
whether or not the password is in plain text.
Related topics
Windows System Image Manager How-to Topics
Create or Open an Answer File
Configure Components and Settings in an Answer File
Validate an Answer File
Add a Device Driver Path to an Answer File
Add a Package to an Answer File
Add a Custom Command to an Answer File
Find a Component, Setting, or Package in Windows SIM
Add a Device Driver Path to an Answer File
1/18/2019 • 2 minutes to read
The following procedure describes how to add a device driver path to an answer file by using Windows®
System Image Manager (Windows SIM).
This device-driver path is used to process additional out-of-box device drivers during Windows Setup. Out-of-
box device drivers can be copied to a Windows image during the windowsPE configuration pass. In this
configuration pass, you can add boot-critical drivers to a Windows image before that image is installed.
NOTE
You can add more drivers to the Windows installation during the auditSystem configuration pass.
When you select a driver path, you select a folder that contains one or more .inf drivers. The folder path is added
to the answer file and, during an unattended installation, is referenced to find all drivers in the path and install
them.
You can add only .inf drivers to a Windows image by using this procedure. You must install drivers that are
packaged as a .exe file or other file types on a running Windows operating system.
To add a device-driver path to an answer file:
1. Open Windows SIM.
2. Create or open an answer file. For more information, see Create or Open an Answer File.
3. On the Inser t menu, click Driver Path .
4. Select the configuration pass in which you want to install the driver. This can be the windowsPE or the
auditSystem configuration pass.
NOTE
Adding a driver to the auditSystem configuration pass processes the driver during Audit mode only.
5. The Browse for Folder dialog box appears. Select the driver path that you want to add to the answer
file, and then click OK . The driver path is added to the answer file under the configuration pass that you
selected. Depending on the configuration pass that you selected, the driver path is included as a list item
to one of the following components:
Microsoft-Windows-PnpCustomizationsWinPE for the windowsPE configuration pass
Microsoft-Windows-PnpCustomizationsNonWinPE for the auditSystem configuration pass
NOTE
You can also drag drivers from an Out-of-Box Drivers folder in the Distribution Share pane to either
the windowsPE or auditSystem configuration pass in the Answer File pane. Or, right-click to add it.
Related topics
Windows System Image Manager How-to Topics
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
Add a Package to an Answer File
Add a Custom Command to an Answer File
Find a Component, Setting, or Package in Windows SIM
Add a Package to an Answer File
1/18/2019 • 2 minutes to read
The following procedures describe how to add a package to an answer file by using Windows® System Image
Manager (Windows SIM).
You can add a package to an answer file by using one of three options: from the Inser t menu, from the
Windows Image pane, or from an open distribution-share folder in the Distribution Share pane.
Related topics
Windows System Image Manager How-to Topics
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
Add a Device Driver Path to an Answer File
Add a Custom Command to an Answer File
Find a Component, Setting, or Package in Windows SIM
Add a Custom Command to an Answer File
1/18/2019 • 2 minutes to read
The following procedure describes how to configure a custom command to run automatically during
Windows Setup.
1. Open Windows System Image Manager (Windows SIM).
2. Create or open an answer file. For more information, see Create or Open an Answer File.
3. On the Inser t menu, point to Synchronous Command , and then click a configuration pass on the
submenu. The Create Synchronous Command dialog box opens.
4. In the Enter command line box, type the command-line syntax. In the Order box, select the order of the
commands that will run, and then click OK . The command is added to the answer file in the selected
configuration pass, as follows:
Commands that are added to the 1 windowsPE configuration pass appear in the setting
Microsoft-Windows-Setup\RunSynchronous .
Commands that are added to the 4 specialize or 6 auditUser passes configuration pass appear
in the setting Microsoft-Windows-Deployment\RunSynchronous .
Commands that are added to the 7 oobeSystem configuration pass appear in the setting
Microsoft-Windows-Shell-Setup\FirstLogonCommands .
NOTE
If you create a user account that does not include administrative rights, commands that are added to the
7 oobeSystem configuration pass may not be run. Details are as follows:
If User Account Control is enabled, a dialog box appears when that user logs on for the first time. The
dialog box provides an option to allow an administrator to apply the commands. If the user clicks
Cancel, these commands are not run.
If User Account Control is disabled, these commands are not run.
Related topics
Windows System Image Manager How-to Topics
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
Add a Device Driver Path to an Answer File
Add a Package to an Answer File
Find a Component, Setting, or Package in Windows SIM
Find a Component, Setting, or Package in Windows
SIM
1/18/2019 • 2 minutes to read
You can use Windows® System Image Manager (Windows SIM) to search for a component, setting, file in a
distribution share, or package name by using the Find feature. The following procedure describes how to use
Find.
1. Open Windows SIM.
2. On the Edit menu, click Find , or use the keyboard shortcut Ctrl+F. The Find dialog box appears.
3. In the Find what box, enter the search criteria.
4. In the Look in drop-down list, select from the currently open Windows image and answer file, a distribution
share, or the Messages pane.
5. Click Find Now .
Related topics
Windows System Image Manager How-to Topics
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
Add a Device Driver Path to an Answer File
Add a Package to an Answer File
Add a Custom Command to an Answer File
Create a Configuration Set
1/18/2019 • 2 minutes to read
The following procedure describes how to create a configuration set by using Windows® System Image
Manager (Windows SIM).
A configuration set is a smaller version of a distribution share and is more easily copied to removable media or
a network share. It is a collection of files that have been converted to binary form. These files are a self-
contained alternative to referencing a distribution share.
Because a configuration set contains only internal references, it can be used for both online and offline
installations. It can also be duplicated and changed for different types of installations.
1. Open Windows SIM.
2. Open an answer file. For more information, see Create or Open an Answer File.
3. On the Tools menu, click Create Configuration Set . The Create Configuration Set window opens.
4. Browse to the destination folder for the configuration set, or enter a folder name.
5. Select a folder that you want to copy to your $OEM$ folder (optional), and then click OK .
IMPORTANT
If a configuration set is used during Windows Setup, all of the contents at the root of the media where the answer file
exists are copied to the Windows installation. If there are many files and folders at the same level as the answer file,
Windows Setup copies all of the files and folders to the Windows installation. Note that this might slow down installation.
In some cases, you might run out of disk space.
Related topics
Windows System Image Manager How-to Topics
Manage Files and Folders in a Distribution Share
Add Packages to a Distribution Share
Create or Open a Distribution Share
Create or Open a Distribution Share
1/18/2019 • 2 minutes to read
A distribution share is an optional storage folder for third-party drivers, applications, and packages that
Microsoft issues (such as updates).
You can create a distribution-share folder by using Windows® System Image Manager (Windows SIM) or by
using a manual technique. The procedures in this topic describe how to create, open, and explore a distribution-
share folder.
NOTE
You must use Windows SIM to add packages. For more information, see Add Packages to a Distribution Share.
NOTE
Windows SIM recognizes only these subfolder names. For the distribution share to be valid, at least one of the four
folders must be present. To enable Windows SIM to read the subfolder contents, the subfolder names must match this list
exactly.
Related topics
Windows System Image Manager How-to Topics
Manage Files and Folders in a Distribution Share
Add Packages to a Distribution Share
Add Multilingual Support to a Windows Distribution
3/5/2021 • 3 minutes to read
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:
1. 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.
2. Update the Lang.ini file.
3. Use Setup to install the language packs that are in the distribution share.
Impor tant 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.
mkdir C:\my_distribution\langpacks
4. Create folders in the \Langpacks folder for each language pack you're adding
mkdir C:\my_distribution\Langpacks\fr-fr
5. Copy the language packs to the language-specific folders you created in \Langpacks . For example:
7. (Optional) To make additional languages available in Windows Setup, copy the localized Windows Setup
sources to the distribution share. For example:
9. 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
languages to Windows Setup.
11. Unmount the .wim file and commit the changes. For example:
You can now run Windows Setup. During the installation, you will be prompted to choose one of the
languages you added to the distribution share.
Related topics
DISM Languages and International Servicing Command-Line Options
Configure International Settings in Windows
Manage Files and Folders in a Distribution Share
1/18/2019 • 2 minutes to read
After a distribution-share folder is created, you can add files to the $OEM$ or Out-of-Box Drivers folders. You
cannot add packages directly to the Packages folder. You must use Windows® System Image Manager
(Windows SIM) to add packages to a distribution share. For more information, see Add Packages to a
Distribution Share.
You can make out-of-box device drivers (also called third-party drivers) available in Windows SIM by copying
device drivers to the Out-of-Box Drivers folder in a distribution share. You can use subfolders to organize out-
of-box drivers. When you add an Out-of-Box Drivers folder to an answer file, all drivers in the folder and
subfolders are also added. After drivers are copied to the appropriate folder, they are available through
Windows SIM and can be added to an answer file.
When you create a configuration set, you can use the $OEM$ folder to copy scripts, binaries, and other files to
Windows during installation. An answer file can reference files and folders stored in subfolders of \$OEM$ can
be referenced in an answer file. For more information, see Create a Configuration Set.
IMPORTANT
Do not overwrite existing files carried and serviced by the operating system. Overwriting system files can cause the
operating system to behave unpredictably and cause serious issues.
NOTE
The $OEM$ subfolders are organized in a specific structure. Copy files to the $OEM$ subfolders as
described in Distribution Shares and Configuration Sets Overview. For example, if you add files to
$OEM$\$1\Program Files\Application1 , Windows Setup will copy them to
C:\Program Files\Application1 on the Windows installation.
Packages are groups of files that Microsoft provides. These groups of files include service packs, security
updates, language packs, and modifications to Windows® features. You can add a package to a Windows
installation by using an answer file, a configuration set, or a distribution share.
You must use Windows System Image Manager (Windows SIM) to import packages. After a package is imported
and available in a distribution share, you can add the package to an answer file. For more information, see Add a
Package to an Answer File.
NOTE
For specific information about how to add language packs, see Add Multilingual Support to a Windows Distribution.
Related topics
Windows System Image Manager How-to Topics
Manage Files and Folders in a Distribution Share
Windows System Image Manager Reference Topics
3/5/2021 • 2 minutes to read
The following topics provide reference information about Windows System Image Manager (Windows SIM).
In This Section
Component Settings and Properties Reference Describes the structure of answer files, along with the
attributes and elements that components and settings
use.
Windows System Image Manager Architecture Describes how Windows SIM works.
Windows System Image Manager Supported Platforms Lists the supported platforms where you can install
Windows SIM.
Related topics
Windows Deployment Options
Windows System Image Manager Technical Reference
Component Settings and Properties Reference
3/5/2021 • 7 minutes to read
Windows System Image Manager (Windows SIM) displays the properties and settings of a selected component
or package in the Proper ties pane. You can use this pane to manage and view the component settings that are
available to change for each configuration pass. You can also use this pane to view properties and IDs where
applicable. In the case of packages, the pane displays Windows feature selections that you can change. Settings
that are not available for each component or package appear dimmed.
Component Settings
Component settings are the configurable aspects of each component in a Windows installation. For example,
you can configure the Windows Internet Explorer component setting Home_Page to open to a particular URL
by configuring the default value of the setting in the Proper ties pane of Windows SIM.
Component Properties
Component properties are non-configurable attributes of a component. The following table lists component
properties for components that have been added to an answer file.
AppliedConfigurationPass Specifies the configuration pass that all child settings are
applied to.
Component IDs
The component ID uniquely identifies the component of the operating system to which the settings belong. The
ID contains the name, version, architecture, and other information for the component that is selected in the
Windows Image pane or Answer File pane. The following table describes the different attributes of a
component.
ID DESC RIP T IO N
Package Properties
Package properties are non-configurable attributes of the package. Package properties appear when you select a
package in the Windows Image pane or Answer File pane. The following table describes the properties of
packages.
ProductName Specifies the product name that this package applies to.
Suppor tInformation Specifies the support information for the package. This
can contain contact information about the package
author.
Package Settings
Package settings are the configurable attributes of the package that is selected in the Answer File pane.
Package settings appear only when the package is selected in the Answer File pane because that is when you
can change them. The following table describes package settings
Primar ySourcePath Specifies the primary file-system path that is the source
of the package file. If the package is from a Windows
image, this will be blank.
write empty string Writes the XML equivalent of an empty string for the
setting in the answer file.
By default, if no value is specified, the setting will be
omitted from the answer file. However, you can
specifically write an empty value for a string type in an
answer file by using this command.
This command applies to string types only.
Important
Not all component string settings support empty
values. For more information, see the Unattended
Windows Setup Reference.
write image value Creates an entry for the setting in the answer file with
the value of the setting that is currently in the Windows
image.
Array Types
Some component settings require arrays of data. These arrays are mapped to their equivalent .NET array types
in Windows SIM. The following table lists the possible array types that are associated with component settings.
List-Item Types
Settings are sometimes organized into groups called list items. List items specify one or more values for a list-
item type. A list-item type may include one or more component settings. For example, you can create multiple
Favorites links by using the FavoriteItem setting for Internet Explorer.
You add a list item by right-clicking the setting for a container. For example, you can add a FavoriteItem list
item by right-clicking the FavoritesList container in the Answer File pane. For more information, see Configure
Components and Settings in an Answer File.
Key Settings for List Items
Each list item must have a unique identifier, which is known as the key for that specific list item. When you
modify the key setting for the list item, the key identifier appears in brackets ([]) next to the list item in the
Answer File pane.
List-Item Actions
The following actions are available for list items when you use Windows SIM.
Add a New List Item
You can use Windows SIM to add list items to the currently open answer file. In the Setting Action drop-down
list, click AddListItem . You must also add a unique key setting to the list item. The unique key setting appears in
brackets next to the list item in the tree view of the Answer File pane. A plus sign (+) appears, which indicates
that the list item is added to the Windows image when the unattended answer file is run.
Delete a List Item
You can use Windows SIM to delete a list item that is defined in a Windows image (.wim) file. In the Setting
Action drop-down list, click RemoveListItem . A minus sign (–) appears, which indicates that the list item is
deleted from the image when the unattended answer file is run.
Modify a List Item
You can use Windows SIM to modify a list item that is defined in a Windows image file. To change the default
value for an existing list item, click Modify in the Proper ties pane, and then enter the updated information
under Settings . The updated list-item setting is added to the answer file.
Related topics
Windows System Image Manager Reference Topics
Windows System Image Manager Overview Topics
Windows System Image Manager Architecture
1/18/2019 • 2 minutes to read
You use Windows® System Image Manager (Windows SIM) to create an XML-based answer file that is
required to automate Windows installations.
Windows SIM uses the Component Platform Interface (CPI API) to create and manage answer files. The
components and settings in a specific Windows image are used to create a catalog file. This catalog file is used in
Windows SIM to create answer files. For more information, see Windows Image Files and Catalog Files
Overview.
An optional set of folders, called a distribution share, can be created to store files that you use to further
customize your Windows installation. For more information, see Distribution Shares and Configuration Sets
Overview.
Windows SIM can create a smaller, more portable version of a distribution share called a configuration set.
These smaller files can be easier to manage.
You can also use the CPI API to create your own customized applications that can automate the creation and
management of unattended Windows Setup answer files. For more information, see the Component Platform
Interface (CPI) Reference (CPIAPI.chm) .
The following diagram shows how Windows SIM works.
Related topics
Windows System Image Manager Reference Topics
Windows System Image Manager Overview Topics
Windows System Image Manager Supported
Platforms
1/18/2019 • 2 minutes to read
Supported Platforms
By using the 32-bit version of Windows System Image Manager (Windows SIM), you can create and open
catalog (.clg) files for Windows images of all architecture types. You can use the 64-bit versions of Windows SIM
to create catalog files for only 64-bit Windows images. For example, you can use the 64-bit version of
Windows SIM to create catalog files for only 64-bit-based Windows images.
After you create a catalog file, you can open catalog files for all Windows image architecture types.
Windows Preinstallation Environment (Windows PE) is not a supported platform for Windows SIM.
The following table lists Windows operating systems and the supported list of architecture types on which you
can create catalog files for Windows images.
Windows Server 2003 with SP2 (32-bit edition) x86-based, x64-based, Itanium-based
Windows Vista with SP1 and SP2 (64-bit edition) x64-based only
Windows Vista with Service Pack 1 (SP1) and Service x86-based, x64-based, Itanium-based
Pack 2 (SP2) (32-bit edition)
Related topics
Windows System Image Manager Reference Topics
Unattended Windows Setup Reference
6/24/2021 • 2 minutes to read
The Windows Unattended Setup Reference provides a complete listing of all the settings that you can use to
automate the configuration and the deployment of Windows 10.
The Windows Unattended Setup Reference is organized by Windows components and Windows packages, in
the same order that the Windows System Image Manager (Windows SIM) tool displays each Windows
component and package.
Each Windows component includes settings that can be used to create an unattended-installation answer file.
Each setting in a component is listed in its own individual topic. If an element contains a value, valid value types
are described and XML examples are given.
Information about how to use Windows SIM is available in the Windows System Image Manager Technical
Reference.
NOTE
All Unattend settings for Windows 10 are also supported in S mode, with the exception of Microsoft-Windows-Shell-
Setup-FirstLogonCommands.
In this section
TO P IC DESC RIP T IO N
Changed answer file settings for Windows 10 for desktop This topic describes Windows 10, version 1809 answer-file
editions, version 1809 settings that have changed since Windows 10 for desktop
editions, version 1803.
Changed answer file settings for Windows 10 for desktop This topic describes Windows 10, version 1803 answer-file
editions, version 1803 settings that have changed since Windows 10 for desktop
editions, version 1709.
Changed answer file settings for previous Windows 10 builds This topic shows the historic list of changes to answer file
settings for each build of Windows 10 that was released
prior to build 1803.
This section contains information about the power settings that you can configure using the Windows
provisioning framework. Each power setting topic includes the identification GUID, allowed values, meaning, and
common usage scenarios for the setting.
TIP
The primary audience for these topics is Original Equipment Manufacturers (OEMs). If you're a Windows device owner
(consumer) and would like to learn more about power settings in Windows 10, please see How to enable Hibernate and
Sleep in Power Options on Microsoft's community support site. You can also search for troubleshooting instructions on
this site if needed.
The following example shows what your Windows provisioning answer file might look like after you've written
it.
<?xml version="1.0" encoding="utf-8"?>
<WindowsCustomizatons>
<PackageConfig xmlns="urn:schemas-Microsoft-com:Windows-ICD-Package-Config.v1.0">
<ID>{7e5c6cb3-bd16-4c1a-aacb-98c9151d5f20}</ID> <!-- ID needs to be be unique GUID for the package -->
<Name>CustomOEM.Power.Settings.Control</Name>
<Version>1.0</Version>
<OwnerType>OEM</OwnerType>
</PackageConfig>
<Settings xmlns="urn:schemas-microsoft-com:windows-provisioning">
<Customizations>
<Common>
<Power>
<Policy>
<Settings>
<Sleep>
<SchemePersonality>
<Default SchemeAlias="Balanced">
<Setting>
<!-- Duration of time after sleep that the system automatically wakes and
enters hibernate in seconds -->
<HibernateTimeout>
<AcValue>1800</AcValue> <!-- 30 minutes -->
<DcValue>1800</DcValue> <!-- 30 minutes -->
</HibernateTimeout>
</Setting>
</Default>
</SchemePersonality>
</Sleep>
<Misc>
<SchemePersonality>
<Default SchemeAlias="Balanced">
<Setting>
<!-- Enables/Disables only WiFi connection during standby -->
<AllowWifiInStandby>
<AcValue>0</AcValue>
<DcValue>0</DcValue>
</AllowWifiInStandby>
</Setting>
</Default>
</SchemePersonality>
</Misc>
</Settings>
</Policy>
</Power>
</Common>
</Customizations>
</Settings>
</WindowsCustomizatons>
In this section
TO P IC DESC RIP T IO N
TO P IC DESC RIP T IO N
Processor power management options The Windows 10 processor power management (PPM)
algorithms implement OS-level functionality that allows
the OS to efficiently use the available processing
resources on a platform by balancing the user's
expectations of performance and energy efficiency.
Power button and lid settings Settings in this subgroup control the customization of
system button actions.
Energy Saver settings Settings in this subgroup control the battery threshold
and brightness when Energy Saver is turned on.
Other power settings Settings in this subgroup do not belong to any other
subgroup.
Before including your Power Configuration provisioning package in your device image, please consider a
mechanism to update the OEM-generated Power provisioning package after the device is in market. Here are
additional notes on image configuration and updates.
1. The OEM-generated Power provisioning package needs to be excluded from the PBR migration to avoid
duplicate entries, see Exclude Files and Settings.
To test that the exclusion file was successful, you will need to have a factory image with PBR
implemented. There should also only be one OEM-generated Power provisioning package in the
%WINDIR%\Provisioning\Provisioning folder.
Example:
<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/MyFileExclusions">
<component type="Documents" context="System">
<displayName>File exclusions</displayName>
<role role="Data">
<rules>
<unconditionalExclude>
<objectSet>
<pattern type="File">%SystemDrive%\Windows\Provisioning\Packages* [*]</pattern>
</objectSet>
</unconditionalExclude>
</rules>
</role>
</component>
</migration>
2. Customization configured by the OEM-generated Power provisioning package will need to be maintained
by the OEM. As such, you should ensure you have a mechanism to update these in the future.
Update of the package is handled by a driver package and Windows Update
You will need to ensure you have an existing device driver on the device for the power component
and the INF file is set to copy the PPKG
Follow the instructions in this document to author the INF file
Example:
[SourceDisksNames]
1 = %DiskId1%
[SourceDisksFiles]
ContosoPowerCustomization.ppkg = 1
ContosoPowerCustomizationWithDataClass.xml = 1
; other driver package files omitted from example for brevity
[DestinationDirs]
PowerCustomization.CopyList =10,Provisioning\Package
; other CopyFiles sections in DestinationDirs omitted from example for brevity
; Manufacturer and Models sections omitted for brevity. Assume Models section indicates a
DDInstall section of ContosoInstallSection
[ContosoInstallSection]
CopyFiles=PowerCustomization.CopyList
[PowerCustomization.CopyList]
ContosoPowerCustomization.ppkg
ContosoPowerCustomizationWithDataClass.xml
The driver package needs to be preloaded on your factory image so that if you update the driver
package on Windows Update in the future the system will scan for and find a newer version of this
driver package to download and install.
You should test the update mechanism via Windows Update in the same mechanism as you would
test driver package updates for a prerelease system or driver package.
If you have an alternate mechanism to update the OEM-generated Power provisioning package,
ensure that it works both on the factory image, and on the device package after push button reset
is run to test the end user scenario.
NOTE
The PPKG will be applied in the following conditions. It is by design that they are not applied at the event of the
PPKG being copied to the specified location
After OS Reboot when system is idle
After User Login when system is idle
Adaptive hibernate overview
3/5/2021 • 3 minutes to read
Users can set the Hibernate option in their Windows devices to put the system into a low power state when the
system is not in use. The current logic for hibernate in the OS relies on adaptive hibernate to put the system in
hibernate after draining a certain percentage of battery capacity during Modern Standby.
OEMs or users can also configure a fixed doze to hibernate timer. However, the timer-based logic has significant
user experience drawbacks. A fixed doze timer can result in the system fully draining the battery in standby if
the drain happened within the doze timeout or cut short a low-drain Modern Standby experience by hibernating
at the doze timeout. Consequently, it is preferable to leverage adaptive hibernate to hibernate dynamically based
on battery drain.
Adaptive hibernate provides triggers which allow the system to hibernate intelligently. These triggers provide
the following benefits:
Eliminate resuming to a dead battery.
Provide a great Modern Standby experience by ensuring that the system remains in Modern Standby for as
long as possible.
To support the adaptive hibernate triggers, the system is enabled with default values. However, OEMs can
program these triggers to ensure that machines hibernate to provide the best possible experience to users.
System requirements
The triggers apply to Modern Standby systems only.
Default behavior
Machines will have adaptive hibernate timeout enabled by default; however, OEMs can configure the settings
using a provisioning package file. See the following sections for more information on how to do this.
NOTE
Windows has a 15-minute grace period before either of these triggers are applied. This is to ensure that the system does
not rapidly transition into hibernate.
Hibernate triggers
Adaptive hibernate settings (standby budget setting and standby reserve time setting) are exposed as hidden
power settings. The settings are applied on DC only and have no impact on AC.
Standby budget setting
The following table lists the settings you can use to set the standby budget, which is the amount of battery the
user is allowed to drain during standby.
You can also configure these settings using a custom provisioning package file for OEM images. For more
information about powercfg, see Powercfg command-line options.
Standby reserve time setting
Reserve time is the amount of time the user is guaranteed to have the screen on after the system resumes from
standby or hibernate. The following table lists the settings you can use to set the reserve time.
You can also configure these settings using a custom provisioning package file for OEM images. For more
information about powercfg, see Powercfg command-line options.
<Settings xmlns="urn:schemas-microsoft-com:windows-provisioning">
<Customizations>
<Common>
<Power>
<Policy>
<Settings>
<AdaptivePowerBehavior>
<SchemePersonality>
<Default SchemeAlias="Balanced">
<Setting>
<!-- After entering standby, battery drain percentage allowed before the
device transitions to hibernate -->
<StandbyBudgetPercent>
<DcValue>3</DcValue>
</StandbyBudgetPercent>
<!-- After entering standby, number of seconds before the device
automatically transitions to hibernate -->
<StandbyReserveTime>
<DcValue>600</DcValue>
</StandbyReserveTime>
</Setting>
</Default>
</SchemePersonality>
</AdaptivePowerBehavior>
</Settings>
</Policy>
</Power>
</Common>
</Customizations>
</Settings>
StandbyBudgetPercent
4/10/2020 • 2 minutes to read
Defines the battery drain percentage that the user is allowed in a standby session.
Values
The value denotes the percentage, example: 3 = 3%.
You can configure the values for the following sub-settings: DcValue and AcValue
Applies to
Available in Windows 10, version 1607 and later versions of Windows.
StandbyReserveTime
4/10/2020 • 2 minutes to read
Defines the screen on time, in seconds, that will be available to the user after standby exists and the screen turns
on.
Values
The value denotes the time, in seconds.
You can configure the values for the following sub-settings: DcValue and AcValue
Applies to
Available in Windows 10, version 1607 and later versions of Windows.
Power controls overview
3/5/2021 • 2 minutes to read
Settings in this subgroup include settings that control the system's power and behavior.
In this section
TO P IC DESC RIP T IO N
Use to enable input suppression on a Modern Standby system with a clamshell form factor when the lid is
closed, there is no external monitor connected, and the system is on DC power.
When the conditions above are met, it is expected that the system will stay in a low power state to preserve
battery life. However, some input devices can wake the system from standby even if the user is not using them.
For example, a Bluetooth mouse paired with the system may be stored inside a laptop bag with the system, and
the motion of the mouse causes the system to wake. Enabling input suppression prevents this behavior.
NOTE: Input suppression will not engage if the lid close action is set to "Do nothing."
Values
VA L UE DESC RIP T IO N
Applies to
Available in Windows 10, version 1803 and later versions of Windows.
NOTE: For versions of Windows earlier than 1903, the default was 0 (disable input suppression).
LidNotificationsAreReliable
4/10/2020 • 2 minutes to read
Use to notify the OS whether the platform guarantees that lid notifications are sent whenever the lid is opened
or closed.
Values
VA L UE DESC RIP T IO N
False The platform does not guarantee that lid notifications are
sent every time the device lid is opened or closed.
Remarks
Depending on your platform scenarios, you may also want to set the LidOpenWake setting (Lid open wake
action). For example:
If you want to implement a platform that does nothing when the lid is opened, but you want to suppress
Windows Hello when the lid is closed, you'll want to set LidOpenWake =0 and LidNotificationsAreReliable
=True.
If you have a device that has a rigid keyboard and the risk of the lid opening and causing the device to turn
on is low, you may want to implement a platform that turns on the display when the lid is opened, but you
want to suppress Windows Hello when the lid is closed, you'll want to set LidOpenWake =1 and
LidNotificationsAreReliable =True.
Applies to
Available in Windows 10, version 1607 and later versions of Windows.
Processor power management options overview
7/29/2021 • 5 minutes to read
The Windows 10 processor power management (PPM) algorithms implement OS-level functionality that allows
the OS to efficiently use the available processing resources on a platform by balancing the user's expectations of
performance and energy efficiency.
The algorithms have the following characteristics:
They scale from big servers to tablet form factors.
They are customizable through a statically configurable power policy infrastructure.
They are hierarchical and abstracted in a manner that separates platform-agnostic portions of the algorithms
from platform-specific portions.
At a high-level, the Windows PPM is made up of the following parts:
Core parking engine - Makes global scalability decisions about the workload and determines the optimum
set of compute cores to execute with.
Performance state engine - Makes per-processor performance scaling decisions.
Platform specific controls - Implements the mechanics of state transitions and optionally provides
feedback about the effectiveness of OS state decisions and runtime platform constraints.
IHV partners can enable preliminary validation and measurement of the effects of the policy controls on
different hardware configurations.
Power profiles
You can use the Windows Provisioning framework to configure the processor power settings described in this
section. First, create a provisioning package using Windows Configuration Designer. You will then edit the
customizations.xml file contained in the package to include your power settings, which appear under the
Common\Power\Policy\Settings\Processor namespace. Use the XML file as one of the inputs to the Windows
Configuration Designer command-line interface to generate either a provisioning package that contains the
power settings. You can then apply the provisioning package to the image. For information on how to use the
Windows Configuration Designer CLI, see Use the Windows Configuration Designer command-line interface.
The processor namespace is divided into three sets of identical power processor configurations called power
profiles. The power profiles are used by the power processor engine to adapt the performance and parking
algorithm on various system use cases.
Windows 10 supports the following profiles:
Default profile is the configuration set that is active most of the time. These settings are indentical to those
for the balanced power scheme. This provides for an lternative method to configure the balanced power
scheme settings via the windows provisioning framework.
LowLatency is the profile that is activated during boot and during app launch time.
LowPower is the profile that is activated during the buffering phase of media playback scenarios.
GameMode profile is enabled when the 'Game Mode' setting toggle is turned on and the user is playing a
game. You can use this profile to finetune processor settings for your devices with Game Mode.
Mixed Reality is the profile that is activated when a Windows Mixed Reality headset is connected to the
system and the user is interacting with a MR application.
Constrained is a profile activated by the battery saver feature on Windows 10 for desktop editions (Home,
Pro, Enterprise, and Education). This is not available on Windows 10 Mobile.
Screen Off is a profile used on Modern Standby systems. It is engaged when the system enters its long term
sleep phase-- all system quiescing behavior has completed, no audio is playing, and no mobile hotspot is
engaged. It is disengaged when the system awakes from sleep.
Each profile supports the following configuration settings:
CPMinCores
CPMaxCores
CPIncreaseTime
CPDecreaseTime
CPConcurrency
CPDistribution
CPHeadroom
CpLatencyHintUnpark
MaxPerformance
MinPerformance
PerfIncreaseThreshold
PerfIncreaseTime
PerfDecreaseThreshold
PerfDecreaseTime
PerfLatencyHint
PerfAutonomousMode
PerfEnergyPreference
On systems with processors with heterogeneous architecture, the configuration settings for efficiency class 1
cores use a similar naming convention.
The common parameters have the suffix "1" to indicate efficiency class. Hetero-specific parameters have the
prefix "Hetero".
CPMinCores1
CPMaxCores1
HeteroIncreaseTime
HeteroDecreaseTime
HeteroIncreaseThreshold
HeteroDecreaseThreshold
CpLatencyHintUnpark1
MaxPerformance1
MinPerformance1
PerfIncreaseThreshold1
PerfIncreaseTime1
PerfDecreaseThreshold1
PerfDecreaseTime1
PerfLatencyHint1
HeteroClass1InitialPerf
HeteroClass0FloorPerf
Game Mode Profile
The game mode power profile is available as an OEM opt-in feature for laptops starting with the Windows 10
May 2019 Update (19H1) and you'll have to deploy it via provisioning packages during image creation. See
below for an example of a customization xml file that defines processor power management settings for the
Game Mode Power Profile and refer to the 'Game Mode Test Instructions' document for further guidance on
customization options and deployment. This example sets the minimum processor performance state to 100%
thereby biasing the CPU towards performance. For more tuning guidance, please reach out to your silicon
vendor.
NOTE
PPM profiles are tuned by Silicon vendors to optimize power and performance of processors. Please reach out to your
silicon vendor for tuning guidance before modifying processor power management settings.
P RO F IL E N A M E P RO F IL E A L IA S
Default "Default"
Constrained "Constrained"
Quality of Service
Power profiles provide system wide configuration of processor power management, impacting all running
workloads equally. In contrast, the Quality of Service (QoS) feature provides differentiated performance and
power for workloads with different QoS levels. For example, this enables tuning foreground HighQoS activity to
prioritize performance, while tuning other QoS levels to prioritize power efficiency. For more information, see
Quality of Service.
Each QoS level supports the following configuration settings:
MaxFrequency
MaxPerformance
MinPerformance
PerfAutonomousMode
PerfAutonomousWindow
PerfBoostMode
PerfEnergyPreference
PerfLatencyHint
SchedulingPolicy
ShortSchedulingPolicy
On systems with processors with heterogeneous architecture, the configuration settings for efficiency class 1
cores use a similar naming convention.
The common parameters have the suffix "1" to indicate efficiency class.
MaxFrequency1
MaxPerformance1
MinPerformance1
PerfEnergyPreference1
PerfLatencyHint1
Quality of Ser vice Levels and their Provisioning ProfileAlias
Using the customization XML as an example, you can create a provisioning package for all QoS levels by
matching the xml tag to their provisioning aliases. See below for list of QoS levels and their corresponding
aliases.
NOTE
QoS levels are tuned by Silicon vendors to optimize power and performance of processors. Please reach out to your silicon
vendor for tuning guidance before modifying processor power management settings.
Q UA L IT Y O F SERVIC E L EVEL P RO F IL E A L IA S
High "Default"
Medium "EntryLevelPerf"
Low "Background"
Eco "Eco"
Media "Multimedia"
You can use the static configuration options documented in this section to tune the behavior of the core parking
engine.
In this section
TO P IC DESC RIP T IO N
CPMinCores specifies the minimum percentage of logical processors (in terms of all logical processors that are
enabled on the system within each NUMA node) that can be placed in the un-parked state at any given time.
For example, in a NUMA node with 16 logical processors, configuring the value of this setting to 25% ensures
that at least 4 logical processors are always in the un-parked state. The Core Parking algorithm is disabled if the
value of this setting is 100%.
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
specifies the maximum percentage of logical processors (in terms of logical processors within each
CPMaxCores
NUMA node) that can be in the un-parked state at any given time.
For example, in a NUMA node with 16 logical processors, configuring the value of this setting to 50% ensures
that no more than 8 logical processors are ever in the un-parked state at the same time. The value of this setting
will automatically be rounded up to the value of CPMinCores.
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
CPIncreaseTime specifies the minimum amount of time that must elapse before additional logical processors
can be transitioned from the parked state to the unparked state. The time is specified in units of the number of
processor performance time check intervals.
PowerCfg: CPINCREASETIME
Values
The value denotes time check intervals.
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
CPDecreaseTime specifies the minimum amount of time that must elapse before additional logical processors
can be transitioned from the unparked state to the parked state. The time is specified in units of the number of
processor performance time check intervals.
PowerCfg: CPDECREASETIME
Values
The value denotes time check intervals.
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
PowerCfg: CPCONCURRENCY
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
CPDistribution specifies the utilization, in percentage, to use in the concurrency distribution to select the
number of logical processors to distribute utility to. This may be fewer, but never greater, than the number of
logical processors that are selected to be unparked.
PowerCfg: CPDISTRIBUTION
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
CPHeadroom specifies the value of utilization that would cause the core parking engine to unpark an additional
logical processor if the least utilized processor out of the unparked set of processors had more utilization. This
enables increases in concurrency to be detected.
PowerCfg: CPHEADROOM
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
CPLatencyHintUnpark specifies the minimum number of unparked cores when a system low latency hint is
detected.
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
You can use the static configuration options documented in this section to tune the behavior of the performance
state selection algorithms.
In this section
TO P IC DESC RIP T IO N
MaxFrequency specifies the maximum processor performance state, which is specified in Megahertz (MHz).
Values
The value denotes Megahertz (MHz).
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
Hidden setting: No
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
Hidden setting: No
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
PERFBOOSTMODE determines how processors select a performance level when current operating conditions allow
for boosting performance above the nominal level.
Values
IN DEX NAME
0 Disabled
1 Enabled
2 Aggressive
3 Efficient enabled
4 Efficient aggressive
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
PerfIncreaseThreshold specifies the percentage of processor utilization, in terms of the maximum processor
utilization, that is required to increase the processor to a higher performance state.
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
PerfIncreaseTime specifies minimum amount of time that must elapse between subsequent increases in the
processor performance state. The time is specified in units of the number of processor performance time check
intervals.
Values
The value denotes time check intervals.
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
PerfDecreaseThreshold specifies the percentage of processor utilization, in terms of the maximum processor
utilization, that is required to reduce the processor to a lower performance state.
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
PerfDecreaseTime specifies minimum amount of time that must elapse between subsequent reductions in the
processor performance state. The time is specified in units of the number of processor performance time check
intervals.
Values
The value denotes time check intervals.
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
PerfLatencyHint specifies the processor performance in response to latency sensitivity hints. Such hints are
generated when an event preceding an expected latency-sensitive operation is detected. Examples include
mouse button up events (for all mouse buttons), touch gesture start and gesture stop (finger down and finger
up), and keyboard enter key down.
When set to 0, the processor performance engine does not take latency sensitivity hints to account when
selecting a performance state. Otherwise, the performance is raised system-wide to the specified performance
level.
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
PerfAutonomousMode controls whether autonomous mode is enabled on systems that implement version 2 of the
CPPC interface, and determines whether desired performance requests should be provided to the platform. On
systems with other performance state interfaces, this setting has no effect.
Note Platforms that support CPPC version 2 may only support autonomous disabled or autonomous enabled
mode. If only one mode is supported, the OS uses that mode and ignores the PerfAutonomousMode power setting.
PowerCfg: PERFAUTONOMOUS
Values
IN DEX NAME DESC RIP T IO N
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
PerfEnergyPreference specifies the value to program in the energy performance preference register on systems
that implement version 2 of the CPPC interface.
When set to 0, the energy performance preference register is programmed to 0 to favor performance. When set
to 100, the energy performance preference register is set to 255 to favor energy savings. When set to an
intermediate value, the energy performance preference register is programmed to the value: (setting * 255) /
100.
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
PerfAutonomousWindow specifies the value to program in the autonomous activity window register on systems
that implement version 2 of the CPPC interface and have autonomous mode enabled. Longer values indicate to
the platform that it should be less sensitive to short duration spikes/dips in processor utilization.
PowerCfg: PERFAUTONOMOUSWINDOW
Values
The value denotes microseconds.
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
DutyCycling enables or disables the duty cycling capability on systems that support processor duty cycling.
PowerCfg: PERFDUTYCYCLING
Values
IN DEX NAME DESC RIP T IO N
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
You can use the static configuration options documented in this section to tune the core parking engine on
heterogeneous systems.
Note These settings are only valid for class 1 cores and replace CP_CONCURRENCY,
PARK_DISTRIBUTION_THRESHOLD and CP_HEADROOM.
In this section
TO P IC DESC RIP T IO N
HeteroIncreaseThreshold specifies the threshold value to cross above, which is required to unpark the Nth
efficiency class 1 core. There is a separate value for each core index. The threshold is relative to efficiency class 0
performance. The provisioning interface can specify up to 4 different thresholds. If the system has 5 or more
class 1 cores, the 4th value is used for all remaining cores of the same class.
PowerCfg: HETEROINCREASETHRESHOLD
Values
HeteroIncreaseThreshold is a four-byte unsigned integer where each byte represents a threshold in percentage.
The lowest byte is the first threshold. For example, to set four thresholds—A, B, C, and D—the value of the
parameter will be A + B*256 + C*65536 + D*16777216.
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
HeteroDecreaseThreshold specifies a threshold to cross below, which is required to park the Nth efficiency class 1
core. There is a separate value for each core index. The threshold is relative to efficiency class 0 performance.
The provisioning interface can specify up to 4 different thresholds. If the system has 5 or more class 1 cores, the
4th value is used for all remaining cores of the same class.
PowerCfg: HETERODECREASETHRESHOLD
Values
HeteroDecreaseThreshold is a four-byte unsigned integer where each byte represents a threshold in percentage.
The lowest byte is the first threshold. For example, to set four thresholds—A, B, C, and D—the value of the
parameter will be A + B*256 + C*65536 + D*16777216.
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
HeteroIncreaseTime specifies the minimum amount of time that must elapse before additional efficiency class 1
logical processors can be transitioned form the parked state to the unparked state. The time is specified in
processor performance time check intervals.
PowerCfg: HETEROINCREASETIME
Values
The value denotes time check intervals.
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
HeteroDecreaseTime specifies the minimum amount of time that must elapse before additional efficiency class 1
logical processors can be transitioned from the unparked state to the parked state. The time is specified in
performance time check intervals.
PowerCfg: HETERODECREASETIME
Values
The value denotes time check intervals.
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
HeteroClass1InitialPerf specifies the initial performance percentage of the efficiency class 1 core when this
core is unparked.
PowerCfg: HETEROCLASS1INITIALPERF
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
HeteroClass0FloorPerf specifies the performance level floor, in percentage, to use for efficiency class 0
processors if there is at least one unparked efficiency class 1 processor.
PowerCfg: HETEROCLASS0FLOORPERF
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
SchedulingPolicy specifies the preference (or constraint) in processor scheduling for long running threads on
systems with processors with heterogeneous architecture. See ShortThreadRuntimeThreshold for configuring
the threshold for determination of short versus long running.
PowerCfg: SCHEDPOLICY
Values
IN DEX DESC RIP T IO N
0 All processors
1 Performant processors
3 Efficient processors
5 Automatic
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
SchedulingPolicy specifies the preference (or constraint) in processor scheduling for long running threads on
systems with processors with heterogeneous architecture. See ShortThreadRuntimeThreshold for configuring
the threshold for determination of short versus long running.
PowerCfg: SCHEDPOLICY
Values
IN DEX DESC RIP T IO N
0 All processors
1 Performant processors
3 Efficient processors
5 Automatic
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
Settings in this subgroup control the customization of battery actions and thresholds.
In this section
TO P IC DESC RIP T IO N
Critical battery action Specifies the action to take when the critical batter level
is reached.
Low battery action Specifies the action to take when the low batter level is
reached.
Low battery threshold Specifies a percentage of capacity when the low battery
action is taken and the low battery warning, if enabled,
appears.
Specifies the action to take when the critical batter level is reached.
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Critical battery threshold
4/10/2020 • 2 minutes to read
Values
The value denotes the percentage (%).
Minimum value 0
Applies to
Available in Windows Vista and later versions of Windows.
Low battery action
4/10/2020 • 2 minutes to read
Specifies the action to take when the low batter level is reached.
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Low battery threshold
4/10/2020 • 2 minutes to read
Specifies a percentage of capacity when the low battery action is taken and the low battery warning, if enabled,
appears.
Values
The value denotes the percentage (%).
Minimum value 0
Applies to
Available in Windows Vista and later versions of Windows.
Low battery warning
4/10/2020 • 2 minutes to read
Specifies whether the OS displays a UI warning at the batter meter when the battery capacity crosses the low
battery threshold.
PowerCfg: BATFLAGSLOW
GUID: bcded951-187b-4d05-bccc-f7e51960c258
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Reserve battery level
4/10/2020 • 2 minutes to read
Specifies a percentage of capacity when the reserve battery warning is shown to the user.
PowerCfg: BATLEVELRESERVE
GUID: f3c5027d-cd16-4930-aa6b-90db844a8f00
Hidden setting: Yes
Values
The value denotes the percentage (%).
Minimum value 0
Applies to
Available in Windows 7 and later versions of Windows.
Power button and lid settings overview
4/10/2020 • 2 minutes to read
In this section
TO P IC DESC RIP T IO N
Lid open wake action Specifies the action to take when the system lid is
opened.
Lid switch close action Specifies the action to take when the system lid is closed.
Power button action Specifies the action to take when the system power
button is pressed.
Power button forced shutdown Specifies the type of system shutdown that occurs when
the system power button is pressed if the power button
action is set to Shut Down.
Sleep button action Specifies the action to take when the sleep power button
is pressed.
Lid open wake action
4/10/2020 • 2 minutes to read
PowerCfg: LIDOPENWAKE
GUID: 99ff10e7-23b1-4c07-a9d1-5c3206d741b4
Hidden setting: Yes
Current AC power setting index: 0x00000001
Current DC power setting index: 0x00000001
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows 10, version 1607 and later versions of Windows.
Related topics
LidNotificationsAreReliable
Lid switch close action
4/10/2020 • 2 minutes to read
PowerCfg: LIDACTION
GUID: 5ca83367-6e45-459f-a27b-476b1d01c936
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Power button action
4/10/2020 • 2 minutes to read
Specifies the action to take when the system power button is pressed.
PowerCfg: PBUTTONACTION
GUID: 7648efa3-dd9c-4e3e-b566-50f929386280
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Power button forced shutdown
4/10/2020 • 2 minutes to read
Specifies the type of system shutdown that occurs when the system power button is pressed if the power button
action is set to Shut Down.
Warning If you enable this setting and a user presses the power button to shut down the system, any open
documents might not be saved and data loss could occur.
PowerCfg: SHUTDOWN
GUID: 833a6b62-dfa4-46d1-82f8-e09e34d029d6
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows 7 and later versions of Windows.
Sleep button action
4/10/2020 • 2 minutes to read
Specifies the action to take when the sleep power button is pressed.
PowerCfg: SleepButtonAction
GUID: 96996bc0-ad50-47ec-923b-6f41874dd9eb
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Display settings overview
4/21/2020 • 2 minutes to read
In this section
TO P IC DESC RIP T IO N
Adaptive display idle timeout Specifies whether the OS automatically scales the display
idle time-out based on user activity.
If the user provides input to the system shortly after the
display idle timeout is reached, Windows automatically
extends the display idle time-out to deliver a better user
experience.
Advanced color quality bias Specifies the policy to decide visual quality of Advanced
Color capable displays.
Dim annoyance timeout This setting denotes the user annoyance detection
threshold. It specifies the duration between automatic
display brightness level reduction and user input to
consider the automatic display brightness level reduction
as an annoyance to the user.
Dim display brightness Denotes the reduced display brightness level after the
dim idle timeout has been reached.
Display idle timeout Specifies the period of inactivity before the display is
automatically turned off.
Adaptive display idle timeout
4/10/2020 • 2 minutes to read
Specifies whether the OS automatically scales the display idle time-out based on user activity.
If the user provides input to the system shortly after the display idle timeout is reached, Windows automatically
extends the display idle time-out to deliver a better user experience.
PowerCfg: VIDEOADAPT
GUID: 90959d22-d6a1-49b9-af93-bce885ad335b
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Advanced Color display quality
4/29/2020 • 2 minutes to read
Specifies the policy to decide visual quality of Advanced Color capable displays.
PowerCfg: ADVANCEDCOLORQUALITYBIAS
GUID: 684C3E69-A4F7-4014-8754-D45179A56167
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows 10 1809 and later versions of Windows.
Allow display required policy
4/21/2020 • 2 minutes to read
Specifies whether Windows allows applications to temporarily prevent the display from automatically reducing
brightness or turning off to save power.
PowerCfg: ALLOWDISPLAY
GUID: a9ceb8da-cd46-44fb-a98b-02af69de4623
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows 7 and later versions of Windows.
Dim annoyance timeout
4/10/2020 • 2 minutes to read
This setting denotes the user annoyance detection threshold. It specifies the duration between automatic display
brightness level reduction and user input to consider the automatic display brightness level reduction as an
annoyance to the user.
This setting applies only to portable computers that support Windows control of the brightness level of an
integrated display device. In most situations, you should not change the default value of this setting.
PowerCfg: VIDEOADAPTINC
GUID: 82dbcf2d-cd67-40c5-bfdc-9f1a5ccd4663
Hidden setting: Yes
Values
The value denotes the number of seconds.
Applies to
Available in Windows 7 and later versions of Windows.
Dim display brightness
4/10/2020 • 2 minutes to read
Denotes the reduced display brightness level after the dim idle timeout has been reached.
This setting applies only to portable computers that support Windows control of the brightness level of an
integrated display device.
PowerCfg: VIDEODIMLEVEL
GUID: f1fbfde2-a960-4165-9f88-50667911ce96
Hidden setting: Yes
Values
The value denotes the percentage (%).
Minimum value 0
Applies to
Available in Windows 7 and later versions of Windows.
Display brightness level
4/10/2020 • 2 minutes to read
PowerCfg: VIDEONORMALLEVEL
GUID: aded5e82-b909-4619-9949-f5d71dac0bcb
Hidden setting: Yes
Values
The value denotes the percentage (%).
Minimum value 0
Applies to
Available in Windows Vista and later versions of Windows.
Display idle timeout
4/10/2020 • 2 minutes to read
Specifies the period of inactivity before the display is automatically turned off.
PowerCfg: VIDEOIDLE
GUID: 3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e
Hidden setting: Yes
Values
The value denotes the number of seconds.
Applies to
Available in Windows Vista and later versions of Windows.
Disk settings overview
4/10/2020 • 2 minutes to read
In this section
TO P IC DESC RIP T IO N
Disk burst ignore time Specifies the period of inactivity to ignore when
attempting to aggressively power down the disk.
Disk idle timeout Specifies the period of inactivity before the disk is
automatically powered down.
Link power management mode - adaptive Specifies the period of AHCI link idle time before the link
is put into a slumber state when Host-Initiated Power
Management (HIPM) or Device-Initiated Power
Management (DIPM) is enabled.
Link power management mode - HIPM/DIPM Configures the link power management mode for disk
and storage devices that are attached to the system
through an AHCI interface.
Disk burst ignore time
4/10/2020 • 2 minutes to read
Specifies the period of inactivity to ignore when attempting to aggressively power down the disk.
PowerCfg: N/A
GUID: 80e3c60e-bb94-4ad8-bbe0-0d3195efc663
Hidden setting: Yes
Values
The value denotes the number of seconds.
Applies to
Available in Windows Vista with Service Pack 1 (SP1), Windows Server 2008 R2, and later versions of Windows.
Disk idle timeout
4/10/2020 • 2 minutes to read
Specifies the period of inactivity before the disk is automatically powered down.
PowerCfg: DISKIDLE
GUID: 6738e2c4-e8a5-4a42-b16a-e040e769756e
Hidden setting: Yes
Values
The value denotes the number of seconds.
Applies to
Available in Windows Vista and later versions of Windows.
Link power management mode - adaptive
4/10/2020 • 2 minutes to read
Specifies the period of AHCI link idle time before the link is put into a slumber state when Host-Initiated Power
Management (HIPM) or Device-Initiated Power Management (DIPM) is enabled.
PowerCfg: N/A
GUID: dab60367-53fe-4fbc-825e-521d069d2456
Hidden setting: Yes
Values
The value denotes the number of milliseconds.
Applies to
Available in Windows 7 and later versions of Windows.
Link power management mode - HIPM/DIPM
4/10/2020 • 2 minutes to read
Configures the link power management mode for disk and storage devices that are attached to the system
through an AHCI interface.
PowerCfg: N/A
GUID: 0b2d69d7-a2a1-449c-9680-f91c70521c60
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows 7 and later versions of Windows.
Energy Saver settings overview
4/10/2020 • 2 minutes to read
Settings in this subgroup control the battery threshold and brightness when Energy Saver is turned on.
In this section
TO P IC DESC RIP T IO N
Specifies the battery charge level, as a percentage, at which Energy Saver is turned on.
PowerCfg: ESBATTTHRESHOLD
GUID: e69653ca-cf7f-4f05-aa73-cb833fa90ad4
Hidden setting: Yes
Values
The value denotes the percentage (%).
Minimum value 0
Applies to
Available in Windows 10 and later versions of Windows.
Brightness
4/10/2020 • 2 minutes to read
Specifies the percentage value to scale brightness to when Energy Saver is turned on.
PowerCfg: ESBRIGHTNESS
GUID: 13d09884-f74e-474a-a852-b6bde8ad03a8
Hidden setting: Yes
Values
The value denotes the percentage (%).
Minimum value 0
Applies to
Available in Windows 10 and later versions of Windows.
PCI Express settings overview
4/10/2020 • 2 minutes to read
Settings in this subgroup control the power management of PCI Express links.
In this section
TO P IC DESC RIP T IO N
Link state power management Specifies the personality of the power plan.
Link state power management
4/10/2020 • 2 minutes to read
PowerCfg: ASPM
GUID: ee12f906-d277-404b-b6da-e5fa1a576df5
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Sleep settings overview
4/10/2020 • 2 minutes to read
Settings in this subgroup control sleep, resume, and other related functionality.
In this section
TO P IC DESC RIP T IO N
Allow away mode Specifies whether the system uses away mode. If this
setting is disabled, away mode is not used even if
programs request it.
Allow sleep with open remote files Configures the network file system to prevent the
computer from automatically entering sleep when
remote network files are open.
Allow sleep states Specifies whether the system uses low power sleep
states.
Allow system required requests Configures the power manager to accept or ignore
application system required requests. These requests
prevent the system from automatically entering sleep
after a period of user inactivity.
Automatically wake for tasks Specifies whether the system uses the system-wide
wake-on-timer capability.
The system can automatically use wake-on-timer on
capable hardware to perform scheduled tasks. For
example, the system might wake automatically to install
updates.
Hibernate idle timeout Specifies the duration of time after sleep that the system
automatically wakes and enters hibernation.
Hybrid sleep Specifies whether the system can enter hybrid sleep.
TO P IC DESC RIP T IO N
Sleep idle timeout Specifies the duration of inactivity before the system
automatically enters sleep.
Sleep unattended idle timeout Specifies the duration of inactivity before the system
automatically enters sleep after waking from sleep in an
unattended state.
Allow away mode
4/10/2020 • 2 minutes to read
Specifies whether the system uses away mode. If this setting is disabled, away mode is not used even if
programs request it.
PowerCfg: AWAYMODE
GUID: 25dfa149-5dd1-4736-b5ab-e8a37b5b8187
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Allow sleep with open remote files
4/10/2020 • 2 minutes to read
Configures the network file system to prevent the computer from automatically entering sleep when remote
network files are open.
PowerCfg: ALLOWREMOTEOPENSLEEP
GUID: d4c1d4c8-d5cc-43d3-b83e-fc51215cb04d
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Allow sleep states
4/10/2020 • 2 minutes to read
PowerCfg: ALLOWSTANDBY
GUID: abfc2519-3608-4c2a-94ea-171b0ed546ab
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Allow system required requests
4/10/2020 • 2 minutes to read
Configures the power manager to accept or ignore application system required requests. These requests
prevent the system from automatically entering sleep after a period of user inactivity.
PowerCfg: SYSTEMREQUIRED
GUID: a4b195f5-8225-47d8-8012-9d41369786e2
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows 7 and later versions of Windows.
Automatically wake for tasks
7/3/2019 • 2 minutes to read
GUID: bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Hibernate idle timeout
4/10/2020 • 2 minutes to read
Specifies the duration of time after sleep that the system automatically wakes and enters hibernation.
This settings enables hibernate option on Modern Standby systems. Set the value to 0 to disable the feature.
PowerCfg: HIBERNATEIDLE
GUID: 9d7815a6-7ee4-497e-8888-515a05f02364
Hidden setting: Yes
Values
The value denotes the number of seconds.
Applies to
Available in Windows Vista and later versions of Windows.
Hybrid sleep
4/10/2020 • 2 minutes to read
PowerCfg: HYBRIDSLEEP
GUID: 94ac6d29-73ce-41a6-809f-6363ba21b47e
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Sleep idle timeout
4/10/2020 • 2 minutes to read
Specifies the duration of inactivity before the system automatically enters sleep.
PowerCfg: STANDBYIDLE
GUID: 29f6c1db-86da-48c5-9fdb-f2b67b1f44da
Hidden setting: Yes
Values
The value denotes the number of seconds.
Applies to
Available in Windows Vista and later versions of Windows.
Sleep unattended idle timeout
4/10/2020 • 2 minutes to read
Specifies the duration of inactivity before the system automatically enters sleep after waking from sleep in an
unattended state.
For example, if the system wakes from sleep because of a timed event or a wake on LAN (WoL) event, the sleep
unattended idle timeout value will be used instead of the sleep idle timeout value.
PowerCfg: UnattendTimeout
GUID: 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0
Hidden setting: Yes
Values
The value denotes the number of seconds.
Applies to
Available in Windows Vista with Service Pack 1 (SP1), Windows Server 2008 R2, and later versions of Windows.
Other power settings overview
4/10/2020 • 2 minutes to read
In this section
TO P IC DESC RIP T IO N
Prompt for password on resume Specifies whether the user must enter a password at the
secure desktop when the system resumes from sleep.
Allow networking during standby Specifies whether to allow networking during standby.
Device idle policy
4/10/2020 • 2 minutes to read
Determines whether conservation idle timeouts or performance idle timeouts are used for devices that are
integrated with Windows kernel power manager device idle detection.
PowerCfg: N/A
GUID: 4faab71a-92e5-4726-b531-224559672d19
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista with Service Pack 1 (SP1), Windows Server 2008 R2, and later versions of Windows.
Prompt for password on resume
4/10/2020 • 2 minutes to read
Specifies whether the user must enter a password at the secure desktop when the system resumes from sleep.
Note All Windows desktop editions have this setting enabled by default. This is a change from Windows 8.1
and earlier which had the setting disabled by default on some editions.
PowerCfg: CONSOLELOCK
GUID: 0e796bdb-100d-47d6-a2d5-f7d2daa51f51
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista and later versions of Windows.
Allow networking during standby
3/5/2021 • 2 minutes to read
GUID: f15576e8-98b7-4186-b944-eafa664402d9
Hidden setting: Yes
Values
IN DEX NAME DESC RIP T IO N
Applies to
Available in Windows Vista through Windows 10, version 1909. NOTE: Deprecated star ting in Windows
10, version 2004. For more information about network connectivity in Modern Standby, refer to Network
connectivity.
Legacy configuration options
7/29/2021 • 2 minutes to read
The processor power settings documented in this section are no longer supported for platform configuration.
However, system administrators and power users may use them.
Values
The value denotes percentage (%).
Minimum value 0
Applies to
W IN DO W S EDIT IO N X86- B A SED DEVIC ES X64- B A SED DEVIC ES A RM - B A SED DEVIC ES
As an OEM, you have a unique opportunity to create applications that ship with your OS image directly to
customers. This means you can preinstall applications onto the image, connect them to devices, and promote
them in both the Microsoft Store, and your OEM store.
App design
To make a compelling app that gets your customers to pay attention, follow the design principles that guide the
development of great Universal Windows Platform (UWP) experiences. The Introduction to UWP app design is a
great starting place for learning about UWP. From there you should learn about the controls and control
patterns to use, how to interact with inputs and devices, and how to think about usability. The Get Started with
Windows Apps guide in the Windows Dev Center is another resource you can use to learn more.
Preinstalled apps
The primary channel for distributing apps is the Microsoft Store. However, because Microsoft Store apps are
only available on the device after a user-initiated download and some partner apps need to be available at first
boot, there is an alternate option available for OEMs and mobile operators. OEMs and Mobile operators can
create Partner applications that can be packaged and configured to install during the initial device setup process.
While the user is going through the initial setup process, the preinstalled applications are installed in the
background.
Exclusive apps
As of March 16th, 2020, Microsoft will no longer be accepting any new exclusivity requests. All existing apps
which use the exclusivity capability will be maintained. Hardware Support Applications (HSAs) are not impacted
by this change and you can continue to implement under the process and policies for HSAs.
In this section
TO P IC DESC RIP T IO N
Preinstallable apps for desktop devices Learn how to add an app to a Windows 10 for desktop
editions (Home, Pro, Enterprise, and Education) image that
will be available to customers at first boot.
Preinstall tasks OEMs and MOs are permitted to ship preinstalled apps in
the device image. Some of those preinstalled apps require
tasks to run without user interaction and often before the
end-user opens the app for the first time; such as a product
survey app or a SMS server registration. Similarly, some apps
will need servicing tasks to run without user interaction after
an app has been updated. Preinstall and update tasks
provide the mechanism for allowing tasks to run in the
background without before the app is installed or when it is
updated.
Audience
Preinstalled and exclusive app guidance is designed for use by OEM and MO developers.
Preinstallable apps for desktop devices
3/5/2021 • 2 minutes to read
OEMs and Mobile operators can create Partner applications that can be packaged and configured to install
during the initial device setup process. While the user is going through the initial setup process, the preinstalled
applications are installed in the background.
The process for creating a preinstalled app is similar to that of a standard app. An unsigned app package (.appx),
generated with the Windows SDK, is submitted to the Windows Dev Center for certification and signing. During
the submission process, you can specify that you are submitting a preinstalled app. If the app meets certification
requirements, it is processed to create a package that can be downloaded from the Dev Center. The app can then
be published to the Microsoft Store as well, so that users who have uninstalled the app can re-download it and
updates can later be offered to devices that have the app installed.
Some characteristics of preinstalled apps include:
1. They can be published as "hidden" so that the app is not discoverable in the Microsoft Store except through a
deep link.
2. They can be updated, as live or hidden to the Microsoft Store. Users with the preinstalled application will get
a notification for the update.
3. They can be deleted by the user. They can be reinstalled if published live.
4. They can become obsolete. If a user uninstalls an app that is no longer sold in the Microsoft Store, the user
will not be able to reinstall that app.
OEMs and MOs are permitted to ship preinstalled apps in the device image. Some of those preinstalled apps
require tasks to run without user interaction and often before the end-user opens the app for the first time; such
as a product survey app or a SMS server registration. Similarly, some apps will need servicing tasks to run
without user interaction after an app has been updated. Preinstall and update tasks provide the mechanism for
allowing tasks to run in the background without before the app is installed or when it is updated.
There are two deployments task types available to UAPs: PreInstallConfigTask and UpdateTask. Both are
IBackgroundTasks.
Here are the general rules that govern these tasks.
Your app manifest can contain only one PreInstallConfigTask and one UpdateTask.
Deployment tasks are applicable to any platform type.
Deployment tasks can execute after the deployment operation has been completed and committed.
Failed deployment tasks are not restarted.
Failed deployment tasks do not affect the successful deployment of the app.
Deployment tasks are not restarted after reboot.
Deployment tasks should not depend on one another.
Code Examples
UpdateTask example
Update task is supported for any possible update path, for example:
.xap to .xap
.xap to .appx
.xap to .appxbundle
.appx to .appx
.appx to .appxbundle
.appxbundle to .appxbundle
Here’s the example .appx manifest:
<Package>
<Extensions>
<Extension Category="windows.activatableClass.inProcessServer">
<InProcessServer>
<Path>App.dll</Path>
<ActivatableClass ActivatableClassId="App.UpdateTask" ThreadingModel="MTA"/>
</InProcessServer>
</Extension>
</Extensions>
<Applications>
<Application>
<Extensions>
<Extension Category="windows.updateTask" EntryPoint="App.UpdateTask">
</Extension>
</Extensions>
</Application>
</Applications>
</Package>
<Applications>
<Application>
<Extensions>
<Extension Category="windows.preInstalledConfigTask" EntryPoint=" App.PreInstallConfigTask">
</Extension>
</Extensions>
</Application>
</Applications>
</Package>
TA SK DESC RIP T IO N
PREINSTALL _OEM_TASK A 1st or 2nd party preinstalled app can run at install time
task without requiring the app to be launched by the end
user.
The following tables record the major changes that were made in the Customize section of the Windows 10
partner documentation since Windows 10, version 1607 was released.
TO P IC DESC RIP T IO N
Customize OOBE Updated with the new OOBE flow for Windows 10, version
1803. Added information about cloud service OOBE pages.
OOBE screen details Updated with details on two new OOBE screens that
introduced in Windows 10, version 1803: the new payment
information screen in the Office Setup portion of OOBE,
and the local account security questions screen in the
Account setup portion of OOBE.
Customize the Start layout Updated to reflect new customization options for the
Microsoft suite of tiles in the Start layout, introduced in
Windows 10, version 1803. Updated to reflect that apps no
longer need to be pinned to the Start layout to remain
installed on the device, as long as the region parameter in
DISM is used when preinstalling the apps.
Customize SIM card slot names New. Describes how you can customize the names of SIM
card slots on the device to more easily differentiate between
them.
Shell Launcher Updated to reflect that in Windows 10, version 1803, you
can configure Shell Launcher using the Assigned Access CSP.
Power controls Power controls include settings that control the system's
power and behavior. In Windows 10, version 1803, a new
setting has been added to Power controls:
EnableInputSuppression.
Changed answer file settings for Windows 10, version 1803 Learn about the Unattend settings that have been added,
deprecated, and removed in the most recent version of
Windows.
January 2018
TO P IC DESC RIP T IO N
OEM registration pages Updated. New screenshots and XML sample, clarifications on
how the Oobe.xml elements relate to registration page fields,
clarifications on collecting encrypted customer data.
December 2017
TO P IC DESC RIP T IO N
Windows updates during OOBE New. Describes how both critical and non-critical Windows
and driver updates are downloaded during a user's Out of
Box Experience.
Exclusive apps New. Guidance on how OEMs can work with software
developers to target OEM devices for apps to appear
exclusively on, based on the OEM IDs set in the registry.
Hibernate Once Resume Many Updated to note that HORM (a feature of Unified Write
Filter) can now be used on UEFI devices starting in Windows
10, version 1709.
November 2017
TO P IC DESC RIP T IO N
Connect users to the network during OOBE Updated with clarifications on how Cellular and Wi-Fi
connections are used during OOBE, and the types of
updates that download during OOBE.
Unattend Setting: FirewallGroups Updated with guidance on how to obtain the correct
FirewallGroup-Group value using PowerShell.
TO P IC DESC RIP T IO N
Customize the Get Help app New. Learn how to add your support app or website to
Window's self-service Get Help app, to provide customers
with an easy-to-find way to reach out.
Customize the Windows performance power slider New. The Windows performance power slider enables
customers to trade performance of their system for longer
battery life. You can configure the default slider mode, and
the power settings engaged behind the scenes.
Customize a SAR mapping table New. Configure and store a Specific Absorption Rate (SAR)
table for mobile broadband modems in the registry.
Customize the Start layout New. Customize the size of the start layout, and add your
own tiles to it.
TO P IC DESC RIP T IO N
Changed answer file settings for Windows 10 version 1709 Learn about the Unattend settings that have been added,
deprecated, and removed in the most recent version of
Windows.
Customize the Out of Box Experience New. Guidance on how to customize elements of the Out of
Box Experience (OOBE), such as setting default values,
adding registration screens, and providing support for
unpaired mice and keyboards.
Preinstallable apps for Windows 10 Mobile Updated. Uses imggen.cmd to build the mobile image
because ICD no longer includes support for image
creation.
Customize the Country and Operator Settings Asset New. When a SIM is inserted in a COSA-enabled
Windows-based device, the provisioning framework
attempts to establish a cellular connection by searching
for the matching profile and APN in COSA.
October 6, 2016
N EW O R UP DAT ED TO P IC DESC RIP T IO N
Customize the taskbar New. Starting in Windows 10, version 1607, you can pin
up to three additional apps to the taskbar by adding a
taskbar layout modification file, for example,
TaskbarLayoutModification.xml. You can specify different
taskbar configurations based on SKU, device locale, or
region.
Set dark mode New. Windows 10, build 1607 exposes a new
personalization setting for end users, allowing them to
express preference whether to see applications which
support the setting in a dark or light mode.