windows-itpro-docs/windows/deploy/provisioning-how-it-works.md
jdeckerMS 5b91586ba7 Squashed commit of the following:
commit 9f95be92f864acf6a9cef8121e9d7c5b02f18da6
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 13:28:40 2017 -0800

    fix table

commit eaaf7927d163b4fb3eb89f2e9e3b2de367be8ea0
Merge: c53bbe2 cf11083
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 13:19:19 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit c53bbe240c88573cacdbfd424b2549ff895b2263
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 09:06:46 2017 -0800

    sync

commit 2db82b374821d5e57224f3492c4fdcf68a8d7c36
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 08:57:23 2017 -0800

    sync

commit a3fd8ad3d9d909e98332252e702e31496bb53cf0
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 08:49:41 2017 -0800

    sync

commit de0b46958e5783d0edb31c916f45f45118f9cd2f
Merge: c80779f deb778a
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 08:49:00 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit c80779f75b34ccd0c6772b695332f667d90aa760
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 08:48:10 2017 -0800

    fix code block

commit 24a001bff7cf3c0451195a094f063a80f61450e0
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 08:44:48 2017 -0800

    fix link

commit 574411a38d113a974a5c406746a06f629cdb50c0
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 08:38:57 2017 -0800

    fix links, format

commit 5e106b72f679243b0c601146277b66f9045c26f9
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 08:25:17 2017 -0800

    fix format

commit 6c693cee1a305955fcb3b711f393ed695e51e96f
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 08:11:09 2017 -0800

    tweak apply

commit 501e1100d08b21a107a6d55f335edad08620250d
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 07:44:01 2017 -0800

    moved apply procs, learn more links

commit 17c18a8970ccff5f11239031188a9f7a4f59f8f7
Merge: 3c80075 37bf478
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 18 07:38:50 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 3c80075ab12e4ced0134c3ad02f7de7e0ec0c24d
Merge: 4b77100 a4496a2
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 15:37:33 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 4b771007b71692959676a4290492af0ea7375c2d
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 15:35:26 2017 -0800

    missing intro

commit 7c5406e213c5a84497352fb76ef491d53a1ecf74
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 15:30:05 2017 -0800

    add related links

commit deacc390e081365fc4be0509fc4a4b016fbe3734
Merge: d62ca20 a3fba4c
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 14:29:29 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit d62ca20830be9ce1afae4deba12c6688c591554c
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 14:27:56 2017 -0800

    escaped < >

commit dd2e558fd6e9cb38ecba49cb0d2d4ea08d5a53ae
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 14:14:01 2017 -0800

    multivariant

commit 668cdc313f47565f1275261496db748975d2b5b1
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 13:23:41 2017 -0800

    update change deploy

commit 1b5070b0f8bdbbe2e8d53c84173d0f0818bc1b30
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 13:21:51 2017 -0800

    resolve conflict change history manage

commit 8e342df4125216b4fa802204cb26441b1ecf63df
Merge: 031f50b 9793669
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 13:20:28 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 031f50b5ee684a048c34e6cf297149343585ec69
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 13:17:33 2017 -0800

    tweak

commit 54e2eb787d78c3a680e4c54e63b99e06a293fc39
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 11:15:51 2017 -0800

    tweak table

commit 4dc33fb1898f168b1bf59a127f7317e1df5ab4ef
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 11:02:33 2017 -0800

    cli

commit 755758d424f92bb0e8f42281310d9855aaaba4d6
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 10:56:38 2017 -0800

    new topics

commit 0711e5571a34788a5402c3e35a522341f1bf68b5
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 10:08:03 2017 -0800

    update how it works

commit 210680ebf086e973ab06b9d7cf35768efa3fd6c4
Merge: eeec810 a171f82
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 09:17:08 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit eeec8100536b249aec154852d0879a81e9d07dda
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 17 09:16:38 2017 -0800

    reorder how it works

commit ed862463fc83d9f46ed8081cc3166d3bf123aa21
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 14:26:43 2017 -0800

    sync

commit 8abd729805cb0719104a118529f037effa197457
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 13:44:26 2017 -0800

    moved sections between topics

commit fad95aa31de0a9e621338751671c499779fb362e
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 13:21:36 2017 -0800

    sync

