Mobile Customizations
Mobile Customizations
Mobile Customizations
Customize
Desktop customizations
Taskbar
Start layout
Out of Box Experience (OOBE)
OOBE.xml
Cortana voice support
OOBE screen details
Windows updates during OOBE
OEM HID pairing
OEM license terms
OEM registration pages
Design your registration pages
Configure OOBE.xml
Protect and collect user data
Automate OOBE
Retail demo experience
Windows performance power slider
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
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
Mobile customizations
Enterprise shared storage
Customize using the mobile MCSF framework
Managed Centralized Settings Framework (MCSF)
Customization answer file
Set phone metadata in DeviceTargetingInfo
Set languages and locales
Create a resource-only .dll for localized strings
Customizations for device management
Enabling runtime configuration
Managing runtime configuration data
Override the default CountryTable.xml
Setting the UICC slot for branding configuration
Customizations for hardware components
Buttons: Enabling the Start button to wake the phone
Camera: Improved user experience for phones without a HW camera button
Display: Building images for FWVGA panels with static software buttons
Display: Building images with user-managed software buttons
Networking: Configuring the MTU data size
Sensors: Auto brightness
Storage: Enabling the packed commands feature for eMMC
Storage: Enabling the UHS-1 feature for SD cards
Storage: Enabling the HS200 feature for eMMC
Touch: Defining capacitive button behavior
Touch: Describing the physical width and height of the display
Touch: Specifying the repeat rate for touch samples during touch-and-hold
presses
Customizations for applications and Microsoft components
Active phone cover settings
Customize the SIM toolkit
Enhanced apps experience for medium and large screens
Include required Microsoft components to the image
Phone call/SMS filter applications
Preload an app with a dependency
Remove optional Microsoft components from the image
Store live tile
Customizations for boot, initial setup, and shutdown
Configure the timezone confirmation page during setup
Configuring a boot screen to display in the final boot screen slot
Configuring boot battery charging behavior
Configuring OEM and mobile operator boot screens
Configuring the duration of the first boot screen
Custom shutdown screen
Language selection during initial setup
Partner account configuration during setup
Screen background color during initial setup
Set the default country/region when SIM PIN is on
Customizations for browser
Custom HTTP headers for Microsoft Edge
Custom user agent string for Microsoft Edge
Default value for browser data saver
Show pictures automatically when browsing
Welcome home page for Microsoft Edge
WinInet ReceiveTimeOut duration
Customizations for Cellular connectivity
Background cellular data restriction
Cellular data connection icon
Connection speed option
Custom percentages for signal strength bars
Data transfer indicator
Default highest connection speed
Default roaming option
Disable Cell Broadcast
Extended error messages for reject codes
Hide CDMA mode selection
Hide Cellular & SIM Settings
LTE attach: GUID for user configured internet APN
LTE attach: Mapping OEMConnectionId values to modem profiles
Manual network selection timeout
Maximum number of PDP contexts
Permanent automatic mode
Preferred data provider list
Remove cellular functionality from the device
Roaming filter
Customizations for Wi-Fi settings and connectivity
Authentication for Wi-Fi hotspot settings
Cellular data fallback when in limited Wi-Fi connectivity
Change Wi-Fi to WLAN
Connecting to open Wi-Fi hotspots in Windows 10
Enable static IP
Limited connectivity status
Wi-Fi always on, always connected
Wi-Fi calling errors
Wi-Fi calling operator name
Wi-Fi icon and notifications
Customizations for contacts
Cortana phone number
Disable wait for phonebook ready signal from the modem
Hide contacts without phone numbers
Sort order for contacts
Sort order for contacts override
Customizations for desktop experiences
Control Panel device icon
Phone image in the phone app
Customizations for display and lock screen
Additional lock screen backgrounds
Brightness tuning
Default theme and accent color for Kid's Corner
Enable dark mode
Hide the auto brightness setting
Lock screen notifications
Lock screen timeout for AMOLED and OLED displays
Warning about light theme for AMOLED and OLED screens
Customizations for email
Light or dark theme in email
Customizations for keyboard
Disable text correction and suggestions
Hardware keyboard character repeats hold time and delay
On-screen keyboard delay
Pre-enabled keyboard
Text correction and suggestions
Customizations for maps
Map data on an SD card and map preload
Maps for phones shipped in China
Preloaded map data in the user store
Temporary map data cache size
Customizations for notifications and quick actions
Add an LED notification option
Configure Quick actions
CMAS Required Monthly Test
Display CMAS message order
Emergency notifications
Customizations for phone calls
Adjust the call duration information for CDMA calls
Always display the dialed phone number
Branding for phone calls
Caller ID matching
Cause codes
Conditional call forwarding
Configure DTMF tones
Configure message waiting indicator notifications
Dialer codes for supplementary services
Dialer codes to launch diagnostic applications
Dial string overrides when roaming
Disable link to contact card in active call screen
Disable video upgrade Store navigation
Disable voicemail phone number display
Dismiss the last USSD waiting dialog
Emergency phone numbers
Enable call recording by default
Enable IMS services
Enable RCS
Hide call forwarding
Maximum number of participants in a VoLTE conference call
Network-controlled caller ID settings
Override the voicemail number on the UICC
Supplementary services exclusions
Trim supplementary service codes
Use OK for USSD dialogs
Use HD audio codec for call branding
Use voice domain for emergency call branding
Visual voicemail
Voice over LTE call indication
Voicemail number for CDMA phones
Customizations for photos, music, and videos
Adding OEM lens apps as options for the default camera
Audio volume limitation
Configure OEM lens apps to launch above the lock screen
Configure the FM radio
Maximum enumerable photo size
Reset the audio volume limitation and warning
Settings for capture mode, burst support, and burst storage duration
Video over LTE
Customizations for ringtones + sounds
Additional alarms
Additional notification sounds
Additional ringtones
Call drop and call waiting sounds
Camera shutter sound
Ringtone store application
Customizations for SMS and MMS
Add encoding extension tables for SMS
Automatic send retry and resize settings for MMS messages
Automatically retry downloading MMS messages
Content location in the multimedia message service center (MMSC)
Delay for resend attempts
Disable editing of the SMS center number
Disable the EMS long messages feature
Expiration time for SMS messages
Extract phone numbers in strings
Full error messages for SMS and MMS
IMS retry
IMSI authentication
International assisted dialing for SMS
Maximum length for SMS messages
Maximum number of attachments for MMS messages
Maximum number of recipients for SMS and MMS
MMS APN settings
MMS automatic download
MMS data options
MMS delivery confirmation
MMS for group messages
MMS receipt acknowledgement
Permanent SMS message failures
Ports that accept cellular broadcast messages
Proxy authorization for MMS
Select multiple recipients for SMS and MMS messages
Send SMS messages to SMTP addresses
Server for MMS acknowledgement messages
SMS delivery confirmation
SMS encoding
SMS intercept deny list
SMS intercept ports
Support HTTP cache-control no-transform for MMS
Supported protocols for service indication messages
Switch from SMS to MMS for long messages
Truncated content handling for WAP push notification
Use insert-address-token or local raw address
Use UTF-8 for MMS messages with unspecified character encoding
User agent profile for MMS messages
User agent string for MMS messages
User alert for service indication messages
Video attachments in MMS
Voicemail SMS intercept
Customizations for SIM settings
Add a suffix to the mobile operator name
Additional Internet APN settings
Change SIM to SIM/UIM
Change the default SIM name to match the SPN or operator name
Configure C+G dual SIM settings
Hide the SIM security settings option
Remove the trailing MSISDN digits on a SIM card
Settings for IMS services
View Internet APN
Customizations for locale-based settings
Assistance for dialing international phone numbers
China Type Approval requirement: app install prompts
Contact management on the SIM (CN only)
Disable NITZ or daylight saving time
Display location icon
Ignore NITZ information from LTE networks
Microsoft Store for China
Mobile device languages
Network Time Protocol support
Regional format
Speech languages
Default list of countries/regions
Preferred system types for phone connectivity (CN only)
Threshold for automatic time update
Time zone priority list
WAP browser support (CN and IN only)
Customizations for accessibility settings
Telecoil and TTY support for accessibility
Customizations for phone update settings
Auto scan for phone updates
Block using SD card for updates
Enable SD card override
Customizations for USB settings
Enable the incompatible charger notification
Enable the data connection prompt
Hide the weak charger notification option UI
Registry values for mobile operator IDs
Registry values for carrier-unlocked phones
Power settings
Adaptive hibernate
StandbyBudgetPercent
StandbyReserveTime
Power controls
EnableInputSuppression
IgnoreCsComplianceCheck
LidNotificationsAreReliable
Processor power management options
Static configuration options for core parking
CPMinCores
CPMaxCores
CPIncreaseTime
CPDecreaseTime
CPConcurrency
CPDistribution
CPHeadroom
CpLatencyHintUnpark
Static configuration options for the performance state engine
MaxPerformance
MinPerformance
PerfIncreaseThreshold
PerfIncreaseTime
PerfDecreaseThreshold
PerfDecreaseTime
PerfLatencyHint
PerfAutonomousMode
PerfEnergyPreference
PerfAutonomousWindow
DutyCycling
Static configuration options for heterogeneous power scheduling
HeteroIncreaseThreshold
HeteroDecreaseThreshold
HeteroIncreaseTime
HeteroDecreaseTime
HeteroClass1InitialPerf
HeteroClass0FloorPerf
Battery settings
Critical battery action
Critical battery threshold
Low battery action
Low battery threshold
Low battery warning
Reserve battery level
Power button and lid settings
Lid open wake action
Lid switch close action
Power button action
Power button forced shutdown
Sleep button action
Display settings
Adaptive display idle timeout
Allow display required policy
Dim annoyance timeout
Dim display brightness
Display brightness level
Display idle timeout
Disk settings
Disk burst ignore time
Disk idle timeout
Link power management mode - adaptive
Link power management mode - HIPM/DIPM
Energy Saver settings
Battery threshold
Brightness
PCI Express settings
Link state power management
Sleep settings
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
Device idle policy
Prompt for password on resume
Allow networking during standby
Legacy configuration options
PERFBOOSTMODE
PERFBOOSTPOL
Preinstalled and exclusive apps
Exclusive apps
Preinstallable apps for desktop devices
Preinstallable apps for mobile devices
Preinstall tasks
Change history for customization docs
Customize
1/18/2019 • 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.
Windows 10 supports both pre-existing desktop Unattend settings, and mobile Managed Centralized Settings
Framework (MCSF ), for configuring customization options for Windows 10 devices.
See the following sections for more information about what you can do to customize your Windows 10 devices.
TOPIC DESCRIPTION
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.
Customizations for mobile Learn about the customizations for mobile enterprise, which
allow you to run mobile line-of-business applications on a
platform that ensures that data is captured securely and
efficiently. This section includes all customization options
available as part of the Managed Centralized Settings
Framework (MCSF).
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 Windows 10 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
1/18/2019 • 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.
TOPIC DESCRIPTION
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 size of the start menu, and add
your own tiles to it.
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.
TOPIC DESCRIPTION
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
2/4/2019 • 4 minutes to read
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>
DesktopApp
DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start
Menu\Programs\Accessories\Paint.lnk"
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 Start, 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 Start layout
1/18/2019 • 11 minutes to read
You can customize the Start layout by creating a LayoutModification.xml file and configuring the settings. 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.
LayoutModification.xml
The XML schema for LayoutModification.xml requires the following order for tags directly under the
LayoutModificationTemplate node:
1. LayoutOptions
2. DefaultLayoutOverride
3. RequiredStartGroupsCollection
4. AppendDownloadOfficeTile –OR – AppendOfficeSuite (only one Office option can be used at a time)
5. AppendOfficeSuiteChoice
6. TopMFUApps
7. CustomTaskbarLayoutCollection
8. InkWorkspaceTopApps
Comments are not supported in the LayoutModification.xml file.
For an inclusive list of settings you can configure in LayoutModification.xml , a full XML example, and instructions
on adding the XML file to the device, see Start layout XML for desktop editions of Windows 10 (Reference).
We also recommend placing a backup copy of the file at C:\Recovery\AutoApply\LayoutModification.xml so it will be
restored during a push-button reset.
NOTE
We suggest you leave the default values for these features so that Windows can use its own logic to do the right thing for
the customer. You can, however, adjust the following OS features if you have a scenario that requires it. For example, if you
have a device that is meant mainly for use as a tablet, but is bigger than 10", you can use SignInMode.
Here is how you set the size of the start layout, using LayoutModification.xml.
To set as small, with one column of tiles:
<LayoutOptions
StartTileGroupsColumnCount="1"
FullScreenStart="false"
/>
<LayoutOptions
StartTileGroupsColumnCount="2"
FullScreenStart="false"
/>
To set as full screen (and set the default to one column if the user disables full screen):
<LayoutOptions
StartTileGroupsColumnCount="1"
FullScreenStart="true"
/>
IMPORTANT
Setting FullScreenStart to true requires rebooting the device to take effect.
We recommend you configure this setting to optimize the Start layout for the size of your device's screen. If this
setting is not configured in LayoutModification.xml , Windows will use its own logic to set the number of tiles per
row.
<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">
<LayoutOptions StartTileGroupCellWidth="8" />
</LayoutModificationTemplate>
The number of tiles you select will be divided evenly between the two columns in the Start layout. For example, if
you choose to show 6 medium tiles per row, each columns will contain 3 tiles.
NOTE
Each tile pinned to the Start layout can launch a single UWP app, Microsoft Store app, desktop app, or web link. A tile can’t
be a group of apps or a folder.
App tiles
You can add an app tile that will launch a Universal Windows app, or a Windows 8/8.1 app, using start:Tile in
LayoutModification.xml . To specify the app you wish the launch, you must set the AppUserModelID attribute of
start:Tile to the application user model ID ( AUMID ) associated with the app. The AUMID is case-sensitive.
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.
The following example shows how to pin the Microsoft Edge Universal Windows app:
<start:Tile
AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge"
Size="2x2"
Row="0"
Column="0"/>
You can use the start:DesktopApplicationTile tag to pin a Windows desktop application to Start. There are two
ways you can specify a Windows desktop application:
By setting DesktopApplicationLinkPath to a path to a shortcut link (.lnk file) to a Windows desktop application.
By setting the DesktopApplicationID to the application's ID, if this is known. If the Windows desktop application
doesn't have one, use the shortcut link option.
The following example 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="4"/>
The following example show 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="2"/>
<!-- Web link tile with associated .url file in StartMenu folder -->
<start:DesktopApplicationTile
DesktopApplicationID="www.Fabrikam.com"
Size="2x2"
Row="0"
Column="2"/>
To create a secondary tile (a web link tile that will open in Microsoft Edge), add a SecondaryTile element to
LayoutModification.xml and specify Edge in the AppUserModelID attribute.
<!-- Web link tile that launches in Edge -->
<start:SecondaryTile
AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge"
TileID="MyWeblinkTile"
Arguments="http://msn.com"
DisplayName="MySite"
Square150x150LogoUri="ms-appx:///Assets/MicrosoftEdgeSquare150x150.png"
Wide310x150LogoUri="ms-appx:///Assets/MicrosoftEdgeWide310x150.png"
ShowNameOnSquare150x150Logo="true"
ShowNameOnWide310x150Logo="false"
BackgroundColor="#FF112233"
Size="2x2"
Row="0"
Column="4"/>
NOTE
The Edge tile itself cannot be customized. The icon, text and the page that it launches must remain the default.
The OEM -custom icon and supporting text in the tile must:
Logically relate to the activity or action the user is expected to take
Launch the Edge browser
The icon and supporting text should not imply that it is anything other than Edge (e.g. another browser)
The page that it goes to must work in Edge
The page should not promote another browser
<start:SecondaryTile AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge"
TileID="MyWeblinkTile"
Arguments="http://msn.com"
DisplayName="MySite"
Square150x150LogoUri="ms-appx:///Assets/MicrosoftEdgeSquare150x150.png"
Size="2x2"
Row="0"
Column="4"/>
NOTE
The version of Office you indicate in LayoutModification.xml must match the version of Office that's pre-installed to the
device.
For example:
<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">
<AppendOfficeSuite/>
<AppendOfficeSuiteChoice Choice="DesktopBridgeSubscription"/>
</LayoutModificationTemplate>
This will set the heading of the Office suite of tiles to Office 365, to highlight the Office 365 apps you've made
available on the device. For example:
NOTE
Tile sizes and positions may vary based on the device SKU, region, and the size of the Start layout.
For older versions of Windows, and for devices shipping with Activation for Office (AFO ) Perpetual, add the
following two tags to LayoutModification.xml :
<AppendOfficeSuite/>
<AppendOfficeSuiteChoice Choice="DesktopBridge"/>
<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">
<AppendOfficeSuite/>
</LayoutModificationTemplate>
The Office mobile apps will appear as tiles in the Start layout under the heading Create.
Download Office
If you have not pre-installed Office to the device, you can append the Download Office tile to Start. This replaces
the My Office tile that appears in the middle of the second row with the classic desktop app download tile, and
supports all OEM scenarios including Activation for Office (AFO ) and Pre-install PC (PIPC ).
To append the Download Office tile, add the <AppendDownloadOfficeTile/> tag in your LayoutModification.xml
file. For example:
<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">
<AppendDownloadOfficeTile/>
</LayoutModificationTemplate>
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)
2/12/2019 • 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. Cortana 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 (EULA )
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 Cortana 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.
TOPIC DESCRIPTION
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
1/18/2019 • 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
1/18/2019 • 3 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 build 18309 and Windows 10 19H1 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 language value you set in OOBE.xml impacts the voice used during OOBE. The OOBE.xml value for 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:
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 OOBE
1/18/2019 • 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 HID pairing
1/18/2019 • 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:
<mouseErrorImagePath> The path to a mouse pairing error image. If the customer can't
pair the mouse in three tries, this error screen appears.
OOBE.XML SETTING DESCRIPTION
<mouseErrorText> Error that displays to users along with mouse pairing error
image.
<keyboardErrorText> Error that displays to users along with keyboard 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>
OEM license terms
1/18/2019 • 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
Do not add links to your EULA, as the user should not navigate away from the license terms.
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] {
[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.
<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
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
1/18/2019 • 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.
TOPIC DESCRIPTION
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 your registration pages
1/18/2019 • 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.
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-top: 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>
ELEMENT SETTING DESCRIPTION VALUE
<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:
Protect and collect user data
1/18/2019 • 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.
Code snippet
This code snippet shows how to generate the keys:
HRESULT WriteByteArrayToFile(_In_ PCWSTR pszPath, _In_reads_bytes_(cbData) BYTE const *pbData, DWORD cbData);
// 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);
if (SUCCEEDED(hr))
{
hr = WriteByteArrayToFile(L"plaindata.xml", pbPlain, dwPlain);
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 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.
Related topics
Automate Windows Setup
Windows Auto Pilot
Customize the Retail Demo Experience (RDX)
1/25/2019 • 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 try 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:
ELEMENT REQUIREMENTS
Call-to-action (CTA) button text We recommend an 11-character limit, not counting spaces in
between characters.
ELEMENT REQUIREMENTS
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:
ELEMENT REQUIREMENTS
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.
NOTE
To support languages, your images will need Retail Demo Mode language packs.
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
1/18/2019 • 8 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.
WINDOWS PROVISIONING PATH PROVISIONING SETTING NAME VALUES
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.
<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>
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.
Query for power slider settings
There are two logs you can utilize to query the performance power slider settings defined on an OS image:
Powercfg output, and Event Tracing for Windows (ETW ) logs.
PowerCfg output
Run “powercfg /qh > output.txt" from an elevated command prompt, then open output.txt in any text editor to
view the settings.
Event tracing for Windows (ETW) logs
Use the inbox WPRUI.exe or WPR.exe to collect an ETW log with the POWER scenario enabled. To collect and
analyze the ETW log:
1. Launch an elevated command prompt window
2. Enter the command: WPR -start power -filemode
3. Using the power slider UX, move the slider to each of the four modes
4. Go back to the elevated command prompt window and enter the command:
WPR -stop PerfPowerSliderSettings.etl
5. Open PerfPowerSliderSettings.etl in the Windows Performance Analyzer (WPA) tool. WPA comes bundled
with the Windows Assessment and Deployment Kit (Windows ADK).
6. Click on Trace.
7. Click on System Properties then System configuration.
8. In the new tab that opens, click on Power Settings.
Set dark mode
1/18/2019 • 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
1/18/2019 • 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
1/18/2019 • 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.
TYPE IDENTIFICATOR
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.
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".
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.
VALUE NAME 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
1/18/2019 • 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.
TOPIC DESCRIPTION
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.
Unbranded Boot Unbranded Boot 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.
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
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
DESCRIPTIO
VALUE N
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION DESCRIPTIO
VALUE N
0 A valid
accou
nt is
config
ured,
but no
Windo
ws
app is
specifi
ed.
Assign
ed
access
is not
enable
d.
1 Assign
ed
access
is
enable
d.
0x100 UserSI
D
error:
cannot
find
the
accou
nt.
0x103 UserSI
D
error:
the
accou
nt
profile
does
not
exist.
0x200 AppUs
erMo
delID
error:
cannot
find
the
Windo
ws
app.
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION DESCRIPTIO
VALUE N
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) {
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
WINDOWS EDITION SUPPORTED
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.
Disable the Blocked Shutdown Resolver (BSDR) screen so static const DWORD EMBEDDED_DISABLE_BSDR=
that restarting or shutting down the system causes the 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
1/18/2019 • 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
KEY NAME VIRTUAL KEY DESCRIPTION
## State keys
OEM keys
KEY NAME VIRTUAL KEY DESCRIPTION
Function keys
KEY NAME VIRTUAL KEY DESCRIPTION
Related topics
Keyboard filter
Predefined key combinations
1/18/2019 • 4 minutes to read
This topic lists the key combinations that are predefined 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+LAlt+PrintScrn Open High Contrast.
Left Alt + Left Shift + Num Lock LShift+LAlt+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
KEY COMBINATION WEKF_PREDEFINEDKEY.ID BLOCKED BEHAVIOR
Windows logo key + Shift + Left Arrow Win+Shift+Left Move the active window to left 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):
KEY COMBINATION WEKF_PREDEFINEDKEY.ID BLOCKED KEY
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
METHODS DESCRIPTION
Properties
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
DESCRIPTIO
VALUE N
true Indicat
es that
the
key is
blocke
d.
false Indicat
es that
the
key is
not
blocke
d.
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
Keyboard Filter WMI provider reference
Keyboard Filter key names
WEKF_CustomKey.Add
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
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
WINDOWS EDITION SUPPORTED
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
METHODS DESCRIPTION
Properties
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
Keyboard Filter WMI provider reference
Keyboard Filter
WEKF_PredefinedKey.Disable
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
WEKF_PredefinedKey
Keyboard Filter
WEKF_PredefinedKey.Enable
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
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
METHODS DESCRIPTION
Properties
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
DESCRIPTIO
VALUE N
true Indicat
es that
the
scan
code
is
blocke
d.
false Indicat
es that
the
scan
code
is not
blocke
d.
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
WINDOWS EDITION SUPPORTED
Windows 10 Pro No
Related topics
Keyboard Filter WMI provider reference
Keyboard Filter
WEKF_Scancode.Add
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
WEKF_Scancode
Keyboard Filter
WEKF_Scancode.Remove
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
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
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
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.
Important 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
WINDOWS EDITION SUPPORTED
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 `
-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.";
}
}
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/11/2019 • 10 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.
NOTE
You cannot configure both Shell Launcher and assigned access on the same system.
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
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.
1 3 (do nothing)
}
"@
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
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()
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/11/2019 • 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
METHODS DESCRIPTION
Properties
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
DESCRIPTIO
VALUE N
0 Restar
t the
shell.
1 Restar
t the
device
.
2 Shut
down
the
device
.
3 Do
nothin
g.
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
DESCRIPTIO
VALUE N
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"
$NAMESPACE = "root\standardcimv2\embedded"
# Create a handle to the class instance so we can call the static methods.
$ShellLauncherClass = [wmiclass]"\\$COMPUTER\${NAMESPACE}:WESL_UserSetting"
# This well-known security identifier (SID) corresponds to the BUILTIN\Administrators group.
$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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
Shell Launcher
WESL_UserSetting.GetCustomShell
3/11/2019 • 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:
VALUE DESCRIPTION
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:
VALUE DESCRIPTION
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.RemoveCustomShell
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.SetCustomShell
3/11/2019 • 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:
VALUE DESCRIPTION
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:
VALUE DESCRIPTION
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.SetDefaultShell
3/11/2019 • 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:
VALUE DESCRIPTION
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
WINDOWS EDITION SUPPORTED
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.GetDefaultShell
3/11/2019 • 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:
VALUE DESCRIPTION
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
WINDOWS EDITION SUPPORTED
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.IsEnabled
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
WESL_UserSetting
Shell Launcher
WESL_UserSetting.SetEnabled
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
WESL_UserSetting
Shell Launcher
Unbranded Boot
1/18/2019 • 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 startup options menu, type the
following:
4. To suppress all Windows UI elements (logo, status indicator, and status message) during startup, type the
following:
SETTING DESCRIPTION
DisableBootMenu Contains an integer that disables the F8 and F10 keys during
startup to prevent access to the Advanced startup options
menu.
Set to 1 to disable the menu; otherwise; set to 0 (zero).
The default value is 0.
TIP
See SMISettings in the Windows Configuration Designer reference for more information about the available
SMISettings.
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.
Related topics
Custom Logon
Unified Write Filter (UWF) feature
1/25/2019 • 4 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 like Microsoft Intune using 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 Education, or Windows 10 IoT Core 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 startup (recommended).
UWF does not support Storage Spaces.
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.
UWF servicing mode
When a device is protected with UWF, you must use UWF servicing mode commands to service the device
and apply updates to an image. You can use UWF servicing mode to apply Windows updates, antimalware
signature file updates, and custom software or third-party software updates.
For more information about how to use UWF servicing mode to apply software updates to your device, see
Service UWF -protected devices.
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)
1/18/2019 • 3 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.
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
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:
uwfmgr.exe file add-exclusion E:\VHD\test.vhd
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
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.
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\services\Wlansvc
Wireless: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WwanSvc
Wired: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\dot3svc
Daylight saving time (DST )
You can add the following registry exclusions to persist daylight saving time (DST) settings on your device.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
Related topics
Unified Write Filter
Service UWF -protected devices
Unified Write Filter WMI provider reference
Unified Write Filter (UWF) overlay location and size
1/25/2019 • 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
Restart:
CMD: uwfmgr restart
CSP: RestartSystem
WMI: UWF\Filter.RestartSystem
Related topics
Unified Write Filter
Use the Unified Write Filter (UWF) feature
1/25/2019 • 3 minutes to read
uwfmgr.exe get-config
Install UWF on a customized Windows image
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
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 .
Install the UWF feature by using Windows Management
Instrumentation (WMI)
If Windows has already been installed and you do not want to use a provisioning package, you can also configure
UWF by using the Windows Management Instrumentation (WMI) providers. To turn on UWF using WMI, you can
use the UWF_Filter function, specifically the UWF_Filter.Enable method. You can do this in one of the following
ways:
Use the WMI providers directly in a PowerShell script.
Use the WMI providers directly in an application.
Use the command line tool, uwfmgr.exe.
You must restart your device after you turn on or turn off UWF before the change takes effect.
You can change these settings after you turn on UWF if you want to. For example, you can move the page file
location to an unprotected volume and re-enable paging files.
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
1/25/2019 • 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 use 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
TOPIC DESCRIPTION
Antimalware support on UWF-protected devices Describes the procedures to add support for Windows
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
2/27/2019 • 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-Servicing. 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 UwfServicingScr 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 Services
Logs\Microsoft\Windows\UnifiedWriteFilter\Admin event log.
Informational messages are logged in the Applications and Services
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
1/18/2019 • 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
PROPERTY DATA TYPE QUALIFIER DESCRIPTION
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
WINDOWS EDITION SUPPORTED
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
PROPERTY DATA TYPE QUALIFIER DESCRIPTION
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
WINDOWS EDITION SUPPORTED
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
METHODS DESCRIPTION
Properties
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
WINDOWS EDITION SUPPORTED
Windows 10 Pro No
Related topics
Unified Write Filter WMI provider reference
Unified Write Filter
UWF_Filter.Disable
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Filter
Unified Write Filter
UWF_Filter.Enable
1/18/2019 • 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.
Requirements
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Filter
Unified Write Filter
UWF_Filter.RestartSystem
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Filter
Unified Write Filter
UWF_Filter.ShutdownSystem
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
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
METHODS DESCRIPTION
UWF_Overlay.SetWarningThreshold Sets the warning threshold for monitoring the size of the
UWF overlay.
UWF_Overlay.SetCriticalThreshold Sets the critical warning threshold for monitoring the size
of the UWF overlay.
Properties
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
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
WINDOWS EDITION SUPPORTED
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
METHOD DESCRIPTION
Properties
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
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
WINDOWS EDITION SUPPORTED
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_OverlayConfig
Unified Write Filter
UWF_OverlayConfig.SetType
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
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
PROPERTY DATA TYPE QUALIFIER DESCRIPTION
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter WMI provider reference
Unified Write Filter
UWF_Overlay.GetOverlayFiles
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Overlay
Unified Write Filter
UWF_Overlay.SetCriticalThreshold
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Overlay
Unified Write Filter
UWF_Overlay.SetWarningThreshold
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
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
METHOD DESCRIPTION
UWF_RegistryFilter.AddExclusion Adds a registry key to the registry exclusion list for UWF.
UWF_RegistryFilter.RemoveExclusion Removes a registry key from the registry exclusion list for
Unified Write Filter (UWF).
Properties
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
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_RegistryFilter 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-RegistryExclusions, displays a list of UWF registry exclusions for both the current session
and the next session that follows a restart.
The second function, Add-RegistryExclusion, adds a registry entry to the UWF registry exclusion list after you
restart the device.
The third function, Remove-RegistryExclusion, removes a registry entry from the UWF exclusion list after you
restart the device.
The fourth function, Clear-RegistryExclusions, 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 {
Write-Host "Could not remove exclusion $exclusion."
}
} else {
Write-Error "Could not retrieve UWF_RegistryFilter";
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter
UWF_RegistryFilter.AddExclusion
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_RegistryFilter.CommitRegistry
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_RegistryFilter.CommitRegistryDeletion
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_RegistryFilter.FindExclusion
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_RegistryFilter.GetExclusions
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_RegistryFilter
Unified Write Filter
UWF_RegistryFilter.RemoveExclusion
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
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
METHOD DESCRIPTION
Properties
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter
UWF_Servicing.Disable
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Servicing
Unified Write Filter
UWF_Servicing.Enable
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Servicing
Unified Write Filter
UWF_Servicing.UpdateWindows
1/18/2019 • 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:
UPDATESTATUS DESCRIPTION
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Servicing
Unified Write Filter
UWF_Volume
1/18/2019 • 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
METHOD DESCRIPTION
UWF_Volume.AddExclusion Adds a file or folder to the file exclusion list for a volume
protected byUWF.
UWF_Volume.Protect Protects the volume after the next system restart, if UWF
is enabled after the restart.
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
PROPERTY DATA TYPE QUALIFIERS DESCRIPTION
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
Unified Write Filter
UWF_Volume.AddExclusion
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.CommitFileDeletion
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.FindExclusion
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.GetExclusions
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.Protect
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.RemoveAllExclusions
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.RemoveExclusion
1/18/2019 • 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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.SetBindByDriveLetter
1/18/2019 • 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.
VALUE DESCRIPTION
true Binds the UWF volume by the drive letter (loose binding).
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
UWF_Volume.Unprotect
1/18/2019 • 2 minutes to read
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
WINDOWS EDITION SUPPORTED
Windows 10 Home No
Windows 10 Pro No
Related topics
UWF_Volume
Unified Write Filter
uwfmgr.exe
1/18/2019 • 6 minutes to read
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
1/18/2019 • 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 Overview Describes the user interface of Windows SIM.
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
1/18/2019 • 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
MENU COMMAND DESCRIPTION
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
MENU COMMAND DESCRIPTION
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
MENU COMMAND DESCRIPTION
Validate Answer File Validates the XML and other settings in the answer file.
Settings are validated against the currently open Windows
image.
MENU COMMAND DESCRIPTION
Create Catalog Generates a catalog file. For more information, see Open a
Windows Image or Catalog File.
Help Menu
MENU COMMAND DESCRIPTION
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
1/25/2019 • 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
YOUR VERSION OF WINDOWS WINDOWS IMAGES YOU CAN CREATE CATALOG FILES FROM
Related topics
Open a Windows Image or Catalog File
Windows System Image Manager Overview Topics
Answer Files Overview
1/18/2019 • 2 minutes to read
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
1/18/2019 • 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
1/18/2019 • 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.
FOLDER DEFINITION
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
1/18/2019 • 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
1/18/2019 • 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 Insert 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 Insert 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 Insert 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
1/25/2019 • 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.
Important Adding language packs to the \Langpacks directory can extend the Windows Setup installation time.
Packages in the \Langpacks directory are added to the Windows image during the windowsPE configuration
pass, before Windows is actually installed. If Windows Setup must install several language packs, then installation
might be delayed.
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
1/18/2019 • 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
1/18/2019 • 7 minutes to read
Windows System Image Manager (Windows SIM ) displays the properties and settings of a selected component or
package in the Properties 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 Properties 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.
PROPERTY DESCRIPTION
AppliedConfigurationPass Specifies the configuration pass that all child settings are
applied to.
Path Specifies the path to the setting from the component. The
path appears in the following format:
SettingName1/SettingName2/...
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 DESCRIPTION
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.
ProductVersion Specifies the product version that this package applies to.
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
COMMAND DESCRIPTION
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.
TYPE DESCRIPTION
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 Properties 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
1/18/2019 • 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
TOPIC DESCRIPTION
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.
Customizations for Windows 10 Mobile allow you to run mobile line-of-business applications on a platform that
ensures that data is captured securely and efficiently.
TIP
Before getting started with customizations, review the prerequisite requirements, and download the tools needed to
customize, test, and deploy Windows on mobile devices. See Prepare for Windows mobile development for guidance.
In this section
TOPIC DESCRIPTION
Enterprise shared storage Enterprise shared storage defines local data locations for line
of business apps to share data.
Customize using the mobile MCSF The Managed Centralized Settings Framework (MCSF) is part
of the customization and multivariant infrastructure first
introduced in Windows Phone 8.1 and is still supported in
Windows 10 Mobile. MCSF consists of both image time and
runtime components that enable these functionality. MCSF
creates configuration service providers for registry-backed
settings and custom configuration service providers can be
referenced for more complex settings.
Related topics
Prepare for Windows mobile development
Create mobile packages
Enterprise shared storage
1/18/2019 • 2 minutes to read
Enterprise shared storage defines local data locations for line of business apps to share data.
The shared storage consists of two locations, where apps with the restricted capability
enterpriseDeviceLockdown and an Enterprise certificate have full read and write access. Note that the
enterpriseDeviceLockdown capability allows apps to use the device lock down API and access the enterprise
shared storage folders. For more information about the API, see Windows.Embedded.DeviceLockdown
namespace.
These locations are set on the local drive:
\Data\SharedData\Enterprise\Persistent
\Data\SharedData\Enterprise\Non-Persistent
Scenarios
Enterprise shared storage provides support for the following scenarios.
You can share data within an instance of an app, between instances of the same app, or even between apps
assuming they both have the appropriate capability and certificate.
You can store data on the local hard drive in the \Data\SharedData\Enterprise\Persistent folder and it persists
even after the device has been reset.
Manipulate files, including read, write, and delete of files on a device via Mobile Device Management (MDM )
service. For more information on how to use enterprise shared storage through the MDM service, see
EnterpriseExtFileSystem CSP.
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
<Capabilities>
<rescap:Capability Name="enterpriseDeviceLockdown"/>
</Capabilities>
To access the shared data location, your app would use the following code.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using Windows.Storage;
StorageFolder folder =
await StorageFolder.GetFolderFromPathAsync(enterprisePersistentFolderRoot);
The Managed Centralized Settings Framework (MCSF ), which was introduced in Windows Phone 8.1, is supported
in Windows 10.
MCSF consists of both image time and runtime components that enable a simple and consistent way of declaring
OS settings, and a centralized framework that the runtime configuration engine, mobile operators, device
management servers, and others can query or modify these settings. A runtime configurable MCSF can either be a
configuration service provider-based customization or registry-based customization being exposed through the
MSCF CSP.
Similar to the Unattend answer file that can be provided to Windows Setup for Windows Desktop image
customization, a customization answer file can be passed to customize an image with specific settings and to create
variants for the image. The customization answer file allows for a broader integration across the OS by providing
OEMs with a single place to define nearly all OS settings. During image build time, the customization answer file is
processed and built as customization packages, which are automatically included in the images. OEM partners can
leverage this system by defining a registry or configuration service provider-based settings in packages using
MCSF. MCSF also produces customization policy files for both OEM partners and Microsoft. These files are
extracted from the packages used to build the OS image to determine the valid settings for the OS image.
In this section
TOPIC DESCRIPTION
Managed Centralized Settings Framework (MCSF) Provides a standard way to describe settings that are
customizable within packages. MCSF also generates a
policy based on the settings descriptions. The settings
framework can be image time or runtime configurable. A
runtime configurable MCSF can either be a configuration
service provider-based customization or registry-based
customization being exposed through the MSCF CSP.
Customization answer file A customization answer file is an XML file that you write
based on the MCSF schema. OEMs can use the MCSF
customization answer file to specify the settings and
variants for a custom mobile OS image. The customization
answer file allows for a broader integration across the OS
by providing OEMs with a single place to define nearly all
mobile OS settings.
Set languages and locales Provides an overview of the different language and locale
settings based on the market in which the mobile device
will ship.
Customizations for device management This section provides more information about device
management settings that OEMs can change.
TOPIC DESCRIPTION
Customizations for hardware components This section contains information about customization
settings that OEMs can use for the following hardware
components:
Buttons
Camera
Display
Networking
Sensors
Storage
Touch
Customizations for applications and Microsoft This section contains information about customizations
components related to apps and Microsoft components.
Customizations for boot, initial setup, and shutdown Use these customizations to configure the device boot,
initial setup, or shutdown experience.
Customizations for desktop experiences Describes the customizations that you can configure for
the desktop when the mobile device is connected.
Customizations for maps Describes the customizations that you can configure for
maps on the mobile device.
Customizations for phone calls Provides information about customizations you can
configure for the phone or dialer app including branding,
visual voicemail, caller ID matching, dialer codes, and
more.
Customizations for photos, music, and videos Contains the customizations you can configure for photos,
music, and videos.
Customizations for Settings The Settings app contains a predefined collection of user-
configurable system settings that's organized into pages
by functionality. As specified in policy, the appearance and
default values of these settings are generally not
customizable. The following table contain the complete list
of user-facing settings that OEMs and mobile operators
can change.
TOPIC DESCRIPTION
Customizations for SMS and MMS Contains settings that you can configure for SMS and
MMS.
Related topics
Prepare for Windows mobile development
Managed Centralized Settings Framework (MCSF)
1/18/2019 • 11 minutes to read
The Managed Centralized Settings Framework (MCSF ) is part of the customization and multivariant
infrastructure first introduced in Windows Phone 8.1 and is still supported in Windows 10 Mobile. This
component provides:
A simple and consistent way for Microsoft to declare various mobile OS settings.
All the necessary features and settings needed for mobile OS image and multivariant customization to be
declared and fully supported.
A centralized framework that the provisioning engine, mobile operators, device management servers, and
others can query or modify these settings.
MCSF consists of both image time and runtime components that enable these functionality. MCSF creates
configuration service providers for registry-backed settings and custom configuration service providers can be
referenced for more complex settings.
OEM partners can use MCSF and the MCSF packaging XML schema to declare and access custom OEM settings.
The following sections provide more information about how you can declare your custom settings that conform to
the MCSF packaging XML schema.
Declaring settings
Declared settings are added in the components’ existing .pkg.xml file as children of any Component element. For
example, the following XML exposes a simple DWORD in the registry as a setting in a package file:
<SettingsGroup Path="OSArea/Feature">
<Setting Name="Setting" Description="This is a DWORD registry value.">
<RegistrySource Type="REG_DWORD" Path="HKEY_LOCAL_MACHINE\Software\Sample\RegKey" />
</Setting>
</SettingsGroup>
Settings groups
Settings are grouped within the package file. A SettingsGroup element represents a settings group in the
customization answer file. This is the top-level element for the MCSF packaging XML. Each group can contain any
number of individual settings.
OEMs building their own flexible hierarchy of settings must choose an associated Path for each group of settings.
For example, ringtone settings may reside in a “Shell\Ringtones” group while lock screen settings may reside
under a “Shell\Wallpaper” group. Microsoft recommends using a Path naming scheme similar to the above
example: "OSArea/Feature"
Note
When naming your settings group, you must not include illegal file system characters in the settings group name.
This MSDN Web site provides some guidelines on naming conventions. You can use both \ and / but do not use
the reserved characters in your settings group name.
Group constraints
Some settings groups may have special properties. A Constraints element within the settings group declaration
indicates these special properties.
Note
If you are declaring a settings
group that is not in the MainOS
partition, you must specify this
settings group as image time
only.
<Setting Name="MyString">
<!-- Use '@' to specify the default registry value. The Path must resolve to a value, rather than a
key.
Note that this registry location will have a default value of 3. -->
<RegistrySource Type="REG_SZ" Path="HKEY_LOCAL_MACHINE\Software\Sample\@" Default="DefaultValue" />
</Setting>
To point your setting at a configuration service provider node, add a CSPSource element to the setting.
The CSPSource must contain a Path attribute that specifies the full URI path to the desired configuration
service provider node. You must also specify the Type attribute, which may contain one of the
ConfigManager2 data types such as CFG_DATATYPE_INTEGER, CFG_DATATYPE_STRING, and so on. The
following example shows what a configuration service provider-sourced setting looks like:
<Setting Name="MyPhoneVersion">
<CspSource Type="CFG_DATATYPE_STRING" Path="./devdetail/swv" />
</Setting>
Controlling access
You can control access to each setting by including an optional AccessType element. There are four AccessType
attributes: Create, Delete, Get, and Replace. There is also an All attribute that overrides any of the other access
types. These attributes default to “Yes” so if you omit AccessType altogether, this implies that all access is allowed
for your setting. You can use this element if you need to restrict the allowed operations for your setting.
The following example shows how to specify the type of access for a setting:
<Setting Name="NoDeleteSetting">
<RegistrySource Type="REG_DWORD" Path="HKEY_LOCAL_MACHINE\Software\Sample\NoDelete" Default="3" />
Note
This access control is done at the MCSF configuration service provider level and is not intended to take the place
of security. If you need to protect your registry locations, you must do so using capabilities.
Validating settings
MCSF allows you to specify simple rules to control which values are allowed for your settings. To do this, add a
Validate element for your setting. There are three methods to validate a setting:
For numeric values, you can specify a minimum and/or a maximum value. You can do this by setting the
Min and Max attributes in the Validate element.
<Setting Name="MyNumericSetting">
<RegistrySource Type="REG_DWORD" Path="HKEY_LOCAL_MACHINE\Software\Sample\Number" Default="3" />
For string values, you can specify a minimum and/or a maximum string length. You can do this by setting
the MinLength and MaxLength attributes in the Validate element.
<Setting Name="MyString">
<RegistrySource Type="REG_SZ" Path="HKEY_LOCAL_MACHINE\Software\Sample\PutStringHere" Default="" />
You can also specify an explicit list of allowed values for your setting. You can do this by adding the Option
element to the Validate element for each allowed value. Option elements have a Value attribute and an
optional FriendlyName attribute. You can use the friendly name to show identifiable string names in your
customization tools for simple enum values. The following example shows several options with friendly
names:
<Setting Name="MyEnum">
<RegistrySource Type="REG_DWORD" Path="HKEY_LOCAL_MACHINE\Software\Sample\PutOneOfListHere"
Default="1" />
<!-- The Value attribute has to be one of the following values. -->
<Validate>
<Option Value="0" FriendlyName="Red" />
<Option Value="1" FriendlyName="Green" />
<Option Value="2" FriendlyName="Blue" />
</Validate>
</Setting>
Options for numeric settings must be specified in hexadecimal format, but without a 0x prefix.
Settings that reference files
Some settings may be related to asset files, such as lock screen backgrounds, that OEMs or mobile operators
include in the phone image. To specify an asset file, use an Asset element to your settings group. Each Asset
element must specify a unique asset Name attribute as well as a Description. Assets are defined by a number of
properties that help the imaging system validate their content.
The asset contains a Type attribute that specifies a semicolon delimited list of file extensions that the setting
supports. OEMs must also specify a Path attribute to indicate where the OEM assets should be placed on the
phone.
Any Setting can reference any existing asset by specifying the Asset attribute. This indicates to the OEM
customization tools that the setting expects to use an asset filename for its value.
Note
When creating your own policy settings and you're adding an Asset to a SettingsGroup, you must specify the
Asset within the SettingsGroup first. Otherwise, the package containing your policy settings will not get built.
The following example shows how an Asset as the first attribute declared within the SettingsGroup and a
Setting that references the Asset that was declared:
<SettingsGroup Path="LockScreen">
<Asset Name="Wallpapers" Type=".jpg;.jpeg;.png" Path="\Programs\CommonFiles\Wallpapers" Description="Use to
add lock screen backgrounds to the phone." >
<MultiStringList Key="HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\OEM\Wallpaper" Value="WallpaperSet"
/>
</Asset>
Asset names can include macros and allow you to put files into locations based on the value of the macro
specified in the asset name.
Warning
Macros in SettingsGroup paths do not work with Assets. To use a macro in an Asset path, the macro reference
must be part of the Asset name.
<SettingsGroup Path="Contoso/MyConfig">
<Asset Name="MyVariant/$(VarType)"
Type=".txt"
Path="\Programs\CommonFiles\OEM\Public\Contoso\$(VarType)\"
Description="Use to write a text file" />
</SettingsGroup>
Optionally, the image customization process can build a list of supplemental asset files added by OEM partners or
mobile operator partners and set the list in the registry. There are two models that support this:
OEMs can use the ValueList element within your asset declaration if your component expects a list of extra
files to appear in the registry as individual values per file under a parent key. The ValueList element has
two attributes, OEMKey and MOKey, which specify where OEM and mobile operator files should be listed,
respectively. The customization tooling creates one value for each asset file added by the OEM or mobile
operator. These values will be of registry type REG_SZ. The name will be the full path to the asset file on the
device. The REG_SZ content of the value will be a localizable string in the form "<MUIDllPath>,-<StringID>" .
The ValueList can also specify the FileNamesOnly attribute to indicate that it does not expect full paths in
the list, only file names.
The following example shows this model:
OEMs can use the MultiStringList element in your asset if your component expects a simple
REG_MULTI_SZ list of file paths in the registry. The customization tooling builds a multi-string list of each
asset file added by partners and sets this value at the registry location specified by the Key and Value
attributes.
Note
In Windows 10 Mobile, the Windows Provisioning framework does not support multi-string registry
values so this element is only available in the MCSF framework. This means that assets, such as wallpapers
or ringtones, can only be added through MCSF.
```XML
<Asset Name="Wallpapers" Type=".jpg;.jpeg;.png" Path="\Programs\CommonFiles\Wallpapers">
<MultiStringList
Key="HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\OEM\Wallpaper"
Value="WallpaperSet" />
</Asset>
```
Multi-settings
Multi-settings are settings or groups of settings that are SIM -based or account-based. You can handle these types
of settings using MCSF by declaring your SettingsGroup’s Path in a specific format that declares one segment of
the setting’s URI to become a variable. You can reuse this variable when you declare each of your settings’
underlying source locations such as the RegistrySource path or CSPSource Path.
To declare a multi-setting variable, you can use the $(VariableName) packaging XML macro format. The
following examples show how to do this:
<!-- Specifies a pair of Settings that we may have many sets of, one per "account" -->
<SettingsGroup Path="TestSettings/MyAccounts/$(AccountID)">
</SettingsGroup>
In the above example, the variable name is AccountID. You must specify that segment of the setting’s URI to
provision this setting. In this example, when MCSF sets the underlying value, it fetches the string value of the
AccountID segment and injects it into the registry paths for Username and Password. For example, provisioning
the following XML sets HKEY_LOCAL_MACHINE\Software\Sample\{71986}\Username to “RobinNail” and
HKEY_LOCAL_MACHINE\Software\Sample\{71986}\Password to “1234Password”.
<wap-provisioningdoc>
<characteristic type="MCSF">
<!-- This sets the username and password for account {71986}. -->
<characteristic type="TestSettings\MyAccounts\{71986}">
<parm name="Username" value="RobinNail" />
<parm name="Password" value="1234Password" />
</characteristic>
</characteristic>
</wap-provisioningdoc>
For SIM -based settings, you can use the special variable $(__IMSI ) that’s built-in to MCSF. When these types of
settings are being provisioned, the $(__IMSI ) segment is replaced with the IMSI string for the current SIM card.
The following example shows how to do this:
<!-- Specifies some SIM-specific settings... -->
<SettingsGroup Path="TestSettings/SimSpecific/$(__IMSI)">
<Setting Name="SimSpecificValue">
<!-- There should be one setting like this for every SIM card. -->
<RegistrySource Type="REG_DWORD" Path="HKEY_LOCAL_MACHINE\Software\Sample\$(__IMSI)\SimSpecificValue" />
</Setting>
</SettingsGroup>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customization answer file
1/18/2019 • 13 minutes to read
A customization answer file is an XML file that you write based on the MCSF schema. OEMs can use the MCSF
customization answer file to specify the settings and variants for a custom mobile OS image. The customization
answer file allows for a broader integration across the OS by providing OEMs with a single place to define nearly
all mobile OS settings.
When creating or working with customization answer files, keep the following design requirements and
considerations in mind:
If you are using ImgGen.cmd to generate a mobile OS image, you can only specify one customization
answer file. For more information, see Building a mobile image using ImgGen.cmd.
Depending on what you want to do, you can use the customization answer file to create a package
containing your customization(s) or use the answer file as one of the inputs to create an OS image.
To use the customization answer file to generate a package without building an OS image, see
Generating customization packages without creating an image.
To build an image as an .ffu file using the customization answer file as one of the inputs, see Using
ImgGen.cmd to generate the image.
The values used in the root customization answer file (or the one you specify as the input customization
answer file during ImgGen.cmd or CustomizationGen.cmd in Step 6) is used to determine the package
owner so it is important to provide values for the following attributes:
Name
Description
Owner
OwnerType (in the customization samples this is typically already set to 'OEM').
Any files, assets, or other settings specific to the customization
Absolute or full paths to file sources, such as imports, assets and data files, are required. This means that
whenever you specify the Source attribute value for a file Import, Asset, or DataAsset, the path must be
absolute.
File source paths may contain $(environment_variables). Note that you can only use environment
variables when referencing files. This will not work when configuring Setting values.
Using %this_format% in customization answer files is not allowed and results in an error.
The source path for Import files may contain the macro, $(CurrentFileDir).
Import source files can use environment variables in the file name. However, other source file names
cannot use environment variables.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="Sample Root Customization File"
Description="Sample customization XML. This XML contains all the valid settings that
should be correctly parsed and applied to image."
Owner="ContosoOEM"
OwnerType="OEM">
<!-- This root customization answer file imports two other customization answer files. -->
<Imports>
<Import Source="C:\Customization\AnswerFiles\SampleCustomizationImport1.xml" />
<Import Source="C:\Customization\AnswerFiles\SampleCustomizationImport2.xml" />
</Imports>
<!-- Targets define the conditions for when a variant can be applied. One target ID must be
referenced for each variant. -->
<!-- These examples show the definition for three sample operators. -->
<!-- In the example below, targets are set up for the variant to use in the root file. -->
<Targets>
<Target Id="SIM_TinyMO">
<TargetState>
<Condition Name="MNC" Value="26" />
<Condition Name="MCC" Value="310" />
</TargetState>
</Target>
<Target Id="SIM_BigMO">
<TargetState>
<Condition Name="MNC" Value="15" />
<Condition Name="MCC" Value="310" />
</TargetState>
</Target>
<Target Id="Known_BigMO">
<TargetState>
<Condition Name="MNC" Value="55" />
<Condition Name="MCC" Value="310" />
</TargetState>
</Target>
</Targets>
<!-- These static settings and data will be installed for all images, regardless of the variant. -->
<Static>
<DataAssets Type="MapData">
<DataAsset Source="C:\Customization\TestData\maps\OEMMap_USA.map" />
<DataAsset Source="C:\Customization\TestData\maps\OEMMap_Canada.map" />
</DataAssets>
<Applications>
<Application Source="C:\Customization\TestData\apps\OEMMOApp.xap"
License="C:\Customization\TestData\apps\OEMMOApp_License.xml"
ProvXML="C:\Customization\TestData\apps\MPAP_OEMMOApp_01.provxml" />
</Applications>
<Settings Path="TestSettingGroup">
<Setting Name="Level1/MySetting" Value="Blue" />
<Setting Name="MySettingAsset" Value="Alpha.jpg" />
<Asset Name="Asset" Source="C:\Customization\MySettingAssets\Alpha.jpg" />
<Asset Name="Asset" Source="C:\Customization\MySettingAssets\Beta.jpg" />
<Asset Name="Asset" Source="C:\Customization\MySettingAssets\Delta.jpg" />
</Settings>
<Settings Path="TestSettingsGroup2">
<Setting Name="OEMStaticSetting" Value="OEM Static Setting" />
</Settings>
</Static>
<!-- These settings in the Variant groups will only be applied if the associated target's conditions are
met. -->
<!-- The settings shown here will only be applied for the Known Big MO Variant. -->
<Variant Name="Known Big MO Variant">
<!-- Only one TargetRef can be used for each variant -->
<TargetRefs>
<TargetRef Id="Known_BigMO" />
</TargetRefs>
<Settings Path="EventSounds">
<Asset Name="Ringtones" Source="C:\Resources\Ringtones\KnownBigMO.wma" TargetFileName="BigMO.wma"
DisplayName="BigSound" Type="MobileOperator" />
<Setting Name="DefaultRingtone" Value="BigMO.wma" />
</Settings>
<Settings Path="LockScreen">
<Asset Name="Wallpapers" Source="C:\Resources\Wallpapers\KnownBigMO.jpg" TargetFileName="BigMO.jpg"
DisplayName="BigMO" Type="MobileOperator" />
<Setting Name="DefaultWallpaper" Value="BigMO.jpg" />
</Settings>
</Variant>
<!-- The settings shown here will only be applied for the Tiny MO Variant. -->
<Variant Name="Tiny MO Variant">
<TargetRefs>
<TargetRef Id="SIM_TinyMO" />
</TargetRefs>
<Settings Path="TestSettingsGroup1">
<Setting Name="Setting1" Value="Tiny MO Setting 1" />
<Setting Name="Setting3" Value="Tiny MO Setting 3" />
</Settings>
<Settings Path="EventSounds">
<Asset Name="Ringtones" Source="C:\Resources\Ringtones\TinyMO.wma" TargetFileName="TinyMO.wma"
DisplayName="TinySound" Type="MobileOperator" />
<Setting Name="DefaultRingtone" Value="TinyMO.wma" />
</Settings>
</Variant>
<!-- The settings shown here will only be applied for the Big MO Variant. -->
<Variant Name="Big MO Variant">
<TargetRefs>
<TargetRef Id="SIM_BigMO" />
</TargetRefs>
<Settings Path="TestSettingsGroup1">
<Setting Name="Setting1" Value="Big MO Setting 1" />
</Settings>
</Variant>
</ImageCustomizations>
Sample 2
The following sample customization answer file snippet shows how to:
Define a Static variant
Specify the customizations for a specific mobile operator in a Variant section.
<Static>
<!-- Asset data to be copied to the device. A small set of approved destinations are allowed.
Only allowed in the static settings -->
<DataAssets>
<DataAsset Source="C:\Customization\Assets\OEMMap_USA.map" Type="MapData" />
</DataAssets>
</Static>
<!-- Simple example of some things to do on a hypothetical TinyMO. Setting the Boot Screen
on FirstSIM, and the MMS Gateway whenever the SIM is detected as "Newly Inserted". Ringtones and
wallpapers are also added. -->
<Settings Path="Connectivity">
<Setting Name="MMSGateway" Value="123.tinymo.com" />
</Settings>
<Settings Path="EventSounds">
<Asset Name="Ringtones" Source="C:\Assets\Ringtones\Ringtone1.wma" />
<Asset Name="Ringtones" Source="C:\Assets\Ringtones\Ringtone2.wma" />
<Asset Name="Ringtones" Source="C:\Assets\Ringtones\Ringtone3.wma" />
<Setting Name="DefaultRingtone" Value="Ringtone1.wma" />
</Settings>
<Settings Path="LockScreen">
<Asset Name="Wallpapers" Source="C:\Assets\Wallpapers\Lockscreen1.jpg" />
<Asset Name="Wallpapers" Source="C:\Assets\Wallpapers\Lockscreen2.png" />
<Asset Name="Wallpapers" Source="C:\Assets\Wallpapers\Lockscreen3.jpeg" />
<Setting Name="DefaultWallpaper" Value="Lockscreen2.png" />
</Settings>
</Variant>
Note
If the policy for a specified
setting is not included in a
package in the image, the setting
will not be included in the image
and a warning will be displayed.
ELEMENT PARENT DESCRIPTION
Options defined in the policy 0 or Red Use the enumerated value. For
settings files. For example: example, either the enumerated
1 or Green value 0 or its equivalent friendly
<Validate> name "Red" can be specified.
2 or Blue
<Option Value="0"
FriendlyName="Red" />
<Option Value="1"
FriendlyName="Green" />
<Option Value="2"
FriendlyName="Blue" />
</Validate>
Targets
When creating a customization answer file, OEMs can define Targets to describe keying for a variant. Targets for
variants must be described or pre-declared before being referenced by the variant. OEMs can use the same target
in multiple variants to enable reuse. Within a target, if the device meets any of the target states, the settings will be
applied (the states are OR'ed together). The conditions within the states are AND'ed together and all of the
conditions must be met in order for a state to be true.
In the previous XML sample, a SIM target is defined through MNC/MCC pairs. The following example shows how
the SIM targets may be defined:
<Targets>
<Target Id="SIM_TinyMO">
<TargetState>
<Condition Name="MNC" Value="123" />
<Condition Name="MCC" Value="456" />
</TargetState>
<TargetState>
<Condition Name="MNC" Value="456" />
<Condition Name="MCC" Value="123" />
</TargetState>
</Target>
</Targets>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="Settings Input"
Description="Settings for image build"
Owner="Contoso"
OwnerType="OEM"
Priority="2">
Note
When setting Priority, 1 is the highest, and zero (0) and negative numbers are not allowed.
Specifying files to be imported
The following code example shows how you can specify other customization answer files to be imported. The
Imports element must be specified in the root customization answer file.
<Imports>
<Import Source="C:\Customization\SampleOperators.xml" />
<Import Source="C:\Customization\SampleBrandCommon.xml" />
</Imports>
Apps: Preloading and storage location
OEMs can preload apps using the following customization answer file code snippet:
<Applications>
<Application Source="C:\Customization\TestData\apps\OEMMOApp.xap"
License="C:\Customization\TestData\apps\OEMMOApp_License.xml"
ProvXML="C:\Customization\TestData\apps\MPAP_OEMMOApp_01.provxml" />
</Applications>
Note
The AppPreInstaller is specifically looking for provXML files with the filename pattern MPAP_*_*.provxml so
make sure your file names are correctly formatted.
The following table describes where preloaded apps are stored on the device:
All applications can be uninstalled by the user. When applications are uninstalled, the application files remain on
the device, but these are not shown in the application list. During a cold boot, or when the user selects Reset my
phone, apps in the Data partition will be removed while apps in the MainOS partition will be reinstalled. Users
can also install apps to the SD card. When the phone boots with an SD card, the user is given an option to select
the install location.
Related topics
Prepare for Windows mobile development
Set phone metadata in DeviceTargetingInfo
1/18/2019 • 9 minutes to read
Partners are required to set certain device metadata, including hardware, support, and OEM and MO information.
Partners are required to set the following information:
OEM and mobile operator information, used for display strings in the UI, device update, and connecting to the
Microsoft Store.
Hardware component versions and software versions, used for targeting updates to devices and for user
support.
A required phone number and optional website for user support, which appears in the About screen in
Settings.
Constraints:
ImageTimeOnly – For those settings to put directly into the registry hive.
FirstVariationOnly – For those settings that can be configured at runtime and potentially based on SIM value.
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="PhoneMetadataDeviceTargetingInfo"
Description="Use to set phone metadata including the phone model name, OEM and
mobile operator name, hardware and software versions, and so on."
Owner=""
OwnerType="OEM">
<!-- Define the Targets for the Variant -->
<Targets>
<Target Id="">
<TargetState>
<Condition Name="" Value="" />
<Condition Name="" Value="" />
</TargetState>
</Target>
</Targets>
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Static>
<!-- These settings are ImageTimeOnly and will be put directly into the registry hive -->
<Settings Path="DeviceInfo/Static">
<Setting Name="PhoneManufacturer" Value="" />
<Setting Name="PhoneManufacturerDisplayName" Value="" />
<Setting Name="PhoneROMVersion" Value="" />
<Setting Name="PhoneHardwareRevision" Value="" />
<Setting Name="PhoneSOCVersion" Value="" />
<Setting Name="PhoneFirmwareRevision" Value="" />
<Setting Name="PhoneRadioHardwareRevision" Value="" />
<Setting Name="PhoneRadioSoftwareRevision" Value="" />
<Setting Name="PhoneBootLoaderVersion" Value="" />
<Setting Name="PhoneROMLanguage" Value="" />
<Setting Name="PhoneHardwareVariant" Value="" />
</Settings>
</Static>
<!-- Specify the Variant -->
<Variant Name="">
<TargetRefs>
<TargetRef Id="" />
</TargetRefs>
<!-- These settings are FirstVariationOnly and can be configured at runtime potentially based on
SIM value -->
<Settings Path="DeviceInfo/Variant">
<Setting Name="PhoneMobileOperatorName" Value="" />
<Setting Name="PhoneManufacturerModelName" Value="" />
<Setting Name="PhoneMobileOperatorDisplayName" Value="" />
<Setting Name="PhoneSupportPhoneNumber" Value="" />
<Setting Name="PhoneSupportLink" Value="" />
<Setting Name="PhoneOEMSupportLink" Value="" />
<Setting Name="PhoneModelName" Value="" />
<Setting Name="RoamingSupportPhoneNumber" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner and configure the targets and conditions for the variant.
3. Specify a value for each of the following settings.
Settings that are ImageTimeOnly:
IMAGETIMEONLY SETTING NAME DESCRIPTION
Note
OEMs creating a runtime configuration image
cannot span across multiple
PhoneHardwareVariants.
Note
This string is returned by the
DeviceStatus.DeviceName property. For more
information, see the SDK Documentation.
Testing steps
1. Flash the build containing this customization to a phone.
2. Go to the About screen in Settings. Tap on the More Info button.
3. Verify that the information on this screen matches the values you specified.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Set languages and locales
1/18/2019 • 8 minutes to read
There are several types of language settings that partners can control on the mobile device. The languages that
partners choose to include should be based on the market in which the device will ship, and the amount of space
available for language data. The following table shows the different kind of language and locale settings. This is
just an overview. For more detailed information, including implementation instructions and limitations and
restrictions, click through to the following topics.
Mobile device languages The set of available At least one. The There is no way to add
mobile device maximum number is additional languages to the
languages that need determined by space device later without re-
to be installed. OEMs constraints. flashing a new image.
must specify the One default device
value they want to language is required.
use using the
UserInterface
element in the
OEMInput.xml file.
The default mobile
device language.
OEMs can specify
this value using the
BootUILanguage
element in the
OEMInput.xml file.
Regional format The OEM must specify a One locale is required. The user can change the
default locale, which country/region.
determines the country or
region, regional format, pre-
enabled keyboard, and
speech languages. OEMs
can specify the value this
value using the BootLocale
element in the
OEMInput.xml file.
Text correction and The set of keyboard At least one. The maximum Users can download
suggestions language files used for text number is determined by additional keyboard
correction and suggestions space constraints. language files as needed. If
while typing. OEMs must the keyboard language file
specify the value they want for a given keyboard is not
to use using the Keyboard already on the device, it is
element in the downloaded automatically
OEMInput.xml file. when the user enables the
keyboard for the first time.
Pre-enabled keyboard For each mobile device Additional keyboards are Users can select which
language, the OS not necessary for most keyboards they wish to use.
automatically markets.
determines which
keyboards to show the
user. If the OEM needs
to enable additional
keyboards by default to
meet the needs of their
market, they can.
The Recommended
additional pre-
enabled keyboard(s)
apply to these locales:
The primary
language script is
non-Latin or where
the default keyboard
is a Latin-based
keyboard so users
can type their
Microsoft account
email and password.
There is more than
one official language.
Speech languages The set of available speech OEMs are not required to Users can download
languages on the mobile include speech by default. additional speech languages
device. OEMs can specify the The maximum number is if they need them.
value they want to use using determined by space
the Speech element in the constraints.
OEMInput.xml file.
The following table shows recommended default mobile device languages and regional formats for different
markets. The default keyboard language is automatically generated by the OS based on the device language. Each
default keyboard language has at least one keyboard associated with it that is enabled by default. The speech
language specified in the final column will only be enabled if the OEM has included it in the OS image or the user
has downloaded it.
WARNING
If you set the BootUILanguage and BootLocale to a pair of languages that are not recommended in the following table,
the OS image that will be created will lead to an inconsistent post-setup experience where the regional format doesn't follow
the language selection. Microsoft strongly recommends that OEMs follow the recommended languages outlined in this
table.
DEFAULT
KEYBOARD KEYBOARD RECOMMENDE
DEFAULT DEFAULT LANGUAGE VALUES TO D ADDITIONAL SPEECH VALUES
MOBILE DEVICE REGIONAL ENABLED BY SPECIFY IN PRE-ENABLED TO SPECIFY IN
MARKET LANGUAGE FORMAT THE DEVICE OEMINPUT.XML KEYBOARD(S) OEMINPUT.XML
India (Hindi) hi-IN hi-IN en-IN hi-IN, en-IN hi, hi-IN none
When you have multiple display languages included on a phone, you must create a resource-only .dll to store all
of the necessary localized display strings. From the .dll and its associated .dll.mui files, you can access strings in
the current language from the registry. This technique is used in some customizations where you can use localized
display strings as input.
Note that a single common resource-only .dll file and set of .dll.mui files can be used to manage the localized
display strings for all of these customizations. It is not necessary to include a separate .dll file for each
customization.
rmdir /s /q “.\en-us”
2. Pre-link:
mkdir “.\en-us”
3. Post-build line 1:
muicrt.exe embeds a MUI resource into the DisplayStrings.dll module during splitting. To properly load at
run-time the appropriate resources from the language-specific DisplayStrings.dll.mui modules, each .mui
file must have its checksums fixed-up to match the checksums in the baseline language-neutral module.
This is done using the command specified in this step.
Note that the separate build steps shown in this section is just one of the ways you can do this. You can also
put all the steps into a post-build step. The actual commands use Visual Studio macros to target the correct
output directories.
5. Repeat steps 1-4 for the other languages that you are using and replace the language-specific settings with
the ones that correspond to the other languages. For example, if you are processing the German settings
next:
a. Replace –x 0x0409 with the new language ID that you are using, such as –x 0x0407 for German.
b. Replace en-us with de-de .
c. Change the output file in the post-build step from DisplayStrings.dll to DisplayStrings_discard.dll.
Once all the projects have been built, deploy the projects to your image and verify the strings are properly
loaded for each language.
DoReverseMuiLoc.rcconfig is an XML file that contains the following lines. Copy this XML file to the
ProjectRootDirectory\ProjectName folder.
<Settings Path="Localization/MUI">
<!-- Use to add your base MUI DLL file -->
<Asset Name="BaseDll" Source="C:\Path\DisplayStrings.dll" />
<!-- Use to specify the language MUI packages (*.dll.mui) for the languages you are supporting and
have localized strings for -->
<Asset Name="LanguageDll/$(langid)" Source="C:\Path\DisplayStrings.dll.mui" />
<!-- Add as many as you need -->
</Settings>
This particular example shows how to access string 101 (as specified in the Value field of the string table)
for an additional alarm sound.
Customizations for device management
1/18/2019 • 2 minutes to read
This section provides more information about device management settings that OEMs can change.
In this section
TOPIC DESCRIPTION
Managing runtime configuration data OEMs can configure the following settings to manage the
cleanup of runtime configuration data on the mobile
device.
Override the default CountryTable.xml The mobile runtime configuration package includes a
built-in XML file (CountryTable.xml) for mapping between
GeoIDs, iso3166 country/region codes, and MCCs.
Windows uses this table to assist in validating 3-digit
MNCs for specific countries/regions, which is done by
including an MNC list for that country/region. Otherwise,
the OS assumes that MNCs are valid if they are 2 digits.
OEMs can override the default country/region lookup
table and instruct the runtime configuration engine to use
an OEM-provided mapping table instead.
Setting the UICC slot for branding configuration OEMs can specify which UICC slot will be used for
branding configuration.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enabling runtime configuration
1/18/2019 • 2 minutes to read
Runtime configuration, or multivariant, provides a generic mechanism for creating a single image that can work for
multiple markets and reduce the number of images that OEMs need to create, manage, and test. By default,
runtime configuration is enabled and ADC is turned off. Only one or the other must be turned on. So, if an OEM
wants to disable runtime configuration, they must enable ADC.
The OS will handle different scenarios depending on whether runtime configuration has been enabled so OEMs
should take into consideration the scenarios they are trying to enable.
Note By enabling runtime configuration, SIM -based language detection will also be enabled.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<!-- Turns on runtime configuration -->
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<!-- Turns off ADC -->
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. The above code example shows the default setting. Only one can be turned on (or enabled), and the other
must be turned off (or disabled). Depending on what you want to do, you can use one of the following
values:
VALUE DESCRIPTION
The registry key for enabling or disabling runtime configuration is below. This registry key can have a value of 1 or
0 where 1 represents enabled and 0 represents disabled.
HKLM\software\microsoft\multivariant\enable
Related topics
Prepare for Windows mobile development
Customization answer file overview
Managing runtime configuration data
1/18/2019 • 5 minutes to read
When the runtime configuration engine applies a variant to a device, a number of assets are used and these can
include maps, apps, wallpapers, ringtones, and so on. The data for these features can be significantly large. To
enable many variants to ship in a single device image, multiple large sets of this data are included somewhere in
storage. Only Retail Mode content, map data, and app installers are stored in the user store. Other smaller variant
data is automatically placed in the OS partition.
To allow users to reset their device and not wait for apps to download from the Microsoft Store if the same variant
is used, the OS protects the data by copying it to the OS partition. The following table describes what happens to
the device content during initial install, upon resetting the storage limit, and after the device is reset.
Retail mode User partition User partition Deleted Deleted Downloaded Downloaded
from the from the
Internet Internet
Applications User partition User partition Copied to OS Deleted Used from OS Downloaded
partition partition from the
Internet
Online apps OS partition OS partition Stays in OS Stays in OS Used from OS Used from OS
metadata partition partition partition partition
Maps and User partition User partition Deleted Deleted Downloaded Downloaded
voice from the from the
navigation Internet Internet
To reclaim storage for users, the OS performs data cleanup in two stages:
The OS performs post-variant cleanup in some amount of time (default of 0 hours) after applying a variant
for the user's primary SIM card and after completing initial device setup. Variant data is deleted from the
user store because the device has been effectively branded during this time.
The OS deletes all variant data from the user store in some amount of time (default of 72 hours) after
completing initial device setup, if no variant has been applied to the device. No data type will be persisted on
the device.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<!-- Set to 1 (to enable) or 0 (to disable) the backup of app installers for the selected
variant when the device is branded.
<Setting Name="PersistVariantData" Value="" />
-->
<!-- Set the time, in minutes, to wait after branding the device before deleting unused variant
data from the user store.
Maximum is 10080 or 7 days
<Setting Name="PostVariantCleanupDelay" Value="" />
-->
<!-- Set the time, in minutes, to wait after finishing initial device setup before deleting all
variant data from the user store.
Maximum is 10080 or 7 days
<Setting Name="UnconditionalCleanupDelay" Value="" />
-->
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. See the following sections for more information about the settings and the values you can set for each.
VALUE DESCRIPTION
0 Disable backup.
OEMs can configure the amount of reserved space to enable runtime configuration backup. To do this, set the
MainOSRTCDataReservedSectors element in the OEMDevicePlatform.xml file.
NOTE
OEMs should only configure MainOSRTCDataReservedSectors when using the runtime configuration feature to
dynamically install certain applications from the Data partition depending on the SIM card(s) in the device during runtime.
When using this functionality, the value is used to reserve space on the System partition to back up these applications so
that they can be installed after a device reset.
When specifying the size, OEMs must specify a number of sectors that is sufficient to contain the latest get of
applications placed in the data store that might be installed for an individual mobile operator. For example, if the
OEM's customization answer file specified applications A, B, and C should be on the data partition and should only
be installed for mobile operator Contoso, then the size reserved must be the size of A+B+C in MB and divided by
512 bytes per sector. At a maximum, OEMs can use MainOSRTCDataReservedSectors to reserve sectors up to
100 MB to be used by the runtime configuration engine.
The following example shows how to reserve 50 MB:
Factory mode
This setting is not exposed through MCSF. OEMs can set the Enable value (REG_DWORD ) under the
HKEY_LOCAL_MACHINE\Software\OEM\FactoryMode registry key to 1 (indicates factory mode) or 0 (not in
factory mode). A dialer plugin or other mechanism used during factory testing can turn on factory mode to
prevent runtime configuration backup/restore/cleanup of variant data as well as retail mode offline content
cleanup.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Override the default CountryTable.xml
1/18/2019 • 2 minutes to read
The mobile runtime configuration package includes a built-in XML file (CountryTable.xml) for mapping between
GeoIDs, iso3166 country/region codes, and MCCs. Windows uses this table to assist in validating 3-digit MNCs
for specific countries/regions, which is done by including an MNC list for that country/region. Otherwise, the OS
assumes that MNCs are valid if they are 2 digits.
OEMs can override the default country/region lookup table and instruct the runtime configuration engine to use
an OEM -provided mapping table instead.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="OverrideDefaultCountryLookup" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value for OverrideDefaultCountryLookup to one of the following values:
VALUE DESCRIPTION
4. If the value for OverrideDefaultCountryLookup is set to 1, the OEM must include their custom
countrytable.xml file in a package and place this file in the
%systemdrive%\programs\commonfiles\adc\OEM directory.
OEMs who provide their own country/region lookup table must use the following format for the XML file:
<countrytable>
<country mcc="202" iso3166="GR" GeoID="98"/> <!-- Greece -->
<country mcc="204" iso3166="NL" GeoID="176"/> <!-- Netherlands -->
<!-- And so on -->
<country mcc="316" iso3166="US" GeoID="244"> <!-- United States-->
<mnclist>
<mnc id="010"/>
<mnc id="011"/>
</mnclist>
</country>
<!-- And so on -->
</countrytable>
Testing:
Work with your mobile operator partners to test this customization on their networks.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Setting the UICC slot for branding configuration
1/18/2019 • 2 minutes to read
OEMs can specify which UICC slot will be used for branding configuration.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="BrandingSlot" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the BrandingSlot``Value to use one of the following values depending on which UICC slot you want to
use for branding configuration:
VALUE DESCRIPTION
0 Slot 0
1 Slot 1
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for hardware components
1/18/2019 • 3 minutes to read
This section contains information about customization settings that OEMs can use for the following hardware
components:
Buttons
Camera
Display
Networking
Sensors
Storage
Touch
In this section
TOPIC DESCRIPTION
Buttons: Enabling the Start button to wake the phone OEMs can configure the Start button to wake up the
phone from the sleep state (also sometimes called the idle
state). This can be configured on phones with one of the
following hardware configurations:
The phone has a hardware Start button.
The phone uses capacitive buttons, and the
buttons share the same touch controller as the
display panel but use separate sense lines, or the
buttons have a dedicated touch controller. .
Display: Building images for FWVGA panels with static OEMs can build images for FWVGA (480 x 854) display
software buttons panels where the Back, Home, and Search buttons are
rendered on the screen by the OS instead of using
hardware buttons. In these types of images, the bottom
54 scan lines of the display panel are reserved to render
the software buttons.
Networking: Configuring the MTU data size For TCP, the default maximum transmission unit (MTU) is
set to 1500 bytes, and the maximum segment size (MSS)
is 1460 bytes. In general, this value should not be
changed, as the user experience will degrade if low values
are set. However, if the MSS does not meet the
requirements of the mobile operator network, OEMs can
customize it by setting the MTU data size.
TOPIC DESCRIPTION
Storage: Enabling the packed commands feature for You can configure the phone to enable the packed
eMMC commands feature for eMMC parts. This feature packs
multiple small read requests in a single transfer request to
the eMMC device.
Storage: Enabling the UHS-1 feature for SD cards You can configure the phone to enable the UHS-1 feature
for SD cards. This feature enables a higher bus speed for
SD cards that support Ultra High Speed Phase I (UHS-1).
Storage: Enabling the HS200 feature for eMMC You can configure the device to enable the HS200 feature
for eMMC parts. This eMMC feature delivers a theoretical
throughput of 200 MB/s across the eMMC bus, using a
200 MHz single data rate clock with an 8-bit bus width.
This can result in significant performance improvements,
especially on higher-end eMMC parts.
Touch: Defining capacitive button behavior For mobile devices that use capacitive buttons, OEMs
must add registry values that specify the number of
capacitive buttons, the button locations, the button
names, and the values to send to the OS when the button
is pressed. This information enables the OS to treat the
capacitive buttons below the screen as touchable targets.
Touch: Describing the physical width and height of the As part of implementing support for the touch controller
display hardware, OEMs must add registry values that specify the
physical width and height the portion of the screen that is
used to render the mobile device UI. The OS uses this
information to properly scale touch gestures and help
ensure a fluid user experience.
Touch: Specifying the repeat rate for touch samples during As part of implementing the touch driver, OEMs must
touch-and-hold presses determine how to send repeated touch samples to the
input reader component in the OS during touch-and-hold
presses. OEMs can choose to have the HID touch class
driver (TchHID.sys) automatically send duplicate data
packets to the input reader component in the OS during
touch-and-hold presses, or they can send repeated touch
samples from their touch driver. The OEM must add a
registry value that tells the OS which implementation they
chose, and the repeat rate to use if the OEM chose to
have TchHID.sys send duplicate data packets
automatically.
TOPIC DESCRIPTION
Wi-Fi: Removing cellular functionality on the mobile device If your mobile device does not support a cellular radio or
will not be connected to a cellular network, you can
remove all cellular-related functionality from the device's
user interface by adding the WIFI_FEATURE_PACK feature
entry in your OEMInput.xml file.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enabling the Start button to wake the phone
1/18/2019 • 2 minutes to read
OEMs can configure the Start button to wake up the phone from the sleep state (also sometimes called the idle
state). This can be configured on phones with one of the following hardware configurations:
The phone has a hardware Start button.
The phone uses capacitive buttons, and the buttons share the same touch controller as the display panel but
use separate sense lines, or the buttons have a dedicated touch controller. .
Note Although OEMs typically configure this behavior by adding a registry value in an INF file that is included in
a driver package, this behavior can also be configured via the customization process described below. By using
both options, OEMs can define the default behavior in the driver for a specific hardware component and modify
this behavior as necessary in images for different phone models that use the same driver.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="StartOnIdle"
Description="Use to specify whether the Start button can wake the phone during the
idle state."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Input/Keyboard/EnabledOnIdleButtons">
<Setting Name="EnableStartOnIdle" Value="" />
</Settings>
</Static>
</ImageCustomizations>
VALUE DESCRIPTION
On mobile devices that do not have a hardware camera button present, OEMs can provide a better user experience
by enabling this customization so that parts of the UI and service are updated to indicate to the user that there is
no camera button on the device. When this customization is enabled:
The camera roll text will not include the string camera button.
The camera settings screen will not include the string camera button.
The camera settings screen will not include settings that are button-specific.
When the user launches the camera app, the device displays a message on the viewfinder that shows the user how
to take a picture by tapping on the screen.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Photos/OEM">
<Setting Name="HWCameraShutterButtonNotPresent" Value="" />
</Settings>
</Static>
</ImageCustomizations>
VALUE DESCRIPTION
Testing:
1. Flash the build that contains this customization to a mobile device without a dedicated hardware camera
button.
2. Navigate to the camera Settings screen and verify that camera button is not displayed in the UI.
3. Verify that you do not see the following options in the UI:
Press and hold camera button
4. Navigate to the camera roll. If the camera roll is empty, verify that the caption displayed on the empty
camera roll does not reference the camera button.
If the default camera app is configured to work above the lock screen, verify that the app that launches is the
OEM lens app that you chose.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Building images for FWVGA panels with static
software buttons
1/18/2019 • 2 minutes to read
OEMs can build images for FWVGA (480 x 854) display panels where the Back, Home, and Search buttons are
rendered on the screen by the OS instead of using hardware buttons. In these types of images, the bottom 54 scan
lines of the display panel are reserved to render the software buttons.
Constraints: None
Instructions:
To build an FWVGA image with software-rendered buttons:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="FWVGASoftwareButtons"
Description="Use to generate an image that supports an FWVGA display panel and
software Back, Start, and Search buttons."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Graphics/D3D/DisplayResolutionOverride">
<Setting Name="DisplayPanelOverrideWidth" Value="0x1E0" />
<Setting Name="DisplayPanelOverrideHeight" Value="0x356" />
<Setting Name="TouchPanelOverrideWidth" Value="0x1E0" />
<Setting Name="TouchPanelOverrideHeight" Value="0x356" />
</Settings>
<Settings Path="Input/Touch/CapButtons">
</Settings>
<Settings Path="Shell/NavigationBar">
<Setting Name="Color" Value="" />
</Settings>
</Static>
</ImageCustomizations>
7. If you have not done so already, create an OEMInput XML file to define the set of packages to include in
your phone image, and configure your computer to use the imaging tools. For more information, see
Building a mobile image using ImgGen.cmd.
8. In your OEMInput XML file, set the value of the Resolution element to 480x800. This configuration
ensures that WVGA assets are used for the FWVGA image. Only WVGA assets can be used in FWVGA
images that use software-rendered buttons.
9. In your OEMInput XML file, add the NAVIGATIONBAR feature to the Microsoft element that is a child of
the Features element. This feature adds a phone setting that enables users to configure the color of the
software buttons.
<Features>
<Microsoft>
<Feature>NAVIGATIONBAR</Feature>
</Microsoft>
</Features>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Building images with user-managed software buttons
1/18/2019 • 7 minutes to read
On mobile devices with 1080p, 720p, WXGA, or qHD display panels without hardware Back, Start, and Search
buttons, OEMs can build mobile images where the OS renders the Back, Start, and Search buttons in a navigation
bar directly on the display. In this scenario, the buttons are not persistent; users can show or hide the buttons.
Optionally, OEMs can also customize the user experience for the navigation bar including:
Changing the default color of the navigation bar background: light, dark, or a color that matches the device
accent color.
Enabling the navigation bar to be automatically hidden or shown.
The user-managed software buttons are optional, so OEMs must add the NAVIGATIONBAR feature in the
OEMInput.xml file before the settings can be configured properly. A navigation bar Settings CPL is also added to
enable users to change the default settings. In addition, OEMs must also set the correct value for the Resolution
element.
OEMs should note the following accessibility features when support for the navigation bar is added:
During initial phone setup, the navigation bar is always visible and cannot be dismissed.
When the Narrator is active, the navigation bar is shown and cannot be dismissed until the Narrator is
disabled.
The Narrator can narrate the controls on the navigation bar.
The buttons on the navigation bar provide haptic feedback.
NOTE
Some settings in this customization may not be available depending on the Windows Phone 8.1 release that you are using to
commercialize your device.
Constraints: ImageTimeOnly
Instructions: To build an image with software-rendered buttons that can be shown or hidden by users:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="UserManagedSoftwareButtons"
Description="Use to create an image that supports a 1080p, 720p, WXGA, or qHD
display
panels without hardware Back, Start, and Search buttons."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Input/Touch/CapButtons">
</Settings>
<Settings Path="Shell/NavigationBar">
<Setting Name="Color" Value="" />
<Setting Name="AutoHide" Value="" />
<Setting Name="SwipeUpToHide" Value="" />
<!-- These settings are available for Windows Phone 8.1 GDR1 or later versions of the OS.
<Setting Name="BurnInProtectionMode" Value="" />
<Setting Name="BurnInProtectionIdleTimerTimeout" Value="" />
<Setting Name="BurnInProtectionMaskSwitchingPeriod" Value="" />
<Setting Name="BurnInProtectionWhiteReplacementColor" Value="" />
<Setting Name="BurnInProtectionBlackReplacementColor" Value="" />
<Setting Name="UserEducationHintDisable" Value="" />
<Setting Name="DoubleTapOff" Value="" />
-->
</Settings>
</Static>
</ImageCustomizations>
VALUE DESCRIPTION
0 or Always Dark The buttons are black. This is the default value.
1 or Theme Color The color of the buttons matches the current theme
chosen by the user (black for dark theme, white for light
theme).
2 or Accent Color The color of the buttons matches the current accent color
chosen by the user.
6. Optional. To configure the navigation bar auto show and hide option, set AutoHide to one of the following
values:
VALUE DESCRIPTION
0 or Disabled Disables the auto show and hide option for the navigation
bar. This is the default OS value.
1 or Enabled Enables the auto show and hide option for the navigation
bar.
7. Optional. If you are using Windows Phone 8.1 GDR1 or later versions of the OS, you can also configure
these settings:
To set the OLED burn-in protection flag for the nav bar, set BurnInProtectionMode to one of the
following values:
VALUE DESCRIPTION
To set the timeout, in seconds, for the OLED burn-in protection idle timer, set the value for
BurnInProtectionIdleTimerTimeout . The default value is 60 seconds. If you change the default value,
the new value must be 1 second or more.
To set the OLED burn-in protection mask switching period, in milliseconds, set the value for
BurnInProtectionMaskSwitchingPeriod . The default value is 10,000 milliseconds (10 seconds). If you
change the default value, the new value must be 1 millisecond or more.
OEMs can also change the color that the nav bar uses during OLED burn-in protection. There are
two settings: one for white UI elements like the button icon's color when the device is using a light
theme and accent color mode, and the other is for black UI elements like the black background when
the device is using a dark theme.
To set the white replacement color for the nav bar when in burn-in protection mode, set the
value for BurnInProtectionWhiteReplacementColor to the ARGB color that you want to use. The
color must be specified in the format 0xFFxxxxxx. The default value for the white
replacement color is 0xFFA9A9A9.
To set the black replacement color for the nav bar when in burn-in protection mode, set the
value for BurnInProtectionBlackReplacementColor to the ARGB color that you want to use. The
color must be specified in the format 0xFFxxxxxx. The default value for the black replacement
color is 0xFF323232.
By default, the nav bar shows a user education hint, which is a small piece of UI that the user is
required to interact with at least once to learn the swipe up gesture. Once the user has seen the hint,
they can choose to stop showing the hint so that it disappears the next time the user swipes up from
the bottom of the screen to show the nav bar.
For OEMs building test and health images, you can configure the user hint by setting
UserEducationHintDisable to one of the following values:
VALUE DESCRIPTION
1 or Hint Enabled Enables the user education hint. This is the default OS
behavior.
To allow users to double tap any open space on the nav bar to turn off the screen, configure the
DoubleTapOff setting to one of the following values:
VALUE DESCRIPTION
8. If you have not done so already, create an OEMInput XML file to define the set of packages to include in
your phone image, and configure your computer to use the imaging tools. For more information, see
Building a mobile image using ImgGen.cmd.
9. In your OEMInput XML file, set the value of the Resolution element to 1080x1920, 768x1280, 720x1280,
or 540x960, depending on the resolution of the panel. For more information, see OEMInput file contents.
In the following example, the highlighted entry shows what you need to add to the OEMInput XML file if
you are supporting a 1080x1920 resolution.
<Resolutions>
<Resolution>1080x1920</Resolution>
</Resolutions>
10. In your OEMInput XML file, add the NAVIGATIONBAR feature to the Microsoft element that is a child of
the Features element. This feature adds a phone setting that enables users to configure the color of the
software buttons.
<Features>
<Microsoft>
<Feature>NAVIGATIONBAR</Feature>
</Microsoft>
</Features>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configuring the MTU data size
1/18/2019 • 2 minutes to read
For TCP, the default maximum transmission unit (MTU ) is set to 1500 bytes, and the maximum segment size
(MSS ) is 1460 bytes. In general, this value should not be changed, as the user experience will degrade if low values
are set. However, if the MSS does not meet the requirements of the mobile operator network, OEMs can
customize it by setting the MTU data size.
Note This customization configures the MTU so the size should be set to the required MSS size plus 40 bytes.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="CellCore/PerDevice/External/ImageOnly">
<Setting Name="MTU/MTUDataSize" Value="" />
<Setting Name="MTU/RoamingMTUDataSize" Value="" />
</Settings>
</Static>
</ImageCustomizations>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Auto brightness
1/18/2019 • 3 minutes to read
The brightness of a mobile device display changes depending on the level of ambient light. For example, if you are
using the device in a darkened movie theater, then walk into the medium light of the theater lobby, and then walk
outside into bright sunshine, the brightness adjusts to the different light levels. The transition can be smooth or
coarse depending on the capabilities of the brightness hardware. You can specify the light levels at which the
brightness changes, the brightness for each of the levels, and the length of the transition period.
By design, the brightness is initially set when the brightness transitions from the OFF to ON state. From this initial
setting, the brightness can be increased depending on the level of ambient light, but cannot be decreased. This
helps to avoid the perceived flickering on the device as it moves through regions of both high and low ambient
light levels. Brightness is reset at the next brightness OFF to ON transition.
The adaptive brightness service monitors ambient light levels by reading the ambient light sensor (ALS ). Based on
the user’s configuration for manual or automatic brightness settings, adaptive brightness adjusts the display
brightness as needed. Adaptive brightness is disabled when the service is idle, by reaching maximum brightness,
or by being in manual brightness mode.
The device also monitors the user’s activity from regular input to the device. If that activity stops in a period of
time, the device will warn the user that the screen is about to turn off. It does so by changing the brightness of the
screen to the value of DimBrightness a few seconds ahead of time. If the user touches any button or the screen
then the screen brightness is restored and active monitoring resets. If no input is received, the device turns off. The
time of activity monitoring can be configured in the Screen times out after option in the lock screen settings
screen.
This customization allows partners to customize the brightness by specifying:
The value of brightness when dimming the screen.
The ABS millilux range mapping.
The ABS intensity percent mapping.
The brightness state transition delay (in seconds).
The value for ABSRangeMilliLuxMapping is a list of values, separated by semicolons, that represent the upper bound
in the range of ambient light readings measured by the light sensor. The upper bound value is measured in millilux.
For example, if ABSRangeMilliLuxMapping is set to 100000;500000;MAX, then the three brightness levels for the
phone will be 100000 millilux, 500000 millilux, and maximum brightness. Specifying "MAX" in the list of values
means that there is no upper bound to the range.
The ABS millilux range mapping and ABS intensity percent mapping are used together to make a table of
brightness values. They must have the same number of elements as each other. For example if
ABSRangeMilliLuxMapping = 100000;500000;MAX and ABSPercentIntensityMapping = 33;66;100, the table will
look like the following.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<!-- The ABS millilux range mapping. Set the value to a range, for example: "100000;500000;MAX". -
->
<Setting Name="ABSRangeMilliLuxMapping" Value="" />
<!-- The ABS intensity percent mapping. Sample value: "11;68;100". -->
<Setting Name="ABSPercentIntensityMapping" Value="" />
<!-- The brightness state transition delay in seconds. The value must not be less than 2 seconds.
Sample value: "5". -->
<Setting Name="TransitionDelay" Value="" />
</Settings>
</Static>
</ImageCustomizations>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enabling the packed commands feature for eMMC
1/18/2019 • 2 minutes to read
You can configure the phone to enable the packed commands feature for eMMC parts. This feature packs multiple
small read requests in a single transfer request to the eMMC device.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="PackedCommands"
Description="Use to enable the packed commands eMMC feature."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Storage/SdBus/MainOS">
<Setting Name="PackedCommandEnable" Value="" />
</Settings>
</Static>
</ImageCustomizations>
VALUE DESCRIPTION
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enabling the UHS-1 feature for SD cards
1/18/2019 • 2 minutes to read
You can configure the phone to enable the UHS -1 feature for SD cards. This feature enables a higher bus speed for
SD cards that support Ultra High Speed Phase I (UHS -1).
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="UHS1"
Description="Use to enable the UHS-1 SD feature."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Storage/SdBus/MainOS">
<Setting Name="DisableUhsSupport" Value="" />
</Settings>
</Static>
</ImageCustomizations>
VALUE DESCRIPTION
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enabling the HS200 feature for eMMC
1/18/2019 • 2 minutes to read
You can configure the device to enable the HS200 feature for eMMC parts. This eMMC feature delivers a
theoretical throughput of 200 MB/s across the eMMC bus, using a 200 MHz single data rate clock with an 8-bit
bus width. This can result in significant performance improvements, especially on higher-end eMMC parts.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="HS200"
Description="Use to enable the HS200 eMMC feature."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Storage/SdBus/MainOS">
<Setting Name="DisableHS200Support" Value="" />
</Settings>
</Static>
</ImageCustomizations>
VALUE DESCRIPTION
Related topics
Prepare for Windows mobile development
Customization answer file overview
Defining capacitive button behavior
1/18/2019 • 3 minutes to read
For mobile devices that use capacitive buttons, OEMs must add registry values that specify the number of
capacitive buttons, the button locations, the button names, and the values to send to the OS when the button is
pressed. This information enables the OS to treat the capacitive buttons below the screen as touchable targets.
Note
Although OEMs typically configure this behavior by adding a registry value in an INF file that is included in a
driver package, this behavior can also be configured via the customization process described below. By using both
options, OEMs can define the default behavior in the driver for a specific hardware component, and modify this
behavior as necessary in images for different device models that use the same driver.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Input/Touch/CapButtons">
</Settings>
</Static>
</ImageCustomizations>
BUTTON VALUE
Back 0x1B
Start 0x71
Search 0x72
- For the `Area`*n* setting, set the `Value` to a string that marks the position of the current button. The
string must have the format *ul.x,ul.y lr.x,lr.y*, where *ul* = upper left and *lr* = lower right. For
example, `Value=" 0,1295 236,1390"`.
6. If you want to enable the built-in vibration feedback mechanism for the capacitive buttons in the OS,
include the VibrateSupport , VibrateDuration , and VibrateIntensity settings and configure them as
described below. If you do not want to enable vibration feedback, you can omit these settings from the
customization answer file.
For the VibrateSupport setting, set Value to one of the following values.
VALUE DESCRIPTION
```
<Setting Name="VibrateDuration" Value="0x64" />
```
- For the `VibrateIntensity` setting, set `Value` to a value between 0 and 100 in decimal (or 0x0 and 0x64
in hexadecimal) that specifies the intensity of the vibration. The following example sets this value to 50.
```
<Setting Name="VibrateIntensity" Value="0x32" />
```
Related topics
Prepare for Windows mobile development
Customization answer file overview
Describing the physical width and height of the
display
1/18/2019 • 2 minutes to read
As part of implementing support for the touch controller hardware, OEMs must add registry values that specify
the physical width and height the portion of the screen that is used to render the mobile device UI. The OS uses
this information to properly scale touch gestures and help ensure a fluid user experience.
Note Although OEMs typically configure this behavior by adding a registry value in an INF file that is included in
a driver package, this behavior can also be configured via the customization process described below. By using
both options, OEMs can define the default behavior in the driver for a specific hardware component, and modify
this behavior as necessary in images for different device models that use the same driver.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="DisplayWidthAndHeight"
Description="Use to specify the physical width and height the portion of the screen
that is used to render the phone UI."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Input/Touch/DisplayProperties">
</Settings>
</Static>
</ImageCustomizations>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Specifying the repeat rate for touch samples during
touch-and-hold presses
1/18/2019 • 2 minutes to read
As part of implementing the touch driver, OEMs must determine how to send repeated touch samples to the input
reader component in the OS during touch-and-hold presses. OEMs can choose to have the HID touch class driver
(TchHID.sys) automatically send duplicate data packets to the input reader component in the OS during touch-and-
hold presses, or they can send repeated touch samples from their touch driver. The OEM must add a registry value
that tells the OS which implementation they chose, and the repeat rate to use if the OEM chose to have TchHID.sys
send duplicate data packets automatically.
Microsoft recommends that OEMs send duplicate touch samples for touch-and-hold presses from their touch
driver rather than have TchHID.sys automatically send repeated data packets.
Note Although OEMs typically configure this behavior by adding a registry value in an INF file that is included in
a driver package, this behavior can also be configured via the customization process described below. By using
both options, OEMs can define the default behavior in the driver for a specific hardware component, and modify
this behavior as necessary in images for different mobile device models that use the same driver.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="AutoRepeat"
Description="Use to specify the rate at which the HID touch class driver
(TchHID.sys) sends duplicate data packets to the input reader component in the OS during touch-and-hold
presses."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Input/Touch/AutoRepeat">
<Setting Name="RepeatInterval" Value="" />
</Settings>
</Static>
</ImageCustomizations>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for applications and Microsoft
components
1/18/2019 • 2 minutes to read
This section contains information about customizations related to apps and Microsoft components.
In this section
TOPIC DESCRIPTION
Active phone cover settings OEMs can create and register an active phone cover app,
which allows partners to create a user experience with their
mobile device cover accessories. This app must be preloaded
on the phone as a Settings/CPL application.
Customize the SIM toolkit OEMs can change the display duration for certain SIM toolkit
UI dialogs or messages if the default values do not meet the
requirements of the mobile operator.
Enhanced apps experience for medium and large screens OEMs can use the UserPreferenceWidth setting to override
the default behavior based on the screen size and specify the
physical width of the device (instead of using the automatically
calculated HORZSIZE value).
Include required Microsoft components to the image This customization provides information on how partners can
include the required Microsoft components in the OS image.
Phone calls/SMS filter applications OEMs can build and register a phone call/SMS filter
application, which helps reduce the number of unwanted
phone calls and text messages that users receive.
Preload an app with a dependency To preinstall an app that has dependencies on other packages
or components, you must ensure the dependencies are
preinstalled first, before your app. If the dependent packages
or components are not installed first, your app preinstall will
fail.
Remove optional Microsoft components from the image This customization provides information on how partners can
remove any of the optional Microsoft components.
Store live tile The Store tile, when medium-sized, becomes a live tile. It
shows both the Microsoft Store logo and the name. The
Microsoft Store live tile cycles through apps that the user will
see in the Store and lets the user discover apps outside of the
Store. Microsoft recommends that partners keep the default
Store live tile behavior. However, partners may change the
default behavior to turn off the Store live tile and to prevent
the OS from using cellular data to update the Store live tile in
the background.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Active phone cover settings
1/18/2019 • 2 minutes to read
OEMs can create and register an active phone cover app, which allows partners to create a user experience with
their mobile device cover accessories. This app must be preloaded on the phone as a Settings/CPL application.
OEMs can then enable the app to be launched when the active phone cover is closed and specify the default setting
for the lock screen's auto unlock setting, which determines if the lock screen is automatically lifted when the user
opens the cover.
Limitations and restrictions:
When the OS receives a notification that the cover state has been set to Closed:
The OS locks the device.
The OS uses the AUMID setting to launch the active phone cover app. The app is launched in the
foreground, above the lock screen, and the app is rendered at the top of the z-order.
When the OS receives a notification that the cover state has been set to Opened:
The OS terminates the active phone cover app and shows the default lock experience.
If the user opens the cover and the AutoUnlock setting is set to 1, the OS automatically lifts the lock screen
and tries to unlock the device. If the device does not have a password lock, the OS unlocks the device.
Otherwise, the OS prompts the user for their password.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<!-- Preload the phone cover app. Specify the source, license, and ProvXML files. -->
<Applications>
<Application Source=""
License=""
ProvXML="" />
</Applications>
<Settings Path="Shell/SmartCover">
<Setting Name="AUMID" Value="" />
<Setting Name="AutoUnlock" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To preload the active phone cover app, add an Applications parent element and add an Application child
element to correspond to the active phone cover app that you are preloading. For the Application, specify
the values for the following settings:
Source – Set to the path and name of the app to preload.
License – Set to the path and name of the app license file.
ProvXML – Set to the path and name of the provisioning XML file that corresponds to the app.
4. To enable the app to be launched when the cover is closed, set the value of AUMID to your app's Application
User Model ID (AUMID ). To identify the AUMID, follow the information in this Microsoft Web site. The
value must be in the format similar to this example: SmartCoverApp_<PublisherID>!App.
5. To specify the default setting for the lock screen's auto unlock setting and determine if the lock screen is
automatically lifted when the user opens the active phone cover, set AutoUnlock to one of the following
values:
VALUE DESCRIPTION
0 or 'Disabled' The lock screen is not lifted when the user opens the
active phone cover.
Testing steps:
1. Flash the build containing this customization to a phone.
2. Set up the phone and then go to Settings screen. Verify that the active phone cover app appears in the
Settings CPL.
3. With the active phone cover attached to the phone, close the cover. Verify that the active phone cover app is
launched successfully once the cover is closed.
4. Depending on the value you specified for the AutoUnlock setting, verify whether the lock screen is
automatically lifted when you open the active phone cover.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customize the SIM toolkit
1/18/2019 • 2 minutes to read
OEMs can change the display duration for certain SIM toolkit UI dialogs or messages if the default values do not
meet the requirements of the mobile operator.
The default display times for SIM toolkit commands are as follows:
GET INPUT: 120 seconds
DISPLAY TEXT: 60 seconds
SELECT ITEM: 60 seconds
GET INKEY: 60 seconds
OEMs can modify the values for the following settings.
SETTING DESCRIPTION
To customize these settings using MCSF, see the next section. If you're using Windows provisioning, use Windows
Configuration Designer to customize the settings or write your own Windows provisioning answer file. Regardless
of the framework that you use, you must determine if you need to use the per-device or per-IMSI setting.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SIMToolkitCustomization"
Description="Use to modify certain SIM toolkit UI dialogs and messages."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the values for UIDefaultDuration and UIGetInputDuration .
Testing
1. Flash the build containing this customization to a phone.
2. Go to the Cellular & SIM > Advanced options settings screen to start the SIM toolkit UI app.
3. Verify that the duration that the UI dialogs and messages are displayed match the default values that you've set.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enhanced apps experience for medium and large
screens
1/18/2019 • 3 minutes to read
The mobile device screen size is determined by the OS based on the Extended Display Identification Data (EDID ).
The Start tile defaults to the following layouts based on the HORZSIZE value, in millimeters, of the
GetDeviceCaps function:
The following table shows the device categories and resolutions that are supported for medium and large screen
sizes.
Note The screen width matrix shown above will not work for 15:9 panel definitions. WXGA and WVGA, which
are 15:9 panels only, support the small screen size.
For devices that are automatically calculated to have medium and large screen sizes, the entire UI is scaled down
unless the screen or an application has opted out of the behavior. For devices with medium screens, the UI is scaled
93%. For devices with large screens, the UI is scaled 78%. Across devices, in case of a fixed size UI element, these
will appear to be the same physical size. If the item is full screen width, the item's width will increase with the size
of the screen, but the height will maintain the same physical size. Other changes in the UI include the following:
More text is displayed horizontally.
More items are displayed on a vertical list.
Spacing between UI elements, such as text or icons, is proportionally scaled down.
Image sizes are proportionally scaled down.
OEMs can use the UserPreferenceWidth setting to override the default behavior based on the screen size and
specify the physical width of the device (instead of using the automatically calculated HORZSIZE value). The value
for UserPreferenceWidth influences the screen resolution scale factor. A reboot is required for the change to take
effect on the chrome process or any apps that are already running. Note that this only has a meaningful impact on
720 x 1280 and 1080 x 1920 devices.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="ScreenSize">
<!-- Set the value in millimeters. Specify the value in decimal or hexadecimal (0x prefix) value.
-->
<Setting Name="UserPreferenceWidth" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of UserPreferenceWidth to the physical width of the device, in millimeters, to override the
default screen layout. Use either the decimal or hexadecimal (with the 0x prefix) value.
Testing steps:
1. Flash the build that contains this customization to a phone.
2. Verify that the following changes have been enabled on the phone:
CHANGE DESCRIPTION
System font size Verify that the Ringtone label text in the Settings
screen is smaller.
Email list view Open an email inbox and verify that the email items
are listed with smaller text and that there is a second
preview line for each item.
Messaging chat bubbles Open the Messaging app and open a conversation.
Verify that the font size for the chat cards is smaller,
which scales the size of the chat bubbles.
CHANGE DESCRIPTION
System font size and list item size Open the People hub and verify that the font size
and icons for each contact are smaller.
Two-column to three-column grid view Open Photos and go to the Albums screen. Verify
that there are more columns and the tile sizes and
spacing are smaller.
System font size and list item size Open the Microsoft Store app and verify that the apps
list contains smaller tiles and font size.
Two-column to three-column grid view From the Microsoft Store app, navigate to either top
music albums or new releases and verify that there are
3 columns and the tile sizes and spacing are smaller.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Include required Microsoft components to the image
1/18/2019 • 2 minutes to read
This customization provides information on how partners can include the required Microsoft components in the
OS image. For more information about other features you can include or exclude from your image, see Optional
features for building images.
For a comprehensive list of required Microsoft components that must be included in a Windows 10 Mobile image,
refer to the OEM Policy Document (OPD ) for Windows 10 Mobile.
For any phone or other device that is submitted for NAL certification in China (excluding Hong Kong SAR
and Macau), partners must meet the following requirements:
Do not include the any Skype app, tile, or functionality as part of any Windows 10 Mobile image,
including any test images and final images.
Install the MESSAGINGLITE package, which does not contain Skype, on all devices.
For any devices other than those listed above for which MESSAGINGLITE is required, partners must install
the MESSAGINGGLOBAL package, which contains Skype.
Note The OS selects the correct messaging package to include as part of the image based on different
locale and language combinations and sets this as the default selection. OEMs don't need to select the
correct messaging package to install, but should make sure that the correct package is chosen to meet the
requirements.
Instructions:
To install the Messaging package that does not include Skype integration
1. Locate the OEMInput.xml file that you are using to define your image.
2. Find the Features section, and within the Microsoft child element, review the Feature elements.
3. Add a <Feature>MESSAGINGLITE</Feature> entry in your OEMInput.xml file.
<Features>
<Microsoft>
<Feature>MESSAGINGLITE</Feature>
</Microsoft>
</Features>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Phone call/SMS filter applications
1/18/2019 • 2 minutes to read
OEMs can build and register a phone call/SMS filter application, which helps reduce the number of unwanted
phone calls and text messages that users receive. This application must be preloaded on the phone as a
Settings/CPL application.
Limitations and restrictions:
The OEM application shall be a CPL/Settings application.
The OEM application shall have a privacy policy that is presented to the user before the user enables
filtering, and also is available from the application, for example, a Privacy policy or About link. Furthermore,
the application shall not send any of the information from the user (including phone numbers, dates of
communication, text messages, and so on) off the device or to any other application or service which might
do so.
The user shall explicitly enable filtering in order to begin filtering calls and/or SMS messages. Additionally,
the application must provide a way for the user to disable filtering.
The application shall indicate to the user that no MMS or IM messages will be blocked, and that the user
may still be charged for blocked SMS or blocked phone calls.
The OEM application shall show blocked calls when launched from the blocked calls screen and must
show blocked messages when launched from the blocked messages screen. Additionally, the OEM
application shall require the user to explicitly consent to block or unblock a number when launched from the
block number... option.
Constraints: FirstVariationOnly
Instructions:
1. Create a phone call/SMS filter application.
2. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="PhoneCallSMSFilterApp"
Description="Use to preload and configure your phone call/SMS filter application."
Owner=""
OwnerType="OEM">
<Static>
<!-- Preload the phone call/SMS filter app. Specify the source, license, and ProvXML files. -->
<Applications>
<Application Source=""
License=""
ProvXML="" />
</Applications>
<Settings Path="Phone/PhoneSmsFilter">
<!-- Specify the app ID or GUID for your phone call/SMS filter app.
The format looks like {12345678-1234-1234-1234-123456781234} -->
<Setting Name="AppId" Value="" />
</Settings>
</Static>
</ImageCustomizations>
3. Specify an Owner .
4. To preload the phone call/SMS filter application, add an Applications parent element and add an
Application child element to correspond to the phone call/SMS filter app that you are preloading. For the
Application, specify the Source (.xap), License , and ProvXML files that correspond to app.
5. Set the value of AppId to the app ID or GUID for your phone call/SMS filter app. The value must be in the
format {12345678 -1234 -1234 -1234 -123456781234 }.
Testing steps:
1. Flash the build containing this customization to a device. The phone call/SMS filter application will be pre-
installed as a settings/CPL app.
2. After the device has finished initial setup, launch the OEM CPL app.
3. In the phone call/SMS filter app, verify the following:
The privacy policy shows up as expected and the user is requested to approve.
The user is prompted if they would like to begin filtering.
4. Depending on your implementation, verify that the app can do the following:
Recognize the phone numbers of blocked incoming calls.
Recognize the phone number and message from an incoming SMS.
Add or remove phone numbers from the blocked list.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Preload an app with a dependency
1/18/2019 • 5 minutes to read
OEMs can preload apps as long as they meet the requirements specified in the Windows 10 Mobile OEM Policy
Document (OPD ). For more information on how to create preloaded apps for mobile devices, see Preinstallable
apps for mobile devices.
If you need to preinstall an app that has dependencies on other packages or components, you need to make sure
that the other packages or components are preinstalled first before your app. If the dependent packages or
components are not installed first, your app preinstall will fail.
Instructions
Prerequisites:
1. Make sure you have all the files you need to preload the OEM app:
App source, such as an .appx or .appxbundle
License file - This should be included as part of the preinstallation package.
ProvXML file - See the section Create a .provxml file for a preinstallable app for information on how
to do this. When specifying the value of the ProductID parameter, this value must match the GUID
from the AppxManifest file in the preinstallation package.
2. Make sure you have the following files for the required component:
App source, such as .appx or .appxbundle
ProvXML file - This is a separate provisioning file from the one that corresponds to the primary app.
When writing the provXML file, the value of the ProductID parameter must match the GUID from
the AppxManifest file that corresponds to the required component.
Note Unlike the primary app, you do not need the license file for the required component when preloading
it on the mobile device.
3. Name your provXML files so that they meet the requirements outlined in this step.
To make sure the required component is installed first, name the provXML files associated with the
component in such a way that the file names precede the provXML file name for the primary app you want
to preinstall. The OS preinstall logic uses the provXML file names to determine the order that apps and
components are preinstalled so naming your required component so it alphabetically precedes the primary
preinstall app ensures the dependency is resolved.
For example, if you have a primary app called ContosoPartnerApp that's dependent on a framework called
ContosoFramework, you can ensure the framework is installed first by using these naming suggestions:
For the ContosoFramework provXML file, use a name that is similar to
MPAP_000ContosoFramework_001.provxml.
For the ContosoPartnerApp provXML file, use a name that is similar to
MPAP_aaaContosoPartnerApp_001.provxml.
In the Windows file system, "000" takes precedence over "aaa" so naming your provXML files this way
ensures that the Contoso_FrameworkApp is installed before Contoso_PartnerApp.
To preload the apps, build, and flash the OS image:
1. Create an package that contains the source file, license file, and provisioning file for the primary app.
a. Write a .pkg.xml and specify the source file, license file, and the .provXML file that corresponds to the
primary app.
The following code example shows how to do this.
b. Specify the values for the Owner, ReleaseType, Platform, Component, and SubComponent
elements.
c. Replace C:\Contoso\Customizations\Assets\ContosoPartnerApp.appxbundle with the location and
file name of your app's source file.
d. Replace C:\Contoso\Customizations\Assets\MPAP_aaaContosoPartnerApp_001.provxml with the
location and file name of your app's provisioning file.
e. Replace C:\Contoso\Customizations\Assets\ContosoPartnerApp_License.xml with the location and
file name of your app's license file.
f. Save the .pkg.xml file.
g. Run PkgGen to generate the .spkg from the .pkg.xml.
2. Create an package that contains the source file for the required component and the provisioning file that
corresponds to it.
a. Write a .pkg.xml and specify the source file and the .provXML file that corresponds to the required
package or component.
The following code example shows how to do this.
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="urn:Microsoft.WindowsPhone/PackageSchema.v8.00"
Owner=""
OwnerType="OEM"
ReleaseType="Production"
Platform="PlatformName"
Component="Phone"
SubComponent="ContosoFramework">
<Components>
<OSComponent>
<Files>
<File
Source="C:\Contoso\Customizations\Assets\contoso-framework-app.appx"
DestinationDir="$(runtime.commonfiles)\Xaps" />
<File
Source="C:\Contoso\Customizations\Assets\MPAP_000ContosoFramework_001.provxml"
DestinationDir="$(runtime.commonfiles)\Provisioning\OEM" />
</Files>
</OSComponent>
</Components>
</Package>
b. Specify the values for the Owner, ReleaseType, Platform, Component, and SubComponent
elements.
c. Replace C:\Contoso\Customizations\Assets\contoso -framework-app.appx with the location and file
name of the component's source file.
d. Replace C:\Contoso\Customizations\Assets\MPAP_000ContosoFramework_001.provxml with the
location and file name of the package or component's provisioning file.
e. Save the .pkg.xml file.
f. Run PkgGen to generate the .spkg from the .pkg.xml.
3. Write down the location and names of the .spkg files that were generated for your primary app and the
required component.
4. Update your feature manifest file to include these new packages and define a feature name for them. For
more information, see Feature manifest file contents.
a. Edit the feature manifest file.
b. In the feature manifest file, locate the OEM group under Features.
c. Within the OEM group, define a feature name for the package containing the required component
and the package containing the primary app.
The following code example shows how to do this.
<PackageFile Path="C:\Contoso\Customizations\Assets"
Name="Owner.Component.SubComponent.ContosoFramework.spkg" >
<FeatureIDs>
<FeatureID>CONTOSO_FRAMEWORK</FeatureID>
</FeatureIDs>
</PackageFile>
<PackageFile Path="C:\Contoso\Customizations\Assets"
Name="Owner.Component.SubComponent.ContosoPartnerApp.spkg" >
<FeatureIDs>
<FeatureID>CONTOSO_PARTNERAPP</FeatureID>
</FeatureIDs>
</PackageFile>
d. For each PackageFile element, change the values of the Path and Name attributes to match the
location and name of your framework and app .spkg files.
e. Provide a FeatureID for your framework and primary app. You'll use these IDs to include these
features in your OEMInput.xml file.
f. Save your updated feature manifest file.
5. Update your OEMInput.xml file to include the new features that you defined in the previous step. For more
information, see OEMInput file contents.
a. Edit your OEMInput.xml file.
b. In the OEMInput file, locate the OEM group under Features.
c. Within the OEM group, define a feature name for the required component primary app.
The following code example shows how to do this.
<OEM>
<Feature>CONTOSO_FRAMEWORK</Feature>
<Feature>CONTOSO_PARTNERAPP</Feature>
</OEM>
d. Change the Feature entries to match the FeatureIDs for your required component and primary app.
e. Save your updated OEMInput file.
6. Use the OEMInput.xml file as one of the inputs to build the mobile image.
You can use ImgGen.cmd to build the image.
7. Depending on the mobile image type that you built, you may need to sign the image before you can flash it
to the phone. For more information, see Sign a full flash update (FFU ) image.
Testing
1. Flash the image that contains the preloaded app to a mobile device.
2. Set up the device.
3. Once the device is fully set up, go to the full apps list.
4. Verify that you can see your primary app listed with all the other apps in the device.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Remove optional Microsoft components from the
image
1/18/2019 • 2 minutes to read
This customization provides information on how partners can remove any of the optional Microsoft components.
For more information about other features you can include or exclude from your image, see Optional features for
building images.
For a comprehensive list of optional Microsoft components, refer to the OEM Policy Document (OPD ) for
Windows 10 Mobile.
Windows 10 Mobile ships with the following optional Microsoft components: Skype Windows Phone
Silverlight app, Facebook, MSN Sports, MSN Money, and Continuum.
An OEM or mobile operator partner may opt-out of installing these optional apps in their final image.
Where there is a prepinned Start tile for the replaced optional component, partners must prepin a new Start
tile in its place using one of the other Microsoft apps that OEMs can prepin to Start. Partners are
encouraged to ship these components as part of their final OS image except in markets where these
applications are not allowed.
For any phone or other device that is intended to be sold in China, partners must not include any Facebook
app or tile provided by Microsoft as part of any Windows 10 Mobile image, including any test images and
final images.
Instructions:
To remove Skype Windows Phone Silverlight app from the OS image
1. Locate the OEMInput.xml file that you are using to define your image.
2. Find the Features section, and within the Microsoft child element, review the Feature elements.
3. If SKYPE is in the list of optional Microsoft features, delete the Feature entry from the list.
In the following example, the <FEATURE> entry shows what you need to delete from your OEMInput.xml
file.
<Features>
<Microsoft>
<Feature>SKYPE</Feature>
</Microsoft>
</Features>
<Features>
<Microsoft>
<Feature>FACEBOOK</Feature>
</Microsoft>
</Features>
<Features>
<Microsoft>
<Feature>Docking</Feature>
</Microsoft>
</Features>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Store live tile
1/18/2019 • 2 minutes to read
The Store tile, when medium-sized, becomes a live tile. It shows both the Microsoft Store logo and the name. The
Microsoft Store live tile cycles through apps that the user will see in the Store and lets the user discover apps
outside of the Store. By default, the Store live tile is on and out-of-the-box, the live tile is only updated over Wi-Fi
until the user enters the Store for the first time. After the user enters the Store, the OS will start using cellular data
to update the Store live tile in the background.
Microsoft recommends that partners keep the default Store live tile behavior. However, partners may change the
default behavior to turn off the Store live tile and to prevent the OS from using cellular data to update the Store
live tile in the background.
Regardless of the default Store live tile settings, users have the option of changing the defaults by choosing the
Live Tile settings in the Microsoft Store Settings screen.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample or use the
sample StoreLiveTile.xml file.
<Static>
<Settings Path="StoreMoOemGroup">
<Setting Name="OemMoCustomizedIsLiveTileEnabled" Value="" />
<Setting Name="OemMoLiveTileOptInToCellularAfterStoreLaunch" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To set the default value for Live Tile Show products on tile option in the Microsoft Store Settings screen,
set OemMoCustomizedIsLiveTileEnabled to one of the following values:
VALUE DESCRIPTION
0 or 'Disabled' Disables the live tile feature for the Store tile. The
Show products on tile option is Off.
VALUE DESCRIPTION
1 or 'Enabled' Enables the live tile feature for the Store tile. The
Show products on tile option is On.
This is the default OS value.
4. To set the default value for Live Tile Only update the tile when I'm on Wi-Fi option in the Microsoft
Store Settings screen, set OemMoLiveTileOptInToCellularAfterStoreLaunch to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash a build containing this customization to a phone.
2. Verify that the Store live tile is medium-sized and pinned to the Start screen.
3. Go to the Settings screen in the Microsoft Store app, and check the default values for the following Live
Tile options: Show products on tile and Only update the tile when I'm on Wi-Fi. Confirm that they
match the default values that you set.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for boot, initial setup, and shutdown
1/25/2019 • 2 minutes to read
Use these customizations to configure the device boot, initial setup, or shutdown experience.
In this section
TOPIC DESCRIPTION
Configure the timezone confirmation page during setup Use to allow users to change the timezone and region
during device setup.
Configuring a boot screen to display in the final boot By default, the Windows 10 Mobile logo is displayed as
screen slot the final boot screen. However, partners can display a
different screen for the final boot screen slot. The image
must be in .JPG, .JPEG, or .PNG format.
Configuring boot battery charging behavior The boot (UEFI) environment contains a battery charging
application (owned by Microsoft) that is responsible for
charging the battery in pre-boot and low power states.
OEMs can configure some of the behavior of this
application by using the registry values described in this
topic.
Configuring OEM and mobile operator boot screens Partners must add at least one, and no more than two,
boot screens (also called splash screens) that are
displayed when the device is turned on. These screens are
intended for partners to display branding elements or
logos.
Configuring the duration of the first boot screen If partners specify two boot screens (in addition to the
Windows 10 Mobile boot screen), they can modify the
duration of the first boot screen. We recommend that
partners choose a duration for the first boot screen so
that the first and second boot screens appear for the
same amount of time.
Custom shutdown screen Partners can add a static logo or background during
shutdown.
Language selection during initial setup If multiple display languages are included on the device,
partners have the option of hiding the Language
selection screen during setup.
TOPIC DESCRIPTION
Partner account configuration during setup In Windows 10 Mobile, an OEM or mobile operator may
specify one preloaded app to be launched at the end of
setup to walk users through an OEM or mobile operator
account setup.
Optionally, an OEM or mobile operator may also preload
an additional 4 apps that can be subroutined and called
from a main app. In this case, the partner specifies one of
the apps as the hub app (main app), which will be
automatically launched at the end of setup. This app can
then invoke other spoke apps (subroutined apps) to
complete other tasks.
Screen background color during initial setup For Windows 10 Mobile, the default background during
OOBE or initial device setup is always dark. To align with
this change, OEMs can no longer change the default
screen background color during OOBE or initial device
setup.
Set the default country/region when SIM PIN is on OEMs can customize the default home country/region
that shows up during OOBE in cases where the SIM PIN is
turned on. This value is associated with the default ICCID
values. When SIM PIN is turned off, the OS uses the MCC-
derived country/region instead.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configure the timezone confirmation page during
setup
1/18/2019 • 2 minutes to read
Use to allow users to change the timezone and region during device setup.
By default, the OS shows the timezone confirmation page during initial device setup after the device receives the
Network Identity and Time Zone (NITZ ) information. This page allows users to change the timezone and region
during setup. To meet requirements from some mobile operators, OEMs can hide this page.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="SetupWizard">
<Setting Name="EnableNITZTimeDateConfirmation" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of EnableNITZTimeDateConfirmation to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash a build containing this customization to a device capable of receiving NITZ information.
2. During the initial device setup process, verify that the timezone confirmation page is either hidden or shown
in the UI depending on the value that you set for EnableNITZTimeDateConfirmation .
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configuring a boot screen to display in the final boot
screen slot
1/18/2019 • 2 minutes to read
By default, the Windows 10 Mobile logo is displayed as the final boot screen. However, partners can display a
different screen for the final boot screen slot. The image must be in .JPG, .JPEG, or .PNG format.
Limitations and restrictions:
If partners display a different boot screen for the final slot, the Windows 10 Mobile boot screen must be
moved to the first or second slot by following the instructions in Configuring OEM and mobile operator
boot screens. When moving the Windows 10 Mobile boot screen to the first or second slot, partners must
use one of the bitmaps available in the Windows 10 Mobile Kit under
%WPDKCONTENTROOT%\WPBootScreens. The Windows 10 Mobile boot screen must not be removed,
altered, or replaced.
Note The Windows 10 Mobile Kit provides a different bitmap for each of the supported screen
resolutions: 480 × 800, 720 × 1280, 768 × 1280, and 1080 × 1920. OEMs should use the appropriate
bitmap for the screen resolution supported by their hardware.
The amount of time the final boot screen is displayed cannot be configured by the OEM. During cold boot,
the final boot screen is displayed until device initialization is complete. During warm boot, the final boot
screen is displayed for 2.5 seconds.
Logos and images must be owned or licensed by the OEM or mobile operator partner.
The final boot screen supports 24-bit-per-pixel bitmaps, and the screen cannot be animated.
The bitmap for the final boot screen should match the screen resolution.
Support for localization is not included. Images and text should be appropriate for the market in which the
device will ship.
Additional boot screens must not be added to the startup sequence.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="CustomBootScreen"
Description="Use to display a different screen for the final boot screen slot."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="BootandShutdownScreens">
<Asset Name="BootImage" Source="" />
<Setting Name="WindowsPhoneBootScreenOverride" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Source of the BootImage asset to the full path and name of the static logo or custom background
you want to use when the device shuts down. For example, C:\Program Files (x86 )\Windows
Kits\10\CustomizationAssets\CustomBootScreen\CustomLogo.png.
4. Set the WindowsPhoneBootScreenOverride setting's value to the file name of the custom screen or logo that
you just added. In the example, the value is CustomLogo.png.
Related topics
Configuring OEM and mobile operator boot screens
Configuring the duration of the first boot screen
Prepare for Windows mobile development
Customization answer file overview
Configuring boot battery charging behavior
1/18/2019 • 2 minutes to read
The boot (UEFI) environment contains a battery charging application (owned by Microsoft) that is responsible for
charging the battery in pre-boot and low power states. OEMs can configure some of the behavior of this
application by using the registry values described in this topic.
Constraints: ImageTimeOnly
Instructions:
Charging boot threshold
OEMs can specify the threshold at which the device boots from UEFI-based charging to the Main OS. It is
necessary to hold the device in the UEFI charging phase to charge the battery when it is too low to boot into the
Main OS.
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="ChargeSettings">
<Setting Name="ChargingBootThreshold" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Value to a threshold value between 1 and 10. Microsoft recommends that OEMs calibrate this
value so that the device spends a minimal amount of time in the threshold charging mode.
Note In Windows 10 Mobile, the UEFI charging app included in the OS is being deprecated. Microsoft
recommends that OEMs use the app published by the SoC vendor. If you use the SoC vendor’s app, make
sure that you disable the Windows 10 app by updating ChargingBootThreshold to 255 (hex 0xFF ).
Power-off charging
This setting enables power-off charging. Power-off charging allows the device to charge while it appears off to the
user. In power-off charging mode, the device does not boot to the OS when plugged in. Instead, the device waits
for the user to press and hold the power button before booting to the OS.
Important Power-off charging can only be configured when the device image is generated. Windows 10 Mobile
does not provide a way for users to enable or disable power-off charging.
1. Create a customization answer file using the contents shown in the following code sample or use the
sample ChargeSettings.xml file.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="ChargeSettings"
Description="Use to specify the threshold at which the device boots from UEFI-based
charging to the main OS and to enable power-off charging mode."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="ChargeSettings">
<Setting Name="PowerOffChargingEnabled" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Value to 1 to enable power-off charging or to 0 to disable power-off charging.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configuring OEM and mobile operator boot screens
1/18/2019 • 2 minutes to read
Partners must add at least one, and no more than two, boot screens (also called splash screens) that are displayed
when the device is turned on. These screens are intended for partners to display branding elements or logos.
Boot screens are shown only when the device is booting. When the user turns on the device from a sleep state,
only the lock screen appears. Boot screens or splash screens that were added are not applied until the next time
that the device boots. The runtime configuration engine runs later in the boot sequence (after the splash screens
have been shown) so the customization is not visible until the next time the device reboots.
Limitations and restrictions:
Logos and images must be owned or licensed by the OEM or mobile operator partner.
The first two boot screens support 24-bit-per-pixel bitmaps, and they cannot be animated. For more
information about the supported bitmap formats, see section 5.2.22.4 of the ACPI Specification Revision
5.0.
The bitmap, along with the (x,y) offset specified in the BGRT table, must fit inside the boundaries specified
by the screen resolution.
Support for localization is not included. Images and text should be appropriate for the market in which the
device will ship.
Additional boot screens must not be added to the startup sequence.
If the OEM specifies two boot screens (in addition to the Windows 10 Mobile boot screen), the duration for
displaying the first boot screen can be configured by the OEM. For more information, see Configuring the
duration of the first boot screen. The duration of the other boot screens cannot be altered.
Instructions:
To specify only one boot screen:
Update the BGRT table in ACPI to specify the required values to describe the boot screen. In particular, ensure
that the Image Address field is set to the address of the bitmap to use for the boot screen image, and set the
lowest bit of the Status field to 1. For more information about the BGRT table, see section 5.2.22 of the ACPI
Specification Revision 5.0. Because the implementation of the BGRT table is specific to the SoC vendor, the
SoC vendor may have additional guidance or requirements for these changes.
To specify two boot screens:
1. Configure the image for the first boot screen to be loaded through UEFI. For more information, consult
with the SoC vendor. In this scenario, the image for the first boot screen is not specified in the BGRT table;
UEFI firmware alone is responsible for displaying the first boot screen.
2. For the second boot screen, update the BGRT table in ACPI to specify the required values to describe the
second boot screen. In particular, ensure that the Image Address field is set to the address of the bitmap to
use for the second boot screen image, and set the lowest bit of the Status field to 0 (the value 0 indicates
that this BGRT table describes the second boot screen image). For more information about the BGRT table,
see section 5.2.22 of the ACPI Specification Revision 5.0. Because the implementation of the BGRT table is
specific to the SoC vendor, the SoC vendor may have additional guidance or requirements for these
changes.
Related topics
Configuring the duration of the first boot screen
Configuring a boot screen to display in the final boot screen slot
Configuring the duration of the first boot screen
1/18/2019 • 2 minutes to read
If partners specify two boot screens (in addition to the Windows 10 Mobile boot screen), they can modify the
duration of the first boot screen. We recommend that partners choose a duration for the first boot screen so that
the first and second boot screens appear for the same amount of time.
Only the duration of the first OEM -specified boot screen can be modified. The second OEM -specified boot screen
appears when first boot screen duration is complete, and it is displayed until the boot process is complete. To
determine the duration of the first boot screen, Microsoft recommends that OEMs time the boot process for their
hardware, and choose a duration for the first boot screen that results in the first and second boot screens
appearing for the same amount of time.
The following table describes the duration of each boot screen when three boot screens are used.
SCREEN DURATION
First boot screen By default, this screen is displayed for at least 5 seconds,
generally several seconds longer due to firmware and
early boot initialization time as described in the following
note. This duration is configurable by the OEM. Microsoft
recommends that this screen be displayed for at least 2.5
seconds.
Note
The first boot screen typically appears for several
seconds longer than the duration specified by the OEM,
and the OEM should take this into consideration when
determining a duration. The OEM-specified duration
actually begins with the start of ntoskrnl.exe
initialization, and typically the first boot screen actually
appears several seconds before ntoskrnl.exe
initialization starts.
Second boot screen This screen is displayed from the time the first boot
screen is finished until the boot process is complete and
the primary display driver can display the third boot
screen. This duration is not configurable by the OEM.
Third boot screen (by default, the Windows Phone boot During cold boot, this screen is displayed until phone
screen) initialization is complete. During warm boot, this screen is
displayed for 2.5 seconds.
For comparison, the following table shows the duration of each boot screen when only two boot screens are used.
SCREEN DURATION
First boot screen This screen is displayed until the boot process is
complete.
SCREEN DURATION
Second boot screen (by default, the Windows Phone boot During cold boot, this screen is displayed until phone
screen) initialization is complete. During warm boot, this screen is
displayed for 2.5 seconds.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="BootDisplaySettings">
<Setting Name="BootUXLogoTransitionTime" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the BootUXLogoTransitionTime value to the hexadecimal value of the number of milliseconds to display
the first boot screen.
Note
Because the associated setting is a REG_BINARY value, this value must be specified in hexadecimal pairs.
For example, if you want to set the value to 1000 milliseconds or 0x03E8 (hexadecimal), you must set the
value to "E8,03" in your customization answer file. Also note that the actual duration of the first screen may
be several seconds longer than the value specified. For more information, see the note in the first table
above.
Related topics
Configuring OEM and mobile operator boot screens
Configuring a boot screen to display in the final boot screen slot
Prepare for Windows mobile development
Customization answer file overview
Custom shutdown screen
1/18/2019 • 2 minutes to read
Partners can add a static logo or background during shutdown. Shutdown screen images must be in .JPG, .JPEG,
or .PNG format.
The resolution of the custom logo or background image provided by the partner should match the screen
resolution of the device. If the image resolution is less than or greater than the screen resolution, the OS will scale
the image to fit the screen.
Limitations and restrictions:
The goodbye text shall not be removed, altered, or replaced and the area behind the goodbye text must be
dark enough for the text to remain legible.
Any logos or images used in the shutdown screen shall be owned or licensed by the OEM or mobile
operator partner.
Partners shall not lengthen the amount of time the shutdown screen is displayed and thereby extend the
amount of time it takes for the phone to shut down.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="BootandShutdownScreens">
<Asset Name="ShutdownImage" Source="" />
<Setting Name="WindowsPhoneShutdownScreenOverride" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Source of the ShutdownImage asset to the full path and name of the static logo or custom
background you want to use when the phone shuts down. For example, C:\Program Files (x86 )\Windows
Kits\10\CustomizationAssets\CustomShutdownScreen\CustomLogo.png.
4. Set the value of the WindowsPhoneShutdownScreenOverride setting to the file name of the custom screen or
logo that you just added. For example, CustomLogo.png.
Testing steps:
1. Flash a build containing this customization to a phone.
2. Go through initial phone setup.
3. Shut down the phone.
4. Verify that you can see the goodbye text superimposed over your custom static logo or background.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Language selection during initial setup
1/18/2019 • 2 minutes to read
If multiple display languages are included on the device, partners have the option of hiding the Language
selection screen during setup. As a result, the device will use the default specified by the OEM, and users can
change the language later by using the Time & Language screen in Settings.
Constraints: None
Instructions:
1. Specify more than one phone language for your image. For more information, see Phone languages.
2. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="SetupWizard">
<Setting Name="ShowLanguageSelectionScreenInSetup" Value="" />
</Settings>
</Static>
</ImageCustomizations>
3. Specify an Owner .
4. Set the Value to either of the following:
VALUE DESCRIPTION
Testing steps:
1. Flash a build containing this customization and multiple languages to a phone.
2. At the beginning of setup, verify that the Language selection screen is either shown or hidden depending
on the default value you specified.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Partner account configuration during setup
1/18/2019 • 9 minutes to read
In Windows 10 Mobile, an OEM or mobile operator may specify one preloaded app to be launched at the end of
setup to walk users through an OEM or mobile operator account setup.
Optionally, an OEM or mobile operator may also preload an additional 4 apps that can be subroutined and called
from a main app. In this case, the partner specifies one of the apps as the hub app (main app), which will be
automatically launched at the end of setup. This app can then invoke other spoke apps (subroutined apps) to
complete other tasks.
Partners can use this customization to walk users through the process of setting up an OEM or mobile operator-
specific account or to enable a multi-page OOBE setup experience. If partners configure this customization, the All
done screen at the end of setup will be replaced with an Almost done screen that contains an introduction to the
partner app.
<Static>
<!-- Preload up to 5 apps to use for partner account setup. If you do, one app must be the hub app
and the rest are spoke apps. -->
<Applications>
<Application Source=""
License=""
ProvXML="" />
<Application Source=""
License=""
ProvXML="" />
<Application Source=""
License=""
ProvXML="" />
<Application Source=""
License=""
ProvXML="" />
<Application Source=""
License=""
ProvXML="" />
</Applications>
<Settings Path="SetupWizard">
<!-- Set to the GUID or App ID of the partner setup app -->
<Setting Name="PartnerSetupAppID" Value="" />
<!-- Specify the launch parameters for the partner setup app, such as the first page of the wizard
-->
<Setting Name="PartnerSetupAppParameters" Value="/_default#/accountSetup.xaml" />
<!-- Set to 1 to prompt the user to user to enable network connections before the app is run
<Setting Name="PartnerSetupAppNetworkPrompt" Value="1" />
-->
<!-- For one supported phone language, set the value to the localized partner name, account name,
and
the name you want to appear in the Table of Contents. For multiple language support, use the
below
settings instead as well as the Localization/MUI settings path for the base DLL and language
DLL files. -->
<Setting Name="PartnerSetupAppPartnerName" Value="" />
<Setting Name="PartnerSetupAppTaskName" Value="" />
<Setting Name="PartnerSetupAppTOCTaskName" Value="" />
<!-- For multiple supported phone languages, use these settings and provide the base MUI DLL
<Setting Name="PartnerSetupAppPartnerName"
Value="@c:\Data\Programs\{00000000-0000-0000-0000-
000000000000}\Install\DisplayNames.dll,-101" />
<Setting Name="PartnerSetupAppTaskName"
Value="@c:\Data\Programs\{00000000-0000-0000-0000-
000000000000}\Install\DisplayNames.dll,-102" />
<Setting Name="PartnerSetupAppTOCTaskName"
Value="@c:\Data\Programs\{00000000-0000-0000-0000-
000000000000}\Install\DisplayNames.dll,-103" />
-->
</Settings>
<!-- For multiple supported phone languages, add your base MUI DLL file and specify the
language MUI packages (*.dll.mui)
<Settings Path="Localization/MUI">
<Asset Name="BaseDll" Source="" />
</Static>
</ImageCustomizations>
Testing steps:
1. Flash the build containing this customization and relevant display languages to a mobile device.
2. Verify the Almost done screen displays the localized text as expected.
3. Launch and complete and partner setup app to verify it works appropriately, is localized, calls any other
spoke apps, and that the user can exit instead of completing the setup tasks.
2. System settings app: The app can be written as a system settings app. This application will appear
on the System screen in Settings, and cannot be pinned to Start. It also will be hidden in the
Microsoft Store so that it cannot be accidentally downloaded.
See Design basics to learn more about how you can design a Universal Windows app that suits a variety of
devices with different display sizes and other tips for creating an app with a great UI.
See Sample app UI for examples on what your partner setup app's UI might look like.
MIDL bindings
MIDL bindings allow an app to be launched through a protocol and package family name. The hub and spoke
model only works on Universal Windows apps and you must use
Windows.System.Launcher.LaunchUriForResultsAsync.
Recommended APIs
We recommend that you use the following APIs when implementing your apps:
API USECASE
Windows.System.Launcher.LaunchUriForResultsAsync Allows a parent app to launch a child app. The child app must
return to the parent app. This achieves the hub and spoke
model requirement for this customization (for partners that
want to use this model).
When using this API, keep in mind the memory usage for
mobile devices. Every time the API is used, another child app is
launched while requesting not to terminate the parent app,
which means that it must be kept in memory.
<!-- Preload up to 5 apps to use as the hub and spoke apps -->
<Applications>
<Application Source=""
License=""
ProvXML="" />
<Application Source=""
License=""
ProvXML="" />
</Applications>
VALUE DESCRIPTION
Localized strings for partner name, account name, and Table of Contents
Partners must provide three localized strings: partner name, name(s) of the account(s) to configure, and the name
to show in the Table of Contents. The strings for the partner name and account name are used to complete the
following statement displayed to the user in the screen before the app is launched.
"Almost done..."
"You’re just about done setting up your phone. Next, PartnerSetupAppPartnerName will walk you through setting
up PartnerSetupAppTaskName."
If only one display language is included on the device, you can set the values for the
PartnerSetupAppPartnerName and PartnerSetupAppTaskName settings directly to the desired strings.
You can also set the value for the PartnerSetupAppTOCTaskName setting directly. This string will be used for the
Table of Contents.
In the above sample MCSF customization answer file, remove the comments in the section "For one
supported phone language…" and set the values to the strings you want to use.
If you include support for multiple display languages, you must create a resource-only .dll that contains
these three strings localized into every included language.
NOTE
This capability is available only through the MCSF framework and will not work if you use the Windows provisioning
framework.
In the above sample customization answer file, remove the comments around the section "For multiple
supported phone languages…". The sample shows an installed .dll file named DisplayNames.dll, and that the
partner name is string 101 and the account names are string 102. The string for the Table of Contents is
string 103. Update these values to match your implementation and update the path to the path of your
installed application.
Sample app UI
The following screenshots show what a partner setup app's UI might look like and some of the tasks that the app
may walk the user through during account setup.
Screen 7
Related topics
Prepare for Windows mobile development
Customization answer file overview
Screen background color during initial setup
1/18/2019 • 2 minutes to read
For Windows 10 Mobile, the default background during OOBE or initial device setup is always dark. To align with
this change, OEMs can no longer change the default screen background color during OOBE or initial device setup.
Set the default country/region when SIM PIN is on
1/18/2019 • 2 minutes to read
OEMs can customize the default home country/region that shows up during OOBE in cases where the SIM PIN is
turned on. This value is associated with the default ICCID values. When SIM PIN is turned off, the OS uses the
MCC -derived country/region instead.
If enabling this customization, OEMs can specify one or more ICCID digit prefix strings and the desired
country/region to associate with the ICCID prefix. OEMs can also specify an alternative IccidToRegion.xml mapping
table to use as the lookup table during device setup. This table is a tree of ICCID digit segments.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="IccidToRegionOverride/$(PREFIX)" Value="" />
<!-- Use to specify more than one ICCID digit prefix strings and their values
<Setting Name="IccidToRegionOverride/$(PREFIX)" Value="" />
<Setting Name="IccidToRegionOverride/$(PREFIX)" Value="" />
<Setting Name="IccidToRegionOverride/$(PREFIX)" Value="" />
-->
<Setting Name="IccidToRegionTablePath" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. For IccidToRegionOverride :
Replace ($PREFIX ) with a string that you want to use for the ICCID digit prefix.
Set the value to the desired region you want to associate with the ICCID digit prefix you added. The
value must be in ISO -3166-1 Alpha-2 format.
You must do this for each ICCID prefix that you want to configure. For example, if you are adding more than
one ICCID digit prefix, you must specify a different IccidToRegionOverride ($PREFIX ) and the value that
corresponds to that prefix.
4. To specify a different IccidToRegion.xml mapping table, set IccidToRegionTablePath to the path that contains
the new mapping table.
The table format is a tree of ICCID digit segments and must contain the following elements:
IccidToRegion - Parent element.
Segment - First level of one or more segments.
Region - Optional element. If the OS doesn't find a better match, it falls back to this value.
Digits - Use to specify one or more digit strings that must match to continue the descent through the
table.
Segment - Use to specify one or more child Segments. ICCID matching continues after the digits
that matched at the current level.
The following example shows the first few segments and digit strings in the default OS IccidToRegion.xml
mapping table:
Testing steps:
1. Flash a build containing this customization to a phone. Your phone must be using a SIM that has an ICCID
that matches one or more of the prefixes that you specified in the customization.
2. Go through initial device setup.
3. If you added one or more ICCID digit prefixes, verify that the home country/region has changed based on
the ICCID digit prefix you had set up.
Or, if you used a different IccidToRegion.xml mapping table, verify that the home country/region that shows
during initial device setup matches the value you specified in the mapping table.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for browser
1/18/2019 • 2 minutes to read
In this section
TOPIC DESCRIPTION
Custom HTTP headers for Microsoft Edge Partners can configure Microsoft Edge to send custom HTTP
headers, in addition to the default HTTP headers, with all
HTTP and HTTPS requests. The header is the portion of the
HTTP request that defines the form of the message.
Custom user agent string for Microsoft Edge The user agent string indicates which browser you are using,
its version number, and details about your system, such as
operating system and version. A web server can use this
information to provide content that is tailored for your specific
browser and phone.
Default value for browser data saver Partners can use this customization to configure the default
setting for the browser data saver feature by turning the
browser optimization service on or off.
Show pictures automatically when browsing Partners can enable or disable the Show pictures automatically
setting in the browser's advanced settings screen.
Welcome home page for Microsoft Edge Partners can set the home page that appears the first time
that Microsoft Edge is opened. This page is only shown the
first time the browser is opened. After that, the browser
displays either the most recently viewed page or an empty
page if the user has closed all tabs or opens a new tab.
WinInet ReceiveTimeOut duration In cases where there are issues related to network handovers,
partners can increase the WinInet ReceiveTimeOut value to
provide more time for the network switch to take place.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Custom HTTP headers for Microsoft Edge
1/18/2019 • 2 minutes to read
Partners can configure Microsoft Edge to send custom HTTP headers, in addition to the default HTTP headers,
with all HTTP and HTTPS requests. The header is the portion of the HTTP request that defines the form of the
message.
Limitations and restrictions:
A maximum of 16 custom headers can be defined.
Custom headers cannot be used to modify the user agent string.
Each header must be no more than 1 KB in length.
The following header names are reserved and must not be overwritten:
Accept
Accept-Charset
Accept-Encoding
Authorization
Expect
Host
If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since
Max-Forwards
Proxy-Authorization
Range
Referer
TE
USER -AGENT
X-WAP -PROFILE
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="CustomHTTPHeaders"
Description="Use to configure Microsoft Edge to send custom HTTP headers."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="InternetExplorer">
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Specify the value name for CustomHTTPHeaders1 by replacing $ (ValueName) with the Header name and set
the Value to a String.
Header name is the unique header name and String is the string that the header should pass for all HTTP
and HTTPS requests.
4. Specify additional custom headers, if needed. You can specify up to 16 custom HTTP headers.
Testing steps:
1. Flash the build containing this customization to a phone.
2. Tap on the Microsoft Edge tile to open the browser.
3. Navigate to a site that mirrors the header information for HTTP requests, and verify that your headers
appear as defined.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Custom user agent string for Microsoft Edge
1/18/2019 • 2 minutes to read
The user agent string indicates which browser you are using, its version number, and details about your system,
such as operating system and version. A web server can use this information to provide content that is tailored for
your specific browser and phone.
The user agent string for the browser cannot be modified. By default, the string has the following format:
Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; <Manufacturer>; <Device>) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166
<Manufacturer> is automatically replaced with the OEM name. This is the same as the PhoneManufacturer
setting value that is set as part of the customization Phone metadata in DeviceTargetingInfo.
<Device> is replaced with the device name or phone name. This is the same as the PhoneModelName setting
value that is set as part of the customization Phone metadata in DeviceTargetingInfo.
Limitations and restrictions:
The user agent string for the browser cannot be modified outside of the customizations listed above.
The user agent type registry setting cannot be modified or used to change the default browser view from
Mobile to Desktop.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Default value for browser data saver
1/18/2019 • 2 minutes to read
Partners can configure the default setting for the browser data saver feature by turning the browser optimization
service on or off, using the BrowserDataSaver setting.
Constraints: None
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
2. Specify an Owner .
3. Set BrowserDataSaver to one of the following values:
VALUE DESCRIPTION
Setting does not exist The browser data saver feature is turned on.
The Data Sense savings option in the browser
settings CPL is set to automatic.
Testing steps
1. Flash the build containing this customization to a device.
2. Open Microsoft Edge to launch the browser for the first time. Select recommended when the dialog to use the
browser settings is displayed.
3. Go to the browser settings CPL.
4. Depending on the value that you set for BrowserDataSaver , verify:
If BrowserDataSaver is set to 0, verify that the Data Sense savings option is set to off.
If BrowserDataSaver is set to 1, verify that the Data Sense savings option is set to automatic.
If BrowserDataSaver setting has not been set, verify that the Data Sense savings option is set to
automatic.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Show pictures automatically when browsing
1/18/2019 • 2 minutes to read
Partners can enable or disable the Show pictures automatically setting in the browser's advanced settings
screen.
Constraints: None
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
2. Specify an Owner .
3. Set ShowPicturesAutomatically to one of the following values:
VALUE DESCRIPTION
Testing steps
1. Flash the build containing this customization to a device.
2. Open the browser settings screen and choose the advanced settings option.
3. From the advanced settings screen, verify that Show pictures automatically is either enabled or disabled
depending on the value that you set for ShowPicturesAutomatically .
Related topics
Prepare for Windows mobile development
Customization answer file overview
Welcome home page for Microsoft Edge
1/18/2019 • 2 minutes to read
Partners can set the home page that appears the first time that Microsoft Edge is opened. This page is only shown
the first time the browser is opened. After that, the browser displays either the most recently viewed page or an
empty page if the user has closed all tabs or opens a new tab.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample or use the
sample WelcomeHomePage.xml file.
<Static>
<Settings Path="InternetExplorer">
<Setting Name="FirstRunUrl" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Specify the FirstRunUrl``Value with a valid link that starts with http:// . It is recommended that you use a
forward link that redirects the user to a localized page.
Testing steps:
1. Flash a build containing this customization to a phone with a data connection or Wi-Fi connection enabled.
2. Open Microsoft Edge, and verify that the correct page appears.
Related topics
Prepare for Windows mobile development
Customization answer file overview
WinInet ReceiveTimeOut duration
1/18/2019 • 2 minutes to read
In cases where there are issues related to network handovers, partners can increase the WinInet ReceiveTimeOut
value to provide more time for the network switch to take place.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="WinInet/InternetSettings">
<Setting Name="WinInetReceiveTimeOut" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Value , in milliseconds, to a number between 30000 and 120000 (inclusive). This value is will be
used as the WinInet ReceiveTimeOut value.
The default OS value is 60000 milliseconds (60 seconds).
Testing steps:
Work with your mobile operator partner to fully test this customization on their network.
1. Flash a build containing this customization to a phone with a cellular connection.
2. Place the phone in an area with a weak field signal, for example a weak 3G field.
3. Download a file during 2G to 3G handover.
4. Download a file during 3G to 2G handover.
5. Verify that the files were downloaded successfully. If not, adjust the value for WinInetReceiveTimeOut as
needed.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for cellular connectivity
1/18/2019 • 2 minutes to read
In this section
TOPIC DESCRIPTION
Background cellular data restriction To meet market or mobile operator requirements, OEMs can
restrict background data in the data usage settings.
Cellular data connection icon The one-, two-, or three-character codes used to signify the
data connection type in the status bar can be modified.
Custom percentages for signal strength bars Partners must modify the percentage values used for the
signal strength bars in the status bar.
Data transfer indicator OEMs can display a data transfer indicator on a device’s status
bar for mobile operators that require it.
Default highest connection speed Partners can set the default value for the Highest connection
speed option in the Settings > Cellular & SIM > SIM screen by
specifying the bitmask for any combination of radio
technology to be excluded from the default value. The
connection speed that has not been excluded will show up as
the highest connection speed.
Default roaming option Partners can set the default value for the Default roaming
options option in the Cellular & SIM settings screen.
Disable Cell Broadcast By default, Cell Broadcast (also known as Short Message
Service-Cell Broadcast (SMS-CB)) is a feature that is active at
all times.
Extended error messages for reject codes When a reject code is sent by the network, partners can
specify that extended error messages should be displayed
instead of the standard simple error messages. This
customization is intended for use only when required by the
mobile operator’s network.
Hide CDMA mode selection For CDMA phones, partners can hide CDMA option in the
network Mode selection drop-down that appears on the
Cellular & SIM screen in Settings.
Hide Cellular & SIM Settings OEMs can hide certain user options for phones that appear in
the Cellular & SIM screen in Settings. These options include:
Network Mode selection drop-down for World mode, Network
Selection drop-down for GSM, and Network Type drop-down
for CDMA.
TOPIC DESCRIPTION
LTE attach: GUID for user configured internet APN Partners can set the OEMConnectionId that is used when
creating the user-configured connection for internet from the
SIM settings screen.
LTE attach: Mapping OEMConnectionId values to modem Partners can set the list of OEMConnectionId values that map
profiles to an LTE attach profile in the mobile broadband driver.
Manual network selection timeout OEMs can change the default network selection timeout value.
By default, the OS allows the device to register on the
manually selected network for 60 seconds (or 1 minute)
before it switches back to automatic mode.
Maximum number of PDP contexts OEMs can set different maximum values for the number of
PDP contexts for the device if required by their mobile
operator.
Permanent automatic mode OEMs can enable permanent automatic mode for mobile
networks that require the cellular settings to revert to
automatic network selection after the user has manually
selected another network when roaming or out of range of
the home network.
Preferred data provider list For mobile operators that require it, OEMs can set a list of
MCC/MNC pairs for the purchase order (PO) carrier or
primary operator so that it can be set as the default data line
for phones that have a dual SIM.
Roaming filter Partners can add roaming filters that determine when the
device appears to be roaming, based on the network the
device is currently connected to. With roaming filters enabled,
connections on other companies’ specified networks are not
treated as roaming.
Related topics
Customizations for Wi-Fi settings and Connectivity
Prepare for Windows mobile development
Customization answer file overview
Background cellular data restriction
1/18/2019 • 2 minutes to read
To meet market or mobile operator requirements, OEMs can restrict background data in the data usage settings.
OEMs can set the default value to either never restrict usage of the data plan or restrict background data when
roaming.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="DataSaverMode"
Description="Use to restrict background data. OEMs can set the default value to
either never restrict usage
of the data plan or restrict background data when roaming."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="DataSense">
<Setting Name="DataSaverMode" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of DataSaverMode to one of the following:
VALUE DESCRIPTION
Testing steps:
1. Flash the build that contains this customization to a device.
2. Go to the Data usage settings screen.
Verify that the correct settings option is enabled depending on the default value that you set. A toggle to
restrict background data also becomes available to the user.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Cellular data connection icon
1/18/2019 • 2 minutes to read
The one-, two-, or three-character codes used to signify the data connection type in the status bar can be modified.
The default values are G (GPRS ), 1x (RTT), DO (EVDO ), E (EDGE ), 3G (3G ), H (HSDPA/HSUPA), LTE (LTE ), or no
letters displayed if there is no active connection.
Limitations and restrictions:
Partners cannot modify the types of data connections available; only the display code can be modified.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Shell/SystemTray/DataConnectionStrings">
<Setting Name="1XRTTDEFAULT" Value="1X" />
<Setting Name="1XRTT" Value="1X" />
<Setting Name="EVDODEFAULT" Value="DO" />
<Setting Name="EVDOREV0" Value="DO" />
<Setting Name="EVDOREVA" Value="DO" />
<Setting Name="EVDOREVB" Value="DO" />
<Setting Name="GSMDEFAULT" Value="G" />
<Setting Name="GSMGSM" Value="" />
<Setting Name="GSMGPRS" Value="G" />
<Setting Name="GSMEDGE" Value="E" />
<Setting Name="UMTSDEFAULT" Value="3G" />
<Setting Name="UMTSUMTS" Value="3G" />
<Setting Name="UMTSHSDPA" Value="H" />
<Setting Name="UMTSHSUPA" Value="H" />
<Setting Name="UMTSHSPAPLUS" Value="H+" />
<Setting Name="UMTSDCHSPAPLUS" Value="H+" />
<Setting Name="UMTSHSPAPLUS64QAM" Value="H+" />
<Setting Name="LTEDEFAULT" Value="LTE" />
<Setting Name="LTEFDD" Value="LTE" />
<Setting Name="LTETDD" Value="LTE" />
<Setting Name="TDSCDMADEFAULT" Value="T" />
<Setting Name="TDSCDMAUMTS" Value="T" />
<Setting Name="TDSCDMAHSDPA" Value="H" />
<Setting Name="TDSCDMAHSUPA" Value="H" />
<Setting Name="TDSCDMAHSPAPLUS" Value="H+" />
<Setting Name="TDSCDMADCHSPAPLUS" Value="H+" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To change the default one-, two-, or three-character codes used to signify the data connection type in the
status bar, modify the Value that corresponds to the setting you want to change.
NOTE
All the Value attributes are the current default values for each data connection type. You can change these to
something else. Maximum character length is 3 characters.
The following table shows the settings you can modify and their default values.
1XRTT 1X 1XRTT
UMTSUMTS 3G UMTS
UMTSHSPAPLUS64QAM By default, the value inherited from UMTS HSPA+ 64QAM (high order
UMTSDCHSPAPLUS. modulation)
TDSCDMAUMTS T TD-SCDMA
Testing:
1. Flash an image containing this customization to a phone that has a UICC.
2. Verify that the one-, two-, or three-character code(s) you used for the cellular data connection type is
displayed in the status bar at the top of the screen.
You may have to tap the clock to make the status bar appear if it is hidden.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Connection speed option
1/18/2019 • 5 minutes to read
Partners can customize the listed names of the connection speeds, and can hide the user option to select the
connection speed that is displayed on the SIM screen.
Partners can hide the user option to select the connection speed that is displayed on the SIM screen in Settings >
Cellular & SIM, if they do not want users to be able to deselect the highest possible speed.
Alternately, partners can customize the listed names of the connection speeds with their own character codes. The
default values are 2G, 3G, and 4G.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellUX">
<!-- Settings to hide some options or the entire Highest connection speed dropdown -->
<!-- Settings to hide some options or the entire Highest connection speed dropdown -->
<!-- To hide the 4G Only option from the Highest connection speed dropdown
<Setting Name="HideHighestSpeed4GOnly" Value="1" />
-->
<!-- To hide the 4G option from the Highest connection speed dropdown
<Setting Name="HideHighestSpeed4G" Value="1" />
-->
<!-- To hide the 3G Only option from the Highest connection speed dropdown
<Setting Name="HideHighestSpeed3GOnly" Value="1" />
-->
<!-- To hide the 2G option from the Highest connection speed dropdown
<Setting Name="HideHighestSpeed2G" Value="1" />
-->
<!-- To show the 3G Preferred option in the Highest connection speed dropdown
<Setting Name="ShowHideHighestSpeed3GPreferred" Value="1" />
-->
<!-- Settings to customize the default character codes for connection speed. For example, to change the
default '4G' character
code for ighestSpeed4G, change the value to another character code such as 'LTE'.
<Setting Name="HighestSpeed2G" Value="" />
<Setting Name="HighestSpeed3G" Value="" />
<Setting Name="HighestSpeed3GOnly" Value="" />
<Setting Name="HighestSpeed3GPreferred" Value="" />
<Setting Name="HighestSpeed4G" Value="" />
<Setting Name="HighestSpeed4GOnly" Value="" />
-->
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/CellUX">
<!-- Settings to hide some options or the entire Highest connection speed dropdown -->
<!-- To hide the 4G Only option from the Highest connection speed dropdown
<Setting Name="HideHighestSpeed4GOnly" Value="1" />
-->
<!-- To hide the 4G option from the Highest connection speed dropdown
<Setting Name="HideHighestSpeed4G" Value="1" />
-->
<!-- To hide the 3G Only option from the Highest connection speed dropdown
<Setting Name="HideHighestSpeed3GOnly" Value="1" />
-->
<!-- To hide the 2G option from the Highest connection speed dropdown
<Setting Name="HideHighestSpeed2G" Value="1" />
-->
<!-- To show the 3G Preferred option in the Highest connection speed dropdown
<Setting Name="ShowHideHighestSpeed3GPreferred" Value="1" />
-->
<!-- Settings to customize the default character codes for connection speed. For example, to change the
<!-- Settings to customize the default character codes for connection speed. For example, to change the
default '4G' character
code for ighestSpeed4G, change the value to another character code such as 'LTE'.
<Setting Name="HighestSpeed2G" Value="" />
<Setting Name="HighestSpeed3G" Value="" />
<Setting Name="HighestSpeed3GOnly" Value="" />
<Setting Name="HighestSpeed3GPreferred" Value="" />
<Setting Name="HighestSpeed4G" Value="" />
<Setting Name="HighestSpeed4GOnly" Value="" />
-->
</Settings>
</Static>
-->
</ImageCustomizations>
```
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. To hide some options or the entire Highest connection speed drop-down
To hide the "4G Only" option from the Highest connection speed drop-down in the Settings >
Cellular & SIM > SIM screen, set HideHighestSpeed4GOnly to 1 or 'Yes'.
To hide the "4G" option from the Highest connection speed drop-down in the Settings > Cellular
& SIM > SIM screen, set HideHighestSpeed4G to 1 or 'Yes'.
To hide the "3G Only" option from the Highest connection speed drop-down in the Settings >
Cellular & SIM > SIM screen, set HideHighestSpeed3GOnly to 1 or 'Yes'.
To hide the "2G" option from the Highest connection speed drop-down in the Settings > Cellular
& SIM > SIM screen, set HideHighestSpeed2G to 1 or 'Yes'.
To hide the Highest connection speed drop-down entirely, set HideHighestSpeed to 1 or 'Yes'.
5. To show the 3G Preferred option in the Highest connection speed drop-down
Set ShowHighestSpeed3GPreferred to 1 or 'Yes'.
6. To customize the character codes for connection speed
To modify the "2G" string to another character code, change the HighestSpeed2G``Value .
To modify the "3G" string to another character code, change the HighestSpeed3G``Value .
To modify the "3G Only" string to another character code, change the HighestSpeed3GOnly``Value .
To modify the "4G (3G Preferred)" string to another character code, change the
HighestSpeed3GPreferred``Value .
To modify the "4G" string to another character code, change the HighestSpeed4G``Value .
To modify the "4G Only" string to another character code, change the HighestSpeed4GOnly``Value .
For example, to change the default '4G' character code for HighestSpeed4G to another character code such
as 'LTE', set the Value to 'LTE'. Although there is no limit to number of characters you can use, if the
character code is too long, this will be truncated in the UI.
Note
You must include all three values (even if you are only modifying one) or the display text will not be set
correctly.
7. To customize the Highest connection speed drop-down label
Set the HighestSpeedTitle``Value to the string that you want to use.
For example, to change 'Highest connection speed' to another string such as 'Preferred connection
speed', set the Value to 'Preferred connection speed'.
Testing:
1. Flash the build containing this customization to a device.
2. Go to the Settings > Cellular & SIM > SIM screen.
3. If you hid the Highest connection speed drop-down or one or more options within the drop-down, verify
that the behavior matches your setting.
4. If you customized the dropdown label, or the one- or two-character codes for connection speed for one or
more options within the connection speed drop-down, verify that the string matches what you specified.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Custom percentages for signal strength bars
1/18/2019 • 3 minutes to read
Partners must modify the percentage values used for the signal strength bars in the status bar. These five bars
represent the strength of the cellular connection and are determined by a mapping table defined for the network. It
is considered a manufacturing defect if a device ships with incomplete or incorrect mapping tables.
Partners must also tune the thresholds for measuring the signal strength received from the modem. Filters
determine the magnitude of change in signal strength that triggers a report. Filter values are specific to the mobile
operator network. The following filters must be configured:
GSM
UMTS RSSI
UMTS Ec/No
CDMA 1X Receive Channel Power
CDMA 1X Pilot Energy
CDMA EVDO Carrier Strength
CDMA EVDO SINR
LTE reference signal received power (RSRP )
LTE reference signal signal-to-noise ratio (RS_SNR )
Note Windows 10 Mobile always shows the signal strength for the highest technology. For example:
If 1X and EVDO register at the same time, the device shows the EVDO signal strength in the status bar.
If 1X and LTE register at the same time, the device shows the LTE signal strength in the status bar.
In these examples, if the 1X signal strength changes and there is a higher radio access technology, the device will
not do anything.
Constraints: None
This customization supports: per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Cellcore/PerDevice/External">
<!-- Use to modify the percentage value for GSM. The numbers represent the signal strength bars. -
->
<Setting Name="SignalBarMappingTable/GERAN/5" Value="" />
<Setting Name="SignalBarMappingTable/GERAN/4" Value="" />
<Setting Name="SignalBarMappingTable/GERAN/4" Value="" />
<Setting Name="SignalBarMappingTable/GERAN/3" Value="" />
<Setting Name="SignalBarMappingTable/GERAN/2" Value="" />
<Setting Name="SignalBarMappingTable/GERAN/1" Value="" />
<!-- Use to modify the percentage value for UMTS RSSI. The numbers represent the signal strength
bars. -->
<Setting Name="SignalBarMappingTable/UMTS/5" Value="" />
<Setting Name="SignalBarMappingTable/UMTS/4" Value="" />
<Setting Name="SignalBarMappingTable/UMTS/3" Value="" />
<Setting Name="SignalBarMappingTable/UMTS/2" Value="" />
<Setting Name="SignalBarMappingTable/UMTS/1" Value="" />
<!-- Use to modify the percentage value for UMTS Ec/No. The numbers represent the signal strength
bars. -->
<Setting Name="SignalBarMappingTable/UMTSEcNo/5" Value="" />
<Setting Name="SignalBarMappingTable/UMTSEcNo/4" Value="" />
<Setting Name="SignalBarMappingTable/UMTSEcNo/3" Value="" />
<Setting Name="SignalBarMappingTable/UMTSEcNo/2" Value="" />
<Setting Name="SignalBarMappingTable/UMTSEcNo/1" Value="" />
<!-- Use to modify the percentage value for CDMA 1X Receive Channel Power. The numbers represent
the signal strength bars. -->
<Setting Name="SignalBarMappingTable/CDMA1xRCP/5" Value="" />
<Setting Name="SignalBarMappingTable/CDMA1xRCP/4" Value="" />
<Setting Name="SignalBarMappingTable/CDMA1xRCP/3" Value="" />
<Setting Name="SignalBarMappingTable/CDMA1xRCP/2" Value="" />
<Setting Name="SignalBarMappingTable/CDMA1xRCP/1" Value="" />
<!-- Use to modify the percentage value for CDMA 1X Pilot Energy. The numbers represent the signal
strength bars. -->
<Setting Name="SignalBarMappingTable/CDMA1xPE/5" Value="" />
<Setting Name="SignalBarMappingTable/CDMA1xPE/4" Value="" />
<Setting Name="SignalBarMappingTable/CDMA1xPE/3" Value="" />
<Setting Name="SignalBarMappingTable/CDMA1xPE/2" Value="" />
<Setting Name="SignalBarMappingTable/CDMA1xPE/1" Value="" />
<!-- Use to modify the percentage value for CDMA EVDO Carrier Strength. The numbers represent the
signal strength bars. -->
<Setting Name="SignalBarMappingTable/CDMAEvdoCS/5" Value="" />
<Setting Name="SignalBarMappingTable/CDMAEvdoCS/4" Value="" />
<Setting Name="SignalBarMappingTable/CDMAEvdoCS/3" Value="" />
<Setting Name="SignalBarMappingTable/CDMAEvdoCS/2" Value="" />
<Setting Name="SignalBarMappingTable/CDMAEvdoCS/1" Value="" />
<!-- Use to modify the percentage value for CDMA EVDO SINR. The numbers represent the signal
strength bars. -->
<Setting Name="SignalBarMappingTable/CDMAEvdoSinr/5" Value="" />
<Setting Name="SignalBarMappingTable/CDMAEvdoSinr/4" Value="" />
<Setting Name="SignalBarMappingTable/CDMAEvdoSinr/3" Value="" />
<Setting Name="SignalBarMappingTable/CDMAEvdoSinr/2" Value="" />
<Setting Name="SignalBarMappingTable/CDMAEvdoSinr/1" Value="" />
<!-- Use to modify the percentage value for LTE reference signal received power. The numbers
represent the signal strength bars. -->
<Setting Name="SignalBarMappingTable/LTESRSRP/5" Value="" />
<Setting Name="SignalBarMappingTable/LTESRSRP/4" Value="" />
<Setting Name="SignalBarMappingTable/LTESRSRP/3" Value="" />
<Setting Name="SignalBarMappingTable/LTESRSRP/2" Value="" />
<Setting Name="SignalBarMappingTable/LTESRSRP/1" Value="" />
<!-- Use to modify the percentage value for LTE reference signal signal-to-noise radio. The
numbers represent the signal strength bars. -->
<Setting Name="SignalBarMappingTable/LTERSSNR/5" Value="" />
<Setting Name="SignalBarMappingTable/LTERSSNR/4" Value="" />
<Setting Name="SignalBarMappingTable/LTERSSNR/3" Value="" />
<Setting Name="SignalBarMappingTable/LTERSSNR/2" Value="" />
<Setting Name="SignalBarMappingTable/LTERSSNR/1" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Value for the filters that you want to configure. You can use either a decimal or hexadecimal value,
but you must add the 0x prefix when specifying a hexadecimal value.
Note The signal strength mapping is implemented by the modem vendor. For information about how to
change the required values under the SignalBarMappingTable setting, see the documentation provided
by the modem vendor.
Testing:
Refer to the documentation provided by the modem vendor and work with your mobile operator to test this
customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Data transfer indicator
1/18/2019 • 2 minutes to read
OEMs can display a data transfer indicator on a device’s status bar for mobile operators that require it. When this
feature is enabled, an arrow is displayed above the cellular data connection icon or Wi-Fi connection icon to
indicate that data transfer is occurring.
The data transfer indicator, the cellular data connection icon, and the cellular signal strength icon are promoted on
the status bar for 10 seconds and does not appear more frequently than once every 5 minutes. The data transfer
indicator and the Wi-Fi connection icon are not promoted on the status bar.
However, users can tap the status bar to view the data transfer indicator above the bearer that’s transmitting data.
The data transfer indicator, the cellular data connection icon, and the cellular signal strength icon are displayed for
10 seconds if cellular data transfer is occurring. The data transfer indicator and the Wi-Fi connection icon are
displayed for 2 seconds if Wi-Fi data transfer is occurring.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Shell/SystemTray/DataActivity">
<Setting Name="DataActivityIcon" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set DataActivityIcon to one of the following values:
VALUE DESCRIPTION
Testing:
1. Flash an image that contains this customization to a device.
2. Turn off Wi-Fi and send data over your cellular connection. For example, send an email with a photo
attachment. Verify that the arrow that indicates data transfer appears above the cellular data connection icon
on the status bar.
3. Turn on Wi-Fi and send data over your Wi-Fi connection. Verify that the arrow that indicates data transfer
appears above the Wi-Fi connection icon on the status bar.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Default highest connection speed
1/18/2019 • 2 minutes to read
Partners can set the default value for the Highest connection speed option in the Settings > Cellular & SIM >
SIM screen by specifying the bitmask for any combination of radio technology to be excluded from the default
value. The connection speed that has not been excluded will show up as the highest connection speed.
Users can later change the highest connection speed setting on the device.
Note On dual SIM devices that only support up to 3G connection speeds, the Highest connection speed
option is replaced by a 3G on/off toggle based on the per-device setting. On means that 3G is preferred and Off
means 2G only.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="DefaultHighestConnectionSpeed"
Description="Use to set the default value for the highest connection speed in the
cellular Settings CPL."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/General">
<Setting Name="ExcludedSystemTypesByDefault" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/General">
<Setting Name="ExcludedSystemTypesByDefault" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Specify the ExcludedSystemTypesByDefault``Value to set a default value for the Highest connection speed
option in the Settings > Cellular screen.
a. Refer to [RILSYSTEMTYPE ] and note the values for the corresponding radio technology that you
want to exclude.
For example, on an LTE network the default setting for the highest connection speed is 4G. The other
available options that show up also include 3G and 2G. However, if you want to change the default to
2G, you will need to exclude RIL_SYSTEMTYPE_LTE (4G ) and RIL_SYSTEMTYPE_UMTS (3G ) to set
the default to 2G. To do this, note the values for RIL_SYSTEMTYPE_LTE (4G ) and
RIL_SYSTEMTYPE_UMTS (3G ) in hexadecimal and convert these to binary.
HEXADECIMAL BINARY
Related topics
Prepare for Windows mobile development
Customization answer file overview
Default roaming option
1/18/2019 • 2 minutes to read
Partners can set the default value for the Default roaming options option in the Cellular & SIM settings screen.
Users can later change the default roaming option on the device.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Connections/General">
<Setting Name="DataRoam" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of DataRoam to one of the following:
VALUE OPTION
Testing:
1. Flash the build containing this customization to a device.
2. Go to the Settings > Cellular & SIM screen.
3. Verify that the Default roaming options shows the correct default value that you set.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Disable Cell Broadcast
1/18/2019 • 2 minutes to read
By default, Cell Broadcast (also known as Short Message Service-Cell Broadcast (SMS -CB )) is a feature that is
active at all times. Some mobile operators may require OEMs to disable this feature if it is not available for certain
areas or zones, or if operators want to get better battery performance by not activating radio functions that may
not be needed for a certain market.
To comply with these operator requirements, OEMs may disable Cell Broadcast through an NV item setting in the
modem rather than in the OS.
Note NV items are owned by the IHV and not Microsoft. OEMs should consult with their IHV to determine how
to disable Cell Broadcast through an NV item.
Extended error messages for reject codes
1/18/2019 • 2 minutes to read
When a reject code is sent by the network, partners can specify that extended error messages should be displayed
instead of the standard simple error messages. This customization is intended for use only when required by the
mobile operator’s network.
The short versions of the extended reject message are shown in the following screens:
Phone tile in Start
Call History screen
Dialer
Call Progress screen
Incoming Call screen
As the status string under Settings > Cellular & SIM
The long version of the extended reject message is shown in the following screen:
Under the Active Network label in Settings > Cellular & SIM
The OS handles three extended reject codes:
2 (The SIM card hasn’t been SIM not set up MM#2 Invalid SIM
activated or has been deactivated)
3 (The SIM card fails authentication Can’t verify SIM MM#3 Invalid SIM
or one of the identity check
procedures. This can also happen
due to a duplication of the TMSI
across different MSCs)
6 (The device has been put on a Phone not allowed MM#6 No Service
block list, such as when the device
has been stolen or the IMEI is
restricted)
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="ExtendedRejectCodes"
Description="Use to specify that extended error messages should be displayed
instead of standard simple messages."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellUX">
<Setting Name="ShowExtendedRejectCodes" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/CellUX">
<Setting Name="ShowExtendedRejectCodes" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
```
2. Specify an Owner .
3. Set the Branding flags setting in the Branding for phone calls customization so that the
ExtendedRejectCodes flag is enabled.
Note
The ExtendedRejectCodes flag is not enabled by default so make sure that this is set. Both the
ShowExtendedRejectCodes setting and ExtendedRejectCodes flag need to be set for the customization to be
fully enabled.
4. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the value for ShowExtendedRejectCodes to one of the following:
VALUE DESCRIPTION
The default for this setting is to show the **CDMA** option in the **Mode** selection drop-down that appears
in the **Cellular & SIM** settings screen.
Testing steps:
1. Flash a build containing this customization to a device.
2. Verify that extended error messages shown on the device when a reject code is sent by the network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Hide CDMA mode selection
1/18/2019 • 2 minutes to read
For CDMA phones, partners can hide CDMA option in the network Mode selection drop-down that appears on
the Cellular & SIM screen in Settings.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellUX">
<!-- Hides or shows the 'CDMA' option in the network mode selection screen. Set to 0 or 'No' (to show)
or set to 1 or 'Yes' (to hide). -->
<Setting Name="Hide3GPP2ModeSelection" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/CellUX">
<!-- Hides or shows the 'CDMA' option in the network mode selection screen. Set to 0 or 'No' (to show)
or set to 1 or 'Yes' (to hide). -->
<Setting Name="Hide3GPP2ModeSelection" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
```
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set the value for Hide3GPP2ModeSelection to one of the following:
VALUE DESCRIPTION
The default for this setting is to show the **CDMA** option in the **Mode** selection drop-down that appears
in the **Cellular & SIM** settings screen.
Testing:
1. Flash the build containing this customization to a device.
2. Go to the Cellular & SIM screen in Settings.
3. Depending on the value that you set, verify whether the CDMA option in the network Mode selection
drop-down is visible.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Hide Cellular & SIM Settings
1/18/2019 • 3 minutes to read
OEMs can hide certain user options for phones that appear in the Cellular & SIM screen in Settings.
These options include:
For World mode: Network Mode selection drop-down
For GSM: Network Selection drop-down
For CDMA: Network Type drop-down
Constraints: None This customization supports: per-IMSI value, per-device value
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
<!-- Hides or shows the 'Network Selection' drop-down in the SIM settings screen for 3GPP or GSM
phones.
Set to 0 or 'No' (to show) or set to 1 or 'Yes' (to hide). -->
<Setting Name="Hide3GPPNetworks" Value="" />
<!-- Hides or shows the 'Network Type' drop-down in the SIM settings screen for 3GPP2 or CDMA
phones.
Set to 0 or 'No' (to show) or set to 1 or 'Yes' (to hide). -->
<Setting Name="Hide3GPP2Selection" Value="" />
</Settings>
</Variant>
<!-- Hides or shows the 'Network Type' drop-down in the SIM settings screen for 3GPP2 or CDMA
phones.
Set to 0 or 'No' (to show) or set to 1 or 'Yes' (to hide). -->
<Setting Name="Hide3GPP2Selection" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC,
and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. For World mode phones: Set the value for HideModeSelection to one of the following:
VALUE DESCRIPTION
5. For 3GPP or GSM phones: Set the value for Hide3GPPNetworks to one of the following:
VALUE DESCRIPTION
6. For 3GPP2 or CDMA phones: Set the value for Hide3GPP2Selection to one of the following:
VALUE DESCRIPTION
Testing
1. Flash the build containing this customization to a phone.
2. Go to the Cellular & SIM screen in Settings.
3. Verify that the user options are visible only if appropriate.
Related topics
Prepare for Windows mobile development
Customization answer file overview
LTE attach: GUID for user configured internet APN
1/18/2019 • 2 minutes to read
Partners can set the OEMConnectionId that is used when creating the user-configured connection for internet
from the SIM settings screen.
The value is a GUID in the string format “XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”. It is used as the value
for the OEMConnectionId field of the connection and it identifies the modem profile used for the LTE Attach. If this
value is not set, the APN configuration entered by the user does not affect the LTE Attach GUID used by the device.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="LTEAttachUserConfigGUID"
Description="Use to set the OEMConnectionId used for the LTE attach profile in the
modem."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellUX">
<Setting Name="LTEAttachGUID" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/CellUX">
<Setting Name="LTEAttachGUID" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set the value for LTEAttachGuid to the OemConnectionId GUID used for the LTE attach profile in the
modem. The value is a GUID in the string format “XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”.
Testing:
Refer to the documentation provided by the modem vendor and work with your mobile operator to test this
customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
LTE attach: Mapping OEMConnectionId values to
modem profiles
1/18/2019 • 2 minutes to read
Partners can set the list of OEMConnectionId values that map to a LTE attach profile in the MBB driver. This list is
used to specify which OEMConnectionIds require a detach/attach in order for changes to apply. If an
OEMConnectionId is not included in this list and the LTE attach info is updated, it will not take effect until the
device is rebooted.
Constraints: ImageTimeOnly
This customization supports: per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="CellCore/PerDevice/CellData/ModemProfiles">
<Setting Name="LTEAttachGuids" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of LTEAttachGuids to the semicolon-separated list of OEMConnectionId values that map to a
LTE attach profile on the MBB driver. OEMConnectionIds are GUIDs in the string format “XXXXXXXX-
XXXX-XXXX-XXXX-XXXXXXXXXXXX”.
Testing:
Refer to the documentation provided by the modem vendor and work with your mobile operator to test this
customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Manual network selection timeout
1/18/2019 • 2 minutes to read
OEMs can change the default network selection timeout value. By default, the OS allows the device to register on
the manually selected network for 60 seconds (or 1 minute) before it switches back to automatic mode.
Constraints: None
This customization supports: per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="CellCore/PerDevice/General">
<Setting Name="ManualNetworkSelectionTimeout" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Set the ManualNetworkSelectionTimeout``Value to a desired timeout value. The range of the value can be
from 1-420 seconds. For example, to change the value to 120 seconds (or 2 minutes), you must set the
value to 0x78.
This value is the amount of time that the OS will wait for the modem to register on the manually selected
network. If the time lapses and the modem was not able to register on the network that was manually
selected by the user, the OS will either:
Switch back to the automatic network selection mode if Permanent automatic mode is enabled and
after the user has manually selected a network or the modem was turned on.
Display a dialog that notifies the user that the device was unable to connect to the manually selected
network after the device was turned on or after airplane mode was turned off.
Testing steps:
Important To fully test this customization, you must work with your mobile operator partner to perform Steps 2
and 3 in the following procedure.
1. Flash the build that contains this customization to a device that has a UICC.
2. Ensure that the device is out of range from the home network.
3. Set the device to the manual network mode by selecting manual mode under Network selection in the
Settings > Cellular & SIM screen.
4. While the device attempts to connect to the manually selected network, verify that the OS waits for the
amount of time that you specified for ManualNetworkSelectionTimeout before it switches back to the
automatic network selection mode, or displays a message that indicates that the device was unable to
connect to the manually selected network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Maximum number of PDP contexts
1/18/2019 • 2 minutes to read
OEMs can set different maximum values for the number of PDP contexts for the device for 3GPP network if
required by their mobile operator.
By default, the OS enforces a maximum of four (4) simultaneous packet data protocol (PDP ) contexts for 3GPP
connections, and one (1) PDP context for 3GPP2 connections.
The same maximums apply for both roaming and non-roaming scenarios. This maximum does not include packet
contexts used internally by the modem.
Constraints:
1. The setting MaxNumberOfPDPContexts is applicable for 3GPP networks only. It does not apply to 3GPP2 network.
2. This customization supports: per-IMSI value, per-device value.
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="MaxNumberOfPDPContexts"
Description="Use to set the maximum number of concurrent packet contexts for the
home carrier's 3GPP network"
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellData">
<Setting Name="MaxNumberOfPDPContexts" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/CellData">
<Setting Name="MaxNumberOfPDPContexts" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
```
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set the value for MaxNumberOfPDPContexts as required by the mobile operator. You can specify a value
between 1 through 4 (inclusive), or 0x1 through 0x4 (hexadecimal).
Testing:
Work with your mobile operator partner to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Permanent automatic mode
1/18/2019 • 2 minutes to read
OEMs can enable permanent automatic mode for mobile networks that require the cellular settings to revert to
automatic network selection after the user has manually selected another network when roaming or out of range
of the home network.
Constraints: None This customization supports: per-IMSI value, per-device value
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/General">
<Setting Name="AvoidStayingInManualSelection" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC,
and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set the AvoidStayingInManualSelection``Value to either of the following:
VALUE DESCRIPTION
Testing
1. Flash the build containing this customization to a device that has a UICC.
NOTE
To fully test this customization, work with your mobile operator partner. The device needs to be out of range of the
home network so that the user can select manual mode under Network selection in the Settings > Cellular &
SIM screen.
2. When the device is no longer roaming or is in range of the home network, verify that the Network
selection mode changed to automatic without requiring user action.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Preferred data provider list
1/18/2019 • 2 minutes to read
For mobile operators that require it, OEMs can set a list of MCC/MNC pairs for the purchase order (PO ) carrier or
primary operator so that it can be set as the default data line for phones that have a dual SIM.
When the PO SIM is inserted into the phone, the OS picks the PO SIM as the data line and shows a notification to
the user that the SIM has been selected for internet data. If two PO SIMs are inserted, the OS will choose the first
PO SIM that was detected as the default data line and the mobile operator action required dialogue (ARD ) is
shown. If two non-PO SIMs are inserted, the user is prompted to choose the SIM to use as the default data line.
Note OEMs should not set this customization unless required by the mobile operator.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="PreferredDataProviderList"
Description="Use to specify the list of preferred mobile operators' MCC and MNC
information to use for data connections."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="CellCore/PerDevice/General">
<Setting Name="PreferredDataProviderList" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To enumerate the MCC/MNC value pairs to use for data connections, set the value for
PreferredDataProviderList . The value must be a comma-separated list of preferred MCC:MNC values. For
example, the value can be 301:026,310:030 and so on.
Testing:
1. Work with your mobile operator to obtain the list of preferred MCC and MNC values for data connections.
2. Flash the build containing this customization to a dual SIM phone.
3. Insert the PO SIM into the phone. Verify that the OS picks the PO SIM as the default data line and shows a
notification that the SIM has been selected for Internet data.
4. Insert two PO SIMs. Verify that the OS chooses the first PO SIM that was detected as the default data line
and the mobile operator action required dialogue (ARD ) is shown.
5. Insert two non-PO SIMs. Verify that you can see a prompt to choose the SIM to use as the default data line.
6. Verify that you can change the default SIM by going to the Cellular+SIM settings screen and selecting a
different SIM to use as the default data line.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Remove cellular functionality from the device
1/18/2019 • 2 minutes to read
If your mobile device does not support a cellular radio or will not be connected to a cellular network, you can
remove all cellular-related functionality from the device's user interface by adding the WIFI_FEATURE_PACK
feature entry in your OEMInput.xml file. This feature replaces the WEH_WIFIONLY feature that you previously
used in earlier versions of the mobile OS.
The WIFI_FEATURE_PACK package reduces memory usage and improves the user experience by removing the
non-functioning cellular-related tiles, icons, and settings. Wi-Fi features will continue to work and airplane mode
will also work.
Instructions:
To create an update package for an existing mobile device using Windows 10 Mobile
1. Update your OS image using Windows 10 Mobile as your new base image.
2. Remove the WEH_WIFIONLY Microsoft Update package if you are upgrading from Windows Embedded
Handheld 8.1.
3. Add the WIFI_FEATURE_PACK as a BSP update.
4. Test, sign, and submit the update.
To create a new Windows 10 Mobile image without cellular functionality
1. Locate the OEMInput.xml file that you are using to define your image.
2. Find the Features section, and within the Microsoft child element, review the Feature elements.
3. Add a <Feature>WIFI_FEATURE_PACK</Feature> entry in your OEMInput.xml file.
<Features>
<Microsoft>
<Feature>WIFI_FEATURE_PACK</Feature>
</Microsoft>
</Features>
For more information about other features you can include in your image, see Optional features for building
images.
4. Save the updated OEMInput.xml file and build your mobile OS image.
5. Verify that the new image doesn't contain cellular-related tiles, icons, and settings. Also verify that Wi-Fi
features work and airplane mode functions correctly.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Roaming filter
1/18/2019 • 5 minutes to read
Partners can add roaming filters that determine when the device appears to be roaming, based on the network the
device is currently connected to. With roaming filters enabled, connections on other companies’ specified networks
are not treated as roaming.
Constraints: Atomic
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<!-- Define for 3GPP. All these settings must be configured at the same time. -->
<Settings Path="CellCore/PerIMSI/$(__IMSI)/General/atomicRoamingTableSettings3GPP">
<Setting Name="RoamingTables/3GPPRoamingTables/Enabled" Value="" />
<!-- Define for 3GPP2. All these settings must be configured at the same time. -->
<Settings Path="CellCore/PerIMSI/$(__IMSI)/General/atomicRoamingTableSettings3GPP2">
<Setting Name="RoamingTables/3GPP2RoamingTables/Enabled" Value="" />
</Variant>
-->
<Static>
<!-- Define for 3GPP. All these settings must be configured at the same time. -->
<Settings Path="Cellcore/PerDevice/General/atomicRoamingTableSettings3GPP">
<Setting Name="RoamingTables/3GPPRoamingTables/Enabled" Value="" />
<!-- Define for 3GPP2. All these settings must be configured at the same time. -->
<Settings Path="Cellcore/PerDevice/General/atomicRoamingTableSettings3GPP2">
<Setting Name="RoamingTables/3GPP2RoamingTables/Enabled" Value="" />
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Use the correct settings for 3GPP or 3GPP2. You must work with your mobile operator to obtain the correct
values specific to the mobile operator.
The settings group is atomic so you must configure all the settings at the same time to correctly configure
roaming filters.
IMPORTANT
When specifying the $(SerialNumber) , make sure that the order is absolutely sequential within the different lists.
For example: 000, 001, 002.., or 001, 002, 003…, and so on.
3GPP
a. To enable the 3GPP filter, set RoamingTables/3GPPRoamingTables/Enabled to 1 or Yes. Setting the value
to 0 or No disables the 3GPP filter.
b. The RoamingTables/3GPPRoamingTables/TargetImsi/$(SerialNumber) setting defines all the possible
Mobile Country Code (MCC )-Mobile Network Code (MNC ) pairs that can be included in the IMSI
encoded on the mobile operator’s SIM cards. If the MCC -MNC value on the SIM in the device does
not match one of these pairs, the SIM is recognized as belonging to another mobile operator, and the
roaming filter is not enabled. The values in this registry key are specific to the mobile operator.
Replace $ (SerialNumber ) to correspond to the 3-digit serial number, from 000 through 999,
represented as a string. For each serial number that you defined, set the value to a string
representing the MCC,MNC, such as 410,510 to represent an MCC of 410 and MNC of 510, for
example.
Add as many RoamingTables/3GPPRoamingTables/TargetImsi/$(SerialNumber) settings and values as you
need.
c. The RoamingTables/3GPPRoamingTables/Exceptions/$(SerialNumber) setting defines the MCC -MNC
values for networks on which the device is roaming within the group of home codes that you define.
Replace $ (SerialNumber ) to correspond to the 3-digit serial number, from 000 through 999,
represented as a string. For each serial number that you defined, set the value to a string
representing the MCC,MNC, such as 410,510 to represent an MCC of 410 and MNC of 510, for
example.
Add as many RoamingTables/3GPPRoamingTables/Exceptions/$(SerialNumber) settings and values as you
need.
As with the rest of these settings, the exact MNC and MCC values are mobile operator-specific.
d. The RoamingTables/3GPPRoamingTables/HomePLMN/$(SerialNumber) setting defines the network codes
where the device is not deemed roaming. These settings can include just an MCC, or they can consist
of a MCC -MNC pair. These settings are specific to the mobile operator.
Replace $ (SerialNumber ) to correspond to the 3-digit serial number, from 000 through 999,
represented as a string. For each serial number that you defined, set the value to a string
representing the MCC,MNC, such as 410,510 to represent an MCC of 410 and MNC of 510, for
example. Alternatively, you can also set the Value to a string that represents just the MCC, such as
460 for MCC of 460 and all networks of that country.
Add as many RoamingTables/3GPPRoamingTables/HomePLMN/$(SerialNumber) settings and values as you
need.
3GPP2
a. To enable the 3GPP2 filter, set RoamingTables/3GPP2RoamingTables/Enabled to 1 or Yes. Setting the
value to 0 or No disables the 3GPP2 filter.
b. The RoamingTables/3GPP2RoamingTables/Home/$(SerialNumber) setting defines the network codes where
the device is not deemed roaming. These settings are specific to the mobile operator.
Replace $ (SerialNumber ) to correspond to the 3-digit serial number, from 000 through 999,
represented as a string. For each serial number that you defined, set the value to a DWORD
representing the non-roaming indicator.
Add as many RoamingTables/3GPP2RoamingTables/Home/$(SerialNumber) settings and values as you need
until you have every valid code added.
c. The RoamingTables/3GPP2RoamingTables/Roaming/$(SerialNumber) setting defines the values for
networks on which the device is deemed roaming.
Replace $ (SerialNumber ) to correspond to the 3-digit serial number, from 000 through 999,
represented as a string. For each serial number that you defined, set the value to a DWORD
representing the roaming indicator.
Add as many RoamingTables/3GPP2RoamingTables/Roaming/$(SerialNumber) settings and values as you
need until you have every valid code added.
Testing steps:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for Wi-Fi settings and connectivity
1/18/2019 • 2 minutes to read
Describes the customizations that you can configure for Wi-Fi settings and Wi-Fi connectivity on the mobile
device.
In this section
TOPIC DESCRIPTION
Authentication for Wi-Fi hotspot settings Set a list of captive portal SSIDs for which the browser should
not be launched automatically for Wi-Fi authentication.
Cellular data fallback when in limited Wi-Fi connectivity OEMs can change the default behavior for the device when
Wi-Fi connectivity becomes limited.
Connecting to open Wi-Fi hotspots in Windows 10 Partners can change the default settings for detecting and
auto-connecting to Wi-Fi hotspots.
Enable static IP To facilitate Wi-Fi certification tests, OEMs can enable a screen
from the Wi-Fi settings screen that provides UI elements that
allow you to specify a static IP address, gateway address, and
DNS server address.
Limited connectivity status By default, when the device is connected to a Wi-Fi access
point (AP), it does not show a No Internet access status
message below the AP name. Partners may choose to override
this default behavior and show the status message when a
device is connected to a Wi-Fi access point.
Wi-Fi always on, always connected Partners can modify AOAC behavior and UX for non-AOAC
mode devices.
Wi-Fi calling errors OEMs can customize the mobile device to configure settings
related to Wi-Fi calling errors.
Wi-Fi calling operator name OEMs can customize the display name for the mobile operator
when the device is using Wi-Fi calling.
Wi-Fi icon and notifications Partners can configure settings related to the Wi-Fi icon.
Related topics
Customizations for Cellular connectivity
Prepare for Windows mobile development
Customization answer file overview
Authentication for Wi-Fi hotspot settings
1/18/2019 • 2 minutes to read
When mobile devices connect to a Wi-Fi hotspot that uses a captive portal, the web browser is automatically
opened so that the user can sign in. Until this authentication process is completed, the Wi-Fi hotspot connection is
not available for applications and services running on the device. As a result, applications provided by mobile
operators or third party vendors to authenticate the Wi-Fi hotspot settings will not work.
To suppress the launch of the browser and enable this type of application to run as expected, OEMs must register
the SSID of one or more networks. These networks will be available immediately when the connection is
established.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="HijackedIgnoreList"
Description="Use specify a list of captive portal SSIDs for which browser should
not be launched automatically."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="WiFi/Config">
<Setting Name="HijackedIgnoreList" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the HijackedIgnoreList value to the set list of captive portal SSIDs for which the browser should not be
launched automatically. For example, ContosoWiFi;FabrikamWiFi;ContosoFabrikamWiFi and so on.
Testing steps:
1. Flash the build containing this customization to a device.
2. Connect to a Wi-Fi network that uses one of the registered SSIDs.
3. Verify the browser does not launch and the network is available immediately.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Cellular data fallback when in limited Wi-Fi
connectivity
1/18/2019 • 2 minutes to read
OEMs can change the default behavior for the device when Wi-Fi connectivity becomes limited.
By default, if the device is connected to a Wi-Fi network and the data connection to a site is unsuccessful due to
limited Wi-Fi connectivity, the device will complete the connection to the site using available cellular data networks
(when possible) to provide an optimal user experience.
OEMs can change this default behavior so that the device does not use cellular data when Wi-Fi connectivity
becomes limited. When the customization is enabled, a user option to use or not use cellular data for limited Wi-Fi
connectivity becomes visible in the Cellular & SIM settings screen. This option is automatically set to don’t use
cellular data when the customization is enabled.
Note Changing the default behavior may negatively impact the user experience.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Cellcore/PerDevice/CellData">
<Setting Name="CellularFailOver" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of CellularFailover to one of the following:
VALUE DESCRIPTION
0 or 'Failover is not allowed' Disables cellular data fallback when in limited Wi-Fi
connectivity. This also sets the For limited Wi-Fi
connectivity option in the Cellular & SIM settings
screen to don’t use cellular data.
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device with a UICC.
2. If you set CellularFailover to 0 or 'Failover is not allowed', navigate to the Cellular & SIM settings screen
and verify that the don’t use cellular data option is chosen as the default under For limited Wi-Fi
connectivity.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Change Wi-Fi to WLAN
1/18/2019 • 2 minutes to read
To meet regulatory requirements and/or meet mobile operator requirements for some markets, partners can
replace the string Wi-Fi with the generic term WLAN. Enabling this customization changes all Wi-Fi strings to
WLAN.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="WiFi/FirstBoot">
<Setting Name="WiFiToWLAN" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of WiFiToWLAN to one of the following:
VALUE DESCRIPTION
Testing steps:
1. Flash a build containing this customization to a phone.
2. Go to the Settings screen and verify that WLAN now shows up instead of Wi-Fi.
3. Tap WLAN, and verify that “Wi-Fi” does not appear in the WLAN setting screen.
All other “Wi-Fi” strings on the phone should now show “WLAN”.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Wi-Fi hotspots
1/18/2019 • 2 minutes to read
Partners can change the default settings for detecting Wi-Fi hotspots.
Windows 10 automatically connects users to Wi-Fi so they can get online quickly in more places. It can connect
them to open Wi-Fi hotspots that it knows about through crowdsourcing.
How it works
Users choose the settings for automatically connecting to suggested open hotspots by going to Settings >
Network & Internet > Wi-Fi on a Windows 10 PC or a phone with Windows 10 Mobile in Settings > Network &
wireless > Wi-Fi > Additional settings. To use this feature, customers will need to be signed in with their Microsoft
account on your Windows 10 PC or mobile device. (Note that this feature isn't available in all countries or regions.)
Windows 10 learns about open Wi-Fi hotspots a Windows PC or Windows phone connects to by collecting
information about the network, like whether the open Wi-Fi network has a high-quality Internet connection. By
using that information from your device and from other Windows customers' devices, we build a database of these
high-quality networks. When you’re in range of one of these Wi-Fi hotspots, you automatically get connected to it.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="WiFi/FirstBoot">
<Setting Name="AutoConnectAllowed" Value="" />
<Setting Name="DefaultAutoConnectState" Value="" />
<Setting Name="DefaultWiFiSharingState" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of AutoConnectAllowed to one of the following values:
VALUE DESCRIPTION
VALUE DESCRIPTION
VALUE DESCRIPTION
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enable static IP
1/18/2019 • 2 minutes to read
To facilitate Wi-Fi certification tests, OEMs can enable a screen from the Wi-Fi settings screen that provides UI
elements that allow you to specify a static IP address, gateway address, and DNS server address.
To enable the Static IP UI, set the value of the EnableStaticIP setting to 1. If the setting is not set, or is set to any
value other than 1, the static IP UI is not enabled. When enabled, the Wi-Fi Static IP UI button appears directly
below the Advanced button in the Wi-Fi settings screen.
Warning The static IP UI must only be used for certification purposes and not for production or retail devices.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="WiFi/Config">
<Setting Name="EnableStaticIP" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of EnableStaticIP to one of the following:
VALUE DESCRIPTION
Testing steps:
1. Flash a build containing this customization to a device.
2. Go to the Settings > Wi-Fi screen and connect to a Wi-Fi network.
3. From the Wi-Fi settings screen, verify that you can see the Static IP setting.
4. Tap Static IP and configure your IP settings.
5. Reboot the device.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Limited connectivity status
1/18/2019 • 2 minutes to read
By default, when the device is connected to a Wi-Fi access point (AP ), it does not show a No Internet access
status message below the AP name. Partners may choose to override this default behavior and show the status
message when a device is connected to a Wi-Fi access point.
WARNING
The message may cause user confusion because it is shown whenever a proxy is used, as hotspot plug-in probes and data do
not go through a proxy.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
2. Specify an Owner .
3. Set PublishLimitedConnectivity to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash the build that contains this customization to a device.
2. Connect to a Wi-Fi access point.
3. Depending on the value you set for PublishLimtiedConnectivity , verify whether the No Internet access status
message is shown below the AP name.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Wi-Fi always on, always connected
1/18/2019 • 3 minutes to read
Partners can modify AOAC behavior and UX for non-AOAC mode devices.
Partners can use the LowPowerSupported and AlwaysOnAlwaysConnected settings to modify AOAC
behavior and UX. The device’s supported AOAC mode is determined by a combination of the chipset, IHV driver,
and the LowPowerSupported setting.
LowPowerSupported – This setting specifies that the IHV driver partially supports AOAC. This setting
must only be used if the IHV driver supports a transition from the D0 state to the D2 state and certain low
power features.
AlwaysOnAlwaysConnected – This setting enables partners to specify whether Wi-Fi should remain on
when the screen times out. By default, this setting is disabled. Partners should note that this setting does not
apply to devices that support partial or full AOAC. In that case, Wi-Fi always remains on and in the lower
power state when the screen is idle. Also note that this setting controls the default state of the checkbox
Keep Wi-Fi on when the screen times out in the Wi-Fi > manage settings screen. This checkbox is only
visible for non-AOAC mode devices.
Constraints: ImageTimeOnly for LowPowerSupported
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<!-- This setting is ImageTimeOnly. Specifies if the Wi-Fi driver supports D0 to D2 transitioning.
Enable this to indicate 'partial' AOAC state.
<Settings Path="WiFi/FirstBoot">
<!-- Set to 0 or 'Disabled' (to disable), or set to 1 or 'Enabled' (to enable). -->
<Setting Name="LowPowerSupported" Value="" />
</Settings>
-->
<!-- Configures the Wi-Fi radios to always stay on even after the screen times out. This applies to
non-AOAC devices only.
<Settings Path="WiFi/Config">
<!-- Set to 0 or 'Disabled' (to disable), or set to 1 or 'Enabled' (to enable). -->
<Setting Name="AlwaysOnAlwaysConnected" Value="" />
</Settings>
-->
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To specify whether the Wi-Fi driver supports transitions from the D0 state to the D2 state and the required
low power features, configure the value for LowPowerSupported to one of the following values:
VALUE DESCRIPTION
4. To specify whether Wi-Fi should remain on when the screen times out, configure the value for
AlwaysOnAlwaysConnected to one of the following values:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device that is connected to a Wi-Fi network.
2. If your Wi-Fi driver supports a D0 to D2 state transition and you enabled LowPowerSupported , verify that the
device transitions from a D0 state to a D2 state.
3. If you have a non-AOAC device and you configured the AlwaysOnAlwaysConnected setting, verify whether Wi-
Fi remains on when the screen times out. Navigate to the Wi-Fi > manage settings screen and verify that
the Keep Wi-Fi on when the screen times out setting is set according to the value that you specified for
AlwaysOnAlwaysConnected .
Related topics
Prepare for Windows mobile development
Customization answer file overview
Wi-Fi calling errors
1/18/2019 • 2 minutes to read
OEMs can customize the mobile device to configure settings related to Wi-Fi calling errors, including:
Show an error message when a Wi-Fi calling error is reported by the modem.
Show a specific error message based on operator requirements.
Customize the generic error string when a Wi-Fi calling error happens.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="WiFiCallingErrors"
Description="Use to customize the Wi-Fi calling error settings."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellUX">
<Setting Name="ShowWifiCallingError" Value="" />
<Setting Name="ShowSpecificWifiCallingError" Value="" />
<Setting Name="GenericWifiCallingErrorMessage" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/CellUX">
<Setting Name="ShowWifiCallingError" Value="" />
<Setting Name="ShowSpecificWifiCallingError" Value="" />
<Setting Name="GenericWifiCallingErrorMessage" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. To show the Wi-Fi calling error message in the mobile device UI, set ShowWifiCallingError to one of the
following values:
VALUE DESCRIPTION
5. To show the T-Mobile specific error message in the mobile device UI, set ShowSpecificWifiCallingError to
one of the following values:
VALUE DESCRIPTION
**Note** If the mobile device is not specific to T-Mobile, OEMs should use the
`GenericWifiCallingErrorMessage` setting instead.
6. To specify a custom generic Wi-Fi calling error string in the mobile device UI, set
GenericWifiCallingErrorMessage to a string that corresponds to the error message you want to show. The string
must not be longer than 127 characters.
Testing:
Work with your mobile operator partner to understand the Wi-Fi calling error message requirements for the
operator and to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Wi-Fi calling operator name
1/18/2019 • 2 minutes to read
OEMs can customize the display name for the mobile operator when the device is using Wi-Fi calling.
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="WiFiCallingOperatorName"
Description="Use to customize the mobile operator name that's visible when the
phone
is using Wi-Fi calling."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
<!-- Add the resource-only dll file and language MUI packages -->
<Settings Path="Localization/MUI">
<!-- Use to add your base MUI DLL file -->
<Asset Name="BaseDll" Source="" />
<!-- Use to specify the language MUI packages (*.dll.mui) for the languages you are supporting and
have
localized strings for -->
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<!-- Add as many as you need -->
</Settings>
</Static>
<Settings Path="Phone/PerSimSettings/$(__IMSI)">
<Setting Name="WiFiCallingOperatorName" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Add the resource-only .dll file and the language MUI packages (*.dll.mui) for the languages you are
supporting. To do this, follow these steps:
a. Add the resource-only .dll that contains the custom display string by setting the BaseDll asset to
point to the location of your base MUI DLL file. For example: C:\Path\DisplayStrings.dll.
b. 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 the previous steps for the other languages.
The following example shows the customization answer file entries for en-US, fr-CA, and es-
MX languages:
For more information, see Create a resource-only .dll for localized strings.
4. For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. To customize the name of the mobile operator when the phone is using Wi-Fi calling, you can set the value
for WiFiCallingOperatorName to:
Use a localized MUI string – To do this, set value to the name of the resource-only .dll file and specify
the string offset that corresponds to the mobile operator name. For example: @DisplayStrings.dll,-
Offset.
Use a non-localized string – To do this, set value to the string that corresponds to the mobile operator
name. For example: Contoso.
If you don't set the value for WiFiCallingOperatorName , the device will always display
"SIMServiceProviderName Wi-Fi", where SIMServiceProviderName is a string that corresponds to the SPN
for the SIM on the device. If the service provider name in the SIM is not set, only "Wi-Fi" will be displayed.
Testing steps:
1. Flash a build containing this customization to a device that has Wi-Fi calling enabled.
2. If you used a localized MUI string, verify that the localized string for the Wi-Fi calling mobile operator name
is displayed on the dialer.
If you used a non-localized string, verify that this string is displayed on the dialer.
If you did not set the value, verify that "SIMServiceProviderName Wi-Fi" is displayed on the dialer.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Wi-Fi icon and notifications
1/18/2019 • 2 minutes to read
<Static>
<Settings Path="WiFi/Config">
<Setting Name="ScanInterval" Value="" />
<Setting Name="SignalStrengthBar" Value="" />
<Setting Name="SignalStrengthDelta" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the values for the following settings:
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for contacts
1/18/2019 • 2 minutes to read
Describes the customizations that you can configure for the contacts and contact list on the mobile device.
In this section
TOPIC DESCRIPTION
Cortana phone number Partners can configure a phone book entry for Cortana to
allow users to initiate speech from a car that doesn't have
support for activating speech on the device that is connected
over Bluetooth.
Disable wait for phonebook ready signal from the modem FDN SIM contacts syncs from the SIM during device boot. By
default, this component waits until the phonebook ready
signal is received from the modem and then it verifies whether
FDN contact management is enabled on the SIM. If needed,
OEMs can disable the wait for the phonebook ready signal.
Hide contacts without phone numbers Partners can change the default OS behavior so that both
contacts with phone numbers and contacts without phone
numbers are shown in the People Hub.
Sort order for contacts OEMs can use this customization to set the list of contacts
displayed in the People Hub to be organized by last name
instead of first name, or first name instead of last name. It is
also possible to change the display format of contact names to
appear as “First name Last name” or “Last name First name”
for markets that use more formal nomenclature.
Sort order for contacts override OEMs can customize the default values for people sort and
display settings as documented in the Sort order for contacts
customization. However, these settings may be overridden by
the defaults for the user’s current locale unless the OEM sets
an additional override registry key.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Cortana phone number
1/18/2019 • 2 minutes to read
Partners can configure a phone book entry for Cortana to allow users to initiate speech from a car that doesn't
have support for activating speech on the device that is connected over Bluetooth. The custom phone book entry
will show up in the car's UI, but not in the Windows 10 Mobile UI.
When the user dials the custom phone number from the car, the device activates Cortana (or the device's default
speech engine if Cortana is turned off or is not available), instead of making a phone call. The phone number also
becomes associated with the contact name Cortana (or Speech) when the car downloads the phone book from
the phone. To start the device's speech engine, the user can dial the custom contact from the car's UI or use the
car's speech engine to "call Cortana" (or "call Speech" if Cortana is not enabled).
Once the phone book entry for Cortana has been configured, users cannot change the number. Only OEMs or
mobile operators can change this number. Partners must set this phone number to a number that will not be used
for actual phone numbers. Partners must also not use phone numbers that are used for emergencies, such as 911
in the United States.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Bluetooth/BTAGService">
<Setting Name="CortanaPhoneNumber" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value for CortanaPhoneNumber to a phone number that will not be used for actual phone numbers or
for those used for emergencies. The phone number should be specified for all countries/regions that
support Cortana or legacy speech. If Cortana is off or not available for the market, the string Speech is used
instead of Cortana.
The default Cortana phone number is currently set to a fictitious phone number, 5555559876. If you do not
change the default value, the OS will only recognize this phone number.
Testing:
1. Flash an image that contains this customization to a phone.
2. Connect your phone to your car over Bluetooth.
3. If Cortana or the default phone speech engine is supported, start the phone's speech engine by dialing the
custom contact from the car's UI. Alternatively, you can use the car's speech engine and say "call Cortana"
(or "call Speech) if Cortana is not enabled).
Verify that the phone activates either Cortana or the default speech instead of making a phone call. If
Cortana is available, start a conversation.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Disable wait for phonebook ready signal from the
modem
1/18/2019 • 2 minutes to read
FDN SIM contacts syncs from the SIM during device boot. By default, this component waits until the phonebook
ready signal is received from the modem and then it verifies whether FDN contact management is enabled on the
SIM. If needed, OEMs can disable the wait for the phonebook ready signal.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="People/SIMContactManagement">
<Setting Name="CheckFDNStateAfterPhonebookReady" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of CheckFDNStateAfterPhonebookReady to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash the build containing this customization to a device with a SIM that has FDN enabled.
2. Go through the setup process and then enter the PIN to unlock the SIM when prompted and wait for the
Start screen to appear.
3. Go to the People Hub and verify that FDN contacts are visible.
4. Go to the Settings > phone > SIM settings screen and verify that FDN is shown as On.
5. Additionally, you can test SIMs from two operators and verify that:
Both SIM cards show FDN contacts correctly.
Enabling and disabling FDN works.
Operator voice calls are allowed or blocked correctly based on the FDN status and FDN contacts list.
Adding and deleting contacts in the FDN phonebook works.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Hide contacts without phone numbers
1/18/2019 • 2 minutes to read
Partners can change the default OS behavior so that both contacts with phone numbers and contacts without
phone numbers are shown in the People Hub.
By default, contacts that do not have phone numbers are hidden in the People Hub.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
</ImageCustomizations>
2. Specify an Owner .
3. Set HideContactsWithoutPhoneNumbers to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash a build containing this customization to a device.
2. Set up the device and then add a few contacts. Make sure to include contacts with phone numbers and
contacts without phone numbers.
3. Open the People Hub.
If you set HideContactsWithoutPhoneNumbers to 0 or 'False', verify that under the Contacts heading the
filter shows showing all at the top of the contacts list. Confirm that all contacts, with and without
phone numbers, are showing.
If you set HideContactsWithoutPhoneNumbers to 1 or 'True' (or did not set this setting), verify that under
the Contacts heading the filter shows showing contacts with phone numbers at the top of the
contacts list. Confirm that only contacts with phone numbers are showing.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Sort order for contacts
1/18/2019 • 2 minutes to read
OEMs can use this customization to set the list of contacts displayed in the People Hub to be organized by last
name instead of first name or first name instead of last name. It is also possible to change the display format of
contact names to appear as “First name Last name” or “Last name First name” for markets that use more formal
nomenclature.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
</ImageCustomizations>
2. Specify an Owner .
3. Set the SortBy Value to one of the following values:
VALUE DESCRIPTION
[Sort1] or FirstLast Sorts the contacts in the People Hub by their first
name.
[Sort2] or LastFirst Sorts the contacts in the People Hub by their last
name.
VALUE DESCRIPTION
[Sort1] or FirstLast Displays the contacts in the People Hub in the format:
“First name Last name”
[Sort2] or LastFirst Displays the contacts in the People Hub in the format:
“Last name First name”.
Testing steps:
1. Flash a build containing this customization to a device.
2. Go to the People settings screen. Verify that the Sort list by option is set to Last name, and that the
Display names by option is set to Last, First.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Sort order for contacts override
1/18/2019 • 2 minutes to read
OEMs can customize the default values for people sort and display settings as documented in the Sort order for
contacts customization. However, these settings may be overridden by the defaults for the user’s current locale
unless the OEM sets an additional override registry key.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
</ImageCustomizations>
2. Specify an Owner .
3. Set the OEMOverridesSortDisplay value to 1 or 0x1 to prevent the OEM values for people sort and display
settings from being overridden.
Testing steps:
1. Flash a build containing this customization to a device.
2. Go to the People settings screen.
3. Verify that the Sort list by and the Display names by option is set to the values you specified in the Sort
order for contacts customization.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for desktop experiences
1/18/2019 • 2 minutes to read
Describes the customizations that you can configure for the desktop when the mobile device is connected.
In this section
TOPIC DESCRIPTION
Control Panel device icon OEMs can change the default icon associated with the
phone on a connected computer.
Phone image in the phone app OEMs can replace the default images of the phone that
appears in the phone app. These images are included in
the OEMImage.cab that is provided in this customization
sample. The OEM can replace these images with custom
ones that more accurately depict their phone. When the
OEM provides a new image, this image will be used and
will replace the OEMavatar.cab file that is used by default.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Control Panel device icon
1/18/2019 • 2 minutes to read
OEMs can change the default icon associated with the phone on a connected computer.
When the user connects a phone to a Windows computer, the phone name and icon shows up in the Devices and
Printers list. OEMs can change the default icon associated with the phone.
Limitations and restrictions:
Create an icon to represent the phone that meets the following specifications:
Filename: Device.ico
Dimensions, bit level and transparency:
256x256: 32bit + Alpha
48x48: 32bit + Alpha
48x48: 8bit 256
48x48: 8bit 16
32x32: 32bit + Alpha
32x32: 8bit 256
32x32: 4bit 16
24x24: 32bit + Alpha
24x24: 8bit 256
24x24: 4bit 16
16x16: 32bit + Alpha
16x16: 8bit 256
16x16: 4bit 16
Match the orientation and general creative style of the sample image. To avoid issues associated with the
localization of the screen image text, the phone image must depict a phone that is turned off.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="ControlPanelDeviceIcon"
Description="Use to change the icon associated with the phone when connecting to a
Windows computer."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="MediaTransferProtocol/DeviceAssets">
<!-- Use to add the icon to represent the phone when connected to a Windows computer. -->
<Asset Name="DeviceIcon" Source="C:\Path\Device.ico" />
<!-- Use to specify the file name of the device icon to use -->
<Setting Name="Icon" Value="Device.ico" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Add the icon you want to use to represent the phone when connected to a Windows computer. To do this:
a. Set the asset Name to DeviceIcon.
b. Specify the file name and location of the asset on your workstation by setting the Source .
4. Set the Icon value to the name of your custom icon. For example, Device.ico.
Testing steps:
1. Flash a build containing this customization to a phone.
2. On the Windows computer, open Device Manager and remove the driver associated with the phone.
3. Connect the phone to the computer using a USB cable.
4. On the computer, navigate to the Devices and Printers screen. Verify that the phone icon that you included
in the build is visible.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Phone image in the phone app
1/18/2019 • 2 minutes to read
OEMs can replace the default images of the phone that appears in the phone app. These images are included in the
OEMImage.cab that is provided in this customization sample. The OEM can replace these images with custom
ones that more accurately depict their phone. When the OEM provides a new image, this image will be used and
will replace the OEMavatar.cab file that is used by default.
Limitations and restrictions:
The custom image files to represent the phone must meet the following specifications:
PNG24
RGB
Bicubic
96 DPI
Alpha background transparency
Dimensions - Height (width varies by device):
800 px
400 px
200 px
150 px
120 px
80 px
The image must be the exact height and width of the device with no padding.
Match the orientation and general creative style of the sample image. To avoid issues associated with the
localization of the screen image text, the phone image must depict a phone that is turned off.
Constraints: None
Instructions:
1. Complete the following steps to create a cab file containing six custom .png image files to represent the
phone.
a. Create the six custom phone images and place them in a folder named OEMImage.
b. Create a new OEMImage.cab file that contains your custom images using Makecab.exe, which is a
utility included with Windows. To do this:
a. Create a directive file for Makecab.exe with the filename OEMImage.ddf.
The .ddf file must have the following contents:
;*** OEMImage.ddf example
;
.OPTION EXPLICIT ; Generate errors
.Set CabinetNameTemplate=OEMImage.cab
.set DiskDirectoryTemplate=CDROM ; All cabinets go in a single directory
.Set UniqueFiles="OFF"
.Set Cabinet=on
.Set DiskDirectory1=OEMImage.CAB
DeviceImage_80.png
DeviceImage_120.png
DeviceImage_150.png
DeviceImage_200.png
DeviceImage_400.png
DeviceImage_800.png
b. Place the OEMImage.ddf file in the OEMImage folder along with the six .png image files. At a
command-line prompt in the OEMImage folder, run the following command:
Makecab.exe /F OEMImage.ddf
<Static>
<Settings Path="MediaTransferProtocol/DeviceAssets">
<!-- Use to add the .cab containing the PNG image files that depict the phone at various sizes
and the OEMImage.ddf -->
<Asset Name="DeviceImageCab" Source="C:\Path\OEMImage.cab" />
<!-- Use to specify which device image .cab should be used to display images of the phone in
the Windows Phone app -->
<Setting Name="Avatar" Value="OEMImage.cab" />
</Settings>
</Static>
</ImageCustomizations>
3. Specify an Owner .
4. Add the OEMImage.cab file to the customization package. To do this:
a. Set the asset Name to DeviceImageCab.
b. Specify the location of the OEMImage.cab on your workstation by changing C:\Path\ in the Source
attribute to match the location of OEMImage.cab.
5. Specify which device image .cat to use when displaying images of the phone in the Windows Phone app by
setting the Avatar value to OEMImage.cab.
Testing steps:
1. Flash a build containing this customization to a phone.
2. On the computer, install the Windows 10 Mobile app.
3. Connect the phone to the computer using a USB cable.
4. On the computer, open the mobile app.
5. Verify that the phone image that you included in the build is visible in the mobile app.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for display and lock screen
1/18/2019 • 2 minutes to read
Describes the customizations for the display and lock screen on the device.
In this section
TOPIC DESCRIPTION
Additional lock screen backgrounds OEMs can add new lock screen background images for the
lock screen and also set the default lock screen background.
Default theme and accent color for Kid's Corner Partners can set the default theme, including the background
color (light or dark) and the accent color for Kid’s Corner.
Enable dark mode OEMs can choose to specify whether the dark mode is applied.
Hide the auto brightness setting OEMs can hide the automatic brightness setting for phones
that do not have an ambient light sensor.
Lock screen notifications OEMs can preload apps that support lock screen notifications.
Lock screen timeout for AMOLED and OLED displays OEMs can remove the 15 minutes, 30 minutes, and Never
options from the Screen times out after dropdown in the Lock
screen settings screen.
Warning about light theme for AMOLED and OLED screens OEMs can choose to display a warning about battery life if the
user selects the light theme on phones with AMOLED or
OLED displays. This customization is not relevant for other
screen types, as there is not a significant power difference
between the themes with the light and dark background.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Additional lock screen backgrounds
1/18/2019 • 3 minutes to read
OEMs can add new lock screen background images for the lock screen and also set the default lock screen
background.
Limitations and restrictions:
The lock screen backgrounds included by Microsoft shall not be removed, moved, or altered.
The user can modify the default lock screen background by selecting a new photo from the Photos
application or by changing the lock screen background settings.
Lock screen background images must be in .JPG, .JPEG, or .PNG format.
Constraints: FirstVariationOnly
Instructions:
Adding more lock screen backgrounds
OEMs can provide a set of images to complement the Backgrounds album. The set of images will be available to
end-users to select as a lock screen background when the user selects the Sample images background provider in
the Lock screen settings screen and launches the photo picker. The images will be appended to the end of the
backgrounds album. Although there is no limit to the number of additional lock screen backgrounds, we
recommend that partners add no more than 26 backgrounds.
To add a set of lock screen backgrounds:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="LockScreen">
<Asset Name="Wallpapers" Source="" />
<Asset Name="Wallpapers" Source="" />
</Settings>
</Static>
</ImageCustomizations>
If you are setting the default lock screen background in addition to adding a set of lock screen backgrounds,
see Setting the default system lock screen background after this section.
2. Specify an Owner .
3. Add additional lock screen backgrounds by adding more Asset elements.
Set the asset's Name to Wallpapers .
Set Source to the full path to the lock screen background source file on your development machine.
For example: C:\Program Files (x86 )\Windows
Kits\10\OEMCustomizationAssets\AdditionalLockScreenBackgrounds\Image1.jpg.
Setting the default system lock screen background
OEMs can set an image to be the default system lock screen background and this supersedes the default device
system lock screen background. This image will be shown during the following scenarios:
During first boot, unless device restore overrides the image with a backed up image.
When Sample images is selected as the Background in the Lock screen settings screen and no custom
image is assigned.
During any error condition when the lock screen API fails to set the image and the system rolls back to the
default system image.
The default lock screen image can be one of the images supplied as the default lock screen background set to be
shown on the photo picker. We recommend that the default lock screen background image also be part of the set.
To configure the default lock screen background:
1. Create a customization answer file using the contents shown in the following code sample or use the
sample AdditionalLockScreenBackgrounds.xml file.
<Settings Path="LockScreen">
<Setting Name="DefaultWallpaper" Value="" />
</Settings>
2. Specify an Owner .
3. Set the DefaultWallpaper value to the file name of the image that you want to set as the default lock screen.
For example, Image1.jpg.
4. Use the customization answer file to create your custom OS image.
Testing:
1. Flash an OS image that contains this customization to a phone.
2. If you added more lock screen backgrounds:
a. Go to Lock screen settings screen.
b. Make sure the Background setting is set to Sample images.
c. Select Browse and verify that your additional lock screen backgrounds have been appended at the
end.
3. If you set the default lock screen background:
a. Turn off the phone then turn it on again.
b. Verify that the lock screen background matches the image that you set as the default lock screen.
Related topics
Prepare for Windows mobile development
Customization answer file overview ](https://docs.microsoft.com/en-us/windows-
hardware/customize/mobile/mcsf/customization-answer-file)
Brightness tuning
1/18/2019 • 2 minutes to read
When the Brightness screen in Settings is not set to automatically adjust, this customization enables the user to
select low, medium, and high intensities for the screen brightness. By default these values are 33%, 66%, and 100%
of maximum brightness respectively. OEMS can tune these values so that low intensity is as close to 35 LUX as
possible and medium is as close to 200 LUX as possible. High intensity should be the screen's maximum supported
brightness.
Limitations and restrictions:
When the Brightness setting is set to automatically adjust, partners must ensure that the brightness table
(sometimes called curve) provided for automatic brightness setting contains at least one entry that is less than
33% of the maximum brightness. If this requirement is not met, the behavior of the device when switching to
low brightness settings is undefined.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Brightness">
<Setting Name="LowBrightnessValue" Value="" />
<Setting Name="MediumBrightnessValue" Value="" />
<Setting Name="HighBrightnessValue" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the brightness percentages. Note that you will have to convert the decimal percentage to hexadecimal
and then prepend 0x to the hexadecimal value. For example, if the value is 200 (decimal), the final
hexadecimal value must be set to 0xC8.
SETTING DESCRIPTION
Testing:
1. Flash the build containing this customization to a phone.
2. Go to the theme screen in Settings, and select the light background.
3. Go to the Brightness screen in Settings, and turn off the Automatically adjust option.
4. Select low level, then use a light meter placed over the bottom half of the screen (which is all white) to test
the output in LUX. For best results the light sensor should be surrounded by a shroud to block out incidental
light. Low should be approximately equivalent to 35 LUX.
5. Repeat the test by selecting the medium level. This should be approximately equivalent to 200 LUX.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Kid's Corner default theme and accent color
1/18/2019 • 2 minutes to read
Partners can set the default theme, including the background color (light or dark) and the accent color for Kid’s
Corner.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="KidsCorner">
<Setting Name="DefaultThemeBackground" Value="" />
<Setting Name="DefaultThemeAccentColor" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set DefaultThemeBackground to specify a theme. The possible values are:
0 for light
1 for dark
4. Set DefaultThemeAccentColor to specify an accent color ID. You can use either the corresponding decimal
value or the corresponding hexadecimal value (with the 0x prefix) as shown in the following table.
ACCENT COLOR ID (IN HEXADECIMAL) ACCENT COLOR ID (IN DECIMAL) COLOR NAME
0x0 0 Lime
0x1 1 Green
0x2 2 Emerald
0x3 3 Teal
0x4 4 Cyan
ACCENT COLOR ID (IN HEXADECIMAL) ACCENT COLOR ID (IN DECIMAL) COLOR NAME
0x5 5 Cobalt
0x6 6 Indigo
0x7 7 Violet
0x8 8 Pink
0x9 9 Magenta
0xA 10 Crimson
0xB 11 Red
0xC 12 Orange
0xD 13 Amber
0xE 14 Yellow
0xF 15 Brown
0x10 16 Olive
0x11 17 Steel
0x12 18 Mauve
0x13 19 Taupe
Related topics
Prepare for Windows mobile development
Customization answer file overview
Start + theme settings: Enabling dark mode
1/18/2019 • 2 minutes to read
<Static>
<Settings Path="Theme">
<Setting Name="DefaultBackgroundColor" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set DefaultBackgroundColor to specify a mode. The possible values are:
VALUE DESCRIPTION
Testing:
1. Flash an image containing this customization to a phone.
2. Verify that the phone is using the correct mode.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Hide the auto brightness setting
1/18/2019 • 2 minutes to read
OEMs can hide the automatic brightness setting for phones that do not have an ambient light sensor.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Brightness">
<Setting Name="HideAutoBrightness" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set Value to one of the following:
VALUE DESCRIPTION
Testing:
1. Flash the build that contains this customization to a phone.
2. In Settings, go to the Brightness screen.
3. Verify that the Automatically adjust toggle is hidden or visible depending on the Value that you set for
HideAutoBrightness .
Related topics
Prepare for Windows mobile development
Customization answer file overview
Lock screen notifications
1/18/2019 • 2 minutes to read
OEMs can preload apps that support lock screen notifications. Notifications alert the user to new content or
updates in that app. They can take the form of a number (to indicate the number of changes) or a text preview.
OEMs can also preset one notification in the fifth slot on the lock screen. This notification displays an icon for a
single app plus the number of notifications for that app.
Limitations and restrictions:
The default count notification mappings must not be changed.
The default text notification mapping must not be changed.
Notification icons provided by the app and displayed on the lock screen must be monochromatic, with a
white foreground color and a transparent background color.
After first boot, apps can only be assigned as a lock screen notification by the user; apps must not
automatically use a notification slot.
Users can delete apps that support notifications, and they can also select alternate notification mappings.
Constraints: FirstVariationOnly
Instructions:
For more information about building an app that supports notifications on the lock screen, see the Windows
developer documentation.
To preload and specify the app that supports lock screen notifications:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Applications>
<Application Source=""
License=""
ProvXML="" />
</Applications>
<Settings Path="LockScreen">
<Setting Name="LockNotificationAppID" Value="" />
<Setting Name="LockNotificationAppTile" Value="default" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Preload the app that supports lock screen notifications by specifying these settings:
Set Source to the path and name of the app's .xap file.
Set License to the path and name of the app's license file.
Set ProvXML to the path and name of the app's PROVXML file.
4. Set the LockNotificationAppID setting Value to correspond to your app' s app ID or GUID.
5. Replace the LockNotificationAppTile setting Value to match the TokenID value that was in your app
manifest file. If you do not have a TokenID specified, set the Value to default.
Testing:
1. Flash an image that contains this customization to a device.
2. Go to Settings > Lock screen.
3. Scroll down and verify that your lock screen notification app now shows as the default app in fifth slot under
Choose apps to show quick status.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Screen timeout for AMOLED and OLED displays
1/18/2019 • 2 minutes to read
OEMs can remove the 15 minutes, 30 minutes, and Never options from the Screen times out after dropdown
in the Lock screen settings screen.
This is recommended for phones with AMOLED and OLED screens to prevent screen damage.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="LockScreen">
<!-- Set the value to 1 or 0x1 to remove the 15 minutes, 30 minutes, and Never options from the
lock screen settings screen -->
<Setting Name="ScreenTimeOut" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To hide or remove the 15 minutes, 30 minutes, and Never options from the Screen times out after
dropdown in the Lock screen settings screen, set ScreenTimeOut to 1 or 0x1.
Testing:
1. Flash the build containing this customization to a phone.
2. Go to the lock screen screen in Settings.
3. Tap the Screen times out after setting and verify that the 15 minutes, 30 minutes, and never options are
no longer included in the list.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Warning about light theme for AMOLED and OLED
screens
1/18/2019 • 2 minutes to read
OEMs can choose to display a warning about battery life if the user selects the light theme on phones with
AMOLED or OLED displays. This customization is not relevant for other screen types, as there is not a significant
power difference between the themes with the light and dark background.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Theme">
<Setting Name="OLEDWarning" Value="1" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Do not modify the Value .
Testing:
1. Flash an image containing this customization to a phone.
2. Go to the Colors settings screen.
3. Set the Choose your mode option to Light.
4. Verify that the warning text appears above the mode option.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for email
1/18/2019 • 2 minutes to read
In this section
TOPIC DESCRIPTION
Light or dark theme in email Partners can specify that the entire email application always
has a light background.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Light or dark mode in email
1/18/2019 • 2 minutes to read
The email application consists of several screens, including the List View, Settings, Automatic Replies, Search,
Inbox Linking, Read, and Compose. By default, the email background for all pages except Read and Compose
match the system theme. The Read and Compose pages always have a light background. Partners can specify that
the entire email application always has a light background, but users do not have access to this setting. However, if
the user turns on high-contrast mode, it overrides all other settings, and all screens use the high contrast settings.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Email">
<Setting Name="DefaultBackgroundThemeSetting" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set DefaultBackgroundThemeSetting to one of the following values:
VALUE DESCRIPTION
0 or System Default Keeps the default background theme for the email
app.
Testing steps:
1. Flash the build containing this customization to a phone that has data connectivity.
2. Go to the theme screen in Settings. Set the background theme to dark.
3. Go to the email+accounts screen in Settings. Configure an email account.
4. Go to the configured email account’s inbox.
5. Verify that the email background is light.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for keyboard
1/18/2019 • 2 minutes to read
Describes the customizations that you can configure for the keyboard on the mobile device.
In this section
TOPIC DESCRIPTION
Disable text correction and suggestions For markets that do not use any of the available input
languages, partners pick an alternative available input
language as the default, but disable text prediction, auto-
correction, and the spelling checker by default, using this
customization.
Hardware keyboard character repeats hold time and delay For devices that have a hardware keyboard, partners can
optionally set the character repeat hold time and delay.
Text correction and suggestions Partners must enable text correction and text suggestions for
at least one input language, and can optionally include more.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Disable text correction and suggestions
1/18/2019 • 2 minutes to read
For markets that do not use any of the available input languages, partners pick an alternative available input
language as the default, but disable text prediction, auto-correction, and the spelling checker by default, using this
customization.
Partners must not remove any keyboards, disable default keyboards for an input language, nor modify any
keyboard layouts in any way. However, for markets that do not use any of the available input languages, partners
pick an alternative available input language as the default, but disable text prediction, auto-correction, and the
spelling checker. This prevents the user’s words from being automatically changed to similar words in the alternate
language as they type.
Users can turn text prediction, auto-correction, and the spelling checker back on by going to the keyboard screen
in Settings, tapping their desired keyboard language, and selecting Suggest text.
Limitations and restrictions:
Partners can disable text correction and suggestions for only one language. This functionality cannot be
disabled for Japanese, Chinese, or Korean.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="TextInput/Intelligence">
<Setting Name="DisablePredictions" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Value to the locale or alternative input language that must have the text intelligence features
disabled. For example, to disable text correction and suggestions for English (UK), set Value to en-gb .
Testing Steps:
1. Flash the build containing this customization to a device.
2. Go to the keyboard screen in Settings.
3. Choose the keyboard language where you turned off text correction and suggestions to open the keyboard
settings.
4. Verify that the checkboxes for Suggest text, Highlight misspelled words, Correct misspelled words,
and Insert a space after selection a suggestion are unchecked.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Hardware keyboard character repeats hold time and
delay
1/18/2019 • 2 minutes to read
For devices that have a hardware keyboard, partners can optionally set the character repeat hold time and delay.
The optional keyboard customizations are:
The amount of time, in milliseconds, the user must hold down a key before the keyboard character repeats.
The amount of time, in milliseconds, to use as the delay between each keyboard character repeats.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
</ImageCustomizations>
2. Specify an Owner .
3. To specify the amount of time that the user must hold down a key before the keyboard character repeats, set
the value for the AutoRepeatInitialDelay setting. The value is in milliseconds.
4. To specify the amount of time to use as the delay between each keyboard character repeats, set the value for
the KeyRepeatRate setting. The value is in milliseconds.
Testing Steps:
1. Flash the build containing this customization to a phone with a hardware keyboard.
2. Set up the phone. Press and hold down the same keyboard key. Verify that the amount of time needed to
hold down a key before the keyboard character repeats corresponds to the value that you set. Also verify
that the delay between each character repeat is equivalent to the value that you set.
Related topics
Prepare for Windows mobile development
Customization answer file overview
On-screen keyboard delay
1/18/2019 • 2 minutes to read
When an external keyboard (e.g. Bluetooth keyboard or barcode scanner which connects as an HID keyboard) is
used with a device, the on-screen keyboard is hidden. When the screen is touched, there is a hard-coded delay
period of 60 seconds before the on-screen keyboard reappears. Typically, the user selects an input field on the
screen and then uses the external keyboard/barcode scanner to enter the data.
This customization enables an OEM to change that delay period. The delay value is read on boot-up and cannot be
changed during runtime. The optional customization specifies the delay in seconds with a default value of 60. If the
value is set to 0, then the on-screen keyboard is not hidden.
Constraints: ImageTimeOnly
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
2. Specify an Owner.
3. Set the value to the required delay between when a user touches the screen of the device, and when the on-
screen keyboard appears, in seconds.
Testing steps
1. Flash the build containing this customization to a device
2. Connect an external Bluetooth keyboard to the device
3. Select the input field on the screen via the on-screen keyboard
a. Type abc via the on-screen keyboard.
b. Type dce via the external keyboard. The on-screen keyboard shrinks from the screen.
c. Touch the screen again and confirm the on-screen keyboard remains hidden until the specified delay
expires.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Pre-enabled keyboard
1/18/2019 • 5 minutes to read
<Static>
<Settings Path="TextInput">
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Replace $ (InputMethodId ) with the keyboard you want to pre-enable. The format must be: Locale
code.Locale value. See the following table for more information on the locale codes and values that you
can use. The setting Value must be set to 1 to enable the keyboard.
For example, to pre-enable US English and Korean 12-key Sky, add the following key/value pairs:
<Settings Path="TextInput">
<Setting Name="PreEnabledKeyboard/en-US.1" Value="1" />
<Setting Name="PreEnabledKeyboard/ko-KR.4" Value="1" />
</Settings>
The following table shows the values that you can use for the $ (InputMethodId ) part of the setting name. Replace
$ (InputMethod ) with this format: Locale code.Locale value
Note The keyboards for some locales require additional language model files. To pre-enable the keyboards for
the following locales, OEMs must include corresponding locales in the Keyboard section described in Text
correction and suggestions: am-ET, bn-IN, gu-IN, hi-IN, ja-JP, kn-IN, ko-KR, ml-IN, mr-IN, my-MM, or-IN, pa-IN,
si-LK, ta-IN, te-IN, zh-TW, zh-CN, and zh-HK.
Albanian sq-AL 1
Amharic am-ET 1
Arabic ar-SA 1
Armenian hy-AM 1
Bashkir ba-RU 1
Basque eu-ES 1
Belarusian be-BY 1
NAME LOCALE CODE KEYBOARD LAYOUT VALUE
Bulgarian bg-BG 1
Catalan ca-ES 1
Cherokee chr-Cher-US 1
Croatian hr-HR 1
Czech cs-CZ 1
NAME LOCALE CODE KEYBOARD LAYOUT VALUE
Danish da-DK 1
Divehi dv-MV 1
Dzongkha dz-BT 1
Estonian et-EE 1
Faroese fo-FO 1
Filipino fil-PH 1
Finnish fi-FI 1
Galician gl-ES 1
Georgian ka-GE 1
Greek el-GR 1
Greenlandic kl-GL 1
Guarani gn-PY 1
Hausa ha-Latn-NG 1
Hebrew he-IL 1
Hinglish hi-Latn 1
Hungarian hu-HU 1
Icelandic is-IS 1
Igbo ig-NG 1
Indonesian id-ID 1
NAME LOCALE CODE KEYBOARD LAYOUT VALUE
Irish ga-IE 1
Italian it-IT 1
Kazakh kk-KZ 1
Khmer km-KH 1
Kinyarwanda rw-RW 1
Kiswahili sw-KE 1
Konkani kok-IN 1
Kyrgyz ky-KG 1
Lao lo-LA 1
Latvian lv-LV 1
NAME LOCALE CODE KEYBOARD LAYOUT VALUE
Lithuanian lt-LT 1
Luxembourgish lb-LU 1
Macedonian mk-MK 1
Maltese mt-MT 1
Maori mi-NZ 1
Myanmar my-MM 1
Nepali ne-NP 1
Pashto ps-AF 1
Persian fa-IR 1
Polish pl-PL 1
Romanian ro-RO 1
Romansh rm-CH 1
Russian ru-RU 1
Sakha sah-RU 1
Setswana tn-ZA 1
Sinhala si-LK 1
NAME LOCALE CODE KEYBOARD LAYOUT VALUE
Slovak sk-SK 1
Slovenian sl-SI 1
Swedish sv-SE 1
Syriac syr-SY 1
Tajik tg-Cyrl-TJ 1
Tatar tt-RU 1
Thai th-TH 1
Tibetan bo-CN 1
Turkish tr-TR 1
Turkmen tk-TM 1
NAME LOCALE CODE KEYBOARD LAYOUT VALUE
Ukrainian uk-UA 1
Urdu ur-PK 1
Uyghur ug-CN 1
Valencian ca-ES-valencia 1
Welsh cy-GB 1
Wolof #N/A 1
Xhosa xh-ZA 1
Yoruba yo-NG 1
Zulu zu-ZA 1
Testing Steps:
1. Flash the build containing this customization to a device.
2. Go to the keyboard screen in Settings.
3. Verify that the list of keyboard languages enabled on the device is correct.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Text correction and suggestions
1/18/2019 • 2 minutes to read
Partners must enable text correction and text suggestions for at least one input language, and can optionally
include more.
By default, the keyboard language files used for text correction and suggestions while typing are not included on
the device.
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 results for text correction on
Microsoft's community support site.
Text correction and suggestions are supported for the following input languages: Arabic, Catalan, Croatian, Czech,
Danish, Dutch (Belgium), Dutch (Netherlands), English (India), English (UK), English (US ), Finnish, French
(Canada), French (Switzerland), French (France), German, Greek, Hebrew, Hinglish, Hungarian, Indonesian, Italian,
Japanese, Korean, Malay, Norwegian (Bokmål), Persian, Polish, Portuguese (Brazil), Portuguese (Portugal),
Romanian, Russian, Serbian (Latin), Serbian (Cyrillic), Simplified Chinese, Slovak, Spanish (Mexico), Spanish
(Spain), Swedish, Traditional Chinese (Hong Kong SAR ), Traditional Chinese (Taiwan), Turkish, Ukrainian, and
Vietnamese.
Instructions
For more information about language customizations, see the overview Set languages and locales.
To modify the list of speech languages, the OEM must edit the Keyboard section of the OEMInput.xml file before
building the device image. The following input languages are supported.
Arabic ar-SA
Catalan ca-ES
Croatian hr-HR
Czech cs-CZ
Danish da-DK
Finnish fi-FI
German de-DE
Greek el-GR
Hebrew he-IL
Hindi hi-IN
Hinglish hi-Latn
Hungarian hu-HU
Indonesian id-ID
Italian it-IT
Japanese ja-JP
Korean ko-KR
Malay ms-MY
Polish pl-PL
Romanian ro-RO
Russian ru-RU
Slovak sk-SK
Swedish sv-SE
Turkish tr-TR
Ukrainian uk-UA
Vietnamese vi-VN
OEMs must include at least one keyboard language. To include multiple languages, add additional Language
entries to the Keyboard section of the OEMInput.xml file, as shown in the following sample.
<SupportedLanguages>
<UserInterface>
<Language>en-US</Language>
</UserInterface>
<Keyboard>
<Language>en-US</Language>
<Language>vi-VN</Language>
<Language>de-DE</Language>
</Keyboard>
<Speech>
<Language>en-US</Language>
</Speech>
</SupportedLanguages>
Testing steps
1. Flash the build containing this customization to a device.
2. Go to the keyboard screen in Settings.
3. Verify that the list of keyboard languages installed on the device is correct.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for maps
1/18/2019 • 2 minutes to read
Describes the customizations that you can configure for maps on the mobile device.
In this section
TOPIC DESCRIPTION
Map data on an SD card and map preload Map data is used by the Maps application and the map
control for third-party applications. OEMs can choose to
store this data on an SD card, which provides the
advantage of saving internal memory space for user data
and allows the user to download more offline map data.
Microsoft recommends enabling the UseExternalStorage
setting on phones with less than 8 GB of user storage and
has an SD card slot.
Maps for phones shipped in China Microsoft recommends using the ChinaVariantWin10
setting instead of this legacy MCSF setting.
For a Windows mobile device shipping in China, partners
must specify that the device is intended for that market
by configuring ChinaVariant setting. When enabled,
maps approved by the State Bureau of Surveying and
Mapping in China are used and the maps are obtained
from a server located in China.
Preloaded map data in the user store OEMs can choose a single map region to preload from the
multiple regions that are available for OEMs to download
from the Microsoft partner site(s) where the Kits are also
available. OEMs can choose to store this data in the user
store. Maps are grouped into regions, but there are some
restrictions. For more information about these restrictions,
see the accompanying instructions that are part of the
map data download on the Microsoft partner site(s).
Temporary map data cache size When a user attempts to view map data for a location
that was not preloaded or is not already installed on the
phone, map data will be downloaded to dynamically
render a map. This data is stored in a temporary cache
that the Maps application maintains for this purpose. By
default this cache is allowed to use a maximum of 128 MB
of storage. For phones with a limited amount of available
storage, OEMs can specify that the cache only use a
maximum of 64 MB of storage. Microsoft recommends
that this customization only be used for phones with a
limited amount of internal storage space. Reducing the
size of the online cache for Map data does not affect the
size of the installed (or offline) maps.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Map data on an SD card and map preload
1/18/2019 • 2 minutes to read
Map data is used by the Maps application and the map control for third-party applications. OEMs can choose to
store this data on an SD card, which provides the advantage of saving internal memory space for user data and
allows the user to download more offline map data. Microsoft recommends enabling the UseExternalStorage
setting on phones with less than 8 GB of user storage and has an SD card slot.
You can use UseExternalStorage whether or not you include an SD card with preloaded map data on the phone.
If set to 1 (or Yes), the OS only allows the user to download offline maps when an SD card is present. If an SD card
is not present, users can still view and cache maps, but they will not be able to download a region of offline maps
until an SD card is inserted.
Important SD card performance can affect the quality of the Maps experience when maps are stored on the SD
card. When an SD card is used, Microsoft recommends that OEMs test the Maps experience and the speed of map
downloads with the specific SD card part that will be used on retail phones to determine if performance is
satisfactory.
Constraints: FirstVariationOnly
UseExternalStorage is a first boot configuration that can be set by the OEM. The OEM cannot change or use this
setting after first boot.
Instructions:
Microsoft recommends enabling UseExternalStorage on phones with less than 8 GB of user storage and has an
SD card slot.
1. Create a customization answer file using the contents shown in the following code sample or use the
sample UseExternalStorage.xml file.
<Static>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Value to one of the following:
VALUE DESCRIPTION
4. If including an SD card with the device, add the preloaded map data to the SD card. Unzip the appropriate
map variant data package and copy the “diskcache” folder onto the SD card under the d:\MapData
directory.
Note When unzipping the appropriate map variant data package, you must use a file
compression/decompression utility that preserves the file attributes and timestamps. If the utility does not
preserve this information, the map(s) will be treated as invalid by the OS.
Testing:
1. Flash a build that contains this customization on a phone.
2. Launch the Maps application and open Settings from the application bar.
3. Click on the Download Maps button and verify that the expected region displays under downloaded maps.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Maps for phones shipped in China
1/18/2019 • 2 minutes to read
Microsoft recommends using the ChinaVariantWin10 setting instead of this legacy MCSF setting.
For a Windows mobile device shipping in China, partners must specify that the device is intended for that market
by configuring ChinaVariant setting. When enabled, maps approved by the State Bureau of Surveying and
Mapping in China are used and the maps are obtained from a server located in China.
This customization may result in different maps, servers, or other configuration changes on the device.
NOTE
If partners do not set the ChinaVariant setting to 1, partners may not ship the device in China.
Constraints
None
Instructions
1. Create a customization answer file using the contents shown in the following code sample or use the
sample MapsForChina.xml file.
2. Specify an Owner .
3. Set ChinaVariant to one of the following values:
VALUE DESCRIPTION
Testing
1. Flash the build containing this customization to a phone with a UICC.
2. Launch the maps application and verify that the maps used are the same as those approved by the State Bureau
of Surveying and Mapping in China.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Preloaded map data in the user store
1/18/2019 • 2 minutes to read
Microsoft provides a set of free map data that OEMs can preload on the phone. This data is used by the Maps
application and the map control for third-party applications. Microsoft recommends that OEMs make use of this
customization, because it greatly improves the performance of the map experience by reducing the requirement
for the dynamic download of map data. When a map is preloaded, the phone consumes less cellular data using
maps, connectivity is also not required for map browsing, searching, or routing, and users do not have to download
the map themselves.
OEMs can choose a single map region to preload from the multiple regions that are available for OEMs to
download from the Microsoft partner site(s) where the Kits are also available. OEMs can choose to store this data
in the user store. Maps are grouped into regions, but there are some restrictions. For more information about
these restrictions, see the accompanying instructions that are part of the map data download on the Microsoft
partner site(s).
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample or use the
sample PreloadedMapData.xml file.
<Static>
<!-- Specify map regions to preload in the user data store by setting Source to the
source directory location of the map region you want to preload. -->
<DataAssets Type="MapData">
<DataAsset Source="C:\Path\Maps\Europe" />
<DataAsset Source="C:\Path\Maps\Asia" />
<!-- Add additional DataAsset elements for each map region you want to preload -->
</DataAssets>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the MapData asset Source to the source directory location of the map region you want to include. For
example, if C:\Path\Maps\Europe contains the downloaded map data that you want to preload, set Source
to that directory.
To add additional maps, add a new DataAsset setting and set the source to the directory location of the
map region you want to include.
Tip You can avoid wiping preloaded maps off the internal store on the factory line using the [ResetPhoneEx] API.
For more information, see Resetting a phone during manufacturing.
Testing:
1. Flash a build that contains this customization on a phone.
2. Launch the Maps application and open Settings from the application bar.
3. Click on the Download Maps button and verify that the expected region displays under downloaded maps.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Temporary map data cache size
1/18/2019 • 2 minutes to read
When a user attempts to view map data for a location that was not preloaded or is not already installed on the
phone, map data will be downloaded to dynamically render a map. This data is stored in a temporary cache that
the Maps application maintains for this purpose. By default this cache is allowed to use a maximum of 128 MB of
storage. For phones with a limited amount of available storage, OEMs can specify that the cache only use a
maximum of 64 MB of storage. Microsoft recommends that this customization only be used for phones with a
limited amount of internal storage space. Reducing the size of the online cache for Map data does not affect the
size of the installed (or offline) maps.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample or use the
sample UseSmallerCache.xml file.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="UseSmallerCache"
Description="Use to reduce the size of the online cache for Map data to a maximum
of 64 MB of storage."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Maps/Storage">
<Setting Name="UseSmallerCache" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set UseSmallerCache to one of the following values:
VALUE DESCRIPTION
1 or Yes Reduces the size of the online cache for Map data to a
maximum of 64 MB. This does not affect installed
(offline) maps.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for notifications and quick actions
1/18/2019 • 2 minutes to read
Describes the customizations that you can configure for notifications and quick actions on the mobile device.
In this section
TOPIC DESCRIPTION
Add an LED notification option OEMs can configure a registry key to specify a selected
notification LED as the LED notification and then add an LED
notification option to the device's messaging Settings screen.
Configure Quick actions OEMs can change the default set of actions for each slot on
the Quick actions screen in Notifications & actions.
CMAS Required Monthly Test OEMs can set a registry key so monthly CMAS messages can
be delivered to the device.
Display CMAS message order Partners can configure the order in which newly received
CMAS alert messages are displayed on the device.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Add an LED notification option
1/18/2019 • 2 minutes to read
In Windows 10 Mobile, the notification LED on handheld devices may not turn on when a user receives a text
message. To improve this user experience, OEMs can configure a registry key to specify a selected notification LED
as the LED notification and then add an LED notification option to the device's messaging Settings screen.
Constraints: None
Instructions:
1. You must configure the HardwareId and InstanceId registry keys to enable LED notification on the device.
In the following example, you must change the value of HardwareId to match your device ID (DeviceId).
[HKEY_LOCAL_MACHINE\Microsoft\Shell\Nocontrol\LedAlert]
"HardwareId"="ACPI\\QCOM0D50"
"InstanceId"=dword:0
HardwareId specifies the HardwareId for the LED while InstanceId specifies the InstanceId for the
selected notification LED.
If the OS correctly detects the LED, the following registry keys will also be populated. Otherwise, they will
not be created.
"LedHwAvailable"=dword:00000001
"Intensity"=dword:00000064
"Period"=dword:000007d0
"Dutycycle"=dword:0000003c
"Cyclecount"=dword:ffffffff
Where:
Intensity - Denotes the intensity, from 0-100%
Period - Specifies the period, in milliseconds
Dutycycle - Specifies the duty cycle, from 0-100%
Cyclecount - Specifies the number of repetitions per cycle
2. To add the registry keys and their values to the OS image, create a new .pkg.xml file or modify an existing
one and then add a RegKeys element to the .pkg.xml.
The following example shows how to do this.
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
Owner=""
Component=""
SubComponent=""
OwnerType="OEM"
ReleaseType="">
<Components>
<OSComponent>
<RegKeys>
<RegKey KeyName="$(hklm.software)\Microsoft\Shell\Nocontrol\LedAlert">
<RegValue
Name="HardwareId"
Type="REG_SZ"
Value="ACPI\QCOM0D50"
/>
<RegValue
Name="InstanceId"
Type="REG_DWORD"
Value="0"
/>
</RegKey>
</RegKeys>
</OSComponent>
</Components>
</Package>
Specify the values for the Owner, Component, SubComponent, and ReleaseType. For example:
Owner="Contoso"
Component="LEDNotification"
SubComponent="EnableLEDAlert"
ReleaseType="Test"
You must also replace the Value for HardwareId to one that matches your LED's DeviceId.
3. Name and save your .pkg.xml file, then generate a package (.spkg) using the .pkg.xml as input.
4. After you've created the .spkg, define the specific types of image builds that you want to contain the
package.
For example, the following code snippet shows a sample OEM feature manifest (FM ) file that may contain
the .spkg that includes the customization:
In this example, replace SourceDirectory with the location that contains the .spkg that you created in the
previous step. Also, replace the example Contoso.LEDNotification.EnableLEDAlert.spkg with the actual
name of the .spkg file. FeatureID specifies the ID that you're associating with the .spkg. You can provide a
different name if you'd like.
e. Once you've defined the feature, modify your OEMInput.xml file to add a Features element (if one
doesn't already exist), add a new OEM child element (if one doesn't already exist), and add a new
Feature entry with the name of the feature that you just defined.
For example, the OEMInput.xml entry for the feature you defined in the previous step will look like this:
<Features>
<OEM>
<Feature>WEH_LEDALERT</Feature>
</OEM>
</Features>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configure Quick actions
1/18/2019 • 2 minutes to read
OEMs can change the default set of actions for each slot on the Quick actions screen in Notifications & actions.
The Notifications & actions settings screen contains a section at the top for users to configure Quick actions,
which are actions that users can have available for quick access or without having to open the apps list or the
settings screen to find them. Each quick action has a slot. If a user selects a quick action to go into an occupied slot
(for example, Slot 1), and the chosen action already exists in another slot (for example, Slot 2), the two quick
actions will swap so that the user-selected action always moves to the slot that the user has selected even though
the action may already be in another slot.
NOTE
In Windows 10 Mobile, the quick actions are not configurable through MCSF settings or Windows provisioning. OEMs must
directly set the registry key to change the OS default quick actions.
Slots are ordered right-to-left so Slot 1 is always on the right and Slot 5 only appears in large screen devices.
The default pinned quick actions for 4-slot mobile devices are:
Slot 4: Wi-Fi
Slot 3: Bluetooth
Slot 2: Rotation lock
Slot 1: All settings
The default pinned quick actions for 5-slot mobile devices are:
Slot 5: Camera
Slot 4: Wi-Fi
Slot 3: Bluetooth
Slot 2: Rotation lock
Slot 1: All settings
OEMs can change the default quick action for each slot. If an OEM chooses not to configure all the slots available
for the device, only the slot that was set will be changed and the other default Windows quick actions will remain
set.
A slot cannot be empty. If an OEM sets the value for Slot 5, but the mobile device is not a large screen device, the
OS ignores the value set for Slot 5. If an invalid value is used, the OS ignores the setting.
Instructions:
To override the default pinned quick actions
Set the HKLM\Software\Microsoft\Shell\OEM\QuickActions\Slot registry key and then set the value of the slot
number that you want to configure to a friendly name value.
The following table shows the friendly names that you can use as the value for the slot number that you
want to configure.
FRIENDLYNAME DESCRIPTION
For example, to change Slot 4 on 4-slot mobile devices from Wi-Fi to Airplane mode, set the value for
HKLM\Software\Microsoft\Shell\OEM\QuickActions\Slot\4 to Microsoft.QuickAction.AirplaneMode.
Testing:
1. Flash the build that contains this customization to a mobile device.
2. Verify that the default quick action(s) that you set are showing up in the correct slot(s). For large screen
devices, verify that there are 5 quick actions that are showing up instead of 4.
3. Navigate to the Quick actions screen in Notifications & actions screen and verify that the default quick
settings action(s) that you set are also showing up in the correct slots.
Related topics
Prepare for Windows mobile development
CMAS Required Monthly Test
1/18/2019 • 2 minutes to read
Windows supports the Commercial Mobile Alert System (CMAS ) Required Monthly Test (RMT) messages. To
enable this, OEMs can set a registry key so messages can be delivered to the device. If this registry key is turned
on, RMT messages will be displayed to the user in the same manner as other CMAS message types.
The alert title and message sender text used for threading will be Required Monthly Test.
There will be no changes made to the emergency alerts user settings on the device. RMT messages will only be
configured by the OEM and users will not be able to change the setting. No user setting in Emergency alerts will
have any impact on the RMT messages. For example, if the user selects Presidential only from the emergency
messages settings, and the OEM turns on the CMAS RMT registry key, the user will still receive RMT messages.
Usually, this setting will only be turned on for test devices used by mobile operators. The CMAS RMT registry key
will configure ports 4380 and 4381 although the latter is not RMT and is used by some mobile operators for
testing purposes only.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="ShowRequiredMonthlyTest"
Description="Use to enable phones to receive CMAS RMT messages."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="ShowRequiredMonthlyTest" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set ShowRequiredMonthlyTest to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash the build containing this customization to a device.
2. The length of time may vary, but the device should now be configured to receive RMT messages. The alert
title and message text sender will show as Required Monthly Test.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Display CMAS message order
1/18/2019 • 2 minutes to read
Partners can configure the order in which newly received CMAS alert messages are displayed on the device.
If the device receives at least one CMAS alert message which has not been acknowledged by the user, and another
CMAS alert message arrives on the device, partners can configure the order in which the newly received alert
messages are displayed on the device regardless of the service category of the alert. Users will not be able to
change the display order once it has been set.
If partners do not specify a value for this customization, the default first in/first out (FIFO ) display order is used.
Users will be able to acknowledge the messages in the reverse order they were received.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Messaging/GlobalSettings">
<Setting Name="DisplayCmasLifo" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Value to one of the following:
VALUE DESCRIPTION
0 or 'False' Sets a First in/first out (FIFO) message order. Users will
not be able to see newer alert messages until they
have dismissed the previous alert message(s).
Testing Steps:
Work with your mobile operator partner to fully test this customization on their network.
Verify that the order in which CMAS alert messages are displayed on the device that contains the customization
matches the setting (FIFO or LIFO ) that you have specified.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Emergency notifications
1/18/2019 • 9 minutes to read
Partners can turn on support for various government emergency notification programs.
Windows supports the following types of government emergency notification programs:
For devices sold in the United States, partners can turn on support for the Commercial Mobile Alert
Service (CMAS ) if the mobile operator’s network supports it. Partners can also specify the alert type
defaults. CMAS is a federal program in the United States in which users can receive emergency notifications
as high priority SMS messages in situations such as national emergencies, natural disasters, severe weather,
and AMBER alerts.
The OS also supports handling of CMAS messages for one additional language on a separate range of
CMAS channels (4383 – 4395) in compliance with the ATIS -0700013 (Implementation Guidelines for
Mobile Device Support of Multi-Language CMAS ) specification.
For devices sold in Japan, partners can turn on the Earthquake & Tsunami Warning System (ETWS ) if the
mobile operator’s network supports it.
For devices sold in the Netherlands, partners can turn on the Netherlands Announcements if the mobile
operator’s network supports it.
For devices sold in Chile, partners can enable the device to receive LAT-Alert Local Alerts if the mobile
operator’s network supports it.
For devices sold in Taiwan, partners can enable the device to receive Taiwan Alerts.
Emergency messages are displayed as notifications at the top of the screen until they are dismissed by the user.
Emergency messages do not support reply, forward or copy and paste. They can be received even in storage full
conditions. Emergency messages use a distinct alert sound when they arrive as well as vibration.
Except for LAT-Alert Local Alerts, when an alert notification shows, users can dismiss the alert message or tap a
Settings button to go to the messaging settings page where they can easily change their emergency alert settings
after receiving an alert. The Settings button is only shown if the OS has been configured to show the emergency
alert settings page. This button is shown for all types of emergency alerts where there is a user-visible settings
page to let users control the alerts. If there are other alert messages, these messages will not be dismissed. The
user always has to close each alert individually.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Modify the following answer file code sample based on the instructions given for the alert type that you
want to enable.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="EmergencyNotifications"
Description="Use to enable and configure the settings for certain government
emergency notification programs."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<!-- Enable and configure the settings for the emergency notification program program.
See the sections for the emergency notification program for more information about the settings
you can enable. -->
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. The EmOperatorEnabled setting specifies the emergency alert user interface to be shown to the user. The
values for specific country/region alert systems are shown in their respective sections.
However, if EmOperatorEnabled is not set, the default value is 0 or none.
Configure the settings for the government emergency notification program that you want to enable. Each
section shows the correct EmOperatorEnabled value that you need to use to enable the government
emergency notification program and the other settings you can use to fully configure the alert system:
0 None
EMOPERATORENABLED VALUE DESCRIPTION
1 CMAS Alerts
2 NL Alerts
3 ETWS Alerts
4 LAT Alerts
5 Taiwan Alerts
Testing steps:
Work with your mobile operator to test this customization on their network.
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/EmergencyAlertOptions">
<Setting Name="EmOperatorEnabled" Value="1" />
<Setting Name="CmasExtremeAlertEnabled" Value="" />
<Setting Name="CmasSevereAlertEnabled" Value="" />
<Setting Name="CmasAMBERAlertEnabled" Value="" />
<Setting Name="SevereAlertDependentOnExtremeAlert" Value="" />
</Settings>
<!-- To fully configure CMAS, you must also set the per-device and per-IMSI DefaultMCC setting.
<Settings Path="CellCore/PerDevice/SMS">
<Setting Name="DefaultMCC" Value="" />
</Settings>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/SMS">
<Setting Name="DefaultMCC" Value="" />
</Settings>
-->
The per-device path covers the scenario when an unexpected SIM target is inserted. In this case, the value
for the per-device DefaultMCC will be used as the device-wide default value. The per-IMSI DefaultMCC value
is used when a specific SIM is defined within the Target and a SIM matching the Target conditions is
inserted into the device. In this case, the per-IMSI DefaultMCC value will override whatever value you set in
the per-device configuration.
To fully allow device users to receive CMAS messages applicable to the United States, OEMs should set the
DefaultMCC value to either 310 or 311. Do not use 001 even when performing a test SIM card scenario.
If you are migrating CMAS alert settings from previous Windows Phone releases to Windows 10 Mobile, use the
following mapping as a guide for restoring users' settings:
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/EtwsSoundEnabled">
<Setting Name="EmOperatorEnabled" Value="3" />
<Setting Name="EtwsSoundEnabled" Value="" />
</Settings>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/NlAlertOptions">
<Setting Name="EmOperatorEnabled" Value="2" />
<Setting Name="CmasExtremeAlertEnabled" Value="" />
</Settings>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/LatAlertOptions">
<Setting Name="EmOperatorEnabled" Value="4" />
<Setting Name="LatLocalAlertEnabled" Value="" />
</Settings>
2. Keep the EmOperatorEnabled value set to 4. This specifies LAT-Alert Local alerts.
3. Set LatLocalAlertEnabled to 0 (Off) or 1 (On) to enable LAT-Alert Local alerts to be received.
Note Users will not be able to configure nor disable LAT-Alert Local alerts through the Messaging settings
screen.
Taiwan Alerts
The Taiwan Emergency Alerts system provides the following support:
Primary and secondary CMAS channels, including Required Monthly Test.
Users see primary language messages if the corresponding setting is enabled, such as Amber Alerts.
The secondary language is dependent on the language ID of the sent broadcast being equivalent to
the system's language ID. So, if the user's device language is in English and the sent broadcast comes
in through the secondary language channel with a Spanish language ID, the message will not show
up. This also applies to CMAS alerts.
Message and notification display is the same as the US CMAS behavior.
Taiwan Alert message
Cell broadcast messages are received in these channels: 911 (English) and 919 (Traditional Chinese)
Messages are displayed like regular cell broadcast messages, which means there are no special
CMAS tone or vibration.
Support for the Taiwan Emergency Alerts is a regulatory requirement for devices shipping in Taiwan, so partners
shipping devices in Taiwan must enable this customization.
Users can change the Taiwan Alert settings through the Messaging settings screen.
Instructions:
1. Use the following settings to fully configure Taiwan Emergency Alerts:
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/TaiwanAlertOptions">
<Setting Name="EmOperatorEnabled" Value="5" />
<Setting Name="TaiwanAlertEnabled" Value="" />
<Setting Name="TaiwanPresidentialAlertEnabled" Value="" />
<Setting Name="TaiwanEmergencyAlertEnabled" Value="" />
<Setting Name="TaiwanRequiredMonthlyTestEnabled" Value="" />
</Settings>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for phone calls
1/18/2019 • 5 minutes to read
Provides information about customizations you can configure for the phone or dialer app including branding,
visual voicemail, caller ID matching, dialer codes, and more.
In this section
TOPIC DESCRIPTION
Adjust the call duration information for CDMA calls On CDMA devices, call durations in the call history may
include the time spent before the call was connected. This
behavior results in an incorrect calculation of the call duration.
OEMs can address this potential issue by enabling this
customization, which excludes the time spent before the call
was connected. When enabled, the customization will also
adjust the call duration to indicate that zero time was spent if
the call ends before the connection was made.
Always display the dialed phone number OEMs can change the default behavior so that the number
that's displayed in the call screen always matches the dialed
phone number even if the number that the call connected to
may be different.
Branding for phone calls Partners can add a custom image that displays the mobile
operator name or logo on the Incoming call screen.
Caller ID matching Mobile operators can modify the default mapping values
specified by Microsoft using the settings in the
Phone/CallIDMatchOverrides settings group. If mobile
operators specify a number of digits that is outside the OS-
supported range of 4-20, the OS defaults back to 6 digits. For
any country/region that doesn't exist in the default mapping
table, mobile operators can use the legacy CallIDMatch
setting to specify the minimum number of digits to use for
matching caller ID.
Conditional call forwarding Partners can now show the call forwarding icon for conditional
call forwarding as well as unconditional call forwarding.
Configure DTMF tones Partners can configure DTMF tone settings when VoLTE calls
are supported.
Configure message waiting indicator notifications Depending on the scenario that partners want to support,
partners can configure the voicemail system so the device
either ignores or responds to message waiting indicator (MWI)
notifications.
TOPIC DESCRIPTION
Dialer codes for supplementary services Partners can define a dialer code to use for services like
changing the pin, changing the password, caller ID, call
forwarding, call waiting, call blocking, and so on.
Dialer codes to launch diagnostic applications To use an OEM diagnostic app in environments such as a
service center, OEMs can configure special dialer codes to
start the application. OEMs can also configure dialer codes to
start apps to interact with mobile operator networks or to
diagnose phone malfunctions.
Dial string overrides when roaming Partners can map certain dial strings to corresponding
override numbers that are dialed when the user is roaming. To
the user, it will appear as if the original number was dialed.
Disable link to contact card in active call screen Disable the ability to access a contact's information while in
the active call screen.
Disable video upgrade Store navigation Disable automatic navigation to the Microsoft Store when the
user attempts a video upgrade during a phone call, for which
there is no installed app.
Disable voicemail phone number display Disable voicemail phone number display on the call progress
screen.
Dismiss the last USSD waiting dialog Dismiss the last USSD waiting dialog in the case where there is
a sequence of USSD or SIM app dialogs.
Emergency phone numbers Partners can edit the list of valid emergency phone numbers
for the market in which the phone will be sold.
Enable call recording by default Partners can configure devices to have the call recording
feature enabled by default.
Enable IMS services Partners can identify which IP Multimedia Subsystem (IMS)
services, if any, are enabled on the device by default. The IMS
services that can be identified are: IMS, SMs over IMS, Voice
over IMS, and Video over IMS.
Enable RCS OEMs can configure the RCS settings using the multivariant
support in the OS. Using these settings, you can specify
whether the device is RCS-enabled,specify whether to use
single registration for RCS, and configure the user experience
for RCS.
Hide call forwarding Partners can hide the user option for call forwarding.
Maximum number of participants in a VoLTE conference call OEMs can specify the maximum number of participants or
callers that can be added to a voice over LTE (VoLTE)
conference call based on the mobile operator's network
requirements.
TOPIC DESCRIPTION
Network-controlled caller ID settings For markets or mobile operators that require support for
network-controlled settings for outgoing caller ID, OEMs can
configure the setting to indicate whether the network default
setting is allowed and specify the default initial value for the
caller ID setting.
Override the voicemail number on the UICC Mobile operators can override the voicemail number on the
UICC with a different voicemail number that is configured in
the registry.
Supplementary services exclusions Partners can define a dialer code to use for 3GP USSD services
like changing the pin, changing the password, caller ID, call
forwarding, call waiting, call barring, and so on. Partners can
define new mappings or disable the default mappings. To
define a new mapping or change the behavior of a provided
supplementary service mappings, see Dialer codes for
supplementary services
Trim supplementary service codes OEMs can trim supplementary service codes to ensure
network compatibility. When a code is sent using a USSD
string in a ##code# format,
EnableSupplementaryServiceEraseToDeactivateOverride
trims the USSD string so #code# is sent. This customization
applies only to codes that use the ##code# format.
Use OK for USSD dialogs To meet certain market requirements or user expectations,
OEMs can change the button label in USSD dialogs from
Close (the default) to OK.
Use HD audio codec for call branding OEMs can customize call progress branding when a call is
made using a specific audio codec.
Use voice domain for emergency call branding To meet mobile operator requirements, OEMs can enable the
voice domain to decide whether to use Emergency calls only
or No service in the phone UI branding.
Voice over LTE call indication Partners can add a string to the phone's call progress screen
to indicate if the active call is a voice over LTE (VoLTE) call
depending on whether the phone call is in high quality voice
status such as when using AMR-WB codec.
Voicemail number for CDMA phones CDMA mobile operator partners who do not have the
voicemail numbers on the device SIM can configure the
voicemail number for their devices.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Adjust the call duration information for CDMA calls
1/18/2019 • 2 minutes to read
On CDMA devices, call durations in the call history may include the time spent before the call was connected. This
behavior results in an incorrect calculation of the call duration. OEMs can address this potential issue by enabling
this customization, which excludes the time spent before the call was connected. When enabled, the customization
will also adjust the call duration to indicate that zero time was spent if the call ends before the connection was
made.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name="AdjustCDMACallTime" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the AdjustCDMACallTime setting to one of the following values:
VALUE DESCRIPTION
Testing steps:
Work with your CDMA mobile operator partner to test this customization on their network.
1. Flash the build containing this customization to a device that's connected to a CDMA network.
2. Set up the device and then call a valid phone number until the call is connected.
If you set AdjustCDMACallTime to 1 or 'True', go to the call History and confirm that the duration for the
phone call only includes the time spent from when the phone call was connected and until you disconnected
the call.
3. Call a valid phone number, but end the call before the call can be connected.
If you set AdjustCDMACallTime to 1 or 'True', go to the call History and confirm that the duration for the
phone call indicates zero or no time spent on the call.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Always display the dialed phone number
1/18/2019 • 2 minutes to read
By default, when a user dials a phone number and the call is connected, the number that shows up in the call
screen is the phone number that the call is connected to. This connected phone number may not match the phone
number that the user dialed.
OEMs can change the default behavior so that the number that's displayed in the call screen always matches the
dialed phone number even if the number that the call connected to may be different.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name="DisplayNumberAsDialed" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the DisplayNumberAsDialed setting to one of the following values:
VALUE DESCRIPTION
Testing steps:
Work with your mobile operator partner to test this customization on their network.
1. Flash the build containing this customization to a phone.
2. Set up the phone and then call a valid phone number until the call is connected.
3. If you set DisplayNumberAsDialed to 1 or 'True', try dialing your voicemail number or your subscriber
number and verify that the number (as dialed) is displayed in the phone's call screen UI without the call
translation to the voicemail number.
4. If you set DisplayNumberAsDialed to 1 or 'True', try dialing one of the supplementary codes (which look like
#227 or *227, for example) and verify that the number (as dialed) is displayed in the phone's call screen UI
without the call translation to the phone number that these codes translate to.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Branding for phone calls
1/18/2019 • 3 minutes to read
Partners can add a custom image that displays the mobile operator name or logo on the Incoming Call screen.
This image can be hidden when the device is roaming.
Note that the Call Progress screen, Call History screen, the 12-key dialer, and the phone tile on the Start page
display the PLMN string of the mobile operator, but this is not customizable. It is possible to display error
messages about the registration status on these components if an invalid UICC is inserted. Alternately, partners
can choose to display a longer version of the error messages that includes a reject code.
VoIP applications can also add a custom image that displays the mobile operator name and logo to the Incoming
Call screen.
The custom image must meet the following requirements:
.PNG format
40 px high and no more than 180 px wide
Transparent background
White logo – This can contain text or an image, but keep in mind that the image is not localized, and so any
text should work regardless of the display language.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/BrandingInformation">
<Asset Name="BrandingImages" Source="C:\Path\BrandingImagePhoneScreens.png" />
<Setting Name="CellularBrandingImagePath" Value="BrandingImagePhoneScreens.png" />
<Setting Name="BrandingFlags" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Add the custom branding image. To do this:
a. Add an Asset element and set the Name to BrandingImages.
b. Set the asset's Source value to the location and name of the custom .png file. For example:
C:\Path\BrandingImagePhoneScreens.png
4. Set the value of CellularBrandingImagePath to the name of the custom .png file. For example:
BrandingImagePhoneScreens.png
5. Specify when the branding image should be displayed or display registration status and reject codes in the
phone UI by setting the value of BrandingFlags .
The default value of the BrandingFlags setting is 0x000000FB. This value can be replaced by a bit-wise OR
of the following flags:
Testing steps:
1. Flash a build containing this customization to a phone that contains a UICC, or that is otherwise equipped
to receive phone calls.
2. Depending on the flags you set, verify that the branding image appears appropriately on the Incoming Call
screen. The branding image is added as an overlay on top of the contact image.
3. If you set DisplayEmergencyCallStatus , verify that the image is visible during emergency calls.
4. Remove the UICC.
5. Depending on the flags you set, verify that the registration status appears appropriately on the Call History,
Call Progress, and Incoming Call screens, as well as the dialer and the phone tile.
6. If you set ExtendedRejectCodes , verify that messages that are displayed to alert the user that they cannot
make calls include reject codes. For information about which screens are affected, see Extended error
messages for reject codes.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Caller ID matching
1/18/2019 • 9 minutes to read
Each country/region has a varying phone number length and style so with Windows 10 Mobile the OS maps a
different minimum number of digits for matching caller ID that defaults to each country/region setting on the
mobile device. This enables mobile users to get the proper settings for their preferred country/region.
In Windows 10 Mobile:
Mobile operators can modify the default mapping values specified by Microsoft using the settings in the
Phone/CallIDMatchOverrides settings group. For more information on how to do this, see Overriding the OS
default minimum number of digits for caller ID matching.
If mobile operators specify a number of digits that is outside the OS -supported range of 4-20, the OS
defaults back to 6 digits.
For any country/region that doesn't exist in the default mapping table, mobile operators can use the legacy
CallIDMatch setting to specify the minimum number of digits to use for matching caller ID. For more
information on how to do this, see Specifying the minimum number of digits for caller ID matching for
other countries/regions.
If OEMs do not customize this setting based on mobile operator requirements, the OS uses the current default of
6, which is the last 6 digits of the phone number.
Note Microsoft does not recommend changing the default value without a full and complete testing of how
number matching will be affected on the phone. The testing process should include numbers with and without
country codes, "+", area codes, NDD, IDD, and other dialing variations. The default value has generally been found
to yield the best matching results for all various dialing options for a number.
3 Afghanistan 6
4 Algeria 8
GEOID COUNTRY/REGION CID
5 Azerbaijan 6
6 Albania 6
7 Armenia 6
8 Andorra 6
9 Angola 9
10 American Samoa 6
11 Argentina 7
12 Australia 8
14 Austria 8
17 Bahrain 8
18 Barbados 7
19 Botswana 7
20 Bermuda 6
21 Belgium 6
22 Bahamas, The 6
23 Bangladesh 10
24 Belize 6
26 Bolivia 6
27 Myanmar 6
28 Benin 6
29 Belarus 6
30 Solomon Islands 6
32 Brazil 8
34 Bhutan 6
GEOID COUNTRY/REGION CID
35 Bulgaria 6
37 Brunei 6
38 Burundi 6
39 Canada 10
40 Cambodia 6
41 Chad 6
42 Sri Lanka 9
43 Congo 6
44 Congo (DRC) 6
45 China 11
46 Chile 8
49 Cameroon 7
50 Comoros 6
51 Colombia 10
54 Costa Rica 8
56 Cuba 6
57 Cabo Verde 6
59 Cyprus 6
61 Denmark 8
62 Djibouti 6
63 Dominica 6
65 Dominican Republic 7
66 Ecuador 8
67 Egypt 7
GEOID COUNTRY/REGION CID
68 Ireland 6
69 Equatorial Guinea 6
70 Estonia 6
71 Eritrea 6
72 El Salvador 8
73 Ethiopia 6
75 Czech Republic 8
77 Finland 9
78 Fiji Islands 6
80 Micronesia 6
81 Faroe Islands 6
84 France 6
86 Gambia, The 6
87 Gabon 6
88 Georgia 6
89 Ghana 8
90 Gibraltar 6
91 Grenada 6
93 Greenland 6
94 Germany 7
98 Greece 8
99 Guatemala 8
100 Guinea 6
101 Guyana 6
103 Haiti 6
GEOID COUNTRY/REGION CID
106 Honduras 8
108 Croatia 8
109 Hungary 8
110 Iceland 6
111 Indonesia 6
113 India 10
116 Iran 10
117 Israel 7
118 Italy 9
121 Iraq 7
122 Japan 9
124 Jamaica 7
126 Jordan 7
129 Kenya 9
130 Kyrgyzstan 6
133 Kiribati 6
134 Korea 6
136 Kuwait 8
137 Kazakhstan 7
GEOID COUNTRY/REGION CID
138 Laos 6
139 Lebanon 7
140 Latvia 6
141 Lithuania 6
142 Liberia 6
143 Slovakia 8
145 Liechtenstein 6
146 Lesotho 6
147 Luxembourg 6
148 Libya 7
149 Madagascar 6
152 Moldova 6
154 Mongolia 6
156 Malawi 6
157 Mali 7
158 Monaco 6
159 Morocco 6
160 Mauritius 6
162 Mauritania 6
163 Malta 6
164 Oman 8
165 Maldives 6
166 Mexico 7
167 Malaysia 6
GEOID COUNTRY/REGION CID
168 Mozambique 9
173 Niger 6
174 Vanuatu 6
175 Nigeria 8
176 Netherlands 8
177 Norway 6
178 Nepal 10
180 Nauru 6
181 Suriname 6
182 Nicaragua 8
185 Paraguay 9
187 Peru 8
190 Pakistan 9
191 Poland 9
192 Panama 8
193 Portugal 7
195 Palau 6
196 Guinea-Bissau 6
197 Qatar 8
198 Reunion 6
200 Romania 8
GEOID COUNTRY/REGION CID
201 Philippines 8
203 Russia 6
204 Rwanda 6
208 Seychelles 6
210 Senegal 8
212 Slovenia 6
215 Singapore 6
216 Somalia 6
217 Spain 9
219 Sudan 6
220 Svalbard 6
221 Sweden 7
222 Syria 6
223 Switzerland 6
227 Thailand 6
GEOID COUNTRY/REGION CID
228 Tajikistan 6
231 Tonga 6
232 Togo 6
234 Tunisia 7
235 Turkey 6
236 Tuvalu 6
237 Taiwan 9
238 Turkmenistan 6
239 Tanzania 9
240 Uganda 9
241 Ukraine 6
246 Uruguay 8
247 Uzbekistan 6
251 Vietnam 9
254 Namibia 6
259 Samoa 6
GEOID COUNTRY/REGION CID
260 Swaziland 6
261 Yemen 8
263 Zambia 9
264 Zimbabwe 6
270 Montenegro 6
271 Serbia 6
273 Curaçao 6
300 Anguilla 6
301 Antarctica 6
302 Aruba 6
321 Guadeloupe 6
322 Guam 6
324 Guernsey 6
328 Jersey 6
330 Martinique 6
331 Mayotte 6
332 Montserrat 6
335 Niue 6
341 Saipan 6
347 Tokelau 6
Constraints: FirstVariationOnly
Instructions:
To modify the Microsoft-specified minimum number of digits to use for caller ID matching for one or more
countries/regions, see the following example.
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="CallerIDMatchingOverrides"
Description="Use to modify the default number of digits to use for matching caller
ID."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Phone/CallIDMatchOverrides">
<Setting Name="2" Value="" /> <!-- Use to modify the default CID for Antigua and Barbuda -->
<Setting Name="3" Value="" /> <!-- Use to modify the default CID for Afghanistan -->
<Setting Name="4" Value="" /> <!-- Use to modify the default CID for Algeria -->
<Setting Name="5" Value="" /> <!-- Use to modify the default CID for Azerbaijan -->
<Setting Name="6" Value="" /> <!-- Use to modify the default CID for Albania -->
<Setting Name="7" Value="" /> <!-- Use to modify the default CID for Armenia -->
<Setting Name="8" Value="" /> <!-- Use to modify the default CID for Andorra -->
<!-- And so on if you are modifying several values -->
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. In the above mapping table, identify the Setting Name that corresponds to the country/region you want to
modify (noted by the value in the GEOID column in the above table) and then set the Value for that
country/region to a new number (different from the default CID ) that you want to use as the minimum
number of digits for caller ID matching. The new Value must be within the OS -supported range of 4-20.
For example, to change the default minimum caller ID matching for Antigua and Barbuda (
Setting Name="2" ) and the Åland Islands ( Setting Name="10028789" ) from the default 6 to a new minimum
of 8, the following settings can be set within the MCSF customization answer file.
<Static>
<Settings Path="Phone/CallIDMatchOverrides">
<Setting Name="2" Value="8" /> <!-- Antigua and Barbuda -->
<Setting Name="10028789" Value="8" /> <!-- Åland Islands -->
</Settings>
</Static>
</ImageCustomizations>
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name="CallIDMatch" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Value to the number of digits used in the complete phone number. The Value must be within the
OS -supported range of 4-20.
Testing steps:
The full testing process should include numbers with and without country codes, "+", area codes, NDD, IDD, and
other dialing variations.
1. Flash the build containing this customization to a phone that has a SIM.
2. Have a second phone with a phone number.
3. Go to the Accounts screen in Settings. Configure an email account.
4. Go to the People app and add a new contact with a name and the phone number of the second phone.
5. Call the phone from the second phone.
6. Verify that the caller ID is matched and the contact name is displayed.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Cause codes
1/18/2019 • 5 minutes to read
On GSM networks, OEMs can enable mobile operator-defined codes, or cause codes, to show in the UI whenever
a phone call is terminated unexpectedly.
Cause codes indicate the reason why the call ended unexpectedly and are used by mobile operators to
troubleshoot customer issues and determine the source of network problems. Note that Windows 10 Mobile does
not support cause codes for CDMA networks.
An OEM must work with their mobile operator partner to support this customization. The mobile operator partner,
through the OEM, must do the following:
1. Specify the cause codes that must be registered. These are the cause codes that the mobile operator is
interested in and the OEM uses these codes to populate the registry. Cause codes that are not registered
will not be logged and will not show up in the device's UI.
2. Provide the localized string or message to display for each specific cause code in all languages
corresponding to markets or locales that the mobile network covers. Each string is limited to 255 Unicode
characters. If a cause code is registered, but no localized string is provided, the device UI will only show the
numerical cause code.
This customization enables the cause code to persist in the call history so that the cause code is still visible even
after the device reboots. The user can also view the error in the call history UI if a cause code is available.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="CauseCodes"
Description="Use to enable operator-defined codes, or cause codes, to show in the
UI whenever a phone call is terminated unexpectedly."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Phone/CauseCodeRegistrationTable">
<!-- Replace $(CAUSECODEMCCMNC) with the appropriate "MCCMNC" pairs for your mobile operator. Both
MCC and MNC have to be three digits.
Set the Value to the network descriptor or ID. ID values can be used more than once. -->
<Setting Name="NetworkDescriptor/$(CAUSECODEMCCMNC)" Value="" />
<Setting Name="NetworkDescriptor/$(CAUSECODEMCCMNC)" Value="" />
</Settings>
<!-- Register the cause codes for the mobile operator -->
<!-- Define a cause code and localized strings for that cause code. -->
<Settings Path="Phone/CauseCodeRegistrationTable/$(NETWORKDESCRIPTOR)">
<Setting Name="CauseCode/$(CAUSECODE)/$(LOCALEID)" Value="" />
<Setting Name="CauseCode/$(CAUSECODE)/$(LOCALEID)" Value="" />
<Setting Name="CauseCode/$(CAUSECODE)/$(LOCALEID)" Value="" />
</Settings>
<!-- Define a cause code and localized strings for that cause code. -->
<Settings Path="Phone/CauseCodeRegistrationTable/$(NETWORKDESCRIPTOR)">
<Setting Name="CauseCode/$(CAUSECODE)/$(LOCALEID)" Value="" />
<Setting Name="CauseCode/$(CAUSECODE)/$(LOCALEID)" Value="" />
<Setting Name="CauseCode/$(CAUSECODE)/$(LOCALEID)" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To register the mobile network
a. In the Phone/CauseCodeRegistrationTable settings group, replace $ (CAUSECODEMCCMNC ) in
NetworkDescriptor/$(CAUSECODEMCCMNC) with the MCCMNC pair that corresponds to a
Network_Descriptor.
b. Use the format MCCMNC for $ (CAUSECODEMCCMNC ). The MCC/MNC pairs must follow this format
—each must have 3 digits specified. For example, if you have an MCC/MNC pair that corresponds to
412/89, you must store this in the registry as 412089 .
The setting value for each MCC/MNC combination will be the relative path to another setting that
will contain all the cause codes information for that network.
There must be one entry for each MCC/MNC pair that is supported by the mobile operator. The
same network ID or descriptor can be used for all MCC/MNC entries, or multiple IDs can be defined.
c. Set Network_Descriptor as the value. You can use the mobile operator ID for the
Network_Descriptor. The network descriptor can be arbitrarily chosen by the mobile operator. For
example, for the MCC/MNC pair 412/123 and 412/125, the mobile operator can choose "MOID2" as
the network descriptor. MCC/MNC pairs that have the same network descriptor or mobile operator
IDs will share the same cause code.
The following example shows how to describe two networks that have MCC/MNC pairs of 412/89,
412/123, and 412/125 and network descriptors MOID1, MOID2, and MOID2, respectively:
<Settings Path="Phone/CauseCodeRegistrationTable">
<Setting Name="NetworkDescriptor/412089" Value="MOID1" />
<Setting Name="NetworkDescriptor/412123" Value="MOID2" />
<Setting Name="NetworkDescriptor/412125" Value="MOID2" />
</Settings>
4. To specify the cause codes and localized strings for the cause code
a. In the Phone/CauseCodeRegistrationTable/$(NETWORKDESCRIPTOR) settings path, replace
$ (NETWORKDESCRIPTOR ) with the network IDs or descriptors you defined in the previous section.
For example, if you have two network descriptors or mobile operator IDs called MOID1 and MOID2,
define a settings group for each as shown in the following example.
<Settings Path="Phone/CauseCodeRegistrationTable/MOID1">
<Setting Name="CauseCode/$(CAUSECODE)/$(LOCALEID)" Value="" />
<Setting Name="CauseCode/$(CAUSECODE)/$(LOCALEID)" Value="" />
</Settings>
<Settings Path="Phone/CauseCodeRegistrationTable/MOID2">
<Setting Name="CauseCode/$(CAUSECODE)/$(LOCALEID)" Value="" />
<Setting Name="CauseCode/$(CAUSECODE)/$(LOCALEID)" Value="" />
</Settings>
b. For each network group, specify the cause codes, the corresponding locale IDs, and the localized
strings for the cause codes.
$ (CAUSECODE ) must be the decimal representation of the cause code.
$ (LOCALEID ) must be the locale ID identifying the locale for the cause code string.
Value must be set to the localized string to display for the cause code specific to the locale
$ (LOCALEID ).
For example, to register a cause code 1 for MOID1 and specify all the localized strings for cause code
1 for the 0409 (English (US )), 0416 (Portuguese (Brazil)), and 040A (Spanish (Spain)) locales, add the
following settings and values:
<Settings Path="Phone/CauseCodeRegistrationTable/MOID1">
<Setting Name="CauseCode/1/0409" Value="Dialed number is unavailable -01-" />
<Setting Name="CauseCode/1/0416" Value="Numero discado indisponivel -01-" />
<Setting Name="CauseCode/1/040A" Value="Marcacion no disponible -01-" />
</Settings>
In this example, if the device's locale is set to English (US ), the OS will look for the appropriate entry
in the registry and display "Dialed number is unavailable -01-". If the device's locale is set to
Portuguese (Brazil), "Numero discado indisponivel -01-" will be displayed, and so on.
Example:
The following example customization answer file shows how to register two mobile networks (MOID1 and
MOID2), specify their corresponding MCC/MNC pairs, and register a set of cause codes for both mobile networks
in a limited number of locales.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="CauseCodes"
Description="Cause codes for MOID1 and MOID2."
Owner="Contoso"
OwnerType="OEM">
<Static>
<Settings Path="Phone/CauseCodeRegistrationTable">
<Setting Name="NetworkDescriptor/412089" Value="MOID1" />
<Setting Name="NetworkDescriptor/412123" Value="MOID2" />
<Setting Name="NetworkDescriptor/412125" Value="MOID2" />
</Settings>
</Static>
</ImageCustomizations>
Testing:
An OEM must work with their mobile operator partner to fully test this customization on the mobile operator's
network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Conditional call forwarding
1/18/2019 • 2 minutes to read
Partners can now show the call forwarding icon for conditional call forwarding as well as unconditional call
forwarding.
Partners should not enable this feature for networks that support voicemail, which is implemented on the network
as conditional call forwarding so the call forwarding icon would also be on.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Shell/SystemTray/ConditionalCallForwarding">
<!-- Set the value to 0 or 'Disabled' (shows the icon for unconditional call forwarding only), or
set to 1 or 'Enabled' (shows the icon for both conditional and unconditional call forwarding)
-->
<Setting Name="ConditionalCallForwardingIcon" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set ConditionalCallForwardingIcon to one of the following values:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device with a UICC.
2. Set conditional call forwarding using the following USDD codes as specified in the topic Supplementary
services exclusions:
61 (FWDNOREPLY )
62 (FWDNOTREACHABLE )
67 (FWDBUSY )
3. Depending on the market, verify that the call forwarding icon appears based on the
IndicateConditionalCallForwarding registry setting.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configure DTMF tones
1/18/2019 • 2 minutes to read
Partners can configure the following DTMF tone settings when VoLTE calls are supported:
1. Duration of the DTMF tones, and the delay, or pause, between DTMF digits.
2. Enable UX option to switch between long and short DTMF tones.
3. Enable long DTMF tones if the user presses a dialpad key for an extended period.
<Settings Path="CellCore/PerDevice/General">
<Setting Name="DTMFOnTime" Value="" />
<Setting Name="DTMFOffTime" Value="" />
</Settings>
</ImageCustomizations>
2. Specify an Owner .
3. To specify the length of time, in milliseconds, to generate the DTMF tone, set DTMFOnTime to a value between
64 and 1000 (inclusive). For example, a value of 160 specifies 0.16 second.
4. To specify the length of time, in milliseconds, to pause between DTMF digits, set DTMFOffTime to a value
between 64 and 1000 (inclusive). For example, a value of 120 specifies 0.12 second.
Testing
Work with your mobile operator to fully test this customization on their network.
1. Flash the build containing this customization to a phone that has VoLTE enabled.
2. Make a VoLTE call to a service where DTMF tones can be used.
3. Verify that DTMF tones are recognized correctly. Depending on the values you specified, verify the duration of
the DTMF tone and the delay between DTMF digits.
2. Specify an Owner .
3. Set ShowLongTones to one of the following values:
VALUE DESCRIPTION
2. Specify an Owner .
3. Set ContinuousDTMFEnabled to one of the following values:
VALUE DESCRIPTION
Testing
1. Flash the build that contains this customization to a phone.
2. Test this customization on both VoLTE and non-VoLTE phone calls.
If enabled, DTMF tones will last as long as the key is being pressed.
If disabled, DTMF tones will be of fixed length.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configure message waiting indicator notifications
1/18/2019 • 2 minutes to read
Depending on the scenario that partners want to support, partners can configure the voicemail system so the
device either ignores or responds to message waiting indicator (MWI) notifications.
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Phone/PerSimSettings/$(__IMSI)">
<Setting Name="IgnoreMWINotifications" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
```
2. Specify an Owner .
3. For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set IgnoreMWINotifications to one of the following values:
VALUE DESCRIPTION
If `IgnoreMWINotifications` is not present, MWI functions normally and the user is notified when voicemails
are available.
Testing steps:
1. Flash the build containing this customization to a device that has a UICC.
2. On another phone, call the number for the device that contains the customization. Leave a voicemail
message.
3. If visual voicemail has not been set up on the device, you can verify that the customization worked by
checking if the device tile shows a voicemail notification.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Dialer codes for supplementary services
1/18/2019 • 2 minutes to read
Partners can define a dialer code to use for services like changing the pin, changing the password, caller ID, call
forwarding, call waiting, call blocking, and so on. Partners can define new mappings or disable the default
mappings. For more information about the default dialer codes you can redefine or disable, see Supplementary
services exclusions.
Limitations and restrictions:
The format of the supplementary service string cannot be modified.
The data sent over the network for a given operation cannot be modified.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/SupplementaryServiceCodeOverrides">
<-- Select the dialer codes to disable or redefine from the set below
<Setting Name="002" Value="" />
<Setting Name="004" Value="" />
<Setting Name="03" Value="" />
<Setting Name="04" Value="" />
<Setting Name="042" Value="" />
<Setting Name="052" Value="" />
<Setting Name="070" Value="" />
<Setting Name="071" Value="" />
<Setting Name="072" Value="" />
<Setting Name="073" Value="" />
<Setting Name="074" Value="" />
<Setting Name="075" Value="" />
<Setting Name="076" Value="" />
<Setting Name="077" Value="" />
<Setting Name="078" Value="" />
<Setting Name="079" Value="" />
<Setting Name="21" Value="" />
<Setting Name="30" Value="" />
<Setting Name="300" Value="" />
<Setting Name="31" Value="" />
<Setting Name="33" Value="" />
<Setting Name="330" Value="" />
<Setting Name="331" Value="" />
<Setting Name="332" Value="" />
<Setting Name="333" Value="" />
<Setting Name="35" Value="" />
<Setting Name="351" Value="" />
<Setting Name="353" Value="" />
<Setting Name="354" Value="" />
<Setting Name="354" Value="" />
<Setting Name="360" Value="" />
<Setting Name="361" Value="" />
<Setting Name="362" Value="" />
<Setting Name="363" Value="" />
<Setting Name="37" Value="" />
<Setting Name="43" Value="" />
<Setting Name="591" Value="" />
<Setting Name="592" Value="" />
<Setting Name="593" Value="" />
<Setting Name="594" Value="" />
<Setting Name="61" Value="" />
<Setting Name="62" Value="" />
<Setting Name="66" Value="" />
<Setting Name="67" Value="" />
<Setting Name="75" Value="" />
<Setting Name="750" Value="" />
<Setting Name="751" Value="" />
<Setting Name="752" Value="" />
<Setting Name="753" Value="" />
<Setting Name="754" Value="" />
<Setting Name="76" Value="" />
<Setting Name="77" Value="" />
<Setting Name="96" Value="" />
-->
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To disable a default mapping
a. Select the setting name that matches the dialer code that you want to disable. For example,
Setting Name="21" corresponds to FWDUNCONDITIONAL or the default unconditional call
forwarding code.
b. Set the Value of the dialer code that you want to disable to 0x1D or 29. This causes the dialer code
to send a USSD request instead.
4. To define a new mapping
a. Select the setting name that matches the dialer code that you want to redefine.
b. Set the Value to the desired supplementary service. The following example maps dialer code 66 to
unconditional call forwarding (dialer code 21):
Testing:
1. Flash the build containing this customization to a phone.
2. Tap on the keypad button in Phone.
3. Verify modified dialer codes are handled as configured.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Dialer codes to launch diagnostic applications
1/18/2019 • 6 minutes to read
To use an OEM diagnostic app in environments such as a service center, OEMs can configure special dialer codes
to start the application. OEMs can also configure dialer codes to start apps to interact with mobile operator
networks or to diagnose phone malfunctions.
Specific codes entered into the dialer will start the OEM dialer app. The dialer code is passed as a parameter to the
OEM's primary dialer app. The primary dialer app starts when any configured dialer code is entered in the dialer.
The dialer codes customization supports these four different app types and behaviors:
Windows Phone Silverlight 8.0 app - For this type of app, the legacy customization behavior remains the
same. You cannot pass \* as a dialer code and #characters are removed from the dialer code.
Windows Phone Silverlight 8.1 app - For this type of app, you can define dial strings that contain \. The app
receives the dial code through navigation arguments. Arguments are in the format
"DialString=##dialer_code*#" (for example, "DialString=##777#").
Windows Runtime app - For Windows Runtime apps, you can define dial strings that contain \. The app
receives the dial code through navigation arguments in the URI escape encoded format. Arguments are in the
format "?DialString=%23%23dialer_code%23". The app can use System.Uri.UnescapeDataString to get the
arguments to format "?DialString=##dialer_code*#".
Universal Windows app - The behavior for this app is the same as that of a Windows Runtime app.
The OS trims the dial string for legacy apps while it passes the dial string without modifications for Universal
Windows apps.
IMPORTANT
In your PROVXML file, you must also set the FullyPreinstall flag to TRUE so that the app is available to run immediate after
first boot or an OS update.
Constraints: FirstVariationOnly
Instructions
First-use installation of the OEM dialer application
1. Preload the OEM dialer application. To do this, use the following code example.
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright (c) Microsoft Corporation. All rights reserved. -->
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="OEMDiagnosticApp"
Description="Sample customization XML for OEM diagnostic app."
Owner=""
OwnerType="OEM">
<Static>
<Applications>
<Application Source="C:\Customization\TestData\apps\SampleDiagnosticApp.xap"
License="C:\Customization\TestData\apps\SampleDiagnosticAppLicense.xml"
ProvXML="C:\Customization\TestData\apps\mpap_oemmoapps_01.provxml" />
</Applications>
</Static>
</ImageCustomizations>
NOTE
To prevent the initial phone setup process from installing the application on first boot, do not place the provXML file
in the directory that the initial phone setup process checks, such as $(runtime.commonfiles)\Provisioning\OEM.
Instead, place the provXML file in another location, such as $(runtime.commonfiles)\Xaps, which you can then
reference from the PartnerAppProvisioningFilePath setting.
2. You must also configure the following customization settings so that the dialer will start the primary OEM
dialer application. If you set these values, no application is launched and no messages are displayed to the
user. The following configuration causes the dialer to start the primary OEM dialer application.
In the customization answer file, add the following settings:
<Static>
<Settings Path="Phone/PartnerAppSupport">
<Setting Name="PartnerAppTaskUri" Value="" />
<Setting Name="PartnerAppProvisioningFilePath" Value="\Programs\CommonFiles\Xaps\MPAP_*_*.provxml"
/>
<!-- Configure these settings to add additional dialer codes that can be accepted and passed as a
parameter to
the primary OEM dialer app. You can add any number of additional diagnostic codes you want to
use.
Each code should begin with ## -->
<Setting Name="PartnerImmediateDialStrings" Value="" />
<Setting Name="PartnerNonImmediateDialStrings" Value="" />
</Settings>
</Static>
3. In the above example, provide a value for the PartnerAppTaskUri , the PartnerAppProvisioningFilePath and
include any desired immediate or non-immediate dial strings.
a. Set PartnerAppTaskUri to the task URI of the launched app.
If you're using a Universal Windows app, you can launch a diagnostic app by setting the value of
PartnerAppTaskUri to the AUMID of a Windows app. The AUMID is in the format similar to the
package family name + the ID of the app, for example, 24f54b1d -732e-448c-b516 -
15078b047964_120xq4c4hfa14!App.
If you're using a legacy app, you can launch a diagnostic app by setting the value of
PartnerAppTaskUri to the app URI. The app URI is in the format app://00000000 -0000 -0000 -
0000 -000000000000/_default. Replace 00000000 -0000 -0000 -0000 -000000000000 with your
app ID, such as 13372257 -1b99 -1712 -17e7 -157fc6f8557d.
The dial code parameter is URI escape encoded in order to pass # and \* characters to Windows
Phone Silverlight 8.1 apps.
b. Set PartnerAppProvisioningFilePath to the path (in the mobile device) and file name of the provXML
that is used to install the OEM dialer app. The path must match the destination of the app you
preloaded. For example, $ (runtime.commonfiles)\Xaps map to \Programs\CommonFiles\Xaps and
must be used when specifying the PartnerAppProvisioningFilePath value.
c. When the dialer code is entered, the background installation process starts and when that completes,
the application will be launched. If the installation is not complete within two minutes, the application
is not started.
d. Set PartnerImmediateDialStrings and PartnerNonImmediateDialStrings to add additional dialer codes
that can be accepted and passed as a parameter to the primary OEM dialer app.
Use PartnerImmediateDialStrings to list dial codes that invoke the OEM app immediately without
the need to press the dial button. For example, ##3282#\0##634#\0##777#\0##7820#\05555
Use PartnerNonImmediateDialStrings to list dial codes that invoke the OEM app after pressing the
dial button. For example, ##634\0##3282\0##777\0##7820
Testing
1. Flash the build containing this customization to a phone.
2. Launch the Phone app and dial any of the immediate or non-immediate dial strings that you've defined.
When the dialer code is entered, the background installation process starts and when that completes, the
application will be launched. If the installation is not complete within two minutes, the application is not
started.
3. Verify that the defined dial strings successfully launch the diagnostic app that you preloaded.
Dialer codes
Password protect diagnostic functionality
Microsoft recommends that OEMs implement an input screen that is displayed when the OEM dialer application
launches diagnostic functionality. This screen can request a password that is unique to the OEM's application.
Dialer code parameter passing
The following code example shows how to parse the dialer code parameter that was passed. The code requests the
DialString String object out of the navigationContext by calling the QueryString.TryGetValue function.
Only the defined dialer codes are passed to the partner app, which can use the code to determine what programs
to load or which additional screens to display.
Predefined dialer codes
The following table describes the predefined application dialer codes available. The <Call> in the dialer code
sequences represents a press of the Call button on the phone.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Dial string overrides when roaming
1/18/2019 • 3 minutes to read
Partners can map certain dial strings to corresponding override numbers that are dialed when the user is roaming.
To the user, it will appear as if the original number was dialed.
The mappings are customizable and stored in the registry. All roaming override dial strings are organized under a
single registry key as name-data pairs. The OS uses the dialed string as the registry name to query and the
associated data as the override number to be dialed.
Design requirements and considerations:
Partners must specify override numbers in full international format, including a leading +. The numbers are
dialed as-is on 3GPP and the + is converted to the appropriate prefix on 3GPP2.
Dial string translation is only performed when the phone is roaming.
Partners may specify override numbers with <SUB> to represent the subscriber number. The first
instance of <SUB> in an override number is replaced with the subscriber number. Partners cannot
specify <SUB> as part of a dial string to search for.
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Phone/PerSimSettings/$(__IMSI)/RoamingNumberOverrides">
<Setting Name="DialString/$(DialString)" Value="" />
<Setting Name="DialString/$(DialString)" Value="" />
<Setting Name="DialString/$(DialString)" Value="" />
<Setting Name="DialString/$(DialString)" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
```
2. Specify an Owner .
3. For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Determine the number of dial string overrides you need to configure. For each dial string:
a. Replace $ (DialString ) in the settings name with the name of the dial string or number that the user
will dial when roaming. For example, if the user will dial *611, set the setting name to:
b. Set the setting value to the override number or number that the dial string is translated into. This
corresponds to the number that is actually called. For example, if the user dials *611 and the number
that must be called whenever the user dials *611 is +18001234567, set the value as shown in the
following example:
The following example shows how to create a mapping for two dial strings, *611 and *86:
<Settings Path="Phone/PerSimSettings/$(__IMSI)/RoamingNumberOverrides">
<Setting Name="DialString/*611" Value="+18001234567" />
<Setting Name="DialString/*86" Value="+1<SUB>" />
</Settings>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Disable link to contact card in active call screen
1/18/2019 • 2 minutes to read
Disable the ability to access a contact's information while in the active call screen.
By default, when a user is in the active call screen, the user can tap on the contact's name or phone number while in
a phone call to bring up the contact's information card. The contact information card includes information such as
the contact's phone numbers, email addresses, and so on.
OEMs can disable this link in the active call screen by setting the EnableSoftwareProximitySensorMitigation
so that the contact information is not shown while in an active call. For example, if the phone does not have a
proximity sensor and the user may accidentally tap the contact name or phone number with their ear during a
phone call, disabling the link may be the desired user experience.
The reminders, toasts, and the shutdown curtain also assume that the proximity sensor is covered if the
EnableSoftwareProximitySensorMitigation setting is set. When the setting is set to 1 or 'True', the device
emits a noise (for toasts and reminders if sounds for these events are not silenced), but the screen does not turn
on.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/PhoneShellUI">
<!-- Set the Value to 0 or 'False' (to disable, default), or set to 1 or 'True' (to enable) -->
<Setting Name="EnableSoftwareProximitySensorMitigation" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set EnableSoftwareProximitySensorMitigation to one of the following values:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a phone that has a SIM or UICC.
2. Open the Phone app and call one of your contacts.
3. In the active call screen, verify the following behaviors depending on the value you set for
EnableSoftwareProximitySensorMitigation :
Related topics
Prepare for Windows mobile development
Customization answer file overview
Disable video upgrade Store navigation
1/18/2019 • 2 minutes to read
Disable automatic navigation to the Microsoft Store when the user attempts a video upgrade for which there is no
installed app.
By default, if there are no compatible video upgrade apps installed on the phone, when a user taps the video
upgrade button during a phone call, a dialog is launched and the phone will navigate to the Microsoft Store.
Partners can change this behavior so that if the user taps the video upgrade button, a dialog is launched that
informs the user that no video app is installed, but the phone will not navigate to the Microsoft Store directly.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name="DisableVideoUpgradeStoreNavigation" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the DisableVideoUpgradeStoreNavigation value to one of the following:
VALUE DESCRIPTION
Testing steps:
1. Flash the build containing this customization to a phone that has a UICC or Wi-Fi connection.
2. Make sure that there are no compatible video upgrade apps installed on the phone and then open the
Phone app and call someone.
If DisableVideoUpgradeStoreNavigation is set to 0 or 'False' (or you did not change the default OS
behavior), verify that a dialog is launched and that the phone navigates to the Store.
If DisableVideoUpgradeStoreNavigation is set to 1 or 'True', verify that a dialog is launched that
informs the user that no video app is installed and the phone does not automatically navigate to the
Store.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Disable voicemail phone number display
1/18/2019 • 2 minutes to read
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name="DisableVoicemailPhoneNumberDisplay" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the DisableVoicemailPhoneNumberDisplay setting to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash the build containing this customization to a phone that has a UICC or SIM.
2. Open the phone app.
3. Call the voicemail either by pressing and holding "1" from the keypad screen, tapping the voicemail icon, or
calling the voicemail number directly.
4. Depending on the value that you set for DisableVoicemailPhoneNumberDisplay , verify that the voicemail
phone number is either displayed or hidden below the Voicemail label on the call progress screen.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Dismiss the last USSD waiting dialog
1/18/2019 • 2 minutes to read
Dismiss the last USSD waiting dialog in the case where there is a sequence of USSD or SIM app dialogs.
This customization affects the behavior of USSD dialog sequencing. It dismisses the last Waiting… dialog in the
case where there is a sequence of USSD or SIM app dialogs. OEMs may need to configure this customization in
cases where there is a sequence of two or more SIM app dialogs and where the OS might display a Waiting…
dialog indefinitely and the dialog can only dismissed when the user taps Cancel.
Constraints: None This customization supports: per-IMSI value
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Phone/PerSimSettings/$(__IMSI)">
<Setting Name="AutoDismissUssdWaitingDialog" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC,
and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set AutoDismissUssdWaitingDialog to one of the following values:
VALUE DESCRIPTION
Testing
Work with your mobile operator to fully test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Emergency phone numbers
1/18/2019 • 2 minutes to read
Partners can edit the list of valid emergency phone numbers for the market in which the phone will be sold.
By default, the list includes 911, 112, 08, and 999. The number 112 is hardcoded and cannot be removed. The
emergency numbers apply when the dialer restricts the user to approved emergency phone numbers, such as
during initial phone setup and when the phone is locked. Partners can specify which numbers can be dialed when a
SIM is present and when no SIM is present.
Instructions:
The emergency phone numbers are implemented by the modem vendor. For more information about how to
modify the emergency dialing behavior, see the documentation provided by the modem vendor.
Enable call recording by default
1/18/2019 • 2 minutes to read
Partners can configure devices to have the call recording feature enabled by default.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name=" CallRecordingOff" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set CallRecordingOff to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash the build that contains this customization to a phone.
2. Open the Settings app and select Phone.
3. Under Default apps, tap Choose apps.
4. Under Calling, verify that Voice Recorder is showing under Choose the app you want to use to manage
recorded phone calls.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enable IMS services
1/18/2019 • 3 minutes to read
Partners can identify which IP Multimedia Subsystem (IMS ) services, if any, are enabled on the device by default.
The IMS services that can be identified are: IMS, SMs over IMS, Voice over IMS, and Video over IMS.
To allow configuration of the default values of IMS services out of the box using multivariant, the IMSServices
setting is mapped as follows:
IMSServices
{
IMS ----------------> RILDMCONFIG_IMS_TEST_NODE_STATUS -> NV 67264 subitem ‘RegConfigTestMode’ (// 1
means disabling IMS and 0 means enabling it)
SMS_OverIMS ---------> RILDMCONFIG_SMSOVER_IP_NW_INDICATION -> NV 67259 subitem
‘iSMSOverIPNetworkIndication’
Voice_Over_IMS ------> [RILDMCONFIG_IMS_VOICE_ENABLED -> NV 67348 subitem ‘volte_disabled’]
Video_Over_IMS ------> [RILDMCONFIG_IMS_VIDEO_ENABLED -> NV 67348 subitem ‘VT calling enabled’]
};
Note
All values need to be set at once. For example, you cannot just set the value for Voice_Over_IMS. You must send a
value for all. The OS applies the value to the corresponding NV item only if the value is changing.
wpblue_gdr2 allows configuration of the OMA DM services mask (sub-item of NV 69750) separately. You can use
a new setting similar to IMSServices called IMSOMADMServices which will be directly mapped to
RIL_IMS_NW_ENABLED_FLAGS on the modem side. See the SoC modem documentation for more details about
the flags.
IMSOMADMServices
{
0 = NONE
1 = OMA_DM -----------> RIL_IMS_NW_ENABLED_FLAG_PROVISION (Bit 0 - Enable(1)/Disable(0) OMA DM services)
2 = VOICE ------------> RIL_IMS_NW_ENABLED_FLAG_VOICE (Bit 1- VoLTE enable(1)/disable(0) by OMA-DM)
4 = VIDEO -------------> RIL_IMS_NW_ENABLED_FLAG_VIDEO (Bit 2 - VT enable(1)/disable(0) by OMA-DM)
8 = EAB_PRESENCE ------> RIL_IMS_NW_ENABLED_FLAG_EAB (Bit 3 - Presence enable(1)/disable(0) by OMA-DM)
15 = Enable all above services
}
All the other settings for VoLTE and VT, such as ShowVoLTEToggle , SwitchIMS , and so on remain unchanged. For
more information about these settings, see Settings for IMS services.
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="EnableIMSServices"
Description="Use to configure which IMS services are enabled."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/VoLTE">
<Setting Name="IMSServices" Value="" />
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's Mobile
Country Code (MCC ), Mobile Network Code (MNC ), and Service Provider Name (SPN ).
b. Define the settings for a Variant, which are applied if the associated target's conditions are met.
4. Set the value for the IMSServices setting to any combination of the following flags or bitmasks:
IMS 1 0001
You can set `IMSServices` to any decimal value formed by a combination of the bitmasks. For example, a bitmask
of 1111 (or a decimal value of 15) means that all services are enabled. A bitmask of 0101 (or a decimal value
of 5) means that IMS and Voice over IMS are enabled by default and SMS over IMS and Video over IMS are
disabled, and so on.
5. To configure the OMA DM services mask, set the IMSOMADMServices setting to one of the following values:
None 0 00000
OMA DM 1 00001
Voice 2 00010
Video 4 00100
Testing:
Work with your mobile operator partner to test this customization on the operator's network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enable RCS
1/18/2019 • 6 minutes to read
OEMs can configure the RCS settings using the multivariant support in the OS. Using these settings, you can:
Specify whether the device is RCS -enabled.
Specify whether to use single registration for RCS.
Configure the user experience for RCS.
The following design principles for RCS settings apply in Windows 10 Mobile:
An OEM can set a policy that cannot be overwritten by the user.
A user can set the value for a setting unless the setting is hidden by the mobile operator or OEM, or if the
setting is available only to the mobile operator or OEM.
The IMS and RCS services have a defined default behavior in the event that a policy or setting is not set.
Backup and restore are slot-based. Any per-slot SIM settings are backups for the associated slot. When the
settings are restored, they are restored in the corresponding slot even if a different SIM is in that slot.
When there are no per-user or per-slot settings, then settings are applied per-SIM, not per-slot. For example, if
the user sets group text ON for their Contoso SIM in Slot 1, and has group text OFF for their Fabrikam SIM in
Slot 2, if the user swaps the Contoso SIM into Slot 2 and reboots the device, group text will be set to ON.
OEM: IS IT HIDDEN? USER SETTING VALUE OEM DEFAULT VALUE FINAL VALUE
No On Off On
Per-provider SIM Slot 2 settings will fall back to the default service behavior. The following table shows the
expected behavior.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="EnableRCS"
Description="Use to configure RCS settings."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
<!-- Configure these global settings to specify whether the device supports RCS. -->
<Settings Path="CellCore/PerDevice/RCS">
<Setting Name="SystemEnabled" Value="" />
<Setting Name="UserEnabled" Value="" />
</Settings>
</Static>
<!-- Use these settings to specify whether to use single registration for RCS. -->
<Settings Path="CellCore/PerIMSI/$(__IMSI)/RCS">
<Setting Name="UseSingleRegistration" Value="" />
</Settings>
<!-- Use these settings to configure the user experience for RCS -->
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/RcsOptions">
<Setting Name="ShowRcsEnabled" Value="" />
<Setting Name="RcsEnabled" Value="" />
<Setting Name="RcsSendReadReceipt" Value="" />
<Setting Name="RcsFileTransferAutoAccept" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's Mobile Country
Code (MCC ), Mobile Network Code (MNC ), and Service Provider Name (SPN ).
4. Define the settings for a Variant, which are applied if the associated target's conditions are met.
5. To specify whether the system is RCS -enabled and the RCS package is installed, set SystemEnabled to one of
the following values.
VALUE DESCRIPTION
6. To show the user setting if RCS is enabled on the device, set UserEnabled to one of the following values.
VALUE DESCRIPTION
7. To specify whether to use single registration for RCS, set UseSingleRegistration to one of the following
values.
VALUE DESCRIPTION
1 or 'True' Use single registration for RCS. The RCS stack will use the
modem interface to communicate with the RCS backend.
8. To configure the user experience for RCS, set the following settings.
To show or hide the toggle for RCS activation, set ShowRcsEnabled to one of the following values.
VALUE DESCRIPTION
0 or 'False' Hides the toggle for RCS activation. This is the default
OS value.
1 or 'True' Shows the toggle for RCS activation. If you use this
value, you can also configure the default value for the
service by setting RcsEnabled .
To set the default value for the RCS service toggle, set RcsEnabled to one of the following values.
VALUE DESCRIPTION
To specify whether a read receipt is sent to the sender, set RcsSendReadReceipt to one of the following
values.
VALUE DESCRIPTION
To specify whether to automatically download an incoming RCS file transfer when the file size is less
than the limit for the warning file size, set RcsFileTransferAutoAccept to one of the following values.
VALUE DESCRIPTION
Testing:
Work with your mobile operator partner to test this customization on the operator's network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Hide call forwarding
1/18/2019 • 2 minutes to read
2. Specify an Owner .
3. Set HideCallForwarding to one of the following values:
VALUE DESCRIPTION
Related topics
Prepare for Windows mobile development
Customization answer file overview
Maximum number of participants in a VoLTE
conference call
1/18/2019 • 2 minutes to read
OEMs can specify the maximum number of participants or callers that can be added to a voice over LTE (VoLTE )
conference call based on the mobile operator's network requirements.
By default, Windows 10 Mobile supports up to 6-way conference (host + 5 participants) for VoLTE conference
calls.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name="ConferenceCallMaximumPartyCount" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of ConferenceCallMaximumPartyCount the maximum number of participants, including the host,
in a VoLTE conference call. Specify the number in decimal or hexadecimal (with the 0x prefix).
The default OS value is 6.
Testing steps:
1. Flash the build containing this customization to a phone.
2. Work with your mobile operator partner to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Network-controlled caller ID settings
1/18/2019 • 2 minutes to read
For markets or mobile operators that require support for network-controlled settings for outgoing caller ID, OEMs
can configure the setting to indicate whether the network default setting is allowed and specify the default initial
value for the caller ID setting.
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample or use the
sample NetworkCallerIDSettings.xml file.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Phone/PerSimSettings/$(__IMSI)">
<Setting Name="ShowCallerIdNetworkDefaultSetting" Value="" />
<Setting Name="DefaultCallerIdSetting" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. To indicate whether the network default setting is allowed for the outgoing caller ID, set
ShowCallerIdNetworkDefaultSetting to one of the following values:
VALUE DESCRIPTION
6. To specify the default value for the caller ID setting, set DefaultCallerIdSetting to one of the following
values:
VALUE DESCRIPTION
Testing steps:
Work with your mobile operator to fully test this customization on their network and verify that each setting and
value behave as documented in this topic.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Override the voicemail number on the UICC
1/18/2019 • 2 minutes to read
Mobile operators can override the voicemail number on the UICC with a different voicemail number that is
configured in the registry.
This customization can only be applied in a runtime configuration image.
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SimOverrideVoicemailNumber"
Description="Use to set the phone to ignore the time received from an LTE network."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Phone/PerSimSettings/$(__IMSI)/Critical">
<Setting Name="SimOverrideVoicemailNumber" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set SimOverrideVoicemailNumber to a string that contains the digits of the voicemail number to use instead of
the voicemail number on the UICC.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Supplementary services exclusions
1/18/2019 • 2 minutes to read
Partners can define a dialer code to use for 3GP USSD services like changing the pin, changing the password,
caller ID, call forwarding, call waiting, call barring, and so on. Partners can define new mappings or disable the
default mappings. To define a new mapping or change the behavior of a provided supplementary service
mappings, see Dialer codes for supplementary services
Microsoft provides a number of predefined USSD codes. Partners can exclude predefined USSD entries, allowing
the number to be sent as standard DTMF tones instead. This allows for customization for specific markets where
the predefined USSD codes need to be sent as a DTMF tones.
Note
Only existing USDD codes can be overridden.
The following USSD codes are predefined in Windows Phone, and all of them can be overridden by the OEM.
04 CHANGEPIN 000000F4
05 UNBLOCKPIN 000000F5
03 SSCHANGEPASSWORD 000000F3
75 EMLPPBASE 00000075
66 CALLDEFLECT 00000066
CODES DESCRIPTION DWORD VALUE
30 CALLIDCLIP 00000030
31 CALLIDCLIR 00000031
76 CALLIDCOLP 00000076
77 CALLIDCOLR 00000077
21 FWDUNCONDITIONAL 00000021
67 FWDBUSY 00000067
61 FWDNOREPLY 00000061
62 FWDNOTREACHABLE 00000062
43 CALLWAITING 00000043
33 BARROUT 00000033
35 BARRIN 00000035
CODES DESCRIPTION DWORD VALUE
96 CALLTRANSFER 00000096
37 CALLCOMPLETEBUSY 00000037
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Phone/PerSimSettings/$(__IMSI)">
<Setting Name="IgnoreUssdExclusions" Value="" />
<Setting Name="UssdExclusionList" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
```
2. Specify an Owner .
3. For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set IgnoreUssdExclusions to one of the following values:
VALUE DESCRIPTION
5. Set UssdExclusionList to the list of desired exclusions, separated by semicolons. For example, to override 2
and 4, set the value to 2;4
Leading zeros are specified by using F . For example, to override code 079, set the value to F79.
Testing:
1. Flash the build containing this customization to a phone.
2. Tap on the keypad button in Phone.
3. Verify modified dialer codes are handled as configured.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Trim supplementary service codes
1/18/2019 • 2 minutes to read
OEMs can trim supplementary service codes to ensure network compatibility. When a code is sent using a USSD
string in a ##code# format, EnableSupplementaryServiceEraseToDeactivateOverride trims the USSD string so #code#
is sent. This customization applies only to codes that use the ##code# format.
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Phone/PerSimSettings/$(__IMSI)">
<Setting Name="EnableSupplementaryServiceEraseToDeactivateOverride" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set EnableSupplementaryServiceEraseToDeactivateOverride . The possible values are:
VALUE DESCRIPTION
Testing steps:
1. Flash the build containing the customization to a phone.
2. Send a USSD code. For example, ##21# to disable conditional call forwarding.
3. Verify that conditional call forwarding has been disabled.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Use OK for USSD dialogs
1/18/2019 • 2 minutes to read
To meet certain market requirements or user expectations, OEMs can change the button label in USSD dialogs
from Close (the default) to OK.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name="UseOKForUssdDialogs" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Change the button label in the USSD dialog by setting UseOKForUssdDialogs to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash the build containing this customization to a phone that has a UICC.
2. Open the Phone app and tap the keypad button.
3. Use several USSD codes and strings to bring up a USSD success dialog and a USSD failure dialog.
4. Verify that the button label in the dialog shows OK.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Use HD audio codec for call branding
1/18/2019 • 2 minutes to read
OEMs can customize call progress branding when a call is made using a specific audio codec.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
4. In the table below, identify the Setting Name that corresponds to your HD audio codec, and set that as
Setting Name. Then, set value to the text string you want to use for call progress branding. For example, if
you are using the EVRC audio codec, and you would like to display the text "EVRC" when using that codec,
you would enter EVRCAudioQualityString in Setting Name , and EVRC in Value.
Note: Text strings can be a maximum of 10 characters.
EVRCAudioQualityString Any text string Call progress branding for calls using
the EVRC audio codec
EVRCBAudioQualityString Any text string Call progress branding for calls using
the EVRCB audio codec
EVRCNWAudioQualityString Any text string Call progress branding for calls using
the EVRCNW audio codec
EVRCWBAudioQualityString Any text string Call progress branding for calls using
the EVRCWB audio codec
EVSFBAudioQualityString Any text string Call progress branding for calls using
the EVSFB audio codec
EVSNBAudioQualityString Any text string Call progress branding for calls using
the EVSNB audio codec
EVSSWBAudioQualityString Any text string Call progress branding for calls using
the EVSSWB audio codec
EVSWBAudioQualityString Any text string Call progress branding for calls using
the EVSWB audio codec
GSMEFRAudioQualityString Any text string Call progress branding for calls using
the GSMEFR audio codec
GSMFRAudioQualityString Any text string Call progress branding for calls using
the GSMFR audio codec
GSMFRAudioQualityString Any text string Call progress branding for calls using
the GSMFR audio codec
QCELP13KAudioQualityString Any text string Call progress branding for calls using
the QCELP13K audio codec
Testing steps:
1. Flash a build containing this customization to a phone.
2. Make a phone call that uses HD audio.
3. Verify that the call progress branding is displayed during the phone call.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Use voice domain for emergency call branding
1/18/2019 • 2 minutes to read
To meet mobile operator requirements, OEMs can enable the voice domain to decide whether to use Emergency
calls only or No service in the phone UI branding.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name="UseVoiceDomainForEmergencyCallBranding" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the UseVoiceDomainForEmergencyCallBranding setting to one of the following values:
VALUE DESCRIPTION
If UseVoiceDomainForEmergencyCallBranding is set to 1, the phone will not display Emergency calls only in
the following cases. Instead, it will display No service.
If the system type [RILSYSTEMTYPE ] is NONE, which means there is no signal.
If the system type is LTE but there is no voice domain. This situation can occur in these cases:
In LTE networks being used by a non-VoLTE capable device without 3G coverage.
In forbidden LTE networks.
However, if you do not set UseVoiceDomainForEmergencyCallBranding to 1, or the setting is missing, the device
may display Emergency calls only in the above situations.
Testing steps:
Work with your mobile operator partner to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Visual voicemail
1/18/2019 • 7 minutes to read
Visual voicemail supports both traditional voicemail (retrieved through a phone call) and visual voicemail. Users
can select between traditional voicemail and visual voicemail when they first attempt to access voicemail. If the
mobile operator does not support this visual voicemail implementation, the user will only see the traditional
voicemail option. For mobile operators that have their own particular brand that they want to use instead of visual
voicemail, partners can rebrand all instances of visual voicemail in the Windows 10 Mobile UI to use the
operator's brand.
The mobile operator visual voicemail system must be an OMTP -compliant system that meets the following
requirements.
Uses the AMR -NB codec for incoming voicemail messages.
Sends all SMS -MT as port-directed SMS.
Sends all SMS -MT with 7-bit default or UCS2 encoding.
Supports enabling and disabling the visual voicemail feature on the phone by using ACTIVATE and
DEACTIVATE SMS -MO messages.
The visual voicemail implementation on the phone is based on the OMTP visual voice mail interface specification.
Visual voicemail support on Windows Phone 8.1 was tested on OMTP -based protocols by Comverse and Alcatel
Lucent. Other OMTP -based protocols like Streamwide may also be supported, although tests were performed
only on Comverse and Alcatel Lucent. Variations from the OMTP standard may result in unsupported scenarios.
The following table shows the extent of support for the features recommended by OMTP. The features marked
"Partially supported" provide a button to enable the user to call in to the voicemail system and change the settings
over the phone.
Constraints: None
Instructions
To configure visual voicemail for a mobile operator, the OEM must add setting several settings depending on the
OMTP -based protocol being used by the operator.
NOTE
Visual voicemail settings have already been set for AT&T, T-Mobile USA, and Deutsche Telekom AG (DTAG), and no further
configuration is required for these three mobile operators.
1. Create a customization answer file using the contents shown in the following code sample.
2. Specify an Owner .
3. Set multiple MCCMNC\VVMMO pairs by adding the following entry in your customization answer file.
<Settings Path="Phone/VoicemailRegistrationTable">
<Setting Name="ProviderRegistration/$(MCCMNC)" Value="" />
</Settings>
a. Replace $ (MCCMNC ) with the MCCMNC for the mobile operator. For example, 99999.
b. Set the corresponding Value to the name of the VVMMO. For example, Contoso.
c. Add and set as many MCCMNC\VVMMO pairs as you need for each mobile operator ID. For
example, if you are adding another VVMMO called Fabrikam with MCC/MNC of 999/10, your
entries will look like this:
<Settings Path="Phone/VoicemailRegistrationTable">
<Setting Name="ProviderRegistration/99999" Value="Contoso" />
<Setting Name="ProviderRegistration/99910" Value="Fabrikam" />
</Settings>
4. For each mobile operator ID defined in the previous step, you must define the applicable settings for that
mobile operator by adding the following settings in your customization answer file.
<Settings Path="Phone/VoicemailRegistrationTable/$(VVMMO)">
<Setting Name="CLSIDProvider" Value="" />
<Setting Name="CLSIDAccessor" Value="" />
<Setting Name="ProtocolVariant" Value="" />
<Setting Name="IncomingPort" Value="" />
<Setting Name="ClientType" Value="" />
<Setting Name="DeviceType" Value="" />
<Setting Name="InitialSmsDestinationNumber" Value="" />
<Setting Name="EncryptedSmsSupported" Value="" />
<Setting Name="KeyData" Value="" />
<Setting Name="ImapPortOverride" Value="" />
<Setting Name="TokenLogin" Value="" />
<Setting Name="SuppressSsl" Value="" />
<Setting Name="IgnoreLegacyNotifications" Value="" />
</Settings>
5. Replace $ (VVMMO ) with the name of the VVMMO. For example, Contoso.
6. Set only the applicable settings that apply to the VVMMO and are required depending on the OMTP -based
protocol being used. Note that you do not have to set all of these if they are not supported. The following
table describes the values to use and indicates if the keys are required depending on the OMTP -based
protocol being used.
IgnoreLegacyNoti REG_DWORD Not required Not required Not required Specifies whether
fications legacy voicemail
notifications
should be
ignored when
visual voicemail is
enabled. If the
ignore legacy
voicemail
notification
feature is
enabled, legacy
message waiting
indicator SMS
messages are
ignored (i.e. these
will not trigger a
visual voicemail
sync). If this
feature is absent
or not enabled,
legacy voicemail
MWI messages
will cause a visual
voicemail sync to
be initiated.
This feature
should be turned
on only for
mobile operators
that require it.
This feature is not
enabled by
default.
Use a value of 0
to indicate the
feature is off; use
1 to indicate it is
turned on.
1. For mobile operators that have their own particular brand that they want to use instead of visual voicemail,
partners can rebrand all instances of Visual voicemail in the Windows device UI to use the operator's
brand.
To do this, set the value for Branding to the specific name that the mobile operator is using for visual
voicemail. For example, you can set the value to Contoso Voice Inbox.
NOTE
This setting does not support a resource-only DLL for localized strings so you need to set the new string directly as
the value.
Testing
Work with your mobile operator to obtain the settings and values that you need to configure visual voicemail and
the value to use for Branding .
Once you have configured the visual voicemail settings and the branding, work with the mobile operator to test
this customization on their network and verify that all instances of Visual voicemail in the Windows device UI
have been replaced with the custom brand that you specified.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Voice over LTE call indication
1/18/2019 • 2 minutes to read
Partners can add a string to the phone's call progress screen to indicate if the active call is a voice over LTE (VoLTE )
call depending on whether the phone call is in high quality voice status such as when using AMR -WB codec. The
high quality voice status is determined by the modem and RIL implementation. This string is combined with the
PLMN for the mobile operator and is only shown if the combination of the PLMN and the custom string is less
than the maximum width available. For example, "Litware VoLTE" will be shown but "Litware Wireless VoLTE" may
be too long and may be truncated.
The OS uses the PhoneMediaQuality field in the PH_CALL_INFO structure to determine whether the phone
call is in high quality voice status. In the current modem and RIL implementation, PhoneMediaQuality_High is
used to indicate high quality audio during VoLTE calls. PhoneMediaQuality must be equal to
PhoneMediaQuality_High and the VoLTEAudioQualityString must be set in order for the OS to display the string in
the phone's call progress screen.
Note Depending on the current modem and RIL implementation, it is possible that the AMR -WB codec is being
used and the phone call is in high quality voice status but not a VoLTE call. The OS does not restrict the use of this
string in these cases.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name="VoLTEAudioQualityString" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the Value to the string that you want to display in the call progress screen to indicate that the call is a
VoLTE call. This string is combined with the PLMN so if the string is 'VoLTE', the resulting string is
'PLMN_String VoLTE'. For example, the string displayed in the call progress screen can be 'Litware VoLTE' if
the PLMN_String is 'Litware'.
The Value you specify for VoLTEAudioQualityString must exceed 10 characters.
Note This customization does not support a resource-only DLL for localized strings so you need to set the
new string directly as the value.
Testing steps:
1. Flash the build containing this customization to a phone.
2. Work with your mobile operator partner to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Voicemail number for CDMA phones
1/18/2019 • 2 minutes to read
CDMA mobile operator partners who do not have the voicemail numbers on the device SIM can configure the
voicemail number for their devices.
If the voicemail number is not on the SIM and the registry key is not set, the default voicemail will not be set and
the user will need to set the number.
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Phone/PerSimSettings/$(__IMSI)/Critical">
<Setting Name="MOSimFallbackVoicemailNumber" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set MOSimFallbackVoicemailNumber to the voicemail number that you want to use for the device.
Testing steps:
1. Flash a build containing this customization to a device.
2. Go to the Phone settings screen.
3. Verify that the voicemail number matches the phone number you specified for Value .
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for photos, music, and videos
1/18/2019 • 2 minutes to read
Contains the customizations you can configure for photos, music, and videos.
In this section
TOPIC DESCRIPTION
Add OEM lens apps as options for the default camera OEMs can add lens apps as options for the default camera.
Audio volume limitation OEMs can configure a setting to display a visual warning when
the volume level of the phone exceeds a certain permitted
threshold.
Configure OEM lens apps to launch above the lock screen OEM can configure lens apps to launch above the lock screen.
Configure the FM radio The BSP provided by the SoC vendor includes support for the
FM radio. OEMs can determine whether to show the FM radio
app to users, and configure the FM radio frequency for specific
regions.
Maximum enumerable photo size For phones that have the hardware capability to capture
various resolutions, partners can specify the resolution limit
for photos that can be accessed by third party apps.
Reset the audio volume limitation and warning OEMs can set the device to reset the audio volume limit and
show the volume level warning every time the volume level
exceeds a certain permitted threshold for a certain length of
time.
Settings for capture mode, burst support, and burst storage OEMs can configure burst support on the device, the default
duration capture mode, and the default number of days to store the
bursts captured on the device.
Video over LTE Partners can customize specific settings and behavior for
Video over LTE to meet mobile operator requirements.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Add OEM lens apps as options for the default
camera
1/18/2019 • 2 minutes to read
OEMs can add lens apps as options for the default camera.
OEMs can add lens apps to be shown in the Pressing the camera button opens screen within the camera's
settings CPL. We recommend that OEMs install only up to five (5) lens apps. The lens apps can be preloaded or
installed from the Microsoft Store. When the lens apps are installed on the phone, the apps become available for
the user to set as the default camera.
For more information about writing lens apps, see the Windows SDK documentation.
Limitations and restrictions:
Partners must not remove or modify any app IDs that Microsoft has configured in the kit. The app IDs added by
Microsoft do not count against the number of lens app IDs that partners can add.
Constraints: None
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="OEMLensApps"
Description="Use to add lens apps to be shown in the Settings > applications >
photos+camera >
Pressing the camera button opens screen."
Owner=""
OwnerType="OEM">
<Static>
<!-- Replace $(LensAppGuid) with the app ID of the lens app you want to show in the camera CPL -->
<Settings Path="Photos/LensApps/$(LensAppGuid)">
<!-- Set the value to the friendly name of the OEM lens app -->
<Setting Name="Title" Value="" />
</Settings>
<!-- You can add up to 5 OEM lens apps to show in the camera CPL -->
<Settings Path="Photos/LensApps/$(LensAppGuid)">
<Setting Name="Title" Value="" />
</Settings>
<Settings Path="Photos/LensApps/$(LensAppGuid)">
<Setting Name="Title" Value="" />
</Settings>
<Settings Path="Photos/LensApps/$(LensAppGuid)">
<Setting Name="Title" Value="" />
</Settings>
<Settings Path="Photos/LensApps/$(LensAppGuid)">
<Setting Name="Title" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. If you are preloading a lens app, add an Applications parent element and add an Application child
element to correspond to each lens app that you are preloading. For each Application, specify the Source
(.xap/.appx), License , and ProvXML files that correspond to the lens app you are preloading.
4. To specify the OEM lens app to show in the camera CPL:
a. Replace $ (LensAppGuid ) with the app ID of the lens app you want to show in the camera CPL.
b. Replace Title with the friendly name of the lens app. For example, Contoso Fish Eye Lens.
c. Specify up to 5 lens apps by creating a registry entry for each as shown in the preceding example.
For example, to configure two lens apps to show in the camera CPL, you need to add the following
registry entries:
<Settings Path="Photos/LensApps/{00000000-0000-0000-0000-000000000000}">
<Setting Name="Title" Value="Contoso Fish Eye Lens" />
</Settings>
<Settings Path="Photos/LensApps/{00000000-0000-0000-1000-000000000000}">
<Setting Name="Title" Value="Contoso Sepia Lens" />
</Settings>
Testing
1. Flash the build containing this customization to a phone.
2. Install the OEM lens app(s).
3. Go to the Settings > applications > photos+camera screen and verify that the lens apps that you have
specified show up as one of the choices under Pressing the camera button opens.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Audio volume limitation
1/18/2019 • 2 minutes to read
OEMs can configure a setting to display a visual warning when the volume level of the phone exceeds a certain
permitted threshold.
Some regions and markets have a volume limitation requirement, which limits the audio volume levels for
portable devices like phones and MP3 players. To comply with this requirement, OEMs can configure a setting to
display a visual warning when the volume level of the phone exceeds a certain permitted threshold (for example,
85 dB according to European Audio Standards) when audio is playing through the user’s headphones or device
speakers. User acknowledgment is required before the volume limit is exceeded.
In addition, the phone will keep track of the amount of time that music and video is played at the permitted
threshold and display the warning again if and when the user has been listening above the permitted threshold for
at least 20 cumulative hours.
To reset the audio volume limit and show the volume level warning every time the volume level exceeds a certain
permitted threshold, see Reset the audio volume limitation and warning.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="VolumeLimit">
<Setting Name="EnableVolumeLimit" Value="" />
<Setting Name="VolumeLimit" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set EnableVolumeLimit to one of the following values:
VALUE DESCRIPTION
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configure OEM lens apps to launch above the lock
screen
1/18/2019 • 4 minutes to read
OEM can configure lens apps to launch above the lock screen.
For lens apps that OEMs have configured to be user selectable default camera app, OEMs can add functionality to
launch these lens apps above the lock screen when the user presses the camera button.
Microsoft recommends that OEMs configure only up to five (5) lens apps capable of running above the lock
screen. The lens apps can be preloaded by OEMs or installed by users from the Microsoft Store.
Constraints: None
Instructions:
The steps for configuring an OEM lens app to run above the lock screen are very similar to Adding OEM lens apps
as options for the default camera, but with the additional step of designating it as a lens app that can run above the
lock screen.
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<!-- Replace $(LensAppGuid) with the app ID of the lens app you want to show in the camera CPL -->
<Settings Path="Photos/LensApps/$(LensAppGuid)">
<!-- Set the value to the friendly name of the OEM lens app -->
<Setting Name="Title" Value="" />
<!-- Set this to the version of the OEM lens app version that you want to launch above the lock
screen -->
<Setting Name="MinVersionAboveLock" Value="" />
</Settings>
<!-- You can add up to 5 OEM lens apps to show in the camera CPL. For other OEM lens apps that you
want to enable to run
above the lock screen, you must set the MinVersionAboveLock setting for each of these. -->
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. If you are preloading a lens app, add an Applications parent element and add an Application child
element to correspond to each lens app that you are preloading. For each Application, specify the Source
(.xap/.appx), License , and ProvXML files that correspond to the lens app you are preloading.
4. To specify the OEM lens app to show in the camera CPL:
a. Replace $ (LensAppGuid ) with the app ID of the lens app you want to show in the camera CPL.
b. Replace Title with the friendly name of the lens app. For example, Contoso Fish Eye Lens.
c. Specify up to 5 lens apps by creating a registry entry for each as shown in the preceding example.
For example, to configure two lens apps to show in the camera CPL, you need to add the following
registry entries:
<Settings Path="Photos/LensApps/{00000000-0000-0000-0000-000000000000}">
<Setting Name="Title" Value="Contoso Fish Eye Lens" />
</Settings>
<Settings Path="Photos/LensApps/{00000000-0000-0000-1000-000000000000}">
<Setting Name="Title" Value="Contoso Sepia Lens" />
</Settings>
<Settings Path="Photos/LensApps/{00000000-0000-0000-0000-000000000000}">
<Setting Name="Title" Value="Contoso Fish Eye Lens" />
</Settings>
<Settings Path="Photos/LensApps/{00000000-0000-0000-1000-000000000000}">
<Setting Name="Title" Value="Contoso Sepia Lens" />
<Setting Name="MinVersionAboveLock" Value="1.0.0.0" />
</Settings>
Testing:
1. Flash the build that contains this customization to a phone.
2. Install the OEM lens app(s).
3. Go to the Settings > applications > photos+camera screen and verify that the lens apps that you have
specified show up as one of the choices under Pressing the camera button opens.
Choose a lens app that you have configured to run above the lock screen and set it as the default camera.
4. Go to Settings > lock screen, turn Password on, then set a password or PIN.
5. Lock the phone.
6. Press and hold the camera button while the phone is locked. Verify that the lens app that you chose in Step
3 is launched.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configure the FM Radio
1/18/2019 • 2 minutes to read
The BSP provided by the SoC vendor includes support for the FM radio.
Alternative FM radio components that meet the requirements described in the section 2.7: Wireless
communications of the Chassis Requirements Specification can be used. If alternative components are used, the
FM miniport driver can be replaced.
NOTE
If the phone includes an FM radio, it must run the Microsoft-supplied software driver stack, including the port driver.
</ImageCustomizations>
2. Specify an Owner .
3. Set NotPresent to 0 to show the FM Radio app.
NOTE
Setting NotPresent to 1 is not necessary because the radio UI is hidden by default.
Testing
1. Flash the build containing this customization to a device.
2. Verify that FM radio is now visible in the Apps list.
NOTE
NotPresent must be set to 0 to show the radio option in the UI.
2. Specify an Owner .
3. Set RadioRegion to specify the default region for the frequency band for the device’s FM radio. Set this to
one of the following values:
VALUE DESCRIPTION
1 North America
2 World
3 Japan
Testing
1. Flash the build containing this customization to a device.
2. Open the radio app.
3. In the radio application, verify that the selected region matches the one you specified in RadioRegion . To do this,
show the context menu by tapping and holding anywhere on the radio screen. In the context menu, tap settings
to show the settings page.
4. In the Settings page, verify that Region is set to the default FM radio region that you selected.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Maximum enumerable photo size
1/18/2019 • 2 minutes to read
For phones that have the hardware capability to capture various resolutions, partners can specify the resolution
limit for photos that can be accessed by third party apps.
Only OEM applications have access to the maximum resolution limit.
Note This customization is only used by the Windows.Phone.Media.Capture service, which is provided in
Windows Phone 8.1 for backwards compatibility only. Windows.Media.Capture does not support this
customization.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Camera">
<Setting Name="MaximumEnumerablePhotoSize" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value for MaximumEnumerablePhotoSize to the photo resolution in pixels. For example, to set 5
megapixels as the maximum enumerable photo size, set Value to 5242880 (decimal) or 0x500000
(hexadecimal).
Testing:
1. Flash the build containing this customization to a phone that has the hardware capability you are testing.
2. Run a test using the PhotoCaptureDevice.GetAvailableCaptureResolutions method and check if resolutions
higher than the value you specified for MaximumEnumerablePhotoSize have been filtered out.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Reset the audio volume limitation and warning
1/18/2019 • 3 minutes to read
OEMs can set the device to reset the audio volume limit and show the volume level warning every time the
volume level exceeds a certain permitted threshold for a certain length of time.
To reset the audio volume limit and show the volume level warning every time the volume level exceeds a certain
permitted threshold for at least 20 cumulative hours, OEMs can set the VolumeThresholdPlayTimeLimit
registry value. By default, the cumulative time limit for the audio volume limit is set to 20 hours and the OS timer
that tracks the cumulative time limit is fired every 6 minutes so OEMs must set
VolumeThresholdPlayTimeLimit to a value ≤ 19 hours and 54 minutes. When set, the volume drops back to
the permitted threshold set in the Audio volume limitation customization if the user has been listening to music at
more than the permitted volume limit and the cumulative listening time is between 19 hours, 54 minutes and 20
hours. The volume limit warning will also reappear.
Constraints: None
Instructions:
1. Create the MCSF policy setting that corresponds to the following registry key:
$(HKLM.MICROSOFT)\ZMediaQ\VolumeLimit\VolumeThresholdPlayTimeLimit
Type: REG_DWORD
Value: 000117D8
NOTE
Set Value to a hexadecimal value that corresponds to 19 hours and 54 minutes or less. In the above example, the
value 0x00117D8 corresponds to 71640 seconds or 19 hours and 54 minutes.
For more information about MCSF, see Managed Centralized Settings Framework (MCSF ). The following
code example shows an MCSF policy setting for the VolumeThresholdPlayTimeLimit registry value.
<SettingsGroup Path="VolumeLimit">
<Setting Name="VolumeThresholdPlayTimeLimit" Description="Resets the audio volume limit and
shows the volume level warning
every time the volume exceeds the VolumeLimit threshold for at least 20
cumulative hours.">
<RegistrySource Type="REG_DWORD"
Path="HKEY_LOCAL_MACHINE\Software\Microsoft\ZMediaQ\VolumeLimit\VolumeThresholdPlayTimeLimit" />
</Setting>
</SettingsGroup>
2. Add the policy setting in the previous step to a .pkg.xml file. The following code example shows the MCSF
policy setting within the .pkg.xml file.
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
Owner=""
Component=""
SubComponent=""
OwnerType="OEM"
ReleaseType="">
<Components>
<SettingsGroup Path="VolumeLimit">
<Setting Name="VolumeThresholdPlayTimeLimit" Description="Resets the audio volume limit and
shows the volume level warning
every time the volume exceeds the VolumeLimit threshold for at least 20
cumulative hours.">
<RegistrySource Type="REG_DWORD"
Path="HKEY_LOCAL_MACHINE\Software\Microsoft\ZMediaQ\VolumeLimit\VolumeThresholdPlayTimeLimit" />
</Setting>
</SettingsGroup>
</Components>
</Package>
In this example, provide values for the Owner, Component, SubComponent, and ReleaseType
attributes.
3. Use the .pkg.xml file that contains your MCSF policy setting to generate a package (or .spkg file) that you
can add to your OS image.
4. After you've created the .spkg, define the specific types of image builds that you want to contain the
package.
For example, the following code snippet shows a sample OEM feature manifest (FM ) file that may contain
the .spkg that includes the customization:
In this example, replace SourceDirectory with the location that contains the .spkg that you created in Step 3.
Also, replace the example OEMName.SoundCustomizations.VolumeThresholdPlayTimeLimit.spkg with the
name of the .spkg file.
5. Once you've defined the feature, modify your OEMInput.xml file to add a Features element (if one doesn't
already exist), add a new OEM child element (if one doesn't already exist), and add a new Feature entry
with the name of the feature that you just defined.
For example, the OEMInput.xml entry for the example VOLUME_THRESHOLD_PLAY_TIME_LIMIT feature
may look like the following:
<Features>
<OEM>
<Feature>VOLUME_THRESHOLD_PLAY_TIME_LIMIT</Feature>
</OEM>
</Features>
Related topics
Prepare for Windows mobile development
Customization answer file overview
Settings for capture mode, burst support, and burst
storage duration
1/18/2019 • 2 minutes to read
OEMs can configure burst support on the device, the default capture mode, and the default number of days to
store the bursts captured on the device.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Photos/OEM">
<Setting Name="BurstSupported" Value="" />
<Setting Name="CaptureMode" Value="" />
<Setting Name="DefaultBurstStorageDuration" Value="" />
</Settings>
</Static>
</ImageCustomizations>
```
2. Specify an Owner .
3. To configure burst support on the device, set BurstSupported to one of the following values:
VALUE DESCRIPTION
4. To configure the default capture mode on the device, set CaptureMode to one of the following values:
VALUE DESCRIPTION
5. To configure the default number of days to store the bursts captured on the device, set
DefaultBurstStorageDuration to the number of days you want to keep the bursts on the device. For example,
a value of 1 means the bursts will be kept for 1 day.
Microsoft recommends using any of these values: 1, 3, 7 (the default value set by the OS ), or 14. A value of
0 indicates that bursts will be stored forever.
Testing steps:
1. Flash a build containing this customization to a phone.
2. Launch the camera app.
3. To verify the support for burst mode, check if the burst icon is displayed on the right of the settings bar
when the camera app is launched.
4. To verify the default capture mode, check whether single shot or burst mode is selected the first time the
camera app was launched. The default should match the value that you specified. For example, if you
selected single shot, the camera icon on the right should be twice as big as the other icons.
5. To verify the default burst storage duration, go to the camera Settings screen, choose photo settings…,
and verify if the default value specified in the Keep unsaved burst photos for field matches the value that
you specified.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Video over LTE
1/18/2019 • 6 minutes to read
Partners can customize specific settings and behavior for Video over LTE to meet mobile operator requirements.
These include:
Showing or hiding the LTE video calling switch
Setting the default value for the switch
Customizing the name/label of the switch and the description
Specifying the timeout, in milliseconds, for the device to remain in video transition state
Enabling video conferencing
Specifying the amount of time before a video call is downgraded to a voice call due to low video quality
Hiding the video charges dialog that is displayed when the user turns on the LTE video calling switch
Constraints: Some None, some FirstVariationOnly
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
<!-- Add the resource-only dll file and language MUI packages if you are using Windows Phone 8.1
GDR1 and later versions of the OS -->
<Settings Path="Localization/MUI">
<!-- Use to add your base MUI DLL file -->
<Asset Name="BaseDll" Source="" />
<!-- Use to specify the language MUI packages (*.dll.mui) for the languages you are supporting and
have localized strings for -->
have localized strings for -->
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<!-- Add as many as you need -->
</Settings>
</Static>
<Settings Path="Phone/PerSimSettings/$(__IMSI)">
<Setting Name="ShowVideoCallingSwitch" Value="" />
<Setting Name="DefaultEnableVideoCalling" Value="" />
<Setting Name="DefaultEnableVideoCapability" Value="" />
<Setting Name="ShowVideoCapabilitySwitch" Value="" />
<Setting Name="AllowVideoConferencing" Value="" />
<Setting Name="SupressVideoCallingChargesDialog" Value="" />
</Settings>
<Settings Path="Phone/PhoneSettings">
<!-- Note that these settings are FirstVariationOnly -->
<-- If you enable video conferencing, you can also specify the number of participants that can be
added to the conference call -->
<Setting Name="ConferenceCallMaximumPartyCount" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Add the resource-only .dll file and the language MUI packages (*.dll.mui) for the languages you are
supporting. To do this, follow these steps:
a. Add the resource-only .dll that contains the custom display string by setting the BaseDll asset to
point to the location of your base MUI DLL file. For example: C:\Path\DisplayStrings.dll.
b. 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 the previous steps for the other languages.
The following example shows the customization answer file entries for en-US, fr-CA, and es-
MX languages:
<Asset Name="LanguageDll/en-US" Source="C:\Path\en-us\DisplayStrings.dll.mui" />
<Asset Name="LanguageDll/fr-CA" Source="C:\Path\fr-CA\DisplayStrings.dll.mui" />
<Asset Name="LanguageDll/es-MX" Source="C:\Path\es-MX\DisplayStrings.dll.mui" />
For more information, see Create a resource-only .dll for localized strings.
4. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
5. Define settings for a Variant, which are applied if the associated target's conditions are met.
6. To show or hide the LTE video calling switch, set ShowVideoCallingSwitch to one of the following values:
VALUE DESCRIPTION
**Note**
This setting does not set the default switch value. To do that, set `DefaultEnableVideoCalling`.
7. To set the initial default value for the LTE video calling switch, set DefaultEnableVideoCalling to one of the
following values:
VALUE DESCRIPTION
8. To set the initial value for LTE video capability sharing, set DefaultEnableVideoCapability to one of the
following values:
VALUE DESCRIPTION
9. To specify whether to show the video capability sharing switch on the phone Settings screen, set
ShowVideoCapabilitySwitch to one of the following values:
VALUE DESCRIPTION
10. To enable LTE video calls to be merged into a conference call, set AllowVideoConferencing to one of the
following values:
VALUE DESCRIPTION
If this setting is not enabled, the conference option in the UI will never be available. It will always show
up as disabled (greyed out).
**Note**
Video conference support is dependent on support by the mobile operator and the device chipset.
11. To show or hide the video charges dialog that is displayed when the user turns on the LTE video calling switch,
set SupressVideoCallingChargesDialog to one of the following values:
VALUE DESCRIPTION
12. To set the time, in milliseconds, to wait for the response to the request to transition a VoLTE call to video, set
VideoTransitionTimeout . You can set the value to a number between 10000 and 30000, inclusive. If you set the
value to 0, the OS uses the default value of 30000 (30 seconds).
An alert tone is played multiple times during this request. Each alert tone will be played in 10 second increments.
The number of alert tones is determined by the request time out value divided by 10. For example:
If you set the value to 30000 (or 30 seconds), the alert tone will play three times at 0, 10 and 20 seconds,
and then 10 seconds later the request will time out.
If you set the value to 25000 (or 25 seconds), the alert tone will play three times at 0, 10, and 20 seconds,
then 5 seconds later the request will time out.
13. To customize the name or label of the LTE video calling switch and the description for the switch, set the
value for the following settings:
14. To customize the switch name or label, set the VideoCallingLabel value to the name of the resource-only .dll
file and specify the string offset. For example: @DisplayStrings.dll,-101.
Replace DisplayStrings.dll with the name of your .dll file and replace Offset with the correct offset for the
localized string.
15. To customize the switch description, set the VideoCallingDescription value to the name of the resource-only
.dll file and specify the string offset. For example: @DisplayStrings.dll,-102.
Replace DisplayStrings.dll with the name of your .dll file and replace Offset with the correct offset for the
localized string.
16. To set the timer, in milliseconds, to automatically drop video support from an active video call when the
video calling quality is low, set LowVideoQualityTimeout . This will transition the call to a VoLTE call. Set the
value to a number between 0 and 120000, inclusive.
A value of 0 disables the timer. This is also the OS default value.
Note
Support for this feature is dependent on support by the mobile operator and the chipset.
Testing:
1. Flash the build containing this customization to a device.
2. Go to the Phone settings screen.
3. Verify whether the switches are visible or the correct settings and values are showing up based on the
values you specified for the Video over LTE settings.
4. If you customized the switch label and description, verify that the correct localized strings are showing up
based on the device language.
5. If the right conditions are met, verify that the timeouts work as expected.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for ringtones and sounds
1/18/2019 • 2 minutes to read
Describes the customizations that you can configure for ringtones and sounds played by the device.
In this section
TOPIC DESCRIPTION
Additional alarms Partners can add one additional alarm sound to the phone for
use in the Alarm & Clocks app. Partners can also set a new
default alarm.
Additional notification sounds Partners can add up to three new notification sounds and a
reminder sound. In addition, you can also specify a default
notification sound for messaging, voicemails, and reminders.
Additional ringtones OEMs and mobile operators can each preload a set of custom
ringtone files on Windows mobile devices, and they can set a
default ringtone.
Call drop and call waiting sounds OEMs can customize the call drop and call waiting sounds.
Camera shutter sound The camera shutter sound that occurs when the user takes a
picture or starts filming a video can be turned off by removing
the Camera shutter option from the Sounds settings screen.
Ringtone store application Partner apps can be used to sell ringtones to users. The app
owner must provide the service for the ringtone catalog and
to manage downloads. Users are shown an option to Get
more ringtones in the ringtone picker, from which they can
automatically launch the ringtone store application.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Additional alarms
1/18/2019 • 3 minutes to read
Partners can add one additional alarm sound to the phone for use in the Alarm & Clocks app. Partners can also
set a new default alarm.
Alarms should be a maximum of 100 KB and have a length of 5 to 15 seconds. They must be in .wma format, with
a compression of 128 kbit/s for stereo or 64 kbit/s mono. Partner sounds should play at an appropriate volume
relative to other sounds and ringtones, and there should be minimal distortion from the device speaker, at full
volume.
Limitations and restrictions:
The names of the sounds must be localized for all display languages that ship on the device.
Sound files must be approved by Microsoft.
Partners must not move, delete, or modify the alarms provided by Microsoft.
Partners must keep the following design considerations in mind when implementing additional alarms:
File size: Ringtone recommended maximum 150 KB; Alarm 100 KB (others as small as possible)
Format: .wma
Compression: WMA (128 kbps/stereo; 64 kbps/mono)
Sound length: Ringtones 5-15 seconds; Alarm 5-15 seconds; Calendar 1-3 seconds; Alerts 0.5-1.5 seconds
Appropriate volumes: Sounds should be appropriately balanced with ringtones and system sounds that ships as
part of the OS.
Minimal distortion from phone speaker, at full volume.
Constraints: FirstVariationOnly
Instructions:
To add an additional alarm sound
1. Create a .dll that contains the alarm display name. For more information on how to do this, see Create a
resource-only .dll for localized strings.
2. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="AdditionalAlarms"
Description="Use to add additional alarm sounds and set a new default alarm sound."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Localization/MUI">
<!-- Use to add your base MUI DLL file -->
<Asset Name="BaseDll" Source="" />
<!-- Use to specify the language MUI packages (*.dll.mui) for the languages you are supporting and
have localized strings for -->
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<!-- Add as many as you need -->
</Settings>
</Static>
</ImageCustomizations>
3. Specify an Owner .
4. Add the resource-only .dll that contains the alarm display name by setting the BaseDll asset to point to the
location of your base MUI DLL file. For example: C:\Path\DisplayStrings.dll.
5. 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 the previous steps for the other languages.
The following example shows the customization answer file entries for en-US, fr-CA, and es-MX
languages:
2. Set the Value of the default alarm sound to the file name of the default alarm sound you want to use. For
example: NewAlarmSound.wma
Testing:
1. Flash the build containing this customization and multiple display languages to a mobile device.
2. Go to Alarms & Clock in the apps list.
3. Tap the + or add button to create a new alarm.
4. Choose Pick from ringtones and verify the custom alarm sound is in the Sounds list.
5. If a new default alarm sound is set, verify the Sound drop-down list defaults to the specified alarm sound.
6. Verify the custom alarm name is correct for all display languages on the device.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Additional notification sounds
1/18/2019 • 4 minutes to read
Partners can add up to three new notification sounds and a reminder sound. In addition, you can also specify a
default notification sound for messaging, voicemails, and reminders.
Alerts should have a length of 1 to 3 seconds and be as small as possible in size. They must be in .wma format,
with a compression of 128 kbit/s for stereo or 64 kbit/s for mono. Partner sounds should play at an appropriate
volume relative to other sounds and ringtones, and there should be minimal distortion from the device speaker, at
full volume.
Limitations and restrictions:
The names of the sounds must be localized for all display languages that ship on the device.
Sound files must be approved by Microsoft.
Partners must not move, delete, or modify the notification sounds provided by Microsoft.
Partners must keep the following design considerations in mind when implementing additional notification
sounds:
File size: Ringtone recommended maximum 150 KB; Alarm 100 KB (others as small as possible)
Format: .wma
Compression: WMA (128 kbps/stereo; 64 kbps/mono)
Sound length: Ringtones 5-15 seconds; Alarm 5-15 seconds; Calendar 1-3 seconds; Alerts 0.5-1.5 seconds
Appropriate volumes: Sounds should be appropriately balanced with the ringtones and system sounds that's
part of the OS.
Minimal distortion from phone speaker, at full volume.
Constraints: FirstVariationOnly
Instructions:
To add additional notification sounds
1. Create a .dll that contains the notification sound display name. For more information on how to do this, see
Create a resource-only .dll for localized strings.
2. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="AdditionalNotifications"
Description="Use to add additional notification sounds and set new default
notification sounds for
messaging, voicemail, or calendar reminders."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Localization/MUI">
<!-- Use to add your base MUI DLL file -->
<Asset Name="BaseDll" Source="" />
<!-- Use to specify the language MUI packages (*.dll.mui) for the languages you are supporting and
have localized strings for -->
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<!-- Add as many as you need -->
</Settings>
<Settings Path="EventSounds">
<!-- Use to add up to three new notification sounds and one additional notification sound for
calendar reminders -->
<Asset Name="NotificationSounds" DisplayName="@DisplayStrings.dll,-Offset" Source="" />
<Asset Name="NotificationSounds" DisplayName="@DisplayStrings.dll,-Offset" Source="" />
<Asset Name="NotificationSounds" DisplayName="@DisplayStrings.dll,-Offset" Source="" />
<Asset Name="NotificationSounds" DisplayName="@DisplayStrings.dll,-Offset" Source="" />
</Settings>
</Static>
</ImageCustomizations>
3. Specify an Owner .
4. Add the resource-only .dll that contains the notification sounds' display names by setting the BaseDll asset
to point to the location of your base MUI DLL file. For example: C:\Path\DisplayStrings.dll.
5. 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 the previous steps for the other languages.
The following example shows the customization answer file entries for en-US, fr-CA, and es-MX
languages:
<Settings Path="EventSounds">
<!-- Use to set a new default voicemail notification sound -->
<Setting Name="DefaultVoicemailAlertSound" Value="" />
</Settings>
2. For the default notification sound that you want to configure, set the Value to the desired default
notification sound file name.
For example, if you only want to set DefaultMessagingSound to the messaging sound that you added, set the
default messaging sound value to MessagingSound.wma.
Testing:
1. Flash the build containing this customization and multiple display languages to a mobile device.
2. Go to the Sounds settings screen. Verify that all added custom notification sounds appear as expected.
3. Go to the Notifications & actions screen in Settings. From the list, select an email account, Messaging,
or Phone, and then select the Notification sound drop-down list to verify all added custom notification
sounds for voicemail and messaging appear in the drop-down list.
4. Verify the custom notification sound names are correct for all display languages on the device.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Additional ringtones
1/18/2019 • 3 minutes to read
OEMs and mobile operators can each preload a set of custom ringtone files on Windows mobile devices, and they
can set a default ringtone.
Ringtones should be a maximum of 150 KB and have a length of 5 to 15 seconds. They must be in .wma format,
with a compression of 128 kbit/s for stereo or 64 kbit/s for mono. Partner ringtones should play at an appropriate
volume relative to other sounds and ringtones, and there should be minimal distortion from the device speaker, at
full volume.
Limitations and restrictions:
The names of the ringtones must be localized for all display languages that ship on the device.
Partners must not move, delete, or modify the ringtones provided by Microsoft.
Partners can only change the default alert sound used for phone calls – all other ringtone and alert defaults
must not be changed unless specified elsewhere in the documentation.
Users can delete partner ringtones.
Partners must keep the following design considerations in mind when implementing additional ringtones:
File size: Ringtone recommended maximum 150 KB; Alarm 100 KB (others as small as possible)
Format: .wma
Compression: WMA (128 kbps/stereo; 64 kbps/mono)
Sound length: Ringtones 5-15 seconds; Alarm 5-15 seconds; Calendar 1-3 seconds; Alerts 0.5-1.5 seconds
Appropriate volumes: Sounds should be appropriately balanced with ringtones and system sounds that ship
with the OS.
Minimal distortion from device speaker, at full volume.
Constraints: FirstVariationOnly
Instructions:
To add additional ringtones
1. Create a .dll that contains the ringtone display name. For more information on how to do this, see Create a
resource-only .dll for localized strings.
2. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="AdditionalRingtones"
Description="Use to add ringtone sound files and set a new default ringtone."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Localization/MUI">
<!-- Use to add your base MUI DLL file -->
<Asset Name="BaseDll" Source="" />
<!-- Use to specify the language MUI packages (*.dll.mui) for the languages you are supporting and
have localized strings for -->
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<!-- Add as many as you need -->
</Settings>
<Settings Path="EventSounds">
<!-- Use to add additional ringtones -->
<Asset Name="Ringtones" DisplayName="@DisplayStrings.dll,-Offset" Source="" Type="" />
<Asset Name="Ringtones" DisplayName="@DisplayStrings.dll,-Offset" Source="" Type="" />
</Settings>
</Static>
</ImageCustomizations>
3. Specify an Owner .
4. Add the resource-only .dll that contains the ringtone sounds' display names by setting the BaseDll asset to
point to the location of your base MUI DLL file. For example: C:\Path\DisplayStrings.dll.
5. 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 the previous steps for the other languages.
The following example shows the customization answer file entries for en-US, fr-CA, and es-MX
languages:
<Settings Path="EventSounds">
<!-- Use to set a new default ringtone -->
<Setting Name="DefaultRingtone" Value="" />
</Settings>
2. Set the Value to the desired default ringtone sound file name. For example: MellowRingtone.wma.
Testing:
1. Flash the build containing this customization and multiple display languages to a mobile device.
2. Go to the Ringtone screen in Settings.
3. Verify all added custom ringtones are in the Ringtone drop-down list.
4. If a new default ringtone is set, verify the Ringtone drop-down list defaults to the specified ringtone.
5. Verify the custom ringtone names are correct for all display languages on the device.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Call drop and call waiting sounds
1/18/2019 • 2 minutes to read
OEMs can customize the call drop and call waiting sounds.
On devices that exhibit a loud snap or tone during a phone call, OEMs can customize these sounds to add 50 ms of
silence and improve the user experience. When used for this purpose, OEMs must:
Add a sound file that contains 50 ms of silence. The sound file must be in a .wma format.
Set the registry settings to the name of the sound file. This removes the loud snap or tone heard during
some phone calls.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="CallDropCallWaitingSounds"
Description="Use to customize the call drop and call waiting sounds."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="EventSounds">
<!-- Use to add the OEM sound file. Change the Source path to poitn to the location and file name
of the .wma sound file. -->
<Asset Name="NotificationSounds" Source="" />
<Asset Name="NotificationSounds" Source="" />
<!-- Use to set the default call drop sound. Set the value to the file name of the sound file. -->
<Setting Name="DefaultCallDropSound" Value="" />
<!-- Use to set the default call waiting sound. Set the value to the file name of the sound file.
-->
<Setting Name="DefaultCallWaitingSound" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Add additional notification sounds by adding a NotificationSounds asset. To do this:
Set the asset's Name to NotificationSounds .
Set Source to the full path to the call drop sound file on your development machine. For example:
C:\Path\CallDropSound.wma.
Repeat the previous steps for any additional ringtone sound, such as if you are using a different
sound file for the call waiting sound.
4. Set the value of DefaultCallDropSound to the desired default ringtone sound file name. For example:
CallDropSound.wma.
5. Set the value of DefaultCallWaitingSound to the desired default ringtone sound file name. For example:
CallWaitingSound.wma.
Testing:
1. Flash the build that contains this customization to a device.
2. Receive or make a phone call.
3. Verify that a loud snap or tone is no longer heard.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Camera shutter sound
1/18/2019 • 2 minutes to read
The camera shutter sound that occurs when the user takes a picture or starts filming a video can be turned off by
removing the Camera shutter option from the Sounds settings screen.
This customization affects all camera apps on the mobile device. If camera sounds are not enforced, camera sounds
will respond to the ringer and notification volume and sounds will not play through the combo device.
Limitations and restrictions:
OEMs can remove this user setting only for markets in which the camera shutter sound is a legally required
component due to privacy laws.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Camera">
<Setting Name="ShutterSoundUI" Value="0" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the ShutterSoundUI``Value to one of the following:
VALUE DESCRIPTION
Testing:
1. Flash an image containing this customization to a phone.
2. Go to the Sounds settings screen.
3. Scroll down and verify that the Camera shutter setting is no longer visible.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Ringtone store application
1/18/2019 • 2 minutes to read
Partner apps can be used to sell ringtones to users. The app owner must provide the service for the ringtone
catalog and to manage downloads. Users are shown an option to Get more ringtones in the ringtone picker, from
which they can automatically launch the ringtone store application.
Constraints: FirstVariationOnly
Instructions:
1. Create an application that supports ringtones. For more information on how to do this, see How to use the
save ringtone task for Windows Phone in the Windows Phone SDK Documentation.
2. Create a customization answer file using the contents shown in the following code sample.
<Static>
<!-- Preload the ringtone store app. Specify the source, license, and ProvXML files. -->
<Applications>
<Application Source=""
License=""
ProvXML="" />
</Applications>
<Settings Path="EventSounds">
<Setting Name="GetMoreRingtonesLink" Value="app://" />
</Settings>
</Static>
</ImageCustomizations>
3. Specify an Owner .
4. Preload your ringtone store app. To do this:
a. Set Source to the location and file name of your .xap or .appx. For example,
C:\Path\ContosoRingtoneStoreApp.xap.
b. Set License to the location and name of the app license file. For example,
C:\Path\ContosoRingtoneStoreAppLicense.xml.
c. Set ProvXML to the location and name of the provXML file. For example,
C:\Path\mpap_oemapp_01.provxml.
5. Set the value of GetMoreRingtonesLink your application ID preceded by the app:// prefix. For example, if
your app ID is {5B04B775 -356B -4AA0 -AAF8 -6491FFEA5605 }, you must set the value to
app://5B04B775-356B-4AA0-AAF8-6491FFEA5605 . You may also set it to
app://5B04B775-356B-4AA0-AAF8-6491FFEA5605/_default .
Testing:
1. Flash the build containing this customization to a phone.
2. Go to the Sounds screen in Settings.
3. Select the Ringtone picker.
4. In the ringtone picker screen, scroll to the bottom and verify that the Get more link is visible.
5. Tap the link and confirm that it launches your ringtone store application.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for SMS and MMS
1/18/2019 • 6 minutes to read
Contains settings that you can configure for SMS and MMS.
In this section
TOPIC DESCRIPTION
Add encoding extension tables for SMS Partners can extend the set of supported SMS encodings.
Automatic send retry and resize settings for MMS messages For MMS messages that have photo attachments and that fail
to send, partners can choose to automatically resize the photo
and attempt to resend the message.
Automatically retry downloading MMS messages Partners can configure the messaging app to automatically
retry downloading an MMS message if the initial download
attempt fails.
Content location in the multimedia message service center For networks that require it, partners can specify the default
(MMSC) GET path within the MMSC to use when the GET URL is
missing from the WAP push MMS notification.
Delay for resend attempts If an SMS message fails to send correctly, partners can specify
the number of additional attempts and the minimum delay
between them in seconds.
Disable editing of the SMS center number To meet market or mobile operator requirements, OEMs can
configure a setting to prevent users from editing the SMS
center number in the messaging settings CPL.
Disable the EMS long messages feature Partners can disable the enhanced messaging service (EMS),
which concatenates text messages so that the user can enter
more than 160 characters in a single message.
Expiration time for SMS messages Partners can set the expiration time before the device deletes
the received parts of a long SMS message.
Extract phone numbers in strings Partners can extend the entity extraction feature that
recognizes phone numbers in text. This customization allows
strings of numbers that are concatenated to a string to be
recognized.
Full error messages for SMS and MMS Partners can choose to display additional content in the
conversation view when an SMS or MMS message fails to
send.
IMS retry For networks that support it, when an outgoing SMS message
fails to send due to a transient error, partners can specify the
threshold for the number of attempts to resend the SMS over
IMS before switching over to 3GPP or 3GPP2.
TOPIC DESCRIPTION
IMSI authentication For networks that require it, MMS messages can include the
IMSI in the GET and POST header that the message center
uses to authenticate the mobile subscriber.
International assisted dialing for SMS If partners have turned off Assistance for dialing international
phone numbers, partners may still override the MCC and
MNC used for plus code replacement when sending SMS.
Maximum length for SMS messages Partners can specify a maximum length for SMS messages.
Maximum number of attachments for MMS messages Partners can specify the maximum number of attachments for
MMS messages, from 1 to 20.
Maximum number of recipients for SMS and MMS Partners can set the maximum number of recipients to which
a single SMS or MMS message can be sent.
MMS APN settings Partners can choose to display an Add MMS APN or Edit
MMS APN button that enables the user to configure the APN
used for MMS.
MMS data options Partners can configure the MMS data options to show the
Allow MMS if cellular data is off toggle in the Messaging
settings screen, allow MMS messaging even if data is turned
off, and allow MMS messaging even if data is turned off and
the user is roaming.
MMS for group messages For the setting that determines if group messages sent to
multiple people must be sent as MMS, partners can customize
the setting by hiding or showing the Group Text toggle in
the Messaging settings screen, changing the default value,
and configuring the option to alert the user of possible
additional charges for sending a group text as MMS.
MMS receipt acknowledgement Partners can specify whether the device automatically sends a
receipt acknowledgment for MMS messages when messages
arrive, and allow users to control the receipt acknowledgments
by using the Send MMS acknowledgement toggle in the
Messaging setting screen.
Permanent SMS message failures Partners can mark SMS message failures as permanent failures
so that the user will not be given the option to attempt to
resend the SMS.
Ports that accept cellular broadcast messages Partners can specify one or more ports from which the device
will accept cellular broadcast messages.
Proxy authorization for MMS Partners can specify the use of NAI information as a dedicated
header for MMS authentication for mobile networks that
require this functionality. The string value must be the MMS
header used for authentication.
TOPIC DESCRIPTION
Select multiple recipients for SMS and MMS messages Partners can show the select all contacts/unselect all menu
option to allow users to easily select multiple recipients for an
SMS or MMS message.
Send SMS messages to SMTP addresses Partners can configure SMS messages to be sent to email
addresses as well as phone numbers.
Server for MMS acknowledgement messages By default, the MMS transport sends an acknowledgement to
the provisioned MMS application server (MMSC). However, on
some networks, the correct server to use is sent as a URL in
the MMS message. In that case, a registry key must be set, or
else the acknowledgement will not be received and the server
will continue to send duplicate messages.
SMS delivery confirmation Partners can specify whether users receive notification that
SMS messages could not be delivered, and determine whether
users can control these notifications by using the SMS
delivery confirmation toggle in the Messaging settings
screen.
SMS encoding Partners can change the default GSM 7-bit code page
decoding and encoding, and can also extend the set of
supported SMS encodings by setting an always on GSM 7-
bit shift table, adding encoders, and adding decoders.
SMS intercept deny list OEMs can specify one or more filters in order to intercept
incoming SMS messages intended for mobile operator partner
applications that are not installed on the device.
SMS intercept ports OEMs can configure ports on which a Wireless Application
Protocol (WAP)-formatted message can be intercepted by the
mobile operator app.
Support HTTP cache-control no-transform for MMS For networks that require it, OEMs can add support for the
HTTP header Cache-Control No-Transform directive for MMS
messages.
Supported protocols for service indication messages Partners can add additional supported protocols for service
indication messages.
Switch from SMS to MMS for long messages For networks that do support MMS and do not support
segmentation of SMS messages, partners can specify an
automatic switch from SMS to MMS for long messages.
Truncated content handling for WAP push notification For networks that require non-standard handling of single-
segment incoming MMS WAP Push notifications, partners can
specify that MMS messages may have some of their content
truncated and that they may require special handling to
reconstruct truncated field values.
Use insert-address-token or local raw address To meet certain mobile operator requirements, OEMs can
customize the OS image to use either the insert-address-
token or the local raw address for the From field in MMS
messages.
TOPIC DESCRIPTION
Use UTF-8 for MMS messages with unspecified character Some incoming MMS messages may not specify a character
encoding encoding. To properly decode MMS messages that do not
specify a character encoding, OEMs can set UTF-8 to decode
the message.
User agent profile for MMS messages Partners can specify a user agent profile to use on the device
for MMS messages.
User agent string for MMS messages Partners can replace the entire user agent string for MMS.
User alert for service indication messages Partners can hide the user prompts for signal-medium
messages.
Video attachments in MMS Partners can specify the transcoding to use for video files sent
as attachments in MMS messages.
Voicemail SMS intercept Partners can define a filter that intercepts an incoming SMS
message and triggers visual voicemail synchronization. The
filtered message does not appear in the user’s conversation
list.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Add encoding extension tables for SMS
1/18/2019 • 4 minutes to read
NOTE
Ignore the note about not using the function found on the MSDN web site. This note does not apply for SMS
encoding.
When implementing your code page DLL, the DLL must have at least the following:
A .def file that declares the name of the DLL —for example, MyCodePageDLL —and exports the
NlsDllCodePageTranslation function:
LIBRARY MyCodePageDLL
EXPORTS
NlsDllCodePageTranslation
A .c file that defines the DLL entry point function—for example, DllMain —as well as the
NlsDllCodePageTranslation function. This is the function that the APIs will call in case a particular
code page value is associated with your code page DLL.
// NlsDllCodePageTranslation
//
// This routine is the main exported procedure for the functionality in
// this DLL. All calls to this DLL must go through this function.
//
DWORD NlsDllCodePageTranslation(
__in DWORD CodePage,
__in DWORD dwFlags,
__in_ecount(cchMultiByte) LPSTR lpMultiByteStr,
__in int cchMultiByte,
__out_ecount(cchWideChar) LPWSTR lpWideCharStr,
__in int cchWideChar,
__inout LPCPINFO lpCPInfo)
case ( NLS_CP_MBTOWC ) :
{
// ensure unsupported flag combinations are not passed in
if (dwFlags & ~(NLS_CP_MBTOWC | MB_ERR_INVALID_CHARS))
{
// other flags not allowed
SetLastError(ERROR_INVALID_FLAGS);
return (0);
}
case ( NLS_CP_WCTOMB ) :
{
// ensure unsupported flag combinations are not passed in
if (dwFlags & ~(NLS_CP_WCTOMB | WC_ERR_INVALID_CHARS))
{
// other flags not allowed
SetLastError(ERROR_INVALID_FLAGS);
return (0);
}
55005–55049 Reserved
3. Add your code page DLL to the device. To do this, set the CodepageDLL asset source to the location and
file name of your code page DLL. For example:
4. Register your DLL with NLS by setting the corresponding EncodingCodePages/CodepageID550XX setting.
For example, if the DLL is Codepage55050.dll , set EncodingCodePages/CodepageID55050 as shown in the
following example:
5. Add the registered codepages to the custom OEM package as described in SMS encoding.
Alternatively, you can write a settings app that dynamically sets the registry values depending on the user-
selected encoding scheme. For example, if the OEM app sets the encoding to 55050, set the
Encodings/GSM7BitEncodingPage setting and reboot the device.
Testing steps:
Work with your mobile operator to test this customization on their network.
Automatic send retry and resize settings for MMS
messages
1/18/2019 • 3 minutes to read
For MMS messages that have photo attachments and that fail to send, partners can choose to automatically resize
the photo and attempt to resend the message.
When this feature is enabled, partners must specify a size greater than or equal to 10 KB to use when resizing the
photo.
Partners can also specify the number of times that the device can retry sending the failed MMS message and
photo before the user receives a notification that the photo could not be sent.
The resize and retry settings can be used independently:
If only the resize setting is set, the MMS will resize the photo and retry to send the message only once.
If both settings are set, the MMS with a photo will be resized and the message will be resent up to three
times.
If only the retry setting is set, the MMS with the photo will not be resized and the message will be resent up
to three times.
Limitations and restrictions:
This resize feature only applies to photos. Videos, audio files, and other file types will not be resized.
The maximum number of automatic resend attempts is set to 3.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="AutoResizeforMMS"
Description="For MMS messages with photo attachments that fail to send, use to
resize the photo and attempt to resend the MMS."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<!-- Specify the maximum size to use to resize the photo in KB. Minimum is 0xA (10 KB). -->
<Setting Name="RetrySize" Value="" />
<!-- Specify the number of times the MMS transport will attempt to resend the MMS, max is 0x3. -->
<Setting Name="MaxRetryCount" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Specify the RetrySize``Value to set a maximum size, in KB, to use when resizing the photo.
The minimum message retry size is 0xA (10 KB ). If this number is less than 0xA, the value will be ignored
and the device will not attempt to resize and resend large photos.
6. Specify the MaxRetryCount``Value to specify the number of times the MMS transport will attempt resending
the MMS message. This value has a maximum limit of 0x3.
Keep the following in mind when setting the value for RetrySize and MaxRetryCount :
If MaxRetryCount is not set and RetrySize is set, the MMS transport will retry sending the MMS message
once using the specified RetrySize . This behavior is similar to the default behavior in Windows 10 Mobile.
If MaxRetryCount is set and RetrySize is not set, the MMS transport will not resize the MMS message and
the message will be resent up to three times.
Testing steps:
1. Flash the build containing this customization to a device.
2. Go to the messaging application and attempt to attach a file that is larger than the limit that you set.
3. Send the photo. You may notice a slight delay. When the message arrives, the photo's size should be equal
to the limit you specified for RetrySize .
4. If the message fails to send the first time, verify that the number of attempts to resend the message is equal
to the limit you set for MaxRetryCount .
Related topics
Prepare for Windows mobile development
Customization answer file overview
Automatically retry downloading MMS messages
1/18/2019 • 2 minutes to read
Partners can configure the messaging app to automatically retry downloading an MMS message if the initial
download attempt fails.
When this customization is enabled, the download is retried 3 times at 20-, 40-, and 60-second intervals. The
following example shows how the retry intervals work using a random download time:
TIME ACTIVITY
If the MMS download fails after the third retry attempt, the message persists in the appropriate thread with a link
that the user can tap to retry the download manually. If the user’s manual download attempt fails, the automatic
retries are triggered again.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="AutoRetryDownloadForMMS"
Description="Use to configure the messaging app to automatically retry downloading
an MMS message if the initial download attempt fails."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<!-- Set to 1 to enable or 0 to disable -->
<Setting Name="AutoRetryDownload" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set AutoRetryDownload to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash the build containing this customization to a device with a UICC or CDMA connection.
2. Successfully testing this customization requires the MMS message to fail, so work with mobile operator
partner to test this customization on their network.
Be sure to test the scenario where the automatic retry attempt fails for a third time to verify the appearance
of the manual download link.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Content location in the multimedia message service
center (MMSC)
1/18/2019 • 2 minutes to read
For networks that require it, partners can specify the default GET path within the MMSC to use when the GET URL
is missing from the WAP push MMS notification.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="DefaultContentLocationUrl" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set DefaultContentLocationUrl``Value to specify the default GET path within the MMSC.
Testing steps:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Delay for resend attempts
1/18/2019 • 2 minutes to read
If an SMS message fails to send correctly, partners can specify the number of additional attempts and the
minimum delay between them in seconds.
These settings are managed by the modem. For more information, contact the SoC vendor.
Disable editing of the SMS center number
1/18/2019 • 2 minutes to read
To meet market or mobile operator requirements, OEMs can configure a setting to prevent users from editing the
SMS center number in the messaging settings CPL.
By default, the setting does not exist and users can edit the SMS center number. A warning statement related to
the changing the SMS center number is also displayed below the SMS center number.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SmscPanelDisabled"
Description="Use to prevent users from editing the 'SMS center number' in the
messaging settings CPL."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="SmscPanelDisabled" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set SmscPanelDisabled to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash the build that contains this customization to a device.
2. Go to the Messaging settings screen.
3. Verify that the correct settings option is enabled depending on the default value that you set.
If SmscPanelDisabled is set to 1 or 'True', verify that the SMS center number cannot be edited.
If SmscPanelDisabled is set to 0 or 'False', verify that the SMS center number can be edited and the
warning text below this option is visible.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Disable the EMS long messages feature
1/18/2019 • 2 minutes to read
Partners can disable the enhanced messaging service (EMS ), which concatenates text messages so that the user
can enter more than 160 characters in a single message. If EMS is disabled, the user can still enter more than 160
characters. However, the send button is disabled and the UI alerts the user that the text message is too long
instead of showing the character count of the text entry.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="DisableEMSLongMessages"
Description="Use to disable the enhnaced messaging service (EMS) long messages
feature on Windows Phones. If EMS is disabled,
users can still enter more than 160 characters, but the send button is
disabled and the user sees an alert
that the message is too long."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/SMS">
<!-- Set the value to 1 to limit the size of the message to one page and disable EMS. -->
<Setting Name="SmsPageLimit" Value="1" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/SMS">
<!-- Set the value to 1 to limit the size of the message to one page and disable EMS. -->
<Setting Name="SmsPageLimit" Value="1" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set SmsPageLimit to 1 to limit the size of the message to one page and disable EMS.
Testing:
1. Flash the build containing this customization to a device with a cellular connection.
2. Open the messaging application and attempt to send a message with a length that exceeds 160 characters.
3. Verify that the send button is disabled and that an alert that the text message is too long is showing next to
the character count of the text entry.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Expiration time for SMS messages
1/18/2019 • 2 minutes to read
Partners can set the expiration time before the device deletes the received parts of a long SMS message.
For example, if the device is waiting for a three-part SMS message and the first part has been received, the first
part will be deleted when the time expires and the other part of the message has not arrived. If the second part of
the message arrives before the time expires, the first and second parts of the message will be deleted if the last
part does not arrive after the time expires. The expiration time is reset whenever the next part of the long message
is received.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample or use the
sample SMSExpirationTime.xml file.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SMSExpirationTime"
Description="Use to set the expiration time before the device deletes the received
parts of a long SMS message."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/SMS">
<Setting Name="MessageExpirySeconds" Value="" />
<!-- Default is 0x15180 which is 1 day or 86400 seconds. -->
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/SMS">
<Setting Name="MessageExpirySeconds" Value="" />
<!-- Default is 0x15180 which is 1 day or 86400 seconds. -->
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set MessageExpirySeconds to the number seconds that the device should wait before deleting the received
parts of a long SMS messages. This value should be in hexadecimal and must be prefixed with 0x.
The default value is 0x15180, which is equivalent to 1 day or 86,400 seconds.
Testing:
1. Flash the build containing this customization to a device with a UICC.
2. From another device, send a long SMS message to the device containing the customization.
3. Verify that received parts of the long message are deleted within the expiration time that you have set if the
next part is not received within that same amount of time.
Note Work with your mobile operator to fully test this customization.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Extract phone numbers in strings
1/18/2019 • 2 minutes to read
Partners can extend the entity extraction feature that recognizes phone numbers in text. This customization allows
strings of numbers that are concatenated to a string to be recognized.
Windows supports entity extraction in the Messaging app (which is also shared with the Email and Calendar apps).
This feature can detect a sequence of numbers, which can be a phone number, in a received SMS or MMS
message and enable the user to call the phone number by making it a target that the user can tap and easily save,
or call without retyping the number.
This customization extends entity extraction by enabling OEMs to specify whether a sequence of numbers that is
concatenated to a string (in a left-to-right device language including English, French, Italian, Simplified Chinese,
Traditional Chinese, and other left-to-right languages) should be detected as a phone number. The minimum
amount of numbers that the OS considers as a phone number is five (5).
When this feature is enabled, only the numeric sequence is underlined and shown as a tappable string; the non-
numeric character is not underlined. When this feature is enabled on devices that have dual SIMs, it is applied to
both SIM slots.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Messaging/GlobalSettings">
<Setting Name="ExtractPhoneNumbersInStrings" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set ExtractPhoneNumbersInStrings to one of the following values:
VALUE DESCRIPTION
VALUE DESCRIPTION
Testing steps:
Work with your mobile operator partner to fully test this customization on their network.
1. Flash the build containing this customization to a device with at least one active SIM or UICC.
2. Make sure that the device language is set to a language that has left-to-right characters, such as English,
French, Italian, Simplified Chinese, and Traditional Chinese.
3. Open the Messaging app.
4. Receive several SMS or MMS messages that contain a sequence of digits that are:
a. Less than 5 digits
b. More than 5 digits
c. Less than 5 digits and have the digits concatenated to one or more non-numerical characters, such as
P1234 or PhoneNumber1234.
d. More than 5 digits and with the digits concatenated to one or more non-numerical characters, such
as P55512 or PhoneNumber55512.
5. For each case specified in the previous step, verify whether the sequence of numbers is detected as a phone
number by the OS based on the value you specified for the ExtractPhoneNumbersInStrings setting.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Full error messages for SMS and MMS
1/18/2019 • 2 minutes to read
Partners can choose to display additional content in the conversation view when an SMS or MMS message fails to
send. This content includes a specific error code in decimal format that the user can report to technical support.
Common errors also include a friendly string to help the user self-diagnose and fix the problem.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="ErrorCodeEnabled" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. The LimitRecipients setting limits the maximum number of recipients that a user can send messages to,
and this value is in the range 0 < LimitRecipients <= 500 (decimal). When setting the value for
LimitRecipients , you can use either decimal or the equivalent hexadecimal value (with a 0x prefix).
VALUE DESCRIPTION
Testing steps:
1. Flash the build containing this customization to a device.
2. Ensure that the device is able to send SMS or MMS messages.
3. Open the messaging application to send SMS or MMS messages.
4. Work with your mobile operator to create error scenarios for messaging.
5. The error message displayed on the messaging screen should start with an explanation in words of the
problem, and end in either "MMS error: ####" or "SMS error: ####".
Related topics
Prepare for Windows mobile development
Customization answer file overview
IMS retry
1/18/2019 • 2 minutes to read
For networks that support it, when an outgoing SMS message fails to send due to a transient error, partners can
specify the threshold for the number of attempts to resend the SMS over IMS before switching over to 3GPP or
3GPP2. Partners can also specify to retry sending the SMS message once over 3GPP or 3GPP2 without a user
prompt if the original message was sent over IMS and failed.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="IMSRetry"
Description="Use to specify settings related to SMS messages sent over IMS."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/SMS">
<!-- Use to specify the threshold for the number of attempts to resend the SMS over IMS -->
<Setting Name="3GPP/IMS/AttemptThresholdForIMS" Value="" />
<!-- Use to retry sending the SMS message once wihtout a user prompt -->
<Setting Name="3GPP/IMS/RetryEnabled" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/SMS">
<!-- Use to specify the threshold for the number of attempts to resend the SMS over IMS -->
<Setting Name="3GPP/IMS/AttemptThresholdForIMS" Value="" />
<!-- Use to retry sending the SMS message once without a user prompt -->
<Setting Name="3GPP/IMS/RetryEnabled" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set the 3GPP/IMS/AttemptThresholdForIMS``Value to specify the threshold for the number of attempts to
resend the SMS over IMS. If you need to enable SMS over IMS, then you must set the value to 1 or higher
integer.
For example, if you set this value to 2, this will result in two total attempts. If the value is set to N, it will
result in N number of attempts. This value will vary for each mobile operator so work with your mobile
operator partner to obtain the correct or required value. If the threshold is exceeded, the SMS will no longer
be sent over IMS, but will be sent using the available 3GPP or 3GPP2 channel.
5. Set the 3GPP/IMS/RetryEnabled``Value to retry sending the SMS message once without a user prompt if the
original message was sent over IMS and failed with RIL_E_IMSTEMPFAILURE. The client is not notified of
the initial failure. The retry attempt will not be over IMS.
The default value is 1, which means this behavior is enabled by default. Set to 0 to disable this behavior.
Testing:
1. Flash the build containing this customization to a device with a UICC or CDMA connection.
2. Successfully testing this customization requires the message to fail so please work with your mobile
operator to test this customization on their network.
During testing, resending the failed SMS message requires the UI. Verification of the tests need to be done
using the logs at the network and modem levels.
Related topics
Prepare for Windows mobile development
Customization answer file overview
IMSI authentication
1/18/2019 • 2 minutes to read
For networks that require it, MMS messages can include the IMSI in the GET and POST header that the message
center uses to authenticate the mobile subscriber.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<!-- The string value must be set to the IMSI provided by the UICC -->
<Setting Name="ImsiAuthenticationToken" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the ImsiAuthenticationToken``Value to the token used as the header for authentication. The string value
should match the IMSI provided by the UICC.
Testing steps:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
International assisted dialing for SMS
1/18/2019 • 2 minutes to read
If partners have turned off Assistance for dialing international phone numbers, partners may still override the
MCC and MNC used for plus code replacement when sending SMS. These values are used to generate the correct
IDD. This change applies regardless of roaming status. By setting AssistedDialingMcc and AssistedDialingMnc ,
international assisted dialing will be enabled for SMS if the user setting for international assisted dialing is
enabled.
For devices that support IMS over SMS, partners can override support for the assisted dialing plus ( +) code for
SMS by setting AssistedDialingPlusCodeSupportOverride . If enabled, the OS will not convert the plus ( +) code to
the proper assisted number when the user turns on the dialing assist option.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SMSAssistedDialing"
Description="Use to override the MCC and MNC used for sending SMS messages."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="AssistedDialingMcc" Value="" />
<Setting Name="AssistedDialingMnc" Value="" />
<!-- For an IMS over SMS supported device, partners can override the assisted dialing plus code
support for SMS.
<Setting Name="AssistedDialingPlusCodeSupportOverride" Value="" />
-->
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the values for the following settings to enable international assistance dialing for SMS:
SETTING DESCRIPTION
AssistedDialingMcc : REG_SZ The Mobile Country Code (MCC) to use for sending
SMS.
AssistedDialingMnc : REG_SZ The Mobile Network Code (MNC) to use for sending
SMS.
6. For a device that supports IMS over SMS, you can override the support for the assisted dialing plus ( +)
code for SMS. To do this, set AssistedDialingPlusCodeSupportOverride to one of the following values:
VALUE DESCRIPTION
Testing steps:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Maximum length for SMS messages
1/18/2019 • 2 minutes to read
Partners can specify a maximum length for SMS messages. This requires setting both the maximum number of
SMS fragments per SMS message, from 1 to 255, and the maximum size in bytes of each SMS fragment, from 16
to 140 bytes.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="MaxLengthSMS"
Description="Use to configure the maximum length for SMS messages."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
-->
<Static>
<Settings Path="CellCore/PerDevice/SMS">
<Setting Name="SmsFragmentLimit" Value="" />
<Setting Name="SmsPageLimit" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Use SmsFragmentLimit to set the maximum number of bytes in the user data body of an SMS message. You
must set the value between 16 (0x10) and 140 (0x8C ).
5. Use SmsPageLimit to set the maximum number of segments in a concatenated SMS message. You must set
the value to 255 (0xFF) or smaller.
Testing:
1. Flash the build containing this customization to a device that contains a UICC or a configured CDMA
connection.
2. Open the messaging application and attempt to send a message with a length that exceeds the combination
of SmsFragmentLimit x SmsPageLimit .
You should receive an error message indicating that the message was too long.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Maximum number of attachments for MMS messages
1/18/2019 • 2 minutes to read
Partners can specify the maximum number of attachments for MMS messages, from 1 to 20. The default is 5.
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="MMSLimitAttachments" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set MMSLimitAttachments to a value from 1 to 20 to specify the default number of attachments for MMS
messages. The default set by the OS is 5.
Testing:
1. Flash the build containing this customization to a device.
2. Go to the messaging application and attempt to attach multiple items up to and greater than the limit.
3. The attach button should become disabled after the maximum number of attachments has been reached.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Maximum number of recipients for SMS and MMS
1/18/2019 • 3 minutes to read
Partners can set the maximum number of recipients to which a single SMS or MMS message can be sent.
The maximum number of recipients that a user can send an SMS or MMS message to is limited to 500. This limit
exists because the OS also supports the Select multiple recipients for SMS and MMS messages feature and
having the number of recipients for SMS or MMS messages limited to a large, but finite, number ensures that
there is no system performance degradation or negative impact to the user experience. The maximum number of
recipients that a user can send messages to is in the range 0 <= 500 (decimal).
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="LimitRecipients" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. The LimitRecipients setting limits the maximum number of recipients that a user can send messages to,
and this value is in the range 0 < LimitRecipients <= 500 (decimal). When setting the value for
LimitRecipients , you can use either decimal or the equivalent hexadecimal value (with a 0x prefix).
Related topics
Prepare for Windows mobile development
Customization answer file overview
MMS APN settings
1/18/2019 • 3 minutes to read
Partners can choose to display an add mms apn or edit mms apn button that enables the user to configure the
APN used for MMS. APN values entered by the user are not verified and may not work. The user-entered APN is
always used if available; it is not overridden by ADC or over the air updates.
Limitations and restrictions:
If partners have set a list of permitted push proxy gateways, any user-entered APN that does not match with a
PPG value in the list will fail to work.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellUX">
<!-- Hides or shows the 'add mms apn' button in the SIM settings page.
Set to 0 or 'No' (to show) or set to 1 or 'Yes' (to hide). -->
<Setting Name="HideMMSAPN" Value="" />
<!-- Hides or shows the 'IP type' setting in the MMS APN settings screen.
Set to 0 or 'No' (to show) or set to 1 or 'Yes' (to hide). -->
Set to 0 or 'No' (to show) or set to 1 or 'Yes' (to hide). -->
<Setting Name="HideMMSAPNIPType" Value="" />
<!-- Changes the default IP type.Set to 0 or 'IPV4' (for IPv4), 1 or 'IPV6' (for IPv6), or 2 or
'IPV4V6' (for IPv4v6). -->
<Setting Name="MMSAPNIPTypeIfHidden" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/CellUX">
<!-- Hides or shows the 'add mms apn' button in the SIM settings page.
Set to 0 or 'No' (to show) or set to 1 or 'Yes' (to hide). -->
<Setting Name="HideMMSAPN" Value="" />
<!-- Hides or shows the 'IP type' setting in the MMS APN settings screen.
Set to 0 or 'No' (to show) or set to 1 or 'Yes' (to hide). -->
<Setting Name="HideMMSAPNIPType" Value="" />
<!-- Changes the default IP type.Set to 0 or 'IPV4' (for IPv4), 1 or 'IPV6' (for IPv6), or 2 or
'IPV4V6' (for IPv4v6). -->
<Setting Name="MMSAPNIPTypeIfHidden" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. To hide or show the add mms apn button in the SIM settings screen: Set the value for HideMMSAPN to one
of the following:
VALUE DESCRIPTION
0 or 'No' Shows the add mms apn button in the SIM settings
screen.
1 or 'Yes' Hides the add mms apn button in the SIM settings
screen.
5. To hide or show the IP type setting in the MMS APN settings screen: Set the value for HIdeMMSAPNIPType to
one of the following:
VALUE DESCRIPTION
6. To change the default IP type shown in the IP type settings drop-down: Set the value for
MMSAPNIPTypeIfHidden to one of the following:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device.
2. If the add mms apn button is configured to be hidden:
Go to the Messaging settings screen and verify that the add mms apn button is no longer visible.
Go to the Cellular & SIM settings screen and verify that the add mms apn button is no longer
visible.
3. If the add mms apn button is not configured to be hidden, tap the button and verify that the IP type
setting either shows the correct default value or is hidden.
Related topics
Prepare for Windows mobile development
Customization answer file overview
MMS automatic download
1/18/2019 • 2 minutes to read
Partners can choose to display an Automatically download MMS toggle to allows users to turn off automatic
downloads of MMS messages. If the toggle is displayed, partners can also change the default value to stop
automatic MMS downloads.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/AutomaticallyDownload">
<Setting Name="ShowAutomaticallyDownloadMMSToggle" Value="" />
<Setting Name="AutomaticallyDownload" Value="" />
</Settings>
</Variant>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. To hide or show the Automatically download MMS toggle in the messaging settings screen, set the value
of ShowAutomaticallyDownloadMMSToggle to one of the following:
VALUE DESCRIPTION
6. To set the default value of the Automatically download MMS toggle, set the value of
AutomaticallyDownload to one of the following:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device.
2. Go to the Messaging settings screen.
3. Verify that the Automatically download MMS toggle is visible and has the expected default value.
Related topics
Prepare for Windows mobile development
Customization answer file overview
MMS data options
1/18/2019 • 2 minutes to read
For some phones, the cellular data plan includes the data used to send MMS. If cellular data is turned off, so is the
ability to send MMS messages. However, other data plans bill MMS data separately. In this case, it’s necessary to
have a setting that allows for MMS messages to be sent even if the data toggle is off.
Partners can configure the MMS data options to:
Show the Allow MMS if cellular data is off toggle in the Messaging settings screen.
Allow MMS messaging even if data is turned off.
Allow MMS messaging even if data is turned off and the user is roaming.
OEMs can configure these settings on both single SIM and C+G dual SIM phones.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="AllowMMSIfDataIsOff"
Description="Use to configure MMS settings if data is turned off."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/AllowMmsIfDataIsOff">
<Setting Name="AllowMmsIfDataIsOffSupported" Value="" />
<Setting Name="AllowMmsIfDataIsOff" Value="" />
<Setting Name="AllowMmsIfDataIsOffWhileRoaming" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. To hide or show the Allow MMS if cellular data is off toggle in the Messaging settings screen, set the
value of AllowMmsIfDataIsOffSupported to one of the following:
VALUE DESCRIPTION
6. Before you set the value for AllowMmsIfDataIsOff , note that if you do not set ExemptFromDisablePolicy to 1
(0 by default), then you must:
Hide the Allow MMS if cellular data is off toggle by setting AllowMmsIfDataIsOffSupported to 0 (1
by default).
Set AllowMmsIfDataIsOff itself to 1 (0 by default).
For more information about ExemptFromDisablePolicy , see CM_CellularEntries CSP.
To allow or disallow MMS messaging even if data is turned off, set the value of AllowMmsIfDataIsOff to one
of the following:
VALUE DESCRIPTION
0 or 'False' MMS is on when data is on, and off when data is off.
MMS will also be off when roaming if the user has set
the phone to not use data while roaming.
This is the default OS value.
1 or 'True' MMS is on even when the data toggle is off, but not
when roaming if data is off.
7. To allow MMS if data is turned off while the user is roaming, set value of AllowMmsIfDataIsOffWhileRoaming
to one of the following:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device.
2. Go to the Messaging settings screen.
3. Verify if the messaging options match the values you set for each setting.
Related topics
Prepare for Windows mobile development
Customization answer file overview
MMS delivery confirmation
1/18/2019 • 2 minutes to read
Partners can specify whether users receive notification that MMS messages could not be delivered, and determine
whether users can control this by using the MMS delivery confirmation toggle in the Messaging settings
screen. By default, this user setting is visible but turned off.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/RequestDeliveryReport">
<Setting Name="RequestDeliveryReportIsSupported" Value="" />
<Setting Name="RequestDeliveryReport" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. To hide or show the toggle for MMS delivery confirmation, set the value of
RequestDeliveryReportIsSupported to one of the following:
VALUE DESCRIPTION
6. To set the default value for the MMS delivery confirmation toggle, set the value of RequestDeliveryReport to
one of the following:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device.
2. Go to the settings screen in the Messaging app.
3. Verify the MMS delivery confirmation toggle default value or check that it is no longer visible depending
on the settings and values that you used.
Related topics
Prepare for Windows mobile development
Customization answer file overview
MMS for group messages
1/18/2019 • 2 minutes to read
For the setting that determines if group messages sent to multiple people must be sent as MMS, partners can
customize the setting by hiding or showing the Group text toggle in the Messaging settings screen, changing the
default value, and configuring the option to alert the user of possible additional charges for sending a group text as
MMS.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="MMSGroupText"
Description="Use to determine if group messages sent to multiple people must be
sent as MMS.
Partners can show/hide the 'Group text' toggle, configure the default
value, and
alert users of possible additional charges for sending a group text."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/MMSGroupText">
<Setting Name="ShowMMSGroupTextUI" Value="" />
<Setting Name="MMSGroupText" Value="" />
<Setting Name="ShowMmsGroupTextWarning" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. To hide or show the toggle for Group text in the Messaging settings screen, set the value of
ShowMMSGroupTextUI to one of the following:
VALUE DESCRIPTION
VALUE DESCRIPTION
7. To hide or show the warning that alerts users of possible additional charges before sending a group text as
MMS, set value of ShowMmsGroupTextWarning to one of the following:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device.
2. Go to the Messaging settings screen.
3. Verify that the Group text toggle is visible or not. Also verify that the toggle has the correct default value.
4. Write and then send a group text as MMS. Depending on the value you set for the user alert, verify if the
user alert is shown or hidden.
Related topics
Prepare for Windows mobile development
Customization answer file overview
MMS receipt acknowledgement
1/18/2019 • 2 minutes to read
Partners can specify whether the device automatically sends a receipt acknowledgment for MMS messages when
messages arrive, and allow users to control the receipt acknowledgments by using the Send MMS
acknowledgement toggle in the Messaging setting screen. By default, this user setting is visible and turned on.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/AllowSendingDeliveryReport">
<Setting Name="AllowSendingDeliveryReportIsSupported" Value="" />
<Setting Name="AllowSendingDeliveryReport" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. To hide or show the Send MMS acknowledgement toggle, set the value of
AllowSendingDeliveryReportIsSupported to one of the following:
VALUE DESCRIPTION
6. To set the default value for the Send MMS acknowledgement toggle, set the value of
AllowSendingDeliveryReport to one of the following:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device.
2. Go to the Messaging settings screen.
3. Verify the Send MMS acknowledgement toggle default value or check that it is no longer visible
depending on the registry key that you used.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Permanent SMS message failures
1/18/2019 • 2 minutes to read
Partners can mark SMS message failures as permanent failures so that the user will not be given the option to
attempt to resend the SMS.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="PermanentSMSMessageFailures"
Description="Use to mark SMS message failures as permanent failures so that users
cannot attempt to resend the SMS."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/SMS">
<Setting Name="3GPP2/ErrorHandling/UseReservedAsPermanent" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/SMS">
<Setting Name="3GPP2/ErrorHandling/UseReservedAsPermanent" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set the 3GPP2/ErrorHandling/UseReservedAsPermanent to one of the following values:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device with a UICC.
2. Open the messaging application and attempt to send a message to a number that will result in an SMS
failure.
3. Verify that the user option to resend the message does not show up.
Note Work with your mobile operator to fully test this customization.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Ports that accept cellular broadcast messages
1/18/2019 • 2 minutes to read
Partners can specify one or more ports from which the device will accept cellular broadcast messages.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SMSCellularBroadcastPorts"
Description="Use to specify one or more ports from which the device will accept
cellular broadcast messages."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="BroadcastChannels" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the BroadcastChannels value to the port number(s) that can accept cellular broadcast messages. For
example, 1234;5678;9012 and so on.
If you specify the same port that Windows 10 Mobile already recognizes as an Emergency Alert port (a
CMAS or ETWS port number) and a cell broadcast message is received on that port, the user will only
receive the message once. The message that is received will be displayed as an Emergency Alert message.
Testing:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Proxy authorization for MMS
1/18/2019 • 2 minutes to read
Partners can specify the use of NAI information as a dedicated header for MMS authentication for mobile
networks that require this functionality. The string value must be the MMS header used for authentication.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="ProxyAuthorizationToken" Value="Proxy-Authorization:Basic" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Do not change the ProxyAuthorizationToken``Value . Proxy-Authorization is the HTTP header and Basic
denotes Basic64 encoding and not any other encoding.
Testing steps:
Work with your mobile operator to properly test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Select multiple recipients for SMS and MMS
messages
1/18/2019 • 2 minutes to read
Partners can show the select all contacts/unselect all menu option to allow users to easily select multiple
recipients for an SMS or MMS message. This menu option provides users with an easier way to add multiple
recipients and may also meet a mandatory requirement for some mobile operator networks.
Windows 10 Mobile supports the following select multiple recipients feature:
A multi-select chooser, which enables users to choose multiple contacts.
A select all contacts/unselect all menu option, which enables users to select or unselect all their
contacts. This option is not shown by default and must be enabled by the OEM.
Note
Note that this feature will only be enabled if the LimitRecipients setting is set to more than 1 recipient. For more
information, see Maximum number of recipients for SMS and MMS.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SelectMultipleRecipients"
Description="Use to enable users to easily select multiple recipients for SMS and
MMS messages."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="AllowSelectAllContacts" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the value for AllowSelectAllContacts to one of the following:
VALUE DESCRIPTION
If `AllowSelectAllContacts` is not set or missing, the **select all contacts**/**unselect all** menu option
is not shown.
Testing steps:
1. Flash the build containing this customization to a device.
2. Open the Messaging application and create a new SMS or MMS message.
3. Select the + button to add message recipients.
4. Verify that the multi-select icon appears in the Choose a contact screen. If you have more than one
contact, this icon will be active. Otherwise, it will appear grey or inactive.
5. Tap the multi-select icon then tap … for more menu options.
6. Verify that you can see the select all contacts menu option.
7. Tap select all contacts.
8. Tap … and verify that you can see the unselect all menu option.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Send SMS messages to SMTP addresses
1/18/2019 • 2 minutes to read
Partners can configure SMS messages to be sent to email addresses as well as phone numbers.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="AllowSMStoSMTPAddress" Value="" />
<Setting Name="SMStoSMTPShortCode" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the value for AllowSMStoSMTPAddress to one of the following values:
VALUE DESCRIPTION
6. Set the SMStoSMTPShortCode value to the correct short code for your mobile operator. This value is the
destination SMTP gateway phone number, and must be provided by the mobile operator.
Testing:
1. Flash the build containing this customization to a device that contains a SIM or network connection for your
mobile operator.
2. Open the messaging app and attempt to send a message to a valid email address.
3. The message should send and arrive successfully.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Server for MMS acknowledgement messages
1/18/2019 • 2 minutes to read
By default, the MMS transport sends an acknowledgement to the provisioned MMS application server (MMSC ).
However, on some networks, the correct server to use is sent as a URL in the MMS message. In that case, a
registry key must be set, or else the acknowledgement will not be received and the server will continue to send
duplicate messages.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="ServerMMSAcknowledgement"
Description="Use to enable some networks to correctly acknowledge MMS messages."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="UseDefaultAddress" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set UseDefaultAddress to one of the following values:
VALUE DESCRIPTION
Testing steps:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
SMS delivery confirmation
1/18/2019 • 2 minutes to read
Partners can specify whether users receive notification that SMS messages could not be delivered, and determine
whether users can control these notifications by using the SMS delivery confirmation toggle in the Messaging
settings screen. By default, this user setting is not visible, and delivery confirmations are not turned on.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SMSDeliveryConfirmation"
Description="Use to hide or show the 'SMS delivery confirmation' toggle in
Settings, and configure the default
value for the toggle."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)/SMSDeliveryNotify">
<Setting Name="DeliveryNotifySupported" Value="" />
<Setting Name="SMSDeliveryNotify" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. To hide or show the SMS delivery confirmation toggle, set the value of DeliveryNotifySupported to one
of the following:
VALUE DESCRIPTION
6. To set the default value for the SMS delivery confirmation toggle, set the value of SMSDeliveryNotify to
one of the following:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device.
2. Go to the Messaging settings screen.
3. Verify the SMS delivery confirmation toggle default value or check that it is no longer visible depending
on the registry key that you used.
Related topics
Prepare for Windows mobile development
Customization answer file overview
SMS encoding
1/18/2019 • 3 minutes to read
Partners can change the default GSM 7-bit code page decoding and encoding, and can also extend the set of
supported SMS encodings by setting an "always-on" GSM 7-bit shift table, adding encoders, and adding decoders.
Using augmented NLS encodings, Windows 10 Mobile supports the following SMS encodings, as defined in the
3GPP TS 23.038 specification:
7-bit ASCII (used on 3GPP2 only)
GSM 7-bit encoding
Default alphabet
GSM with Single Shift for Spanish
GSM with Single Shift for Portuguese
GSM with Single Shift for Turkish
UCS2
KSC 5601
Shift-JIS
SMS Greek Reduction
Other binary data encoding usage
By default, Windows 10 Mobile supports the GSM 7-bit default alphabet table. Partners do not need to set a
registry key to support this. However, partners can change the default GSM 7-bit code page to decode and encode
all incoming and outgoing SMS messages by using GSM7BitEncodingPage and setting this to one of the allowed
values. See the following instructions for more information on how to do this.
Partners can change the default GSM 7-bit encoding to one of the other supported SMS encodings by setting the
appropriate registry setting. See the following instructions for more information on how to do this.
OEMs can also extend the set of supported SMS encodings by setting an "always-on" GSM 7-bit shift table,
adding encoders, and adding decoders. For more information, see Add encoding extension tables for SMS.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SMSEncoding"
Description="Use to configure the SMS encoding settings."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/SMS">
<Setting Name="Encodings/GSM7BitEncodingPage" Value="" />
<Setting Name="Encodings/GSM8BitEncodingPage" Value="" />
<Setting Name="Encodings/UseASCII" Value="" />
<Setting Name="Encodings/UseKeyboardLanguage" Value="" />
<Setting Name="Encodings/SendUDHNLSS" Value="" />
<Setting Name="Encodings/OctetEncodingPage" Value="" />
</Settings>
</Variant>
-->
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Configure the settings and values depending on the SMS encoding that you want to set.
Encodings/GSM7BitEncodingPage Used to set the code page value for GSM 7-bit
encoding.
The possible values are as follows:
Encodings/GSM8BitEncodingPage Used to set the code page value for GSM 8-bit
encoding.
Encodings/UseASCII Used only for CDMA carriers that use 7-bit ASCII
encoding instead of GSM 7-bit encoding.
The possible values are as follows:
1 Turns on SMS
encoding based on
keyboard language.
Encodings/OctetEncodingPage Used to set the code page for octet (binary) encoding.
Testing:
1. Flash the build containing this customization to a device.
2. Go to the messaging application to write and send an SMS message.
3. Verify that the written SMS message used the correct encoding and, when possible, also verify that the sent
SMS message was received with the correct encoding.
Related topics
Prepare for Windows mobile development
Customization answer file overview
SMS intercept deny list
1/18/2019 • 4 minutes to read
OEMs can specify one or more filters in order to intercept incoming SMS messages intended for mobile operator
partner applications that are not installed on the device.
Applications from mobile operator partners can receive notifications from incoming SMS messages. Specifically,
the Windows 10 Mobile SMS intercept feature takes string filters declared by the partner application in its
manifest and matches these with the opening text in the SMS messages. If there is a string match, the message is
delivered to the corresponding application instead of the Microsoft messaging application.
As part of the SMS intercept feature, OEMs can specify one or more filters in a deny list to be matched against
incoming SMS messages intended for mobile operator partner applications that are not installed on the device. If
an SMS message matches a filter on the deny list, the message is dropped and never delivered to the messaging
application or shown to the user. If filters are not specified as part of the deny list and the mobile operator
application is not installed on the device, the SMS message is delivered to the Microsoft messaging application
and displayed to the user.
The SMS intercept deny list follows the following filter and string matching rules:
Filter rules:
Each filter can only be matched to one application ID. If multiple applications listed the same filter, the first
application is used. This is not deterministic across boots.
The longest filter strings are matched to ensure that exact matches are made before partial matches.
A filter must be at least 3 characters long. If the filter is less than 3 characters long it will be ignored and
omitted from the filter match list.
A filter can be up to 74 characters long.
A filter can only contain valid Unicode characters.
Byte by byte comparison is used without consideration for culture.
Comparisons are not case sensitive.
String match rules:
The string must start as the leading character of the message.
The filter string is considered a match if it is an exact match or it is a partial match where the entire filter is
contained in the first segment of the body of the message.
The SMS intercept deny list runs after the partner application string matching has been done.
The following examples show the results for the string match based on the preceding rules:
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SMSInterceptDenyList"
Description="Use to specify one or more filters in a deny list to be matched
against incoming SMS messages intended for
mobile operator partner applications that are not installed on the device."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<!-- Set the value for the ports where the device will accept cellular broadcast messages.
The value must be in REG_MULTI_SZ format, such as "Prefix1;Prefix2;Prefix3" and so on -->
<Setting Name="SmsInterceptPrefixes" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the SmsInterceptPrefixes value to one or more filters in a deny list. For example, Prefix1;Prefix2;Prefix3
and so on.
The following notes apply for this customization:
SMS messages that start with the filters (designated by the placeholders Prefix1,Prefix2, and so on) are
dropped and never delivered. Filters are provided by the mobile operators.
The number of filters that OEMs can add in the deny list is not limited.
The system does not back up the set of settings and values for this feature.
The system only reads the deny list at boot time. If setting values are updated at a later time, the device
must be restarted for the updated list to take effect.
Testing steps:
1. Flash the build containing this customization to a device.
2. Send several SMS messages to the device (some that match the filters and others that do not).
3. Based on the filters that you added, verify if the messages that match the filters were correctly dropped and
verify that those that don’t match any filters show up in the messaging app.
Related topics
Prepare for Windows mobile development
Customization answer file overview
SMS intercept ports
1/18/2019 • 2 minutes to read
OEMs can configure ports on which a Wireless Application Protocol (WAP )-formatted message can be intercepted
by the mobile operator app.
Certain mobile operators require the ability to intercept SMS messages for processing by a mobile operator app
rather than by the standard Microsoft messaging app. To meet these operator requirements, OEMs can specify
string filters in a deny list to be matched against incoming SMS messages intended for operator partner apps that
are not installed on the device. For more information on how to do this, see SMS intercept deny list. In addition,
operators can also require the ability to configure the port on which a Wireless Application Protocol (WAP )-
formatted message can be intercepted by the mobile operator app. The incoming WAP message must have its
destination port set to be one of the configured ports in order for the message to be accepted. To configure the
correct port, OEMs can use the SmsInterceptPorts setting that's documented in this topic.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="SMSInterceptPorts"
Description="Use to specify one or more ports on which a WAP-formatted message can
be intercepted by a mobile operator app."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="SmsInterceptPorts" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the SmsInterceptPorts value to one or more ports on which a WAP -formatted message can be
intercepted by the custom MO app. For example, 4100;04102;04456 and so on.
Caution Any port number can be configured except for 2948, which is the standard port of a WAP push.
Testing steps:
Work with your mobile operator partner to correctly test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Support HTTP cache-control no-transform for MMS
1/18/2019 • 2 minutes to read
For networks that require it, OEMs can add support for the HTTP header Cache-Control No-Transform directive
for MMS messages. When set, proxies and transcoders are instructed not to change the HTTP header and the
content should not be modified ( Cache-Control: no-transform\r\n ).
When this directive is not set or the registry setting is missing, the HTTP header is set to Cache-Control No-Cache
( Cache-Control: no-cache\r\n ).
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="SetCacheControlNoTransform" Value="1" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Do not modify the SetCacheControlNoTransform``Value . A value of 1 or 0x1 adds support for the HTTP
header Cache-Control No-Transform directive.
When the SetCacheControlNoTransform``Value is set to 0 or 0x0 or when the setting is not set, the default
HTTP header Cache-Control No-Cache directive is used.
Testing:
Flash the build containing this customization to a device with a UICC.
Warning To fully verify this customization, you will need to use a tool that captures HTTP traffic.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Supported protocols for service indication messages
1/18/2019 • 2 minutes to read
Partners can add additional supported protocols for service indication messages. By default, service indication
messages are valid only if their href begins with one of the four supported protocols: http, https, wsp, or wsps.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="SIProtocols" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the value of SIProtocols to include the additional supported protocols you want to add. For example,
http;https;wsp. Note that the value must be of type REG_MULTI_SZ.
Testing steps:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Switch from SMS to MMS for long messages
1/18/2019 • 2 minutes to read
For networks that do support MMS and do not support segmentation of SMS messages, partners can specify an
automatic switch from SMS to MMS for long messages.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="ConvertLongSMStoMMS" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the value of ConvertLongSMStoMMS value to one of the following:
VALUE DESCRIPTION
Testing steps:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Truncated content handling for WAP push notification
1/18/2019 • 2 minutes to read
For networks that require non-standard handling of single-segment incoming MMS WAP Push notifications,
partners can specify that MMS messages may have some of their content truncated and that they may require
special handling to reconstruct truncated field values.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="WapPushTechnology" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set WapPushTechnology to one of the following values:
VALUE DESCRIPTION
Testing steps:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Use insert-address-token or local raw address
1/18/2019 • 2 minutes to read
To meet certain mobile operator requirements, OEMs can customize the OS image to use either the insert-
address-token or the local raw address for the From field in MMS messages.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="UseInsertAddressToken" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define the Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC,
and SPN.
4. Define the settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the value for UseInsertAddressToken to one of the following values:
VALUE DESCRIPTION
0 or 'False' Uses the local raw address for the From field for MMS
messages.
Testing steps:
Work with your mobile operator to properly test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Use UTF-8 for MMS messages with unspecified
character encoding
1/18/2019 • 2 minutes to read
Some incoming MMS messages may not specify a character encoding. To properly decode MMS messages that
do not specify a character encoding, OEMs can set UTF -8 to decode the message.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="UseUTF8ForUnspecifiedCharset" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the value of UseUTF8ForUnspecifiedCharset to one of the following:
VALUE DESCRIPTION
Testing steps:
Work with your mobile operator to properly test this customization on their network.
To verify the customization:
1. Use a device to send an MMS message without a character encoding specified to your Windows 10 Mobile
device.
2. Verify that the MMS was received correctly on your Windows 10 Mobile device. The message should not
contain any unrecognized characters.
Related topics
Prepare for Windows mobile development
Customization answer file overview
User agent profile for MMS messages
1/18/2019 • 2 minutes to read
Partners can specify a user agent profile to use on the device for MMS messages. The user agent profile XML file
details a device’s hardware specifications and media capabilities so that an MMS application server (MMSC ) can
return supported optimized media content to the device. The user agent profile XML file is generally stored on the
MMSC.
Constraints: None
This customization supports: per-SIM value
Instructions:
The MMS -specific components for Windows 10 Mobile are included in the following code sample.
There are two ways to correlate a user agent profile with a given device:
You can take the user agent string of the device that is sent with MMS requests and use it as a hash to map
to the user agent profile on the MMSC. The user agent string cannot be modified.
Alternatively, you can directly set the URI of the user agent profile on the device.
The following steps describe how to specify a custom user agent profile XML file by using a registry setting.
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="MMSUAProfile"
Description="Use to specify a user agent profile to use for MMS messages."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<!-- Replace UAProf.xml with the full URI of your user agent profile file. -->
<Setting Name="UAProf" Value="UAProf.xml" />
<!-- Use to specify the custom user agent property name. Set the value to either
"x-wap-profile or "profile" -->
<Setting Name="UAProfToken" Value="x-wap-profile" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. In the UAProf``Value , replace UAProf.xml value with the full URI of your user agent profile.
Optionally, you can also specify the custom user agent property name for MMS that is sent in the header by
setting UAProfToken to either x-wap-profile or profile .
Testing steps:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
User agent string for MMS messages
1/18/2019 • 2 minutes to read
Partners can replace the entire user agent string for MMS.
By default, this string has the format WindowsPhoneMMS/MicrosoftMMSVersionNumber
WindowsPhoneOS/OSVersion-buildNumber OEM -deviceName, in which the italicized text is replaced with the
appropriate values for the phone.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="UserAgentString" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the UserAgentString``Value to the new user agent string for MMS in its entirely.
By default, this string has the format WindowsPhoneMMS/MicrosoftMMSVersionNumber
WindowsPhoneOS/OSVersion-buildNumber OEM -deviceName, in which the italicized text is replaced with
the appropriate values for the device.
Testing:
Work with your mobile operator to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
User alert for service indication messages
1/18/2019 • 2 minutes to read
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="HideMediumSIPopups" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set the value of HideMediumSIPopups value to one of the following:
VALUE DESCRIPTION
Testing steps:
1. Flash the build containing this customization to a device that has a SIM.
2. Send a signal-medium service indication message to the device and verify that a notification window does
not appear at the top of the screen.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Video attachments in MMS
1/18/2019 • 2 minutes to read
Partners can specify the transcoding to use for video files sent as attachments in MMS messages.
Constraints: None
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="Messaging/PerSimSettings/$(__ICCID)">
<Setting Name="TargetVideoFormat" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
4. Define settings for a Variant, which are applied if the associated target's conditions are met.
5. Set TargetVideoFormat to one of the following values to configure the default transcoding for video files
sent as attachments in MMS messages:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device.
2. Attempt to send a message with an attachment that requires the new transcoding. Verify that the message
sends and that the file can be opened after it is received.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Voicemail SMS intercept
1/18/2019 • 2 minutes to read
Partners can define a filter that intercepts an incoming SMS message and triggers visual voicemail
synchronization. The filtered message does not appear in the user’s conversation list.
A visual voicemail sync is triggered by an incoming SMS message if the following conditions are met:
The message sender value starts with the string specified in the SyncSender setting. The length of the
specified values must be greater than 3 characters but less than 75 characters.
The body of the message starts with the string specified in the SyncPrefix setting. The length of the
specified values must be greater than 3 characters but less than 75 characters.
Visual voicemail is configured and enabled. For more information, see Visual voicemail.
Constraints: Atomic
This customization supports: per-SIM value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Messaging/GlobalSettings/VoicemailIntercept">
<Setting Name="SyncSender" Value="" />
<Setting Name="SyncPrefix" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Specify a value for SyncSender that is greater than 3 characters but less than 75 characters in length.
For networks that support it, this value can be a short code of the mailbox server that sends a standard
SMS notification.
4. Specify a value for SyncPrefix that is greater than 3 characters but less than 75 characters in length.
For networks that support it, this value can be the keyword for the SMS notification.
Note The SyncSender and SyncPrefix values vary for each mobile operator, so OEMs must work with their
mobile operators to obtain the correct or required values.
Make sure that the correct visual voicemail settings for the mobile operator are also set. For more information, see
Visual voicemail.
Testing steps:
1. Flash the build containing this customization to a phone that has a UICC.
2. Successfully testing this customization requires the correct values, so work with your mobile operator
partner to test this customization on their network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for SIM settings
1/18/2019 • 2 minutes to read
In this section
TOPIC DESCRIPTION
Add a suffix to the mobile operator name To meet branding requirements for some mobile operators,
OEMs can add a suffix to the network name that is displayed
on the phone. For example, from ABC to ABC 3G when under
3G coverage.
Additional Internet APN settings OEMs can hide both the add internet apn button and the IP
type listbox in the internet APN settings screen.
Change SIM to SIM/UIM Partners can change the string "SIM" to "SIM/UIM" in the
device UI.
Change the default SIM name to match the SPN or operator Partners can change the default name read from the SIM to
name define the SPN for SIM cards that do not contain this
information or to generate the default friendly name for the
SIM.
Configure C+G dual SIM settings Partners can configure the settings for C+G dual SIM phones.
Hide the SIM security settings option OEMs can hide the SIM security settings option. By default,
the is visible when you go to the Settings > applications >
phone screen.
Remove the trailing MSISDN digits on a SIM card OEMs can remove the trailing MSISDN digits from the service
provider name (SPN) in the device UI.
Settings for IMS services OEMs can configure the default settings and toggle for IMS
services to meet mobile operator requirements.
View Internet APN For mobile operators that require it, OEMs can show the View
Internet APN button in the Cellular & SIM settings page for
users that have a data plan. When data is off, the button is
disabled. By default, the button is hidden.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Add a suffix to the mobile operator name
1/18/2019 • 2 minutes to read
To meet branding requirements for some mobile operators, OEMs can add a suffix to the network name that is
displayed on the phone. For example, from ABC to ABC 3G when under 3G coverage. This feature can be applied
for any radio access technology (RAT).
For TD -SCDMA RAT, a 3G suffix is always appended by default, but partners can also customize this the same way
as with any other RAT.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="NetworkSuffix"
Description="Use to add a suffix to the network name that is displayed on the
device."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/General">
<Setting Name="NetworkSuffix/$(SYSTEMTYPE)" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/General">
<Setting Name="NetworkSuffix/$(SYSTEMTYPE)" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. In the setting name, set $ (SYSTEMTYPE ) to the network type that you want to append the network name to,
and set the value for that network type as shown in the following table:
4 2G Represents
RIL_SYSTEMTYPE_GSM (GSM
connection).
8 3G Represents
RIL_SYSTEMTYPE_UMTS (UMTS
connection).
32 3G Represents
RIL_SYSTEMTYPE_TDSCDMA
(TD-SCDMA connection).
Partners do not need to set this
registry value.
By default, this registry setting is
set to “ 3G”.
For example, if you would like the mobile operator name (ABC) and the suffix (3G) to appear as **ABC 3G**
(there is a space between the network name and the connection type) rather than **ABC3G** (no space between
the network name and connection type), you need to include a space when setting the values.
Testing steps:
1. Flash a build containing this customization to a device with a SIM.
2. In the Start screen, verify that the phone tile shows the mobile operator name followed one of the suffixes
that you set.
The suffix will depend on the network.
3. Go to the Settings screen and scroll down until you see Cellular & SIM. Verify that the mobile operator
name is followed by the correct suffix. This should match what you see in the phone tile in the Start screen.
4. Tap Cellular & SIM and verify that the Active network shows the mobile operator name and correct
suffix.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Additional Internet APN settings
1/18/2019 • 2 minutes to read
OEMs can hide both the add internet apn button and the IP type listbox in the internet APN settings screen.
If it is required by the mobile operator OEMs can hide the add internet apn button, which enables the user to
manually add and configure a data connection for a network. OEMs can also hide the IP type listbox in the
internet APN settings screen.
Limitations and restrictions:
Partners must not provide an alternate user interface for adding or editing APN values.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellUX">
<Setting Name="HideAPN" Value="" />
<Setting Name="HideAPNIPType" Value="" />
<Setting Name="APNIPTypeIfHidden" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/CellUX">
<Setting Name="HideAPN" Value="" />
<Setting Name="HideAPNIPType" Value="" />
<Setting Name="APNIPTypeIfHidden" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
```
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set the value for HideAPN to one of the following:
VALUE DESCRIPTION
VALUE DESCRIPTION
6. To change the default IP type shown in the IP type listbox: Set the value for APNIPTypeIfHidden to one of
the following:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device.
2. Go to the cellular & SIM screen in Settings.
3. Verify that the add internet apn button is no longer visible if configured to be hidden.
4. Tap the add internet apn button. Depending on the setting, verify that:
a. The IP type setting either shows a dropdown listbox with IPv4, IPv6, IPv4v6, or IPv4v6 464XLAT.
Or,
b. The IP type setting is hidden.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Change SIM to SIM/UIM
1/18/2019 • 2 minutes to read
Partners can change the string "SIM" to "SIM/UIM" in the device UI.
Enabling this customization changes all "SIM" strings to "SIM/UIM".
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="CellCore/PerDevice/UIX">
<!-- Set the value to 0 or "SIM" (to use the default SIM string), or set to 1 or "UIM" (to use the
alternate SIM/UIM string) -->
<Setting Name="SIMToSIMUIM" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of SIMToSIMUIM to one of the following:
VALUE DESCRIPTION
Testing steps:
1. Flash a build containing this customization to a device without a SIM.
2. During the initial device setup, verify that you see the following error:
SIM/UIM error
The SIM/UIM card is missing or invalid. You can still make emergency calls if your mobile
operator supports it.
3. In the Start screen, verify that the phone tile shows No SIM/UIM.
All other "SIM" strings on the device should now show "SIM/UIM".
Related topics
Prepare for Windows mobile development
Customization answer file overview
Change the default SIM name to match the SPN or
operator name
1/18/2019 • 2 minutes to read
By default, the OS displays SIM 1 or SIM 2 as the default friendly name for the SIM in slot 1 or slot 2 if the
service provider name (SPN ) or mobile operator name has not been set. Partners can use this customization to
change the default name read from the SIM to define the SPN for SIM cards that do not contain this information
or to generate the default friendly name for the SIM.
The OS uses the default value as the display name for the SIM or SPN in the Start screen and other parts of the UI
including the SIM settings screen. For dual SIM phones that contain SIMs from the same mobile operator, the
names that appear in the UI may be similar.
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="MultivariantProvisionedSPN"
Description="Use to define the SPN for SIM cards that don't contain this
information or use to
generate the default friendly name for the SIM."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/General/Critical">
<Setting Name="MultivariantProvisionedSPN" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Set the MultivariantProvisionedSPN value to the name of the SPN or mobile operator.
The following table shows the scenarios supported by this customization:
NOTE
In the Default SIM name column:
The " " in MultivariantProvisionedSPN" "1234 means that there is a space between the mobile operator name or
SPN and the last 4 digits of the MSISDN.
MultivariantProvisionedSPN means the value that you set for the MultivariantProvisionedSPN setting.
SIM 1 or SIM 2 is the default friendly name for the SIM in slot 1 or slot 2.
Yes No No MultivariantProvisionedSP
N (up to 16 characters)
No No No SIM 1 or SIM 2
Testing steps:
1. Flash a build containing this customization to a phone that supports either a single or dual SIM.
2. Boot the phone and verify that the displayed friendly name for the SIM matches the SPN name or the value
set for MultivariantProvisionedSPN .
If there are two SIMs, verify that the displayed friendly names appear as expected.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configure C+G dual SIM settings
1/18/2019 • 5 minutes to read
Partners can configure the settings for C+G dual SIM phones. The first slot is for CDMA (C ) and the second slot is
for GSM (G ).
Constraints: None
This customization supports: per-IMSI value, per-device value.
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellUX">
<Setting Name="ShowManualAvoidance" Value="" />
</Settings>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/General">
<Setting Name="CardLock" Value="" />
<Setting Name="CardAllowList" Value="" />
<Setting Name="CardBlockList" Value="" />
<Setting Name="SuggestDataRoamingARD" Value="" />
</Settings>
<Settings Path="DeviceInfo/Variant">
<Setting Name="RoamingSupportPhoneNumber" Value="" />
</Settings>
</Variant>
-->
<Settings Path="CellCore/PerDevice/CellUX">
<Setting Name="ShowManualAvoidance" Value="" />
</Settings>
<Settings Path="CellCore/PerDevice/CGDual">
<Setting Name="RestrictToGlobalMode" Value="" />
</Settings>
<Settings Path="CellCore/PerDevice/UIX">
<Setting Name="SIM1ToUIM1" Value="" />
</Settings>
<Settings Path="CellCore/PerDevice/General">
<Setting Name="CardLock" Value="" />
<Setting Name="CardAllowList" Value="" />
<Setting Name="CardBlockList" Value="" />
<Settings Path="AutomaticTime">
<Setting Name="PreferredSlot" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To show the Switch to next network manually button on the Settings > Cellular & SIM page, set
ShowManualAvoidance to one of the following values:
VALUE DESCRIPTION
NOTE
This setting supports per-IMSI or per-device values. Determine which one you would like to set. By default, this
setting is off or missing.
4. To configure card lock support, use and set the following settings:
a. To enforce either the card allow list or both the card allow and block lists, set CardLock to one of the
following values:
VALUE DESCRIPTION
0 or PersoLockType_AllowAndBlockList Enforces both the card allow list and the card block
list.
Set the values for the CardAllowList and CardBlockList settings to configure the allow list and block
list, respectively.
b. To configure the list of SIM cards allowed in the first slot, set the value for CardAllowList to a
comma separated MCC:MNC list. You can also use wild cards, represented by an asterisk (*), to
accept any value. For example, you can set the value to 310:410,311:*,404:012,310:70.
c. To configure the list of SIM cards that are not allowed in the first slot, set the value for CardBlockList
to a comma separated MCC:MNC list. You can also use wild cards, represented by an asterisk (*), to
accept any value. For example, you can set the value to 310:410,311:*,404:012,310:70.
NOTE
These settings support per-IMSI or per-device values. Determine which one you would like to set. By default, this
setting is off or missing.
5. To specify the OEM or mobile operator's roaming support contact phone number, set the optional
RoamingSupportPhoneNumber setting to the phone number you want to use. This string appears in the
About settings screen.
This setting is part of the DeviceInfo/Variant settings group. For more information about the other device
info settings, see Phone metadata in DeviceTargetingInfo.
6. To configure the Mode selection in the Cellular & SIM settings page, set RestrictToGlobalMode to one of
the following values:
VALUE DESCRIPTION
This setting is required for phones shipping on the China Telecom network. By default, this setting is off or
missing.
When the device registration changes, if the value for this setting is set, the OS changes the preferred
system type to the default preferred system type for world mode. If the phone is not camped on any
network, the OS assumes the phone is on the home network and changes the network registration
preference to default mode.
7. To show UIM1 as an alternate string instead of SIM1 for the first SIM, set SIM1ToUIM1 to one of the
following values:
VALUE DESCRIPTION
1 or Yes Changes the SIM1 strings in the UI to UIM1 for dual SIM
phones.
VALUE DESCRIPTION
1 or SlotAffinityForInternetData_Slot0 Sets the data connection preference to Slot 0 and the data
connection cannot be edited.
2 or SlotAffinityForInternetData_Slot1 Sets the data connection preference to Slot 1 and the data
connection cannot be edited.
9. To disable a list of specified apps from Slot 2, set Slot2DisableAppsList to a comma separated value. For
example, 4,6.
10. To suggest global mode when the phone is not registered on other modes in the network, set
SuggestGlobalModeARD to one of the following values:
VALUE DESCRIPTION
11. To specify the number of seconds to wait for the network registration before suggesting global mode, set
SuggestGlobalModeTimeout to a value between 1 and 600, inclusive. For example, to set the timeout to 60
seconds, set the value to 60 (decimal) or 0x3C (hexadecimal).
12. To suppress the perso unlock UI, set SuppressDePersoUI to one of the following values:
VALUE DESCRIPTION
13. To show the data roaming suggestion dialog when roaming and the data roaming setting is set to no
roaming, set SuggestDataRoamingARD to one of the following values:
VALUE DESCRIPTION
14. To specify which UICC slot will be used for NITZ handling, set PreferredSlot to one of the following values:
VALUE DESCRIPTION
Testing:
Work with your mobile operator to determine the setting requirements for the network.
1. Flash the build containing this customization to a C+G dual SIM phone.
2. Depending on the values you specified for the C+G settings, verify that the behavior matches the setting
value description.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Hide the SIM security settings option
1/18/2019 • 2 minutes to read
<Static>
<Settings Path="Phone/PhoneSettings">
<Setting Name="HideSIMSecurityUI" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the HideSIMSecurityUI setting to one of the following values:
VALUE DESCRIPTION
Testing steps:
Work with your mobile operator partner to test this customization on their network.
1. Flash the build containing this customization to a device that has a brand new SIM that doesn't require a
security PIN.
2. Set up the device.
3. If you set HideSIMSecurityUI to 1 or 'True', go to the Phone settings screen and verify that the SIM
security settings option is not visible.
4. If you set HideSIMSecurityUI to 0 or 'False' or you did not change the default OS value, go to the Phone
settings screen and verify that the SIM security settings option is visible.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Remove the trailing MSISDN digits on a SIM card
1/18/2019 • 2 minutes to read
OEMs can remove the trailing MSISDN digits from the service provider name (SPN ) in the device UI.
By default, the OS appends the trailing MSISDN digits to the service provider name (SPN ) in the device UI,
including on the device and messaging apps. If required by mobile operators, OEMs can use the
SimNameWithoutMSISDNEnabled setting to remove the trailing MSISDN digits. However, you must use this setting
together with MultivariantProvisionedSPN to suppress the MSISDN digits. For more information about how to use
MultivariantProvisionedSPN , see Change the default SIM name to match the SPN or operator name.
Constraints: None
This customization supports: per-IMSI value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/General/Critical">
<Setting Name="MultivariantProvisionedSPN" Value="" />
<Setting Name="SimNameWithoutMSISDNEnabled" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Set the MultivariantProvisionedSPN value to the name of the SPN or mobile operator. For more
information, see Change the default SIM name to match the SPN or operator name.
4. Set SimNameWithoutMSISDNEnabled to one of the following values:
VALUE DESCRIPTION
Testing steps:
1. Flash a build containing this customization to a device that supports either a single or dual SIM.
2. Boot the device and verify the following:
The displayed friendly name for the SIM matches the SPN name or the value set for
MultivariantProvisionedSPN . If there are two SIMs, verify that the displayed friendly names appear as
expected for that SIM.
If you set SimNameWithoutMSISDNEnabled =1, the trailing MSISDN digits should not appear. If there are
two SIMs and both have SimNameWithoutMSISDNEnabled =1, both SIMs should not show the MSISDN
digits in the UI.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Settings for IMS services
1/18/2019 • 7 minutes to read
OEMs can configure the default settings and toggle for IMS services to meet mobile operator requirements. Users
can later manually change the default values for these settings if they choose to do so.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
<Settings Path="Localization/MUI">
<!-- Use to add your base MUI DLL file -->
<Asset Name="BaseDll" Source="" />
<!-- Use to specify the language MUI packages (*.dll.mui) for the languages you are supporting
and have localized strings for -->
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<Asset Name="LanguageDll/$(langid)" Source="" />
<!-- Add as many as you need -->
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellUX/Critical">
</Settings>
<Settings Path="CellCore/PerDevice/CellUX/Critical">
<!-- Use to hide or show the VoLTE toggle in the Settings > Cellular+SIM > SIM settings screen.
<Setting Name="ShowVoLTEToggle" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Add the resource-only .dll file and the language MUI packages (*.dll.mui) for the languages you are
supporting. To do this, follow these steps:
a. Add the resource-only .dll that contains the custom display string by setting the BaseDll asset to
point to the location of your base MUI DLL file. For example: C:\Path\DisplayStrings.dll.
b. 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 the previous steps for the other languages.
The following example shows the customization answer file entries for en-US, fr-CA, and es-
MX languages:
For more information, see Create a resource-only .dll for localized strings.
4. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC, MNC, and
SPN.
5. Define settings for a Variant, which are applied if the associated target's conditions are met.
6. Set the value for the following settings:
a. Set the value for ShowVoLTEToggle to one of the following to hide or show the VoLTE toggle.
VALUE DESCRIPTION
b. Set the value for SwitchIMS to one of the following to switch IMS off or on with a toggle.
VALUE DESCRIPTION
c. Set the value for SwitchSMSOverIMS to one of the following to switch SMS over IMS on or off when
VoLTE is enabled.
VALUE DESCRIPTION
d. Set the value for SwitchVoiceOverIMS to one of the following to switch voice over IMS on or off when
VoLTE is enabled.
VALUE DESCRIPTION
e. Set the value for SwitchVideoOverIMS to one of the following to switch video over IMS on or off
when VoLTE is enabled.
VALUE DESCRIPTION
f. Set the value for SwitchXCAP to one of the following to switch the XML Configuration Access
Protocol (XCAP ) on or off when VoLTE is enabled.
VALUE DESCRIPTION
g. a. To customize the VoLTE toggle description, set the VoLTEToggleDescription value to the name
of the resource-only .dll file and specify the string offset. For example: @DisplayStrings.dll,-
101.
Replace DisplayStrings.dll with the name of your .dll file and replace Offset with the correct
offset for the localized string.
b. To customize the VoLTE toggle label, set the VoLTEToggleTitle value to the name of the
resource-only .dll file and specify the string offset. For example: @DisplayStrings.dll,-102.
Replace DisplayStrings.dll with the name of your .dll file and replace Offset with the correct
offset for the localized string.
7. Set the value for the following IMS roaming settings:
a. To show the IMS roaming control in the cellular settings page, set ShowVoLTERoaming to one of the
following values:
VALUE DESCRIPTION
b. To customize the section title for the IMS settings, specify a string as the value for VoLTESectionTitle
. The string must not be longer than 127 characters.
c. To customize the description string for the IMS roaming control, specify a string as the value for
VoLTERoamingTitle . The string must not be longer than 127 characters.
d. To customize the description that appears under the IMS roaming control when IMS roaming is
turned on, specify a string as the value for VoLTERoamingOnDescription . The string must not be longer
than 127 characters.
e. To customize the description that appears under the IMS roaming control when IMS roaming is
turned off, specify a string as the value for VoLTERoamingOffDescription . The string must not be
longer than 127 characters.
8. You can customize the settings related to active VoLTE calls by configuring these settings:
a. To specify whether to grey out VoLTE -related settings during an active VoLTE call, set
VoLTESettingDisableDuringCall to one of the following values:
VALUE DESCRIPTION
b. To specify whether to grey out Wi-Fi calling settings during an active VoLTE call, set the value for
WFCSettingDisableDuringCall to one of the following values:
VALUE DESCRIPTION
c. To specify whether to grey out the VoLTE toggle during an active VoLTE call, set the value for
VoLTEToggleSettingDisableDuringCall to one of the following values:
VALUE DESCRIPTION
d. To specify whether to grey out the VoLTE roaming settings during an active VoLTE call, set the value
for VoLTERoamingSettingDisableDuringCall to one of the following values:
VALUE DESCRIPTION
9. Important
Beginning with Windows Phone 8.1 GDR1, the ShowVoLTEToggle setting under the
CellCore/PerDevice/CellUX/Critical settings path must be set. This ensures that OMA-DM VoLTE features
for certain mobile operators are functioning properly. Once you have made this change to your answer file,
the ShowVoLTEToggle setting in the CellCore/PerIMSI/$(__IMSI)/CellUX/Critical settings path will be
ignored. You may remove or leave the per-IMSI setting in your answer file.
Set the value for ShowVoLTEToggle to one of the following to hide or show the VoLTE toggle.
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a phone.
2. Go to the Settings > Cellular & SIM settings screen.
3. Verify that the correct settings and toggle values are showing up depending on the values you specified for
ShowVoLTEToggle , SwitchIMS , SwitchSMSOverIMS , and SwitchVoiceOverIMS .
4. If you customized the VoLTE toggle label and description, verify that the correct localized strings are
showing up based on the phone language.
Related topics
Prepare for Windows mobile development
Customization answer file overview
View Internet APN
1/18/2019 • 2 minutes to read
For mobile operators that require it, OEMs can show the View Internet APN button in the Cellular & SIM
settings page for users that have a data plan. When data is off, the button is disabled. By default, the button is
hidden.
For dual SIM devices, the button is visible depending on the multivariant SIM settings. For example, if the data
plan is on SIM1 and the setting is configured to hide the button, the View Internet APN button will be hidden. If
the user switches to SIM2 and the setting is configured to show the button, the user will see the View Internet
APN button.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="ViewInternetAPN"
Description="Use to show the 'View Internet APN' button in the cellular+SIM
settings screen."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/CellUX">
<!-- Use to show the 'View Internet APN' button in the cellular+SIM settings screen.
Set to 0 or 'No' (to hide, default) or set to 1 or 'Yes' (to show). -->
<Setting Name="ShowViewAPN" Value="" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/CellUX">
<!-- Use to show the 'View Internet APN' button in the cellular+SIM settings screen. Set to 0 or
'No' (to hide, default) or set to 1 or 'Yes' (to show). -->
<Setting Name="ShowViewAPN" Value="" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set the value for ShowViewAPN to one of the following:
VALUE DESCRIPTION
Testing:
1. Flash the build containing this customization to a device with a SIM.
2. Go to the Cellular & SIM screen in Settings.
3. Verify that the View Internet APN button is either hidden or visible depending on the value you set for
ShowViewAPN .
On a dual SIM device, verify if the View Internet APN button is hidden or visible depending on the
ShowViewAPN setting value for each SIM.
4. If there is no data plan associated with the SIM or data is turned off, verify that the button is disabled.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for locale-based settings
1/18/2019 • 2 minutes to read
Describes the customizations that you can configure to optimize mobile devices for different regions they may ship
to. Includes topics on shipping mobile devices to Chines.
In this section
TOPIC DESCRIPTION
Assistance for dialing international phone numbers Partners can turn off the international assist feature that helps
users with the country codes needed for dialing international
phone numbers.
China Type Approval requirement: app install prompts To meet China Type Approval (CTA) requirements for devices
shipping in China, OEMs must show a notification dialog to
alert users when the app being downloaded does certain
things.
Contact management on the SIM (CN only) Partners can specify that users should be able to read, edit,
delete, import, and export contact information on their SIM
(basic SIM, USIM, or RUIM). This customization is only
available for devices sold in China.
Disable NITZ or daylight saving time OEMs can configure Network Identity and Time Zone (NITZ) to
handle daylight saving time appropriately for their market, or
disable automatic setting of date and time completely.
Display location icon Partners can hide the location icon in the system tray if they
choose.
Ignore NITZ information from LTE networks For mobile networks that can receive Network Identity and
Time Zone (NITZ) information from multiple sources, partners
can set the device to ignore the time received from an LTE
network.
Microsoft Store for China For a Windows 10 Mobile device shipping in China, OEMs
must specify that the device is intended for that market by
setting the PhoneROMLanguage setting in
DeviceTargetingInfo to the appropriate locale ID.
Mobile device languages Partners must select the set of available languages to include
on the mobile device. Partners must also specify one of the
included languages as the default device language.
Network Time Protocol support Use to automatically set the time using an NTP client in a
mobile device that doesn't support NITZ, or when cellular data
is not available.
Speech languages OEMs can specify the speech languages to include on the
mobile device.
Default list of countries/regions OEMs can select the countries/regions to exclude from the
default list shown in the mobile device's Country/Region list in
the Settings screen.
Preferred system types for phone connectivity (CN only) OEMs can provide more control over the system types that
their devices use to connect. This customization is only for
China. OEMs should not set this customization unless required
by the mobile operator.
Threshold for automatic time update For mobile networks that support Network Identity and Time
Zone (NITZ), OEMs can specify the difference (in number of
seconds) between the NITZ information and the current device
time before a device time update is triggered.
Time zone priority list Beginning with Windows 10 Mobile, this customization is no
longer necessary as the OS supports a location-based
timezone detection service. However, to maintain backwards
compatibility for some RPAL APIs that were previously
released, an updated table of the timezone IDs is provided for
your reference.
WAP browser support (CN and IN only) For phones that will ship in China and India, OEMs can add
one preloaded WAP browser to the phone, which will
automatically be launched when the user tries to open a WAP
link. The WAP browser must be written as an application, and
must go through the standard Microsoft Store submission
process.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Assistance for dialing international phone numbers
1/18/2019 • 2 minutes to read
Partners can turn off the international assist feature that helps users with the country codes needed for dialing
international phone numbers. This customization is recommended when the device will be sold in a country or
region that has multiple IDD (country exit code) values.
If the country or region has multiple IDD values but a default is set, international assist will occasionally be
successful. The following lists show the countries and regions that are affected for placing or receiving calls.
Multiple IDD values, No Default (rarely successful):
Belize, Brazil, Cambodia, Columbia, Indonesia, Israel, Korea, Maldives, Mauritius, Mongolia, New Caledonia,
Singapore, Solomon Islands, Taiwan, Thailand, Uganda, Uruguay
Multiple IDD values, default set (occasionally successful):
Australia, Costa Rica, Finland, Guatemala
If the international assist feature is turned off, it is also possible to override the MNC and MCC used for SMS. For
more information, see International assisted dialing for SMS.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
2. Specify an Owner .
3. Set AssistedDialSetting to one of the following values:
VALUE DESCRIPTION
Related topics
Prepare for Windows mobile development
Customization answer file overview
CTA app install prompts
1/18/2019 • 2 minutes to read
To meet China Type Approval (CTA) requirements for devices shipping in China, OEMs must show a notification
dialog to alert users when the app being downloaded does certain things.
Note This is a legacy mobile setting and is only a requirement for China. It works on phones being upgraded to
Windows 10 Mobile, but we recommend that you use the CountryAndRegion Windows provisioning setting
instead.
The dialog must be shown when the app being downloaded does any of the following:
Invokes user data from a phone book
Uses recording from the Microsoft Store
Uses location data
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="CTAAppInstallPrompts"
Description="Use to show a notification dialog to alert users when the app being
downloaded invokes data from a
phone book, uses recording from the Windows Phone Store, or uses
location data.
This customization is only a requirement for China."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Zune/Settings">
<Setting Name="RequireExtendedCapabilityPrompts" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of RequireExtendedCapabilityPrompts to one of the following:
VALUE DESCRIPTION
Testing:
To fully test this customization, the phone must also be configured to use Microsoft Store for China.
1. Flash the build containing this customization to a phone.
2. Go to the Microsoft Store and download and install an app that can invoke the phone book.
3. Open the app to access the device's native phone book.
4. Verify that a notification dialog shows up.
5. Download another app that uses recording or location data and verify that you see the notification appear
when you first run the app.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Contact management on the SIM
1/18/2019 • 2 minutes to read
IMPORTANT
This customization is only available for devices sold in China.
Partners can specify that users should be able to read, edit, delete, import, and export contact information on their
SIM (basic SIM, USIM, or RUIM ).
Constraints: ImageTimeOnly
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="People/SIMContactManagement">
<Setting Name="EnableSIMAddressBookAndExport" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of EnableSIMAddressBookAndExport to one of the following values:
VALUE DESCRIPTION
Testing
1. Flash the build containing this customization to a device with a SIM.
2. Go to the People Hub and tap the + button to add a new contact.
3. Verify that you can see the Create contact in window, which includes an option for creating the contact in the
SIM.
4. Choose where you would like to create the contact, and then add a new contact by filling in a name and phone
number.
5. Go to the People Settings screen.
6. Verify that you can see both an export contacts to SIM button and an import SIM contacts button.
The import SIM contacts button will not be activated unless the SIM you used for testing already
contains SIM contacts or the contact you created in step 4 was created in the SIM.
The export contacts to SIM button will not be activated unless there are contacts in your Microsoft
account.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Disable NITZ or daylight saving time
1/18/2019 • 2 minutes to read
OEMs can configure NITZ to handle daylight saving time appropriately for their market, or disable automatic
setting of date and time completely.
By default, the OS automatically sets the time and date by using Network Identity and Time Zone (NITZ ). OEMs
can configure NITZ to handle daylight saving time appropriately for their market, or disable automatic setting of
date and time on the device completely if NITZ is not supported by the network.
In addition, if the device will be sold in a country or region that does not use daylight saving time, partners can
disable it on the device. This will help the automatic time algorithm choose the correct time zone with greater
accuracy.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="AutomaticTime">
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. The following values are valid for EnableAutomaticTime :
VALUE DESCRIPTION
5. Delete either of the EnableAutomaticTime or DisableDaylightSavingsTime settings if the feature does not
need to be disabled.
Testing steps:
1. Flash a build containing this customization to a device with a SIM or UICC.
2. If you have disabled automatic time setting with NITZ, ensure that the date and time is not set automatically
for the user during setup.
If you have disabled NITZ, the default time zone shown during setup will come from the country/region
default time zone list based on the current country/region setting. Also, the date + time screen in Settings
will have fields for Time zone, Date, and Time, but no Set automatically toggle.
3. If daylight saving time has been disabled and automatic time is enabled, the device determines the most
likely time zone by the current offset only.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Display location icon
1/18/2019 • 2 minutes to read
Partners can hide the location icon in the system tray if they choose.
By default, the location icon in the system tray is displayed whenever an app requests the user's location. Users
may override the setting in the Location settings screen.
Constraints: FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Shell/SystemTray/Location">
<Setting Name="LocationIcon" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of LocationIcon to one of the following:
VALUE DESCRIPTION
Testing steps:
1. Flash a build containing this customization to a device.
2. Depending on the value you set for LocationIcon , verify if the location icon is displayed or is hidden in the
system tray if an app that requests the user's location is launched.
3. Go to the Settings > Location screen. Change the value of the Show icon option and verify if the location
icon is displayed or is hidden from the system tray based on the setting you chose.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Ignore NITZ information from LTE networks
1/18/2019 • 2 minutes to read
For mobile networks that can receive Network Identity and Time Zone (NITZ ) information from multiple sources,
partners can set the device to ignore the time received from an LTE network. Time received from a CDMA network
is not affected.
Constraints: None
This customization supports: per-IMSI value, per-device value
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="NITZFiltering"
Description="Use to set the phone to ignore the time received from an LTE network."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Settings Path="CellCore/PerIMSI/$(__IMSI)/General">
<Setting Name="NitzFiltering" Value="0x10" />
</Settings>
</Variant>
-->
<Static>
<Settings Path="CellCore/PerDevice/General">
<Setting Name="NitzFiltering" Value="0x10" />
</Settings>
</Static>
-->
</ImageCustomizations>
2. Specify an Owner .
3. Determine if you need to use the per-IMSI or per-device setting.
For the per-IMSI case:
a. Define Targets or conditions for when a variant can be applied, such as keying off a SIM's MCC,
MNC, and SPN.
b. Define settings for a Variant, which are applied if the associated target's conditions are met.
4. Set the Value to 0x10.
The value specifies RIL_SYSTEMTYPE_LTE.
Testing:
Work with your mobile operator partner to test this customization on their network.
1. Flash the build containing this customization to a device capable of receiving NITZ information from both a
CDMA network and LTE network.
2. Verify that the device only uses NITZ information received from the CDMA network.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Microsoft Store for China
1/18/2019 • 2 minutes to read
For a Windows 10 Mobile device shipping in China, OEMs must specify that the device is intended for that market
by setting the PhoneROMLanguage setting in DeviceTargetingInfo to the appropriate locale ID. For example,
for Chinese (China) the locale ID must be set to 0804. When enabled, users are routed to the Microsoft Store for
China.
Note This customization is only a requirement for China.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="PhoneMetadataDeviceTargetingInfo"
Description="Use to set phone metadata including the phone model name, OEM and
mobile operator name, hardware and software versions, and so on."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="Multivariant">
<Setting Name="Enable" Value="1" />
</Settings>
<Settings Path="AutoDataConfig">
<Setting Name="Enable" Value="0" />
</Settings>
</Static>
<Static>
<!-- These settings are ImageTimeOnly and will be put directly into the registry hive -->
<Settings Path="DeviceInfo/Static">
<Setting Name="PhoneManufacturer" Value="" />
<Setting Name="PhoneROMVersion" Value="" />
<Setting Name="PhoneHardwareRevision" Value="" />
<Setting Name="PhoneSOCVersion" Value="" />
<Setting Name="PhoneFirmwareRevision" Value="" />
<Setting Name="PhoneRadioHardwareRevision" Value="" />
<Setting Name="PhoneRadioSoftwareRevision" Value="" />
<Setting Name="PhoneBootLoaderVersion" Value="" />
<Setting Name="PhoneROMLanguage" Value="0804" />
<Setting Name="PhoneHardwareVariant" Value="" />
</Settings>
</Static>
<!-- These settings are FirstVariationOnly and can be configured at runtime potentially based on
SIM value -->
<Settings Path="DeviceInfo/Variant">
<Setting Name="PhoneMobileOperatorName" Value="" />
<Setting Name="PhoneManufacturerModelName" Value="" />
<Setting Name="PhoneMobileOperatorDisplayName" Value="" />
<Setting Name="PhoneSupportPhoneNumber" Value="" />
<Setting Name="PhoneSupportLink" Value="" />
<Setting Name="PhoneOEMSupportLink" Value="" />
<Setting Name="PhoneModelName" Value="" />
</Settings>
</Variant>
</ImageCustomizations>
2. Specify an Owner .
3. Set PhoneROMLanguage to 0804 for China (Chinese).
If partners do not set the PhoneROMLanguage setting to a China locale ID, partners may not ship the device in
China. For more information about all locale IDs (LCIDs) including Chinese LCIDs, see Locale IDs assigned
by Microsoft on MSDN.
Testing:
1. Flash the build containing this customization to a device with a UICC.
2. From the device, launch the Microsoft Store and verify that you are routed to the store for China.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Mobile device languages
1/18/2019 • 2 minutes to read
Partners must select the set of available languages to include on the mobile device. Partners must also specify one
of the included languages as the default device language.
Windows 10 Mobile provides support for many languages. See the detailed list in this topic for more information.
Limitations and restrictions:
Partners must include at least one device language.
Microsoft recommends that OEMs include all of the supported device languages, but the OEM must abide by
the space limitations for the partition layout.
Partners cannot modify existing languages or add support for their own.
For more information about language customizations, see the overview Set languages and locales.
Constraints: ImageTimeOnly
Instructions
To modify the list of device languages, you must edit the UserInterface section in the OEMInput.xml file before
building the device image.
The following device languages are supported.
Afrikaans af-ZA
Albanian sq-AL
Amharic am-ET
Arabic ar-SA
Bangla bn-BD
Belarusian be-BY
Bulgarian bg-BG
DEVICE LANGUAGE VALUE TO USE IN THE OEMINPUT.XML FILE
Catalan ca-ES
Croatian hr-HR
Czech cs-CZ
Danish da-DK
Dutch nl-NL
Estonian et-EE
Filipino fil-PH
Finnish fi-FI
Galician gl-ES
German de-DE
Greek el-GR
Hebrew he-IL
DEVICE LANGUAGE VALUE TO USE IN THE OEMINPUT.XML FILE
Hindi hi-IN
Hungarian hu-HU
Icelandic is-IS
Indonesian id-ID
Italian it-IT
Japanese ja-JP
Kannada kn-IN
Kazakh kk-KZ
Khmer km-KH
Korean ko-KR
Lao lo-LA
Latvian lv-LV
Lithuanian lt-LT
Macedonian mk-MK
Malay ms-MY
Malayalam ml-IN
Persian fa-IR
Polish pl-PL
DEVICE LANGUAGE VALUE TO USE IN THE OEMINPUT.XML FILE
Romanian ro-RO
Russian ru-RU
Slovak sk-SK
Slovenian sl-SI
Swahili sw-KE
Swedish sv-SE
Tamil ta-IN
Telugu te-IN
Thai th-TH
Turkish tr-TR
Ukrainian uk-UA
Vietnamese vi-VN
List of included device languages: OEMs must include at least one device language. To include multiple
device languages, add additional Language entries to the UserInterface section of the OEMInput.xml file.
In the following example, English (US ), Japanese, and Dutch are included as device languages.
<SupportedLanguages>
<UserInterface>
<Language>en-US</Language>
<Language>ja-JP</Language>
<Language>nl-NL</Language>
</UserInterface>
<Keyboard>
<Language>en-US</Language>
</Keyboard>
<Speech>
<Language>en-US</Language>
</Speech>
</SupportedLanguages>
Default device language: to define the default device language that the device will use when it is first
turned on by the user, OEMs must define both a default device language and a default regional format.
Both values must be specified in the OEMInput.xml file before building the device image.
To specify the default device language, edit the BootUILanguage entry in OEMInput.xml. This value
must match one of your Language entries from the UserInterface section.
To specify the default regional format, edit the BootLocale entry in OEMInput.xml.
Expanding on the previous example, the following shows how to set Japanese as the default device
language (BootUILanguage) and set the default regional format (BootLocale) to Japan.
<SupportedLanguages>
<UserInterface>
<Language>en-US</Language>
<Language>ja-JP</Language>
<Language>nl-NL</Language>
</UserInterface>
<Keyboard>
<Language>en-US</Language>
</Keyboard>
<Speech>
<Language>en-US</Language>
</Speech>
</SupportedLanguages>
<BootUILanguage>ja-JP</BootUILanguage>
<BootLocale>ja-JP</BootLocale>
NOTE
These two paired values either have to be the same or they must be associated. For more information, see the
recommended values shown in the table in Set languages and locales.
Testing
1. Flash the build containing this customization to a device.
2. During initial device setup, do not change the device language.
3. Go to the Language screen in Settings > Time & language.
4. Look at the language list and verify that the default language is correct.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Network Time Protocol support
1/18/2019 • 3 minutes to read
Use to automatically set the time using an NTP client in a mobile device that doesn't support NITZ, or when
cellular data is not available.
Mobile devices primarily rely on Network Identify and Time zone (NITZ ), which is provided by the mobile operator,
to automatically update the time on the device. When NITZ is available from the cellular network, there are no
issues maintaining accurate time in devices. However, for devices that do not have a SIM or have had the SIM
removed for some time, or for devices that have a SIM but NITZ is not supported, the device may run into issues
maintaining accurate time on the device.
The OS includes support for Network Time Protocol (NTP ), which enables devices to receive time when NITZ is
not supported or when cellular data is not available. NTP gets the time by querying a server at a specified time
interval. NTP is based on Coordinated Universal Time (UTC ) and doesn't support time zone or daylight saving
time so users will need to manually update the time zone after an update from NTP if users move between time
zones.
For mobile devices that do not support NITZ and have NTP enabled, the user is required to select the time zone,
date, and time during initial device setup before the Wi-Fi connections page. The Wi-Fi connection requires
certificate validation, which needs accurate time.
If NTP is enabled, the first NTP query happens post-shell ready. After that, the default regular sync interval then
applies.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="AutomaticTime">
<Setting Name="NTPEnabled" Value="" />
<Setting Name="NTPRegularSyncInterval" Value="" />
<Setting Name="NTPRetryInterval" Value="" />
<Setting Name="NTPServers" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To enable or disable the NTP client, set NTPEnabled to one of the following values:
VALUE DESCRIPTION
**Note**
Microsoft recommends explicitly setting a value for `NTPEnabled` depending on the user experience you want to
enable or requirements you need to meet.
4. To set the regular sync interval, in hours, set NTPRegularSyncInterval to a value between 1 and 168 hours
(inclusive). The default sync interval value is 12 hours.
5. To set the retry interval, in hours, if the regular sync fails, set NTPRetryInterval to a value between 1 and 24
hours (inclusive).
6. To enumerate the NTP source server(s) used by the NTP client, set the value for NTPServer . For example,
the value can be ntpserver1.contoso.com;ntpserver2.fabrikam.com;ntpserver3.contoso.com and so on. The
default NTP source server value time.windows.com.
Testing:
1. Flash the build containing this customization to a device that does not support NITZ nor has a cellular data
connection.
2. During initial device setup, verify that you see the Time and region screen. Set the correct time zone, date,
and time for the device.
3. Verify that the Wi-Fi connection screen shows up after the Time and region screen. Connect to a Wi-Fi
network so that the NTP client can connect to the NTP source server.
4. If you enabled NTP support, and depending on the values that you set for the regular sync interval, verify
that the time on the device remains accurate after the sync interval has been reached. If the sync fails, verify
if the correct time is set after the retry interval has passed.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Regional format
1/18/2019 • 3 minutes to read
Partners can specify the default country/region, regional format, pre-enabled keyboard, and speech languages for
the device.
Constraints: ImageTimeOnly
Instructions:
The following table shows the country/region associated with the BootLocale values that you can use.
am-ET Ethiopia
ar-BH Bahrain
ar-DZ Algeria
ar-EG Egypt
ar-IQ Iraq
ar-JO Jordan
ar-KW Kuwait
ar-LB Lebanon
ar-LY Libya
ar-MA Morocco
ar-OM Oman
ar-QA Qatar
BOOTLOCALE VALUE COUNTRY/REGION
ar-SY Syria
ar-TN Tunisia
ar-YE Yemen
arn-CL Chile
as-IN India
az-Cyrl-AZ Azerbaijan
az-Latn-AZ Azerbaijan
ba-RU Russia
be-BY Belarus
bg-BG Bulgaria
bin-NG Nigeria
bn-BD Bangladesh
bn-IN India
bo-CN China
br-FR France
ca-ES Spain
BOOTLOCALE VALUE COUNTRY/REGION
ca-ES-valencia Spain
co-FR France
da-DK Denmark
de-AT Austria
de-CH Switzerland
de-DE Germany
de-LI Liechtenstein
de-LU Luxembourg
dsb-DE Germany
dv-MV Maldives
dz-BT Bhutan
el-GR Greece
en-AU Australia
en-BZ Belize
en-CA Canada
en-ID Indonesia
en-IE Ireland
en-IN India
en-JM Jamaica
en-MY Malaysia
en-PH Philippines
en-SG Singapore
en-ZW Zimbabwe
es-AR Argentina
es-BO Bolivia
es-CL Chile
es-CO Colombia
es-CU Cuba
BOOTLOCALE VALUE COUNTRY/REGION
es-EC Ecuador
es-ES Spain
es-GT Guatemala
es-HN Honduras
es-MX Mexico
es-NI Nicaragua
es-PA Panama
es-PE Peru
es-PY Paraguay
es-SV El Salvador
es-UY Uruguay
et-EE Estonia
eu-ES Spain
fa-IR Iran
ff-Latn-SN Senegal
BOOTLOCALE VALUE COUNTRY/REGION
ff-NG Nigeria
fi-FI Finland
fil-PH Philippines
fr-BE Belgium
fr-CA Canada
fr-CH Switzerland
fr-CM Cameroon
fr-FR France
fr-HT Haiti
fr-LU Luxembourg
fr-MA Morocco
fr-MC Monaco
fr-ML Mali
fr-RE Reunion
fr-SN Senegal
fy-NL Netherlands
BOOTLOCALE VALUE COUNTRY/REGION
ga-IE Ireland
gl-ES Spain
gn-PY Paraguay
gsw-FR France
gu-IN India
ha-Latn-NG Nigeria
he-IL Israel
hi-IN India
hr-HR Croatia
hsb-DE Germany
hu-HU Hungary
hy-AM Armenia
ibb-NG Nigeria
id-ID Indonesia
ig-NG Nigeria
ii-CN China
BOOTLOCALE VALUE COUNTRY/REGION
is-IS Iceland
it-CH Switzerland
it-IT Italy
iu-Cans-CA Canada
iu-Latn-CA Canada
ja-JP Japan
kk-KZ Kazakhstan
kl-GL Greenland
km-KH Cambodia
kn-IN India
ko-KR Korea
kok-IN India
kr-NG Nigeria
ks-Deva-IN India
ku-Arab-IQ Iraq
ky-KG Kyrgyzstan
lb-LU Luxembourg
lo-LA Laos
lt-LT Lithuania
BOOTLOCALE VALUE COUNTRY/REGION
lv-LV Latvia
ml-IN India
mn-MN Mongolia
mn-Mong-CN China
mn-Mong-MN Mongolia
mni-IN India
moh-CA Canada
mr-IN India
ms-BN Brunei
ms-MY Malaysia
mt-MT Malta
my-MM Myanmar
nb-NO Norway
ne-IN India
ne-NP Nepal
nl-BE Belgium
nl-NL Netherlands
BOOTLOCALE VALUE COUNTRY/REGION
nn-NO Norway
oc-FR France
om-ET Ethiopia
or-IN India
pa-Arab-PK Pakistan
pa-IN India
pl-PL Poland
prs-AF Afghanistan
ps-AF Afghanistan
pt-BR Brazil
pt-PT Portugal
qps-Latn-x-sh Jamaica
qps-ploca Japan
quc-Latn-GT Guatemala
quz-BO Bolivia
quz-EC Ecuador
BOOTLOCALE VALUE COUNTRY/REGION
quz-PE Peru
rm-CH Switzerland
ro-MD Moldova
ro-RO Romania
ru-MD Moldova
ru-RU Russia
rw-RW Rwanda
sa-IN India
sah-RU Russia
sd-Arab-PK Pakistan
sd-Deva-IN India
se-FI Finland
se-NO Norway
se-SE Sweden
sk-SK Slovakia
sl-SI Slovenia
sma-NO Norway
sma-SE Sweden
BOOTLOCALE VALUE COUNTRY/REGION
smj-NO Norway
smj-SE Sweden
smn-FI Finland
sms-FI Finland
so-SO Somalia
sq-AL Albania
sr-Cyrl-ME Montenegro
sr-Cyrl-RS Serbia
sr-Latn-ME Montenegro
sr-Latn-RS Serbia
sv-FI Finland
sv-SE Sweden
sw-KE Kenya
syr-SY Syria
BOOTLOCALE VALUE COUNTRY/REGION
ta-IN India
te-IN India
tg-Cyrl-TJ Tajikistan
th-TH Thailand
ti-ER Eritrea
ti-ET Ethiopia
tk-TM Turkmenistan
tn-BW Botswana
tr-TR Turkey
tt-RU Russia
tzm-Arab-MA Morocco
tzm-Latn-DZ Algeria
tzm-Tfng-MA Morocco
ug-CN China
uk-UA Ukraine
ur-IN India
BOOTLOCALE VALUE COUNTRY/REGION
ur-PK Pakistan
uz-Cyrl-UZ Uzbekistan
uz-Latn-UZ Uzbekistan
vi-VN Vietnam
wo-SN Senegal
yo-NG Nigeria
zh-CN China
zh-SG Singapore
zh-TW Taiwan
To set the default regional format: The OEM must edit the BootLocale section of the OEMInput.xml file
before building the device image.
The following example demonstrates how to set the default regional format to Japan (ja-JP ) in the OEMInput.xml
file.
<SupportedLanguages>
<UserInterface>
<Language>en-US</Language>
<Language>ja-JP</Language>
<Language>nl-NL</Language>
</UserInterface>
<Keyboard>
<Language>en-US</Language>
</Keyboard>
<Speech>
<Language>en-US</Language>
</Speech>
</SupportedLanguages>
<BootUILanguage>ja-JP</BootUILanguage>
<BootLocale>ja-JP</BootLocale>
Testing steps:
1. Flash the build containing this customization to a device.
2. During initial device setup, do not change the device language.
3. Go to the Region screen in Settings > Time & language.
4. Look at the Country/Region field to verify that the country or region is set according to the value you
specified in the OEMInput.xml file.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Speech languages
1/18/2019 • 2 minutes to read
OEMs can specify the speech languages to include on the mobile device.
The following 7 languages are supported for speech recognition and text-to-speech: en-US, en-GB, zh-CN,
de-DE, fr-FR, it-IT, es-ES
These 7 languages are available on clean installs and can also be downloaded for devices running
Windows 10 for desktop editions (Home, Pro, Enterprise, and Education) and Windows 10 Mobile.
Additionally, Windows 10 includes 9 more languages for text-to-speech only: es-MX, en-IN, ko-KR, pt-BR,
ja-JP, pl-PL, ru-RU, zh-TW, and zh-HK.
These 9 text-to-speech only languages are available on clean installs only and cannot be downloaded.
Users can install the 7 new speech languages from the speech screen in Settings, if they are not included on the
device by default.
Instructions:
For more information about language customizations, see the overview Set languages and locales.
To modify the list of speech languages, you must edit the Speech section of the OEMInput.xml file before building
the device image. You can omit the speech entirely, in which case the user will have to download languages before
they can use the speech functionality on the device. To include speech, select one or more of the following options.
French fr-FR
German de-DE
Italian it-IT
To include one speech language, add one Language entry to the Speech section of the OEMInput.xml file as
shown in the following example:
<SupportedLanguages>
<UserInterface>
<Language>en-US</Language>
</UserInterface>
<Keyboard>
<Language>en-US</Language>
</Keyboard>
<Speech>
<Language>en-US</Language>
</Speech>
</SupportedLanguages>
To include multiple speech languages, add additional Language entries to the Speech section of the
OEMInput.xml file as shown in the following sample.
<SupportedLanguages>
<UserInterface>
<Language>en-US</Language>
</UserInterface>
<Keyboard>
<Language>en-US</Language>
</Keyboard>
<Speech>
<Language>en-US</Language>
<Language>pt-BR</Language>
<Language>ru-RU</Language>
</Speech>
</SupportedLanguages>
Testing Steps:
1. Flash the build containing this customization to a device.
2. Go to the speech screen in Settings.
3. Verify that the list of speech languages installed on the device is correct.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Default list of countries/regions
1/18/2019 • 2 minutes to read
OEMs can select the countries/regions to exclude from the default list shown in the mobile device's
Country/Region list in the Settings screen.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="Globalization">
<Setting Name="ExcludedNations" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value for ExcludedNations to specify the countries/regions that should not show up on the device's
Country/Region list in the Region settings page.
You can specify the value as a list of semicolon-delimited ISO -3166-1 Alpha2 character codes (no spaces)
that should be excluded when enumerating all supported countries with EnumSystemGeoID. The entire
string must not be larger than 255 characters. The value must have a maximum of 85 codes only. Note that
some ISO -3166-1 ALPHA2 codes cover multiple GeoIDs.
The value for ExcludedNations must follow this format:
"IO;SJ;AQ;BV;CX;CC;HM;NF;MP;PN;GS;TK;WF;BL;UM"
Testing steps:
1. Flash the build containing this customization to a device.
2. After device setup, go to the Region screen in Settings.
3. .
4. Look at the Country/Region list to verify that the countries or regions you specified in ExcludedNations
are not showing up on the list.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Preferred system types for phone connectivity
1/18/2019 • 3 minutes to read
IMPORTANT
This customization is only for China. OEMs should not set this customization unless required by the mobile operator.
OEMs can provide more control over the system types that their devices use to connect by: mapping an ICCID or
IIN to one radio (regardless of which SIM is chosen), specifying a list of MCC/MNCs that the MO wishes to limit,
and/or restricting the second slot in a dual SIM device.
For mobile operators that require more control over the system types that their phones use to connect to the
mobile operators' networks, OEMs can:
Map a partial ICCID or Industry Identification Number (IIN ) to the faster radio regardless of which SIM card is
chosen for data connectivity.
Specify the MCC and MNC of other specific operators that the main mobile operator wishes to limit. If the
UICC's MCC and MNC matches any of the pairs that OEMs can specify for the operator, a specified RIL system
type will be removed from the UICC regardless of its app types, slot position, or executor mapping.
Restrict the second slot in a dual SIM device regardless of what apps or executor mapping the second slot is
associated with.
Constraints: None
Instructions
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="CellCore/PerDevice/General">
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. To map a partial ICCID or the IIN to the faster radio regardless of which SIM card is chosen for data
connectivity, set the value of OperatorPreferredForFasterRadio to match the IIN or the ICCID, up to 7 digits,
of the preferred operator.
4. To allow an operator to specify the MCC and MNC of other specific operators that they wish to limit, set the
following settings:
a. Set the value of the OperatorListForExcludedSystemTypes setting a comma separated list of
MCC:MNC pairs for which the system types should be restricted.
For example, the value can be set to 310:026,310:030 to restrict operators with an MCC:MNC of
310:026 and 310:030.
b. Set the value of the ExcludedSystemTypesPerOperator setting to match the system type to be excluded
from the SIM cards that match the MCC:MNC pairs you listed in OperatorListForExcludedSystemTypes
.
For example, a value of 0x8 specifies RIL_SYSTEMTYPE_UMTS (3G ) while 0x10 specifies
RIL_SYSTEMTYPE_LTE (4G ). To exclude more than one system type, perform a bitwise OR operation
on the radio technologies you want to exclude. For example, a bitwise OR operation on
RIL_SYSTEMTYPE_LTE (4G ) and RIL_SYSTEMTYPE_UMTS (3G ) results in the value 11000 (binary)
or 0x18 (hexadecimal). In this case, the ExcludedSystemTypesPerOperator value must be set to 0x18 to
limit the matching MCC:MNC pairs to 2G.
5. To allow an operator to simply restrict the second slot in a dual SIM device regardless of what apps or
executor mapping the second slot is associated with, set the value of Slot2ExcludedSystemTypes to the
system types to be excluded from the SIM cards inserted in Slot 2.
For example, a value of 0x8 specifies RIL_SYSTEMTYPE_UMTS (3G ) while 0x10 specifies
RIL_SYSTEMTYPE_LTE (4G ). To exclude more than one system type, perform a bitwise OR operation on the
radio technologies you want to exclude. For example, a bitwise OR operation on RIL_SYSTEMTYPE_LTE
(4G ) and RIL_SYSTEMTYPE_UMTS (3G ) results in the value 11000 (binary) or 0x18 (hexadecimal). In this
case, any SIM inserted in Slot 2 will be limited to 2G.
Testing
1. Work with your mobile operator to obtain the partial ICCID or the IIN, the list of MCC and MNC values that
they wish to limit, and the system types that they wish to restrict.
2. Flash the build containing this customization to a dual SIM phone.
3. Depending on which settings you set to provide the mobile operator more control over the system types that
their phones use to connect to the network, test each scenario to make sure that the device behaves as
expected. With the settings in this customization, verify that you don't see the restricted mobile operators able
to use any of the restricted RIL system types.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Threshold for automatic time update
1/18/2019 • 2 minutes to read
For mobile networks that support Network Identity and Time Zone (NITZ ), OEMs can specify the difference (in
number of seconds) between the NITZ information and the current device time before a device time update is
triggered. When set, the OS updates the device time if the time difference is larger than the value specified by the
OEM.
The threshold must be a value between 1 and 59 seconds, inclusive.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="AutomaticTime">
<Setting Name="NetworkTimeUpdateThreshold" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value for NetworkTimeUpdateThreshold between 1 and 59 seconds (inclusive). This is equivalent to 0x1
and 0x3B (inclusive) in hexadecimal.
Testing:
Flash the build containing this customization to a phone connected to a network that supports NITZ.
Note OEMs may need to configure the value a few times to determine the best threshold value.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Time zone priority list
1/25/2019 • 3 minutes to read
Beginning with Windows 10 Mobile, this customization is no longer necessary as the OS supports a location-
based timezone detection service. However, to maintain backwards compatibility for some RPAL APIs that were
previously released (such as GetTimeZoneInformationID, SetTimeZoneInformationByID, and so on), an
updated table of the timezone IDs is provided for your reference.
0x5BE UTC+02 Harare, Pretoria 0x5C8 UTC+02 Damascus 0x5D2 UTC+02 Istanbul 0x5DC UTC+03 Kuwait,
Riyadh 0x5E6 UTC+03 Baghdad 0x5F0 UTC+03 Nairobi 0x5FA UTC+02 Kaliningrad (RTZ 1) 0x604 UTC+03
Moscow, St. Petersburg, Volgograd (RTZ 2) 0x618 UTC+03 Minsk 0x60E UTC+03:30 Tehran 0x640 UTC+04 Abu
Dhabi, Muscat 0x64A UTC+04 Baku 0x654 UTC+04 Yerevan 0x668 UTC+04 Tbilisi 0x672 UTC+04 Port Louis
0x67C UTC+04 Izhevsk, Samara (RTZ 3) 0x65E UTC+04:30 Kabul 0x6A4 UTC+05 Ekaterinburg (RTZ 4) 0x6AE
UTC+05 Ashgabat, Tashkent 0x6D6 UTC+05 Islamabad, Karachi 0x6B8 UTC+05:30 Chennai, Kolkata, Mumbai,
New Delhi 0x6C2 UTC+05:30 Sri Jayawardenepura 0x6CC UTC+05:45 Kathmandu 0x708 UTC+06 Astana 0x712
UTC+06 Novosibirsk (RTZ 5) 0x726 UTC+06 Dhaka 0x71C UTC+06:30 Yangon (Rangoon) 0x776 UTC+07
Bangkok, Hanoi, Jakarta 0x76C UTC+07 Krasnoyarsk (RTZ 6) 0x7D0 UTC+08 Beijing, Chongqing, Hong Kong,
Urumqi 0x7DA UTC+08 Irkutsk (RTZ 7) 0x7E4 UTC+08 Kuala Lumpur, Singapore 0x7EE UTC+08 Taipei 0x7F8
UTC+08 Perth 0x802 UTC+08 Ulaanbaatar 0x80C UTC+08:30 Pyongyang 0x834 UTC+09 Seoul 0x83E UTC+09
Osaka, Sapporo, Tokyo 0x848 UTC+09 Yakutsk (RTZ 8) 0x852 UTC+09:30 Darwin 0x85C UTC+09:30 Adelaide
0x898 UTC+10 Canberra, Melbourne, Sydney 0x8A2 UTC+10 Brisbane 0x8AC UTC+10 Hobart 0x8B6 UTC+10
Vladivostok, Magadan (RTZ 9) 0x8C0 UTC+10 Guam, Port Moresby 0x906 UTC+10 Magadan 0x8FC UTC+11
Solomon Is., New Caledonia 0x91A UTC+11 Chokurdakh (RTZ 10) 0x960 UTC+12 Fiji 0x96A UTC+12 Auckland,
Wellington 0x974 UTC+12 Petropavlovsk-Kamchatsky – Old 0x97E UTC+12 Coordinated Universal Time+12
0x988 UTC+12 Anadyr, Petropavlovsk-Kamchatsky (RTZ 11) 0x9C4 UTC+13 Nuku'alofa 0x64 UTC+13 Samoa
0xA28 UTC+14 Kiritimati Island
ID Time zone
ID Time zone
Constraints: None
Instructions:
Note The following instructions have been provided for backwards compatibility only. You may set the values for
the TimeZonePriority settings, but the OS will ignore the values as a location-based timezone detection service is
used instead.
1. Create a customization answer file using the contents shown in the following code sample.
<?xml version="1.0" encoding="utf-8" ?>
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="TimeZonePriorityList"
Description="Use To specify a preference list for the most applicable time zones
relative to the UTC offset."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="AutomaticTime">
<!-- You can use up to 15 time zones, but do not add or set unless you need it.
<Setting Name="TimeZonePriority6" Value="" />
<Setting Name="TimeZonePriority7" Value="" />
<Setting Name="TimeZonePriority8" Value="" />
<Setting Name="TimeZonePriority9" Value="" />
<Setting Name="TimeZonePriority10" Value="" />
<Setting Name="TimeZonePriority11" Value="" />
<Setting Name="TimeZonePriority12" Value="" />
<Setting Name="TimeZonePriority13" Value="" />
<Setting Name="TimeZonePriority14" Value="" />
<Setting Name="TimeZonePriority15" Value="" />
-->
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Specify the Value keys using the IDs of the time zones appropriate for the locations in which the device will
be sold.
4. Add additional priorities as necessary. You can add up to 15 time zones or specify up to TimeZonePriority15 .
For example, if you are only specifying up to 3 time zones, only include up to the TimeZonePriority3 setting,
set their values, and do not add the rest.
Related topics
Prepare for Windows mobile development
Customization answer file overview
WAP browser support (CN and IN only)
1/18/2019 • 2 minutes to read
For phones that will ship in China and India, OEMs can add one preloaded WAP browser to the phone, which will
automatically be launched when the user tries to open a WAP link. The WAP browser must be written as an
application, and must go through the standard Microsoft Store submission process.
Constraints: None
Instructions:
1. Create a WAP browser application and ensure that the following settings are configured properly:
a. Add the ID_CAP_NETWORKING capability to the application manifest of the WAP browser
application.
b. Add the following XML to the App element of the application manifest.
<Extensions>
<Protocol Name="wap" Category="phone.protocol" TaskID="_default" NavUriFragment="uri=%s"/>
<FileTypeAssociation Name="TestFileAssoc1" Category="phone.fileTypeAssociation"
TaskID="_default"
NavUriFragment="fileID=%s">
<DisplayName>Test Assoc1</DisplayName>
<Logo>res://StartMenu!AppIconMail.png</Logo>
<SupportedFileTypes>
<FileType ContentType="text/vnd.wap.wml">.wml</FileType>
</SupportedFileTypes>
</FileTypeAssociation>
</Extensions>
For more information about file and URI associations, see the Windows 10 SDK documentation.
2. After you have created the WAP browser application and gone through the Microsoft Store submission
process to obtain your application license, follow these steps to preload the WAP browser application to the
phone.
a. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Applications>
<Application Source="C:\Path\OEM_WAPBrowser.xap"
License="C:\Path\OEM_WAPBrowser_License.xml"
ProvXML="C:\Path\MPAP_OEM_WAPBrowser.provxml" />
</Applications>
</Static>
</ImageCustomizations>
b. Specify an Owner .
c. Set the Source value to the path and file name of your .xap or .appx file. For example,
C:\Path\OEM_WAPBrowser.xap.
d. Set the License value to the path and file name of license file for your WAP browser app. For
example, C:\Path\OEM_WAPBrowser_License.xml.
e. Set the ProvXML value to the path and file name for your WAP browser app. For example,
C:\Path\MPAP_OEM_WAPBrowser.provxml.
Testing:
1. Flash the build containing this customization to a phone with a SIM or with a data connection over Wi-Fi.
2. Open Microsoft Edge and enter a WAP link. The WAP browser should open automatically and display your
web page.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for accessibility settings
1/18/2019 • 2 minutes to read
Describes the customizations that you can configure to enhance accessibility on the mobile device.
In this section
TOPIC DESCRIPTION
Telecoil and TTY support for accessibility Partners can choose whether to show TTY and/or Telelcoil
options in the device settings.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Telecoil and TTY support for accessibility
1/18/2019 • 3 minutes to read
Partners can choose whether to show TTY and/or Telelcoil options in the device settings.
The OS provides support for telecoil and TTY devices. The settings and options that can be configured for telecoil
and TTY appear in the ease of access screen in Settings. By default, both the telecoil and TTY options are hidden.
TTY
A TTY is a separate device that enables people who are deaf, hard of hearing, or speech-impaired to communicate
by sending and receiving text. TTY support is required at both ends of the conversation.
Partners can display a TTY/TDD option in the ease of access screen in Settings. Partners must decide whether to
display two choices (Off or Full), or four choices (Off, Full, HCO, or VCO ). If the TTY option is visible, it should be
set to off by default.
Telecoil
A Telecoil is a supported hearing aid or implant that enables people who are deaf or hard of hearing to listen to
audio from the device by using magnetic induction.
Partners can display a Telecoil option in the ease of access screen in Settings. If the Telecoil toggle is visible, it
should be set to off by default.
Constraints: Atomic, FirstVariationOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<!-- This settings group is atomic so all settings must be configured -->
<Settings Path="EaseOfAccessCPL/TTY">
<Setting Name="ShowInControlPanel" Value="" />
<Setting Name="CompactMode" Value="" />
<Setting Name="Mode" Value="" />
</Settings>
<!-- This settings group is atomic so all settings must be configured -->
<Settings Path="EaseOfAccessCPL/Telecoil">
<Setting Name="ShowInControlPanel" Value="" />
<Setting Name="Enabled" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Configure the TTY/TDD settings and default values. The following settings group under
EaseOfAccessCPL/TTY is atomic so all settings must be configured.
a. To hide or show the TTY/TDD option in the ease of access screen in Settings, set the value of
ShowInControlPanel to one of the following:
VALUE DESCRIPTION
b. To show two (Off or Full) or four (Off, Full, HCO, or VCO ) menu items for TTY/TDD modes, set the
value of CompactMode to one of the following:
VALUE DESCRIPTION
1 or 'Enabled' Shows four choices (Off, Full, HCO, or VCO) for the
TTY selection UI.
c. To specify the default mode for the TTY/TDD option, set the value of Mode to one of the following:
VALUE DESCRIPTION
4. Configure the telecoil settings and default value. The following settings group under
EaseOfAccessCPL/Telecoil is atomic so all settings must be configured.
a. To hide or show the Telecoil option in the ease of access screen in Settings, set the value of
ShowInControlPanel to one of the following:
VALUE DESCRIPTION
b. To set the default user value for the Telecoil option, set the value of Enabled to one of the following:
VALUE DESCRIPTION
To enable Telecoil, use the two registry entries exactly as shown in the TelecoilAndTTY.pkg.xml file.
To enable TTY/TTD, use the tty_UI registry entry exactly as shown in the TelecoilAndTTY.pkg.xml file. To display
two choices (Off or Full), leave the compactMode registry value set to 0. To display four choices (Off, Full, HCO,
or VCO ), set the compact mode registry value to 1, instead.
Testing:
1. Flash the build containing this customization to a device.
2. Go to the ease of access screen in Settings.
3. Verify that the TTY and/or Telecoil options are visible and the default options are set accordingly. If TTY is
visible, ensure that the correct number of options are shown (2 or 4).
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for phone update settings
1/18/2019 • 2 minutes to read
Describes the customizations that determine how the mobile device handles updates.
In this section
TOPIC DESCRIPTION
Auto scan for phone updates OEMs can show or hide the auto scan for updates setting on
the device.
Block using SD card for updates For devices that support an SD card, OEMs can either allow or
block the use of the SD card for device updates.
Enable SD card override OEMs can use EnableSDCardOverride to use the SD card for
device updates.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Auto scan for phone updates
1/18/2019 • 2 minutes to read
OEMs can show or hide the auto scan for updates setting on the device. When auto scan is visible, users can see a
checkbox in the Settings > device update screen to inform them when updates are available for their devices.
When hidden, the device will always scan for updates and the user option is not visible.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="DeviceUpdate">
<!-- Use to determine whether to show or hide the auto scan settings for device updates. Set the
value to 0 or 'Hidden',
or set to 1 or 'Visible'. -->
<Setting Name="DisplayCheckForUpdates" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of DisplayCheckForUpdates to one of the following:
VALUE DESCRIPTION
0 or 'Hidden' The device will always scan for updates and the Tell
me when updates are available for my phone
checkbox is not displayed.
Testing steps:
1. Flash a build containing this customization to a device.
2. Go to the Settings > phone update screen.
3. Depending on the value you set for DisplayCheckForUpdates , verify whether the Tell me when updates are
available for my phone checkbox is visible or hidden.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Block using SD card for updates
1/18/2019 • 2 minutes to read
For devices that support an SD card, OEMs can either allow or block the use of the SD card for device updates.
By default, this customization is not set and the OS can use the SD card for updates. If there is enough space on
the eMMC to download an update, the OS will use the eMMC instead of the SD card.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="DeviceUpdate">
<Setting Name="BlockUsingSDCard" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of BlockUsingSDCard to one of the following:
VALUE DESCRIPTION
Note
Make sure that your UEFI supports powering up the
SD card on the UpdateOS.
Testing steps:
1. Flash a build containing this customization to a device.
2. If you set BlockUsingSDCard to allow the use of the SD card for updates and your device supports an SD
card, if space on the eMMC is not enough for the update, the OS will choose the SD card to use for the
update.
When there is an update available and you have synced and downloaded the update, verify whether the
update was installed from the SD card.
3. When the update has been successfully installed, use GetDULogs.exe to check if the update was done
through the SD card.
Make sure that your UEFI supports the powering up of the SD card on the UpdateOS.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enable SD card override
1/18/2019 • 2 minutes to read
By default, using the SD card for device updates is disabled. OEMs who want to use the SD card for device updates
must set EnableSDCardOverride to opt-in and re-enable updates using the SD card. However, if OEMs set
BlockUsingSDCard in Block using SD card for updates, the value set for BlockUsingSDCard takes precedence.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="DeviceUpdate">
<!-- Set the value to 0 or 'No' (do not use the SD card for updates), or set to 1 or 'Yes' (use
the SD card for updates). -->
<Setting Name="EnableSDCardOverride" Value="" />
</Settings>
</Static>
</ImageCustomizations>
2. Specify an Owner .
3. Set the value of EnableSDCardOverride to one of the following:
VALUE DESCRIPTION
Testing steps:
1. Flash a build containing this customization to a phone.
2. Fill the Data partition and leave only 11 to 100 MB of available space.
3. To verify if the SD card is used for updates, look for the following message in the Installation ARD:
WARNING: Do not remove your SD card while the update installs.
4. If you set EnableSDCardOverride to allow the use of the SD card for updates and your phone supports an SD
card, and BlockUsingSDCard is not enabled, verify that you're able to use the SD card for device updates.
5. If you set EnableSDCardOverride to allow the use of the SD card for updates and your phone supports an SD
card, but BlockUsingSDCard is enabled, verify that you're not able to use the SD card for device updates.
To verify the update scenario, try adding a new keyboard in the Settings > Keyboard > add keyboards screen
and then select a new keyboard to add. This scenario uses the same path as device updates but is faster and does
not require uploading builds to the update preview server.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Customizations for USB settings
1/18/2019 • 2 minutes to read
Describes the customizations that you can configure when a USB is connected to the mobile device.
In this section
TOPIC DESCRIPTION
Enable the incompatible charger notification Partners can set the device to display a warning when the user
connects the device to an incompatible charging source.
Enable the data connection prompt Partners can set the device to display a dialog that asks for
permission to enable the data connection when the user
connects the device to a host computer via a USB cable.
Hide the weak charger notification option UI Partners can configure the device to hide the dialog that is
displayed when the user connects the device to an
incompatible charging source and hide the USB setting that
notifies the user when the device is connected to a slower
charger.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enable the incompatible charger notification
1/18/2019 • 2 minutes to read
Partners can set the device to display a warning when the user connects the device to an incompatible charging
source. This warning is intended to notify users that their device may take longer to charge or may not charge at all
with the current charging source.
An incompatible charging source is one that does not behave like one of the following port types as defined by the
USB Battery Charging Specification, Revision 1.2, available on the USB.org website:
Charging downstream port
Standard downstream port
Dedicated charging port
This setting is also available to users in the USB settings screen.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<ImageCustomizations xmlns="http://schemas.microsoft.com/embedded/2004/10/ImageUpdate"
Name="USBIncompatibleCharger"
Description="Use to display a dialog notifies the user when the phone is connected
to an incompatible charger."
Owner=""
OwnerType="OEM">
<Static>
<Settings Path="WeakCharger">
<Setting Name="NotifyOnWeakCharger" Value="" />
</Settings>
</Static>
</ImageCustomizations>
VALUE DESCRIPTION
0 or 'Disable' Do not display a dialog that notifies the user when the
device is connected to an incompatible charger. This is
the default value.
1 or 'Enable' Display a dialog that notifies the user when the device
is connected to an incompatible charger.
Testing:
1. Build an image that has this customization enabled, and flash this image to a device.
2. Connect the device to an incompatible charging source.
3. Confirm that the device displays a dialog that states that a weak or unsupported USB charger is connected.
4. Verify that the setting is also available to users in the USB settings screen.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Enable the data connection prompt
1/18/2019 • 2 minutes to read
Partners can set the device to display a dialog that asks for permission to enable the data connection when the user
connects the device to a host computer via a USB cable. Partners may need to enable this customization for certain
markets.
By default, when the user connects the device to a host computer via a USB cable, the USB data connection is
automatically enabled. This means that certain media files on the device, including pictures and music, are
accessible through Windows Explorer on the host computer.
This setting is also available to users in the USB settings screen.
Constraints: None
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="USBData">
<Setting Name="PromptForDataConnection" Value="" />
</Settings>
</Static>
</ImageCustomizations>
VALUE DESCRIPTION
Testing:
1. Build an image that has this customization enabled, and flash this image to a device.
2. Connect the device to a host computer using a USB cable.
3. Confirm that the device displays a dialog that asks for permission to enable the data connection.
4. Verify that the setting also appears in the USB settings screen.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Hide the weak charger notification option UI
1/18/2019 • 2 minutes to read
Partners can configure the device to hide the dialog that is displayed when the user connects the device to an
incompatible charging source and hide the USB setting that notifies the user when the device is connected to a
slower charger.
When this customization is configured, if the device is connected to an incompatible charger, the option to show
the Phone charging slowly dialog is hidden, and the Notify me if my mobile device is charging slowly over
USB toggle is hidden.
By default, the OS shows the weak charger notification option UI.
Constraints: ImageTimeOnly
Instructions:
1. Create a customization answer file using the contents shown in the following code sample.
<Static>
<Settings Path="WeakCharger">
<Setting Name="HideWeakChargerNotifyOptionUI" Value="" />
</Settings>
</Static>
</ImageCustomizations>
VALUE DESCRIPTION
Testing:
1. Build an image that has this customization configured, and flash this image to a device.
2. Connect the device to an incompatible charging source.
3. If the weak charger notification UI is suppressed, verify the following behavior:
Confirm that the device does not display the dialog that states that a weak or unsupported USB
charger is connected.
Verify that the Notify me if my mobile device is charging slowly over USB setting is also
hidden to a user in the USB settings screen.
Related topics
Prepare for Windows mobile development
Customization answer file overview
Registry values for mobile operator IDs
1/18/2019 • 28 minutes to read
CW0-AI Cable & Wireless (West Cable & Wireless (West Anguilla
Indies) Ltd. Anguilla Indies) Anguilla
CW0-AG Cable & Wireless Cable & Wireless Antigua and Barbuda
Caribbean Cellular
(Antigua) Limited
CWF-FK Cable and Wireless Plc Cable and Wireless Falkland Islands (Islas
Malvinas)
CSL-HK Hong Kong CSL Limited CSL Limited Hong Kong SAR
LGU-KR LG U+ LG U+ Korea
LIM-KN Cable & Wireless St Kitts Cable & Wireless St Kitts Saint Kitts and Nevis
& Nevis Limited & Nevis
DIG-LC Digicel (St Lucia) Limited Digicel (St Lucia) Saint Lucia
CW0-VC Cable & Wireless Cable & Wireless Saint Vincent and the
Caribbean Cellular (St. Caribbean Cellular (St. Grenadines
Vincent & the Vincent & the
Grenadines) Ltd Grenadines)
DIG-VC Digicel (St. Vincent and Digicel (St. Vincent and Saint Vincent and the
the Grenadines) Limited Grenadines) Grenadines
SMT-SM San Marino Telecom Spa San Marino Telecom San Marino
CW0-TC Cable & Wireless West Cable & Wireless West Turks and Caicos Islands
Indies Ltd (Turks & Indies (Turks & Caicos)
Caicos)
ETI-AE Emirates Telecom Corp- Emirates Telecom Corp- United Arab Emirates
ETISALAT ETISALAT
SUR-GB Cable & Wireless Jersey Cable & Wireless Jersey United Kingdom
Limited Ltd (Sure)
SXL-US Long Lines Wireless LLC Long Lines Wireless United States
CW0-VG Cable & Wireless (West Cable & Wireless (West British Virgin Islands
Indies) Limited Indies)
Related topics
Prepare for Windows mobile development
Customization answer file overview
Registry values for carrier-unlocked phones
1/18/2019 • 4 minutes to read
000-33 Europe
000-44 Africa
000-66 Asia
MOBILE OPERATOR ID REGION
000-77 Oceania
000-88 Worldwide
The following table shows more specific mobile operator ID values for carrier-unlocked phones that will be sold in
only one country/region. If multiple codes apply, use the regional IDs listed in the preceding table instead.
However, if the specific value is used, updates can be targeted more carefully if needed.
000-AD Andorra
000-AF Afghanistan
000-AI Anguilla
000-AL Albania
000-AM Armenia
000-AO Angola
000-AQ Antarctica
000-AR Argentina
000-AT Austria
000-AU Australia
MOBILE OPERATOR ID COUNTRY/REGION
000-AW Aruba
000-AZ Azerbaijan
000-BB Barbados
000-BD Bangladesh
000-BE Belgium
000-BG Bulgaria
000-BH Bahrain
000-BI Burundi
000-BJ Benin
000-BM Bermuda
000-BN Brunei
000-BO Bolivia
000-BQ Bonaire
000-BR Brazil
000-BT Bhutan
000-BW Botswana
000-BY Belarus
000-BZ Belize
000-CA Canada
000-CG Congo
000-CH Switzerland
000-CL Chile
000-CM Cameroon
000-CN China
000-CO Colombia
000-CW Curaçao
000-CY Cyprus
000-DE Germany
000-DJ Djibouti
000-DK Denmark
000-DM Dominica
000-DZ Algeria
000-EC Ecuador
000-EE Estonia
000-EG Egypt
000-ER Eritrea
000-ES Spain
000-ET Ethiopia
000-FI Finland
000-FJ Fiji
000-FM Micronesia
000-FR France
000-GA Gabon
000-GD Grenada
000-GE Georgia
000-GG Guernsey
000-GH Ghana
000-GI Gibraltar
000-GL Greenland
000-GN Guinea
000-GP Guadeloupe
000-GR Greece
000-GT Guatemala
MOBILE OPERATOR ID COUNTRY/REGION
000-GU Guam
000-GW Guinea-Bissau
000-GY Guyana
000-HN Honduras
000-HR Croatia
000-HT Haiti
000-HU Hungary
000-ID Indonesia
000-IE Ireland
000-IL Israel
000-IN India
000-IQ Iraq
000-IS Iceland
000-IT Italy
000-JE Jersey
MOBILE OPERATOR ID COUNTRY/REGION
000-JM Jamaica
000-JO Jordan
000-JP Japan
000-KE Kenya
000-KG Kyrgyzstan
000-KH Cambodia
000-KI Kiribati
000-KM Comoros
000-KR Korea
000-KW Kuwait
000-KZ Kazakhstan
000-LA Laos
000-LB Lebanon
000-LI Liechtenstein
000-LR Liberia
MOBILE OPERATOR ID COUNTRY/REGION
000-LS Lesotho
000-LT Lithuania
000-LU Luxembourg
000-LV Latvia
000-LY Libya
000-MA Morocco
000-MC Monaco
000-MD Moldova
000-ME Montenegro
000-MG Madagascar
000-ML Mali
000-MM Myanmar
000-MN Mongolia
000-MQ Martinique
MOBILE OPERATOR ID COUNTRY/REGION
000-MR Mauritania
000-MS Montserrat
000-MT Malta
000-MU Mauritius
000-MV Maldives
000-MW Malawi
000-MX Mexico
000-MY Malaysia
000-MZ Mozambique
000-NA Namibia
000-NE Niger
000-NG Nigeria
000-NI Nicaragua
000-NL Netherlands
000-NO Norway
000-NP Nepal
000-NR Nauru
MOBILE OPERATOR ID COUNTRY/REGION
000-NU Niue
000-OM Oman
000-PA Panama
000-PE Peru
000-PH Philippines
000-PK Pakistan
000-PL Poland
000-PT Portugal
000-PW Palau
000-PY Paraguay
000-QA Qatar
000-RE Reunion
MOBILE OPERATOR ID COUNTRY/REGION
000-RO Romania
000-RS Serbia
000-RU Russia
000-RW Rwanda
000-SC Seychelles
000-SE Sweden
000-SG Singapore
000-SI Slovenia
000-SJ Svalbard
000-SK Slovakia
000-SN Senegal
000-SO Somalia
000-SR Suriname
000-SV El Salvador
000-SZ Swaziland
000-TD Chad
000-TG Togo
000-TH Thailand
000-TJ Tajikistan
000-TK Tokelau
000-TL Timor-Leste
000-TM Turkmenistan
000-TN Tunisia
000-TO Tonga
000-TR Turkey
000-TV Tuvalu
000-TW Taiwan
MOBILE OPERATOR ID COUNTRY/REGION
000-TZ Tanzania
000-UA Ukraine
000-UG Uganda
000-UY Uruguay
000-UZ Uzbekistan
000-VE Venezuela
000-VN Vietnam
000-VU Vanuatu
000-WS Samoa
000-XS Saba
MOBILE OPERATOR ID COUNTRY/REGION
000-YE Yemen
000-YT Mayotte
000-ZM Zambia
000-ZW Zimbabwe
Related topics
Prepare for Windows mobile development
Customization answer file overview
Configure power settings
1/24/2019 • 2 minutes to read
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
TOPIC DESCRIPTION
TOPIC DESCRIPTION
Power controls Settings in this subgroup include settings that control the
system's power and behavior.
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.
PCI Express settings Settings in this subgroup control the power management
of PCI Express links.
Sleep settings Settings in this subgroup control sleep, resume, and other
related functionality.
Other power settings Settings in this subgroup do not belong to any other
subgroup.
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 relies on an OEM - or user-configured doze to hibernate timer.
The most common timer value is 4 hours. A fixed doze to hibernate timer may offer a consistent and predictable
user experience, however it doesn’t address rapid drain of battery.
The timer-based logic has some significant user experience drawbacks. A fixed doze timer can result in the system
fully draining the battery in standby if it happened within the doze timeout or cut short a Modern Standby
experience by hibernating at doze timeout. The timer is generally not the best option when it comes to addressing
the worst case battery drain and the system needs to be adaptive and hibernate based on battery drain and user
needs.
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 (MS ) experience by ensuring that the system remains in MS 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.
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>
User prediction
User usage prediction no longer triggers Hibernate. This is a change from previous versions of Windows.
Windows continues to support automatically transitioning from Hibernate back to Modern Standby based on user
prediction, however this requires that the device implement RTCWake or the Time & Device Alarm object in ACPI.
StandbyBudgetPercent
1/18/2019 • 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
1/18/2019 • 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
1/18/2019 • 2 minutes to read
Settings in this subgroup include settings that control the system's power and behavior.
In this section
TOPIC DESCRIPTION
IgnoreCsComplianceCheck New in Windows 10, version 1803. Use to disable the default
OS requirement of having non-rotational media in a Modern
Standby system.
LidNotificationsAreReliable Use to notify the OS whether the platform guarantees that lid
notifications are sent whenever the lid is opened or closed.
EnableInputSuppression
1/24/2019 • 2 minutes to read
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.
Values
VALUE DESCRIPTION
Applies to
Available in Windows 10, version 1803 and later versions of Windows.
IgnoreCsComplianceCheck
1/18/2019 • 2 minutes to read
Use to disable the default OS requirement of having non-rotational media in a Modern Standby system.
Values
VALUE DESCRIPTION
Remarks
Enabling Modern Standby on a system with rotational storage media is not recommended, as this may result in
increased power consumption due to the tradeoff between power cycling and hard drive reliability. It may also
result in higher exit latency upon resume from Modern Standby (compared to the latency with SSDs). Please refer
to the Modern Standby rotational storage guidelines for more information.
Applies to
Available in Windows 10, version 1803 and later versions of Windows.
LidNotificationsAreReliable
1/18/2019 • 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
VALUE DESCRIPTION
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
1/18/2019 • 2 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.
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.
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.
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. Efficiency class is defined in ACPI 6.0 section 5.2.12.14 GICC Structure. For more
information, consult the ACPI specification.
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
Static configuration options for core parking
1/18/2019 • 2 minutes to read
You can use the static configuration options documented in this section to tune the behavior of the core parking
engine.
In this section
TOPIC DESCRIPTION
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
PowerCfg: CPCONCURRENCY
Values
The value denotes percentage (%).
Minimum value 0
Applies to
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
You can use the static configuration options documented in this section to tune the behavior of the performance
state selection algorithms.
In this section
TOPIC DESCRIPTION
Hidden setting: No
Values
The value denotes percentage (%).
Minimum value 0
Applies to
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
Hidden setting: No
Values
The value denotes percentage (%).
Minimum value 0
Applies to
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
INDEX NAME DESCRIPTION
Applies to
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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.
PowerCfg: PERFEPP
Values
The value denotes percentage (%).
Minimum value 0
Applies to
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
DutyCycling enables or disables the duty cycling capability on systems that support processor duty cycling.
PowerCfg: PERFDUTYCYCLING
Values
INDEX NAME DESCRIPTION
Applies to
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
TOPIC DESCRIPTION
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
Settings in this subgroup control the customization of battery actions and thresholds.
In this section
TOPIC DESCRIPTION
Critical battery action Specifies the action to take when the critical batter level is
reached.
Critical battery threshold Specifies a percentage of capacity when the critical battery
action is taken.
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
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Critical battery threshold
1/18/2019 • 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
1/18/2019 • 2 minutes to read
Specifies the action to take when the low batter level is reached.
Values
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Low battery threshold
1/18/2019 • 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
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Reserve battery level
1/18/2019 • 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
1/18/2019 • 2 minutes to read
In this section
TOPIC DESCRIPTION
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
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows 10, version 1607 and later versions of Windows.
Related topics
LidNotificationsAreReliable
Lid switch close action
1/18/2019 • 2 minutes to read
PowerCfg: LIDACTION
GUID: 5ca83367-6e45-459f-a27b-476b1d01c936
Hidden setting: Yes
Values
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Power button action
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Power button forced shutdown
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows 7 and later versions of Windows.
Sleep button action
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Display settings
1/18/2019 • 2 minutes to read
In this section
TOPIC DESCRIPTION
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.
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
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Allow display required policy
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows 7 and later versions of Windows.
Dim annoyance timeout
1/18/2019 • 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
1/18/2019 • 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
1/18/2019 • 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
1/18/2019 • 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
1/18/2019 • 2 minutes to read
In this section
TOPIC DESCRIPTION
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
1/18/2019 • 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
1/18/2019 • 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
1/18/2019 • 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
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows 7 and later versions of Windows.
Energy Saver settings
1/18/2019 • 2 minutes to read
Settings in this subgroup control the battery threshold and brightness when Energy Saver is turned on.
In this section
TOPIC DESCRIPTION
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
1/18/2019 • 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
1/18/2019 • 2 minutes to read
Settings in this subgroup control the power management of PCI Express links.
In this section
TOPIC DESCRIPTION
Link state power management Specifies the personality of the power plan.
Link state power management
1/18/2019 • 2 minutes to read
PowerCfg: ASPM
GUID: ee12f906-d277-404b-b6da-e5fa1a576df5
Hidden setting: Yes
Values
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Sleep settings
1/18/2019 • 2 minutes to read
Settings in this subgroup control sleep, resume, and other related functionality.
In this section
TOPIC DESCRIPTION
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.
TOPIC DESCRIPTION
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
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Allow sleep with open remote files
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Allow sleep states
1/18/2019 • 2 minutes to read
PowerCfg: ALLOWSTANDBY
GUID: abfc2519-3608-4c2a-94ea-171b0ed546ab
Hidden setting: Yes
Values
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Allow system required requests
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows 7 and later versions of Windows.
Automatically wake for tasks
1/18/2019 • 2 minutes to read
PowerCfg: RTCWAKE
GUID: bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d
Hidden setting: Yes
Values
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Hibernate idle timeout
1/18/2019 • 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
1/18/2019 • 2 minutes to read
PowerCfg: HYBRIDSLEEP
GUID: 94ac6d29-73ce-41a6-809f-6363ba21b47e
Hidden setting: Yes
Values
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Sleep idle timeout
1/18/2019 • 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
1/18/2019 • 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
1/18/2019 • 2 minutes to read
In this section
TOPIC DESCRIPTION
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
1/18/2019 • 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
INDEX NAME DESCRIPTION
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
1/18/2019 • 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
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Allow networking during standby
1/18/2019 • 2 minutes to read
GUID: f15576e8-98b7-4186-b944-eafa664402d9
Hidden setting: Yes
Values
INDEX NAME DESCRIPTION
Applies to
Available in Windows Vista and later versions of Windows.
Legacy configuration options
1/18/2019 • 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.
PERFBOOSTMODE determines how processors select a performance level when current operating conditions allow for
boosting performance above the nominal level.
Values
INDEX NAME
0 Disabled
1 Enabled
2 Aggressive
3 Efficient enabled
4 Efficient aggressive
Applies to
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
Values
The value denotes percentage (%).
Minimum value 0
Applies to
WINDOWS EDITION X86-BASED DEVICES X64-BASED DEVICES ARM-BASED DEVICES
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. You can also promote exclusive apps in 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
By forming relationships with developers, you can work together to publish exclusive apps onto your devices. You
have the flexibility based on the contracts you establish with developers to ensure that these apps are available
exclusively on your Windows 10-based devices (as identified by OEM Store ID ) and don't appear in the general
catalog on any other devices.
In this section
TOPIC DESCRIPTION
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.
Preinstallable apps for mobile devices Learn how to add an app to a mobile 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.
TOPIC DESCRIPTION
Exclusive apps Learn how to set the OEM Store ID and SCM ID in the
registry to enable exclusive apps for your devices.
Audience
Preinstalled and exclusive app guidance is designed for use by OEM and MO developers.
Exclusive apps
1/24/2019 • 4 minutes to read
By forming relationships with developers, you can work together to publish exclusive apps onto your devices. You
have the flexibility based on the contracts you establish with developers to ensure that these apps are available
exclusively on your Windows 10-based devices (as identified by OEM Store ID ) and don't appear in the general
catalog on any other devices.
Your exclusive apps must be submitted to the Microsoft Store by a developer that you are in an exclusive
relationship with, as defined in the Microsoft Store OEM Program enrollment form. You may also set up your own
exclusive developer account where apps published from that account are automatically designated as exclusive.
NOTE
Exclusive app accounts are only available to OEM developer accounts unless you have been granted an exception.
NOTE
If you do not currently have an SCM or chose not to differentiate your OEM Store by using a SCM, contact the Microsoft
Store Partner Operations Team for instructions on setting up an OEM Store using only an OEM Store ID. If you have an SCM
ID that was created for your Windows 8.1 devices, you can still use that SCM ID for your Windows 10-based device. If you
do so, you will still need to obtain your OEM Store ID from the Microsoft Store Partner Operations Team and insert that into
your Windows 10 image.
NOTE
The HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Store\Configuration key should not be
used by OEMs. It is where the Store application writes the values it discovers so that the OS components are using the same
settings cross applications.
If you are using Windows Configuration Designer to create an image, you can add a Windows setting:
WindowsStore\ContentModifier
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.
NOTE
provxml files for preinstalled apps must follow a prescribed naming convention. You must use MPAP_name_index.provxml,
where name and index can be any strings. Typically, name is the name of the update package that contains the preinstalled
app, and index is a string that differentiates provxml files that have the same name. Often, index is represented as a number,
such as 01.
provxml flags
These are the flags you can use in your provxml.
FLAG DESCRIPTION
FullyPreinstall This flag controls whether the app is MDIL bound during first
boot/update or whether it is delayed until after those
operations complete. Delaying MDIL binding, which is the
default behavior for apps that are not pre-pinned to Start,
allows the user to get back to their phone as quickly as
possible. When binding is deferred till after first boot/update
completes the app icon will display greyed out with a status of
“installing” and cannot be run until the deferred bind
completes. The amount of time it takes to complete all
deferred bindings is dependent on the number of deferred
preloaded apps and the user’s activity. The flag behavior is as
follows:
true: MDIL binding occurs before first boot or update
completes.
false: If the app is pre-pinned to Start, MDIL binding is
performed before first boot or update completes. If the
app is not pre-pinned to Start, MDIL binding is
deferred until after first boot or update completes.
Generally, this value should be left as the default (FALSE)
unless the app must be available to run immediately after first
boot or an OS update. Some example situations where this
flag should be set to TRUE are the following:
OEM extension apps
Phone dialer-installed apps
OEM service agents
Critical system settings apps
<Applications>
<Application
License="$(CAFE_OUTPUT_DIR)\content\App_MobileTV_7e7cc86e_e1c0_476a_ac88_db3c9ffffabb\MobileTV_License.xml"
ProvXML="$(CAFE_OUTPUT_DIR)\content\App_MobileTV_7e7cc86e_e1c0_476a_ac88_db3c9ffffabb\MPAP_MobileTV_01.provxml
" Source="$(CAFE_OUTPUT_DIR)\content\App_MobileTV_7e7cc86e_e1c0_476a_ac88_db3c9ffffabb\MobileTV.xap"/>
<Application
License="$(CAFE_OUTPUT_DIR)\content\App_AudioSettings_373cb76e_7f6c_45aa_8633_b00e85c73261\audio_License.xml"
ProvXML="$(CAFE_OUTPUT_DIR)\content\App_AudioSettings_373cb76e_7f6c_45aa_8633_b00e85c73261\MPAP_audio_01.provx
ml" Source="$(CAFE_OUTPUT_DIR)\content\App_AudioSettings_373cb76e_7f6c_45aa_8633_b00e85c73261\audio.appx"/>
<Application
License="$(CAFE_OUTPUT_DIR)\content\App_MicrosoftHealthApp_0168b504_ca18_46b8_b60a_0f6fdc271c81\MicrosoftHealt
hApp_License.xml"
ProvXML="$(CAFE_OUTPUT_DIR)\content\App_MicrosoftHealthApp_0168b504_ca18_46b8_b60a_0f6fdc271c81\MPAP_Microsoft
HealthApp_01.provxml"
Source="$(CAFE_OUTPUT_DIR)\content\App_MicrosoftHealthApp_0168b504_ca18_46b8_b60a_0f6fdc271c81\MicrosoftHealth
App.appxbundle"/>
</Applications>
NOTE
The provxml file must be placed in the "$(runtime.commonfiles)\Provisioning\OEM" directory. The license file and app
package (.xap or .appx) must be placed in the "$(runtime.commonfiles)\xaps" directory
After you've configured your customizations.xml answer file, build the image using the Windows Configuration
Designer command-line interface. See Windows Configuration Designer command-line interface for instructions.
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>
TASK DESCRIPTION
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.
CONVERGENCE Windows 8.1 and Windows 8.1 Phone code convergence. Also,
enable unified .appx manifest schema.
Change history for customization docs
1/18/2019 • 4 minutes to read
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.
TOPIC DESCRIPTION
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, two new
settings have been added to Power controls:
IgnoreCsComplianceCheck, and 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
TOPIC DESCRIPTION
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
TOPIC DESCRIPTION
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
TOPIC DESCRIPTION
Customize OOBE Updated with recommendation for setting the default volume
level during OOBE.
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.
TOPIC DESCRIPTION
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.
TOPIC DESCRIPTION
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
NEW OR UPDATED TOPIC DESCRIPTION
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.