commit efb848b257da63dd7b84e2e8edb12139f54e3dc1
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 12:53:53 2017 -0800

    reorg apply

commit 1a98b619c49c4cda9ab673247ba80771c9519251
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 12:42:00 2017 -0800

    finish create

commit 0ec9ade931ab3b74fddf0bbc25cd1d986ad382ed
Merge: f169e92 44e62eb
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 12:41:30 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit f169e92adea1d42a21c0844a6f109d5e632cdc08
Merge: 0f182c8 110241e
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 12:06:04 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 0f182c8e9af068d65b29851b8569c5518707d773
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 11:25:52 2017 -0800

    switch

commit 351ab3a2b1d81481a4b760c65fbd33d36e7c9089
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 09:55:25 2017 -0800

    updates to install

commit 5b01085b0b961512fa891a171330967c9f4f7657
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 09:36:06 2017 -0800

    sync

commit 837f0a902fa66cc07f83b93b3f66cbc160d09fc6
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Fri Jan 13 08:58:22 2017 -0800

    sync

commit 2d8a29cb97b3f16dd0bb2d664ad9cdd11123b5ae
Merge: ad8151c c564f3e
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Thu Jan 12 12:51:13 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit ad8151c775a18bcec03d41631c6c43d1b2fabb28
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Thu Jan 12 12:50:30 2017 -0800

    sync

commit 514161581723808a2ed5c29b24a3dcfd28901b78
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Thu Jan 12 12:03:30 2017 -0800

    remove graphic

commit 8d4ab1471d1f8d2c5d3a28cab73e860dd0e25e7c
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Thu Jan 12 11:58:23 2017 -0800

    sync

commit 3147720b7edc492b93aa8def7ca94bec4f54b74b
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Thu Jan 12 11:45:07 2017 -0800

    fix format

commit 67fa6473648c45b4b9ff31d506bd9485b67a9760
Merge: 9995503 24803cd
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Thu Jan 12 11:43:21 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 9995503434d09fcbae73510ee0aec6123bc1a6f8
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Thu Jan 12 10:36:33 2017 -0800

    add links

commit 3e725b83f60c2ce06e043f704d4dbb86e7064ec8
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Thu Jan 12 10:34:16 2017 -0800

    sync

commit d40be4b40ecff550e9ccf0f022609e81142fc923
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Thu Jan 12 09:02:52 2017 -0800

    add topic

commit 010b2f64320a02857b189493e7e71934f8030c11
Merge: 639e54e 7519b87
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Thu Jan 12 08:26:45 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 639e54e4525c4cc0b79b770e8e81b07574e032cc
Merge: 79a7ee0 97b8484
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 11 14:33:39 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 79a7ee0597a4198a5be098cafe960c23b5f2f88b
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 11 14:33:08 2017 -0800

    sync

commit ca313243bfc7cd9ac81c623eeafbe60fc2e6ce1d
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 11 13:17:04 2017 -0800

    add art

commit 938e50ca5db8304e7e44d040fd9e6c25ef3d402f
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 11 12:40:47 2017 -0800

    mobile

commit 0552360320664f8f61a73eed5212a8f476d27f2f
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 11 11:38:56 2017 -0800

    complete desktop

commit b3cea45101b03d0a8ba79b916a3b8c2de0ad09b1
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 11 11:10:09 2017 -0800

    format check

commit 2271bd9206316c752d0634c3df93ff23c6a80abd
Merge: 6a3478d 8ef9050
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 11 10:44:20 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 6a3478d8ab1f113150de7dd5df89118c4915b947
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 11 10:43:42 2017 -0800

    sync changes

commit 12964dabbbea4f1084d0396c956a23784a900f48
Merge: affb590 ec7b776
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Wed Jan 11 08:17:43 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit affb590262719ce7500292070c218d4b4f518c62
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 10 14:22:43 2017 -0800

    related topics

commit 0fb18bddbc1ec4c83f72b6d38159ed1d552d709f
Merge: 58555e2 2cad77f
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 10 14:12:50 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 58555e2dac6e8ca95b9110436b4c601b6727e7d0
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 10 12:00:52 2017 -0800

    sync

commit 4d107c68d6bbc27bc75ec714b844650a5eb1f678
Merge: 5d52165 60611e5
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Tue Jan 10 08:59:51 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 5d521654f1ae9233d7857fbde2ac0afb95f93f1e
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Mon Jan 9 14:06:10 2017 -0800

    sync

commit f21d6c41af1ef019cfe757b181fb757adee90ac3
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Mon Jan 9 13:01:41 2017 -0800

    metadata and uninstall content

commit 81f8976b6e3a2306220948800541a413d866041b
Merge: 9654e2b f81dbd0
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Mon Jan 9 12:26:40 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 9654e2b3886249d4a6235b209c20bca4596fbf18
Merge: 47d6aa6 310c015
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Mon Jan 9 11:04:24 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit 47d6aa6ec8ebaaffa529066320c84635dd5a991e
Merge: a9bc13c f33df1b
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Mon Jan 9 09:59:28 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov

commit a9bc13c733bb231306bc75512fae0c5882fd713e
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Mon Jan 9 09:58:57 2017 -0800

    add topics

commit 8797ae2c0a04bb776811701c2d0672ab457b2bba
Merge: c053cb6 88cf4ee
Author: jdeckerMS <jdecker@microsoft.com>
Date:   Mon Jan 9 09:47:39 2017 -0800

    Merge remote-tracking branch 'refs/remotes/origin/master' into jdprov
2017-01-18 13:34:06 -08:00

17 KiB
Raw Blame History

title, description, ms.prod, ms.mktglfcycl, ms.sitesec, author, localizationpriority
title description ms.prod ms.mktglfcycl ms.sitesec author localizationpriority
How provisioning works in Windows 10 (Windows 10) A provisioning package (.ppkg) is a container for a collection of configuration settings. w10 deploy library jdeckerMS high

How provisioning works in Windows 10

Applies to

  • Windows 10
  • Windows 10 Mobile

Provisioning packages in Windows 10 provide IT administrators with a simplified way to apply configuration settings to Windows 10 devices. Windows Imaging and Configuration Designer (Windows ICD) is a tool that makes it easy to create a provisioning package. Windows ICD is contained in the Windows Assessment and Deployment Kit (ADK).

Provisioning packages

A provisioning package contains specific configurations/settings and assets that can be provided through a removable media or simply downloaded to the device.

To enable adding multiple sets of settings or configurations, the configuration data used by the provisioning engine is built out of multiple configuration sources that consist of separate provisioning packages. Each provisioning package contains the provisioning data from a different source.

A provisioning package (.ppkg) is a container for a collection of configuration settings. The package has the following format:

  • Package metadata The metadata contains basic information about the package such as package name, description, version, ranking, and so on.

  • XML descriptors Each descriptor defines a customization asset or configuration setting included in the package.

  • Asset payloads The payloads of a customization asset or a configuration setting associated with an app or data asset.

You can use provisioning packages for runtime device provisioning by accessing the package on a removable media attached to the device, through near field communication (NFC), or by downloading from a remote source location.

Precedence for provisioning packages

When multiple provisioning packages are available for device provisioning, the combination of package owner type and package rank level defined in the package manifest is used to resolve setting conflicts. The pre-defined package owner types are listed below in the order of lowest to highest owner type precedence:

  1. Microsoft

  2. Silicon Vender

  3. OEM

  4. System Integrator

  5. Mobile Operator

  6. IT Admin

The valid value range of package rank level is 0 to 99.

When setting conflicts are encountered, the final values provisioned on the device are determined by the owner type precedence and the rank level of the packages containing the settings. For example, the value of a setting in a package with owner System Integrator and rank level 3 takes precedence over the same setting in a package with owner OEM and rank level 4. This is because the System Integrator owner type has the higher precedence over the OEM owner type. For packages with the same owner type, the package rank level determines the package from which the setting values get provisioned on the device.

Windows provisioning XML

Windows provisioning XML is the framework that allows Microsoft and OEM components to declare end-user configurable settings and the on-device infrastructure for applying the settings with minimal work by the component owner.

Settings for each component can be declared within that component's package manifest file. These declarations are turned into settings schema that are used by Windows ICD to expose the potential settings to users to create customizations in the image or in provisioning packages. Windows ICD translates the user configuration, which is declared through Windows provisioning answer file(s), into the on-device provisioning format.

When the provisioning engine selects a configuration, the Windows provisioning XML is contained within the selected provisioning data and is passed through the configuration manager and then to the Windows provisioning CSP. The Windows provisioning CSP then takes and applies the provisioning to the proper location for the actual component to use.

Provisioning engine

The provisioning engine is the core component for managing provisioning and configuration at runtime in a device running Windows 10.

The provisioning engine provides the following functionality:

  • Provisioning configuration at any time when the device is running including first boot and setup or OOBE. It is also extensible to other points during the run-time of the device.
  • Reading and combining settings from multiple sources of configuration that may be added to an image by Microsoft, the OEM, or system integrator, or added by IT/education administrators or users to the device at run-time. Configuration sources may be built into the image or from provisioning packages added to the device.
  • Responding to triggers or events and initiating a provisioning stage.
  • Authenticating the provisioning packages.
  • Selecting a set of configuration based on the stage and a set of keys—such as the SIM, MCC/MNC, IMSI range, and so on—that map to a specific configuration then passing this configuration to the configuration management infrastructure to be applied.
  • Working with OOBE and the control panel UI to allow user selection of configuration when a specific match cannot be determined.

Configuration manager

The configuration manager provides the unified way of managing Windows 10 devices. Configuration is mainly done through the Open Mobile Alliance (OMA) Device Management (DM) and Client Provisioning (CP) protocols. The configuration manager handles and parses these protocol requests from different channels and passes them down to Configuration Service Providers (CSPs) to perform the specific management requests and settings.

The provisioning engine relies on configuration manager for all of the actual processing and application of a chosen configuration. The provisioning engine determines the stage of provisioning and, based on a set of keys, determines the set of configuration to send to the configuration manager. The configuration manager in turn parses and calls into the CSPs for the setting to be applied.

Underneath the configuration manager are the CSPs. Each section of configuration translates to a particular CSP to handle interpreting into an action on the device. Each CSP translates the instructions in the configuration and calls into the appropriate APIs and components to perform the requested provisioning actions.

Policy and resource manager

The policy, resource, and context manager components manage the enrollment and unenrollment of devices into enterprise environments. The enrollment process into an enterprise is essentially the provisioning of configuration and device management policies that the enterprise wants to enforce on the device. This is usually done through the explicit signing up of the device to an enterprise's device management server over a network connection. This provides the user with the ability to access the enterprise's resources through the device and the enterprise with a means to manage and control access and manage and control the device itself.

The key differences between enterprise enrollment and the configuration performed by the provisioning engine are:

  • Enrollment enforces a limited and controlled set of policies on the device that the user may not have full control over. The provisioning engine exposes a larger set of settings that configure more aspects of the device and are generally user adjustable.
  • The policy manager manages policy settings from multiple entities and performs a selection of the setting based on priority of the entities. The provisioning engine applies the settings and does not offer a means of prioritizing settings from different sources. The more specific provisioning is the last one applied and the one that is used.
  • Individual policy settings applied from different enrollment entities are stored so they can be removed later during unenrollment. This enables the user to remove enterprise policy and return the device to a state without the enterprise restrictions and any sensitive data. The provisioning engine does not maintain individual provisioning settings or a means to roll back all applied settings.

In Windows 10, the application of policy and enrollment through provisioning is required to support cases where an enterprise or educational institution does not have a DM server for full device management. The provisioning engine supports provisioning enrollment and policy through its configuration and integrates with the existing policy and resource manager components directly or through the configuration manager.

Triggers and stages

Triggers are events during the lifetime of the system that start a provisioning stage. Some examples of triggers are: boot, OOBE, SIM change, user added, administrator added, user login, device update, and various manual triggers (such as deployment over USB or launched from an email attachment or USB flash drive).

When a trigger occurs, provisioning is initiated for a particular provisioning stage. The stages are grouped into sets based on the scope of the settings:

  • Static: First stage run for provisioning to apply configuration settings to the system to set up OOBE or apply device-wide settings that cannot be done when the image is being created.
  • System: Run during OOBE and configure system-wide settings.
  • UICC: UICC stages run for each new UICC in a device to handle configuration and branding based on the identity of the UICC or SIM card. This enables the runtime configuration scenarios where an OEM can maintain one image that can be configured for multiple operators.
  • Update: Runs after an update to apply potential updated settings changes.
  • User: runs during a user account first run to configure per-user settings.

Device provisioning during OOBE

The provisioning engine always applies provisioning packages persisted in the C:\Recovery\Customizations folder on the OS partition. When the provisioning engine applies provisioning packages in the %ProgramData%\Microsoft\Provisioning folder, certain runtime setting applications, such as the setting to install and configure Windows apps, may be extended past the OOBE pass and continually be processed in the background when the device gets to the desktop. Settings for configuring policies and certain crucial system configurations are always be completed before the first point at which they must take effect.

Device users can apply a provisioning package from a remote source when the device first boots to OOBE. The device provisioning during OOBE is only triggered after the language, locale, time zone, and other settings on the first OOBE UI page are configured. On all Windows devices, device provisioning during OOBE can be triggered by 5 fast taps on the Windows hardware key. When device provisioning is triggered, the provisioning UI is displayed in the OOBE page. The provisioning UI allows users to select a provisioning package acquired from a remote source, such as through NFC or a removable media.

The following table shows how device provisioning can be initiated when a user first boots to OOBE.

Package delivery Initiation method Supported device
Removable media - USB drive or SD card
(Packages must be placed at media root)
5 fast taps on the Windows key to launch the provisioning UI All Windows devices
From an administrator device through machine to machine NFC or NFC tag
(The administrator device must run an app that can transfer the package over NFC)
5 fast taps on the Windows key to launch the provisioning UI Windows 10 Mobile devices and IoT Core devices

The provisioning engine always copies the acquired provisioning packages to the %ProgramData%\Microsoft\Provisioning folder before processing them during OOBE. The provisioning engine always applies provisioning packages embedded in the installed Windows image during Windows Setup OOBE pass regardless of whether the package is signed and trusted. When the provisioning engine applies an encrypted provisioning package on an end-user device during OOBE, users must first provide a valid password to decrypt the package. The provisioning engine also checks whether a provisioning package is signed and trusted; if it's not, the user must provide consent before the package is applied to the device.

When the provisioning engine applies provisioning packages during OOBE, it applies only the runtime settings from the package to the device. Runtime settings can be system-wide configuration settings, including security policy, Windows app install/uninstall, network configuration, bootstrapping MDM enrollment, provisioning of file assets, account and domain configuration, Windows edition upgrade, and more. The provisioning engine also checks for the configuration settings on the device, such as region/locale or SIM card, and applies the multivariant settings with matching condition(s).

Device provisioning at runtime

At device runtime, standalone provisioning packages can be applied by user initiation. Only runtime configuration settings including multivariant settings contained in a provisioning package can be applied at device runtime.

The following table shows when provisioning at device runtime can be initiated.

Package delivery Initiation method Supported device
Removable media - USB drive or SD card
(Packages must be placed at media root)
Settings > Accounts > Access work or school > Add or remove a provisioning package All Windows devices
Downloaded from a network connection and copied to a local folder Double-click the package file Windows 10 for desktop editions devices
From an administrator device connected to the target device through USB tethering Drag and drop the package file onto the target device Windows 10 Mobile devices and IoT Core devices

When applying provisioning packages from a removable media attached to the device, the Settings UI allows viewing contents of a package before selecting the package for provisioning. To minimize the risk of the device being spammed by applying provisioning packages from unknown sources, a provisioning package can be signed and encrypted. Partners can also set policies to limit the application of provisioning packages at device runtime. Applying provisioning packages at device runtime requires administrator privilege. If the package is not signed or trusted, a user must provide consent before the package is applied to the device. If the package is encrypted, a valid password is needed to decrypt the package before it can be applied to the device.

When applying multiple provisioning packages to a device, the provisioning engine resolves settings with conflicting configuration values from different packages by evaluating the package ranking using the combination of package owner type and package rank level defined in the package metadata. A configuration setting applied from a provisioning package with the highest package ranking will be the final value applied to the device.

After a standalone provisioning package is applied to the device, the package is persisted in the %ProgramData%\Microsoft\Provisioning folder on the device. Provisioning packages can be removed by an administrator by using the Add or remove a provisioning package available under Settings > Accounts > Access work or school. However, Windows 10 doesn't provide an uninstall option to revert runtime settings when removing a provisioning package from the device.

Learn more