diff --git a/.acrolinx-config.edn b/.acrolinx-config.edn index 2794193b88..3e58e829a1 100644 --- a/.acrolinx-config.edn +++ b/.acrolinx-config.edn @@ -39,7 +39,7 @@ For more information about the exception criteria and exception process, see [Mi Select the total score link to review all feedback on clarity, consistency, tone, brand, terms, spelling, grammar, readability, and inclusive language. _You should fix all spelling errors regardless of your total score_. Fixing spelling errors helps maintain customer trust in overall content quality. -| Article | Total score
(Required: 80) | Words + phrases
(Brand, terms) | Correctness
(Spelling, grammar) | Clarity
(Readability) | +| Article | Total score
(Required: 80) | Terminology | Spelling and Grammar| Clarity
(Readability) | |---------|:--------------:|:--------------------:|:------:|:---------:| " diff --git a/.github/workflows/BuildValidation.yml b/.github/workflows/BuildValidation.yml new file mode 100644 index 0000000000..e57844b453 --- /dev/null +++ b/.github/workflows/BuildValidation.yml @@ -0,0 +1,21 @@ +name: PR has no warnings or errors + +permissions: + pull-requests: write + statuses: write + +on: + issue_comment: + types: [created] + +jobs: + + build-status: + uses: MicrosoftDocs/microsoft-365-docs/.github/workflows/Shared-BuildValidation.yml@workflows-prod + with: + PayloadJson: ${{ toJSON(github) }} + secrets: + AccessToken: ${{ secrets.GITHUB_TOKEN }} + + + diff --git a/.openpublishing.redirection.windows-security.json b/.openpublishing.redirection.windows-security.json index 04839ec4dd..52233f5ad0 100644 --- a/.openpublishing.redirection.windows-security.json +++ b/.openpublishing.redirection.windows-security.json @@ -5,6 +5,11 @@ "redirect_url": "/windows/security/hardware-security/kernel-dma-protection-for-thunderbolt", "redirect_document_id": false }, + { + "source_path": "windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-overview.md", + "redirect_url": "/windows/security/application-security/application-isolation/windows-sandbox/index", + "redirect_document_id": false + }, { "source_path": "windows/security/threat-protection/device-guard/enable-virtualization-based-protection-of-code-integrity.md", "redirect_url": "/windows/security/hardware-security/enable-virtualization-based-protection-of-code-integrity", diff --git a/README.md b/README.md index 98c771d56d..97874f3f91 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Anyone who is interested can contribute to the topics. When you contribute, your ### Quickly update an article using GitHub.com -Contributors who only make infrequent or small updates can edit the file directly on GitHub.com without having to install any additional software. This article shows you how. [This two-minute video](https://www.microsoft.com/videoplayer/embed/RE1XQTG) also covers how to contribute. +Contributors who only make infrequent or small updates can edit the file directly on GitHub.com without having to install any additional software. This article shows you how. [This two-minute video](https://learn-video.azurefd.net/vod/player?id=b5167c5a-9c69-499b-99ac-e5467882bc92) also covers how to contribute. 1. Make sure you're signed in to GitHub.com with your GitHub account. 2. Browse to the page you want to edit on Microsoft Learn. diff --git a/education/windows/federated-sign-in.md b/education/windows/federated-sign-in.md index aca908bb45..9a73ef453c 100644 --- a/education/windows/federated-sign-in.md +++ b/education/windows/federated-sign-in.md @@ -1,7 +1,7 @@ --- title: Configure federated sign-in for Windows devices description: Learn how federated sign-in in Windows works and how to configure it. -ms.date: 06/03/2024 +ms.date: 01/27/2025 ms.topic: how-to appliesto: - ✅ Windows 11 diff --git a/education/windows/tutorial-deploy-apps-winse/create-policies.md b/education/windows/tutorial-deploy-apps-winse/create-policies.md index 6947d4612d..e7fdd29782 100644 --- a/education/windows/tutorial-deploy-apps-winse/create-policies.md +++ b/education/windows/tutorial-deploy-apps-winse/create-policies.md @@ -54,7 +54,7 @@ To create supplemental policies, download and install the [WDAC Policy Wizard][E The following video provides an overview and explains how to create supplemental policies for apps blocked by the Windows 11 SE base policy. -> [!VIDEO https://www.microsoft.com/en-us/videoplayer/embed/RWWReO] +> [!VIDEO https://learn-video.azurefd.net/vod/player?id=1eedb284-5592-43e7-9446-ce178953502d] ### Create a supplemental policy for Win32 apps diff --git a/includes/iot/supported-os-enterprise-plus.md b/includes/iot/supported-os-enterprise-plus.md new file mode 100644 index 0000000000..b6c086d649 --- /dev/null +++ b/includes/iot/supported-os-enterprise-plus.md @@ -0,0 +1,8 @@ +--- +author: TerryWarwick +ms.author: twarwick +ms-topic: include +ms.date: 09/30/2024 +--- + +**Supported Editions**
✅ IoT Enterprise LTSC
✅ IoT Enterprise
✅ Enterprise LTSC
✅ Enterprise
✅ Education diff --git a/windows/client-management/manage-windows-copilot.md b/windows/client-management/manage-windows-copilot.md index 7c22b93c88..655fdb09e4 100644 --- a/windows/client-management/manage-windows-copilot.md +++ b/windows/client-management/manage-windows-copilot.md @@ -1,9 +1,9 @@ --- -title: Updated Windows and Microsoft Copilot experience +title: Updated Windows and Microsoft 365 Copilot Chat experience description: Learn about changes to the Copilot in Windows experience for commercial environments and how to configure it for your organization. ms.topic: overview ms.subservice: windows-copilot -ms.date: 12/12/2024 +ms.date: 01/28/2025 ms.author: mstewart author: mestew ms.collection: @@ -13,60 +13,60 @@ appliesto: - ✅ Windows 11, version 22H2 or later --- -# Updated Windows and Microsoft Copilot experience +# Updated Windows and Microsoft 365 Copilot Chat experience ->**Looking for consumer information?** See [Welcome to Copilot in Windows](https://support.microsoft.com/topic/675708af-8c16-4675-afeb-85a5a476ccb0). **Looking for more information on Microsoft Copilot experiences?** See [Understanding the different Microsoft Copilot experiences](https://support.microsoft.com/topic/cfff4791-694a-4d90-9c9c-1eb3fb28e842). +>**Looking for consumer information?** See [Welcome to Copilot on Windows](https://support.microsoft.com/topic/675708af-8c16-4675-afeb-85a5a476ccb0). **Looking for more information on Microsoft 365 Copilot Chat experiences?** See [Understanding the different Microsoft 365 Copilot Chat experiences](https://support.microsoft.com/topic/cfff4791-694a-4d90-9c9c-1eb3fb28e842). ## Enhanced data protection with enterprise data protection -The Copilot experience on Windows is changing to enhance data security, privacy, compliance, and simplify the user experience, for users signed in with a Microsoft Entra work or school account. [Microsoft Copilot will offer enterprise data protection](https://techcommunity.microsoft.com/t5/copilot-for-microsoft-365/updates-to-microsoft-copilot-to-bring-enterprise-data-protection/ba-p/4217152) at no additional cost and redirect users to a new simplified interface designed for work and education. [Enterprise data protection (EDP)](/copilot/microsoft-365/enterprise-data-protection) refers to controls and commitments, under the Data Protection Addendum and Product Terms, that apply to customer data for users of Copilot for Microsoft 365 and Microsoft Copilot. This means that security, privacy, compliance controls and commitments available for Copilot for Microsoft 365 will extend to Microsoft Copilot prompts and responses. Prompts and responses are protected by the same terms and commitments that are widely trusted by our customers - not only for Copilot for Microsoft 365, but also for emails in Exchange and files in SharePoint. This is an improvement on top of the previous commercial data protection (CDP) promise. This update is rolling out now. For more information, see the [Microsoft Copilot updates and enterprise data protection FAQ](/copilot/edpfaq). +The Copilot experience on Windows is changing to enhance data security, privacy, compliance, and simplify the user experience, for users signed in with a Microsoft Entra work or school account. [Microsoft 365 Copilot Chat](https://techcommunity.microsoft.com/t5/copilot-for-microsoft-365/updates-to-microsoft-copilot-to-bring-enterprise-data-protection/ba-p/4217152) is available at no additional cost and it redirects users to a new simplified interface designed for work and education. [Enterprise data protection (EDP)](/copilot/microsoft-365/enterprise-data-protection) refers to controls and commitments, under the Data Protection Addendum and Product Terms, that apply to customer data for users of Microsoft 365 Copilot and Microsoft 365 Copilot Chat. This means that security, privacy, compliance controls and commitments available for Microsoft 365 Copilot will extend to Microsoft 365 Copilot Chat prompts and responses. Prompts and responses are protected by the same terms and commitments that are widely trusted by our customers. This is an improvement on top of the previous commercial data protection (CDP) promise. This update is rolling out now. For more information, see the [Microsoft 365 Copilot Chat updates and enterprise data protection FAQ](/copilot/edpfaq). > [!IMPORTANT] > To streamline the user experience, updates to the Copilot entry points in Windows are being made for users. **Copilot in Windows (preview) will be removed from Windows**. The experience will slightly vary depending on whether your organization has already opted into using Copilot in Windows (preview) or not. ## Copilot in Windows (preview) isn't enabled -If your organization hasn't enabled Copilot in Windows (preview), your existing preferences are respected. Neither the Microsoft Copilot app nor the Microsoft 365 app are pinned to the taskbar. To prepare for the eventual removal of the [Copilot in Windows policy](/windows/client-management/mdm/policy-csp-windowsai#turnoffwindowscopilot), admins should [set Microsoft Copilot pinning options](/copilot/microsoft-365/pin-copilot) in the Microsoft 365 admin center. +If your organization hasn't enabled Copilot in Windows (preview), your existing preferences are respected. Neither Microsoft 365 Copilot Chat or the Microsoft 365 Copilot app (formerly the Microsoft 365 app) are pinned to the taskbar. To prepare for the eventual removal of the [Copilot in Windows policy](/windows/client-management/mdm/policy-csp-windowsai#turnoffwindowscopilot), admins should [set pinning options](/copilot/microsoft-365/pin-copilot) in the Microsoft 365 admin center. > [!NOTE] > Although we won't be pinning any app to the taskbar by default, IT has the capability to use policies to enforce their preferred app pinning. ## Copilot in Windows (preview) is enabled -If you had previously activated Copilot in Windows (in preview) for your workforce, we want to thank you for your enthusiasm. To provide the best Copilot experience for your users moving forward, and support greater efficiency and productivity, we won't automatically pin the Microsoft 365 app to the taskbar in Windows. Rather, we ensure that you have control over how you enable the Copilot experience within your organization. Our focus remains on empowering IT to seamlessly manage AI experiences and adopt those experiences at a pace that suits your organizational needs. +If you had previously activated Copilot in Windows (in preview) for your workforce, we want to thank you for your enthusiasm. To provide the best Copilot experience for your users moving forward, and support greater efficiency and productivity, we won't automatically pin the Microsoft 365 Copilot app to the taskbar in Windows. Rather, we ensure that you have control over how you enable the Copilot experience within your organization. Our focus remains on empowering IT to seamlessly manage AI experiences and adopt those experiences at a pace that suits your organizational needs. -If you have already activated Copilot in Windows (preview) - and want your users to have uninterrupted access to Copilot on the taskbar after the update - use the [configuration options](/windows/configuration/taskbar/?pivots=windows-11) to pin the Microsoft 365 app to the taskbar as Copilot in Windows (preview) icon will be removed from the taskbar. +If you have already activated Copilot in Windows (preview) - and want your users to have uninterrupted access to Copilot on the taskbar after the update - use the [configuration options](/windows/configuration/taskbar/?pivots=windows-11) to pin the Microsoft 365 Copilot app to the taskbar as Copilot in Windows (preview) icon will be removed from the taskbar. ## Users signing in to new PCs with Microsoft Entra accounts For users signing in to new PCs with work or school accounts, the following experience occurs: -- The Microsoft 365 app is pinned to the taskbar - this is the app comes preinstalled with Windows and includes convenient access to Office apps such as Word, PowerPoint, etc. -- Users that have the Microsoft 365 Copilot license have Microsoft Copilot pinned by default inside the Microsoft 365 app. -- Within the Microsoft 365 app, the Microsoft Copilot icon is situated next to the home button. - - Microsoft Copilot (`web` grounding chat) isn't the same as Microsoft 365 Copilot (`web` and `work` scope), which is a separate add-on license. - - Microsoft Copilot is available at no additional cost to customers with a Microsoft Entra account. Microsoft Copilot is the entry point for Copilot at work. While the Copilot chat experience helps users ground their conversations in web data, Microsoft 365 Copilot allows users to incorporate both web and work data they have access to into their conversations by switching between work and web modes in Business Chat. - - For users with the Microsoft 365 Copilot license, they can toggle between the web grounding-based chat capabilities of Microsoft Copilot and the work scoped chat capabilities of Microsoft 365 Copilot. -- Customers that don't have a license for Microsoft 365 Copilot are asked if they want to pin Microsoft Copilot to ensure they have easy access to Copilot. To set the default behavior, admins should [set Microsoft Copilot pinning options](/copilot/microsoft-365/pin-copilot) in the Microsoft 365 admin center. -- If admins elect not to pin Copilot and indicate that users can be asked, users will be asked to pin it themselves in the Microsoft 365 app, Outlook, and Teams. -- If admins elect not to pin Microsoft Copilot and indicate that users can't be asked, Microsoft Copilot won't be available via the Microsoft 365 app, Outlook, or Teams. Users have access to Microsoft Copilot from unless that URL is blocked by the IT admin. -- If the admins make no selection, users will be asked to pin Microsoft Copilot by themselves for easy access. +- The Microsoft 365 Copilot app is pinned to the taskbar - this is the app comes preinstalled with Windows and includes convenient access to Office apps such as Word, PowerPoint, etc. +- Users that have the Microsoft 365 Copilot license have Microsoft 365 Copilot Chat pinned by default inside the Microsoft 365 Copilot app. +- Within the Microsoft 365 Copilot app, the Microsoft 365 Copilot Chat icon is situated next to the home button. + - Microsoft 365 Copilot Chat (`web` grounding chat) isn't the same as Microsoft 365 Copilot (`web` and `work` scope), which is a separate add-on license. + - Microsoft 365 Copilot Chat is available at no additional cost to customers with a Microsoft Entra account. Microsoft 365 Copilot Chat is the entry point for Copilot at work. While the Copilot chat experience helps users ground their conversations in web data, Microsoft 365 Copilot allows users to incorporate both web and work data they have access to into their conversations by switching between work and web modes in Business Chat. + - For users with the Microsoft 365 Copilot license, they can toggle between the web grounding-based chat capabilities of Microsoft 365 Copilot Chat and the work scoped chat capabilities of Microsoft 365 Copilot. +- Customers that don't have a license for Microsoft 365 Copilot are asked if they want to pin Microsoft 365 Copilot Chat to ensure they have easy access to Copilot. To set the default behavior, admins should [set taskbar pinning options](/copilot/microsoft-365/pin-copilot) in the Microsoft 365 admin center. +- If admins elect not to pin Copilot and indicate that users can be asked, users will be asked to pin it themselves in the Microsoft 365 Copilot app, Outlook, and Teams. +- If admins elect not to pin Microsoft 365 Copilot Chat and indicate that users can't be asked, Microsoft 365 Copilot Chat won't be available via the Microsoft 365 Copilot app, Outlook, or Teams. Users have access to Microsoft 365 Copilot Chat from unless that URL is blocked by the IT admin. +- If the admins make no selection, users will be asked to pin Microsoft 365 Copilot Chat by themselves for easy access. ## When will this happen? -The update to Microsoft Copilot to offer enterprise data protection is rolling out now. -The shift to the Microsoft 365 app as the entry point for Microsoft Copilot with enterprise data protection (EDP) is coming soon. Changes will be rolled out to managed PCs starting with the September 2024 optional nonsecurity preview release, and following with the October 2024 monthly security update for all supported versions of Windows 11. These changes will be applied to Windows 10 PCs the month after. This update is replacing the current Copilot in Windows experience. +The update to Microsoft 365 Copilot Chat to offer enterprise data protection is rolling out now. +The shift to Microsoft 365 Copilot Chat is coming soon. Changes will be rolled out to managed PCs starting with the September 2024 optional nonsecurity preview release, and following with the October 2024 monthly security update for all supported versions of Windows 11. These changes will be applied to Windows 10 PCs the month after. This update is replacing the current Copilot in Windows experience. -The Microsoft Copilot app will be automatically enabled after you install the Windows updates listed above if you haven't previously enabled a group policy to prevent the installation of Copilot. The [AppLocker policy](/windows/security/application-security/application-control/app-control-for-business/applocker/applocker-overview) is available to control this Copilot experience before installing these Windows updates mentioned above or any subsequent Windows updates. +The Copilot app will be automatically enabled after you install the Windows updates listed above if you haven't previously enabled a group policy to prevent the installation of Copilot. The [AppLocker policy](/windows/security/application-security/application-control/app-control-for-business/applocker/applocker-overview) is available to control this Copilot experience before installing these Windows updates mentioned above or any subsequent Windows updates. -Note that the Microsoft Copilot app doesn't support Microsoft Entra authentication and users trying to sing in to the app using a Microsoft Entra account will be redirected to https://copilot.cloud.microsoft/ in their default browser. For users authenticating with a Microsoft Entra account, they should access Copilot through the Microsoft 365 app as the entry point. We recommend you pin Copilot to the navigation bar of the Microsoft 365 app to enable easy access. +Note that the Copilot app, which is a consumer experience, doesn't support Microsoft Entra authentication and users trying to sign in to the app using a Microsoft Entra account will be redirected to https://copilot.cloud.microsoft/ in their default browser. For users authenticating with a Microsoft Entra account, they should access Copilot through the Microsoft 365 Copilot app as the entry point. We recommend you pin Copilot to the navigation bar of the Microsoft 365 Copilot app to enable easy access. ## Policy information for previous Copilot in Windows (preview) experience -Admins should configure the [pinning options](/copilot/microsoft-365/pin-copilot) to enable access to Microsoft Copilot within the Microsoft 365 app in the Microsoft 365 admin center. +Admins should configure the [pinning options](/copilot/microsoft-365/pin-copilot) to enable access to Microsoft 365 Copilot Chat within the Microsoft 365 Copilot app in the Microsoft 365 admin center. The following policy to manage Copilot in Windows (preview) will be removed in the future and is considered a legacy policy: @@ -80,7 +80,7 @@ The following policy to manage Copilot in Windows (preview) will be removed in t You can remove or uninstall the Copilot app from your device by using one of the following methods: -1. Enterprise users can uninstall the Copilot app by going to **Settings** > **Apps** >**Installed Apps**. Select the three dots appearing on the right side of the app and select **Uninstall** from the dropdown list. +1. Enterprise users can uninstall the [Copilot app](https://apps.microsoft.com/detail/9NHT9RB2F4HD), which is a consumer experience, by going to **Settings** > **Apps** >**Installed Apps**. Select the three dots appearing on the right side of the app and select **Uninstall** from the dropdown list. 1. If you are an IT administrator, you can prevent installation of the app or remove the Copilot app using one of the following methods: 1. Prevent installation of the Copilot app: @@ -94,31 +94,31 @@ You can remove or uninstall the Copilot app from your device by using one of the 1. Open a Windows PowerShell window. You can do this by opening the Start menu, typing `PowerShell`, and selecting **Windows PowerShell** from the results. 1. Once the PowerShell window is open, enter the following commands: ```powershell - # Get the package full name of the Microsoft Copilot app + # Get the package full name of the Copilot app $packageFullName = Get-AppxPackage -Name "Microsoft.Copilot" | Select-Object -ExpandProperty PackageFullName - # Remove the Microsoft Copilot app + # Remove the Copilot app Remove-AppxPackage -Package $packageFullName ``` ## Implications for the Copilot hardware key -The Microsoft Copilot app is now available only to consumer users authenticating with a Microsoft account and won't work for commercial users authenticating with a Microsoft Entra account. With this change, IT admins need to take steps to ensure users authenticating with a Microsoft Entra account can still access Copilot with the Copilot key. Users attempting to sign in to the Copilot app with their Microsoft Entra account will be redirected to the browser version of Microsoft Copilot with enterprise data protection (https://copilot.cloud.microsoft). +The Microsoft 365 Copilot app is now available only to consumer users authenticating with a Microsoft account and won't work for commercial users authenticating with a Microsoft Entra account. With this change, IT admins need to take steps to ensure users authenticating with a Microsoft Entra account can still access Copilot with the Copilot key. Users attempting to sign in to the Copilot app with their Microsoft Entra account will be redirected to the browser version of Microsoft 365 Copilot Chat for work (https://copilot.cloud.microsoft). -For the optimal experience, enterprise customers should go to Windows client policies, such as Group Policy or Configuration Service Provider (CSP) policies to update the target of the key to the Microsoft 365 app so that users can access Copilot within the Microsoft 365 app. End users can also configure this from the **Settings** page. +For the optimal experience, enterprise customers should go to Windows client policies, such as Group Policy or Configuration Service Provider (CSP) policies to update the target of the key to the Microsoft 365 Copilot app so that users can access Copilot within the Microsoft 365 Copilot app. End users can also configure this from the **Settings** page. -The Microsoft 365 app comes preinstalled on all Windows 11 PCs. If your organization uninstalled the Microsoft 365 app, we suggest you reinstall it from the Microsoft Store or your preferred application management solution so that the Copilot key can be remapped to the Microsoft 365 app. We also suggest you [Pin Microsoft Copilot](/copilot/microsoft-365/pin-copilot) to the navigation bar of the Microsoft 365 app. +The Microsoft 365 Copilot app comes preinstalled on all Windows 11 PCs. If your organization uninstalled the Microsoft 365 Copilot app, we suggest you reinstall it from the Microsoft Store or your preferred application management solution so that the Copilot key can be remapped to the Microsoft 365 Copilot app. We also suggest you [Pin Microsoft 365 Copilot Chat](/copilot/microsoft-365/pin-copilot) to the navigation bar of the Microsoft 365 Copilot app. -To avoid confusion for users as to which entry point for Microsoft Copilot to use, we recommend you uninstall the Copilot app. +To avoid confusion for users as to which entry point for Microsoft 365 Copilot Chat to use, we recommend you uninstall the Copilot app. Use the table below to help determine the experience for your managed organization: | Configuration | Copilot experience | Copilot key invokes | | ---| --- | --- | -| Copilot **not enabled** in environment | Neither Copilot in Windows (preview) nor the Microsoft Copilot app are present. | Windows Search | -| Copilot **enabled** + **do not authenticate** with Microsoft Entra | Copilot in Windows (preview) is removed and replaced by the Microsoft Copilot app, which is not pinned to the taskbar unless you elect to do so. | Microsoft Copilot app | -| Copilot **enabled** + **authenticate** with Microsoft Entra + **new device** | Copilot in Windows (preview) is not present. Microsoft Copilot is accessed through the Microsoft 365 app (after post-setup update). | Microsoft Copilot within the Microsoft 365 app (after post-setup update). | -| Copilot **enabled** + **authenticate** with Microsoft Entra + **existing device** | Copilot in Windows (preview) is removed. Existing users with Copilot enabled on their devices will still see the Microsoft Copilot app. | IT admins should use policy to remap the Copilot key to the Microsoft 365 app, or prompt users to choose. | +| Copilot **not enabled** in environment | Neither Copilot in Windows (preview) nor the Microsoft 365 Copilot app are present. | Windows Search | +| Copilot **enabled** + **do not authenticate** with Microsoft Entra | Copilot in Windows (preview) is removed and replaced by the Microsoft 365 Copilot app, which is not pinned to the taskbar unless you elect to do so. | Microsoft 365 Copilot app | +| Copilot **enabled** + **authenticate** with Microsoft Entra + **new device** | Copilot in Windows (preview) is not present. Microsoft 365 Copilot Chat is accessed through the Microsoft 365 Copilot app (after post-setup update). | Microsoft 365 Copilot Chat within the Microsoft 365 Copilot app (after post-setup update). | +| Copilot **enabled** + **authenticate** with Microsoft Entra + **existing device** | Copilot in Windows (preview) is removed. Existing users with Copilot enabled on their devices will still see the Microsoft 365 Copilot app. | IT admins should use policy to remap the Copilot key to the Microsoft 365 Copilot app, or prompt users to choose. | ## Policies to manage the Copilot key @@ -143,9 +143,9 @@ If you choose to provide users in your organization with the choice to manage th -If a user signed in with their Microsoft Entra account doesn't already have the key mapped to the Microsoft 365 app, they can select the app by going to **Settings** > **Personalization** > **Text input**, then selecting from the dropdown menu in the setting called **Customize Copilot key on keyboard**. This dropdown has options for: **Search**, **Custom**, or a currently mapped app if one is selected. +If a user signed in with their Microsoft Entra account doesn't already have the key mapped to the Microsoft 365 Copilot app, they can select the app by going to **Settings** > **Personalization** > **Text input**, then selecting from the dropdown menu in the setting called **Customize Copilot key on keyboard**. This dropdown has options for: **Search**, **Custom**, or a currently mapped app if one is selected. -To map the key to the Microsoft 365 app, the user should select **Custom** and then choose the Microsoft 365 app from the app picker. If this app picker is empty or doesn't include the Microsoft 365 app, they should reinstall it from the Microsoft Store. +To map the key to the Microsoft 365 Copilot app, the user should select **Custom** and then choose the Microsoft 365 Copilot app from the app picker. If this app picker is empty or doesn't include the Microsoft 365 Copilot app, they should reinstall it from the Microsoft Store. Users can also choose to have the Copilot key launch an app that is MSIX packaged and signed, ensuring the app options the Copilot key can remap to meet security and privacy requirements. diff --git a/windows/client-management/mdm/bitlocker-csp.md b/windows/client-management/mdm/bitlocker-csp.md index f4d06f4ce7..052ed1a825 100644 --- a/windows/client-management/mdm/bitlocker-csp.md +++ b/windows/client-management/mdm/bitlocker-csp.md @@ -551,6 +551,10 @@ The possible values for 'zz' are: - 1 = Store recovery passwords and key packages - 2 = Store recovery passwords only + +For Microsoft Entra hybrid joined devices, the BitLocker recovery password is backed up to both Active Directory and Entra ID. + +For Microsoft Entra joined devices, the BitLocker recovery password is backed up to Entra ID. @@ -2092,6 +2096,10 @@ The possible values for 'zz' are: - 1 = Store recovery passwords and key packages. - 2 = Store recovery passwords only. + +For Microsoft Entra hybrid joined devices, the BitLocker recovery password is backed up to both Active Directory and Entra ID. + +For Microsoft Entra joined devices, the BitLocker recovery password is backed up to Entra ID. diff --git a/windows/client-management/mdm/healthattestation-csp.md b/windows/client-management/mdm/healthattestation-csp.md index 4367d3cb2f..a43aae095f 100644 --- a/windows/client-management/mdm/healthattestation-csp.md +++ b/windows/client-management/mdm/healthattestation-csp.md @@ -1,7 +1,7 @@ --- title: HealthAttestation CSP description: Learn more about the HealthAttestation CSP. -ms.date: 01/31/2024 +ms.date: 01/14/2025 --- @@ -51,7 +51,7 @@ The following list shows the HealthAttestation configuration service provider no | Scope | Editions | Applicable OS | |:--|:--|:--| -| ✅ Device
❌ User | ✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC | ✅ Windows Insider Preview | +| ✅ Device
❌ User | ✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC | ✅ Windows 11, version 22H2 with [KB5046732](https://support.microsoft.com/help/5046732) [10.0.22621.4541] and later
✅ Windows 11, version 24H2 with [KB5046617](https://support.microsoft.com/help/5046617) [10.0.26100.2314] and later
✅ Windows Insider Preview | diff --git a/windows/client-management/mdm/healthattestation-ddf.md b/windows/client-management/mdm/healthattestation-ddf.md index 0c9d382872..5a273aecc4 100644 --- a/windows/client-management/mdm/healthattestation-ddf.md +++ b/windows/client-management/mdm/healthattestation-ddf.md @@ -1,7 +1,7 @@ --- title: HealthAttestation DDF file description: View the XML file containing the device description framework (DDF) for the HealthAttestation configuration service provider. -ms.date: 06/28/2024 +ms.date: 01/14/2025 --- @@ -436,7 +436,7 @@ The following XML file contains the device description framework (DDF) for the H - 99.9.99999 + 99.9.99999, 10.0.26100.2314, 10.0.22621.4541 1.4 diff --git a/windows/client-management/mdm/policies-in-preview.md b/windows/client-management/mdm/policies-in-preview.md index 0e4249d643..a728e43011 100644 --- a/windows/client-management/mdm/policies-in-preview.md +++ b/windows/client-management/mdm/policies-in-preview.md @@ -1,7 +1,7 @@ --- title: Configuration service provider preview policies description: Learn more about configuration service provider (CSP) policies that are available for Windows Insider Preview. -ms.date: 11/27/2024 +ms.date: 01/14/2025 --- @@ -31,6 +31,7 @@ This article lists the policies that are applicable for Windows Insider Preview ## Connectivity +- [DisableCrossDeviceResume](policy-csp-connectivity.md#disablecrossdeviceresume) - [UseCellularWhenWiFiPoor](policy-csp-connectivity.md#usecellularwhenwifipoor) - [DisableCellularSettingsPage](policy-csp-connectivity.md#disablecellularsettingspage) - [DisableCellularOperatorSettingsPage](policy-csp-connectivity.md#disablecellularoperatorsettingspage) @@ -46,6 +47,10 @@ This article lists the policies that are applicable for Windows Insider Preview - [DODisallowCacheServerDownloadsOnVPN](policy-csp-deliveryoptimization.md#dodisallowcacheserverdownloadsonvpn) - [DOVpnKeywords](policy-csp-deliveryoptimization.md#dovpnkeywords) +## DeviceGuard + +- [MachineIdentityIsolation](policy-csp-deviceguard.md#machineidentityisolation) + ## DevicePreparation CSP - [PageEnabled](devicepreparation-csp.md#pageenabled) @@ -80,6 +85,12 @@ This article lists the policies that are applicable for Windows Insider Preview - [AttestErrorMessage](healthattestation-csp.md#attesterrormessage) +## HumanPresence + +- [ForcePrivacyScreen](policy-csp-humanpresence.md#forceprivacyscreen) +- [ForcePrivacyScreenDim](policy-csp-humanpresence.md#forceprivacyscreendim) +- [ForcePrivacyScreenNotification](policy-csp-humanpresence.md#forceprivacyscreennotification) + ## InternetExplorer - [AllowLegacyURLFields](policy-csp-internetexplorer.md#allowlegacyurlfields) @@ -115,6 +126,10 @@ This article lists the policies that are applicable for Windows Insider Preview - [DisablePostLogonProvisioning](passportforwork-csp.md#devicetenantidpoliciesdisablepostlogonprovisioning) +## Printers + +- [ConfigureIppTlsCertificatePolicy](policy-csp-printers.md#configureipptlscertificatepolicy) + ## Reboot CSP - [WeeklyRecurrent](reboot-csp.md#scheduleweeklyrecurrent) diff --git a/windows/client-management/mdm/policy-csp-connectivity.md b/windows/client-management/mdm/policy-csp-connectivity.md index 5ed3127e3f..a58ea71af2 100644 --- a/windows/client-management/mdm/policy-csp-connectivity.md +++ b/windows/client-management/mdm/policy-csp-connectivity.md @@ -1,7 +1,7 @@ --- title: Connectivity Policy CSP description: Learn more about the Connectivity Area in Policy CSP. -ms.date: 11/05/2024 +ms.date: 01/14/2025 --- @@ -684,6 +684,61 @@ This policy makes all configurable settings in the 'Cellular' Settings page read + +## DisableCrossDeviceResume + + +| Scope | Editions | Applicable OS | +|:--|:--|:--| +| ❌ Device
✅ User | ✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC | ✅ Windows Insider Preview | + + + +```User +./User/Vendor/MSFT/Policy/Config/Connectivity/DisableCrossDeviceResume +``` + + + + +This policy allows IT admins to turn off CrossDeviceResume feature to continue tasks, such as browsing file, continue using 1P/3P apps that require linking between Phone and PC. + +- If you enable this policy setting, the Windows device won't receive any CrossDeviceResume notification. + +- If you disable this policy setting, the Windows device will receive notification to resume activity from linked phone. + +- If you don't configure this policy setting, the default behavior is that the CrossDeviceResume feature is turned 'ON'. Changes to this policy take effect on reboot. + + + + + + + +**Description framework properties**: + +| Property name | Property value | +|:--|:--| +| Format | `int` | +| Access Type | Add, Delete, Get, Replace | +| Default Value | 0 | + + + +**Allowed values**: + +| Value | Description | +|:--|:--| +| 0 (Default) | CrossDeviceResume is Enabled. | +| 1 | CrossDeviceResume is Disabled. | + + + + + + + + ## DisableDownloadingOfPrintDriversOverHTTP diff --git a/windows/client-management/mdm/policy-csp-deliveryoptimization.md b/windows/client-management/mdm/policy-csp-deliveryoptimization.md index c058b8bccf..6fd24a5ef3 100644 --- a/windows/client-management/mdm/policy-csp-deliveryoptimization.md +++ b/windows/client-management/mdm/policy-csp-deliveryoptimization.md @@ -1,7 +1,7 @@ --- title: DeliveryOptimization Policy CSP description: Learn more about the DeliveryOptimization Area in Policy CSP. -ms.date: 08/06/2024 +ms.date: 01/21/2025 --- @@ -34,11 +34,7 @@ ms.date: 08/06/2024 -Specifies the maximum size in GB of Delivery Optimization cache. - -This policy overrides the DOMaxCacheSize policy. - -The value 0 (zero) means "unlimited" cache; Delivery Optimization will clear the cache when the device runs low on disk space. +Specifies the maximum size in GB of Delivery Optimization cache. This policy overrides the MaxCacheSize policy. @@ -93,7 +89,7 @@ The value 0 (zero) means "unlimited" cache; Delivery Optimization will clear the -Specifies whether the device is allowed to participate in Peer Caching while connected via VPN to the domain network. This means the device can download from or upload to other domain network devices, either on VPN or on the corporate domain network. +Specifies whether the device, with an active VPN connection, is allowed to participate in P2P or not. @@ -125,8 +121,8 @@ Specifies whether the device is allowed to participate in Peer Caching while con | Name | Value | |:--|:--| | Name | AllowVPNPeerCaching | -| Friendly Name | Enable Peer Caching while the device connects via VPN | -| Element Name | Enable Peer Caching while the device connects via VPN. | +| Friendly Name | Enable P2P while the device connects via VPN | +| Element Name | Enable P2P while the device connects via VPN. | | Location | Computer Configuration | | Path | Windows Components > Delivery Optimization | | Registry Key Name | SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization | @@ -156,9 +152,7 @@ Specifies whether the device is allowed to participate in Peer Caching while con -This policy allows you to set one or more Microsoft Connected Cache servers that will be used by your client(s). - -One or more values can be added as either fully qualified domain names (FQDN) or IP addresses. To add multiple values, separate each FQDN or IP address by commas. +Specifies one or more Microsoft Connected Cache servers that will be used by your client(s). One or more values can be added as either fully qualified domain names (FQDN) or IP addresses. To add multiple values, separate each FQDN or IP address by commas. @@ -214,17 +208,10 @@ One or more values can be added as either fully qualified domain names (FQDN) or -This policy allows you to specify how your client(s) can discover Microsoft Connected Cache servers dynamically. - -Options available are: - -0 = Disable DNS-SD. - -1 = DHCP Option 235. +Specifies how your client(s) can discover Microsoft Connected Cache servers dynamically. +1 = DHCP Option 235 2 = DHCP Option 235 Force. - -If this policy isn't configured, the client will attempt to automatically find a cache server using DNS-SD. If set to 0, the client won't use DNS-SD to automatically find a cache server. If set to 1 or 2, the client will query DHCP Option ID 235 and use the returned value as the Cache Server Hostname. Option 2 overrides the Cache Server Hostname policy, if configured. @@ -240,10 +227,18 @@ If this policy isn't configured, the client will attempt to automatically find a |:--|:--| | Format | `int` | | Access Type | Add, Delete, Get, Replace | -| Allowed Values | Range: `[0-4294967295]` | | Default Value | 0 | + +**Allowed values**: + +| Value | Description | +|:--|:--| +| 1 | DHCP Option 235. | +| 2 | DHCP Option 235 Force. | + + **Group policy mapping**: @@ -281,13 +276,7 @@ If this policy isn't configured, the client will attempt to automatically find a -This policy allows you to delay the use of an HTTP source in a background download that's allowed to use P2P. - -After the max delay has reached, the download will resume using HTTP, either downloading the entire payload or complementing the bytes that couldn't be downloaded from Peers. - -Note that a download that's waiting for peer sources, will appear to be stuck for the end user. - -The recommended value is 1 hour (3600). +For background downloads that use P2P, specifies the time to wait before starting to download from the HTTP source. @@ -311,7 +300,7 @@ The recommended value is 1 hour (3600). | Name | Value | |:--|:--| | Name | DelayBackgroundDownloadFromHttp | -| Friendly Name | Delay background download from http (in secs) | +| Friendly Name | Delay background download from http (in seconds) | | Element Name | Delay background download from http (in secs) | | Location | Computer Configuration | | Path | Windows Components > Delivery Optimization | @@ -342,7 +331,7 @@ The recommended value is 1 hour (3600). -Specifies the time in seconds to delay the fallback from Cache Server to the HTTP source for a background content download. Note that the DODelayBackgroundDownloadFromHttp policy takes precedence over this policy to allow downloads from peers first. +For background downloads that use a cache server, specifies the time to wait before falling back to download from the original HTTP source. @@ -397,7 +386,7 @@ Specifies the time in seconds to delay the fallback from Cache Server to the HTT -Specifies the time in seconds to delay the fallback from Cache Server to the HTTP source for foreground content download. Note that the DODelayForegroundDownloadFromHttp policy takes precedence over this policy to allow downloads from peers first. +For foreground downloads that use a cache server, specifies the time to wait before falling back to download from the original HTTP source. @@ -452,13 +441,7 @@ Specifies the time in seconds to delay the fallback from Cache Server to the HTT -This policy allows you to delay the use of an HTTP source in a foreground (interactive) download that's allowed to use P2P. - -After the max delay has reached, the download will resume using HTTP, either downloading the entire payload or complementing the bytes that couldn't be downloaded from Peers. - -Note that a download that's waiting for peer sources, will appear to be stuck for the end user. - -The recommended value is 1 minute (60). +For foreground downloads that use P2P, specifies the time to wait before starting to download from the HTTP source. @@ -482,7 +465,7 @@ The recommended value is 1 minute (60). | Name | Value | |:--|:--| | Name | DelayForegroundDownloadFromHttp | -| Friendly Name | Delay Foreground download from http (in secs) | +| Friendly Name | Delay Foreground download from http (in seconds) | | Element Name | Delay Foreground download from http (in secs) | | Location | Computer Configuration | | Path | Windows Components > Delivery Optimization | @@ -513,7 +496,7 @@ The recommended value is 1 minute (60). -Disallow downloads from Microsoft Connected Cache servers when the device connects via VPN. By default, the device is allowed to download from Microsoft Connected Cache when connected via VPN. +Specify to disallow downloads from Microsoft Connected Cache servers when the device has an active VPN connection. By default, the button is 'Not Set'. This means the device is allowed to download from Microsoft Connected Cache when the device has an active VPN connection. To block these downloads, turn the button on to 'Enabled'. @@ -535,8 +518,8 @@ Disallow downloads from Microsoft Connected Cache servers when the device connec | Value | Description | |:--|:--| -| 0 (Default) | Allowed. | -| 1 | Not allowed. | +| 0 (Default) | Not Set. | +| 1 | Enabled. | @@ -572,7 +555,7 @@ Disallow downloads from Microsoft Connected Cache servers when the device connec -Specifies the download method that Delivery Optimization can use in downloads of Windows Updates, Apps and App updates. The default value is 1. +Specifies the method that Delivery Optimization can use to download content on behalf of various Microsoft products. @@ -598,10 +581,10 @@ Specifies the download method that Delivery Optimization can use in downloads of |:--|:--| | 0 (Default) | HTTP only, no peering. | | 1 | HTTP blended with peering behind the same NAT. | -| 2 | When this option is selected, peering will cross NATs. To create a custom group use Group ID in combination with Mode 2. | +| 2 | HTTP blended with peering across a private group. | | 3 | HTTP blended with Internet peering. | -| 99 | Simple download mode with no peering. Delivery Optimization downloads using HTTP only and doesn't attempt to contact the Delivery Optimization cloud services. Added in Windows 10, version 1607. | -| 100 | Bypass mode. Windows 10: Don't use Delivery Optimization and use BITS instead. Windows 11: Deprecated, use Simple mode instead. | +| 99 | HTTP only, no peering, no use of DO cloud service. | +| 100 | Bypass mode, deprecated in Windows 11. | @@ -641,11 +624,7 @@ Specifies the download method that Delivery Optimization can use in downloads of -Group ID must be set as a GUID. This Policy specifies an arbitrary group ID that the device belongs to. - -Use this if you need to create a single group for Local Network Peering for branches that are on different domains or aren't on the same LAN. - -Note this is a best effort optimization and shouldn't be relied on for an authentication of identity. +Specifies an arbitrary group ID that the device belongs to. A GUID must be used. @@ -698,7 +677,7 @@ Note this is a best effort optimization and shouldn't be relied on for an authen -Set this policy to restrict peer selection to a specific source. Available options are: 1 = AD Site, 2 = Authenticated domain SID, 3 = DHCP Option ID, 4 = DNS Suffix, 5 = Microsoft Entra ID. When set, the Group ID will be assigned automatically from the selected source. This policy is ignored if the GroupID policy is also set. The options set in this policy only apply to Group (2) download mode. If Group (2) isn't set as Download mode, this policy will be ignored. For option 3 - DHCP Option ID, the client will query DHCP Option ID 234 and use the returned GUID value as the Group ID. Starting with Windows 10, version 1903, you can use the Microsoft Entra tenant ID as a means to define groups. To do this, set the value of DOGroupIdSource to 5. +Specifies the source of group ID used for peer selection. @@ -722,12 +701,12 @@ Set this policy to restrict peer selection to a specific source. Available optio | Value | Description | |:--|:--| -| 0 (Default) | Unset. | +| 0 (Default) | Not Set. | | 1 | AD site. | | 2 | Authenticated domain SID. | -| 3 | DHCP user option. | -| 4 | DNS suffix. | -| 5 | Microsoft Entra ID. | +| 3 | DHCP Option ID. | +| 4 | DNS Suffix. | +| 5 | Entra ID Tenant ID. | @@ -768,8 +747,6 @@ Set this policy to restrict peer selection to a specific source. Available optio Specifies the maximum background download bandwidth in KiloBytes/second that the device can use across all concurrent download activities using Delivery Optimization. - -The default value 0 (zero) means that Delivery Optimization dynamically adjusts to use the available bandwidth for downloads. @@ -824,7 +801,7 @@ The default value 0 (zero) means that Delivery Optimization dynamically adjusts -Specifies the maximum time in seconds that each file is held in the Delivery Optimization cache after downloading successfully. The value 0 (zero) means unlimited; Delivery Optimization will hold the files in the cache longer and make the files available for uploads to other devices, as long as the cache size hasn't exceeded. The value 0 is new in Windows 10, version 1607. The default value is 604800 seconds (7 days). +Specifies the maximum time in seconds that each file is held in the Delivery Optimization cache after downloading successfully. @@ -879,7 +856,7 @@ Specifies the maximum time in seconds that each file is held in the Delivery Opt -Specifies the maximum cache size that Delivery Optimization can utilize, as a percentage of disk size (1-100). The default value is 20. +Specifies the maximum cache size that Delivery Optimization can utilize, as a percentage of the available drive space. @@ -935,8 +912,6 @@ Specifies the maximum cache size that Delivery Optimization can utilize, as a pe Specifies the maximum foreground download bandwidth in KiloBytes/second that the device can use across all concurrent download activities using Delivery Optimization. - -The default value 0 (zero) means that Delivery Optimization dynamically adjusts to use the available bandwidth for downloads. @@ -991,7 +966,7 @@ The default value 0 (zero) means that Delivery Optimization dynamically adjusts -Specifies the minimum download QoS (Quality of Service or speed) in KiloBytes/sec for background downloads. This policy affects the blending of peer and HTTP sources. Delivery Optimization complements the download from the HTTP source to achieve the minimum QoS value set. The default value is 20480 (20 MB/s). +Specifies the minimum download QoS (Quality of Service) in KiloBytes/sec for background downloads. @@ -1046,11 +1021,7 @@ Specifies the minimum download QoS (Quality of Service or speed) in KiloBytes/se -Specify any value between 1 and 100 (in percentage) to allow the device to upload data to LAN and Group peers while on DC power (Battery). - -The recommended value to set if you allow uploads on battery is 40 (for 40%). The device can download from peers while on battery regardless of this policy. - -The value 0 means "not-limited"; The cloud service set default value will be used. +Specifies the minimum battery level required for uploading to peers, while on battery power. @@ -1105,12 +1076,7 @@ The value 0 means "not-limited"; The cloud service set default value will be use -Specifies the required minimum disk size (capacity in GB) for the device to use Peer Caching. The cloud service set default value will be used. - -Recommended values: 64 GB to 256 GB. - -> [!NOTE] -> If the DOModifyCacheDrive policy is set, the disk size check will apply to the new working directory specified by this policy. +Specifies the required minimum total disk size in GB for the device to use P2P. @@ -1134,8 +1100,8 @@ Recommended values: 64 GB to 256 GB. | Name | Value | |:--|:--| | Name | MinDiskSizeAllowedToPeer | -| Friendly Name | Minimum disk size allowed to use Peer Caching (in GB) | -| Element Name | Minimum disk size allowed to use Peer Caching (in GB) | +| Friendly Name | Minimum disk size allowed to use P2P (in GB) | +| Element Name | Minimum disk size allowed to use P2P (in GB) | | Location | Computer Configuration | | Path | Windows Components > Delivery Optimization | | Registry Key Name | SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization | @@ -1165,7 +1131,7 @@ Recommended values: 64 GB to 256 GB. -Specifies the minimum content file size in MB enabled to use Peer Caching. Recommended values: 1 MB to 100,000 MB. The default value is 100 MB. +Specifies the minimum content file size in MB eligible to use P2P. @@ -1189,8 +1155,8 @@ Specifies the minimum content file size in MB enabled to use Peer Caching. Recom | Name | Value | |:--|:--| | Name | MinFileSizeToCache | -| Friendly Name | Minimum Peer Caching Content File Size (in MB) | -| Element Name | Minimum Peer Caching Content File Size (in MB) | +| Friendly Name | Minimum P2P Content File Size (in MB) | +| Element Name | Minimum P2P Content File Size (in MB) | | Location | Computer Configuration | | Path | Windows Components > Delivery Optimization | | Registry Key Name | SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization | @@ -1220,7 +1186,7 @@ Specifies the minimum content file size in MB enabled to use Peer Caching. Recom -Specifies the minimum RAM size in GB required to use Peer Caching. For example, if the minimum set is 1 GB, then devices with 1 GB or higher available RAM will be allowed to use Peer caching. Recommended values: 1 GB to 4 GB. The default value is 4 GB. +Specifies the minimum total RAM size in GB required to use P2P. @@ -1244,8 +1210,8 @@ Specifies the minimum RAM size in GB required to use Peer Caching. For example, | Name | Value | |:--|:--| | Name | MinRAMAllowedToPeer | -| Friendly Name | Minimum RAM capacity (inclusive) required to enable use of Peer Caching (in GB) | -| Element Name | Minimum RAM capacity (inclusive) required to enable use of Peer Caching (in GB) | +| Friendly Name | Minimum RAM capacity (inclusive) required to enable use of P2P (in GB) | +| Element Name | Minimum RAM capacity (inclusive) required to enable use of P2P (in GB) | | Location | Computer Configuration | | Path | Windows Components > Delivery Optimization | | Registry Key Name | SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization | @@ -1275,9 +1241,7 @@ Specifies the minimum RAM size in GB required to use Peer Caching. For example, -Specifies the drive Delivery Optimization shall use for its cache. - -By default, %SystemDrive% is used to store the cache. The drive location can be specified using environment variables, drive letter or using a full path. +Specifies the drive that Delivery Optimization should use for its cache. The drive location can be specified using environment variables, drive letter or using a full path. @@ -1330,7 +1294,7 @@ By default, %SystemDrive% is used to store the cache. The drive location can be -Specifies the maximum total bytes in GB that Delivery Optimization is allowed to upload to Internet peers in each calendar month. The value 0 (zero) means unlimited; No monthly upload limit's applied if 0 is set. The default value is 5120 (5 TB). +Specifies the maximum bytes in GB that Delivery Optimization is allowed to upload to Internet peers in each calendar month. @@ -1386,8 +1350,6 @@ Specifies the maximum total bytes in GB that Delivery Optimization is allowed to Specifies the maximum background download bandwidth that Delivery Optimization uses across all concurrent download activities as a percentage of available download bandwidth. - -The default value 0 (zero) means that Delivery Optimization dynamically adjusts to use the available bandwidth for background downloads. @@ -1445,8 +1407,6 @@ Downloads from LAN peers won't be throttled even when this policy is set. Specifies the maximum foreground download bandwidth that Delivery Optimization uses across all concurrent download activities as a percentage of available download bandwidth. - -The default value 0 (zero) means that Delivery Optimization dynamically adjusts to use the available bandwidth for foreground downloads. @@ -1501,7 +1461,7 @@ The default value 0 (zero) means that Delivery Optimization dynamically adjusts -Set this policy to restrict peer selection via selected option. Options available are: 1=Subnet mask, 2 = Local discovery (DNS-SD). These options apply to both Download Mode LAN (1) and Group (2). +Specifies to restrict peer selection using the selected method, in addition to the DownloadMode policy. @@ -1528,7 +1488,7 @@ In Windows 11 the 'Local Peer Discovery' option was introduced to restrict peer |:--|:--| | 0 (Default) | None. | | 1 | Subnet mask. | -| 2 | Local peer discovery (DNS-SD). | +| 2 | Local discovery (DNS-SD). | @@ -1681,7 +1641,7 @@ This policy allows an IT Admin to define the following details: -This policy allows you to set one or more keywords used to recognize VPN connections. To add multiple keywords, separate them with commas. +Specifies one or more keywords used to recognize VPN connections. To add multiple keywords, separate each by a comma. diff --git a/windows/client-management/mdm/policy-csp-deviceguard.md b/windows/client-management/mdm/policy-csp-deviceguard.md index c27a142696..ba7cfacf34 100644 --- a/windows/client-management/mdm/policy-csp-deviceguard.md +++ b/windows/client-management/mdm/policy-csp-deviceguard.md @@ -1,7 +1,7 @@ --- title: DeviceGuard Policy CSP description: Learn more about the DeviceGuard Area in Policy CSP. -ms.date: 01/18/2024 +ms.date: 01/14/2025 --- @@ -9,6 +9,8 @@ ms.date: 01/18/2024 # Policy CSP - DeviceGuard +[!INCLUDE [Windows Insider tip](includes/mdm-insider-csp-note.md)] + @@ -205,6 +207,70 @@ Credential Guard Configuration: 0 - Turns off CredentialGuard remotely if config + +## MachineIdentityIsolation + + +| Scope | Editions | Applicable OS | +|:--|:--|:--| +| ✅ Device
❌ User | ❌ Pro
✅ Enterprise
✅ Education
❌ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC | ✅ Windows Insider Preview | + + + +```Device +./Device/Vendor/MSFT/Policy/Config/DeviceGuard/MachineIdentityIsolation +``` + + + + +Machine Identity Isolation: 0 - Machine password is only LSASS-bound and stored in $MACHINE.ACC registry key. 1 - Machine password both LSASS-bound and IUM-bound. It's stored in $MACHINE.ACC and $MACHINE.ACC.IUM registry keys. 2 - Machine password is only IUM-bound and stored in $MACHINE.ACC.IUM registry key. + + + + + + + +**Description framework properties**: + +| Property name | Property value | +|:--|:--| +| Format | `int` | +| Access Type | Add, Delete, Get, Replace | +| Default Value | 0 | + + + +**Allowed values**: + +| Value | Description | +|:--|:--| +| 0 (Default) | (Disabled) Machine password is only LSASS-bound and stored in $MACHINE.ACC registry key. | +| 1 | (Enabled in audit mode) Machine password both LSASS-bound and IUM-bound. It's stored in $MACHINE.ACC and $MACHINE.ACC.IUM registry keys. | +| 2 | (Enabled in enforcement mode) Machine password is only IUM-bound and stored in $MACHINE.ACC.IUM registry key. | + + + +**Group policy mapping**: + +| Name | Value | +|:--|:--| +| Name | VirtualizationBasedSecurity | +| Friendly Name | Turn On Virtualization Based Security | +| Element Name | Machine Identity Isolation Configuration. | +| Location | Computer Configuration | +| Path | System > Device Guard | +| Registry Key Name | SOFTWARE\Policies\Microsoft\Windows\DeviceGuard | +| ADMX File Name | DeviceGuard.admx | + + + + + + + + ## RequirePlatformSecurityFeatures diff --git a/windows/client-management/mdm/policy-csp-humanpresence.md b/windows/client-management/mdm/policy-csp-humanpresence.md index 1cf592ddff..b27018ae74 100644 --- a/windows/client-management/mdm/policy-csp-humanpresence.md +++ b/windows/client-management/mdm/policy-csp-humanpresence.md @@ -1,7 +1,7 @@ --- title: HumanPresence Policy CSP description: Learn more about the HumanPresence Area in Policy CSP. -ms.date: 09/27/2024 +ms.date: 01/14/2025 --- @@ -9,6 +9,8 @@ ms.date: 09/27/2024 # Policy CSP - HumanPresence +[!INCLUDE [Windows Insider tip](includes/mdm-insider-csp-note.md)] + @@ -526,6 +528,183 @@ Determines the timeout for Lock on Leave forced by the MDM policy. The user will + +## ForcePrivacyScreen + + +| Scope | Editions | Applicable OS | +|:--|:--|:--| +| ✅ Device
❌ User | ✅ Pro
✅ Enterprise
✅ Education
❌ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC | ✅ Windows Insider Preview | + + + +```Device +./Device/Vendor/MSFT/Policy/Config/HumanPresence/ForcePrivacyScreen +``` + + + + +Determines whether detect when other people are looking at my screen is forced on/off by the MDM policy. The user won't be able to change this setting and the UI will be greyed out. + + + + + + + +**Description framework properties**: + +| Property name | Property value | +|:--|:--| +| Format | `int` | +| Access Type | Add, Delete, Get, Replace | +| Default Value | 0 | + + + +**Allowed values**: + +| Value | Description | +|:--|:--| +| 2 | ForcedOff. | +| 1 | ForcedOn. | +| 0 (Default) | DefaultToUserChoice. | + + + +**Group policy mapping**: + +| Name | Value | +|:--|:--| +| Name | ForcePrivacyScreen | +| Path | Sensors > AT > WindowsComponents > HumanPresence | + + + + + + + + + +## ForcePrivacyScreenDim + + +| Scope | Editions | Applicable OS | +|:--|:--|:--| +| ✅ Device
❌ User | ✅ Pro
✅ Enterprise
✅ Education
❌ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC | ✅ Windows Insider Preview | + + + +```Device +./Device/Vendor/MSFT/Policy/Config/HumanPresence/ForcePrivacyScreenDim +``` + + + + +Determines whether dim the screen when other people are looking at my screen checkbox is forced checked/unchecked by the MDM policy. The user won't be able to change this setting and the checkbox in the UI will be greyed out. + + + + + + + +**Description framework properties**: + +| Property name | Property value | +|:--|:--| +| Format | `int` | +| Access Type | Add, Delete, Get, Replace | +| Default Value | 0 | + + + +**Allowed values**: + +| Value | Description | +|:--|:--| +| 2 | ForcedUnchecked. | +| 1 | ForcedChecked. | +| 0 (Default) | DefaultToUserChoice. | + + + +**Group policy mapping**: + +| Name | Value | +|:--|:--| +| Name | ForcePrivacyScreenDim | +| Path | Sensors > AT > WindowsComponents > HumanPresence | + + + + + + + + + +## ForcePrivacyScreenNotification + + +| Scope | Editions | Applicable OS | +|:--|:--|:--| +| ✅ Device
❌ User | ✅ Pro
✅ Enterprise
✅ Education
❌ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC | ✅ Windows Insider Preview | + + + +```Device +./Device/Vendor/MSFT/Policy/Config/HumanPresence/ForcePrivacyScreenNotification +``` + + + + +Determines whether providing alert when people are looking at my screen checkbox is forced checked/unchecked by the MDM policy. The user won't be able to change this setting and the checkbox in the UI will be greyed out. + + + + + + + +**Description framework properties**: + +| Property name | Property value | +|:--|:--| +| Format | `int` | +| Access Type | Add, Delete, Get, Replace | +| Default Value | 0 | + + + +**Allowed values**: + +| Value | Description | +|:--|:--| +| 2 | ForcedUnchecked. | +| 1 | ForcedChecked. | +| 0 (Default) | DefaultToUserChoice. | + + + +**Group policy mapping**: + +| Name | Value | +|:--|:--| +| Name | ForcePrivacyScreenNotification | +| Path | Sensors > AT > WindowsComponents > HumanPresence | + + + + + + + + diff --git a/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions.md b/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions.md index bdd4e1fcd0..3c37204919 100644 --- a/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions.md +++ b/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions.md @@ -9,7 +9,7 @@ ms.date: 11/05/2024 # Policy CSP - LocalPoliciesSecurityOptions -[!INCLUDE [Windows Insider tip](includes/mdm-insider-csp-note.md)] +[!INCLUDE [Windows Windows Insider Preview tip](includes/mdm-insider-csp-note.md)] @@ -517,7 +517,7 @@ Audit: Shut down system immediately if unable to log security audits This securi -Devices: Allowed to format and eject removable media This security setting determines who is allowed to format and eject removable NTFS media. This capability can be given to: Administrators Administrators and Interactive Users Default: This policy isn't defined and only Administrators have this ability. +Devices: Allowed to format and eject removable media This security setting determines who is allowed to format and eject removable NTFS media. This capability can be given to: Administrators and Interactive Users Default: This policy isn't defined and only Administrators have this ability. @@ -1117,7 +1117,7 @@ Domain member: Require strong (Windows 2000 or later) session key This security -Interactive Logon:Display user information when the session is locked User display name, domain and user names (1) User display name only (2) Don't display user information (3) Domain and user names only (4) +Interactive Logon: Display user information when the session is locked User display name, domain and user names (1) User display name only (2) Don't display user information (3) Domain and user names only (4) @@ -1556,7 +1556,7 @@ Interactive logon: Message title for users attempting to log on This security se | Scope | Editions | Applicable OS | |:--|:--|:--| -| ✅ Device
❌ User | ✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC | ✅ Windows 11, version 24H2 [10.0.26100] and later | +| ✅ Device
❌ User | ✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC | ✅ Windows Insider Preview | @@ -1568,6 +1568,9 @@ Interactive logon: Message title for users attempting to log on This security se Interactive logon: Number of previous logons to cache (in case domain controller isn't available) Each unique user's logon information is cached locally so that, in the event that a domain controller is unavailable during subsequent logon attempts, they're able to log on. The cached logon information is stored from the previous logon session. If a domain controller is unavailable and a user's logon information isn't cached, the user is prompted with this message: There are currently no logon servers available to service the logon request. In this policy setting, a value of 0 disables logon caching. Any value above 50 only caches 50 logon attempts. Windows supports a maximum of 50 cache entries and the number of entries consumed per user depends on the credential. For example, a maximum of 50 unique password user accounts can be cached on a Windows system, but only 25 smart card user accounts can be cached because both the password information and the smart card information are stored. When a user with cached logon information logs on again, the user's individual cached information is replaced. Default: Windows Server 2008: 25 All Other Versions: 10. + +> [!NOTE] +> This setting previously showed as applicable to Windows 11, version 24H2 [10.0.26100] and later in error. MDM solutions may show as applicable to that version until a future release. @@ -1780,7 +1783,7 @@ Microsoft network client: Digitally sign communications (if server agrees) This - If this setting is enabled, the Microsoft network client will ask the server to perform SMB packet signing upon session setup. If packet signing has been enabled on the server, packet signing will be negotiated. -- If this policy is disabled, the SMB client will never negotiate SMB packet signing. Notes All Windows operating systems support both a client-side SMB component and a server-side SMB component. On Windows 2000 and later, enabling or requiring packet signing for client and server-side SMB components is controlled by the following four policy settings: Microsoft network client: Digitally sign communications (always) - Controls whether or not the client-side SMB component requires packet signing. Microsoft network client: Digitally sign communications (if server agrees) - Controls whether or not the client-side SMB component has packet signing enabled. Microsoft network server: Digitally sign communications (always) - Controls whether or not the server-side SMB component requires packet signing. Microsoft network server: Digitally sign communications (if client agrees) - Controls whether or not the server-side SMB component has packet signing enabled. If both client-side and server-side SMB signing is enabled and the client establishes an SMB 1.0 connection to the server, SMB signing will be attempted. SMB packet signing can significantly degrade SMB performance, depending on dialect version, OS version, file sizes, processor offloading capabilities, and application IO behaviors. This setting only applies to SMB 1.0 connections. For more information, reference:< https://go.microsoft.com/fwlink/?LinkID=787136>. +- If this policy is disabled, the SMB client will never negotiate SMB packet signing. Notes All Windows operating systems support both a client-side SMB component and a server-side SMB component. On Windows 2000 and later, enabling or requiring packet signing for client and server-side SMB components is controlled by the following four policy settings: Microsoft network client: Digitally sign communications (always) - Controls whether or not the client-side SMB component requires packet signing. Microsoft network client: Digitally sign communications (if server agrees) - Controls whether or not the client-side SMB component has packet signing enabled. Microsoft network server: Digitally sign communications (always) - Controls whether or not the server-side SMB component requires packet signing. Microsoft network server: Digitally sign communications (if client agrees) - Controls whether or not the server-side SMB component has packet signing enabled. If both client-side and server-side SMB signing are enabled and the client establishes an SMB 1.0 connection to the server, SMB signing will be attempted. SMB packet signing can significantly degrade SMB performance, depending on dialect version, OS version, file sizes, processor offloading capabilities, and application IO behaviors. This setting only applies to SMB 1.0 connections. For more information, reference:< https://go.microsoft.com/fwlink/?LinkID=787136>. @@ -2021,7 +2024,7 @@ Microsoft network server: Digitally sign communications (if client agrees) This - If this policy is disabled, the SMB client will never negotiate SMB packet signing. on domain controllers only. > [!IMPORTANT] -> For Windows 2000 servers to negotiate signing with Windows NT 4.0 clients, the following registry value must be set to 1 on the server running Windows 2000: HKLM\System\CurrentControlSet\Services\lanmanserver\parameters\enableW9xsecuritysignature Notes All Windows operating systems support both a client-side SMB component and a server-side SMB component. For Windows 2000 and above, enabling or requiring packet signing for client and server-side SMB components is controlled by the following four policy settings: Microsoft network client: Digitally sign communications (always) - Controls whether or not the client-side SMB component requires packet signing. Microsoft network client: Digitally sign communications (if server agrees) - Controls whether or not the client-side SMB component has packet signing enabled. Microsoft network server: Digitally sign communications (always) - Controls whether or not the server-side SMB component requires packet signing. Microsoft network server: Digitally sign communications (if client agrees) - Controls whether or not the server-side SMB component has packet signing enabled. If both client-side and server-side SMB signing is enabled and the client establishes an SMB 1.0 connection to the server, SMB signing will be attempted. SMB packet signing can significantly degrade SMB performance, depending on dialect version, OS version, file sizes, processor offloading capabilities, and application IO behaviors. This setting only applies to SMB 1.0 connections. For more information, reference:< https://go.microsoft.com/fwlink/?LinkID=787136>. +> For Windows 2000 servers to negotiate signing with Windows NT 4.0 clients, the following registry value must be set to 1 on the server running Windows 2000: HKLM\System\CurrentControlSet\Services\lanmanserver\parameters\enableW9xsecuritysignature Notes All Windows operating systems support both a client-side SMB component and a server-side SMB component. For Windows 2000 and above, enabling or requiring packet signing for client and server-side SMB components is controlled by the following four policy settings: Microsoft network client: Digitally sign communications (always) - Controls whether or not the client-side SMB component requires packet signing. Microsoft network client: Digitally sign communications (if server agrees) - Controls whether or not the client-side SMB component has packet signing enabled. Microsoft network server: Digitally sign communications (always) - Controls whether or not the server-side SMB component requires packet signing. Microsoft network server: Digitally sign communications (if client agrees) - Controls whether or not the server-side SMB component has packet signing enabled. If both client-side and server-side SMB signing are enabled and the client establishes an SMB 1.0 connection to the server, SMB signing will be attempted. SMB packet signing can significantly degrade SMB performance, depending on dialect version, OS version, file sizes, processor offloading capabilities, and application IO behaviors. This setting only applies to SMB 1.0 connections. For more information, reference:< https://go.microsoft.com/fwlink/?LinkID=787136>. diff --git a/windows/client-management/mdm/policy-csp-printers.md b/windows/client-management/mdm/policy-csp-printers.md index 098733446d..b852afb0b4 100644 --- a/windows/client-management/mdm/policy-csp-printers.md +++ b/windows/client-management/mdm/policy-csp-printers.md @@ -1,7 +1,7 @@ --- title: Printers Policy CSP description: Learn more about the Printers Area in Policy CSP. -ms.date: 09/27/2024 +ms.date: 01/14/2025 --- @@ -11,6 +11,8 @@ ms.date: 09/27/2024 [!INCLUDE [ADMX-backed CSP tip](includes/mdm-admx-csp-note.md)] +[!INCLUDE [Windows Insider tip](includes/mdm-insider-csp-note.md)] + @@ -348,6 +350,56 @@ The following are the supported values: + +## ConfigureIppTlsCertificatePolicy + + +| Scope | Editions | Applicable OS | +|:--|:--|:--| +| ✅ Device
❌ User | ✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC | ✅ Windows Insider Preview | + + + +```Device +./Device/Vendor/MSFT/Policy/Config/Printers/ConfigureIppTlsCertificatePolicy +``` + + + + + + + + + + + +**Description framework properties**: + +| Property name | Property value | +|:--|:--| +| Format | `chr` (string) | +| Access Type | Add, Delete, Get, Replace | + + + + +[!INCLUDE [ADMX-backed policy note](includes/mdm-admx-policy-note.md)] + +**ADMX mapping**: + +| Name | Value | +|:--|:--| +| Name | ConfigureIppTlsCertificatePolicy | +| ADMX File Name | Printing.admx | + + + + + + + + ## ConfigureRedirectionGuardPolicy diff --git a/windows/client-management/mdm/vpnv2-csp.md b/windows/client-management/mdm/vpnv2-csp.md index 58d6463c97..f8ca2e1a8a 100644 --- a/windows/client-management/mdm/vpnv2-csp.md +++ b/windows/client-management/mdm/vpnv2-csp.md @@ -1,7 +1,7 @@ --- title: VPNv2 CSP description: Learn more about the VPNv2 CSP. -ms.date: 01/18/2024 +ms.date: 01/14/2025 --- @@ -863,11 +863,7 @@ Returns the type of App/Id. This value can be either of the following: PackageFa -False: Don't Bypass for Local traffic. - -True: ByPass VPN Interface for Local Traffic. - -Optional. When this setting is True, requests to local resources that are available on the same Wi-Fi network as the VPN client can bypass the VPN. For example, if enterprise policy for VPN requires force tunnel for VPN, but enterprise intends to allow the remote user to connect locally to media center in their home, then this option should be set to True. The user can bypass VPN for local subnet traffic. When this is set to False, the setting is disabled and no subnet exceptions are allowed. +Not supported. @@ -5160,11 +5156,7 @@ Returns the type of App/Id. This value can be either of the following: PackageFa -False: Don't Bypass for Local traffic. - -True: ByPass VPN Interface for Local Traffic. - -Optional. When this setting is True, requests to local resources that are available on the same Wi-Fi network as the VPN client can bypass the VPN. For example, if enterprise policy for VPN requires force tunnel for VPN, but enterprise intends to allow the remote user to connect locally to media center in their home, then this option should be set to True. The user can bypass VPN for local subnet traffic. When this is set to False, the setting is disabled and no subnet exceptions are allowed. +Not supported. diff --git a/windows/client-management/mdm/vpnv2-ddf-file.md b/windows/client-management/mdm/vpnv2-ddf-file.md index abe39e405a..8927c4cc29 100644 --- a/windows/client-management/mdm/vpnv2-ddf-file.md +++ b/windows/client-management/mdm/vpnv2-ddf-file.md @@ -1,7 +1,7 @@ --- title: VPNv2 DDF file description: View the XML file containing the device description framework (DDF) for the VPNv2 configuration service provider. -ms.date: 06/28/2024 +ms.date: 01/14/2025 --- @@ -1156,10 +1156,7 @@ The following XML file contains the device description framework (DDF) for the V - False : Do not Bypass for Local traffic - True : ByPass VPN Interface for Local Traffic - - Optional. When this setting is True, requests to local resources that are available on the same Wi-Fi network as the VPN client can bypass the VPN. For example, if enterprise policy for VPN requires force tunnel for VPN, but enterprise intends to allow the remote user to connect locally to media center in their home, then this option should be set to True. The user can bypass VPN for local subnet traffic. When this is set to False, the setting is disabled and no subnet exceptions are allowed. + Not supported. @@ -4425,10 +4422,7 @@ A device tunnel profile must be deleted before another device tunnel profile can - False : Do not Bypass for Local traffic - True : ByPass VPN Interface for Local Traffic - - Optional. When this setting is True, requests to local resources that are available on the same Wi-Fi network as the VPN client can bypass the VPN. For example, if enterprise policy for VPN requires force tunnel for VPN, but enterprise intends to allow the remote user to connect locally to media center in their home, then this option should be set to True. The user can bypass VPN for local subnet traffic. When this is set to False, the setting is disabled and no subnet exceptions are allowed. + Not supported. diff --git a/windows/client-management/toc.yml b/windows/client-management/toc.yml index 711bc21aea..955dee1921 100644 --- a/windows/client-management/toc.yml +++ b/windows/client-management/toc.yml @@ -48,7 +48,7 @@ items: href: enterprise-app-management.md - name: Manage updates href: device-update-management.md - - name: Updated Windows and Microsoft Copilot experience + - name: Updated Windows and Microsoft 365 Copilot Chat experience href: manage-windows-copilot.md - name: Manage Recall href: manage-recall.md diff --git a/windows/configuration/custom-logon/images/customlogoncad.jpg b/windows/configuration/custom-logon/images/customlogoncad.jpg new file mode 100644 index 0000000000..0f610d3b57 Binary files /dev/null and b/windows/configuration/custom-logon/images/customlogoncad.jpg differ diff --git a/windows/configuration/custom-logon/index.md b/windows/configuration/custom-logon/index.md new file mode 100644 index 0000000000..536cdcb8f9 --- /dev/null +++ b/windows/configuration/custom-logon/index.md @@ -0,0 +1,133 @@ +--- +title: Custom Logon +description: Custom Logon +ms.date: 03/05/2024 +ms.topic: overview +--- + +# Custom Logon + +You can use the Custom Logon feature to suppress Windows 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 don't 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. For more information about creating a custom logon experience, see [Winlogon and Credential Providers](/windows/win32/secauthn/winlogon-and-credential-providers). + +## Requirements + +Custom Logon can be enabled on: + +- Windows 10 Enterprise +- Windows 10 IoT Enterprise +- Windows 10 Education +- Windows 11 Enterprise +- Windows 11 IoT Enterprise +- Windows 11 Education + +## Terminology + +**Turn on, enable:** To make the feature available and optionally apply 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 subsettings. + +**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. + +## Turn on Custom Logon + +Custom Logon is an optional component and isn't turned on by default in Windows 10. It must be turned on prior to configuring. You can turn on and configure Custom Logon in a customized Windows 10 image (.wim) if Microsoft Windows hasn't been installed. If Windows has already been installed and you're applying a provisioning package to configure Custom Logon, you must first turn on Custom Logon in order for a provisioning package to be successfully applied. + +The Custom Logon feature is available in the Control Panel. You can set Custom Logon by following these steps: + +### Turn on Custom Logon in Control Panel + +1. In the Windows search bar, type **Turn Windows features on or off** and either press **Enter** or tap or select **Turn Windows features on or off** to open the **Windows Features** window. +1. In the **Windows Features** window, expand the **Device Lockdown** node, and select (to turn on) or clear (to turn off) the checkbox for **Custom Logon**. +1. Select **OK**. The **Windows Features** window indicates that Windows is searching for required files and displays a progress bar. Once found, the window indicates that Windows is applying the changes. When completed, the window indicates the requested changes are completed. + +### Turn on Custom Logon using DISM + +1. Open a command prompt with administrator rights. +1. Enable the feature using the following command. + + ```cmd + dism /online /enable-feature /featureName:Client-EmbeddedLogon + ``` + +## Configure Custom Logon + +### Configure Custom Logon settings using Unattend + +You can configure the Unattend settings in the [Microsoft-Windows-Embedded-EmbeddedLogon](/windows-hardware/customize/desktop/unattend/microsoft-windows-embedded-embeddedlogon) component to add custom logon features to your image during the design or imaging phase. You can manually create an Unattend answer file or use Windows System Image Manager (Windows SIM) to add the appropriate settings to your answer file. For more information about the custom logon settings and XML examples, see the settings in Microsoft-Windows-Embedded-EmbeddedLogon. + +The following example shows how to disable all Welcome screen UI elements and the **Switch user** button. + +```xml + + + 17 + 1 + 1 + 1 + 1 + + +``` + +### Remove buttons from Logon screen + +To remove buttons from the Welcome screen, set the appropriate value for **BrandingNeutral** in the following registry key: + +```text +HKLM\Software\Microsoft\Windows Embedded\EmbeddedLogon +``` + +1. Make sure you have enabled Custom Logon following the instructions in [Turn on Custom Logon](#turn-on-custom-logon). +1. In the Windows search bar, type "Registry Editor" to open the **Registry Editor** window. +1. Use the file navigation in the left pane to access **HKLM\Software\Microsoft\Windows Embedded\EmbeddedLogon**. +1. In the right pane, right click on **BrandingNeutral** and select **Modify**. +1. Select the correct **Base** and enter the value for your desired customizations according to the following table, and click **OK** to apply the changes. + +> [!NOTE] +> Changing the **Base** of **BrandingNeutral** will automatically convert the value field to the selected base. To ensure you are getting the correct value, select the base before entering the value. + +The following table shows the possible values. To disable multiple Logon screen UI elements together, you can select the **Decimal** base when modifying the **BrandingNeutral** value, and combine actions by adding the decimal values of the desired actions and inputting the sum as the value of **BrandingNeutral**. For example, to disable the Power button and the Language button, select the decimal option for the base, then add the decimal values of each, in this case 2 and 4 respectively, and input the total (6) as the value for **BrandingNeutral**. + +| Action |Description| Registry value (Hexadecimal) | Registry value (Decimal)| +|--------|------------|----|---| +| Disable all Logon screen UI elements |Disables the Power, Language, and Ease of Access buttons on the Logon and Ctrl+Alt+Del screens. |`0x1` | 1| +| Disable the Power button |Disables the Power button on the Logon and Ctrl+Alt+Del screens.|`0x2` |2| +| Disable the Language button |Disables the Language button on the Logon and Ctrl+Alt+Del screens.|`0x4` |4| +| Disable the Ease of Access button |Disables the Ease of Access button on the Logon and Ctrl+Alt+Del screens.|`0x8` |8| +| Disable the Switch user button |Disables the Switch User button from the Ctrl+Alt+Del screen, preventing a user from switching accounts. | `0x10` |16| +|Disable the Blocked Shutdown Resolver (BSDR) screen|Disables the Blocked Shutdown Resolver (BSDR) screen so that restarting or shutting down the system causes the OS to immediately force close any open applications that are blocking system shut down. No UI is displayed, and users aren't given a chance to cancel the shutdown process. | `0x20` |32| + +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're hidden from the UI. + +![custom logon screen](images/customlogoncad.jpg) + +You can remove the Wireless UI option from the Welcome screen by using Group Policy. + +### Remove Wireless UI from Logon screen + +You use the following steps to remove Wireless UI from the Welcome screen + +1. From a command prompt, run gpedit.msc to open the Local Group Policy Editor. +1. In the Local Group Policy Editor, under **Computer Configuration**, expand **Administrative Templates**, expand **System**, and then tap or click **Logon**. +1. Double-tap or click **Do not display network selection UI**. + +## Additional Customizations + +The following table shows additional customizations that can be made using registry keys. + +|Action |Path |Registry Key and Value | +|---------|---------|---------| +|Hide Autologon UI |HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Embedded\EmbeddedLogon |`HideAutoLogonUI = 1`| +|Hide First Logon Animation |HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Embedded\EmbeddedLogon |`HideFirstLogonAnimation = 1` | +|Disable Authentication Animation |HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI |`AnimationDisabled = 1` | +|Disable Lock Screen | HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization |`NoLockScreen = 1` | + +## Related articles + +- [Troubleshooting Custom Logon](troubleshoot.md) +- [Unbranded Boot](../unbranded-boot/index.md) +- [Shell Launcher](../shell-launcher/index.md) diff --git a/windows/configuration/custom-logon/troubleshoot.md b/windows/configuration/custom-logon/troubleshoot.md new file mode 100644 index 0000000000..abb65828de --- /dev/null +++ b/windows/configuration/custom-logon/troubleshoot.md @@ -0,0 +1,105 @@ +--- +title: Troubleshooting Custom Logon +description: Troubleshooting Custom Logon +ms.date: 05/02/2017 +ms.topic: troubleshooting +--- + +# Troubleshooting Custom Logon + +This section highlights some common issues that you may encounter when using Custom Logon. + +## When automatic sign-in is enabled, the device asks for a password when resuming from sleep or hibernate + +This can occur when your device is configured to require a password when waking up from a sleep state. + +### To disable password protection on wake-up + +1. If you have write filters enabled on your device, perform the following steps to disable them so that you can save setting changes: + + 1. At an administrator command prompt, type the following command: + + ```cmd + uwfmgr.exe filter disable + ``` + + 1. To restart the device, type the following command: + + ```cmd + uwfmgr.exe restart + ``` + +1. In **Contol Panel**, search for **Power Options** , and then select the Power Options heading. + +1. Under the **Power Options** heading, select **Require a password on wake up**. + +1. On the **Define power buttons and turn on password protection** page, under **Password protection on wakeup**, select **Don't require a password**. + +1. If you have disabled write filters, perform the following steps to enable them again: + + 1. At an administrator command prompt, type the following command: + + ```cmd + uwfmgr.exe filter enable + ``` + + 1. To restart the device, type the following command: + + ```cmd + uwfmgr.exe restart + ``` + +## The device displays a black screen during setup + +Set the **HideAutoLogonUI** and **AnimationDisabled** settings to **0** (zero). The device will then display a default screen during setup. + +## The device displays a black screen when Ctrl+Alt+Del is pressed + +**HideAutoLogonUI** and**ForceAutoLogon** have known issues when used together. To avoid a black screen, we recommend you use Keyboard Filter to block this key combination. + +## The device displays a black screen when Windows key + L is used to lock the device + +**HideAutoLogonUI** and **ForceAutoLogon** have known issues when used together. To avoid a black screen, we recommend you use Keyboard Filter to block this key combination. + +### The device displays a black screen when Notepad is opened, any characters are typed and the current user signs out, or the device is rebooted, or the device is shut down + +**HideAutoLogonUI** and **ForceAutoLogon** have known issues when used together. To avoid a black screen, we recommend you disable the Blocked Shutdown Resolver Screen (BSDR). + +> [!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 aren't 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 wake-up. + +### To disable password protection on wake-up + +1. In **Control Panel**, select **Power Options**. + +1. In the **Power Options** item, select **Require a password on wake up**. + +1. On the **Define power buttons and turn on password protection** page, under **Password protection on wake up**, 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. + +1. Type the following, replacing *<accountname>* with the name of the account you want to remove the password expiration from. + + ```cmd + net accounts /expires:never + ``` + +### To set passwords to never expire on all user accounts + +1. On your device, open a command prompt with administrator privileges. + +1. Type the following + + ```cmd + net accounts /MaxPWAge:unlimited + ``` diff --git a/windows/configuration/docfx.json b/windows/configuration/docfx.json index 32f9c41247..22924a43cc 100644 --- a/windows/configuration/docfx.json +++ b/windows/configuration/docfx.json @@ -80,12 +80,18 @@ "assigned-access//**/*.yml": "paolomatarazzo", "cellular//**/*.md": "paolomatarazzo", "cellular//**/*.yml": "paolomatarazzo", + "custom-logon//**/*.md": "terrywarwick", + "custom-logon//**/*.yml": "terrywarwick", + "keyboard-filter//**/*.md": "terrywarwick", + "keyboard-filter//**/*.yml": "terrywarwick", "lock-screen//**/*.md": "paolomatarazzo", "lock-screen//**/*.yml": "paolomatarazzo", "provisioning-packages//**/*.md": "vinaypamnani-msft", "provisioning-packages//**/*.yml": "vinaypamnani-msft", "shared-pc//**/*.md": "paolomatarazzo", "shared-pc//**/*.yml": "paolomatarazzo", + "shell-launcher//**/*.md": "terrywarwick", + "shell-launcher//**/*.yml": "terrywarwick", "start//**/*.md": "paolomatarazzo", "start//**/*.yml": "paolomatarazzo", "store//**/*.md": "paolomatarazzo", @@ -94,6 +100,10 @@ "taskbar//**/*.yml": "paolomatarazzo", "tips//**/*.md": "paolomatarazzo", "tips//**/*.yml": "paolomatarazzo", + "unbranded-boot//**/*.md": "terrywarwick", + "unbranded-boot//**/*.yml": "terrywarwick", + "unified-write-filter//**/*.md": "terrywarwick", + "unified-write-filter//**/*.yml": "terrywarwick", "wcd//**/*.md": "vinaypamnani-msft", "wcd//**/*.yml": "vinaypamnani-msft" }, @@ -104,12 +114,18 @@ "assigned-access//**/*.yml": "paoloma", "cellular//**/*.md": "paoloma", "cellular//**/*.yml": "paoloma", + "custom-logon//**/*.md": "twarwick", + "custom-logon//**/*.yml": "twarwick", "lock-screen//**/*.md": "paoloma", + "keyboard-filter//**/*.md": "twarwick", + "keyboard-filter//**/*.yml": "twarwick", "lock-screen//**/*.yml": "paoloma", "provisioning-packages//**/*.md": "vinpa", "provisioning-packages//**/*.yml": "vinpa", "shared-pc//**/*.md": "paoloma", "shared-pc//**/*.yml": "paoloma", + "shell-launcher//**/*.md": "twarwick", + "shell-launcher//**/*.yml": "twarwick", "start//**/*.md": "paoloma", "start//**/*.yml": "paoloma", "store//**/*.md": "paoloma", @@ -118,6 +134,10 @@ "taskbar//**/*.yml": "paoloma", "tips//**/*.md": "paoloma", "tips//**/*.yml": "paoloma", + "unbranded-boot//**/*.md": "twarwick", + "unbranded-boot//**/*.yml": "twarwick", + "unified-write-filter//**/*.md": "twarwick", + "unified-write-filter//**/*.yml": "twarwick", "wcd//**/*.md": "vinpa", "wcd//**/*.yml": "vinpa" }, diff --git a/windows/configuration/keyboard-filter/disable-all-blocked-key-combinations.md b/windows/configuration/keyboard-filter/disable-all-blocked-key-combinations.md new file mode 100644 index 0000000000..9a5c32fb35 --- /dev/null +++ b/windows/configuration/keyboard-filter/disable-all-blocked-key-combinations.md @@ -0,0 +1,74 @@ +--- +title: Disable all blocked key combinations +description: Disable all blocked key combinations +ms.date: 01/13/2025 +ms.topic: reference +--- + +# Disable all blocked key combinations + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +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 aren't removed, but Keyboard Filter stops blocking any keys. + +## Disable-all-rules.ps1 + +```powershell +# +# 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 + +Get-WMIObject -class WEKF_PredefinedKey @CommonParams | + foreach { + if ($_.Enabled) { + $_.Enabled = 0; + $_.Put() | Out-Null; + Write-Host Disabled $_.Id + } + } + +Get-WMIObject -class WEKF_CustomKey @CommonParams | + foreach { + if ($_.Enabled) { + $_.Enabled = 0; + $_.Put() | Out-Null; + Write-Host Disabled $_.Id + } + } + +Get-WMIObject -class WEKF_Scancode @CommonParams | + foreach { + if ($_.Enabled) { + $_.Enabled = 0; + $_.Put() | Out-Null; + "Disabled {0}+{1:X4}" -f $_.Modifiers,$_.Scancode + } + } +``` + +## Related articles + +- [Windows PowerShell script samples for keyboard filter](keyboardfilter-powershell-script-samples.md) +- [Keyboard filter WMI provider reference](keyboardfilter-wmi-provider-reference.md) +- [Keyboard filter](index.md) diff --git a/windows/configuration/keyboard-filter/index.md b/windows/configuration/keyboard-filter/index.md new file mode 100644 index 0000000000..6f7d3cc589 --- /dev/null +++ b/windows/configuration/keyboard-filter/index.md @@ -0,0 +1,144 @@ +--- +title: Keyboard Filter +description: Keyboard Filter +ms.date: 01/13/2025 +ms.topic: overview +--- + +# Keyboard Filter + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +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 behavior might 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. Switching from one language to another might cause the location of suppressed keys on the keyboard layout to change. Keyboard Filter detects these dynamic layout changes and continues to suppress keys correctly. + +> [!NOTE] +> Keyboard filter is not supported in a remote desktop session. + +## Terminology + +- **Turn on, enable:** 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 subsettings +- **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 + +## Turn on Keyboard Filter + +By default, Keyboard Filter isn't turned on. You can turn Keyboard Filter on or off for your device by using the following steps. + +Turning on an off Keyboard Filter requires that you restart your device. Keyboard Filter is automatically enabled after the restart. + +### Turn on Keyboard Filter by using Control Panel + +1. In the Windows search bar, type **Turn Windows features on or off** and either press **Enter** or tap or select **Turn Windows features on or off** to open the **Windows Features** window. +1. In the **Windows Features** window, expand the **Device Lockdown** node, and select (to turn on) or clear (to turn off) the checkbox for **Keyboard Filter**. +1. Select **OK**. The **Windows Features** window indicates that Windows is searching for required files and displays a progress bar. Once found, the window indicates that Windows is applying the changes. When completed, the window indicates the requested changes are completed. +1. Restart your device to apply the changes. + +### Configure Keyboard using Unattend + +1. You can configure the Unattend settings in the [Microsoft-Windows-Embedded-KeyboardFilterService](/windows-hardware/customize/desktop/unattend/microsoft-windows-embedded-keyboardfilterservice) component to add Keyboard Filter features to your image during the design or imaging phase. +1. You can manually create an Unattend answer file or use Windows System Image Manager (Windows SIM) to add the appropriate settings to your answer file. For more information about the keyboard filter settings and XML examples, see the settings in [Microsoft-Windows-Embedded-KeyboardFilterService](/windows-hardware/customize/desktop/unattend/microsoft-windows-embedded-keyboardfilterservice). + +### Turn on and configure Keyboard Filter using Windows Configuration Designer + +The Keyboard Filter settings are also available as Windows provisioning settings so you can configure these settings to be applied during the image deployment time or runtime. You can set one or all keyboard filter settings by creating a provisioning package using Windows Configuration Designer and then applying the provisioning package during image deployment time or runtime. + +1. Build a provisioning package in Windows Configuration Designer by following the instructions in [Create a provisioning package](/windows/configuration/provisioning-packages/provisioning-create-package), selecting the **Advanced Provisioning** option. + + > [!Note] + > In the **Choose which settings to view and configure** window, choose **Common to all Windows desktop editions**. + +1. On the **Available customizations** page, select **Runtime settings** > **SMISettings**, and then set the desired values for the keyboard filter settings. +1. Once you have finished configuring the settings and building the provisioning package, you can apply the package to the image deployment time or runtime. For more information, see [Apply a provisioning package](/windows/configuration/provisioning-packages/provisioning-apply-package). + +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](/windows-hardware/manufacture/desktop/what-is-dism). + +### Turn on and configure Keyboard Filter by using DISM + +1. Open a command prompt with administrator privileges. +1. Enable the feature using the following command. + + ```cmd + Dism /online /Enable-Feature /FeatureName:Client-KeyboardFilter + ``` + +1. Once the script completes, restart the device to apply the change. + +## Keyboard Filter features + +Keyboard Filter has the following features: + +- Supports hardware keyboards, the standard Windows on-screen keyboard, and the touch keyboard (TabTip.exe) +- Suppresses key combinations even when they come from multiple keyboards + + For example, if a user presses the Ctrl key and the Alt key on a hardware keyboard, while at the same time pressing Delete on a software keyboard, Keyboard Filter can still detect and suppress the Ctrl+Alt+Delete functionality. + +- Supports numeric keypads and keys designed to access media player and browser functionality +- Can configure a key to breakout of a locked down user session to return to the Welcome screen +- Automatically handles dynamic layout changes +- Can be enabled or disabled for administrator accounts +- Can force disabling of Ease of Access functionality +- Supports x86 and x64 architectures + +## Keyboard scan codes and layouts + +When a key is pressed on a physical keyboard, the keyboard sends a scan code to the keyboard driver. The driver then sends the scan code to the OS and the OS converts the scan code into a virtual key based on the current active layout. The layout defines the mapping of keys on the physical keyboard, and has many variants. A key on a keyboard always sends the same scan code when pressed, however this scan code can map to different virtual keys for different layouts. For example, in the English (United States) keyboard layout, the key to the right of the P key maps to `{`. However, in the Swedish (Sweden) keyboard layout, the same key maps to `Å`. + +Keyboard Filter can block keys either by the scan code or the virtual key. Blocking keys by the scan code is useful for custom keyboards that have special scan codes that don't translate into any single virtual key. Blocking keys by the virtual key is more convenient because it's easier to read and Keyboard Filter suppresses the key correctly even when the location of the key changes because of a layout change. + +When you configure Keyboard Filter to block keys by using the virtual key, you must use the English names for the virtual keys. For more information about the names of the virtual keys, see keyboard filter key names. + +For the Windows on-screen keyboard, keyboard filter converts each keystroke into a scan code based on the layout, and back into a virtual key. This allows keyboard filter to suppress the on-screen keyboard keys in the same manner as physical keyboard keys if they're configured with either scan code or virtual key. + +## Keyboard Filter and ease of access features + +By default, ease of access features are enabled and Keyboard Filter is disabled for administrator accounts. + +If Sticky Keys are enabled, a user can bypass Keyboard Filter in certain situations. You can configure keyboard filter to disable all ease of access features and prevent users from enabling them. + +You can enable ease of access features for administrator accounts, while still disabling them for standard user accounts, by making sure that Keyboard Filter is disabled for administrator accounts. + +## Keyboard Filter configuration + +You can configure the following options for Keyboard Filter: + +- Set/unset predefined key combinations to be suppressed +- Add/remove custom defined key combinations to be suppressed +- Enable/disable keyboard filter for administrator accounts +- Force disabling ease of access features +- Configure a breakout key sequence to break out of a locked down account + +Most configuration changes take effect immediately. Some changes, such as enabling or disabling Keyboard Filter for administrators, don't take effect until the user signs out of the account and then back in. If you change the breakout key scan code, you must restart the device before the change take effect. + +You can configure keyboard filter by using Windows Management Instrumentation (WMI) providers. You can use the Keyboard Filter WMI providers directly in a PowerShell script or in an application. + +For more information about Keyboard Filter WMI providers, see [Keyboard Filter WMI provider reference](keyboardfilter-wmi-provider-reference.md). + +## 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. A user can press this key consecutively five times to switch to 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_Settings](wekf-settings.md) WMI 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. + +## Keyboard Filter considerations + +Starting a device in Safe Mode bypasses keyboard filter. The Keyboard Filter service isn't loaded in Safe Mode, and keys aren't blocked in Safe Mode. + +Keyboard filter can't block the Sleep key. + +Some hardware keys, such as rotation lock, don't have a defined virtual key. You can still block these keys by using the scan code of the key. + +The add (+), multiply (\*), subtract (-), divide (/), and decimal (.) keys have different virtual keys and scan codes on the numeric keypad than on the main keyboard. You must block both keys to block these keys. For example, to block the multiply key, you must add a rule to block "\*" and a rule to block Multiply. + +When locking the screen by using the on-screen keyboard, or a combination of a physical keyboard and the on-screen keyboard, the on-screen keyboard sends an extra Windows logo key keystroke to the OS. If your device is using the Windows 10 shell and you use keyboard filter to block Windows logo key+L, the extra Windows logo key keystroke causes the shell to switch between the **Start** screen and the last active app when a user attempts to lock the device by using the on-screen keyboard, which may be unexpected behavior. + +Some custom keyboard software, such as Microsoft IntelliType Pro, can install Keyboard Filter drivers that prevent Keyboard Filter from being able to block some or all keys, typically extended keys like BrowserHome and Search. + +## In this section + +- [Keyboard Filter key names](keyboardfilter-key-names.md) +- [Predefined key combinations](predefined-key-combinations.md) +- [Keyboard Filter WMI provider reference](keyboardfilter-wmi-provider-reference.md) +- [Windows PowerShell script samples for Keyboard Filter](keyboardfilter-powershell-script-samples.md) \ No newline at end of file diff --git a/windows/configuration/keyboard-filter/keyboardfilter-add-blocked-key-combinations.md b/windows/configuration/keyboard-filter/keyboardfilter-add-blocked-key-combinations.md new file mode 100644 index 0000000000..129b6e271b --- /dev/null +++ b/windows/configuration/keyboard-filter/keyboardfilter-add-blocked-key-combinations.md @@ -0,0 +1,160 @@ +--- +title: Add blocked key combinations +description: Add blocked key combinations +ms.date: 01/13/2025 +ms.topic: reference +--- + +# Add blocked key combinations + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +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 + +```powershell +# +# 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 +#> + + $predefined = Get-WMIObject -class WEKF_PredefinedKey @CommonParams | + where { + $_.Id -eq "$Id" + }; + + 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. +#> + + $custom = Get-WMIObject -class WEKF_CustomKey @CommonParams | + where { + $_.Id -eq "$Id" + }; + + 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."; + } +} + +function Enable-Scancode($Modifiers, [int]$Code) { + <# + .Synopsis + Toggle on a Scancode keyboard filter Rule + .Description + Use Get-WMIObject to enumerate all WEKF_Scancode instances, + filter against key values of "Modifiers" and "Scancode", and set + that instance's "Enabled" property to 1/true. + + 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 + + "Added Custom Scancode {0}+{1:X4}" -f $Modifiers, $Code + } +} + +# Some example uses of the functions defined above. +Enable-Predefined-Key "Ctrl+Alt+Del" +Enable-Predefined-Key "Ctrl+Esc" +Enable-Custom-Key "Ctrl+V" +Enable-Custom-Key "Numpad0" +Enable-Custom-Key "Shift+Numpad1" +Enable-Custom-Key "%" +Enable-Scancode "Ctrl" 37 +``` + +## Related topics + +[Windows PowerShell script samples for keyboard filter](keyboardfilter-powershell-script-samples.md) + +[Keyboard filter WMI provider reference](keyboardfilter-wmi-provider-reference.md) + +[Keyboard filter](index.md) diff --git a/windows/configuration/keyboard-filter/keyboardfilter-key-names.md b/windows/configuration/keyboard-filter/keyboardfilter-key-names.md new file mode 100644 index 0000000000..9fe1380150 --- /dev/null +++ b/windows/configuration/keyboard-filter/keyboardfilter-key-names.md @@ -0,0 +1,179 @@ +--- +title: Keyboard Filter key names +description: Keyboard Filter key names +ms.date: 01/13/2025 +ms.topic: reference +--- + +# Keyboard Filter key names + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +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 following tables, you can use the predefined key combinations names as custom key combinations. However, we recommend using the predefined key settings when enabling or disabling predefined key combinations. + +The key names are grouped as follows: + +- [Modifier keys](#modifier-keys) +- [System keys](#system-keys) +- [Cursor and edit keys](#cursor-and-edit-keys) +- [State keys](#state-keys) +- [OEM keys](#oem-keys) +- [Function keys](#function-keys) +- [Numeric keypad keys](#numeric-keypad-keys) + +## Modifier keys + +You can use the modifier keys listed in the following table when you configure keyboard filter. Multiple modifiers are 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. + +| Modifier key name | Virtual key | Description | +| ----------------- | ----------- | ----------- | +| `Ctrl` | VK_CONTROL | The Ctrl key | +| `LCtrl` | VK_LCONTROL | The left Ctrl key | +| `RCtrl` | VK_RCONTROL | The right Ctrl key | +| `Control` | VK_CONTROL | The Ctrl key | +| `LControl` | VK_LCONTROL | The left Ctrl key | +| `RControl` | VK_RCONTROL | The right Ctrl key | +| `Alt` | VK_MENU | The Alt key | +| `LAlt` | VK_LMENU | The left Alt key | +| `RAlt` | VK_RMENU | The right Alt key | +| `Shift` | VK_SHIFT | The Shift key | +| `LShift` | VK_LSHIFT | The left Shift key | +| `RShift` | VK_RSHIFT | The right Shift key | +| `Win` | VK_WIN | The Windows logo key | +| `LWin` | VK_LWIN | The left Windows logo key | +| `RWin` | VK_RWIN | The right Windows logo key | +| `Windows` | VK_WIN | The Windows logo key | +| `LWindows` | VK_LWIN | The left Windows logo key | +| `RWindows` | VK_RWIN | The right Windows key | + +## System keys + +| Modifier key name | Virtual key | Description | +| ----------------- | ----------- | ----------- | +| `Ctrl` | VK_CONTROL | The Ctrl key | +| `LCtrl` | VK_LCONTROL | The left Ctrl key | +| `RCtrl` | VK_RCONTROL | The right Ctrl key | +| `Control` | VK_CONTROL | The Ctrl key | +| `LControl` | VK_LCONTROL | The left Ctrl key | +| `RControl` | VK_RCONTROL | The right Ctrl key | +| `Alt` | VK_MENU | The Alt key | +| `LAlt` | VK_LMENU | The left Alt key | +| `RAlt` | VK_RMENU | The right Alt key | +| `Shift` | VK_SHIFT | The Shift key | +| `LShift` | VK_LSHIFT | The left Shift key | +| `RShift` | VK_RSHIFT | The right Shift key | +| `Win` | VK_WIN | The Windows logo key | +| `LWin` | VK_LWIN | The left Windows logo key | +| `RWin` | VK_RWIN | The right Windows logo key | +| `Windows` | VK_WIN | The Windows logo key | +| `LWindows` | VK_LWIN | The left Windows logo key | +| `RWindows` | VK_RWIN | The right Windows logo key | + +## Cursor and edit keys + +| Key name | Virtual key | Description | +| ----------------- | ----------- | ----------- | +| `PageUp` | VK_PRIOR | The Page Up key | +| `Prior` | VK_PRIOR | The Page Up key | +| `PgUp` | VK_PRIOR | The Page Up key | +| `PageDown` | VK_NEXT | The Page Down key | +| `PgDown` | VK_NEXT | The Page Down key | +| `Next` | VK_NEXT | The Page Down key | +| `End` | VK_END | The End key | +| `Home` | VK_HOME | The Home key | +| `Left` | VK_LEFT | The Left Arrow key | +| `Up` | VK_UP | The Up Arrow key | +| `Right` | VK_RIGHT | The Right Arrow key | +| `Down` | VK_DOWN | The Down Arrow key | +| `Insert` | VK_INSERT | The Insert key | +| `Delete` | VK_DELETE | The Delete key | +| `Del` | VK_DELETE | The Delete key | +| `Separator` | VK_SEPARATOR | The Separator key | + +## State keys + +| Key name | Virtual key | Description | +| ----------------- | ----------- | ----------- | +| `NumLock` | VK_NUMLOCK | The Num Lock key | +| `ScrollLock` | VK_SCROLL | The Scroll Lock key | +| `Scroll` | VK_SCROLL | The Scroll Lock key | +| `CapsLock` | VK_CAPITAL | The Caps Lock key | +| `Capital` | VK_CAPITAL | The Caps Lock key | + +## OEM keys + +| Key name | Virtual key | Description | +| ----------------- | ----------- | ----------- | +| `KeypadEqual` | VK_OEM_NEC_EQUAL | The Equals (=) key on the numeric keypad (OEM-specific) | +| `Dictionary` | VK_OEM_FJ_JISHO | The Dictionary key (OEM-specific) | +| `Unregister` | VK_OEM_FJ_MASSHOU | The Unregister Word key (OEM-specific) | +| `Register` | VK_OEM_FJ_TOUROKU | The Register Word key (OEM-specific) | +| `LeftOyayubi` | VK_OEM_FJ_LOYA | The Left OYAYUBI key (OEM-specific) | +| `RightOyayubi` | VK_OEM_FJ_ROYA | The Right OYAYUBI key (OEM-specific) | +| `OemPlus` | VK_OEM_PLUS | For any country/region, the Plus Sign (+) key | +| `OemComma` | VK_OEM_COMMA | For any country/region, the Comma (,) key | +| `OemMinus` | VK_OEM_MINUS | For any country/region, the Minus Sign (-) key | +| `OemPeriod` | VK_OEM_PERIOD | For any country/region, the Period (.) key | +| `Oem1` | VK_OEM_1 | Varies by keyboard | +| `Oem2` | VK_OEM_2 | Varies by keyboard | +| `Oem3` | VK_OEM_3 | Varies by keyboard | +| `Oem4` | VK_OEM_4 | Varies by keyboard | +| `Oem5` | VK_OEM_5 | Varies by keyboard | +| `Oem6` | VK_OEM_6 | Varies by keyboard | +| `Oem7` | VK_OEM_7 | Varies by keyboard | +| `Oem8` | VK_OEM_8 | Varies by keyboard | +| `OemAX` | VK_OEM_AX | The AX key on a Japanese AX keyboard | +| `Oem102` | VK_OEM_102 | Either the angle bracket key or the backslash key on the RT 102-key keyboard | + +## Function keys + +| Key name | Virtual key | Description | +| ----------------- | ----------- | ----------- | +| `F1` | VK_F1 | The F1 key | +| `F2` | VK_F2 | The F2 key | +| `F3` | VK_F3 | The F3 key | +| `F4` | VK_F4 | The F4 key | +| `F5` | VK_F5 | The F5 key | +| `F6` | VK_F6 | The F6 key | +| `F7` | VK_F7 | The F7 key | +| `F8` | VK_F8 | The F8 key | +| `F9` | VK_F9 | The F9 key | +| `F10` | VK_F10 | The F10 key | +| `F11` | VK_F11 | The F11 key | +| `F12` | VK_F12 | The F12 key | +| `F13` | VK_F13 | The F13 key | +| `F14` | VK_F14 | The F14 key | +| `F15` | VK_F15 | The F15 key | +| `F16` | VK_F16 | The F16 key | +| `F17` | VK_F17 | The F17 key | +| `F18` | VK_F18 | The F18 key | +| `F19` | VK_F19 | The F19 key | +| `F20` | VK_F20 | The F20 key | +| `F21` | VK_F21 | The F21 key | +| `F22` | VK_F22 | The F22 key | +| `F23` | VK_F23 | The F23 key | +| `F24` | VK_F24 | The F24 key | + +## Numeric keypad keys + +| Key name | Virtual key | Description | +| ----------------- | ----------- | ----------- | +| `Numpad0` | VK_NUMPAD0 | The 0 key on the numeric keypad | +| `Numpad1` | VK_NUMPAD1 | The 1 key on the numeric keypad | +| `Numpad2` | VK_NUMPAD2 | The 2 key on the numeric keypad | +| `Numpad3` | VK_NUMPAD3 | The 3 key on the numeric keypad | +| `Numpad4` | VK_NUMPAD4 | The 4 key on the numeric keypad | +| `Numpad5` | VK_NUMPAD5 | The 5 key on the numeric keypad | +| `Numpad6` | VK_NUMPAD6 | The 6 key on the numeric keypad | +| `Numpad7` | VK_NUMPAD7 | The 7 key on the numeric keypad | +| `Numpad8` | VK_NUMPAD8 | The 8 key on the numeric keypad | +| `Numpad9` | VK_NUMPAD9 | The 9 key on the numeric keypad | +| `Multiply` | VK_MULTIPLY | The Multiply (*) key on the numeric keypad | +| `Add` | VK_ADD | The Add (+) key on the numeric keypad | +| `Subtract` | VK_SUBTRACT | The Subtract (-) key on the numeric keypad | +| `Decimal` | VK_DECIMAL | The Decimal (.) key on the numeric keypad | +| `Divide` | VK_DIVIDE | The Divide (/) key on the numeric keypad | + +## Related articles + +- [Keyboard filter](index.md) diff --git a/windows/configuration/keyboard-filter/keyboardfilter-list-all-configured-key-combinations.md b/windows/configuration/keyboard-filter/keyboardfilter-list-all-configured-key-combinations.md new file mode 100644 index 0000000000..35788409b1 --- /dev/null +++ b/windows/configuration/keyboard-filter/keyboardfilter-list-all-configured-key-combinations.md @@ -0,0 +1,71 @@ +--- +title: List all configured key combinations +description: List all configured key combinations +ms.date: 01/13/2025 +ms.topic: reference +--- + +# List all configured key combinations + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +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 + +```powershell +# +# 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 + +write-host Enabled Predefined Keys -foregroundcolor cyan +Get-WMIObject -class WEKF_PredefinedKey @CommonParams | + foreach { + if ($_.Enabled) { + write-host $_.Id + } + } + +write-host Enabled Custom Keys -foregroundcolor cyan +Get-WMIObject -class WEKF_CustomKey @CommonParams | + foreach { + if ($_.Enabled) { + write-host $_.Id + } + } + +write-host Enabled Scancodes -foregroundcolor cyan +Get-WMIObject -class WEKF_Scancode @CommonParams | + foreach { + if ($_.Enabled) { + "{0}+{1:X4}" -f $_.Modifiers, $_.Scancode + } + } +``` + +## Related articles + +[Windows PowerShell script samples for keyboard filter](keyboardfilter-powershell-script-samples.md) + +[Keyboard filter WMI provider reference](keyboardfilter-wmi-provider-reference.md) + +[Keyboard filter](index.md) diff --git a/windows/configuration/keyboard-filter/keyboardfilter-powershell-script-samples.md b/windows/configuration/keyboard-filter/keyboardfilter-powershell-script-samples.md new file mode 100644 index 0000000000..7547ba9614 --- /dev/null +++ b/windows/configuration/keyboard-filter/keyboardfilter-powershell-script-samples.md @@ -0,0 +1,26 @@ +--- +title: Windows PowerShell script samples for Keyboard Filter +description: Windows PowerShell script samples for Keyboard Filter +ms.date: 01/13/2025 +ms.topic: reference +--- + +# Windows PowerShell script samples for Keyboard Filter + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +The list below describes sample Windows PowerShell scripts that demonstrate how to use the Windows Management Instrumentation (WMI) providers for Keyboard Filter. + +| Script | Description | +| ------ | ----------- | +| [Add blocked key combinations](keyboardfilter-add-blocked-key-combinations.md) | Demonstrates how to block key combinations for Keyboard Filter.| +| [Disable all blocked key combinations](disable-all-blocked-key-combinations.md) | Demonstrates how to disable all blocked key combinations for Keyboard Filter. | +| [List all configured key combinations](keyboardfilter-list-all-configured-key-combinations.md) | Demonstrates how to list all defined key combination configurations for Keyboard Filter. | +| [Modify global settings](modify-global-settings.md) | Demonstrates how to modify global settings for Keyboard Filter. | +| [Remove key combination configurations](remove-key-combination-configurations.md) | Demonstrates how to remove a custom defined key combination configuration for Keyboard Filter. | + +## Related articles + +[Keyboard Filter WMI provider reference](keyboardfilter-wmi-provider-reference.md) + +[Keyboard Filter](index.md) diff --git a/windows/configuration/keyboard-filter/keyboardfilter-wmi-provider-reference.md b/windows/configuration/keyboard-filter/keyboardfilter-wmi-provider-reference.md new file mode 100644 index 0000000000..eeff8800eb --- /dev/null +++ b/windows/configuration/keyboard-filter/keyboardfilter-wmi-provider-reference.md @@ -0,0 +1,23 @@ +--- +title: Keyboard Filter WMI provider reference +description: Keyboard Filter WMI provider reference +ms.date: 01/13/2025 +ms.topic: reference +--- + +# Keyboard Filter WMI provider reference + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +Describes the Windows Management Instrumentation (WMI) provider classes that you use to configure Keyboard Filter during run time. + +| WMI Provider Class | Description | +| ------------------ | ----------- | +| [WEKF_CustomKey](wekf-customkey.md) | Blocks or unblocks custom defined key combinations. | +| [WEKF_PredefinedKey](wekf-predefinedkey.md) | Blocks or unblocks predefined key combinations. | +| [WEKF_Scancode](wekf-scancode.md) | Blocks or unblocks key combinations by using keyboard scan codes. | +| [WEKF_Settings](wekf-settings.md) | Enables or disables settings for Keyboard Filter. | + +## Related topics + +[Keyboard filter](index.md) diff --git a/windows/configuration/keyboard-filter/modify-global-settings.md b/windows/configuration/keyboard-filter/modify-global-settings.md new file mode 100644 index 0000000000..39d26be872 --- /dev/null +++ b/windows/configuration/keyboard-filter/modify-global-settings.md @@ -0,0 +1,172 @@ +--- +title: Modify global settings +description: Modify global settings +ms.date: 01/13/2025 +ms.topic: how-to +--- + +# Modify global settings + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +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 + +```powershell +# +# 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}; +} + +function Get-Setting([String] $Name) { + <# + .Synopsis + Get a WMIObject by name from WEKF_Settings + .Parameter Name + The name of the setting, which is the key for the WEKF_Settings class. +#> + $Entry = Get-WMIObject -class WEKF_Settings @CommonParams | + where { + $_.Name -eq $Name + } + + return $Entry +} + +function Set-DisableKeyboardFilterForAdministrators([Bool] $Value) { + <# + .Synopsis + Set the DisableKeyboardFilterForAdministrators setting to true or + false. + .Description + Set DisableKeyboardFilterForAdministrators to true or false based + on $Value + .Parameter Value + A Boolean value +#> + + $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 + +```powershell +# +# 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}; +} + +function Get-Setting([String] $Name) { + <# + .Synopsis + Get a WMIObject by name from WEKF_Settings + .Parameter Name + The name of the setting, which is the key for the WEKF_Settings class. +#> + $Entry = Get-WMIObject -class WEKF_Settings @CommonParams | + where { + $_.Name -eq $Name + } + + return $Entry +} + +function Set-ForceOffAccessibility([Bool] $Value) { + <# + .Synopsis + Set the ForceOffAccessibility setting to true or false. + .Description + Set ForceOffAccessibility to true or false based on $Value + .Parameter Value + A Boolean value +#> + + $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](keyboardfilter-powershell-script-samples.md) + +[WEKF_Settings](wekf-settings.md) + +[Keyboard filter](index.md) diff --git a/windows/configuration/keyboard-filter/predefined-key-combinations.md b/windows/configuration/keyboard-filter/predefined-key-combinations.md new file mode 100644 index 0000000000..eb25a41a53 --- /dev/null +++ b/windows/configuration/keyboard-filter/predefined-key-combinations.md @@ -0,0 +1,160 @@ +--- +title: Predefined key combinations +description: Predefined key combinations +ms.date: 01/13/2025 +ms.topic: reference +--- + +# Predefined key combinations + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +This topic lists a set of key combinations that are predefined by a keyboard filter. You can list the value of the WEKF_PredefinedKey.Id to get a complete list of key combinations defined by a keyboard filter. + +You can use the values in the WEKF_PredefinedKey.Id column to configure the Windows Management Instrumentation (WMI) class [WEKF_PredefinedKey](wekf-predefinedkey.md). + +## Accessibility keys + +The following table contains predefined key combinations for accessibility: + +| Key combination | WEKF_PredefinedKey.Id | Blocked behavior | +|:-------------------------------------|:--------------------------|:----------------------------| +| Left Alt + Left Shift + Print Screen | **LShift+LAlt+PrintScrn** | Open High Contrast. | +| Left Alt + Left Shift + Num Lock | **LShift+LAlt+NumLock** | Open Mouse Keys. | +| Windows logo key + U | **Win+U** | Open Ease of Access Center. | + +## Application keys + +The following table contains predefined key combinations for controlling application state: + +| Key combination | WEKF_PredefinedKey.Id | Blocked behavior | +|:----------------------|:----------------------|:-------------------| +| Alt + F4 | **Alt+F4** | Close application. | +| Ctrl + F4 | **Ctrl+F4** | Close window. | +| Windows logo key + F1 | **Win+F1** | Open Windows Help. | + +## Shell keys + +The following table contains predefined key combinations for general UI control: + +| Key combination | WEKF_PredefinedKey.Id | Blocked behavior | +|:---------------------------------------|:----------------------|:-------------------------------------------------------------------------------------------------------------------------------------| +| Alt + Spacebar | **Alt+Space** | Open shortcut menu for the active window. | +| Ctrl + Esc | **Ctrl+Esc** | Open the Start screen. | +| Ctrl + Windows logo key + F | **Ctrl+Win+F** | Open Find Computers. | +| Windows logo key + Break | **Win+Break** | Open System dialog box. | +| Windows logo key + E | **Win+E** | Open Windows Explorer. | +| Windows + F | **Win+F** | Open Search. | +| Windows logo key + P | **Win+P** | Cycle through Presentation Mode. Also blocks the Windows logo key + Shift + P and the Windows logo key + Ctrl + P key combinations. | +| Windows logo key + R | **Win+R** | Open Run dialog box. | +| Alt + Tab | **Alt+Tab** | Switch task. Also blocks the Alt + Shift + Tab key combination. | +| Ctrl + Tab | **Ctrl+Tab** | Switch window. | +| 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 + D | **Win+D** | Show desktop. | +| Windows logo key + M | **Win+M** | Minimize all windows. | +| Windows logo key + Home | **Win+Home** | Minimize or restore all inactive windows. | +| Windows logo key + T | **Win+T** | Set focus on taskbar and cycle through programs. | +| Windows logo key + B | **Win+B** | Set focus in the notification area. | +| Windows logo key + Minus Sign | **Win+-** | Zoom out. | +| Windows logo key + Plus Sign | **Win++** | Zoom in. | +| Windows logo key + Esc | **Win+Esc** | Close Magnifier application. | +| Windows logo key + Up Arrow | **Win+Up** | Maximize the active window. | +| 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 Arrow | **Win+Shift+Down** | Minimize the active window. | +| Windows logo key + Shift + Left Arrow | **Win+Shift+Left** | Move the active window to left monitor. | +| Windows logo key + Shift + Right Arrow | **Win+Shift+Right** | Move the active window to right monitor. | +| Windows logo key + Spacebar | **Win+Space** | Switch layout. | +| Windows logo key + O | **Win+O** | Lock device orientation. | +| 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. | +| Windows logo key + C | **Win+C** | Activate Cortana in listening mode (after user has enabled the shortcut through the UI). | +| Windows logo key + I | **Win+I** | Open Settings charm. | +| Windows logo key + K | **Win+K** | Open Connect charm. | +| Windows logo key + H | **Win+H** | Start dictation. | +| Windows logo key + Q | **Win+Q** | Open Search charm. | +| Windows logo key + W | **Win+W** | Open Windows Ink workspace. | +| Windows logo key + Z | **Win+Z** | Open app bar. | +| Windows logo key + / | **Win+/** | Open input method editor (IME). | +| Windows logo key + J | **Win+J** | Swap between snapped and filled applications. | +| Windows logo key + Comma | **Win+,** | Peek at the desktop. | +| Windows logo key + V | **Win+V** | Cycle through toasts in reverse order. | + +## Modifier keys + +The following table contains predefined key combinations for modifier keys (such as Shift and Ctrl): + +| Key combination | WEKF_PredefinedKey.Id | Blocked key | +|:-----------------|:----------------------|:-----------------------| +| Alt | **Alt** | Both Alt keys | +| Application | **Application** | Application key | +| Ctrl | **Ctrl** | Both Ctrl keys | +| Shift | **Shift** | Both Shift keys | +| Windows logo key | **Windows** | Both Windows logo keys | + +## Security keys + +The following table contains predefined key combinations for OS security: + +| Key combination | WEKF_PredefinedKey.Id | Blocked behavior | +|:-----------------------|:----------------------|:----------------------------------| +| Ctrl + Alt + Delete | **Ctrl+Alt+Del** | Open the Windows Security screen. | +| Ctrl + Shift + Esc | **Shift+Ctrl+Esc** | Open Task Manager. | +| Windows logo key + L | **Win+L** | Lock the device. | + +## Extended shell keys + +The following table contains predefined key combinations for extended shell functions (such as automatically opening certain apps): + +| Key combination | WEKF_PredefinedKey.Id | Blocked key | +|:--------------------|:----------------------|:------------------------| +| LaunchMail | **LaunchMail** | Start Mail key | +| LaunchMediaSelect | **LaunchMediaSelect** | Select Media key | +| LaunchApp1 | **LaunchApp1** | Start Application 1 key | +| LaunchApp2 | **LaunchApp2** | Start Application 2 key | + +## Browser keys + +The following table contains predefined key combinations for controlling the browser: + +| Key combination | WEKF_PredefinedKey.Id | Blocked key | +|:-----------------|:----------------------|:---------------------------| +| BrowserBack | **BrowserBack** | Browser Back key | +| BrowserForward | **BrowserForward** | Browser Forward key | +| BrowserRefresh | **BrowserRefresh** | Browser Refresh key | +| BrowserStop | **BrowserStop** | Browser Stop key | +| BrowserSearch | **BrowserSearch** | Browser Search key | +| BrowserFavorites | **BrowserFavorites** | Browser Favorites key | +| BrowserHome | **BrowserHome** | Browser Start and Home key | + +## Media keys + +The following table contains predefined key combinations for controlling media playback: + +| Key combination | WEKF_PredefinedKey.Id | Blocked key | +|:----------------|:----------------------|:---------------------| +| VolumeMute | **VolumeMute** | Volume Mute key | +| VolumeDown | **VolumeDown** | Volume Down key | +| VolumeUp | **VolumeUp** | Volume Up key | +| MediaNext | **MediaNext** | Next Track key | +| MediaPrev | **MediaPrev** | Previous Track key | +| MediaStop | **MediaStop** | Stop Media key | +| MediaPlayPause | **MediaPlayPause** | Play/Pause Media key | + +## Microsoft Surface keyboard keys + +The following table contains predefined key combinations for Microsoft Surface devices: + +| Key combination | WEKF_PredefinedKey.Id | Blocked key | +|:------------------------------|:----------------------|:-------------| +| Left Alt + Windows logo key | **AltWin** | Share key | +| Left Ctrl + Windows logo key | **CtrlWin** | Devices key | +| Left Shift + Windows logo key | **ShiftWin** | Search key | +| F21 | **F21** | Settings key | + +## Related topics + +[Keyboard filter](index.md) diff --git a/windows/configuration/keyboard-filter/remove-key-combination-configurations.md b/windows/configuration/keyboard-filter/remove-key-combination-configurations.md new file mode 100644 index 0000000000..624edc69f4 --- /dev/null +++ b/windows/configuration/keyboard-filter/remove-key-combination-configurations.md @@ -0,0 +1,106 @@ +--- +title: Remove key combination configurations +description: Remove key combination configurations +ms.date: 01/13/2025 +ms.topic: reference +--- + +# Remove key combination configurations + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +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 can't remove the predefined key combination configurations for Keyboard Filter, but you can disable them. + +## Remove-rules.ps1 + +```powershell +# +# 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" + + This removes the instance of WEKF_CustomKey with a key Id of "Ctrl+V" +#> + + $customInstance = Get-WMIObject -class WEKF_CustomKey @CommonParams | + where {$_.Id -eq $Id} + + if ($customInstance) { + $customInstance.Delete(); + "Removed Custom Filter $Id."; + } else { + "Custom Filter $Id does not exist."; + } +} + +function Remove-Scancode($Modifiers, [int]$Code) { + <# + .Synopsis + Remove and instance of WEKF_Scancode + .Description + Enumerate all instances of WEKF_Scancode. When an instance has a + matching modifiers and code, delete it. + .Example + Remove-Scancode "Ctrl" 37 + + This removes the instance of WEKF_Scancode with Modifiers="Ctrl" and + Scancode=37. +#> + + $scancodeInstance = Get-WMIObject -class WEKF_Scancode @CommonParams | + where {($_.Modifiers -eq $Modifiers) -and ($_.Scancode -eq $Code)} + + if ($scancodeInstance) { + $scancodeInstance.Delete(); + "Removed Scancode $Modifiers+$Code."; + } else { + "Scancode $Modifiers+$Code does not exist."; + } +} + +# Some example uses of the functions defined above. +Remove-Custom-Key "Ctrl+V" +Remove-Custom-Key "Numpad0" +Remove-Custom-Key "Shift+Numpad1" +Remove-Custom-Key "%" +Remove-Scancode "Ctrl" 37 +``` + +## Related articles + +[Windows PowerShell script samples for keyboard filter](keyboardfilter-powershell-script-samples.md) + +[Keyboard filter WMI provider reference](keyboardfilter-wmi-provider-reference.md) + +[Keyboard filter](index.md) diff --git a/windows/configuration/keyboard-filter/toc.yml b/windows/configuration/keyboard-filter/toc.yml new file mode 100644 index 0000000000..7c09e1a75c --- /dev/null +++ b/windows/configuration/keyboard-filter/toc.yml @@ -0,0 +1,53 @@ +items: +- name: Keyboard Filter + items: + - name: About keyboard filter + href: index.md + - name: Key Names + href: keyboardfilter-key-names.md + - name: Predefined Key Combinations + href: keyboardfilter-list-all-configured-key-combinations.md + - name: WMI Provider Reference + items: + - name: Overview + href: keyboardfilter-wmi-provider-reference.md + - name: Class WEKF_CustomKey + items: + - name: Overview + href: wekf-customkey.md + - name: Add + href: wekf-customkeyadd.md + - name: Remove + href: wekf-customkeyremove.md + - name: Class WEKF_PredefinedKey + items: + - name: Overview + href: wekf-predefinedkey.md + - name: Disable + href: wekf-predefinedkeydisable.md + - name: Enable + href: wekf-predefinedkeyenable.md + - name: Class WEKF_Scancode + items: + - name: Overview + href: wekf-scancode.md + - name: Add + href: wekf-scancodeadd.md + - name: Remove + href: wekf-scancoderemove.md + - name: Class WEKF-Settings + href: wekf-settings.md + - name: PowerShell script samples + items: + - name: Overview + href: keyboardfilter-powershell-script-samples.md + - name: Add blocked key Combinations + href: keyboardfilter-add-blocked-key-combinations.md + - name: Disable all blocked key Combinations + href: disable-all-blocked-key-combinations.md + - name: List all configured key combinations + href: keyboardfilter-list-all-configured-key-combinations.md + - name: Modify global settings + href: modify-global-settings.md + - name: Remove key combination configurations + href: remove-key-combination-configurations.md \ No newline at end of file diff --git a/windows/configuration/keyboard-filter/wekf-customkey.md b/windows/configuration/keyboard-filter/wekf-customkey.md new file mode 100644 index 0000000000..dcc812049e --- /dev/null +++ b/windows/configuration/keyboard-filter/wekf-customkey.md @@ -0,0 +1,128 @@ +--- +title: WEKF_CustomKey +description: WEKF_CustomKey +ms.date: 01/13/2025 +ms.topic: reference +--- + + +# WEKF_CustomKey + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +Adds or removes custom-defined key combinations. + +## Syntax + +```powershell +class WEKF_CustomKey { + [Static] uint32 Add( + [In] string CustomKey + ); + [Static] uint32 Remove( + [In] string CustomKey + ); + + [Key] string Id; + [Read, Write] boolean Enabled; +}; +``` + +## Members + +The following tables list any methods and properties that belong to this class. + +### Methods + +| Methods | Description | +|---------|-------------| +| [WEKF_CustomKey.Add](wekf-customkeyadd.md) | Creates a new custom key combination and enables Keyboard Filter to block the new key combination. | +| [WEKF_CustomKey.Remove](wekf-customkeyremove.md) | Removes the specified custom key combination. Keyboard Filter stops blocking the key combination that was removed. | + +### Properties + +| Property | Data type | Qualifiers | Description | +|----------|----------------|------------|--------------| +| **Id** | string | [key] | The name of the custom key combination. | +| **Enabled** | Boolean | [read, write] | Indicates if the key is blocked or unblocked. This property can be one of the following values
- **true** Indicates that the key is blocked.
- **false** Indicates that the key isn't blocked. | + +### 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 can't block a combination of non-modifier keys. For example, you can block a key combination of >Ctrl+>Shift+>F, but you can't 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 doesn't call any of the methods defined in **WEKF_CustomKey**. + +```powershell +<# +.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" + + Enable filtering of the Ctrl + V sequence. +#> + + $custom = Get-WMIObject -class WEKF_CustomKey @CommonParams | + where { + $_.Id -eq "$Id" + }; + + 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."; + } +} + + +# Some example uses of the function defined above. + +Enable-Custom-Key "Ctrl+V" +Enable-Custom-Key "Numpad0" +Enable-Custom-Key "Shift+Numpad1" +``` + +## Related articles + +[Keyboard Filter WMI provider reference](keyboardfilter-wmi-provider-reference.md) + +[Keyboard Filter key names](keyboardfilter-key-names.md) diff --git a/windows/configuration/keyboard-filter/wekf-customkeyadd.md b/windows/configuration/keyboard-filter/wekf-customkeyadd.md new file mode 100644 index 0000000000..a48eeedb72 --- /dev/null +++ b/windows/configuration/keyboard-filter/wekf-customkeyadd.md @@ -0,0 +1,94 @@ +--- +title: WEKF_CustomKey.Add +description: WEKF_CustomKey.Add +ms.date: 01/13/2025 +ms.topic: reference +--- + +# WEKF_CustomKey.Add + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +Creates a new custom key combination and enables Keyboard Filter to block the new key combination. + +## Syntax + +```powershell +[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](keyboardfilter-key-names.md). + +## Return Value + +Returns an HRESULT value that indicates a [WMI Non-Error Constant](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI Error Constant](/windows/win32/wmisdk/wmi-error-constants). + +## 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 doesn't 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. + +```powershell +$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) { + +# Check to see if the custom key object already exists + $objCustomKey = Get-WMIObject -namespace $NAMESPACE -class WEKF_CustomKey | + where {$_.Id -eq "$KeyId"}; + + if ($objCustomKey) { + +# The custom key already exists, so just enable it + $objCustomKey.Enabled = 1; + $objCustomKey.Put() | Out-Null; + "Enabled ${KeyId}."; + + } else { + +# Create a new custom key object by calling the static Add method + $retval = $classCustomKey.Add($KeyId); + +# Check the return value to verify that the Add is successful + if ($retval.ReturnValue -eq 0) { + "Added ${KeyID}." + } else { + "Unknown Error: " + "{0:x0}" -f $retval.ReturnValue + } + } +} + +# Enable Keyboard Filter to block several custom keys + +Enable-Custom-Key "Ctrl+v" +Enable-Custom-Key "Ctrl+v" +Enable-Custom-Key "Shift+4" +Enable-Custom-Key "Ctrl+Alt+w" + +# List all the currently existing custom keys + +$objCustomKeyList = get-WMIObject -namespace $NAMESPACE -class WEKF_CustomKey +foreach ($objCustomKeyItem in $objCustomKeyList) { + "Custom key: " + $objCustomKeyItem.Id + " enabled: " + $objCustomKeyItem.Enabled + } +``` + +## Related articles + +- [WEKF_CustomKey](wekf-customkey.md) +- [Keyboard Filter](index.md) diff --git a/windows/configuration/keyboard-filter/wekf-customkeyremove.md b/windows/configuration/keyboard-filter/wekf-customkeyremove.md new file mode 100644 index 0000000000..26b1d35bdc --- /dev/null +++ b/windows/configuration/keyboard-filter/wekf-customkeyremove.md @@ -0,0 +1,86 @@ +--- +title: WEKF_CustomKey.Remove +description: WEKF_CustomKey.Remove +ms.date: 01/13/2025 +ms.topic: reference +--- + +# WEKF_CustomKey.Remove + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +Removes a custom key combination, causing Keyboard Filter to stop blocking the removed key combination. + +## Syntax + +```powershell +[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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +**WEKF_CustomKey.Remove** removes an existing **WEKF_CustomKey** object. If the object doesn't exist, **WEKF_CustomKey.Remove** returns an error with the value 0x8007007B. + +Because this method is static, you can't 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's no longer blocked by using the Windows Management Instrumentation (WMI) providers for Keyboard Filter. + +```powershell +$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 remove a key combination +function Remove-Custom-Key($KeyId) { + +# Call the static Remove() method on the class reference + $retval = $classCustomKey.Remove($KeyId) + +# Check the return value for status + if ($retval.ReturnValue -eq 0) { + +# Custom key combination removed successfully + "Removed ${KeyID}." + } elseif ($retval.ReturnValue -eq 2147942523) { + +# No object exists with the specified custom key + "Failed to remove ${KeyID}. No object found." + } else { + +# Unknown error, report error code in hexadecimal + "Failed to remove ${KeyID}. Unknown Error: " + "{0:x0}" -f $retval.ReturnValue + } +} + + +# Example of removing a custom key so that Keyboard Filter stops blocking it +Remove-Custom-Key "Ctrl+Alt+w" + +# Example of removing all custom keys that have the Enabled property set to false +$objDisabledCustomKeys = Get-WmiObject -Namespace $NAMESPACE -Class WEKF_CustomKey; + +foreach ($objCustomKey in $objDisabledCustomKeys) { + if (!$objCustomKey.Enabled) { + Remove-Custom-Key($objCustomKey.Id); + } +} +``` + +## Related topics + +- [WEKF_CustomKey](wekf-customkey.md) +- [Keyboard Filter](index.md) diff --git a/windows/configuration/keyboard-filter/wekf-predefinedkey.md b/windows/configuration/keyboard-filter/wekf-predefinedkey.md new file mode 100644 index 0000000000..dd5de7d93a --- /dev/null +++ b/windows/configuration/keyboard-filter/wekf-predefinedkey.md @@ -0,0 +1,112 @@ +--- +title: WEKF_PredefinedKey +description: WEKF_PredefinedKey +ms.date: 01/13/2025 +ms.topic: reference +--- + +# WEKF_PredefinedKey + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +This class blocks or unblocks predefined key combinations, such as Ctrl+Alt+Delete. + +## Syntax + +```powershell +class WEKF_PredefinedKey { + [Static] uint32 Enable ( + [In] string PredefinedKey + ); + [Static] uint32 Disable ( + [In] string PredefinedKey + ); + + [Key] string Id; + [Read, Write] boolean Enabled; +}; +``` + +## Members + +The following tables list any constructors, methods, fields, and properties that belong to this class. + +### Methods + +| Methods | Description | +|:-----------------------------------------------------------|:---------------------------------------| +| [WEKF_PredefinedKey.Enable](wekf-predefinedkeyenable.md) | Blocks the specified predefined key. | +| [WEKF_PredefinedKey.Disable](wekf-predefinedkeydisable.md) | Unblocks the specified predefined key. | + +### Properties + +| Property | Data type | Qualifiers | Description | +|:------------|:----------|:--------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Id** | string | [key] | The name of the predefined key combination. | +| **Enabled** | Boolean | [read, write] | Indicates whether the key is blocked or unblocked. To indicate that the key is blocked, specify **true**. To indicate that the key isn't blocked, specify **false**. | + +### 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](predefined-key-combinations.md). + +## 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. + +```powershell +<# +.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" + + Enable CAD filtering +#> + + $predefined = Get-WMIObject -class WEKF_PredefinedKey @CommonParams | + where { + $_.Id -eq "$Id" + }; + + if ($predefined) { + $predefined.Enabled = 1; + $predefined.Put() | Out-Null; + Write-Host Enabled $Id + } else { + Write-Error $Id is not a valid predefined key + } +} + +# Some example uses of the function defined above. + +Enable-Predefined-Key "Ctrl+Alt+Delete" +Enable-Predefined-Key "Ctrl+Esc" +``` + +## Related articles + +- [Keyboard Filter WMI provider reference](keyboardfilter-wmi-provider-reference.md) +- [Keyboard Filter](index.md) diff --git a/windows/configuration/keyboard-filter/wekf-predefinedkeydisable.md b/windows/configuration/keyboard-filter/wekf-predefinedkeydisable.md new file mode 100644 index 0000000000..b49d3383f0 --- /dev/null +++ b/windows/configuration/keyboard-filter/wekf-predefinedkeydisable.md @@ -0,0 +1,34 @@ +--- +title: WEKF_PredefinedKey.Disable +description: WEKF_PredefinedKey.Disable +ms.date: 01/13/2025 +ms.topic: reference +--- + +# WEKF_PredefinedKey.Disable + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +Unblocks the specified predefined key combination. + +## Syntax + +```powershell +[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](predefined-key-combinations.md). + +## Return Value + +Returns an HRESULT value that indicates [WMI Non-error constant](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + + +## Related articles + +- [WEKF_PredefinedKey](wekf-predefinedkey.md) +- [Keyboard Filter](index.md) diff --git a/windows/configuration/keyboard-filter/wekf-predefinedkeyenable.md b/windows/configuration/keyboard-filter/wekf-predefinedkeyenable.md new file mode 100644 index 0000000000..a674afda86 --- /dev/null +++ b/windows/configuration/keyboard-filter/wekf-predefinedkeyenable.md @@ -0,0 +1,33 @@ +--- +title: WEKF_PredefinedKey.Enable +description: WEKF_PredefinedKey.Enable +ms.date: 01/13/2025 +ms.topic: reference +--- + +# WEKF_PredefinedKey.Enable + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +This method blocks the specified predefined key combination. + +## Syntax + +```powershell +[Static] uint32 Enable( + [In] string PredefinedKey +); +``` + +## Parameters + +**PredefinedKey**
The predefined key combination to block. For a list of predefined keys, see [Predefined key combinations](predefined-key-combinations.md). + +## Return Value + +Returns an HRESULT value that indicates [WMI non-error constant](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + +## Related articles + +- [WEKF_PredefinedKey](wekf-predefinedkey.md) +- [Keyboard Filter](index.md) diff --git a/windows/configuration/keyboard-filter/wekf-scancode.md b/windows/configuration/keyboard-filter/wekf-scancode.md new file mode 100644 index 0000000000..8cfb7b0f6e --- /dev/null +++ b/windows/configuration/keyboard-filter/wekf-scancode.md @@ -0,0 +1,126 @@ +--- +title: WEKF_Scancode +description: WEKF_Scancode +ms.date: 01/13/2025 +ms.topic: reference +--- + +# WEKF_Scancode + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +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 + +```powershell +class WEKF_Scancode { + [Static] uint32 Add( + [In] string Modifiers, + [In] uint16 scancode + ); + [Static] uint32 Remove( + [In] string Modifiers, + [In] uint16 Scancode + ); + + [Key] string Modifiers; + [Key] uint16 Scancode; + [Read, Write] boolean Enabled; +} +``` + +## Members + +The following tables list any constructors, methods, fields, and properties that belong to this class. + +### Methods + +| Methods | Description | +|---------|-------------| +| [WEKF_Scancode.Add](wekf-scancodeadd.md) | Adds a new custom scan code combination and enables Keyboard Filter to block the new scan code combination. | +| [WEKF_Scancode.Remove](wekf-scancoderemove.md) | Removes the specified custom scan code combination. Keyboard Filter stops blocking the scan code combination that was removed. | + +### Properties + +| Property | Data type | Qualifiers | Description | +|----------|----------------|------------|-------------| +| **Modifiers** | string | [key] | The modifier keys that are part of the key combination to block. | +| **Scancode** | uint16 | [key] | The scan code part of the key combination to block. | +| **Enabled** | Boolean | [read, write] | Indicates whether the scan code is blocked or unblocked. This property can be one of the following values:
- **true** Indicates that the scan code is blocked.
- **false** Indicates that the scan code isn't blocked. | + +### 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 doesn't call any of the methods defined in **WEKF_Scancode**. + +```powershell +<# +.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-Scancode($Modifiers, [int]$Code) { + <# + .Synopsis + Toggle on a Scancode Keyboard Filter Rule + .Description + Use Get-WMIObject to enumerate all WEKF_Scancode instances, + filter against key values of "Modifiers" and "Scancode", and set + that instance's "Enabled" property to 1/true. + + 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" + + Enable filtering of the Ctrl + V 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 + + "Added Custom Scancode {0}+{1:X4}" -f $Modifiers, $Code + } +} + +# Some example uses of the function defined above. + +Enable-Scancode "Ctrl" 37 +``` + +## Related articles + +[Keyboard Filter WMI provider reference](keyboardfilter-wmi-provider-reference.md) + +[Keyboard Filter](index.md) diff --git a/windows/configuration/keyboard-filter/wekf-scancodeadd.md b/windows/configuration/keyboard-filter/wekf-scancodeadd.md new file mode 100644 index 0000000000..cd4b70efe8 --- /dev/null +++ b/windows/configuration/keyboard-filter/wekf-scancodeadd.md @@ -0,0 +1,42 @@ +--- +title: WEKF_Scancode.Add +description: WEKF_Scancode.Add +ms.date: 01/13/2025 +ms.topic: reference +--- + +# WEKF_Scancode.Add + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +This method adds a new custom scan code combination and enables Keyboard Filter to block the new combination. + +## Syntax + +```powershell +[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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + +## 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 doesn't 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 doesn't block the scan code. + +## Related articles + +- [WEKF_Scancode](wekf-scancode.md) +- [Keyboard Filter](index.md) diff --git a/windows/configuration/keyboard-filter/wekf-scancoderemove.md b/windows/configuration/keyboard-filter/wekf-scancoderemove.md new file mode 100644 index 0000000000..18bc6d3514 --- /dev/null +++ b/windows/configuration/keyboard-filter/wekf-scancoderemove.md @@ -0,0 +1,42 @@ +--- +title: WEKF_Scancode.Remove +description: WEKF_Scancode.Remove +ms.date: 01/13/2025 +ms.topic: reference +--- + +# WEKF_Scancode.Remove + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +This method removes a custom scan code key combination, causing Keyboard Filter to stop blocking the removed combination. + +## Syntax + +```powershell +[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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +**WEKF_Scancode.Remove** removes an existing **WEKF_Scancode** object. If the object doesn't exist, **WEKF_Scancode.Remove** returns an error with the value 0x8007007B. + +Because this method is static, you can't call it on an object instance, but must instead call it at the class level. + +## Related articles + +- [WEKF_Scancode](wekf-scancode.md) +- [Keyboard Filter](index.md) diff --git a/windows/configuration/keyboard-filter/wekf-settings.md b/windows/configuration/keyboard-filter/wekf-settings.md new file mode 100644 index 0000000000..df43feb21e --- /dev/null +++ b/windows/configuration/keyboard-filter/wekf-settings.md @@ -0,0 +1,95 @@ +--- +title: WEKF_Settings +description: WEKF_Settings +ms.date: 01/13/2025 +ms.topic: reference +--- + +# WEKF_Settings + +[!INCLUDE [supported-os-enterprise-plus](../../../includes/iot/supported-os-enterprise-plus.md)] + +Enables or disables settings for Keyboard Filter. + +## Syntax + +```powershell +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 | +|----------|----------------|------------|-------------| +| **Name** | string | [key] | Indicates the name of the Keyboard Filter setting that this object represents. See the Remarks section for a list of valid setting names. | +| **Value** | string | [read, write] | Represents the value of the **Name** setting. The value isn't case-sensitive.
See the Remarks section for a list of valid values for each setting. | + +### 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. + +| Setting name | Description | +|--------------|-------------| +| **DisableKeyboardFilterForAdministrators** | This setting specifies whether Keyboard Filter is enabled or disabled for administrator accounts. Set to **true** to disable Keyboard Filter for administrator accounts; otherwise, set to **false**. Set to **true** by default. | +| **ForceOffAccessibility** | This setting specifies whether Keyboard Filter blocks users from enabling Ease of Access features. Set to **true** to force disabling the Ease of Access features. Set to **false** to allow enabling the Ease of Access features. Set to **false** by default.
Changing this setting to **false** doesn't automatically enable Ease of Access features; you must manually enable them. | +| **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 this key consecutively five times to switch to the Welcome screen.
By default, the BreakoutKeyScanCode is set to the scan code for the left Windows logo key. | + +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 don't 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 doesn't 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 isn't 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. + +```powershell +#---Define variables--- + +$COMPUTER = "localhost" +$NAMESPACE = "root\standardcimv2\embedded" + +# Define the decimal scan code of the Home key + +$HomeKeyScanCode = 71 + +# Get the BreakoutKeyScanCode setting from WEKF_Settings + +$BreakoutMode = get-wmiobject -class wekf_settings -namespace $NAMESPACE | where {$_.name -eq "BreakoutKeyScanCode"} + +# Set the breakout key to the Home key. + +$BreakoutMode.value = $HomeKeyScanCode + +# Push the change into the WMI configuration. You must restart your device before this change takes effect. + +$BreakoutMode.put() +``` + +## Related articles + +[Keyboard Filter WMI provider reference](keyboardfilter-wmi-provider-reference.md) + +[Keyboard Filter](index.md) diff --git a/windows/configuration/shell-launcher/browser-support.md b/windows/configuration/shell-launcher/browser-support.md new file mode 100644 index 0000000000..1c3b383033 --- /dev/null +++ b/windows/configuration/shell-launcher/browser-support.md @@ -0,0 +1,47 @@ +--- +title: Browser Support +ms.date: 03/30/2023 +ms.topic: concept-article +description: Learn about browser support in Kiosk Mode +--- + +# Browser Support + +Today, you can use two browsers, Internet Explorer 11 and [Microsoft Edge](/deployedge/microsoft-edge-configure-kiosk-mode) to create an assigned access single-app or multi-app kiosk experience. + +## Microsoft Edge Kiosk Mode + +> Available for LTSC starting in [Windows 10 IoT Enterprise 2021 LTSC](/windows/iot/iot-enterprise/whats-new/Windows-10-IoT-Enterprise-LTSC-2021) + +[Microsoft Edge kiosk mode](/deployedge/microsoft-edge-configure-kiosk-mode) offers two lockdown experiences of the browser so organizations can create, manage, and provide the best experience for their customers. The following lockdown experiences are available: + +* Digital/Interactive Signage experience - Displays a specific site in full-screen mode. +* Public-Browsing experience - Runs a limited multi-tab version of Microsoft Edge. + +Both experiences are running a Microsoft Edge InPrivate session, which protects user data. + +## Internet Explorer 11 + +[Internet Explorer 11](/internet-explorer/internet-explorer) is considered a legacy browser, in subsequent releases. + +In anticipation of that, you can use [Internet Explorer (IE) mode](/deployedge/edge-ie-mode) on Microsoft Edge. IE mode allows you to run legacy web apps and modern web apps in a single browser. + +> [!NOTE] +> For in-support Windows 10 IoT Enterprise [Semi-Annual Channel (SAC) releases](/lifecycle/products/windows-10-iot-enterprise), Internet Explorer 11 will reach end of support on June 15, 2022. +> +> Internet Explorer 11 follows the Long-Term-Servicing-Channel (LTSC) Lifecycle for [Windows 10 IoT Enterprise LTSC](/lifecycle/products/?terms=Windows%2010%20IoT%20Enterprise%20LTSC) products. + +## Supported Versions + +| Browser | Internet Explorer 11 | Microsoft Edge Legacy | Microsoft Edge | +|--|--|--|--| +| OS Release | [IE11 App](/internet-explorer/internet-explorer) | [Edge Browser - Legacy](/deployedge/microsoft-edge-kiosk-mode-transition-plan) | [New Edge Browser](/deployedge/microsoft-edge-configure-kiosk-mode) | +| Windows 10 IoT Enterprise LTSC 2019 | [Follows OS Release Support Lifecycle](/lifecycle/products/windows-10-iot-enterprise-ltsc-2019) | No browser security updates after March, 9, 2021 (removed where applicable). In-box engine supported until OS end of service | Microsoft Edge and WebView2 Runtime not in-box (requires app migration from EdgeHTML) | +| Windows 10 IoT Enterprise, version 21H2 | End of support June 15, 2022 | Removed & replaced with New Microsoft Edge Browser in May 2021 Update | Included in-box or installed with May 2021 Update | +| Windows 10 IoT Enterprise LTSC 2021 | [Follows OS Release Support Lifecycle](/lifecycle/products/windows-10-iot-enterprise-ltsc-2021) | Not included | Microsoft Edge included in-box and follows [Modern Lifecycle Policy](/lifecycle/policies/modern) | +| Windows 11 IoT Enterprise | N/A | N/A | Microsoft Edge included in-box and follows [Modern Lifecycle Policy](/lifecycle/policies/modern) | + +## Additional Resources + +* [Configure Microsoft Edge kiosk mode](/deployedge/microsoft-edge-configure-kiosk-mode) +* [Plan your kiosk mode transition](/deployedge/microsoft-edge-kiosk-mode-transition-plan) diff --git a/windows/configuration/shell-launcher/index.md b/windows/configuration/shell-launcher/index.md new file mode 100644 index 0000000000..50eeb99ef6 --- /dev/null +++ b/windows/configuration/shell-launcher/index.md @@ -0,0 +1,344 @@ +--- +title: Shell Launcher +description: Shell Launcher +ms.date: 06/07/2018 +ms.topic: overview +--- + +# Shell Launcher + +Using Shell Launcher, you can configure a kiosk device to use almost any application or executable as your custom shell. The application that you specify replaces the default shell (explorer.exe) that usually runs when a user logs on. + +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 can't 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 can't use a Universal Windows app as a custom shell. +- You can't use a custom shell to launch Universal Windows apps, for example, the Settings app. +- You can't use an application that launches a different process and exits as a custom shell. For example, you can't 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 isn't aware of the newly created wordpad.exe process, Shell Launcher takes action based on the exit code of **Write.exe**, and restart the custom shell. +- You can't prevent the system from shutting down. For Shell Launcher V1 and V2, you can't block the session ending by returning FALSE upon receiving the [WM_QUERYENDSESSION](/windows/win32/shutdown/wm-queryendsession) message in a graphical application or returning FALSE in the [handler routine](/windows/console/handlerroutine) that is added through the [SetConsoleCtrlHandler](/windows/console/setconsolectrlhandler) function in a console application. + +> [!NOTE] +> You cannot configure both Shell Launcher and assigned access on the same system. +> +> Use **Shell Launcher V2**, you can specify a Universal Windows app as a custom shell. Check [Use Shell Launcher to create a Windows 10 kiosk](/windows/configuration/kiosk-shelllauncher) for the differences between Shell Launcher v1 and Shell Launcher V2. + +Shell Launcher processes the **Run** and **RunOnce** registry keys before starting the custom shell, so your custom shell doesn't need to handle the automatic startup of other applications and services. + +Shell Launcher also handles the behavior of the system when your custom shell exits. You can configure the shell exit behavior if the default behavior doesn't meet your needs. + +Methods of controlling access to other desktop applications and system components can be used in addition to using the Shell Launcher such as, [Group Policy](https://www.microsoft.com/download/details.aspx?id=25250), [AppLocker](/windows/iot/iot-enterprise/customize/application-control#applocker), and [Mobile Device Management](/windows/client-management/mdm/) + +> [!NOTE] +> +> In Shell Launcher v1, available in Windows 10, you can only specify a Windows desktop application as the replacement shell. In Shell Launcher v2, available in Windows 10, version 1809 and above, you can also specify a UWP app as the replacement shell. +> +> To use Shell Launcher v2 in version 1809, you need to install the [KB4551853 update](https://support.microsoft.com/topic/may-12-2020-kb4551853-os-build-17763-1217-c2ea33f7-4506-dd13-2739-d9c7bb80b26d). + +## Differences between Shell Launcher v1 and Shell Launcher v2 + +Shell Launcher v1 replaces ```explorer.exe```, the default shell, with ```eshell.exe```, which can launch a Windows desktop application. +Shell Launcher v2 replaces ```explorer.exe``` with ```customshellhost.exe```. This new executable file can launch a Windows desktop application or a UWP app. +In addition to allowing you to use a UWP app for your replacement shell, Shell Launcher v2 offers more enhancements: + +- You can use a custom Windows desktop application that can then launch UWP apps, such as Settings and Touch Keyboard. +- From a custom UWP shell, you can launch secondary views and run on multiple monitors. +- The custom shell app runs in full screen, and can run other apps in full screen on user's demand. +For sample XML configurations for the different app combinations, see [Samples for Shell Launcher v2](https://github.com/microsoft/Windows-IoT-Samples/tree/master/samples/ShellLauncher/ShellLauncherV2). + +## 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 subsettings. +- **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. + +## Turn on Shell Launcher + +Shell Launcher is an optional component and isn't turned on by default in Windows 10. It must be turned on prior to configuring. You can turn on and configure Shell Launcher in a customized Windows 10 image (.wim) if Microsoft Windows hasn't been installed. If Windows has already been installed, you must turn on Shell Launcher before applying a provisioning package to configure Shell Launcher. + +### Enable Shell Launcher using Control Panel + +1. In the **Search the web and Windows** field, type **Programs and Features** and either press **Enter** or tap or select **Programs and Features** to open it. +1. In the **Programs and Features** window, select **Turn Windows features on or off**. +1. In the **Windows Features** window, expand the **Device Lockdown** node, select or clear the checkbox for **Shell Launcher**, and then select **OK.** +1. The **Windows Features** window indicates that Windows is searching for required files and displays a progress bar. Once found, the window indicates that Windows is applying the changes. When completed, the window indicates the requested changes are completed. +1. Select **Close** to close the **Windows Features** window. + +> [!NOTE] +> Turning on Shell Launcher does not require a device restart. + +### Enable Shell Launcher by calling WESL_UserSetting + +1. Enable or disable Shell Launcher by calling the WESL_UserSetting.SetEnabled function in the Windows Management Instrumentation (WMI) class WESL_UserSetting. +1. If you enable or disable Shell Launcher using WESL_UserSetting, the changes don't affect any sessions that are currently signed in; you must sign out and sign back in. + +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](/windows-hardware/manufacture/desktop/what-is-dism). + +### Enable Shell Launcher using DISM + +1. Open a command prompt with administrator privileges. +1. Copy install.wim to a temporary folder on hard drive (in the following steps, we assume it's called C:\\wim). +1. Create a new directory. + + ```CMD + md c:\wim + ``` + +1. Mount the image. + + ```CMD + dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim + ``` + +1. Enable the feature. + + ```CMD + dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher + ``` + +1. Commit the change. + + ```CMD + dism /unmount-wim /MountDir:c:\wim /Commit + ``` + +### Enable Shell Launcher using Windows Configuration Designer + +The Shell Launcher settings are also available as Windows provisioning settings so you can configure these settings to be applied during the image runtime. You can set one or all Shell Launcher settings by creating a provisioning package using Windows Configuration Designer and then applying the provisioning package during image deployment time or runtime. If Windows hasn't been installed and you're using Windows Configuration Designer to create installation media with settings for Shell Launcher included in the image or you're applying a provisioning package during setup, you must enable Shell Launcher on the installation media with DISM in order for a provisioning package to successfully apply. + +Use the following steps to create a provisioning package that contains the ShellLauncher settings. + +1. Build a provisioning package in Windows Configuration Designer by following the instructions in [Create a provisioning package for Windows 10](/windows/configuration/provisioning-packages/provisioning-create-package). +1. In the **Available customizations** page, select **Runtime settings** > **SMISettings** > **ShellLauncher**. +1. Set the value of **Enable** to **ENABLE**. More options to configure Shell Launcher appears, and you can set the values as desired. +1. Once you have finished configuring the settings and creating the provisioning package, you can apply the package to the image deployment time or runtime. See the [Apply a provisioning package](/windows/configuration/provisioning-packages/provisioning-apply-package) for more information. The process for applying the package to a Windows 10 Enterprise image is the same. + +## Configure Shell Launcher + +There are two ways you can configure Shell Launcher: + +1. In Windows 10, version 1803, you can configure Shell Launcher using the **ShellLauncher** node of the Assigned Access Configuration Service Provider (CSP). See [AssignedAccess CSP](/windows/client-management/mdm/assignedaccess-csp) for details. Configuring Shell Launcher using this method also automatically enables Shell Launcher on the device, if the device supports it. +1. Use the Shell Launcher WMI providers directly in a PowerShell script or application. + +You can configure the following options for Shell Launcher: + +- Enable or disable Shell Launcher. +- Specify a shell configuration for a specific user or group. +- Remove a shell configuration for a specific user or group. +- Change the default shell configuration. +- Get information on a shell configuration for a specific user or group. + +Any changes don't take effect until a user signs in. + +## Launch different shells for different user accounts + +By default, Shell Launcher runs the default shell, which is specified when you create the OS image at design time. The default shell is set to Cmd.exe, but you can specify any executable file to be the default shell. + +You can configure Shell Launcher to launch a different shell for specific users or groups if you don't want to run the default shell. For example, you might configure a device to run a custom application shell for guest accounts, but run the standard Windows Explorer shell for administrator accounts in order to service the device. + +If you use the WMI providers to configure Shell Launcher for a user or group at run time, you must use the security identifier (SID) for that user or group; you can't use the user name or group name. + +For more information about common security identifiers, see [Well-known SIDs](/windows/win32/secauthz/well-known-sids). + +When the current signed in account belongs to two or more groups that have different configurations defined for each group, Shell Launcher uses the first configuration it finds. The search order isn't defined, so we recommend that you avoid assigning a user to multiple groups with different Shell Launcher configurations. + +## Perform an action when the shell exits + +When a custom shell exits, Shell Launcher can perform one of four actions: + +|Action|Description| +|:---:|:---| +|0|Restart the shell.| +|1|Restart the device.| +|2|Shut down the device.| +|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. + +### Default return code action + +You can define a default return code action for Shell Launcher with the DefaultReturnCodeAction setting. If you don't change the initial value, the default return code action is set to 0 (zero), which indicates that Shell Launcher restarts the shell when the shell exits. + +### Map the exit code to a Shell Launcher action + +Shell Launcher can take a specific action based on the exit code returned by the shell. For any given exit code returned by the shell, you can configure the action that Shell Launcher takes by mapping that exit code to one of the shell exit actions. + +If the exit code doesn't match a defined value, Shell Launcher performs the default return code action. + +For example, your shell might return exit code values of -1, 0, 1, or 255 depending on how the shell exits. You can configure Shell Launcher to: + +- restart the device (1) when the shell returns an exit code of value -1 +- restart the shell (0) when the shell returns an exit code of value 0 +- do nothing (3) when the shell returns an exit code of value 1 +- shut down the device (2) when the shell returns an exit code of value 255 + +Your custom return code action mapping would look like this: + +|Exit code|Action| +|:----:|----| +|-1|1 (restart the device)| +|0|0 (restart the shell)| +|1|3 (do nothing)| +|255|2 (shut down the device)| + +## Set your custom shell + +Modify the following PowerShell script as appropriate and run the script on the device. + +```PowerShell +# Check if shell launcher license is enabled +function Check-ShellLauncherLicenseEnabled +{ + [string]$source = @" +using System; +using System.Runtime.InteropServices; + +static class CheckShellLauncherLicense +{ + const int S_OK = 0; + + public static bool IsShellLauncherLicenseEnabled() + { + int enabled = 0; + + if (NativeMethods.SLGetWindowsInformationDWORD("EmbeddedFeature-ShellLauncher-Enabled", out enabled) != S_OK) { + enabled = 0; + } + return (enabled != 0); + } + + static class NativeMethods + { + [DllImport("Slc.dll")] + internal static extern int SLGetWindowsInformationDWORD([MarshalAs(UnmanagedType.LPWStr)]string valueName, out int value); + } + +} +"@ + + $type = Add-Type -TypeDefinition $source -PassThru + + 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 + } + + +# This well-known security identifier (SID) corresponds to the BUILTIN\Administrators group. + +$Admins_SID = "S-1-5-32-544" + +# Create a function to retrieve the SID for a user account on a machine. + +function Get-UsernameSID($AccountName) { + + $NTUserObject = New-Object System.Security.Principal.NTAccount($AccountName) + $NTUserSID = $NTUserObject.Translate([System.Security.Principal.SecurityIdentifier]) + + 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") + +# Define actions to take when the shell program exits. + +$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) + +# Display the default shell to verify that it was added correctly. + +$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($Cashier_SID, "c:\program files\internet explorer\iexplore.exe www.microsoft.com", ($null), ($null), $restart_shell) + +# Set Explorer as the shell for administrators. + +$ShellLauncherClass.SetCustomShell($Admins_SID, "explorer.exe") + +# View all the custom shells defined. + +"`nCurrent settings for custom shells:" +Get-WmiObject -namespace $NAMESPACE -computer $COMPUTER -class WESL_UserSetting | Select Sid, Shell, DefaultAction + +# Enable Shell Launcher + +$ShellLauncherClass.SetEnabled($TRUE) + +$IsShellLauncherEnabled = $ShellLauncherClass.IsEnabled() + +"`nEnabled is set to " + $IsShellLauncherEnabled.Enabled + +# Remove the new custom shells. + +$ShellLauncherClass.RemoveCustomShell($Admins_SID) + +$ShellLauncherClass.RemoveCustomShell($Cashier_SID) + +# Disable Shell Launcher + +$ShellLauncherClass.SetEnabled($FALSE) + +$IsShellLauncherEnabled = $ShellLauncherClass.IsEnabled() + +"`nEnabled is set to " + $IsShellLauncherEnabled.Enabled +``` + +> [!NOTE] +> The previous script includes examples of multiple configuration options, including removing a custom shell and disabling Shell Launcher. It is not intended to be run as-is. + +## Shell Launcher user rights + +A custom shell is launched with the same level of user rights as the account that is signed in. This means that a user with administrator rights can perform any system action that requires administrator rights, including launching other applications with administrator rights, while a user without administrator rights can't. + +> [!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 articles + +- [Unbranded Boot](../unbranded-boot/index.md) +- [Custom Logon](../custom-logon/index.md) +- [Use Shell Launcher to create a Windows 10 Kiosk](/windows/configuration/kiosk-shelllauncher) +- [Launch different shells for different user accounts](/windows-hardware/customize/enterprise/shell-launcher#launch-different-shells-for-different-user-accounts) +- [Perform an action when the shell exits](/windows-hardware/customize/enterprise/shell-launcher#perform-an-action-when-the-shell-exits) +- [Shell Launcher user rights](/windows-hardware/customize/enterprise/shell-launcher#shell-launcher-user-rights) diff --git a/windows/configuration/shell-launcher/kiosk-mode.md b/windows/configuration/shell-launcher/kiosk-mode.md new file mode 100644 index 0000000000..d5285fa51d --- /dev/null +++ b/windows/configuration/shell-launcher/kiosk-mode.md @@ -0,0 +1,61 @@ +--- +title: Kiosk Mode +ms.date: 01/18/2024 +ms.topic: overview +description: Learn about Kiosk Mode in Windows IoT Enterprise. +--- + +# Kiosk mode + +Windows IoT Enterprise allows you to build fixed purpose devices such as ATM machines, point-of-sale terminals, medical devices, digital signs, or kiosks. Kiosk mode helps you create a dedicated and locked down user experience on these fixed purpose devices. Windows IoT Enterprise offers a set of different locked-down experiences for public or specialized use: [assigned access single-app kiosks](single-app-kiosk.md), [assigned access multi-app kiosks](multi-app-kiosk.md), or [shell launcher](index.md). + +Kiosk configurations are based upon either [assigned access](../assigned-access/overview.md) or [shell launcher](index.md). There are several kiosk configuration methods that you can choose from, depending on your answers to the following questions. + +> [!NOTE] +> +> A benefit of using an assigned access kiosk mode is [these policies](/windows/configuration/kiosk-policies) are automatically applied to the device to optimize the lock-down experience. + +## Which type of app will your kiosk run? + +Your kiosk can run a Universal Windows Platform (UWP) app or a Windows desktop application. For [digital signage](/windows/configuration/setup-digital-signage), select a digital sign player as your kiosk app. Check out the [Guidelines for Kiosk Apps](/windows/configuration/guidelines-for-assigned-access-app). + +## Which type of kiosk do you need? + +If you want your kiosk to run a single app for anyone to see or use, consider an [assigned-access single-app kiosk](/windows/configuration/shell-launcher/single-app-kiosk) that runs either a [Universal Windows Platform (UWP) app](/windows/configuration/kiosk-methods#uwp) or a [Windows desktop application](/windows/configuration/kiosk-methods#classic). + +For a kiosk that people can sign in to with their accounts or that runs more than one app, consider an [assigned access multi-app kiosk](/windows/configuration/kiosk-methods#desktop). + +## Which type of user account will be the kiosk account? + +The kiosk account can be a local standard user account, a domain account, or an Azure Active Directory (Azure AD) account, depending on the method that you use to configure the kiosk. If you want people to sign in and authenticate on the device, you should use an assigned access multi-app kiosk configuration. The assigned access single-app kiosk configuration doesn't require people to sign in to the device, although they can sign in to the kiosk app if you select an app that has a sign-in method. + +## Kiosk capabilities for Windows 10 IoT Enterprise + +| Mode | Features | Description | Customer Usage | +|------|----------|------------ |-----------------| +| Assigned access | Single-app kiosk (UWP) | Auto launches a UWP app in full screen and prevents access to other system functions, while monitoring the lifecycle of the kiosk app. Only supports one single-app kiosk profile under one account per device. | Digital signs & single function devices +| Assigned access | Single-app kiosk (Microsoft Edge) | Auto launches Microsoft Edge and prevents access to other system functions, while monitoring the lifecycle of browser. Only supports one single-app kiosk profile under one account per device. | Public browsing kiosks & digital signs | +| Assigned access | Multi-app kiosk (Restricted User Experience) | Windows 10: Always auto launches a restricted Start menu in full screen with the list of allowed app tiles.
Windows 11: Presents the familiar Windows desktop experience with a restricted set of apps. | Frontline Worker shared devices | +| Shell launcher | Shell launcher | Auto launches an app that the customer specifies and monitors the lifecycle of this app. App can be used as a "shell" if desired. No default lockdown policies like hotkey blocking are enforced in Shell Launcher. | Fixed purpose devices with a custom shell experience | + +## How to configure your device for kiosk mode? + +Visit the following documentation to set up a kiosk according to your scenario: + +* [Configure kiosks and digital signs](/windows/configuration/kiosk-methods) +* [Set up a single-app kiosk](/windows/configuration/kiosk-single-app) +* [Set up a multi-app kiosk](/windows/configuration/lock-down-windows-10-to-specific-apps) +* [Configure Microsoft Edge kiosk mode](/deployedge/microsoft-edge-configure-kiosk-mode) + +## Additional Resources + +* [Find the Application User Model ID of an installed app](/windows/configuration/find-the-application-user-model-id-of-an-installed-app) +* [Validate your kiosk configuration](/windows/configuration/kiosk-validate) +* [Guidelines for choosing an app for assigned access (kiosk mode)](/windows/configuration/guidelines-for-assigned-access-app) +* [Policies enforced on kiosk devices](/windows/configuration/kiosk-policies) +* [Assigned access XML reference](/windows/configuration/kiosk-xml) +* [Use AppLocker to create a Windows 10 kiosk](/windows/configuration/lock-down-windows-10-applocker) +* [Use Shell Launcher to create a Windows 10 kiosk](/windows/configuration/kiosk-shelllauncher) +* [Use MDM Bridge WMI Provider to create a Windows 10 kiosk](/windows/configuration/kiosk-mdm-bridge) +* [Troubleshoot kiosk mode issues](/windows/configuration/kiosk-troubleshoot) +* [Plan your kiosk mode transition to Microsoft Edge](/deployedge/microsoft-edge-kiosk-mode-transition-plan) diff --git a/windows/configuration/shell-launcher/multi-app-kiosk.md b/windows/configuration/shell-launcher/multi-app-kiosk.md new file mode 100644 index 0000000000..b77d2fd604 --- /dev/null +++ b/windows/configuration/shell-launcher/multi-app-kiosk.md @@ -0,0 +1,39 @@ +--- +title: Multi-App Kiosk +ms.date: 08/16/2023 +ms.topic: concept-article +description: Learn about the Multi-App Kiosk in Windows IoT Enterprise. +--- + +# Assigned access multi-app kiosk + +An assigned access multi-app kiosk runs one or more apps from the desktop. People using the kiosk see a customized Start that shows only the tiles for the apps that are allowed. With this approach, you can configure a locked-down experience for different account types. A multi-app kiosk is appropriate for devices that are shared by multiple people. Here's a [guide](/windows/configuration/lock-down-windows-10-to-specific-apps) on how to set up a multi-app kiosk. + +> [!NOTE] +> Multi-app kiosk mode isn't available for Windows 11 IoT Enterprise, version 21H2, or 22H2. Refer to [What's new for subsequent releases](/windows/iot/iot-enterprise/whats-new/release-history#windows-11-iot-enterprise) for information about its return. +> +> **Update** - [Multi-app kiosk mode is now available in Windows 11](https://techcommunity.microsoft.com/t5/windows-it-pro-blog/multi-app-kiosk-mode-now-available-in-windows-11/ba-p/3845558)., version 22H2 as part of the Windows continuous innovation releases. To learn how you can take advantage of features introduced via Windows continuous innovation, see more about how you can access this feature in Windows 11 IoT Enterprise, version 22H2, see [Delivering continuous innovation in Windows 11](https://support.microsoft.com/windows/delivering-continuous-innovation-in-windows-11-b0aa0a27-ea9a-4365-9224-cb155e517f12). + +## Benefits of using a multi-app kiosk + +The benefit of a kiosk that runs multiple specified apps is to provide an easy-to-understand experience for individuals by showing them only the things they need to use, and removing the things they don't need to access. + +A multi-app kiosk is appropriate for devices that are shared by multiple people. Each user can authenticate with the device and receive a customized lockdown experience based on the configuration. + +## Configuring your multi-app kiosk + +* [Configure a kiosk in Microsoft Intune](/windows/configuration/lock-down-windows-10-to-specific-apps#configure-a-kiosk-in-microsoft-intune) +* [Configure a kiosk using a provisioning package](/windows/configuration/lock-down-windows-10-to-specific-apps#configure-a-kiosk-using-a-provisioning-package) + +> [!NOTE] +> +> When you configure a multi-app kiosk, [specific policies](/windows/configuration/kiosk-policies) are enforced that affects all nonadministrator users on the device. + +## More Resources + +* [New features and improvements](/windows/configuration/lock-down-windows-10-to-specific-apps) +* [Set up a multi-app kiosk](/windows/configuration/lock-down-windows-10-to-specific-apps) +* [Kiosk apps for assigned access: Best practices](/windows-hardware/drivers/partnerapps/create-a-kiosk-app-for-assigned-access) +* [Guidelines for choosing an app for assigned access](/windows/configuration/guidelines-for-assigned-access-app) +* [Configure kiosks and digital signs](/windows/configuration/kiosk-methods) +* [More kiosk methods and reference information](/windows/configuration/kiosk-additional-reference) diff --git a/windows/configuration/shell-launcher/single-app-kiosk.md b/windows/configuration/shell-launcher/single-app-kiosk.md new file mode 100644 index 0000000000..541fb49a2e --- /dev/null +++ b/windows/configuration/shell-launcher/single-app-kiosk.md @@ -0,0 +1,38 @@ +--- +title: Assigned access Single-App Kiosk +ms.date: 03/30/2023 +ms.topic: concept-article +description: Learn about the Single-App Kiosk in Windows IoT Enterprise. +--- + +# Assigned access single-app kiosk + +A single-app kiosk uses the assigned access feature to run a single app above the lock screen. When the kiosk account signs in, the app is launched automatically. The person using the kiosk can't do anything on the device outside of the kiosk app. + +> [!NOTE] +> +> Assigned access single-app kiosk mode is not supported over a remote desktop connection. Your kiosk users must sign in on the physical device that is set up as a kiosk. + +## Benefits of using a single-app kiosk + +A single-app kiosk is ideal for public use. Using [shell launcher](./index.md), you can configure a kiosk device that runs a Windows desktop application as the user interface. The application that you specify replaces the default shell (explorer.exe) that usually runs when a user logs on. This type of single-app kiosk runs above the lock screen, and users have access to only this app and nothing else on the system. This experience is often used for public-facing kiosk machines. Check out [Set up a kiosk on Windows 10 Pro, Enterprise, or Education](/windows/configuration/set-up-a-kiosk-for-windows-10-for-desktop-editions) for more information. + +## Configuring your single-app kiosks + +You have several options for configuring your single-app kiosk. + +* [Settings App](/windows/configuration/kiosk-single-app#local) +* [PowerShell](/windows/configuration/kiosk-single-app#powershell) +* [Kiosk Wizard in Windows Configuration Designer](/windows/configuration/kiosk-single-app#wizard) +* [Microsoft Intune or other MDM providers](/windows/configuration/kiosk-single-app#mdm) + +> [!TIP] +> You can also configure a kiosk account and app for single-app kiosk within [XML in a provisioning package](/windows/configuration/lock-down-windows-10-to-specific-apps) by using a [kiosk profile](/windows/configuration/lock-down-windows-10-to-specific-apps#profile). + +## Additional Resources + +* [Set up a single-app kiosk](/windows/configuration/kiosk-single-app) +* [Guidelines for choosing an app for assigned access](/windows/configuration/guidelines-for-assigned-access-app) +* [Kiosk apps for assigned access: Best practices](/windows-hardware/drivers/partnerapps/create-a-kiosk-app-for-assigned-access) +* [Configure kiosks and digital signs](/windows/configuration/kiosk-methods) +* [More kiosk methods and reference information](/windows/configuration/kiosk-additional-reference) diff --git a/windows/configuration/shell-launcher/toc.yml b/windows/configuration/shell-launcher/toc.yml new file mode 100644 index 0000000000..07c18e4e82 --- /dev/null +++ b/windows/configuration/shell-launcher/toc.yml @@ -0,0 +1,25 @@ + +items: +- name: Shell Launcher + items: + - name: Overview + href: index.md + - name: WMI Provider Reference + items: + - name: Class WESL_UserSetting + href: wesl-usersetting.md + - name: GetCustomShell + href: wesl-usersettinggetcustomshell.md + - name: GetDefaultShell + href: wesl-usersettinggetdefaultshell.md + - name: IsEnabled + href: wesl-usersettingisenabled.md + - name: RemoveCustomShell + href: wesl-usersettingremovecustomshell.md + - name: SetCustomShell + href: wesl-usersettingsetcustomshell.md + - name: SetDefaultShell + href: wesl-usersettingsetdefaultshell.md + - name: SetEnabled + href: wesl-usersettingsetenabled.md + diff --git a/windows/configuration/shell-launcher/wedl-assignedaccess.md b/windows/configuration/shell-launcher/wedl-assignedaccess.md new file mode 100644 index 0000000000..6203943578 --- /dev/null +++ b/windows/configuration/shell-launcher/wedl-assignedaccess.md @@ -0,0 +1,141 @@ +--- +title: WEDL\_AssignedAccess +description: WEDL\_AssignedAccess +ms.date: 05/20/2024 +ms.topic: reference +--- + +# WEDL\_AssignedAccess + +This Windows Management Instrumentation (WMI) provider class configures settings for assigned access. + +## Syntax + +```powershell +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 | +|----------|----------------|------------|-------------| +| **UserSID** | string | [key] | The security identifier (SID) for the user account that you want to use as the assigned access account. | +| **AppUserModelId** | string | [read, write] | The Application User Model ID (AUMID) of the Windows app to launch for the assigned access account. | +| **Status** | Boolean | none | Indicates the current status of the assigned access configuration | + +| Value | Description | +|:-----:|-------------| +| 0 | A valid account is configured, but no Windows app is specified. Assigned access is not enabled. | +| 1 | Assigned access is enabled. | +| 0x100 | UserSID error: cannot find the account. | +| 0x103 | UserSID error: the account profile does not exist. | +| 0x200 | AppUserModelID error: cannot find the Windows app. | +| 0x201 | Task Scheduler error: Could not schedule task. Make sure that the Task Scheduler service is running. | +| 0xffffffff | Unspecified 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. + +```powershell +# +#---Define variables--- +# + +$COMPUTER = "localhost" +$NAMESPACE = "root\standardcimv2\embedded" + +# Define the assigned access account. +# To use a different account, change $AssignedAccessAccount to a user account that is present on your device. + +$AssignedAccessAccount = "KioskAccount" + +# Define the Windows app to launch, in this example, use the Application Model User ID (AUMID) for Windows Calculator. +# To use a different Windows app, change $AppAUMID to the AUMID of the Windows app to launch. +# The Windows app must be installed for the account. + +$AppAUMID = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" + +# +#---Define helper functions--- +# + +function Get-UsernameSID($AccountName) { + +# This function retrieves the SID for a user account on a machine. +# This function does not check to verify that the user account actually exists. + + $NTUserObject = New-Object System.Security.Principal.NTAccount($AccountName) + $NTUserSID = $NTUserObject.Translate([System.Security.Principal.SecurityIdentifier]) + + return $NTUserSID.Value +} + +# +#---Set up the new assigned access account--- +# + +# Get the SID for the assigned access account. + +$AssignedAccessUserSID = Get-UsernameSID($AssignedAccessAccount) + +# Check to see if an assigned access account is already set up, and if so, clear it. + +$AssignedAccessConfig = get-WMIObject -namespace $NAMESPACE -computer $COMPUTER -class WEDL_AssignedAccess + +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. + +Set-WmiInstance -class WEDL_AssignedAccess -ComputerName $COMPUTER -Namespace $NAMESPACE -Arguments @{ + UserSID = $AssignedAccessUserSID; + AppUserModelId = $AppAUMID + } | Out-Null; + +# Confirm that the settings were created properly. + +$AssignedAccessConfig = get-WMIObject -namespace $NAMESPACE -computer $COMPUTER -class WEDL_AssignedAccess + +if ($AssignedAccessConfig) { + + "Set up assigned access for the " + $AssignedAccessAccount + " account." + " UserSID = " + $AssignedAccessConfig.UserSid + " AppModelId = " + $AssignedAccessConfig.AppUserModelId + +} else { + + "Could not set up assigned access account." +} +``` + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | diff --git a/windows/configuration/shell-launcher/wesl-usersetting.md b/windows/configuration/shell-launcher/wesl-usersetting.md new file mode 100644 index 0000000000..3d7851941e --- /dev/null +++ b/windows/configuration/shell-launcher/wesl-usersetting.md @@ -0,0 +1,174 @@ +--- +title: WESL_UserSetting +description: WESL_UserSetting +ms.date: 05/02/2017 +ms.topic: reference +--- + +# WESL_UserSetting + +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 + +```powershell +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; + + [Static] uint32 SetCustomShell( + [In, Required] string Sid, + [In, Required] string Shell, + [In] sint32 CustomReturnCodes[], + [In] sint32 CustomReturnCodesAction[], + [In] sint32 DefaultAction + ); + [Static] uint32 GetCustomShell( + [In, Required] string Sid, + [Out, Required] string Shell, + [Out, Required] sint32 CustomReturnCodes[], + [Out, Required] sint32 CustomReturnCodesAction[], + [Out, Required] sint32 DefaultAction + ); + [Static] uint32 RemoveCustomShell( + [In, Required] string Sid + ); + [Static] uint32 GetDefaultShell( + [Out, Required] string Shell, + [Out, Required] sint32 DefaultAction + ); + [Static] uint32 SetDefaultShell( + [In, Required] string Shell, + [In, Required] sint32 DefaultAction + ); + [Static] uint32 IsEnabled( + [Out, Required] boolean Enabled + ); + [Static] uint32 SetEnabled( + [In, Required] boolean Enabled); + ); +}; +``` + +## Members + +The following tables list any methods and properties that belong to this class. + +### Methods + +| Methods | Description | +|---------|-------------| +| [WESL_UserSetting.SetCustomShell](wesl-usersettingsetcustomshell.md) | Configures Shell Launcher for a specific user or group, based on SID. | +| [WESL_UserSetting.GetCustomShell](wesl-usersettinggetcustomshell.md) | Retrieves the Shell Launcher configuration for a specific user or group, based on the SID. | +| [WESL_UserSetting.RemoveCustomShell](wesl-usersettingremovecustomshell.md) | Removes a Shell Launcher configuration for a specific user or group, based on the SID. | +| [WESL_UserSetting.GetDefaultShell](wesl-usersettinggetdefaultshell.md) | Retrieves the default Shell Launcher configuration. | +| [WESL_UserSetting.SetDefaultShell](wesl-usersettingsetdefaultshell.md) | Sets the default Shell Launcher configuration. | +| [WESL_UserSetting.IsEnabled](wesl-usersettingisenabled.md) | Retrieves a value that indicates if Shell Launcher is enabled or disabled. | +| [WESL_UserSetting.SetEnabled](wesl-usersettingsetenabled.md) | Enables or disables Shell Launcher. | + +### Properties + +| Property | Data type | Qualifiers | Description | +|----------|----------------|------------|-------------| +| **Sid** | string | [read, write, required] | User or group SID. | +| **shell** | string | [read, write, required] | The application to start as the shell.
The **shell** property can be a filename in the *Path* environment variable, or it can contain a fully qualified path to the application. You can also use environment variables in the path.
Any spaces in the **shell** property must be part of a quote-delimited string. | +| **CustomReturnCodes** | Sint32[] |[read, write] | An array of custom return codes that can be returned by the shell. | +| **CustomReturnCodesAction** | Sint32[] | [read, write] | An array of custom return code actions that determine what action Shell Launcher takes when the shell exits. The custom actions map to the array of **CustomReturnCodes**.
The possible actions are:
0 - Restart the shell.
1 - Restart the device.
2 - Shut down the device.
3 - Do nothing. | +| **DefaultAction** | Sint32 | [read, write] | The default action Shell Launcher takes when the shell exits.
The possible actions are defined as follows:
0 - Restart the shell.
1 - Restart the device.
2 - Shut down the device.
3 - Do nothing. | + +### 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](/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc771299(v=ws.10)) 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. + +```powershell +$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" + +# Create a function to retrieve the SID for a user account on a machine. + +function Get-UsernameSID($AccountName) { + + $NTUserObject = New-Object System.Security.Principal.NTAccount($AccountName) + $NTUserSID = $NTUserObject.Translate([System.Security.Principal.SecurityIdentifier]) + + 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") + +# Define actions to take when the shell program exits. + +$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) + +# Display the default shell to verify that it was added correctly. + +$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($Cashier_SID, "c:\program files\internet explorer\iexplore.exe www.microsoft.com", ($null), ($null), $restart_shell) + +# Set Explorer as the shell for administrators. + +$ShellLauncherClass.SetCustomShell($Admins_SID, "explorer.exe") + +# View all the custom shells defined. + +"`nCurrent settings for custom shells:" +Get-WmiObject -namespace $NAMESPACE -computer $COMPUTER -class WESL_UserSetting | Select Sid, Shell, DefaultAction + +# Remove the new custom shells. + +$ShellLauncherClass.RemoveCustomShell($Admins_SID) + +$ShellLauncherClass.RemoveCustomShell($Cashier_SID) +``` + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related topics + +- [Shell Launcher](index.md) diff --git a/windows/configuration/shell-launcher/wesl-usersettinggetcustomshell.md b/windows/configuration/shell-launcher/wesl-usersettinggetcustomshell.md new file mode 100644 index 0000000000..5633e7df6e --- /dev/null +++ b/windows/configuration/shell-launcher/wesl-usersettinggetcustomshell.md @@ -0,0 +1,77 @@ +--- +title: WESL_UserSetting.GetCustomShell +description: WESL_UserSetting.GetCustomShell +ms.date: 05/20/2024 +ms.topic: reference +--- + +# WESL_UserSetting.GetCustomShell + +This method retrieves the Shell Launcher configuration for a specific user or group, based on the security identifier (SID). + +## Syntax + +```powershell +[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 | +|:-----:|-------------| +| 0 | Restart the shell. | +| 1 | Restart the device. | +| 2 | Shut down the device. | +| 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 | +|:------:|-------------| +| 0 | Restart the shell. | +| 1 | Restart the device. | +| 2 | Shut down the device. | +| 3 | Do nothing. | + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related topics + +- [WESL_UserSetting](wesl-usersetting.md) +- [Shell Launcher](index.md) diff --git a/windows/configuration/shell-launcher/wesl-usersettinggetdefaultshell.md b/windows/configuration/shell-launcher/wesl-usersettinggetdefaultshell.md new file mode 100644 index 0000000000..9cabb200ab --- /dev/null +++ b/windows/configuration/shell-launcher/wesl-usersettinggetdefaultshell.md @@ -0,0 +1,57 @@ +--- +title: WESL_UserSetting.GetDefaultShell +description: WESL_UserSetting.GetDefaultShell +ms.date: 05/20/2024 +ms.topic: reference +--- + +# WESL_UserSetting.GetDefaultShell + +This method retrieves the default Shell Launcher configuration. + +## Syntax + +```powershell +[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 | +|:-----:|-------------| +| 0 | Restart the shell. | +| 1 | Restart the device. | +| 2 | Shut down the device. | +| 3 | Do nothing. | + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related topics + +- [WESL_UserSetting](wesl-usersetting.md) +- [Shell Launcher](index.md) diff --git a/windows/configuration/shell-launcher/wesl-usersettingisenabled.md b/windows/configuration/shell-launcher/wesl-usersettingisenabled.md new file mode 100644 index 0000000000..fb4739ce37 --- /dev/null +++ b/windows/configuration/shell-launcher/wesl-usersettingisenabled.md @@ -0,0 +1,41 @@ +--- +title: WESL_UserSetting.IsEnabled +description: WESL_UserSetting.IsEnabled +ms.date: 05/20/2024 +ms.topic: reference +--- + +# WESL_UserSetting.IsEnabled + +This method retrieves a value that indicates if Shell Launcher is enabled or disabled. + +## Syntax + +```powershell +[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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related topics + +- [WESL_UserSetting](wesl-usersetting.md) +- [Shell Launcher](index.md) diff --git a/windows/configuration/shell-launcher/wesl-usersettingremovecustomshell.md b/windows/configuration/shell-launcher/wesl-usersettingremovecustomshell.md new file mode 100644 index 0000000000..fb1df0e87f --- /dev/null +++ b/windows/configuration/shell-launcher/wesl-usersettingremovecustomshell.md @@ -0,0 +1,45 @@ +--- +title: WESL_UserSetting.RemoveCustomShell +description: WESL_UserSetting.RemoveCustomShell +ms.date: 05/20/2024 +ms.topic: reference +--- + +# WESL_UserSetting.RemoveCustomShell + +This method removes a Shell Launcher configuration for a specific user or group, based on the security identifier (SID). + +## Syntax + +```powershell +[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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +You must restart your device for the changes to take effect. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related topics + +- [WESL_UserSetting](wesl-usersetting.md) +- [Shell Launcher](index.md) diff --git a/windows/configuration/shell-launcher/wesl-usersettingsetcustomshell.md b/windows/configuration/shell-launcher/wesl-usersettingsetcustomshell.md new file mode 100644 index 0000000000..a90450063c --- /dev/null +++ b/windows/configuration/shell-launcher/wesl-usersettingsetcustomshell.md @@ -0,0 +1,77 @@ +--- +title: WESL_UserSetting.SetCustomShell +description: WESL_UserSetting.SetCustomShell +ms.date: 05/20/2024 +ms.topic: reference +--- + +# WESL_UserSetting.SetCustomShell + +This method configures Shell Launcher for a specific user or group, based on the security identifier (SID). + +## Syntax + +```powershell +[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 | +|:-----:|-------------| +| 0 | Restart the shell. | +| 1 | Restart the device. | +| 2 | Shut down the device. | +| 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 | +|:-----:|-------------| +| 0 | Restart the shell.| +| 1 | Restart the device. | +| 2 | Shut down the device. | +| 3 | Do nothing. | + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related topics + +- [WESL_UserSetting](wesl-usersetting.md) +- [Shell Launcher](index.md) diff --git a/windows/configuration/shell-launcher/wesl-usersettingsetdefaultshell.md b/windows/configuration/shell-launcher/wesl-usersettingsetdefaultshell.md new file mode 100644 index 0000000000..ec89600f38 --- /dev/null +++ b/windows/configuration/shell-launcher/wesl-usersettingsetdefaultshell.md @@ -0,0 +1,57 @@ +--- +title: WESL_UserSetting.SetDefaultShell +description: WESL_UserSetting.SetDefaultShell +ms.date: 05/20/2024 +ms.topic: reference +--- + +# WESL_UserSetting.SetDefaultShell + +This method sets the default Shell Launcher configuration. + +## Syntax + +```powershell +[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 | +|:-------:|-------------| +| 0 | Restart the shell. | +| 1 | Restart the device. | +| 2 | Shut down the device. | +| 3 | Do nothing. | + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related topics + +- [WESL_UserSetting](wesl-usersetting.md) +- [Shell Launcher](index.md) diff --git a/windows/configuration/shell-launcher/wesl-usersettingsetenabled.md b/windows/configuration/shell-launcher/wesl-usersettingsetenabled.md new file mode 100644 index 0000000000..43aff8b5a7 --- /dev/null +++ b/windows/configuration/shell-launcher/wesl-usersettingsetenabled.md @@ -0,0 +1,47 @@ +--- +title: WESL_UserSetting.SetEnabled +description: WESL_UserSetting.SetEnabled +ms.date: 05/20/2024 +ms.topic: reference +--- + +# WESL_UserSetting.SetEnabled + +This method enables or disables Shell Launcher. + +## Syntax + +```powershell +[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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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](../unified-write-filter/uwf-registryfiltercommitregistry.md) 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related topics + +- [WESL_UserSetting](wesl-usersetting.md) +- [Shell Launcher](index.md) diff --git a/windows/configuration/taskbar/pinned-apps.md b/windows/configuration/taskbar/pinned-apps.md index d2454b1e79..6f93e76b25 100644 --- a/windows/configuration/taskbar/pinned-apps.md +++ b/windows/configuration/taskbar/pinned-apps.md @@ -193,7 +193,7 @@ Alternatively, you can configure devices using a [custom policy][MEM-1] with the - **Value:** content of the XML file > [!NOTE] -> The content of the file must be entered as a single line in the `Value` field. Use a text editor to remove any line breaks from the XML file, usually with a function called *join lines*. +> The content of the file must be entered as a single line in the `Value` field. Use a text editor to remove any line breaks from the XML file, usually with a function called *join lines* or *linearize*. If customizations.xml is being modified directly instead of using the WCD editor, the XML brackets need to be escaped / replaced with \< and \> entity encodings. Single and double quote characters do not need to be escaped. [!INCLUDE [provisioning-package-2](../../../includes/configure/provisioning-package-2.md)] diff --git a/windows/configuration/unbranded-boot/images/boot.jpg b/windows/configuration/unbranded-boot/images/boot.jpg new file mode 100644 index 0000000000..bc46adb1cf Binary files /dev/null and b/windows/configuration/unbranded-boot/images/boot.jpg differ diff --git a/windows/configuration/unbranded-boot/index.md b/windows/configuration/unbranded-boot/index.md new file mode 100644 index 0000000000..e3aa95b244 --- /dev/null +++ b/windows/configuration/unbranded-boot/index.md @@ -0,0 +1,160 @@ +--- +title: Unbranded Boot +description: Unbranded Boot +ms.date: 09/10/2024 +ms.topic: overview +--- + +# Unbranded Boot + +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 can't 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 + +Unbranded Boot can be enabled on: + +- Windows 10 Enterprise +- Windows 10 IoT Enterprise +- Windows 10 Education +- Windows 11 Enterprise +- Windows 11 IoT Enterprise +- Windows 11 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 subsettings. + +- **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. + +## Turn on Unbranded Boot settings + +Unbranded Boot is an optional component and isn't enabled by default in Windows. It must be enabled prior to configuring. + +If Windows has already been installed, you can't apply a provisioning package to configure Unbranded Boot; instead you must use BDCEdit to configure Unbranded boot if Windows is installed. + +BCDEdit is the primary tool for editing the Boot Configuration Database (BCD) of Windows and is included in Windows in the %WINDIR%\\System32 folder. Administrator privileges are required to use BCDEdit to modify the BCD. + +### Turn on Unbranded Boot by using Control Panel + +1. In the Windows search bar, type **Turn Windows features on or off** and either press **Enter** or tap or select **Turn Windows features on or off** to open the **Windows Features** window. +1. In the **Windows Features** window, expand the **Device Lockdown** node, and select (to turn on) or clear (to turn off) the checkbox for **Unbranded Boot**. +1. Select **OK**. The **Windows Features** window indicates that Windows is searching for required files and displays a progress bar. Once found, the window indicates that Windows is applying the changes. When completed, the window indicates the requested changes are completed. +1. Restart your device to apply the changes. + +## Configure Unbranded Boot settings at runtime using BCDEdit + +1. Open a command prompt as an administrator. +1. Run the following command to disable the F8 key during startup to prevent access to the **Advanced startup options** menu. + + ```cmd + bcdedit.exe -set {globalsettings} advancedoptions false + ``` + +1. Run the following command to disable the F10 key during startup to prevent access to the **Advanced startup options** menu. + + ```cmd + bcdedit.exe -set {globalsettings} optionsedit false + ``` + +1. Run the following command to suppress all Windows UI elements (logo, status indicator, and status message) during startup. + + ```cmd + bcdedit.exe -set {globalsettings} bootuxdisabled on + ``` + +1. Run the following command to suppress any error screens that are displayed during boot. If **noerrordisplay** is on and the boot manager hits a *WinLoad Error* or *Bad Disk Error*, the system displays a black screen. + + ```cmd + bcdedit.exe -set {bootmgr} noerrordisplay on + ``` + +## Configure Unbranded Boot using Unattend + +You can also configure the Unattend settings in the [Microsoft-Windows-Embedded-BootExp](/windows-hardware/customize/desktop/unattend/microsoft-windows-embedded-bootexp) component to add Unbranded Boot features to your image during the design or imaging phase. You can manually create an Unattend answer file or use Windows System Image Manager (Windows SIM) to add the appropriate settings to your answer file. For more information about the Unbranded Boot settings and XML examples, see the settings in Microsoft-Windows-Embedded-BootExp. + +### Unbranded Boot settings + +The following table shows Unbranded Boot settings and their values. + +| Setting | Description | Value | +|---------|-------------|-------| +| 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. | +| DisplayDisabled | Contains an integer that configures the device to display a blank screen when Windows encounters an error that it can't recover from. | Set to 1 to display a blank screen on error; otherwise; set to 0 (zero). The default value is 0. | +| HideAllBootUI | Contains an integer that suppresses all Windows UI elements (logo, status indicator, and status message) during startup. | Set to 1 to suppress all Windows UI elements during startup; otherwise; set to 0 (zero). The default value is 0. | +| HideBootLogo | Contains an integer that suppresses the default Windows logo that displays during the OS loading phase. | Set to 1 to suppress the default Windows logo; otherwise; set to 0 (zero). The default value is 0. | +| HideBootStatusIndicator | Contains an integer that suppresses the status indicator that displays during the OS loading phase. | Set to 1 to suppress the status indicator; otherwise; set to 0 (zero). The default value is 0. | +| HideBootStatusMessage | Contains an integer that suppresses the startup status text that displays during the OS loading phase. | Set to 1 to suppress the startup status text; otherwise; set to 0 (zero). The default value is 0. | + +## Customize the boot screen using Windows Configuration Designer and Deployment Image Servicing and Management (DISM) + +You must enable Unbranded boot on the installation media with DISM before you can apply settings for Unbranded boot using either Windows Configuration Designer or applying a provisioning package during setup. + +1. Create a provisioning package or create a new Windows image in Windows Configuration Designer by following the instructions in [Create a provisioning package](/windows/configuration/provisioning-packages/provisioning-create-package). + +1. In the Available customizations page, select **Runtime settings** > **SMISettings** and then set the value for the boot screen settings. The following values are just examples. + + - **HideAllBootUI**=FALSE + - **HideBootLogo**=FALSE + - **HideBootStatusIndicator**=TRUE + - **HideBootStatusMessage**=TRUE + - **CrashDumpEnabled**=Full dump + + > [!TIP] + > For more information, see [SMISettings](/windows/configuration/wcd/wcd-smisettings) in the Windows Configuration Designer reference. + +1. Once you have finished configuring the settings and building the package or image, you use DISM to apply the settings. + 1. Open a command prompt with administrator privileges. + 1. Copy install.wim to a temporary folder on hard drive (in the following steps, it assumes it's called c:\\wim). + 1. Create a new directory. + + ```cmd + md c:\wim + ``` + + 1. Mount the image. + + ```cmd + dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim + ``` + + 1. Enable the feature. + + ```cmd + dism /image:c:\wim /enable-feature /featureName:Client-EmbeddedBootExp + ``` + + 1. Commit the change. + + ```cmd + dism /unmount-wim /MountDir:c:\wim /Commit + ``` + +In the following image, the BootLogo is outlined in green, the BootStatusIndicator is outlined in red, and the BootStatusMessage is outlined in blue. + +![unbranded boot screen](images/boot.jpg) + +## Replace the startup logo + +The only supported way to replace the startup logo with a custom logo is to modify the Boot Graphics Resource Table (BGRT) on a device that uses UEFI as the firmware interface. If your device uses the BGRT to include a custom logo, it's always displayed and you can't suppress the custom logo. + +## Suppress Errors During Boot + +Errors that occur during early Windows Boot are typically a sign of bad device configuration or failing hardware and require user intervention to recover. You can suppress all error screens during early boot by enabling the **noerrordisplay** BCD setting. + +1. Open a command prompt as an administrator. +1. Run the following command to suppress error screens during boot. + + ```cmd + bcdedit.exe -set {bootmgr} noerrordisplay on + ``` + +## Related articles + +- [Custom Logon](../custom-logon/index.md) diff --git a/windows/configuration/unified-write-filter/hibernate-once-resume-many-horm.md b/windows/configuration/unified-write-filter/hibernate-once-resume-many-horm.md new file mode 100644 index 0000000000..f58729857a --- /dev/null +++ b/windows/configuration/unified-write-filter/hibernate-once-resume-many-horm.md @@ -0,0 +1,165 @@ +--- +title: Hibernate Once/Resume Many (HORM) +description: Hibernate Once/Resume Many (HORM) +ms.date: 04/12/2018 +ms.topic: concept-article +--- + +# Hibernate Once/Resume Many (HORM) + +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 if 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 can't protect hidden partitions, HORM can't 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. + +On Windows 10, version 21H2 or newer versions of Windows, Read-Only Media mode must be implemented to enable HORM. + +## 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 are 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 doesn't support disk-backed overlays. + +UWF doesn't 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 for standard user accounts to prevent the saved hibernation file from being overwritten when entering sleep, hibernate, or shutdown state. + +To disable hybrid sleep and fast startup on your device, follow these steps. + +### How to disable hybrid sleep + +1. Open the Local Group Policy Editor (gpedit.msc) and navigate to the following path. + Computer Configuration\Administrative Templates\System\Power Management\Sleep settings + +1. Enable the following two settings under the path: + + Turn off hybrid sleep (plugged in) + Turn off hybrid sleep (on battery) + +### How to disable fast startup + +To disable fast startup, set the following registry value: + +> [!IMPORTANT] +> Follow the steps in this section carefully. Serious problems might occur if you modify the registry incorrectly. Before you modify it, [back up the registry for restoration](https://support.microsoft.com/help/322756) in case problems occur. + +Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Power +Name: HiberbootEnabled +Type: DWORD +Value: 0 (0 = Disabled、1 = Enabled) + +### How to prevent Windows from entering hibernation due to the system idle time-out or user operations + +Configure the following two policies in Local Group Policy Editor (gpedit.msc): + +Policy to prevent Windows from entering hibernation by the system idle time: + +1. Under the following path: + Computer Configuration\Administrative Templates\System\Power Management\Sleep settings + +1. Enable these two settings and set the value to 0. + + Specify the system hibernate timeout (plugged in) + Specify the system hibernate timeout (on battery) + +Disable the policy to show "Hibernation" in the power options menu: + +1. Under the following path: + Computer Configuration\Windows Components\File Explorer + +1. Disable the following setting: + Show hibernate in the power options menu + +> [!NOTE] +> +> - Don't disable hibernate (i.e. powercfg /h off) because it deletes the hiberfil.sys which HORM requires. +> - Even after you set all these settings, the timestamp of hiberfil.sys is updated after the system reboot. This is because UWF can't filter the hiberfil.sys file, and the file needs to be compressed and decompressed during the system reboot. However, this doesn't change the content of hiberfil.sys so the preconfigured state of the device is protected. + +## Configure HORM + +1. On the device, open a command prompt as an administrator. +1. To enable hibernation on the device, type the following command: + + `powercfg /h on` + +1. To enable UWF on your device, type the following command: + + `uwfmgr.exe filter enable` + +1. To protect all volumes on your device, type the following command: + + `uwfmgr.exe volume protect all` + + > [!Note] + > DVD RW and floppy drives throw an expected error that can be safely ignored. + +1. To restart your device to enable UWF, type the following command: + + `uwfmgr.exe filter restart` + +1. After the device restarts, to verify the UWF changes that you made on your device, type the following command: + + `uwfmgr.exe get-config` + +1. To enable HORM on your device, type the following command: + + `uwfmgr.exe filter enable-horm` + + > [!Note] + > Remove all file and registry exclusions before you enable HORM. + +1. (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. +1. To hibernate the system one time to create an initial hibernation file, at the command prompt, type the following command: + + `shutdown /h` + +1. Press the power button to wake the system from hibernation. +1. 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` + +1. When HORM is enabled, you can't change the UWF configuration. To make changes, you must first disable HORM. To disable HORM, type the following command: + + `uwfmgr.exe filter disable-horm` + +1. To restart the system to finish disabling HORM, type the following command: + + `uwfmgr.exe restart` + + The system restarts normally with HORM disabled. + +> [!WARNING] +> Don't uninstall UWF when the filter is enabled or when HORM is enabled, either online or offline by using Windows PE. + +## Fix an issue when you can't disable HORM + +In rare circumstances, your device can enter a state where you can't disable HORM normally. + +If you can't disable HORM on your device, use following procedure to resolve this issue: + +1. Start your device in Windows PE. +1. Type the following command: + + `bcdedit.exe /set {bootmgr} custom:26000024 0` + +1. Restart the device: + + `shutdown /r/t 0` + +1. Disable HORM: + + `uwfmgr.exe filter disable-horm` + +1. Enable HORM: + + `uwfmgr.exe filter enable-horm` + +1. Hibernate the device: + + `shutdown /h` diff --git a/windows/configuration/unified-write-filter/images/administratorcommandprompt.png b/windows/configuration/unified-write-filter/images/administratorcommandprompt.png new file mode 100644 index 0000000000..3e16f5dc74 Binary files /dev/null and b/windows/configuration/unified-write-filter/images/administratorcommandprompt.png differ diff --git a/windows/configuration/unified-write-filter/images/administratorcompactprompt.png b/windows/configuration/unified-write-filter/images/administratorcompactprompt.png new file mode 100644 index 0000000000..6e2d631dd9 Binary files /dev/null and b/windows/configuration/unified-write-filter/images/administratorcompactprompt.png differ diff --git a/windows/configuration/unified-write-filter/images/administratorprompt.png b/windows/configuration/unified-write-filter/images/administratorprompt.png new file mode 100644 index 0000000000..e58c02c595 Binary files /dev/null and b/windows/configuration/unified-write-filter/images/administratorprompt.png differ diff --git a/windows/configuration/unified-write-filter/images/fullvolumecommit.png b/windows/configuration/unified-write-filter/images/fullvolumecommit.png new file mode 100644 index 0000000000..8b1c889cd1 Binary files /dev/null and b/windows/configuration/unified-write-filter/images/fullvolumecommit.png differ diff --git a/windows/configuration/unified-write-filter/images/overlaysettings.png b/windows/configuration/unified-write-filter/images/overlaysettings.png new file mode 100644 index 0000000000..d82148918a Binary files /dev/null and b/windows/configuration/unified-write-filter/images/overlaysettings.png differ diff --git a/windows/configuration/unified-write-filter/index.md b/windows/configuration/unified-write-filter/index.md new file mode 100644 index 0000000000..86456e0582 --- /dev/null +++ b/windows/configuration/unified-write-filter/index.md @@ -0,0 +1,124 @@ +--- +title: Unified Write Filter (UWF) feature (unified-write-filter) +description: Unified Write Filter (UWF) feature (unified-write-filter) +ms.date: 10/02/2018 +ms.topic: overview +--- + +# Unified Write Filter (UWF) feature + +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 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 where new apps aren't frequently added. + +- Can be used to reduce wear on solid-state drives and other write-sensitive media. + +- Optimizing Application load timing on boot – it can be faster to resume from a HORM file on every boot rather than reloading the system on each boot + +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 can't 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](uwfmgrexe.md), or remotely using MDM tools with the [UnifiedWriteFilter CSP](/windows/client-management/mdm/unifiedwritefilter-csp) or the [UWF WMI](uwf-wmi-provider-reference.md). + +- You can [update and service UWF-protected devices](service-uwf-protected-devices.md) by using UWF servicing mode or adding file and registry exclusions to specific system areas. + +- On Windows 10, version 1803, you can use a [persistent overlay](uwfoverlay.md#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 [free space passthrough)](uwfoverlay.md#freespace-passthrough-recommended) to access your drive's 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 increased. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## 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 can't create file exclusions or do file commit operations on the volume. Writes to excluded files still influence the growth of the Overlay. + +- The overlay doesn't mirror the entire volume, but dynamically grows to keep track of redirected writes. + +- UWF supports up to 16 terabytes of protected volumes. + +- UWF doesn't support the use of fast startup when shutting down your device. If fast startup is turned on, shutting down the device doesn't 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 doesn't support [Storage Spaces](/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831739(v=ws.11)). + +- On a computer on which [UWF is enabled and used to protect drive C](./uwf-turnonuwf.md#turn-on-uwf-on-a-running-pc), you can't permanently set the date and time to a past time. If you make such a change, the original date and time settings will be restored after the computer restarts. + + To work around this issue, you must disable UWF before you change the date and time with th the following command. + + ```cmd + uwfmgr.exe filter disable + ``` + + > [!NOTE] + > Do not add the file that retains date and time settings ("%windir%\bootstat.dat") to the [write filter exclusions](./uwfexclusions.md) to work around this issue. Doing this causes Stop error 0x7E (SYSTEM_THREAD_EXCEPTION_NOT_HANDLED) to occur. + +## Turn on and configure UWF + +UWF is an optional component and isn't enabled by default in Windows 10. You must [turn on UWF](uwf-turnonuwf.md) before you can configure it. + +## UWF overlay + +You can choose the type of overlay, reserved space and persistence 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](uwfoverlay.md). + +## Volumes + +A volume is a logical unit that represents an area of persistent storage to the file system that is used by the OS such as: + +- A single physical storage device, such as a hard disk +- A single partition on a physical storage device with multiple partitions +- 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. With *loose binding*, drive letters are assigned dynamically as the volume configuration changes. + +If you specify a volume using the volume device identifier, UWF uses *tight binding* to recognize the volume. With *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 + +You can add specific files, folders, and registry keys to the [write filter exclusion](uwfexclusions.md) list to prevent them from being filtered. + +## 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](service-uwf-protected-devices.md). + +## 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)](uwftroubleshooting.md). + +## Related articles + +- [Unbranded Boot](../unbranded-boot/index.md) +- [Custom Logon](../custom-logon/index.md) +- [Shell Launcher](../shell-launcher/index.md) diff --git a/windows/configuration/unified-write-filter/service-uwf-protected-devices.md b/windows/configuration/unified-write-filter/service-uwf-protected-devices.md new file mode 100644 index 0000000000..0891306f21 --- /dev/null +++ b/windows/configuration/unified-write-filter/service-uwf-protected-devices.md @@ -0,0 +1,35 @@ +--- +title: Service UWF-protected devices +description: Service UWF-protected devices +ms.date: 10/02/2018 +ms.topic: reference +--- + +# Service UWF-protected devices + +To update your devices, use UWF servicing mode. UWF servicing mode allows you to apply Windows updates, anti-malware signature file updates, and custom software or third-party software updates. + +Normally, when the Unified Write Filter (UWF) is active, system updates are disabled, as they would be erased when the overlay is cleared. + +When UWF servicing mode is triggered, Windows does the following: + +1. Clears the UWF overlay +1. Reboots the devices +1. Triggers a system maintenance hour +1. Disables the UWF filter +1. Scans for and applies Windows updates +1. Scans for and applies app updates from the Microsoft store +1. 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's a user account that doesn't include a password, UWF servicing fails. + +## In this section + +| Article | Description | +|:------------------------------------------|:-----------------------------------------------------------------------------------| +| [Anti-malware support on UWF-protected devices](uwf-antimalware-support.md) |Describes the procedures to add support for Microsoft Defender and System Center Endpoint Protection (SCEP/Forefront) anti-malware to your UWF-protected devices. | +| [Apply OEM updates to UWF-protected devices](uwf-apply-windows-updates.md) |Provides information about how to apply OEM updates to a UWF-protected device. | +| [Apply Windows updates to UWF-protected devices](uwf-apply-windows-updates.md) | Describes the procedures to apply Windows updates to your UWF-protected devices. | +| [UWF master servicing script](uwf-master-servicing-script.md) | Provides information about the UWF master servicing script (UwfServicingMasterScript.cmd). | +| [UWF servicing screen saver](uwf-servicing-screen-saver.md) | Provides information about how to modify the default UWF servicing screen saver. | diff --git a/windows/configuration/unified-write-filter/toc.yml b/windows/configuration/unified-write-filter/toc.yml new file mode 100644 index 0000000000..d8105e71ec --- /dev/null +++ b/windows/configuration/unified-write-filter/toc.yml @@ -0,0 +1,126 @@ + +items: +- name: Unified Write Filter + items: + - name: Overview + href: index.md + - name: Hibernate Once/Resume Many (HORM) + href: hibernate-once-resume-many-horm.md + - name: Exclusions + href: uwfexclusions.md + - name: Overlay + href: uwfoverlay.md + - name: Enable + href: uwf-turnonuwf.md + - name: Command Line Utility (uwfmgr.exe) + href: uwfmgrexe.md + - name: Servicing + items: + - name: Servicing protected devices + href: service-uwf-protected-devices.md + - name: Antimalware support + href: uwf-antimalware-support.md + - name: Windows Updates + href: uwf-apply-windows-updates.md + - name: OEM Updates + href: uwf-apply-oem-updates.md + - name: Servicing master script + href: uwf-master-servicing-script.md + - name: Servicing screen saver + href: uwf-servicing-screen-saver.md + - name: Troubleshooting + href: uwftroubleshooting.md + - name: WMI Provider Reference + items: + - name: Overview + href: uwf-wmi-provider-reference.md + - name: Class UWF_ExcludedFile + href: uwf-excludedfile.md + - name: Class UWF_ExcludedRegistryKey + href: uwf-excludedregistrykey.md + - name: Class UWF_Filter + items: + - name: Overview + href: uwf-filter.md + - name: Disable + href: uwf-filterdisable.md + - name: Enable + href: uwf-filterdisable.md + - name: ResetSettings + href: uwf-filterresetsettings.md + - name: RestartSystem + href: uwf-filterrestartsystem.md + - name: ShutdownSystem + href: uwf-filtershutdownsystem.md + - name: Class UWF_Overlay + items: + - name: Overview + href: uwf-overlay.md + - name: GetOverlayFiles + href: uwf-overlaygetoverlayfiles.md + - name: OverlayFile + href: uwf-overlayfile.md + - name: SetCriticalThreshold + href: uwf-overlaysetcriticalthreshold.md + - name: SetWarningThreshold + href: uwf-overlaysetwarningthreshold.md + - name: Class UWF_OverlayConfig + items: + - name: Overview + href: uwf-overlayconfig.md + - name: SetMaximumSize + href: uwf-overlayconfigsetmaximumsize.md + - name: SetType + href: uwf-overlayconfigsettype.md + - name: Class UWF_RegistryFilter + items: + - name: Overview + href: uwf-registryfilter.md + - name: AddExclusion + href: uwf-registryfilteraddexclusion.md + - name: CommitRegistry + href: uwf-registryfiltercommitregistry.md + - name: CommitRegistryDeletion + href: uwf-registryfiltercommitregistrydeletion.md + - name: FindExclusion + href: uwf-registryfilterfindexclusion.md + - name: GetExclusions + href: uwf-registryfiltergetexclusions.md + - name: RemoveExclusion + href: uwf-registryfilterremoveexclusion.md + - name: Class UWF_Servicing + items: + - name: Overview + href: uwf-servicing.md + - name: Disable + href: uwf-servicingdisable.md + - name: Enable + href: uwf-servicingenable.md + - name: UpdateWindows + href: uwf-servicingupdatewindows.md + - name: Class UWF_Volume + items: + - name: Overview + href: uwf-volume.md + - name: AddExclusion + href: uwf-volumeaddexclusion.md + - name: CommitFile + href: uwf-volumecommitfile.md + - name: CommitFileDeletion + href: uwf-volumecommitfiledeletion.md + - name: FindExclusion + href: uwf-volumefindexclusion.md + - name: GetExclusions + href: uwf-volumegetexclusions.md + - name: protect + href: uwf-volumeprotect.md + - name: RemoveAllExclusions + href: uwf-volumeremoveallexclusions.md + - name: RemoveExclusion + href: uwf-volumeremoveexclusion.md + - name: SetBindByDriveLetter + href: uwf-volumesetbindbydriveletter.md + - name: Unprotect + href: uwf-volumeunprotect.md + - name: Migration from Enhanced Write Filter + href: uwf-wes7-ewf-to-win10-uwf.md \ No newline at end of file diff --git a/windows/configuration/unified-write-filter/uwf-antimalware-support.md b/windows/configuration/unified-write-filter/uwf-antimalware-support.md new file mode 100644 index 0000000000..9dfd69b37d --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-antimalware-support.md @@ -0,0 +1,73 @@ +--- +title: Antimalware support on UWF-protected devices +description: Antimalware support on UWF-protected devices +ms.date: 05/02/2017 +ms.topic: reference +--- + +# Antimalware support on UWF-protected devices + +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. + +## Add support for Microsoft Defender on UWF-protected devices + +Add these exclusions to UWF: + +1. File exclusions + + ```text + C:\Program Files\Windows Defender + C:\ProgramData\Microsoft\Windows Defender + C:\Windows\WindowsUpdate.log + C:\Windows\Temp\MpCmdRun.log + ``` + +1. Registry exclusions + + ```reg + HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdBoot + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdFilter + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdNisSvc + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdNisDrv + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinDefend + ``` + + > [!NOTE] + > If a Windows IoT Enterprise computer stops responding during Windows startup, see [Windows doesn't start after you exclude UWF from Microsoft Defender](/troubleshoot/windows-client/performance/windows-hangs-on-startup-after-excluding-uwf-from-microsoft-defender) for a workaround. This issue impacts: + > + > - Windows 10 IoT Enterprise, version 21H1 + > - Windows 10 IoT Enterprise, version 21H2 + > - Windows 10 IoT Enterprise, version 22H1 + > - Windows 10 IoT Enterprise LTSC 2016 + > - Windows 10 IoT Enterprise LTSC 2019 + > - Windows 10 IoT Enterprise LTSC 2021 + > - Windows 11 IoT Enterprise + +## Add support for System Center Endpoint Protection on UWF-protected devices + +Add these exclusions to UWF: + +1. File exclusions + + ```txt + C:\Program Files\Microsoft Security Client + C:\Windows\Windowsupdate.log + C:\Windows\Temp\Mpcmdrun.log + C:\ProgramData\Microsoft\Microsoft Antimalware + ``` + +1. Registry exclusions + + ```reg + HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Antimalware + ``` + +> [!NOTE] +> Windows 10 Enterprise doesn't include System Center Endpoint Protection. You can purchase licenses and install System Center Endpoint Protection independently. + +## Related articles + +- [Service UWF-protected devices](service-uwf-protected-devices.md) diff --git a/windows/configuration/unified-write-filter/uwf-apply-oem-updates.md b/windows/configuration/unified-write-filter/uwf-apply-oem-updates.md new file mode 100644 index 0000000000..cb9ea97d95 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-apply-oem-updates.md @@ -0,0 +1,42 @@ +--- +title: Apply OEM updates to UWF-protected devices +description: Apply OEM updates to UWF-protected devices +ms.date: 05/02/2017 +ms.topic: reference +--- + +# Apply OEM updates to UWF-protected devices + +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: + +```powershell +: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 complete. +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 articles + +- [Service UWF-protected devices](service-uwf-protected-devices.md) +- [UWF master servicing script](uwf-master-servicing-script.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-apply-windows-updates.md b/windows/configuration/unified-write-filter/uwf-apply-windows-updates.md new file mode 100644 index 0000000000..02d0791dc8 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-apply-windows-updates.md @@ -0,0 +1,69 @@ +--- +title: Apply Windows updates to UWF-protected devices +description: Apply Windows updates to UWF-protected devices +ms.date: 05/02/2017 +ms.topic: reference +--- + +# Apply Windows updates to UWF-protected devices + +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. + +UWF servicing supports the following types of Windows updates: + +- Critical updates +- Security updates +- Driver updates + +## Enable Servicing Mode + +1. To apply Windows updates to your device, at an administrator command prompt, type the following command: + + ```cmd + uwfmgr.exe servicing enable + ``` + +1. Restart the device. Use either command. + + ```cmd + uwfmgr.exe filter restart + ``` + + ```cmd + shutdown /r /t 0 + ``` + +On restart, the device automatically signs in to the servicing account and servicing starts. + +> [!IMPORTANT] +> The default servicing account that is automatically created and used for servicing is named **UWF-Servicing**. It's important that you don't 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's required by the Windows updates that are installing. If a restart is required, the system reenters servicing mode on restart and continues until all updates are 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 necessary. + +When Windows update servicing is finished, the system disables UWF servicing and restarts the system with UWF-protection enabled and all file and registry exclusions restored to their original pre-servicing state. + +> [!NOTE] +> During UWF servicing in Windows 10 Enterprise, Windows Update automatically accepts all Microsoft Software License Terms. + +> [!NOTE] +> If Windows updates can't be installed or return an error, servicing is disabled and the system restarts with UWF-protection re-enabled and all file and registry exclusions restored to their original pre-servicing state. + +## Related articles + +- [Unified Write Filter]( index.md) +- [UWF master servicing script](uwf-master-servicing-script.md) +- [UWF servicing screen saver](uwf-servicing-screen-saver.md) diff --git a/windows/configuration/unified-write-filter/uwf-excludedfile.md b/windows/configuration/unified-write-filter/uwf-excludedfile.md new file mode 100644 index 0000000000..4ede7c857b --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-excludedfile.md @@ -0,0 +1,51 @@ +--- +title: UWF_ExcludedFile +description: UWF_ExcludedFile +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_ExcludedFile + +Contains the files and folders that are currently in the file exclusion list for a volume protected by Unified Write Filter (UWF). + +## Syntax + +```powershell +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 | +|----------|-----------|-----------|-------------| +| FileName | string | [read] | The name of the file or folder path in the file exclusion list, including the full path relative to the volume. | + +### 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](uwf-volumegetexclusions.md) method to retrieve UWF_ExcludedFile objects. + +You can use the [UWF_Volume.AddExclusion](uwf-volumeaddexclusion.md) and [UWF_Volume.RemoveExclusion](uwf-volumeremoveexclusion.md) methods to add or remove file and folder exclusions to a volume. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [Unified Write Filter WMI provider reference](uwf-wmi-provider-reference.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-excludedregistrykey.md b/windows/configuration/unified-write-filter/uwf-excludedregistrykey.md new file mode 100644 index 0000000000..6ed0903f55 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-excludedregistrykey.md @@ -0,0 +1,51 @@ +--- +title: UWF_ExcludedRegistryKey +description: UWF_ExcludedRegistryKey +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_ExcludedRegistryKey + +Contains the registry keys that are currently in the registry key exclusion list for Unified Write Filter (UWF). + +## Syntax + +```powershell +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 | +|-------------|----------------|-----------|-------------| +| RegistryKey | string | [read] | The full path of the registry key in the registry key exclusion list. | + +### 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](uwf-registryfiltergetexclusions.md) or [UWF_RegistryFilter.FindExclusion](uwf-registryfilterfindexclusion.md) methods to retrieve UWF_ExcludedRegistryKey objects. + +You can use the [UWF_Volume.AddExclusion](uwf-volumeaddexclusion.md) and [UWF_Volume.RemoveExclusion](uwf-volumeremoveexclusion.md) methods to add or remove registry keys to the UWF registry key exclusion list. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [Unified Write Filter WMI provider reference](uwf-wmi-provider-reference.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-filter.md b/windows/configuration/unified-write-filter/uwf-filter.md new file mode 100644 index 0000000000..4d209d93e2 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-filter.md @@ -0,0 +1,169 @@ +--- +title: UWF_Filter +description: UWF_Filter +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Filter + +Enables or disables Unified Write Filter (UWF), resets configuration settings for UWF, and shuts down or restarts your device. + +## Syntax + +```powershell +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 | +|----------|-------------| +| [UWF_Filter.Enable](uwf-filterenable.md) | Enables UWF on the next restart. | +| [UWF_Filter.Disable](uwf-filterdisable.md) | Disables UWF on the next restart. | +| [UWF_Filter.ResetSettings](uwf-filterresetsettings.md) | Restores UWF settings to the original state that was captured at install time. | +| [UWF_Filter.ShutdownSystem](uwf-filtershutdownsystem.md) |Safely shuts down a system protected by UWF, even if the overlay is full. | +| [UWF_Filter.RestartSystem](uwf-filterrestartsystem.md) | Safely restarts a system protected by UWF, even if the overlay is full. | + +### Properties + +| Property | Data type | Qualifiers | Description | +|----------|----------------|------------|-------------| +| **Id** | string | [key] | A unique ID. This is always set to **UWF_Filter** | +| **CurrentEnabled** | Boolean | [read] | Indicates if UWF is enabled for the current session. | +| **NextEnabled** | Boolean | [read] | Indicates if UWF is enabled after the next restart. | + +### 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**. + +```powershell +$COMPUTER = "localhost" +$NAMESPACE = "root\standardcimv2\embedded" + +# Create a function to disable the Unified Write Filter driver after the next restart. +function Disable-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 disable UWF after the next restart. This sets the NextEnabled property to false. + + $retval = $objUWFInstance.Disable(); + +# Check the return value to verify that the disable is successful + if ($retval.ReturnValue -eq 0) { + "Unified Write Filter will be disabled after the next system restart." + } else { + "Unknown Error: " + "{0:x0}" -f $retval.ReturnValue + } +} + +# 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(); + +# Check the return value to verify that the enable is successful + if ($retval.ReturnValue -eq 0) { + "Unified Write Filter will be enabled after the next system restart." + } else { + "Unknown Error: " + "{0:x0}" -f $retval.ReturnValue + } +} + +# Create a function to display the current settings of the Unified Write Filter driver. +function Display-UWFState() { + +# Retrieve the UWF_Filter object + $objUWFInstance = Get-WmiObject -Namespace $NAMESPACE -Class UWF_Filter; + + 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"; + } +} + +# Some examples of how to call the functions + +Display-UWFState + +"Enabling Unified Write Filter" +Enable-UWF + +Display-UWFState + +"Disabling Unified Write Filter" +Disable-UWF + +Display-UWFState +``` + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [Unified Write Filter WMI provider reference](uwf-wmi-provider-reference.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-filterdisable.md b/windows/configuration/unified-write-filter/uwf-filterdisable.md new file mode 100644 index 0000000000..c6ada6a188 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-filterdisable.md @@ -0,0 +1,43 @@ +--- +title: UWF_Filter.Disable +description: UWF_Filter.Disable +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Filter.Disable + +Disables Unified Write Filter (UWF) on the next restart. + +## Syntax + +```powershell +UInt32 Disable(); +``` + +## Parameters + +None. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +You must use an administrator account to disable UWF. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Filter](uwf-filter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-filterenable.md b/windows/configuration/unified-write-filter/uwf-filterenable.md new file mode 100644 index 0000000000..9789518d3f --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-filterenable.md @@ -0,0 +1,66 @@ +--- +title: UWF_Filter.Enable +description: UWF_Filter.Enable +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Filter.Enable + +Enables Unified Write Filter (UWF) on the next restart. + +## Syntax + +```powershell +UInt32 Enable(); +``` + +## Parameters + +None. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +You must use an administrator account to enable UWF. + +You must restart your device after you enable or disable UWF before the change takes effect. + +The first time you enable UWF on your device, UWF makes the following changes to your system to improve the performance of UWF: + +- Paging files are disabled. +- System restore is disabled. +- SuperFetch is disabled. +- File indexing service is turned off. +- Defragmentation service is turned off. +- Fast boot is disabled. +- BCD setting **bootstatuspolicy** is set to **ignoreallfailures**. + +You can change these settings after you enable UWF if you want to. For example, you can move the page file location to an unprotected volume and re-enable paging files. + +Additionally, after you run `uwfmgr filter enable`, restart the computer and exit the servicing mode, the following things are disabled: + +- Windows Update by setting `HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\NoAutoUpdate` +- Windows Store Update by setting `HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsStore\AutoDownload` +- Registry Reorganization by setting `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Configuration Manager\RegistryReorganizationLimitDays` +- Maintenance Hour by setting `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Maintenance\MaintenanceDisabled` + +After you run `uwfmgr filter disable`, restart the computer and enter the serving mode, the changes are reverted. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Filter](uwf-filter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-filterresetsettings.md b/windows/configuration/unified-write-filter/uwf-filterresetsettings.md new file mode 100644 index 0000000000..24528c7d76 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-filterresetsettings.md @@ -0,0 +1,47 @@ +--- +title: UWF_Filter.ResetSettings +description: UWF_Filter.ResetSettings +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Filter.ResetSettings + +Restores UWF settings to the original configuration settings. + +## Syntax + +```powershell +UInt32 ResetSettings(); +``` + +## Parameters + +None. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Enterprise is installed on your device. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Filter](uwf-filter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-filterrestartsystem.md b/windows/configuration/unified-write-filter/uwf-filterrestartsystem.md new file mode 100644 index 0000000000..d442c0ff84 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-filterrestartsystem.md @@ -0,0 +1,48 @@ +--- +title: UWF_Filter.RestartSystem +description: UWF_Filter.RestartSystem +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Filter.RestartSystem + +Safely restarts a system protected by UWF, even if the overlay is full. + +## Syntax + +```powershell +UInt32 RestartSystem(); +``` + +## Parameters + +None. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +You must use an administrator account to call this method. +You can't run on WMI providers; it's only available from Intune/CSP. + +If the overlay is full, or near full, shutting down or restarting the system normally can cause the system to take a 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 number 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Filter](uwf-filter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-filtershutdownsystem.md b/windows/configuration/unified-write-filter/uwf-filtershutdownsystem.md new file mode 100644 index 0000000000..60cd1b79d9 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-filtershutdownsystem.md @@ -0,0 +1,47 @@ +--- +title: UWF_Filter.ShutdownSystem +description: UWF_Filter.ShutdownSystem +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Filter.ShutdownSystem + +Safely shuts down a system protected by UWF, even if the overlay is full. + +## Syntax + +```powershell +UInt32 ShutdownSystem(); +``` + +## Parameters + +None. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 shut down a system by avoiding this scenario. + +If the overlay becomes full while the system is performing a large number 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Filter](uwf-filter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-master-servicing-script.md b/windows/configuration/unified-write-filter/uwf-master-servicing-script.md new file mode 100644 index 0000000000..502d932499 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-master-servicing-script.md @@ -0,0 +1,88 @@ +--- +title: UWF master servicing script +description: UWF master servicing script +ms.date: 05/02/2017 +ms.topic: reference +--- + +# UWF master servicing script + +The UWF master servicing script (UwfServicingMasterScript.cmd) is located in the \\Windows\\System32 folder. + +## UwfServicingMasterScript.cmd + +The full UWF master servicing script follows: + +```powershell +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 + + +echo UpdateAgent starting. +uwfmgr servicing update-windows +if ERRORLEVEL 3010 goto UPDATE_REBOOT +if ERRORLEVEL 0 goto UPDATE_SUCCESS +echo UpdateAgent returned error =%ERRORLEVEL% + +: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 articles + +[Service UWF-protected devices](service-uwf-protected-devices.md) + +[Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-overlay.md b/windows/configuration/unified-write-filter/uwf-overlay.md new file mode 100644 index 0000000000..db7a523a51 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-overlay.md @@ -0,0 +1,164 @@ +--- +title: UWF_Overlay +description: UWF_Overlay +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Overlay + +Contains the current size of the Unified Write Filter (UWF) overlay and manages the critical and warning thresholds for the overlay size. + +## Syntax + +```powershell +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 | Description | +|---------|-------------| +| [UWF_Overlay.GetOverlayFiles](uwf-overlaygetoverlayfiles.md) | Returns a list of files of a volume that were cached in the UWF overlay. | +| [UWF_Overlay.SetWarningThreshold](uwf-overlaysetwarningthreshold.md) | Sets the warning threshold for monitoring the size of the UWF overlay. | +| [UWF_Overlay.SetCriticalThreshold](uwf-overlaysetcriticalthreshold.md) | Sets the critical warning threshold for monitoring the size of the UWF overlay. | + +### Properties + +| Property | Data type | Qualifiers | Description | +|----------|----------------|------------|-------------| +| ID | string | [key] | A unique ID. This is always set to **UWF_Overlay**. | +| OverlayConsumption | Uint32 | [read] | The current size, in megabytes, of the UWF overlay. | +| AvailableSpace | Uint32 | [read] | The amount of free space, in megabytes, available to the UWF overlay. | +| CriticalOverlayThreshold | Uint32 | [read] | The critical threshold size, in megabytes. UWF sends a critical threshold notification event when the UWF overlay size reaches or exceeds this value. | +| WarningOverlayThreshold | Uint32 | [read] | The warning threshold size, in megabytes. UWF sends a warning threshold notification event when the UWF overlay size reaches or exceeds this value. | + +### Examples + +The following example demonstrates how to use the UWF overlay by using the WMI provider in a PowerShell script. + +```powershell +$COMPUTER = "localhost" +$NAMESPACE = "root\standardcimv2\embedded" + +# Function to set the Unified Write Filter overlay warning threshold + +function Set-OverlayWarningThreshold($ThresholdSize) { + +# Retrieve the overlay WMI object + + $OverlayInstance = Get-WMIObject -namespace $NAMESPACE -class UWF_Overlay; + + if(!$OverlayInstance) { + "Unable to get handle to an instance of the UWF_Overlay class" + return; + } + +# Call the instance method to set the warning threshold value + + $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) { + +# Retrieve the overlay WMI object + + $OverlayInstance = Get-WMIObject -namespace $NAMESPACE -class UWF_Overlay; + + if(!$OverlayInstance) { + "Unable to get handle to an instance of the UWF_Overlay class" + return; + } + +# Call the instance method to set the warning threshold value + + $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 to print the current overlay information + +function Get-OverlayInformation() { + +# Retrieve the Overlay WMI object + + $OverlayInstance = Get-WMIObject -namespace $NAMESPACE -class UWF_Overlay; + + if(!$OverlayInstance) { + "Unable to get handle to an instance of the UWF_Overlay class" + return; + } + +# Display the current values of the overlay properties + + "`nOverlay Consumption: " + $OverlayInstance.OverlayConsumption + "Available Space: " + $OverlayInstance.AvailableSpace + "Critical Overlay Threshold: " + $OverlayInstance.CriticalOverlayThreshold + "Warning Overlay Threshold: " + $OverlayInstance.WarningOverlayThreshold +} + +# Examples of using these functions + +"`nSetting the warning threshold to 768 MB." +Set-OverlayWarningThreshold( 768 ) + +"`nSetting the critical threshold to 896 MB." +Set-OverlayCriticalThreshold( 896 ) + +"`nDisplaying the current state of the overlay." +Get-OverlayInformation +``` + +### Remarks + +Only one **UFW\_Overlay** instance exists for a system protected with UWF. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-overlayconfig.md b/windows/configuration/unified-write-filter/uwf-overlayconfig.md new file mode 100644 index 0000000000..ff15b1fcb2 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-overlayconfig.md @@ -0,0 +1,159 @@ +--- +title: UWF_OverlayConfig +description: UWF_OverlayConfig +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_OverlayConfig + +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 + +```powershell +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 | +|--------|-------------| +| [UWF_OverlayConfig.SetMaximumSize](uwf-overlayconfigsetmaximumsize.md) | Sets the maximum cache size, in megabytes, of the overlay. | +| [UWF_OverlayConfig.SetType](uwf-overlayconfigsettype.md) | Sets the type of the UWF overlay to either RAM-based or disk-based. | + +### Properties + +| Property | Data type | Qualifiers | Description | +|----------|----------------|------------|-------------| +| CurrentSession | Boolean | [key, read] | Indicates which session the object contains settings for.
- **True** for the current session
- **False** for the next session that begins after a restart. | +| Type | UInt32 | [read] | Indicates the type of overlay.
- **0** for a RAM-based overlay
- **1** for a disk-based overlay. | +| MaximumSize | SInt32 | [read] | Indicates the maximum cache size, in megabytes, of the overlay. | + +### 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. + +```powershell +$COMPUTER = "localhost" +$NAMESPACE = "root\standardcimv2\embedded" + +# Define common parameters + +$CommonParams = @{"namespace"=$NAMESPACE; "computer"=$COMPUTER} + +function Set-OverlaySize([UInt32] $size) { + +# This function sets the size of the overlay to which file and registry changes are redirected +# Changes take effect after the next restart + +# $size is the maximum size in MB of the overlay + +# Make sure that UWF is currently disabled + + $UWFFilter = Get-WmiObject -class UWF_Filter @commonParams + + if ($UWFFilter.CurrentEnabled -eq $false) { + +# Get the configuration for the next session after a restart + + $nextConfig = Get-WMIObject -class UWF_OverlayConfig -Filter "CurrentSession = false" @CommonParams; + + if ($nextConfig) { + +# Set the maximum size of the overlay + + $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." + } +} + +function Set-OverlayType([UInt32] $overlayType) { + +# 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. + + $overlayTypeText = @("RAM-based", "disk-based") + +# Make sure that the overlay type is a valid value + + if ($overlayType -eq 0 -or $overlayType -eq 1) { + +# Make sure that UWF is currently disabled + + $UWFFilter = Get-WmiObject -class UWF_Filter @commonParams + + if ($UWFFilter.CurrentEnabled -eq $false) { + +# Get the configuration for the next session after a restart + + $nextConfig = Get-WMIObject -class UWF_OverlayConfig -Filter "CurrentSession = false" @CommonParams; + + if ($nextConfig) { + +# Set the type of the overlay + + $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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +[Unified Write Filter WMI provider reference](uwf-wmi-provider-reference.md) + +[Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-overlayconfigsetmaximumsize.md b/windows/configuration/unified-write-filter/uwf-overlayconfigsetmaximumsize.md new file mode 100644 index 0000000000..82755919f7 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-overlayconfigsetmaximumsize.md @@ -0,0 +1,55 @@ +--- +title: UWF_OverlayConfig.SetMaximumSize +description: UWF_OverlayConfig.SetMaximumSize +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_OverlayConfig.SetMaximumSize + +Sets the maximum cache size of the Unified Write Filter (UWF) overlay. + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_OverlayConfig](uwf-overlayconfig.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-overlayconfigsettype.md b/windows/configuration/unified-write-filter/uwf-overlayconfigsettype.md new file mode 100644 index 0000000000..af23ce50dc --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-overlayconfigsettype.md @@ -0,0 +1,58 @@ +--- +title: UWF_OverlayConfig.SetType +description: UWF_OverlayConfig.SetType +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_OverlayConfig.SetType + +Sets the type of the Unified Write Filter (UWF) overlay to either RAM-based or disk-based. + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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](uwf-overlayconfig.md). + +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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_OverlayConfig](uwf-overlayconfig.md) +- [Overlay for Unified Write Filter (UWF)](uwfoverlay.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-overlayfile.md b/windows/configuration/unified-write-filter/uwf-overlayfile.md new file mode 100644 index 0000000000..9a0887c3c0 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-overlayfile.md @@ -0,0 +1,51 @@ +--- +title: UWF_OverlayFile +description: UWF_OverlayFile +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_OverlayFile + +Contains a file that is currently in the overlay for a volume protected by Unified Write Filter (UWF). + +## Syntax + +```powershell +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 | +|----------|----------------|-----------|-------------| +| FileName | string | [read] | The name of the file in the file overlay. | +| FileSize | UInt64 | [read] | The size of the file in the file overlay. | + +### 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](uwf-overlaygetoverlayfiles.md) topic in the UWF WMI provider technical reference. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [Unified Write Filter WMI provider reference](uwf-wmi-provider-reference.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-overlaygetoverlayfiles.md b/windows/configuration/unified-write-filter/uwf-overlaygetoverlayfiles.md new file mode 100644 index 0000000000..cc8bba2b30 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-overlaygetoverlayfiles.md @@ -0,0 +1,67 @@ +--- +title: UWF_Overlay.GetOverlayFiles +description: UWF_Overlay.GetOverlayFiles +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Overlay.GetOverlayFiles + +Returns a list of files of a volume that were cached in the Unified Write Filter (UWF) overlay. + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Overlay](uwf-overlay.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-overlaysetcriticalthreshold.md b/windows/configuration/unified-write-filter/uwf-overlaysetcriticalthreshold.md new file mode 100644 index 0000000000..687ef6b6b1 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-overlaysetcriticalthreshold.md @@ -0,0 +1,51 @@ +--- +title: UWF_Overlay.SetCriticalThreshold +description: UWF_Overlay.SetCriticalThreshold +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Overlay.SetCriticalThreshold + +Sets the critical threshold for monitoring the size of the Unified Write Filter (UWF) overlay. + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +When the size of the overlay reaches or exceeds the *size* threshold value, UWF writes the following notification event to the event log. + +| Message ID | Event code | Message text | +|------------|------------|--------------| +| UWF_OVERLAY_REACHED_CRITICAL_LEVEL | 0x80010002L | The UWF overlay size has reached CRITICAL level. | + +The critical threshold must be higher than the warning threshold. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Overlay](uwf-overlay.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-overlaysetwarningthreshold.md b/windows/configuration/unified-write-filter/uwf-overlaysetwarningthreshold.md new file mode 100644 index 0000000000..66e7999304 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-overlaysetwarningthreshold.md @@ -0,0 +1,51 @@ +--- +title: UWF_Overlay.SetWarningThreshold +description: UWF_Overlay.SetWarningThreshold +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Overlay.SetWarningThreshold + +Sets the warning threshold for monitoring the size of the Unified Write Filter (UWF) overlay. + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +When the size of the overlay reaches or exceeds the *size* threshold value, UWF writes the following notification event to the event log. + +| Message ID | Event code | Message text | +|------------|------------|--------------| +|UWF_OVERLAY_REACHED_WARNING_LEVEL | 0x80010001L | The UWF overlay size has reached WARNING level. | + +The warning threshold must be lower than the critical threshold. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Overlay](uwf-overlay.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-registryfilter.md b/windows/configuration/unified-write-filter/uwf-registryfilter.md new file mode 100644 index 0000000000..5e6316cb9b --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-registryfilter.md @@ -0,0 +1,269 @@ +--- +title: UWF_RegistryFilter +description: UWF_RegistryFilter +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_RegistryFilter + +Adds or removes registry exclusions from Unified Write Filter (UWF) filtering, and also commits registry changes. + +## Syntax + +```powershell +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. + +| Method | Description                                                                           | +|--------|-------------| +| [UWF_RegistryFilter.AddExclusion](uwf-registryfilteraddexclusion.md) | Adds a registry key to the registry exclusion list for UWF. | +| [UWF_RegistryFilter.CommitRegistry](uwf-registryfiltercommitregistry.md) | Commits changes to the specified registry key and value. | +| [UWF_RegistryFilter.CommitRegistryDeletion](uwf-registryfiltercommitregistrydeletion.md) | Deletes the specified registry key or registry value and commits the deletion. | +| [UWF_RegistryFilter.FindExclusion](uwf-registryfilterfindexclusion.md) | Determines whether a specific registry key is excluded from being filtered by UWF. | +| [UWF_RegistryFilter.GetExclusions](uwf-registryfiltergetexclusions.md) | Retrieves all registry key exclusions from a system that is protected by UWF | +| [UWF_RegistryFilter.RemoveExclusion](uwf-registryfilterremoveexclusion.md) | Removes a registry key from the registry exclusion list for Unified Write Filter (UWF). | + +### Properties + +| Property | Data type | Qualifiers | Description                                                                       | +|----------|----------------|------------|-------------| +| CurrentSession | Boolean | [key, read] | Indicates which session the object contains settings for.
- **True** if settings are for the current session
- **False** if settings are for the next session that follows a restart. | +| PersistDomainSecretKey | Boolean | [read, write] | Indicates if the domain secret registry key is in the registry exclusion list. If the registry key is not in the exclusion list, changes are not persisted after a restart.
- **True** to include in the exclusion list
- Otherwise **False**. | +| PersistTSCAL | Boolean | [read, write] | Indicates if the Terminal Server Client Access License (TSCAL) registry key is in the UWF registry exclusion list. If the registry key is not in the exclusion list, changes are not persisted after a restart.
- **True** to include in the exclusion list
- Otherwise, set to **False** | + +### 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. + +```powershell +$COMPUTER = "EMBEDDEDDEVICE" +$NAMESPACE = "root\standardcimv2\embedded" + +# Define common parameters + +$CommonParams = @{"namespace"=$NAMESPACE; "computer"=$COMPUTER} + +function Get-RegistryExclusions() { + +# This function lists the UWF registry exclusions, both +# for the current session as well as the next session after a restart. + + +# Get the UWF_RegistryFilter configuration for the current session + + $currentConfig = Get-WMIObject -class UWF_RegistryFilter @CommonParams | + where { + $_.CurrentSession -eq $true + }; + +# Get the UWF_RegistryFilter configuration for the next session after a restart + + $nextConfig = Get-WMIObject -class UWF_RegistryFilter @CommonParams | + where { + $_.CurrentSession -eq $false + }; + +# Display registry exclusions for the current session + + 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."; +} + +# Display registry exclusions for the next session after a restart + + 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) { + +# This function adds a new UWF registry exclusion. +# The new registry exclusion takes effect the next time the device is restarted and UWF is enabled. + +# $exclusion is the path of the registry exclusion + +# Get the UWF_RegistryFilter configuration for the next session after a restart + + $nextConfig = Get-WMIObject -class UWF_RegistryFilter @CommonParams | + where { + $_.CurrentSession -eq $false + }; + +# Add the exclusion + + if ($nextConfig) { + $nextConfig.AddExclusion($exclusion) | Out-Null; + Write-Host "Added exclusion $exclusion."; + } else { + Write-Error "Could not retrieve UWF_RegistryFilter"; + } +} + +function Remove-RegistryExclusion($exclusion) { + +# This function removes a UWF registry exclusion. +# The registry exclusion is removed the next time the device is restarted + +# $exclusion is the path of the registry exclusion + +# Get the UWF_RegistryFilter configuration for the next session after a restart + + $nextConfig = Get-WMIObject -class UWF_RegistryFilter @CommonParams | + where { + $_.CurrentSession -eq $false + }; + +# Try to remove the exclusion + + 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"; + } +} + +function Clear-RegistryExclusions() { + +# This function removes all UWF registry exclusions +# The registry exclusions are removed the next time the device is restarted + +# Get the configuration for the next session + + $nextConfig = Get-WMIObject -class UWF_RegistryFilter @CommonParams | + where { + $_.CurrentSession -eq $false + }; + +# Remove all registry exclusions + + if ($nextConfig) { + + Write-Host "Removing all registry exclusions:"; + + $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 "" + } +} + +# Some examples of using the functions + +Clear-RegistryExclusions + +Get-RegistryExclusions + +Add-RegistryExclusion "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer" +Add-RegistryExclusion "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers\(Default)" + +Get-RegistryExclusions + +Remove-RegistryExclusion "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer" + +Get-RegistryExclusions + +Clear-RegistryExclusions +``` + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-registryfilteraddexclusion.md b/windows/configuration/unified-write-filter/uwf-registryfilteraddexclusion.md new file mode 100644 index 0000000000..38aa47814c --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-registryfilteraddexclusion.md @@ -0,0 +1,58 @@ +--- +title: UWF_RegistryFilter.AddExclusion +description: UWF_RegistryFilter.AddExclusion +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_RegistryFilter.AddExclusion + +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 + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +You must restart the device before the registry key is excluded from UWF filtering. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_RegistryFilter](uwf-registryfilter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-registryfiltercommitregistry.md b/windows/configuration/unified-write-filter/uwf-registryfiltercommitregistry.md new file mode 100644 index 0000000000..ff2fd4cdc2 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-registryfiltercommitregistry.md @@ -0,0 +1,50 @@ +--- +title: UWF_RegistryFilter.CommitRegistry +description: UWF_RegistryFilter.CommitRegistry +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_RegistryFilter.CommitRegistry + +Commits changes to the specified registry key and value. + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_RegistryFilter](uwf-registryfilter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-registryfiltercommitregistrydeletion.md b/windows/configuration/unified-write-filter/uwf-registryfiltercommitregistrydeletion.md new file mode 100644 index 0000000000..a7e69eb970 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-registryfiltercommitregistrydeletion.md @@ -0,0 +1,52 @@ +--- +title: UWF_RegistryFilter.CommitRegistryDeletion +description: UWF_RegistryFilter.CommitRegistryDeletion +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_RegistryFilter.CommitRegistryDeletion + +Deletes the specified registry key or registry value and commits the deletion. + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_RegistryFilter](uwf-registryfilter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-registryfilterfindexclusion.md b/windows/configuration/unified-write-filter/uwf-registryfilterfindexclusion.md new file mode 100644 index 0000000000..fec85d3b5e --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-registryfilterfindexclusion.md @@ -0,0 +1,44 @@ +--- +title: UWF_RegistryFilter.FindExclusion +description: UWF_RegistryFilter.FindExclusion +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_RegistryFilter.FindExclusion + +Checks if a specific registry key is excluded from being filtered by Unified Write Filter (UWF). + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_RegistryFilter](uwf-registryfilter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-registryfiltergetexclusions.md b/windows/configuration/unified-write-filter/uwf-registryfiltergetexclusions.md new file mode 100644 index 0000000000..3f3e8802ba --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-registryfiltergetexclusions.md @@ -0,0 +1,45 @@ +--- +title: UWF_RegistryFilter.GetExclusions +description: UWF_RegistryFilter.GetExclusions +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_RegistryFilter.GetExclusions + +Retrieves all registry key exclusions from a device that is protected by Unified Write Filter (UWF). + +## Syntax + +```powershell +UInt32 GetExclusions( + [out, EmbeddedInstance("UWF_ExcludedRegistryKey")] string ExcludedKeys[] +); +``` + +## Parameters + +**ExcludedKeys**
\[out\] An array of [UWF_ExcludedRegistryKey](uwf-excludedregistrykey.md) objects that represent the registry keys excluded from UWF filtering. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_RegistryFilter](uwf-registryfilter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-registryfilterremoveexclusion.md b/windows/configuration/unified-write-filter/uwf-registryfilterremoveexclusion.md new file mode 100644 index 0000000000..03e5282ad8 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-registryfilterremoveexclusion.md @@ -0,0 +1,45 @@ +--- +title: UWF_RegistryFilter.RemoveExclusion +description: UWF_RegistryFilter.RemoveExclusion +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_RegistryFilter.RemoveExclusion + +Removes a registry key from the registry exclusion list for Unified Write Filter (UWF). + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +You must restart the device before the registry key is excluded from UWF filtering. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_RegistryFilter](uwf-registryfilter.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-servicing-screen-saver.md b/windows/configuration/unified-write-filter/uwf-servicing-screen-saver.md new file mode 100644 index 0000000000..c9672f601b --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-servicing-screen-saver.md @@ -0,0 +1,51 @@ +--- +title: UWF servicing screen saver +description: UWF servicing screen saver +ms.date: 05/02/2017 +ms.topic: reference +--- + +# UWF servicing screen saver + +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). + + ```powershell + Windows Registry Editor Version 5.00 + [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Embedded\ServicingScreenSaver] + "ColorBackground"=dword:000000ff + "ColorText"=dword:0000ff00 + "ColorProgress"=dword:00ff0000 + "ScreenSaverTitle"="Device" + "ScreenSaverSubTitle"="Servicing device…" + "HideScreenSaverText"=dword:00000000 + "HideScreenSaverProgress"=dword:00000000 + "Font"="Algerian" + ``` + +1. On the device, open a command prompt as an administrator. For Windows Shell, to open a command prompt, do the following: + 1. In Windows Explorer, move to \\Windows\\System32, right-click **cmd.exe**, and then click **Run as Administrator**. + 1. Accept the UAC prompt. +1. To apply the custom registry settings for the screen saver to the device, type the following command: + + ```powershell + 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 articles + +[Service UWF-protected devices](service-uwf-protected-devices.md) + +[Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-servicing.md b/windows/configuration/unified-write-filter/uwf-servicing.md new file mode 100644 index 0000000000..324f86d59a --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-servicing.md @@ -0,0 +1,99 @@ +--- +title: UWF_Servicing +description: UWF_Servicing +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Servicing + +This class contains properties and methods that enable you to query and control Unified Write Filter (UWF) servicing mode. + +## Syntax + +```powershell +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                                                                      | +|--------|-------------| +|[UWF_Servicing.Disable](uwf-servicingdisable.md) | Disables Unified Write Filter (UWF) servicing mode.
The system leaves servicing mode in the next session that follows a restart. | +| [UWF_Servicing.Enable](uwf-servicingenable.md) | Enables Unified Write Filter (UWF) servicing mode.
The system enters servicing mode in the next session that follows a restart. | +| [UWF_Servicing.UpdateWindows](uwf-servicingupdatewindows.md) | Calls Windows Update to download and install critical and security updates for your device running Windows 10 Enterprise. | + +### Properties + +| Property | Data type | Qualifiers | Description                                                                     & | +|----------|----------------|------------|-------------| +| CurrentSession | Boolean | [key, read] | Indicates when to enable servicing.
- **True** if servicing is enabled in the current session
- **False** if servicing will be enabled in the session that follows a restart. | +| ServiceEnabled | Boolean | [read] | Indicates if the system is in servicing mode in the current session, or will be in servicing mode in the next session that follows a restart.
- **True** if servicing is enabled
- otherwise, **False**. | + +### 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. + +```powershell +$COMPUTER = "localhost" +$NAMESPACE = "root\standardcimv2\embedded" + +# Define common parameters + +$CommonParams = @{"namespace"=$NAMESPACE; "computer"=$COMPUTER} + +# Enable UWF servicing + +$nextSession = Get-WmiObject -class UWF_Servicing @CommonParams | where { + $_.CurrentSession -eq $false +} + +if ($nextSession) { + + $nextSession.Enable() | Out-Null; + Write-Host "This device is enabled for servicing mode after the next restart." +} + +# Disable UWF servicing + +$nextSession = Get-WmiObject -class UWF_Servicing @CommonParams | where { + $_.CurrentSession -eq $false +} + +if ($nextSession) { + + $nextSession.Disable() | Out-Null; + Write-Host "Servicing mode is now disabled for this device." +} +``` + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-servicingdisable.md b/windows/configuration/unified-write-filter/uwf-servicingdisable.md new file mode 100644 index 0000000000..616e9d6669 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-servicingdisable.md @@ -0,0 +1,43 @@ +--- +title: UWF_Servicing.Disable +description: UWF_Servicing.Disable +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Servicing.Disable + +Disables Unified Write Filter (UWF) servicing mode. + +## Syntax + +```powershell +UInt32 Disable(); +``` + +## Parameters + +None. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +When this method is called, the system will leave servicing mode in the next session after a restart. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Servicing](uwf-servicing.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-servicingenable.md b/windows/configuration/unified-write-filter/uwf-servicingenable.md new file mode 100644 index 0000000000..8261b42c15 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-servicingenable.md @@ -0,0 +1,43 @@ +--- +title: UWF_Servicing.Enable +description: UWF_Servicing.Enable +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Servicing.Enable + +Enables Unified Write Filter (UWF) servicing mode. + +## Syntax + +```powershell +UInt32 Enable(); +``` + +## Parameters + +None. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +When this method is called, the system will enter servicing mode in the next session after a restart. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Servicing](uwf-servicing.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-servicingupdatewindows.md b/windows/configuration/unified-write-filter/uwf-servicingupdatewindows.md new file mode 100644 index 0000000000..2f5cb89d90 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-servicingupdatewindows.md @@ -0,0 +1,53 @@ +--- +title: UWF_Servicing.UpdateWindows +description: UWF_Servicing.UpdateWindows +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Servicing.UpdateWindows + +Calls Windows Update to download and install critical and security updates for your device running Windows 10 Enterprise. + +## Syntax + +```powershell +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. | +| 3010 | Restart required. | +| Any other value. | Generic error. | + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +This method is meant to be used as part of a servicing script. For more information, see [Service UWF-protected devices](service-uwf-protected-devices.md). + +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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Servicing](uwf-servicing.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-turnonuwf.md b/windows/configuration/unified-write-filter/uwf-turnonuwf.md new file mode 100644 index 0000000000..65d54c3fd7 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-turnonuwf.md @@ -0,0 +1,146 @@ +--- +title: Unified Write Filter (UWF) feature (uwf-turnonuwf) +description: Unified Write Filter (UWF) feature (uwf-turnonuwf) +ms.date: 05/20/2024 +ms.topic: reference +ms.custom: RS5 +--- + +# Use the Unified Write Filter (UWF) feature + +The Unified Write Filter (UWF) is an Windows 10 optional feature. + +To use UWF, you'll first need to install the feature. + +Next, you'll enable (and optionally configure) the feature. 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 (aka "SysMain" service) is disabled. +- File indexing service is turned off. +- Fast boot is disabled. +- Defragmentation service (aka "Optimize drives" service) is turned off. +- BCD setting **bootstatuspolicy** is set to **ignoreallfailures**. + +After UWF is enabled, you can finally select a drive to protect and start using UWF. If you'll disable after enable it, features above will not be turned on automatically. + +You can install UWF for running PCs and devices, prepare it for customized Windows images, or manage it remotely using CSP or WMI. + +## Turn on UWF on a running PC + +1. Install the feature: + + 1. Click Start, type **Turn Windows features on or off**. + + 1. In the **Windows Features** window, expand the **Device Lockdown** node, and check **Unified Write Filter** > **OK**. + + The **Windows Features** window indicates Windows is searching for required files and displays a progress bar. Once found, the window indicates Windows is applying the changes. When completed, the window indicates the requested changes are completed. + + 1. Click **Close** to close the **Windows Features** window. + +1. Enable the filter: + + ```cmd + uwfmgr filter enable + ``` + + > [!Note] + > After you run this command, restart the computer and exit the servicing mode, the following things are disabled: + > - Windows Update (by setting HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\NoAutoUpdate.) + > - Windows Store Update (by setting HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsStore\AutoDownload.) + > - Registry Reorganization (by setting HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Configuration Manager\RegistryReorganizationLimitDays.) + > - Maintenance Hour (by setting HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Maintenance\MaintenanceDisabled.) + > + > After you run `uwfmgr filter disable`, restart the computer and enter the serving mode, the changes will be reverted. + +1. Enable write protection for a drive: + + ```cmd + uwfmgr.exe volume protect C: + ``` + +1. Restart your computer. + +1. Confirm that UWF is running: + + ```cmd + uwfmgr.exe get-config + ``` + +## Install UWF on a customized Windows image + +1. Open a command prompt with administrator privileges. +1. Copy install.wim to a temporary folder on hard drive (in the following steps, we'll assume it's called C:\\wim). +1. Create a new directory. + + ```cmd + md c:\wim + ``` + +1. Mount the image. + + ```cmd + dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim + ``` + +1. Enable the feature. + + ```cmd + dism /image:c:\wim /enable-feature /featureName:Client-UnifiedWriteFilter + ``` + +1. Commit the change. + + ```cmd + dism /unmount-wim /MountDir:c:\wim /Commit + ``` + +To activate UWF, you can use a command-line script, CSP, or WMI: + +- [CMD](uwfmgrexe.md): `uwfmgr filter enable`, then `uwfmgr.exe volume protect C:` +- [CSP](/windows/client-management/mdm/unifiedwritefilter-csp): `CurrentSession/FilterEnabled`, then `CurrentSession/Volume` +- [WMI](uwf-wmi-provider-reference.md): `UWF\Filter.Enable`, then `UWF\Volume`. + +## Install the UWF feature by using Windows Configuration Designer + +1. Create a provisioning package in Windows Configuration Designer by following the instructions in [Create a provisioning package](/windows/configuration/provisioning-packages/provisioning-create-package). + + > [!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. + +1. In the Available customizations page, select **Runtime settings** > **SMISettings** and then set the value for the Unified Write Filter setting. + +1. 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](/windows/configuration/provisioning-packages/provisioning-apply-package) for more information. + +To activate UWF, you can use a command-line script, CSP, or WMI: + +- [CMD](uwfmgrexe.md): `uwfmgr filter enable`, then `uwfmgr.exe volume protect C:` +- [CSP](/windows/client-management/mdm/unifiedwritefilter-csp): `CurrentSession/FilterEnabled`, then `CurrentSession/Volume` +- [WMI](uwf-wmi-provider-reference.md): `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](uwf-filter.md) function, specifically the [UWF_Filter.Enable](uwf-filterenable.md) 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](uwfmgrexe.md). + +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 articles + +[Unified Write Filter]( index.md) + +[Unified Write Filter WMI provider reference](uwf-wmi-provider-reference.md) + +UWF Command-line tool: [uwfmgr.exe](uwfmgrexe.md) diff --git a/windows/configuration/unified-write-filter/uwf-volume.md b/windows/configuration/unified-write-filter/uwf-volume.md new file mode 100644 index 0000000000..3d73fc6db0 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volume.md @@ -0,0 +1,311 @@ +--- +title: UWF_Volume +description: UWF_Volume +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume + +This class manages a volume protected by Unified Write Filter (UWF). + +## Syntax + +```powershell +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; + + UInt32 CommitFile([in] string FileFullPath); + UInt32 CommitFileDeletion(string FileName); + UInt32 Protect(); + UInt32 Unprotect(); + UInt32 SetBindByDriveLetter(boolean bBindByVolumeName); + UInt32 AddExclusion(string FileName); + UInt32 RemoveExclusion(string FileName); + UInt32 RemoveAllExclusions(); + UInt32 FindExclusion([in] string FileName, [out] bFound); + UInt32 GetExclusions([out, EmbeddedInstance("UWF_ExcludedFile")] string ExcludedFiles[]); + +}; +``` + +## Members + +The following tables list the methods and properties that belong to this class. + +### Methods + +| Method | Description | +|--------|-------------| +| [UWF_Volume.AddExclusion](uwf-volumeaddexclusion.md) | Adds a file or folder to the file exclusion list for a volume protected byUWF. | +| [UWF_Volume.CommitFile](uwf-volumecommitfile.md) | Commits changes from the overlay to the physical volume for a specified file on a volume protected by Unified Write Filter (UWF). | +| [UWF_Volume.CommitFileDeletion](uwf-volumecommitfiledeletion.md) | Deletes a protected file from the volume, and commits the deletion to the physical volume. | +| [UWF_Volume.FindExclusion](uwf-volumefindexclusion.md) | Determines whether a specific file or folder is in the exclusion list for a volume protected byUWF. | +| [UWF_Volume.GetExclusions](uwf-volumegetexclusions.md) | Retrieves a list of all file exclusions for a volume protected byUWF. | +| [UWF_Volume.Protect](uwf-volumeprotect.md) | Protects the volume after the next system restart, if UWF is enabled after the restart. | +| [UWF_Volume.RemoveAllExclusions](uwf-volumeremoveallexclusions.md) | Removes all files and folders from the file exclusion list for a volume protected by UWF. | +| [UWF_Volume.RemoveExclusion](uwf-volumeremoveexclusion.md) | Removes a specific file or folder from the file exclusion list for a volume protected byUWF. | +| [UWF_Volume.SetBindByDriveLetter](uwf-volumesetbindbydriveletter.md) | Sets the **BindByDriveLetter** property, which indicates whether the UWF volume is bound to the physical volume by drive letter or by volume name. | +| [UWF_Volume.Unprotect](uwf-volumeunprotect.md) | Disables UWF protection of the volume after the next system restart. | + +### Properties + +| Property | Data type | Qualifiers | Description | +|----------|----------------|------------|-------------| +| **BindByDriveLetter** | Boolean | [read, write] | Indicates the type of binding that the volume uses.
- **True** to bind the volume by **DriveLetter**(loose binding)
- **False** to bind the volume by **VolumeName** (tight binding). | +| **CommitPending** | Boolean | [read] | Reserved for Microsoft use.| +| **CurrentSession** | Boolean | [key, read] | Indicates which session the object contains settings for.
- **True** if settings are for the current session
- **False** if settings are for the next session that follows a restart. | +| **DriveLetter** | string | [key, read] | The drive letter of the volume. If the volume does not have a drive letter, this value is **NULL**. | +| **Protected** | Boolean | [read, write] | If **CurrentSession** is **true**, indicates whether the volume is currently protected by UWF.
If **CurrentSession** is **false**, indicates whether the volume is protected in the next session after the device restarts. | +| **VolumeName** | string | [key, read] | The unique identifier of the volume on the current system. The **VolumeName** is the same as the **DeviceID** property of the [Win32_Volume](/previous-versions/windows/desktop/legacy/aa394515(v=vs.85)) class for the volume. | + +### 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. + +```powershell +$COMPUTER = "localhost" +$NAMESPACE = "root\standardcimv2\embedded" + +# Define common parameters + +$CommonParams = @{"namespace"=$NAMESPACE; "computer"=$COMPUTER} + +# Create a function to protect or unprotect a volume based on the drive letter of the volume + +function Set-ProtectVolume($driveLetter, [bool] $enabled) { + +# 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 + + $nextConfig = Get-WMIObject -class UWF_Volume @CommonParams | + where { + $_.DriveLetter -eq "$driveLetter" -and $_.CurrentSession -eq $false + }; + +# If a volume entry is found for the drive letter, enable or disable protection based on the $enabled parameter + + if ($nextConfig) { + + Write-Host "Setting drive protection on $driveLetter to $enabled" + + if ($Enabled -eq $true) { + $nextConfig.Protect() | Out-Null; + } else { + $nextConfig.Unprotect() | Out-Null; + } + } + +# 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 + +Set-ProtectVolume "C:" $true +Set-ProtectVolume "D:" $true + +Set-ProtectVolume "C:" $false +``` + +### Manage UWF file and folder exclusions + +The following example demonstrates how to manage UWF file and folder exclusions by using the WMI provider in a PowerShell script. The PowerShell script creates four functions, and then demonstrates how to use them. + +The first function, **Get-FileExclusions**, displays a list of UWF file exclusions that exist on a volume. Exclusions for both the current session and the next session that follows a restart are displayed. + +The second function, **Add-FileExclusion**, adds a file or folder to the UWF exclusion list for a given volume. The exclusion is added for the next session that follows a restart. + +The third function, **Remove-FileExclusion**, removes a file or folder from the UWF exclusion list for a given volume. The exclusion is removed for the next session that follows a restart. + +The fourth function, **Clear-FileExclusions**, removes all UWF file and folder exclusions from a given volume. The exclusions are removed for the next session that follows a restart. + +```powershell +$COMPUTER = "localhost" +$NAMESPACE = "root\standardcimv2\embedded" + +# Define common parameters + +$CommonParams = @{"namespace"=$NAMESPACE; "computer"=$COMPUTER} + +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 + +# $driveLetter is the drive letter of the volume + +# Get the UWF_Volume configuration for the current session + + $currentConfig = Get-WMIObject -class UWF_Volume @CommonParams | + where { + $_.DriveLetter -eq "$driveLetter" -and $_.CurrentSession -eq $true + }; + +# Get the UWF_Volume configuration for the next session after a restart + + $nextConfig = Get-WMIObject -class UWF_Volume @CommonParams | + where { + $_.DriveLetter -eq "$driveLetter" -and $_.CurrentSession -eq $false + }; + +# Display file exclusions for the current session + + 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"; +} + +# Display file exclusions for the next session after a restart + + 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 "" + } +} + +function Add-FileExclusion($driveLetter, $exclusion) { + +# This function adds a new UWF file exclusion to a volume +# The new file exclusion takes effect the next time the device is restarted and UWF is enabled + +# $driveLetter is the drive letter of the volume +# $exclusion is the path and filename of the file or folder exclusion + +# Get the configuration for the next session for the volume + + $nextConfig = Get-WMIObject -class UWF_Volume @CommonParams | + where { + $_.DriveLetter -eq "$driveLetter" -and $_.CurrentSession -eq $false + }; + +# Add the exclusion + + if ($nextConfig) { + $nextConfig.AddExclusion($exclusion) | Out-Null; + Write-Host "Added exclusion $exclusion for $driveLetter"; + } else { + Write-Error "Could not find drive $driveLetter"; + } +} + +function Remove-FileExclusion($driveLetter, $exclusion) { + +# This function removes a UWF file exclusion from a volume +# The file exclusion is removed the next time the device is restarted + +# $driveLetter is the drive letter of the volume +# $exclusion is the path and filename of the file or folder exclusion + +# Get the configuration for the next session for the volume + + $nextConfig = Get-WMIObject -class UWF_Volume @CommonParams | + where { + $_.DriveLetter -eq "$driveLetter" -and $_.CurrentSession -eq $false + }; + +# Try to remove the exclusion + + 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) { + +# This function removes all UWF file exclusions on a volume +# The file exclusions are removed the next time the device is restarted + +# $driveLetter is the drive letter of the volume + +# Get the configuration for the next session for the volume + + $nextConfig = Get-WMIObject -class UWF_Volume @CommonParams | + where { + $_.DriveLetter -eq "$driveLetter" -and $_.CurrentSession -eq $false + }; + +# Remove all file and folder exclusions + + if ($nextConfig) { + $nextConfig.RemoveAllExclusions() | Out-Null; + Write-Host "Cleared all exclusions for $driveLetter"; + } else { + Write-Error "Could not clear exclusions for drive $driveLetter"; + } +} + +# Some examples of using the functions + +Clear-FileExclusions "C:" + +Add-FileExclusion "C:" "\Users\Public\Public Documents" +Add-FileExclusion "C:" "\myfolder\myfile.txt" + +Get-FileExclusions "C:" + +Remove-FileExclusion "C:" "\myfolder\myfile.txt" + +Get-FileExclusions "C:" +``` + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-volumeaddexclusion.md b/windows/configuration/unified-write-filter/uwf-volumeaddexclusion.md new file mode 100644 index 0000000000..72c46d69c6 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volumeaddexclusion.md @@ -0,0 +1,56 @@ +--- +title: UWF_Volume.AddExclusion +description: UWF_Volume.AddExclusion +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume.AddExclusion + +Adds a file or folder to the file exclusion list for a volume protected by Unified Write Filter (UWF). + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Volume](uwf-volume.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-volumecommitfile.md b/windows/configuration/unified-write-filter/uwf-volumecommitfile.md new file mode 100644 index 0000000000..0487c47c19 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volumecommitfile.md @@ -0,0 +1,47 @@ +--- +title: UWF_Volume.CommitFile +description: UWF_Volume.CommitFile +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume.CommitFile + +Commits changes from the overlay to the physical volume for a specified file on a volume protected by Unified Write Filter (UWF). + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Volume](uwf-volume.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-volumecommitfiledeletion.md b/windows/configuration/unified-write-filter/uwf-volumecommitfiledeletion.md new file mode 100644 index 0000000000..ec071c4508 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volumecommitfiledeletion.md @@ -0,0 +1,47 @@ +--- +title: UWF_Volume.CommitFileDeletion +description: UWF_Volume.CommitFileDeletion +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume.CommitFileDeletion + +Deletes the specified file and commits the deletion to the physical volume. + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Volume](uwf-volume.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-volumefindexclusion.md b/windows/configuration/unified-write-filter/uwf-volumefindexclusion.md new file mode 100644 index 0000000000..e2cdf90060 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volumefindexclusion.md @@ -0,0 +1,48 @@ +--- +title: UWF_Volume.FindExclusion +description: UWF_Volume.FindExclusion +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume.FindExclusion + +Checks if a specific file or folder is in the exclusion list for a volume protected by Unified Write Filter (UWF). + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Volume](uwf-volume.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-volumegetexclusions.md b/windows/configuration/unified-write-filter/uwf-volumegetexclusions.md new file mode 100644 index 0000000000..b14bd1d11c --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volumegetexclusions.md @@ -0,0 +1,45 @@ +--- +title: UWF_Volume.GetExclusions +description: UWF_Volume.GetExclusions +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume.GetExclusions + +Gets a list of all file exclusions for a Unified Write Filter (UWF) protected volume. + +## Syntax + +```powershell +UInt32 GetExclusions( + [out, EmbeddedInstance("UWF_ExcludedFile")] string ExcludedFiles[] +); +``` + +## Parameters + +**ExcludedFiles**
\[out\] An array of [UWF_ExcludedFile](uwf-excludedfile.md) 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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Volume](uwf-volume.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-volumeprotect.md b/windows/configuration/unified-write-filter/uwf-volumeprotect.md new file mode 100644 index 0000000000..30283fc314 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volumeprotect.md @@ -0,0 +1,45 @@ +--- +title: UWF_Volume.Protect +description: UWF_Volume.Protect +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume.Protect + +Enables Unified Write Filter (UWF) to protect the volume after the next system restart, if UWF is enabled after the restart. + +## Syntax + +```powershell +UInt32 Protect(); +``` + +## Parameters + +None. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Volume](uwf-volume.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-volumeremoveallexclusions.md b/windows/configuration/unified-write-filter/uwf-volumeremoveallexclusions.md new file mode 100644 index 0000000000..c85992e7ff --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volumeremoveallexclusions.md @@ -0,0 +1,45 @@ +--- +title: UWF_Volume.RemoveAllExclusions +description: UWF_Volume.RemoveAllExclusions +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume.RemoveAllExclusions + +Removes all files and folders from the file exclusion list for a volume protected by Unified Write Filter (UWF). + +## Syntax + +```powershell +UInt32 RemoveAllExclusions(); +``` + +## Parameters + +None. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI errorj constant](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Volume](uwf-volume.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-volumeremoveexclusion.md b/windows/configuration/unified-write-filter/uwf-volumeremoveexclusion.md new file mode 100644 index 0000000000..6e9f3c3f24 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volumeremoveexclusion.md @@ -0,0 +1,45 @@ +--- +title: UWF_Volume.RemoveExclusion +description: UWF_Volume.RemoveExclusion +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume.RemoveExclusion + +Removes a specific file or folder from the file exclusion list for a volume protected by Unified Write Filter (UWF). + +## Syntax + +```powershell +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](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Volume](uwf-volume.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-volumesetbindbydriveletter.md b/windows/configuration/unified-write-filter/uwf-volumesetbindbydriveletter.md new file mode 100644 index 0000000000..3f2262afcd --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volumesetbindbydriveletter.md @@ -0,0 +1,50 @@ +--- +title: UWF_Volume.SetBindByDriveLetter +description: UWF_Volume.SetBindByDriveLetter +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume.SetBindByDriveLetter + +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 + +```powereshell +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*). | +| **false** | Binds the UWF volume by the volume name (*tight binding*). | + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error](/windows/win32/wmisdk/wmi-error-constants). + +## 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Volume](uwf-volume.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-volumeunprotect.md b/windows/configuration/unified-write-filter/uwf-volumeunprotect.md new file mode 100644 index 0000000000..015e73e77d --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-volumeunprotect.md @@ -0,0 +1,43 @@ +--- +title: UWF_Volume.Unprotect +description: UWF_Volume.Unprotect +ms.date: 05/20/2024 +ms.topic: reference +--- + +# UWF_Volume.Unprotect + +Disables UWF protection of the volume after the next system restart. + +## Syntax + +```powershell +UInt32 Unprotect(); +``` + +## Parameters + +None. + +## Return Value + +Returns an HRESULT value that indicates [WMI status](/windows/win32/wmisdk/wmi-non-error-constants) or a [WMI error constant](/windows/win32/wmisdk/wmi-error-constants). + +## Remarks + +Unprotecting the volume does not remove the [UWF_Volume](uwf-volume.md) 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 Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [UWF_Volume](uwf-volume.md) +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwf-wes7-ewf-to-win10-uwf.md b/windows/configuration/unified-write-filter/uwf-wes7-ewf-to-win10-uwf.md new file mode 100644 index 0000000000..90f771ca8c --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-wes7-ewf-to-win10-uwf.md @@ -0,0 +1,60 @@ +--- +title: Windows Embedded Systems7 Enhanced Write Filter to Windows 10 Unified Write Filter +description: Migration of WES7 EWF to Win10 UWF +ms.date: 05/20/2024 +ms.topic: reference +--- + +# Windows Embedded Systems 7 Enhanced Write Filter to Windows 10 Unified Write Filter + +## Allow UWF swapfile (aka. DISK Overlay) to be created and used on any volume + +We added ability for Overlay in DISK mode to use file on any available volume unrelated to whether the volume is protected or not. The main purpose for the change is to allow booting from devices susceptible to wear by writings (such as Flash/SD/SSD devices) while redirecting the DISK overlay to less *precious* media. Prior to that change, DISK mode Overlay was exclusively restricted to OS (aka C:) volume. + +:::image type="content" source="images/administratorcommandprompt.png" alt-text="This is a administrator command prompt"::: + +New subcommand `create-swapfile` was introduced under `uwfmgr.exe volume` to allow user control over the location of the DISK mode Overlay swapfile. This command requires volume DOS name (such as C:, D:, and so on.) or volume GUID as argument. The initial size of the file is deduced from the size of the Overlay at the time and may be later changed by issuing `uwfmgr.exe overlay set-size` subcommand. +The new subcommand `create-swapfile` is only allowed when UWF filter is disabled and UWF Overlay is in DISK mode. + +## Read Only Media mode + +Read Only Mode allows elimination of all and any writes to the physical storage device, even metadata writes that does not have any effect on a files content. Read Only Media mode can be easily configured using UWF to get into it and out of it. The new functionality supports many popular scenarios that users of legacy WES7 EWF volume-based filter used. +The new subcommand `set-rom-mode` was introduced under `uwfmgr.exe. overlay` to allow the user to enable/disable Read-Only Media mode. + +:::image type="content" source="images/administratorcompactprompt.png" alt-text="This is a administrator compact prompt"::: + +This subcommand requires `on` or `off` argument. Read-Only Media mode can be enabled only when UWF is currently disabled. The mode can be disabled, if UWF is currently enabled, but after `off` command is issued there is no way to re-enable Read-Only Media mode until the next reboot. Also, UWF can be enabled/disabled while in Read-Only Media mode, but such *state change* results in files and/or metadata to be changed on physical device protected by UWF. + +> [!NOTE] +> +>- After enabling Read-Only Media mode, all writes will be filtered out as earlier as next reboot, so anything that is written until then may cause changes on the physical device. +>- All existing exclusions are ignored (nonfunctional) and no file/registry commits are possible in Read Only Media mode. See Full Volume Commit in this document). +>- Enabling Read Only Media mode is only possible when UWF is configured to use RAM overlay. + +:::image type="content" source="images/overlaysettings.png" alt-text="This is a overlay settings"::: + +UWF CSP provider was updated by allowing setting new bit (0x4) in CFG_DATATYPE_INTEGER UnifiedWriteFilter\NextSession\OverlayFlags property. + +After the implementation of Read-Only Media mode we were able to make HORM mode transitions significantly more consistent, safe, and reliable. To enable HORM mode, UWF must be configured and booted into Read Only Media mode, which eliminates the need for user to care about exclusions and situation where HORM enablement is not possible by other reasons. + +### Full Volume Commit in Read-Only Media mode + +After introduction of Read-Only Media mode, we were able to implement ability to commit entire state of the UWF protected volumes to the physical disk at once, which was architecturally impossible before in presence of active file/registry exclusions. + +The new subcommand `commit` was introduced under `uwfmgr.exe overlay` to allow the user to commit all accumulated changes since, previous boot and all following changes until next reboot to the underlying physical device. After successful `full volume commit` and until the next reboot OS behaves like being totally unprotected. Protection is restored on the next reboot. + +:::image type="content" source="images/administratorprompt.png" alt-text="This is a administrator prompt"::: + +> [!NOTE] +> +>- UWF must be enabled and configured in Read-Only Media mode +>- UWF must not be in HORM mode: +> HORM mode cannot be enabled after Full Volume Commit and before the next reboot. +> +>- UWF can be disabled after Full Volume Commit + +UWF CSP provider was updated by adding read/write CFG_DATATYPE_BOOLEAN `UnifiedWriteFilter\CurrentSession\OverlayCommit` property, which indicates if Full Overlay Commit was issued after the last boot. Setting that property from zero (FALSE) to non-zero value (TRUE) causes immediate Full Volume Commit to be performed. Setting this property to zero (FALSE) if its current value is non-zero (TRUE) is not allowed. + +Customer can easily determine `Full Volume Commit` state by checking current configuration (for example, uwfmgr get-config): + +:::image type="content" source="images/fullvolumecommit.png" alt-text="This is a full volume commit"::: diff --git a/windows/configuration/unified-write-filter/uwf-wmi-provider-reference.md b/windows/configuration/unified-write-filter/uwf-wmi-provider-reference.md new file mode 100644 index 0000000000..81c39bca3e --- /dev/null +++ b/windows/configuration/unified-write-filter/uwf-wmi-provider-reference.md @@ -0,0 +1,43 @@ +--- +title: Unified Write Filter WMI provider reference +description: Unified Write Filter WMI provider reference +ms.date: 05/20/2024 +ms.topic: reference +--- + +# Unified Write Filter WMI provider reference + +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 + +| Classes | Description | +|---------|-------------| +| [UWF_ExcludedFile](uwf-excludedfile.md) | 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](uwf-excludedregistrykey.md) | A container class that contains the registry keys that are currently in the registry key exclusion list for UWF. | +| [UWF_Filter](uwf-filter.md) | Enables or disables Unified Write Filter (UWF), resets configuration settings for UWF, and shuts down or restarts your device. | +| [UWF_Overlay](uwf-overlay.md) | Contains the current size of the UWF overlay and manages the critical and warning thresholds for the overlay size. | +| [UWF_OverlayConfig](uwf-overlayconfig.md) | Manages the configuration of the UWF overlay. | +| [UWF_OverlayFile](uwf-overlayfile.md) | Displays and configures global settings for the UWF overlay. You can modify the maximum size and the type of the UWF overlay. | +| [UWF_RegistryFilter](uwf-registryfilter.md) | Adds or removes registry exclusions from UWF filtering. | +| [UWF_Servicing](uwf-servicing.md) | Contains properties and methods that enable you to query and control UWF servicing mode. | +| [UWF_Volume](uwf-volume.md) | 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](/previous-versions/windows/it-pro/windows-powershell-1.0/ff730973(v=technet.10)) on TechNet. + +## Requirements + +| Windows Edition | Supported | +|:-----------------------|:---------:| +| Windows Home | No | +| Windows Pro | No | +| Windows Enterprise | Yes | +| Windows Education | Yes | +| Windows IoT Enterprise | Yes | + +## Related articles + +- [uwfmgr.exe](uwfmgrexe.md) diff --git a/windows/configuration/unified-write-filter/uwfexclusions.md b/windows/configuration/unified-write-filter/uwfexclusions.md new file mode 100644 index 0000000000..a2e371583f --- /dev/null +++ b/windows/configuration/unified-write-filter/uwfexclusions.md @@ -0,0 +1,189 @@ +--- +title: Common write filter exclusions +description: Common write filter exclusions +ms.date: 08/11/2023 +ms.topic: reference +--- + +# Write filter exclusions + +You can add specific files or folders on a protected volume to a file exclusion list. When a file or folder is in the exclusion list all writes to that file or folder persists through a device restart. + +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] +> Adding files and folders to exclusions will not reduce overlay consumption. Exclusions are intended to allow small amounts of data and configuration to persist after the device restarts. +> +> 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\\NTUSER.DAT +> - \Windows\BOOTSTAT.DAT +> - %System Drive%\EFI\Microsoft\Boot\BOOTSTAT.DAT +> - %System Drive%\Boot\BOOTSTAT.DAT +> +> Also, don't add exclusions for the following: +> +> - 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. +> +> Adding an exclusion for any of these items is unsupported and may lead to unpredictable results. +> It's OK to exclude subdirectories and files under these locations. +> +> Folders need to exist prior to adding them to the exclusion list. +> + +You can't rename or move a file or folder from a protected location to an unprotected location, or vice versa. An error occurs if you attempt to delete a file folder in the exclusion list on a write filter protected volume. In this case, Windows attempts to move the file or folder to the Recycle Bin. The Recycle Bin isn't in the exclusion list. You can't move files that are in the exclusion list to a location that is write filter protected. + +You can work around this error using one of the following options: + +- Disable the Recycle Bin +- User can press Ctrl+Shift and then left-click on the file to directly delete the excluded file to bypass the Recycle Bin. +- User can delete the excluded file directly from a command prompt. + +You must restart the device for new exclusions to take effect. + +## Virtual Hard Disk (VHD) file exclusions + +When you deploy a Windows image with UWF on a VHD boot disk, you can protect the volume that contains the VHD file by adding a file exclusion for the VHD file before enabling UWF and protecting the volume. + +To add a file exclusion for the VHD file at an administrator command prompt: + +```cmd +uwfmgr.exe file add-exclusion :\\.vhd +``` + +For example: + +```cmd +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 UWF protection. When a registry key is in the exclusion list, all writes to that registry key bypass UWF filtering and are written directly to the registry and persist after the device restarts. + +You must use an administrator account to add or remove registry exclusions during run time, and you must restart the device for new exclusions to take effect. + +If you exclude a registry key, all its subkeys are also excluded from filtering. You can exclude registry subkeys only under the following registry keys: + +- `HKEY\LOCAL\MACHINE\BCD00000000` +- `HKEY\LOCAL\MACHINE\SYSTEM` +- `HKEY\LOCAL\MACHINE\SOFTWARE` +- `HKEY\LOCAL\MACHINE\SAM` +- `HKEY\LOCAL\MACHINE\SECURITY` +- `HKEY\LOCAL\MACHINE\COMPONENTS` + +> [!IMPORTANT] +> Don't add exclusions for the following: +> +> - `HKLM\SECURITY\Policy\Secrets\$MACHINE.ACC` + +> [!NOTE] +> UWF automatically excludes certain registry keys from being filtered. These registry keys are primarily related to UWF configuration settings and cannot be removed from the exclusion list. + +For more information about common registry exclusions, see [Common write filter exclusions](uwfexclusions.md). + +## Common write-filter exclusions + +Some services and features write information to a device’s persistent volume, and expect that information to be present across device restarts. You may need to configure your write filter to allow for specific file and registry exclusions in order for these services and features to work correctly. + +This article lists registry and file exclusions that can help enable some common services and features to work correctly when write filters are enabled. + +If you're running any antivirus or security software in addition to UWF, consult with your antivirus vendor for advice on how to configure their solution in a UWF environment. You may need to add a UWF exclusion for the signature or update folder. + +### Customer Experience Improvement Program (CEIP) + +When you choose to participate in the CEIP, your computer or device automatically sends information to Microsoft about how you use certain products. Information from your computer or device is combined with other CEIP data to help Microsoft solve problems and to improve the products and features customers use most often. + +CEIP data is stored in files that have a `.sqm` file name extension. To make sure that the CEIP data in the `.sqm` files is available on a device that has write filters enabled, you can add file and folder exclusions for the `.sqm` files and folders. + +To locate the `.sqm` files and folders on your device, search for `.sqm` files by using File Explorer. Alternately, at a command prompt with administrator rights at the root of the drive, type the following command to obtain a list of `.sqm` files on the device: + +```powershell +dir *.sqm /s +``` + +Add file and folder exclusions as required for any `.sqm` files located on your device. + +Add registry exclusions for the following registry keys: + +- `HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\SQMClient\Windows\CEIPEnable` +- `HKEY_LOCAL_MACHINE\Software\Microsoft\SQMClient\Windows\CEIPEnable` +- `HKEY_LOCAL_MACHINE\Software\Microsoft\SQMClient\UploadDisableFlag` + +### Background Intelligent Transfer Service (BITS) + +Background Intelligent Transfer Service (BITS) downloads or uploads files between a client and server and provides progress information related to the transfers. + +Add file exclusions for the following folders and files: + +- `%ALLUSERSPROFILE%*\Microsoft\Network\Downloader` + +Add registry exclusions for the following registry keys: + +- `HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\BITS\StateIndex` + +### Windows Explorer + +If you attempt to delete an excluded file or folder on a protected volume using Windows Explorer, you experience an error. In this case, Windows attempt to move the file or folder to the Recycle Bin, which isn't in the exclusion list. The write filter doesn't support moving a file or folder in the exclusion list to a location that is write filter protected. + +You can work around this error using one of the following options: + +- Disable the Recycle Bin +- User can press Ctrl+Shift and then left-click on the file to directly delete the excluded file to bypass the Recycle Bin. +- 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` + +> [!IMPORTANT] +> Folders need to exist prior to adding them to the exclusion list. +> + +### 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 articles + +- [Unified Write Filter]( index.md) +- [Service UWF-protected devices](service-uwf-protected-devices.md) +- [Unified Write Filter WMI provider reference](uwf-wmi-provider-reference.md) diff --git a/windows/configuration/unified-write-filter/uwfmgrexe.md b/windows/configuration/unified-write-filter/uwfmgrexe.md new file mode 100644 index 0000000000..81f17dbbf7 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwfmgrexe.md @@ -0,0 +1,214 @@ +--- +title: uwfmgr.exe +description: uwfmgr.exe +ms.date: 10/02/2018 +ms.topic: reference +--- + +# uwfmgr.exe + +The UWFMgr tool can be used at the command-line or in PowerShell to configure and retrieve settings for [Unified Write Filter (UWF)]( index.md). + +> [!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 + +```powershell +uwfmgr.exe + Help | ? + Get-Config + Filter + Help | ? + Enable + Disable + Reset-Settings + Shutdown + Restart + Volume + Help | ? + Get-Config { | all} + Protect { | all} + Unprotect + File + Help | ? + Get-Exclusions { | all} + Add-Exclusion + Remove-Exclusion + Commit + Commit-Delete + Registry + Help | ? + Get-Exclusions + Add-Exclusion + Remove-Exclusion + Commit [] + Commit-Delete [] + Overlay + Help | ? + Get-Config + Get-AvailableSpace + Get-Consumption + Set-Size + Set-Type {RAM | DISK} + Set-WarningThreshold + Set-CriticalThreshold + Set-Passthrough + Set-Persistent + Reset-PersistentState + Servicing + Enable + Disable + Update-Windows + Get-Config + Help +``` + +## Location + +**Uwfmgr** can be found under the %WINDIR%\\System32\\ folder. + +## Command-line options and parameters + +The following list describes the options and sub-options that are available to use in **uwfmgr.exe**, and it lists the corresponding WMI class or method for each command-line option and sub-option (if available). + +- **Help | ?** + - Displays command-line help for basic parameters for **uwfmgr.exe**. +- **Get-Config** + - Displays UWF configuration settings for the current and next session. +- **Filter** + - Configures basic UWF settings. + - [UWF_Filter](uwf-filter.md) + - *Enable* + - Enables UWF protection for the next session after a system restart. + - [UWF_Filter.Enable](uwf-filterenable.md) + - *Disable* + - Disables UWF protection for the next session after a system restart. + - [UWF_Filter.Disable](uwf-filterdisable.md) + - *Reset-Settings* + - Restores UWF settings to the original state.
If you added UWF to your image by using **Turn Windows features on or off** or by using DISM, the original state is the state of UWF settings when UWF was first enabled.
If you added UWF to your image by using SMI settings in an unattend file, the original state is the state of UWF settings when Windows was installed on the device. **Starting in Windows 10, this command is no longer supported.** + - [UWF_Filter.ResetSettings](uwf-filterresetsettings.md) + - *Shutdown* + - Shuts down the device immediately, even if the overlay is full or near full. Administrator-level permissions are required to use this command. + - [UWF_Filter.ShutdownSystem](uwf-filtershutdownsystem.md) + - *Restart* + - Shuts down the device immediately and restarts, even if the overlay is full or near full. Administrator-level permissions are required to use this command. + - [UWF_Filter.RestartSystem](uwf-filterrestartsystem.md) +- **Volume** + - Configures settings for volumes protected by UWF. If the *<volume>* argument is needed, you can specify a drive letter (for example, `uwfmgr.exe volume protect C:`), or else you can specify all volumes (for example, `uwfmgr.exe volume get-config all`). + - [UWF_Volume](uwf-volume.md) + - *Help | ?* + - Displays command-line help for the `uwfmgr.exe volume` command. + - *Get-Config* {*<volume>* | all} + - Displays configuration settings and file exclusions for the specified volume, or all volumes if **all** is specified. Displays information for both the current and the next session. + - [UWF_Volume](uwf-volume.md) + - *Protect* {*<volume>* | all} + - Adds the specified volume to the list of volumes that are protected by UWF. UWF starts protecting the volume after the next system restart if UWF filtering is enabled. + - [UWF_Volume.Protect](uwf-volumeprotect.md) + - *Unprotect* *<volume>* + - Removes the specified volume from the list of volumes that are protected by UWF. UWF stops protecting the volume after the next system restart. + - [UWF_Volume.Unprotect](uwf-volumeunprotect.md) +- **File** + - Configures file exclusion settings for UWF. If you use the *<file>* argument, it must be fully qualified, including the volume and path. **uwfmgr.exe** uses the volume specified in the *<file>* argument to determine which volume contains the file exclusion list for the file. + - [UWF_Volume](uwf-volume.md) + - *Help | ?* + - Displays command-line help for the `uwfmgr.exe file` command. + - *Get-Exclusions* {*<volume>* | all} + - Displays all files and directories in the exclusion list for the specified volume (for example, `uwfmgr.exe file Get-Exclusions C:`), or all volumes if **all** is specified. Displays information for both the current and the next session. + - [UWF_Volume.GetExclusions](uwf-volumegetexclusions.md) + - *Add-Exclusion* *<file>* + - Adds the specified file to the file exclusion list of the volume protected by UWF. UWF starts excluding the file from filtering after the next system restart. + - [UWF_Volume.AddExclusion](uwf-volumeaddexclusion.md) + - *Remove-Exclusion* *<file>* + - Removes the specified file from the file exclusion list of the volume protected by UWF. UWF stops excluding the file from filtering after the next system restart. + - [UWF_Volume.RemoveExclusion](uwf-volumeremoveexclusion.md) + - *Commit* *<file>* + - Commits changes to a specified file to overlay for a UWF-protected volume. Administrator-level permissions are required to use this command. + - [UWF_Volume.CommitFile](uwf-volumecommitfile.md) + - *Commit-Delete* *<file>* + - Deletes the specified file from both the overlay and the physical volume. Administrator-level permissions are required to use this command. + - [UWF_Volume.CommitFileDeletion](uwf-volumecommitfiledeletion.md) +- **Registry** + - Configures registry key exclusion settings for UWF. + - [UWF_RegistryFilter](uwf-registryfilter.md) + - *Help | ?* + - Displays command-line help for the `uwfmgr.exe registry` command. + - *Get-Exclusions* + - Displays all registry keys in the registry exclusion list. Displays information for both the current and the next session. + - [UWF_RegistryFilter.GetExclusions](uwf-registryfiltergetexclusions.md) + - *Add-Exclusion<key>* + - Adds the specified registry key to the registry exclusion list for UWF. UWF starts excluding the registry key from filtering after the next system restart. + - [UWF_RegistryFilter.AddExclusion](uwf-registryfilteraddexclusion.md) + - *Remove-Exclusion* *<key>* + - Removes the specified registry key from the registry exclusion list for UWF. UWF stops excluding the registry key from filtering after the next system restart. + - [UWF_RegistryFilter.RemoveExclusion](uwf-registryfilterremoveexclusion.md) + - *Commit* *<key> <value>* + - Commits changes to the specified key and value. Administrator-level permissions are required to use this command. + - [UWF_RegistryFilter.CommitRegistry](uwf-registryfiltercommitregistry.md) + - *Commit-Delete* *<key> \[<value>\]* + - Deletes the specified registry key and value and commits the deletion. Deletes all values and subkeys if the value is empty, and commits the deletion. Administrator-level permissions are required to use this command. + - [UWF_RegistryFilter.CommitRegistryDeletion](uwf-registryfiltercommitregistrydeletion.md) +- **Overlay** + - Configures settings for the UWF overlay. + - [UWF_Overlay](uwf-overlay.md) and [UWF_OverlayConfig](uwf-overlayconfig.md) + - *Help | ?* + - Displays command-line help for the `uwfmgr.exe overlay` command. + - *Get-Config* + - Displays configuration settings for the UWF overlay. Displays information for both the current and the next session. + - [UWF_Overlay](uwf-overlay.md) and [UWF_OverlayConfig](uwf-overlayconfig.md) + - *Get-AvailableSpace* + - Displays the amount of space remaining that is available for the UWF overlay. + - [UWF_Overlay](uwf-overlay.md) + - *Get-Consumption* + - Displays the amount of space currently used by the UWF overlay. + - [UWF_Overlay](uwf-overlay.md) + - *Set-Size* *<size>* + - Sets the maximum size of the UWF overlay, in megabytes, for the next session after a system restart. + - [UWF_OverlayConfig.SetMaximumSize](uwf-overlayconfigsetmaximumsize.md) + - *Set-Type* {*RAM | DISK*} + - Sets the type of the overlay storage to RAM-based or disk-based. UWF must be disabled in the current session to set the overlay type to disk-based. + - [UWF_OverlayConfig.SetType](uwf-overlayconfigsettype.md) + - *Set-WarningThreshold* *<size>* + - Sets the overlay size, in megabytes, at which the driver issues warning notifications for the current session. + - [UWF_Overlay.SetWarningThreshold](uwf-overlaysetwarningthreshold.md) + - *Set-CriticalThreshold* *<size>* + - Sets the overlay size, in megabytes, at which the driver issues critical notifications for the current session. + - [UWF_Overlay.SetCriticalThreshold](uwf-overlaysetcriticalthreshold.md) + - *Set-Passthrough* ** + - Turns the [free space passthrough](uwfoverlay.md#freespace-passthrough-recommended) on or off, allowing UWF to use free space outside of the reserved space when available. + - *Set-Persistent* ** + - Sets the overlay as a [persistent overlay](uwfoverlay.md#persistent-overlay), allowing users to keep using their data after a reboot. + - *Reset-PersistentState* ** + - Clears a persistent overlay on the next boot (on/off). + +- **Servicing** + - Configures settings for UWF servicing mode. + - [UWF_Servicing](uwf-servicing.md) + - *Enable* + - Enables servicing mode in the next session after a restart. Administrator-level permissions are required to use this command. + - [UWF_Servicing.Enable](uwf-servicingenable.md) + - *Disable* + - Disables UWF servicing mode in the next session after a restart. Administrator-level permissions are required to use this command. + - [UWF_Servicing.Disable](uwf-servicingdisable.md) + - *Update-Windows* + - Stand-alone command to apply Windows updates to a device. Called by the master servicing script that is called by the `uwfmgr.exe servicing enable` command. We recommend that you use the `uwfmgr.exe servicing enable` command to service your UWF–protected device whenever possible. Administrator-level permissions are required to use this command. + - [UWF_Servicing.UpdateWindows](uwf-servicingupdatewindows.md) + - *Get-Config* + - Displays UWF servicing mode information for the current session and the next session. + - [UWF_Servicing](uwf-servicing.md) + - *Help* + - Displays command-line help for the `uwfmgr.exe servicing` command. + +## Unsupported WMI methods + +The following list contains the UWF WMI provider methods that are not currently supported by the **uwfmgr.exe** tool: + +- [UWF_Overlay.GetOverlayFiles](uwf-overlaygetoverlayfiles.md) +- [UWF_RegistryFilter.FindExclusion](uwf-registryfilterfindexclusion.md) +- [UWF_Volume.FindExclusion](uwf-volumefindexclusion.md) +- [UWF_Volume.RemoveAllExclusions](uwf-volumeremoveallexclusions.md) +- [UWF_Volume.SetBindByDriveLetter](uwf-volumesetbindbydriveletter.md) + +## Related articles + +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwfoverlay.md b/windows/configuration/unified-write-filter/uwfoverlay.md new file mode 100644 index 0000000000..01c2c8cb3b --- /dev/null +++ b/windows/configuration/unified-write-filter/uwfoverlay.md @@ -0,0 +1,133 @@ +--- +title: Overlay for Unified Write Filter (UWF) +description: Overlay for Unified Write Filter (UWF) +ms.date: 10/02/2018 +ms.topic: reference +--- + +# Unified Write Filter (UWF) overlay location and size + +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. + +## RAM overlay vs. disk overlay + +- **RAM overlay (default)**: The virtual overlay is stored in RAM, and is cleared after a reboot. + + - By writing to RAM, you can reduce the wear on write-sensitive media like solid-state drives. + - RAM is often more limited than drive space. As the drive overlay fills up the available RAM, device performance could be reduced, and users will eventually be prompted to reboot the device. If your users are expected to make many large writes to the overlay, consider using a disk overlay instead. + +- **Disk overlay**: The virtual overlay is stored in a temporary location on the drive. By default, the overlay is cleared on reboot. + + - You can use [freespace passthrough](#freespace-passthrough-recommended) to use additional free space on the drive beyond the reserved virtual overlay space. + - On Windows 10, version 1803, you can use [persistent overlay](#persistent-overlay) to allow users to save work in the virtual overlay even after a reboot. + +## Overlay size + +- Default=1024MB. Set with: + - [CMD](uwfmgrexe.md): `uwfmgr overlay set-size` + - [CSP](/windows/client-management/mdm/unifiedwritefilter-csp): `NextSession/MaximumOverlaySize` + - [WMI](uwf-overlayconfigsetmaximumsize.md): `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: + +```powershell +$wmiobject = get-wmiobject -Namespace "root\standardcimv2\embedded" -Class UWF_Overlay +$files = $wmiobject.GetOverlayFiles("c:") +$files.OverlayFiles | select-object -Property FileName,FileSize | export-csv -Path D:\output.csv +``` + +The amount of overlay used will depend on: + +- Device usage patterns. +- Apps that can be accessed. (Some apps have high write volumes and will fill up the overlay faster.) +- Time between resets. +- When files are deleted, UWF removes them from the overlay and returns the freed resources to the available pool. + +### Warnings and critical events + +As the drive overlay fills up the available space, you can warn your users that they're running out of space, and prompt them to reboot the device or to run a script to clear the overlay. + +1. Set warning levels and critical levels (optional). When the overlay is filled to this value, UWF writes an Event Tracing for Windows (ETW) message. + + - **Warning level**: Default=512MB. Set with: + - [CMD](uwfmgrexe.md): `uwfmgr overlay set-warningthreshold` + - [CSP](/windows/client-management/mdm/unifiedwritefilter-csp): `NextSession/WarningOverlayThreshold` + - [WMI](uwf-overlaysetwarningthreshold.md): `UWF_Overlay.SetWarningThreshold` + - **Critical level**: Default=1024MB. Set with: + - [CMD](uwfmgrexe.md): `uwfmgr overlay set-criticalthreshold` + - [CSP](/windows/client-management/mdm/unifiedwritefilter-csp): `NextSession/CriticalOverlayThreshold` + - [WMI](uwf-overlaysetcriticalthreshold.md): `UWF_Overlay.SetCriticalThreshold` + + Note, these settings will take affect after the next reboot. + +1. Use Task Scheduler to detect the ETW message and to warn users to wrap up their work on the device so they do not lose their content before the overlay is cleared. You can also provide a link to script to clear the contents of the overlay. + + Create tasks that trigger on the event that the **System** log receives an event ID from **uwfvol**: + + | Overlay usage | Source | Level | Event ID | + |---------------------|---------|-------------|----------| + | Warning threshold | uwfvol | Warning | 1 | + | Critical threshold | uwfvol | Error | 2 | + | Back to normal | uwfvol | Information | 3 | + +1. Reboot the device. + +### Freespace passthrough (recommended) + +On devices with a disk overlay, you can use freespace passthrough to access your drive's additional free space. + +You'll still need to reserve some space on the disk for the overlay. This space is used to manage the overlay, and to store overwrites, such as system updates. All other writes are sent to free space on disk. Over time, the reserved overlay will grow slower and slower, because overwrites will just keep replacing one another. + +On devices with a RAM overlay, you can also use freespace passthrough to access your drive's additional free space to reduce overlay usage. +However, freespace passthrough is not recommended for use with a RAM overlay because it does not reduce wear on write-sensitive media like solid-state drives. + +- [CMD](uwfmgrexe.md): uwfmgr overlay set-passthrough (on|off) + +### Persistent overlay + +> [!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](uwfmgrexe.md): uwfmgr overlay set-persistent (on|off) + +To reset the overlay: + +- [CMD](uwfmgrexe.md): `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](uwfmgrexe.md): `uwfmgr shutdown` + - [CSP](/windows/client-management/mdm/unifiedwritefilter-csp): `ShutdownSystem` + - [WMI](uwf-filtershutdownsystem.md): `UWF\Filter.ShutdownSystem` + +- **Restart**: + - [CMD](uwfmgrexe.md): `uwfmgr restart` + - [CSP](/windows/client-management/mdm/unifiedwritefilter-csp): `RestartSystem` + - [WMI](uwf-filterrestartsystem.md): `UWF\Filter.RestartSystem` + +Windows 10 19H1 and later will automatically restart if the maximum size of the overlay is exceeded. + +## Related articles + +- [Unified Write Filter]( index.md) diff --git a/windows/configuration/unified-write-filter/uwftroubleshooting.md b/windows/configuration/unified-write-filter/uwftroubleshooting.md new file mode 100644 index 0000000000..b2b1465444 --- /dev/null +++ b/windows/configuration/unified-write-filter/uwftroubleshooting.md @@ -0,0 +1,33 @@ +--- +title: Troubleshooting Unified Write Filter (UWF) +description: Troubleshooting Unified Write Filter (UWF) +ms.date: 05/02/2017 +ms.topic: reference +--- + +# Troubleshooting Unified Write Filter (UWF) + +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 articles + +[Unified Write Filter]( index.md) + +[Common write filter exclusions](uwfexclusions.md) + +[Service UWF-protected devices](service-uwf-protected-devices.md) + +[Unified Write Filter WMI provider reference](uwf-wmi-provider-reference.md) + +[uwfmgr.exe](uwfmgrexe.md) diff --git a/windows/deployment/TOC.yml b/windows/deployment/TOC.yml index 3d6cd0975b..1a012b9911 100644 --- a/windows/deployment/TOC.yml +++ b/windows/deployment/TOC.yml @@ -294,6 +294,8 @@ items: href: update/windows-update-logs.md - name: Servicing stack updates href: update/servicing-stack-updates.md + - name: Checkpoint cumulative updates and Microsoft Update Catalog usage + href: update/catalog-checkpoint-cumulative-updates.md - name: Update CSP policies href: /windows/client-management/mdm/policy-csp-update?context=/windows/deployment/context/context - name: Update other Microsoft products diff --git a/windows/deployment/do/mcc-ent-edu-overview.md b/windows/deployment/do/mcc-ent-edu-overview.md index 125aed12f4..a09f4f9a76 100644 --- a/windows/deployment/do/mcc-ent-edu-overview.md +++ b/windows/deployment/do/mcc-ent-edu-overview.md @@ -29,9 +29,9 @@ Microsoft Connected Cache deployed directly to Windows relies on [Windows Subsys ## Supported scenarios and configurations -Microsoft Connected Cache for Enterprise and Education (preview) is intended to support the following content delivery scenarios: +Microsoft Connected Cache for Enterprise and Education (preview) is intended to support all Windows cloud downloads that use Delivery Optimization including, but not limited to, the following content delivery scenarios: -- Pre-provisioning of devices using Windows Autopilot +- Windows Autopilot deployment scenarios - Co-managed clients that get monthly updates and Win32 apps from Microsoft Intune - Cloud-only managed devices, such as Intune-enrolled devices without the Configuration Manager client, that get monthly updates and Win32 apps from Microsoft Intune diff --git a/windows/deployment/do/mcc-ent-troubleshooting.md b/windows/deployment/do/mcc-ent-troubleshooting.md index c814c909f2..9e896b0acf 100644 --- a/windows/deployment/do/mcc-ent-troubleshooting.md +++ b/windows/deployment/do/mcc-ent-troubleshooting.md @@ -11,7 +11,7 @@ appliesto: - ✅ Windows 11 - ✅ Supported Linux distributions - ✅ Microsoft Connected Cache for Enterprise -ms.date: 10/30/2024 +ms.date: 01/15/2025 --- @@ -118,7 +118,7 @@ You can use Task Scheduler on the host machine to check the status of this sched ### Cache node successfully deployed but not serving requests -If your cache node isn't responding to requests outside of localhost, it may be because the host machine's port forwarding rules weren't correctly set during Connected Cache installation. +If your cache node isn't responding to requests outside of localhost, it may be because the host machine's port forwarding rules weren't correctly set during Connected Cache installation. Since WSL 2 uses a virtualized ethernet adapter by default, port forwarding rules are needed to allow traffic to reach the WSL 2 instance from your LAN. For more information, see [Accessing network applications with WSL](/windows/wsl/networking#accessing-a-wsl-2-distribution-from-your-local-area-network-lan). To check your host machine's port forwarding rules, use the following PowerShell command. diff --git a/windows/deployment/do/mcc-isp-faq.yml b/windows/deployment/do/mcc-isp-faq.yml index a5c2e9f782..26322219d3 100644 --- a/windows/deployment/do/mcc-isp-faq.yml +++ b/windows/deployment/do/mcc-isp-faq.yml @@ -15,7 +15,7 @@ metadata: appliesto: - ✅ Windows 11 - ✅ Windows 10 - ms.date: 05/23/2024 + ms.date: 01/14/2025 title: Microsoft Connected Cache Frequently Asked Questions summary: | Frequently asked questions about Microsoft Connected Cache @@ -35,10 +35,10 @@ sections: answer: | - Azure subscription - Hardware to host Microsoft Connected Cache - - Ubuntu 20.04 LTS on a physical server or VM of your choice. + - Ubuntu 22.04 LTS on a physical server or VM of your choice. > [!NOTE] - > The Microsoft Connected Cache is deployed and managed using Azure IoT Edge and Ubuntu 20.04 is an [Azure IoT Edge Tier 1 operating system](/azure/iot-edge/support?view=iotedge-2020-11#tier-1). Additionally, the Microsoft Connected Cache module is optimized for Ubuntu 20.04 LTS. + > The Microsoft Connected Cache is deployed and managed using Azure IoT Edge and Ubuntu 22.04 is an [Azure IoT Edge Tier 1 operating system](/azure/iot-edge/support#tier-1). Additionally, the Microsoft Connected Cache module is optimized for Ubuntu 22.04 LTS. The following are recommended hardware configurations: diff --git a/windows/deployment/do/mcc-isp-signup.md b/windows/deployment/do/mcc-isp-signup.md index 284269f52e..5b9d4a5f66 100644 --- a/windows/deployment/do/mcc-isp-signup.md +++ b/windows/deployment/do/mcc-isp-signup.md @@ -13,7 +13,7 @@ appliesto: - ✅ Windows 11 - ✅ Windows 10 - ✅ Microsoft Connected Cache for ISPs -ms.date: 05/23/2024 +ms.date: 01/14/2024 --- # Operator sign up and service onboarding for Microsoft Connected Cache @@ -36,7 +36,7 @@ Before you begin sign up, ensure you have the following components: 1. **Peering DB**: Ensure your organization's [Peering DB](https://www.peeringdb.com/) page is up-to-date and active. Check that the NOC email listed is accurate, and that you have access to this email. -1. **Server**: Ensure the server you wish to install Microsoft Connected Cache on is ready, and that the server is installed on Ubuntu 20.04 LTS. +1. **Server**: Ensure the server you wish to install Microsoft Connected Cache on is ready, and that the server is installed on Ubuntu 22.04 LTS. 1. **Configure cache drive**: Make sure that you have a data drive configured with full permissions on your server. You'll need to specify the location for this cache drive during the cache node configuration process. The minimum size for the data drive is 100 GB. For instructions to mount a disk on a Linux VM, see [Attach a data disk to a Linux VM](/azure/virtual-machines/linux/attach-disk-portal#find-the-disk). ## Resource creation and sign up process diff --git a/windows/deployment/do/mcc-isp-support.md b/windows/deployment/do/mcc-isp-support.md index dbced5230c..2eb833af48 100644 --- a/windows/deployment/do/mcc-isp-support.md +++ b/windows/deployment/do/mcc-isp-support.md @@ -13,7 +13,7 @@ appliesto: - ✅ Windows 11 - ✅ Windows 10 - ✅ Microsoft Connected Cache for ISPs -ms.date: 05/23/2024 +ms.date: 01/14/2025 --- # Support and troubleshooting @@ -97,6 +97,15 @@ Rerun the IoT Edge Check command to validate proper connectivity: ```bash iotedge check -verbose ``` +
+ +## Updating from Ubuntu 20.04 to 22.04 +You can now provision Microsoft Connected Cache for ISP on Ubuntu 22.04. +If you have a cache node provisioned on Ubuntu 20.04, you will need to uninstall it first before updating to Ubuntu 22.04. +Once you have updated the system, download the provisioning package from Azure portal and run the provisioning script on the portal. +For more information on provisioning cache node, visit, [Create, provision and deploy cache node](mcc-isp-create-provision-deploy.md#provision-your-server). + +
## Diagnose and Solve Problems @@ -110,6 +119,7 @@ Within **Diagnose and solve problems**, select **Troubleshoot** under the type o :::image type="content" source="images/mcc-isp-diagnose-solve-troubleshoot.png" alt-text="A screenshot of Azure portal showing the option to select Troubleshoot to continue troubleshooting common issues related to the installation of Microsoft Connected Cache." lightbox="images/mcc-isp-diagnose-solve-troubleshoot.png"::: + ## Steps to obtain an Azure subscription ID To onboard onto Microsoft Connected Cache, you'll need an Azure subscription ID. Use the following steps to obtain your subscription ID: diff --git a/windows/deployment/do/mcc-isp-vm-performance.md b/windows/deployment/do/mcc-isp-vm-performance.md index f3d3079534..6df9fd0b0b 100644 --- a/windows/deployment/do/mcc-isp-vm-performance.md +++ b/windows/deployment/do/mcc-isp-vm-performance.md @@ -12,7 +12,7 @@ ms.reviewer: mstewart ms.collection: tier3 appliesto: - ✅ Microsoft Connected Cache for ISPs -ms.date: 05/23/2024 +ms.date: 01/14/2025 --- # Enhancing cache performance @@ -21,7 +21,7 @@ To make sure you're maximizing the performance of your cache node, review the fo #### OS requirements -The Microsoft Connected Cache module is optimized for Ubuntu 20.04 LTS. Install Ubuntu 20.04 LTS on a physical server or VM of your choice. +The Microsoft Connected Cache module is optimized for Ubuntu 22.04 LTS. Install Ubuntu 22.04 LTS on a physical server or VM of your choice. #### NIC requirements diff --git a/windows/deployment/update/catalog-checkpoint-cumulative-updates.md b/windows/deployment/update/catalog-checkpoint-cumulative-updates.md new file mode 100644 index 0000000000..ce4b36fd45 --- /dev/null +++ b/windows/deployment/update/catalog-checkpoint-cumulative-updates.md @@ -0,0 +1,93 @@ +--- +title: Checkpoint cumulative updates and the Microsoft Update Catalog +description: This article describes how to handle checkpoint cumulative updates when you use the Microsoft Update Catalog to update devices and images. +ms.service: windows-client +ms.subservice: itpro-updates +ms.topic: conceptual +ms.author: mstewart +author: mestew +manager: aaroncz +ms.collection: + - tier2 +ms.localizationpriority: medium +appliesto: + - ✅ Windows 11, version 24H2 and later + - ✅ Windows Server 2025 and later +ms.date: 01/31/2025 +--- + +# Checkpoint cumulative updates and Microsoft Update Catalog usage + +Starting Windows 11, version 24H2, monthly security updates and optional nonsecurity preview release updates might be preceded by a checkpoint cumulative update. Devices updating from Windows Update (WU) and Windows Server Update Services (WSUS) release channels can continue to seamlessly install the latest monthly security update or the optional nonsecurity preview release regardless of whether there are any preceding checkpoint cumulative updates, so **update processes involving WU and WSUS remain unchanged**. This article covers how Microsoft Update Catalog users can easily update their devices (or images) through checkpoint cumulative updates. + +## Checkpoint cumulative updates + +Windows 11 quality updates use servicing technology and are built cumulatively from the time when a new Windows OS was released to manufacturing (RTM). These monthly updates include all the changes since RTM in the form of binary differentials computed from the initial version of those binaries. + +With Windows 11, version 24H2, Microsoft introduced a new concept of checkpoint cumulative updates. This change allows you to get features and security enhancements via the latest cumulative update through smaller, incremental differentials containing only the changes since the previous checkpoint cumulative update. This change means that you can save time, bandwidth, and hard drive space. + +Going forward, Microsoft might periodically release cumulative updates as checkpoints. The subsequent updates will then consist of: +- The update package files associated with the checkpoints, and +- New update package files that contain incremental binary differentials against the version of binaries in the last checkpoint. + +This process might be repeated multiple times, thereby generating multiple checkpoints during the lifecycle of a given Windows release. The Windows 11, version 24H2 servicing stack can merge all the checkpoints and only download and install content that's missing on the device. + +If any checkpoint cumulative updates precede a target update, a device or image needs to take all prior checkpoint cumulative updates before it can take the target update. In other words, a post-checkpoint latest cumulative update can be applied to images/devices that are on that checkpoint or on a subsequent latest cumulative update. For updates sourced from WU and WSUS this process happens seamlessly. You can continue to use the same tools and processes that you currently use for approving and deploying updates. We expect that your experience updating through a checkpoint cumulative update will position you to efficiently take future checkpoint cumulative updates. + +### Applicability + +A checkpoint cumulative update is just another monthly security update that informs how subsequent updates are built. There's no policy change or new requirement around when users must take these updates, though it's best practice to take monthly security updates at the earliest opportunity to keep your devices protected and productive. + +### Update Windows installation media + +This feature doesn't introduce any change to the applicability of monthly security updates. As before, these updates apply to the main OS (install.wim) and to WinPE (boot.wim) but not to WinRE (winre.wim). + +WinRE is serviced by applying the servicing stack update from a cumulative update (latest cumulative update doesn't apply) and SafeOS Dynamic Update. This is how it has been for a while now, and there's no recent change to WinRE servicing and certainly no change due to the checkpoint cumulative updates feature. We understand that not everybody may have had a shared understanding about this, but applying servicing stack update then SafeOS Dynamic Update is the only way to ensure WinRE is serviced. For more information, see [Update Windows installation media with Dynamic Update](media-dynamic-update.md). + + +## Updating from the Microsoft Update Catalog + +When installing a given monthly security or optional nonsecurity preview update, [Microsoft Update Catalog](https://www.catalog.update.microsoft.com) users can determine and download the prior checkpoint cumulative updates and apply them sequentially under certain situations, or in one go using Deployment Image Servicing and Management (DISM). + +### Finding prior checkpoint cumulative updates + +For a given update, users can look up the KB article and find all preceding checkpoints, if any, listed under the **Catalog** release channel. For instance, the 2024-12 monthly security update (KB5048667) has one preceding checkpoint cumulative update per [December 10, 2024-KB5048667 (OS Build 26100.2605)](https://support.microsoft.com/topic/708755a6-d809-4a8a-8d20-53c4108590e6#ID0ELBD=Catalog): + + > Install each MSU file individually, in order

Download and install each MSU file individually either using DISM or [Windows Update Standalone Installer](https://support.microsoft.com/topic/799ba3df-ec7e-b05e-ee13-1cdae8f23b19) in the following order:

  • windows11.0-kb5043080-x64_953449672073f8fb99badb4cc6d5d7849b9c83e8.msu
  • windows11.0-kb5048667-x64_d4ad0ca69de9a02bc356757581e0e0d6960c9f93.msu
+ +Alternately, users can search the KB number in the [Microsoft Update Catalog](https://catalog.update.microsoft.com/) and select the **Download** button for the selected architecture. The download pop-up shows all prior checkpoints for the update so that users can conveniently download all `.msu` files and apply them to their image or device. For instance, Microsoft Update Catalog shows the [2024-12 cumulative update (KB5048667)](https://support.microsoft.com/help/5048667) has one preceding checkpoint cumulative update, [KB5043080](https://support.microsoft.com/help/5043080). + +### Updating through checkpoint cumulative updates + +**Device has the latest checkpoint cumulative update and doesn't need customization:** + +Devices or images that have the latest checkpoint cumulative update installed and don't need Features on Demand (FoD) or language pack customization can be updated to the latest target cumulative update with no change to your existing process. You can copy the target `.msu` file from Microsoft Update Catalog and install it, for instance using [Add-WindowsPackage (DISM)](/powershell/module/dism/add-windowspackage) or [DISM operating system package (`.cab` or `.msu`) servicing command-line options](/windows-hardware/manufacture/desktop/dism-operating-system-package-servicing-command-line-options). + +Examples of eligible devices: + +| Device is on | Needs to install| +|---|---| +|
  • The checkpoint cumulative update, 2024-09 (KB5043080)
|
  • A subsequent monthly security update like 2024-11 (KB5046617), or
  • A subsequent optional nonsecurity release like 2024-11 (KB5046740)
| +|
  • A subsequent optional nonsecurity preview release like 2024-09 (KB5043178), or
  • A subsequent monthly security update like 2024-10 (KB5044284)
|
  • A subsequent monthly security update like 2025-01 (KB5050009), or
  • A subsequent optional nonsecurity release like 2024-11 (KB5046740)
| + +**Device needs FoD or language pack customization:** + +Installing FoDs or language packs requires the full latest cumulative update payload, which now can be split across files associated with each preceding checkpoint cumulative update. So, when customizing FoDs or language packs for offline media, all prior checkpoint cumulative updates and the target cumulative update need to be installed regardless of whether the device already had any of the prior checkpoints cumulative update installed. This needs to be done using DISM. + +1. Copy the .msu files of the latest cumulative update (the target) and all prior checkpoint cumulative updates to a local folder. Make sure there are no other .msu files present. +1. Mount the install.wim file. +1. Run `DISM /add-package` with the latest `.msu` file as the sole target. +1. Run `/Cleanup-Image /StartComponentCleanup`. +1. Unmount. +1. Run `DISM /export-image` to optimize the image size, if that's important to you. + +**Device doesn't have the latest checkpoint cumulative update and doesn't need customization:** + +Devices that aren't on the latest checkpoint cumulative update and don't need FoD/language pack customization can either install all needed cumulative updates one by one in the right sequence. Alternately they can be updated using DISM to install all cumulative updates in one go. For more information, see the [Updating through checkpoint cumulative updates](#updating-through-checkpoint-cumulative-updates) section. If there are total four checkpoint cumulative updates available and device already has the first one installed, DISM applies the remaining three checkpoint cumulative updates in the right order followed by the target cumulative update, all in one go. + +## Related articles + +- [Servicing stack updates](/windows/deployment/update/servicing-stack-updates) +- [Features on Demand](/windows-hardware/manufacture/desktop/features-on-demand-v2--capabilities) +- [How to download updates that include drivers and hotfixes from the Microsoft Update Catalog](/troubleshoot/windows-client/installing-updates-features-roles/download-updates-drivers-hotfixes-windows-update-catalog) +- [Update Windows installation media with Dynamic Update](media-dynamic-update.md) diff --git a/windows/deployment/update/includes/checkpoint-cumulative-updates.md b/windows/deployment/update/includes/checkpoint-cumulative-updates.md new file mode 100644 index 0000000000..dd9b0e1abd --- /dev/null +++ b/windows/deployment/update/includes/checkpoint-cumulative-updates.md @@ -0,0 +1,17 @@ +--- +author: mestew +ms.author: mstewart +manager: aaroncz +ms.subservice: itpro-updates +ms.service: windows-client +ms.topic: include +ms.date: 01/31/2025 +ms.localizationpriority: medium +--- + + +Starting Windows 11, version 24H2, Microsoft may periodically release cumulative updates as checkpoints. The subsequent updates will consist of: +- The update package files associated with the checkpoints, and +- New update package files that contain incremental binary differentials against the version of binaries in the last checkpoint. + +Multiple checkpoints may be shipped during the lifecycle of a given Windows release. Devices updating from Windows Update and WSUS can continue to seamlessly install the latest monthly security update regardless of whether there are any preceding checkpoint cumulative updates, **no change is needed to their update process**. Catalog users can review [Checkpoint cumulative updates and Microsoft Update Catalog usage](../catalog-checkpoint-cumulative-updates.md) for reference. diff --git a/windows/deployment/update/media-dynamic-update.md b/windows/deployment/update/media-dynamic-update.md index be6e1720f3..d36040300b 100644 --- a/windows/deployment/update/media-dynamic-update.md +++ b/windows/deployment/update/media-dynamic-update.md @@ -13,7 +13,7 @@ appliesto: - ✅ Windows 11 - ✅ Windows 10 - ✅ Windows Server -ms.date: 11/11/2024 +ms.date: 1/31/2024 --- # Update Windows installation media with Dynamic Update @@ -62,7 +62,7 @@ You can obtain Dynamic Update packages from the [Microsoft Update Catalog](https |Servicing stack Dynamic Update | YYYY-MM Servicing Stack Update for Microsoft server operating system version 23H2 | ### Azure Stack HCI, version 22H2 Dynamic Update packages -**Title**, **Product** and **Description** are required to distinguish each Dynamic Package. Latest cumulative update has the servicing stack embedded. Servicing stack published separately only if necessary as a prerequisite for a given cumulative update. +**Title**, **Product**, and **Description** are required to distinguish each Dynamic Package. Latest cumulative update has the servicing stack embedded. Servicing stack published separately only if necessary as a prerequisite for a given cumulative update. | Update packages |Title |Product |Description | |-----------------------------------|----------------------------------------------------------------------------------------|----------------------------------------------|------------------| @@ -72,7 +72,7 @@ You can obtain Dynamic Update packages from the [Microsoft Update Catalog](https |Servicing stack Dynamic Update | YYYY-MM Servicing Stack Update for Microsoft server operating system, version 22H2 | | | ### Windows Server 2022 later Dynamic Update packages -**Title**, **Product** and **Description** are required to distinguish each Dynamic Package. Latest cumulative update has the servicing stack embedded. Servicing stack published separately only if necessary as a prerequisite for a given cumulative update. +**Title**, **Product**, and **Description** are required to distinguish each Dynamic Package. Latest cumulative update has the servicing stack embedded. Servicing stack published separately only if necessary as a prerequisite for a given cumulative update. | Update packages |Title |Product |Description | |-----------------------------------|----------------------------------------------------------------------------------------|----------------------------------------------|------------------| @@ -81,8 +81,8 @@ You can obtain Dynamic Update packages from the [Microsoft Update Catalog](https |Latest cumulative update | YYYY-MM Cumulative Update for Microsoft server operating system, version 21H2 | | | |Servicing stack Dynamic Update | YYYY-MM Servicing Stack Update for Microsoft server operating system, version 21H2 | | | -### Windows 11, version 22H2 and later Dynamic Update packages -**Title** can distinguish each Dynamic Package. Latest cumulative updates have the servicing stack embedded. The servicing stack is published only if necessary for a given cumulative update. Titles below are for Windows 11, version 22H2. Windows 11, version 23H2 and 24H2 have a similar format. +### Windows 11, version 22H2, and later Dynamic Update packages +**Title** can distinguish each Dynamic Package. Latest cumulative updates have the servicing stack embedded. The servicing stack is published only if necessary for a given cumulative update. The following titles are for Windows 11, version 22H2. Windows 11, version 23H2, and version 24H2 have a similar format: | Update packages |Title | |-----------------------------------|---------------------------------------------------------------| @@ -92,7 +92,7 @@ You can obtain Dynamic Update packages from the [Microsoft Update Catalog](https |Servicing stack Dynamic Update | YYYY-MM Servicing Stack Update for Windows 11 Version 22H2 | ### Windows 11, version 21H2 Dynamic Update packages -**Title**, **Product** and **Description** are required to distinguish each Dynamic Package. Latest cumulative update has the servicing stack embedded. Servicing stack published separately only if necessary as a prerequisite for a given cumulative update. +**Title**, **Product**, and **Description** are required to distinguish each Dynamic Package. Latest cumulative update has the servicing stack embedded. Servicing stack published separately only if necessary as a prerequisite for a given cumulative update. | Update packages |Title |Product |Description | |-----------------------------------|---------------------------------------------------------------|----------------------------------------------|------------------| @@ -102,7 +102,7 @@ You can obtain Dynamic Update packages from the [Microsoft Update Catalog](https |Servicing stack Dynamic Update | YYYY-MM Servicing Stack Update for Windows 11 Version 21H2 | | | ### Windows 10, version 22H2 Dynamic Update packages -**Title**, **Product** and **Description** are required to distinguish each Dynamic Package. Latest cumulative update has the servicing stack embedded. Servicing stack published separately only if necessary as a prerequisite for a given cumulative update. +**Title**, **Product**, and **Description** are required to distinguish each Dynamic Package. Latest cumulative update has the servicing stack embedded. Servicing stack published separately only if necessary as a prerequisite for a given cumulative update. | Update packages |Title |Product |Description | |-----------------------------------|---------------------------------------------------------------|----------------------------------------------|------------------| @@ -124,30 +124,30 @@ Properly updating the installation media involves many actions operating on seve This table shows the correct sequence for applying the various tasks to the files. For example, the full sequence starts with adding the servicing stack update to WinRE (1) and concludes with adding boot manager from WinPE to the new media (28). -|Task |WinRE (winre.wim) |Operating system (install.wim) | WinPE (boot.wim) | New media | -|-------------------------------------------|-------------------|--------------------------------|------------------|-----------| -|Add servicing stack Dynamic Update | 1 | 9 | 17 | | -|Add language pack | 2 | 10 | 18 | | -|Add localized optional packages | 3 | | 19 | | -|Add font support | 4 | | 20 | | -|Add text-to-speech | 5 | | 21 | | -|Update Lang.ini | | | 22 | | -|Add Features on Demand | | 11 | | | -|Add Safe OS Dynamic Update | 6 | | | | -|Add Setup Dynamic Update | | | | 26 | -|Add setup.exe and setuphost.exe from WinPE | | | | 27 | -|Add boot manager from WinPE | | | | 28 | -|Add latest cumulative update | | 12 | 23 | | -|Clean up the image | 7 | 13 | 24 | | -|Add Optional Components | | 14 | | | -|Add .NET and .NET cumulative updates | | 15 | | | -|Export image | 8 | 16 | 25 | | +|Task |WinRE (winre.wim) |Operating system (install.wim) | WinPE (boot.wim) | New media | +|--------------------------------------------------------|-------------------|--------------------------------|------------------|-----------| +|Add servicing stack update via latest cumulative update | 1 | 9 | 17 | | +|Add language pack | 2 | 10 | 18 | | +|Add localized optional packages | 3 | | 19 | | +|Add font support | 4 | | 20 | | +|Add text-to-speech | 5 | | 21 | | +|Update Lang.ini | | | 22 | | +|Add Features on Demand | | 11 | | | +|Add Optional Components | | 12 | | | +|Add Safe OS Dynamic Update | 6 | | | | +|Add Setup Dynamic Update | | | | 26 | +|Add Setup.exe and setuphost.exe from WinPE | | | | 27 | +|Add boot manager from WinPE | | | | 28 | +|Add latest cumulative update | | 13 | 23 | | +|Clean up the image | 7 | 14 | 24 | | +|Add .NET and .NET cumulative updates | | 15 | | | +|Export image | 8 | 16 | 25 | | > [!NOTE] -> Starting in February 2021, the latest cumulative update and servicing stack update will be combined and distributed in the Microsoft Update Catalog as a new combined cumulative update. For Steps 1, 9, and 18 that require the servicing stack update for updating the installation media, you should use the combined cumulative update. For more information on the combined cumulative update, see [Servicing stack updates](./servicing-stack-updates.md). +> Starting in February 2021, the latest cumulative update and servicing stack update is combined and distributed in the Microsoft Update Catalog as a new combined cumulative update. For Steps 1, 9, and 17 that require the servicing stack update for updating the installation media, you should use the combined cumulative update. For more information on the combined cumulative update, see [Servicing stack updates](./servicing-stack-updates.md). > [!NOTE] -> Microsoft will remove the Flash component from Windows through KB4577586, "Update for Removal of Adobe Flash Player". You can also remove Flash anytime by deploying the update in KB4577586 (available on the Catalog) between steps 20 and 21. As of July 2021, KB4577586, "Update for Removal of Adobe Flash Player" will be included in the latest cumulative update for Windows 10, versions 1607 and 1507. The update will also be included in the Monthly Rollup and the Security Only Update for Windows 8.1, Windows Server 2012, and Windows Embedded 8 Standard. For more information, see [Update on Adobe Flash Player End of Support](https://blogs.windows.com/msedgedev/2020/09/04/update-adobe-flash-end-support/). +> Microsoft removes the Flash component from Windows through [KB4577586: Update for Removal of Adobe Flash Player](https://support.microsoft.com/kb/4577586). You can also remove Flash anytime by deploying the update in KB4577586 (available on the Catalog) between steps 20 and 21. As of July 2021, KB4577586, "Update for Removal of Adobe Flash Player" will be included in the latest cumulative update for Windows 10, versions 1607 and 1507. The update will also be included in the Monthly Rollup and the Security Only Update for Windows 8.1, Windows Server 2012, and Windows Embedded 8 Standard. For more information, see [Update on Adobe Flash Player End of Support](https://blogs.windows.com/msedgedev/2020/09/04/update-adobe-flash-end-support/). ### Multiple Windows editions @@ -157,13 +157,13 @@ The main operating system file (install.wim) might contain multiple editions of You don't have to add more languages and features to the image to accomplish the updates, but it's an opportunity to customize the image with more languages, Optional Components, and Features on Demand beyond what's in your starting image. When you add more languages and features, it's important to make these changes in the correct order: first apply servicing stack updates, followed by language additions, then by feature additions, and finally the latest cumulative update. The provided sample script installs a second language (in this case Japanese (ja-JP)). Since this language is backed by an lp.cab, there's no need to add a Language Experience Pack. Japanese is added to both the main operating system and to the recovery environment to allow the user to see the recovery screens in Japanese. This includes adding localized versions of the packages currently installed in the recovery image. -Optional Components, along with the .NET feature, can be installed offline, however doing so creates pending operations that require the device to restart. As a result, the call to perform image cleanup would fail. There are two options to avoid the cleanup failure. One option is to skip the image cleanup step, though that results in a larger install.wim. Another option is to install the .NET and Optional Components in a step after cleanup but before export. This is the option in the sample script. By doing this, you'll have to start with the original install.wim (with no pending actions) when you maintain or update the image the next time (for example, the next month). +Optional Components, along with the .NET feature, can be installed offline. However, doing so creates pending operations that require the device to restart. As a result, the call to perform image cleanup would fail. There are two options to avoid the cleanup failure. One option is to skip the image cleanup step, though that results in a larger install.wim. Another option is to install the .NET and Optional Components in a step after cleanup but before export. This is the option in the sample script. By doing this, you'll have to start with the original install.wim (with no pending actions) when you maintain or update the image the next time (for example, the next month). ### Checkpoint cumulative updates -Starting with Windows 11, version 24H2, and Windows Server 2025, the latest cumulative update may have a prerequisite cumulative update that is required to be installed first. These are known as checkpoint cumulative updates. In these cases, the cumulative update file level differentials are based on a previous cumulative update instead of the Windows RTM release. The benefit is a smaller update package and faster installation. When you obtain the latest cumulative update from the [Microsoft Update Catalog](https://catalog.update.microsoft.com), checkpoint cumulative updates will be available from the download button. In addition, the knowledge base article for the cumulative update will provide additional information. +Starting with Windows 11, version 24H2, and Windows Server 2025, the latest cumulative update might have a prerequisite cumulative update that is required to be installed first. These updates are known as checkpoint cumulative updates. In these cases, the cumulative update file level differentials are based on a previous cumulative update instead of the Windows RTM release. The benefit is a smaller update package and faster installation. When you obtain the latest cumulative update from the [Microsoft Update Catalog](https://catalog.update.microsoft.com), checkpoint cumulative updates are available from the download button. In addition, the knowledge base article for the cumulative update provides additional information. -To install the checkpoint(s) when servicing the Windows OS (steps 9 & 12) and WinPE (steps 17 & 23), call `Add-WindowsPackage` with the target cumulative update. The folder from `-PackagePath` will be used to discover and install one or more checkpoints as needed. Only the target cumulative update and checkpoint cumulative updates should be in the `-PackagePath` folder. Cumulative update packages with a revision <= the target cumulative update will be processed. If you are not customizing the image with additional languages and/or optional features, then separate calls to `Add-WindowsPackage` (checkpoint cumulative updates first) can be used for steps 9 & 17 above. Separate calls cannot be used for steps 12 and 23. +To install the checkpoint(s) when servicing the Windows OS (steps 9 & 12) and WinPE (steps 17 & 23), call `Add-WindowsPackage` with the target cumulative update. The folder from `-PackagePath` is used to discover and install one or more checkpoints as needed. Only the target cumulative update and checkpoint cumulative updates should be in the `-PackagePath` folder. Cumulative update packages with a revision <= the target cumulative update are processed. If you aren't customizing the image with additional languages and/or optional features, then separate calls to `Add-WindowsPackage` (checkpoint cumulative updates first) can be used for steps 9 & 17 above. Separate calls can't be used for steps 12 and 23. ## Windows PowerShell scripts to apply Dynamic Updates to an existing image @@ -178,7 +178,8 @@ These examples are for illustration only, and therefore lack error handling. The ### Get started -The script starts by declaring global variables and creating folders to use for mounting images. Then, make a copy of the original media, from \oldMedia to \newMedia, keeping the original media in case there's a script error and it's necessary to start over from a known state. Also, it provides a comparison of old versus new media to evaluate changes. To ensure that the new media updates, make sure they aren't read-only. +The script starts by declaring global variables and creating folders to use for mounting images. Then, make a copy of the original media, from \oldMedia to \newMedia, keeping the original media in case there's a script error and it's necessary to start over from a known state. Also, it provides a comparison of old versus new media to evaluate changes. To ensure that the new media updates, make sure they aren't read-only. The script also showcases adding additional languages, Features on Demand, and Optional Components. These aren't required, but added to highlight when in the sequence they should be added. Starting with Windows 11, version 21H2, the language pack (LANGPACK) ISO is superseded by the Features on Demand ISO. Language packs and the \Windows Preinstallation Environment packages are part of the Features on Demand ISO. Further, the path for main OS language and optional features moved to \LanguagesAndOptionalFeatures instead of the root. If you're using this script for Windows 10, modify to mount and use the language pack (LANGPACK) ISO. + ```powershell #Requires -RunAsAdministrator @@ -187,40 +188,38 @@ function Get-TS { return "{0:HH:mm:ss}" -f [DateTime]::Now } Write-Output "$(Get-TS): Starting media refresh" -# Declare language for showcasing adding optional localized components -$LANG = "ja-jp" -$LANG_FONT_CAPABILITY = "jpan" - -# Declare media for FOD and LPs -# Note: Starting with Windows 11, version 21H2, the language pack (LANGPACK) ISO has been superseded by the FOD ISO. -# Language packs and the \Windows Preinstallation Environment packages are part of the LOF ISO. -# If you are using this script for Windows 10, modify to mount and use the LANGPACK ISO. -$FOD_ISO_PATH = "C:\mediaRefresh\packages\FOD-PACKAGES_OEM_PT1_amd64fre_MULTI.iso" - # Declare Dynamic Update packages. A dedicated folder is used for the latest cumulative update, and as needed # checkpoint cumulative updates. $LCU_PATH = "C:\mediaRefresh\packages\CU\LCU.msu" -$SSU_PATH = "C:\mediaRefresh\packages\Other\SSU_DU.msu" $SETUP_DU_PATH = "C:\mediaRefresh\packages\Other\Setup_DU.cab" $SAFE_OS_DU_PATH = "C:\mediaRefresh\packages\Other\SafeOS_DU.cab" $DOTNET_CU_PATH = "C:\mediaRefresh\packages\Other\DotNet_CU.msu" -# Declare folders for mounted images and temp files -$MEDIA_OLD_PATH = "C:\mediaRefresh\oldMedia" -$MEDIA_NEW_PATH = "C:\mediaRefresh\newMedia" -$WORKING_PATH = "C:\mediaRefresh\temp" -$MAIN_OS_MOUNT = "C:\mediaRefresh\temp\MainOSMount" -$WINRE_MOUNT = "C:\mediaRefresh\temp\WinREMount" -$WINPE_MOUNT = "C:\mediaRefresh\temp\WinPEMount" +# Declare media for FOD and LPs +$FOD_ISO_PATH = "C:\mediaRefresh\packages\CLIENT_LOF_PACKAGES_OEM.iso" + +# Array of Features On Demand for main OS +# This is optional to showcase where these are added +$FOD = @( +'XPS.Viewer~~~~0.0.1.0' +) + +# Array of Legacy Features for main OS +# This is optional to showcase where these are added +$OC = @( +'MediaPlayback' +'WindowsMediaPlayer' +) # Mount the Features on Demand ISO Write-Output "$(Get-TS): Mounting FOD ISO" $FOD_ISO_DRIVE_LETTER = (Mount-DiskImage -ImagePath $FOD_ISO_PATH -ErrorAction stop | Get-Volume).DriveLetter - -# Note: Starting with Windows 11, version 21H2, the correct path for main OS language and optional features -# moved to \LanguagesAndOptionalFeatures instead of the root. For Windows 10, use $FOD_PATH = $FOD_ISO_DRIVE_LETTER + ":\" $FOD_PATH = $FOD_ISO_DRIVE_LETTER + ":\LanguagesAndOptionalFeatures" +# Declare language for showcasing adding optional localized components +$LANG = "ja-jp" +$LANG_FONT_CAPABILITY = "jpan" + # Declare language related cabs $WINPE_OC_PATH = "$FOD_ISO_DRIVE_LETTER`:\Windows Preinstallation Environment\x64\WinPE_OCs" $WINPE_OC_LANG_PATH = "$WINPE_OC_PATH\$LANG" @@ -231,6 +230,14 @@ $WINPE_SPEECH_TTS_PATH = "$WINPE_OC_PATH\WinPE-Speech-TTS.cab" $WINPE_SPEECH_TTS_LANG_PATH = "$WINPE_OC_PATH\WinPE-Speech-TTS-$LANG.cab" $OS_LP_PATH = "$FOD_PATH\Microsoft-Windows-Client-Language-Pack_x64_$LANG.cab" +# Declare folders for mounted images and temp files +$MEDIA_OLD_PATH = "C:\mediaRefresh\oldMedia\Ge\client_professional_en-us" +$MEDIA_NEW_PATH = "C:\mediaRefresh\newMedia" +$WORKING_PATH = "C:\mediaRefresh\temp" +$MAIN_OS_MOUNT = "C:\mediaRefresh\temp\MainOSMount" +$WINRE_MOUNT = "C:\mediaRefresh\temp\WinREMount" +$WINPE_MOUNT = "C:\mediaRefresh\temp\WinPEMount" + # Create folders for mounting images and storing temporary files New-Item -ItemType directory -Path $WORKING_PATH -ErrorAction Stop | Out-Null New-Item -ItemType directory -Path $MAIN_OS_MOUNT -ErrorAction stop | Out-Null @@ -241,15 +248,16 @@ New-Item -ItemType directory -Path $WINPE_MOUNT -ErrorAction stop | Out-Null Write-Output "$(Get-TS): Copying original media to new media path" Copy-Item -Path $MEDIA_OLD_PATH"\*" -Destination $MEDIA_NEW_PATH -Force -Recurse -ErrorAction stop | Out-Null Get-ChildItem -Path $MEDIA_NEW_PATH -Recurse | Where-Object { -not $_.PSIsContainer -and $_.IsReadOnly } | ForEach-Object { $_.IsReadOnly = $false } + ``` ### Update WinRE and each main OS Windows edition -The script will update each edition of Windows within the main operating system file (install.wim). For each edition, the main OS image is mounted. +The script updates each edition of Windows within the main operating system file (install.wim). For each edition, the main OS image is mounted. -For the first image, Winre.wim is copied to the working folder, and mounted. It then applies servicing stack Dynamic Update, since its components are used for updating other components. Since the script is optionally adding Japanese, it adds the language pack to the image, and installs the Japanese versions of all optional packages already installed in Winre.wim. Then, it applies the Safe OS Dynamic Update package. It finishes by cleaning and exporting the image to reduce the image size. +For the first image, Winre.wim is copied to the working folder, and mounted. It then applies servicing stack via the latest cumulative update, since its components are used for updating other components. Depending on the Windows release that you're updating, there are two different approaches for updating the servicing stack. The first approach is to use the combined cumulative update. This is for Windows releases that are shipping a combined cumulative update that includes the servicing stack updates (that is, SSU + LCU are combined). Windows 11, version 21H2, and Windows 11, version 22H2 are examples. In these cases, the servicing stack update isn't published separately; the combined cumulative update should be used for this step. However, in rare cases, there might be a breaking change in the combined cumulative update format change, that requires a standalone servicing stack update to be published, and installed first before the combined cumulative update can be installed. Since the script is optionally adding Japanese, it adds the language pack to the image, and installs the Japanese versions of all optional packages already installed in Winre.wim. Then, it applies the Safe OS Dynamic Update package. It finishes by cleaning and exporting the image to reduce the image size. -Next, for the mounted OS image, the script starts by applying the servicing stack Dynamic Update. Then, it adds Japanese language support and then the Japanese language features. Unlike the Dynamic Update packages, it uses `Add-WindowsCapability` to add these features. For a full list of such features, and their associated capability name, see [Available Features on Demand](/windows-hardware/manufacture/desktop/features-on-demand-non-language-fod). Now is the time to enable other Optional Components or add other Features on Demand. If such a feature has an associated cumulative update (for example, .NET), this is the time to apply those. The script then proceeds with applying the latest cumulative update. Finally, the script cleans and exports the image. You can install Optional Components, along with the .NET feature, offline, but that requires the device to be restarted. This is why the script installs .NET and Optional Components after cleanup and before export. +Next, for the mounted OS image, the script starts by applying the servicing stack via the latest cumulative update. Then, it adds Japanese language support and then the Japanese language features. Unlike the Dynamic Update packages, it uses `Add-WindowsCapability` to add these features. For a full list of such features, and their associated capability name, see [Available Features on Demand](/windows-hardware/manufacture/desktop/features-on-demand-non-language-fod). Now is the time to enable other Optional Components or add other Features on Demand. If such a feature has an associated cumulative update (for example, .NET), this is the time to apply those. The script then attempts to clean the image, then a final step to apply the latest cumulative update. It's important to apply the latest cumulative update last, to ensure Features on Demand, Optional Components, and Languages are updated from their initial release state. The .NET feature is an exception that's added along with its cumulative update next. Finally, the script exports the image. This process is repeated for each edition of Windows within the main operating system file. To reduce size, the serviced Winre.wim file from the first image is saved, and used to update each subsequent Windows edition. This reduces the final size of install.wim. @@ -262,13 +270,15 @@ This process is repeated for each edition of Windows within the main operating s # Get the list of images contained within the main OS $WINOS_IMAGES = Get-WindowsImage -ImagePath $MEDIA_NEW_PATH"\sources\install.wim" -Foreach ($IMAGE in $WINOS_IMAGES) { +Foreach ($IMAGE in $WINOS_IMAGES) +{ # first mount the main OS image Write-Output "$(Get-TS): Mounting main OS, image index $($IMAGE.ImageIndex)" Mount-WindowsImage -ImagePath $MEDIA_NEW_PATH"\sources\install.wim" -Index $IMAGE.ImageIndex -Path $MAIN_OS_MOUNT -ErrorAction stop| Out-Null - if ($IMAGE.ImageIndex -eq "1") { + if ($IMAGE.ImageIndex -eq "1") + { # # update Windows Recovery Environment (WinRE) within this OS image @@ -278,29 +288,9 @@ Foreach ($IMAGE in $WINOS_IMAGES) { Mount-WindowsImage -ImagePath $WORKING_PATH"\winre.wim" -Index 1 -Path $WINRE_MOUNT -ErrorAction stop | Out-Null # Add servicing stack update (Step 1 from the table) - - # Depending on the Windows release that you are updating, there are 2 different approaches for updating the servicing stack - # The first approach is to use the combined cumulative update. This is for Windows releases that are shipping a combined - # cumulative update that includes the servicing stack updates (i.e. SSU + LCU are combined). Windows 11, version 21H2 and - # Windows 11, version 22H2 are examples. In these cases, the servicing stack update is not published seperately; the combined - # cumulative update should be used for this step. However, in hopefully rare cases, there may breaking change in the combined - # cumulative update format, that requires a standalone servicing stack update to be published, and installed first before the - # combined cumulative update can be installed. - - # This is the code to handle the rare case that the SSU is published and required for the combined cumulative update - # Write-Output "$(Get-TS): Adding package $SSU_PATH" - # Add-WindowsPackage -Path $WINRE_MOUNT -PackagePath $SSU_PATH | Out-Null - - # Now, attempt the combined cumulative update. - # There is a known issue where the servicing stack update is installed, but the cumulative update will fail. This error should - # be caught and ignored, as the last step will be to apply the Safe OS update and thus the image will be left with the correct - # packages installed. - - Write-Output "$(Get-TS): Adding package $LCU_PATH to WinRE" try { - Add-WindowsPackage -Path $WINRE_MOUNT -PackagePath $LCU_PATH | Out-Null } Catch @@ -308,38 +298,36 @@ Foreach ($IMAGE in $WINOS_IMAGES) { $theError = $_ Write-Output "$(Get-TS): $theError" - if ($theError.Exception -like "*0x8007007e*") { - Write-Output "$(Get-TS): This failure is a known issue with combined cumulative update, we can ignore." + if ($theError.Exception -like "*0x8007007e*") + { + Write-Warning "$(Get-TS): Failed with error 0x8007007e. This failure is a known issue with combined cumulative update, we can ignore." } - else { + else + { throw } } - # The second approach for Step 1 is for Windows releases that have not adopted the combined cumulative update - # but instead continue to have a seperate servicing stack update published. In this case, we'll install the SSU - # update. This second approach is commented out below. - - # Write-Output "$(Get-TS): Adding package $SSU_PATH" - # Add-WindowsPackage -Path $WINRE_MOUNT -PackagePath $SSU_PATH | Out-Null - # # Optional: Add the language to recovery environment # + # Install lp.cab cab Write-Output "$(Get-TS): Adding package $WINPE_OC_LP_PATH to WinRE" Add-WindowsPackage -Path $WINRE_MOUNT -PackagePath $WINPE_OC_LP_PATH -ErrorAction stop | Out-Null # Install language cabs for each optional package installed $WINRE_INSTALLED_OC = Get-WindowsPackage -Path $WINRE_MOUNT - Foreach ($PACKAGE in $WINRE_INSTALLED_OC) { - - if ( ($PACKAGE.PackageState -eq "Installed") -and ($PACKAGE.PackageName.startsWith("WinPE-")) -and ($PACKAGE.ReleaseType -eq "FeaturePack") ) { - + Foreach ($PACKAGE in $WINRE_INSTALLED_OC) + { + if ( ($PACKAGE.PackageState -eq "Installed") -and ($PACKAGE.PackageName.startsWith("WinPE-")) -and ($PACKAGE.ReleaseType -eq "FeaturePack") ) + { $INDEX = $PACKAGE.PackageName.IndexOf("-Package") - if ($INDEX -ge 0) { + if ($INDEX -ge 0) + { $OC_CAB = $PACKAGE.PackageName.Substring(0, $INDEX) + "_" + $LANG + ".cab" - if ($WINPE_OC_LANG_CABS.Contains($OC_CAB)) { + if ($WINPE_OC_LANG_CABS.Contains($OC_CAB)) + { $OC_CAB_PATH = Join-Path $WINPE_OC_LANG_PATH $OC_CAB Write-Output "$(Get-TS): Adding package $OC_CAB_PATH to WinRE" Add-WindowsPackage -Path $WINRE_MOUNT -PackagePath $OC_CAB_PATH -ErrorAction stop | Out-Null @@ -349,15 +337,17 @@ Foreach ($IMAGE in $WINOS_IMAGES) { } # Add font support for the new language - if ( (Test-Path -Path $WINPE_FONT_SUPPORT_PATH) ) { + if ( (Test-Path -Path $WINPE_FONT_SUPPORT_PATH) ) + { Write-Output "$(Get-TS): Adding package $WINPE_FONT_SUPPORT_PATH to WinRE" Add-WindowsPackage -Path $WINRE_MOUNT -PackagePath $WINPE_FONT_SUPPORT_PATH -ErrorAction stop | Out-Null } # Add TTS support for the new language - if (Test-Path -Path $WINPE_SPEECH_TTS_PATH) { - if ( (Test-Path -Path $WINPE_SPEECH_TTS_LANG_PATH) ) { - + if (Test-Path -Path $WINPE_SPEECH_TTS_PATH) + { + if ( (Test-Path -Path $WINPE_SPEECH_TTS_LANG_PATH) ) + { Write-Output "$(Get-TS): Adding package $WINPE_SPEECH_TTS_PATH to WinRE" Add-WindowsPackage -Path $WINRE_MOUNT -PackagePath $WINPE_SPEECH_TTS_PATH -ErrorAction stop | Out-Null @@ -373,6 +363,10 @@ Foreach ($IMAGE in $WINOS_IMAGES) { # Perform image cleanup Write-Output "$(Get-TS): Performing image cleanup on WinRE" DISM /image:$WINRE_MOUNT /cleanup-image /StartComponentCleanup /ResetBase /Defer | Out-Null + if ($LastExitCode -ne 0) + { + throw "Error: Failed to perform image cleanup on WinRE. Exit code: $LastExitCode" + } # Dismount Dismount-WindowsImage -Path $WINRE_MOUNT -Save -ErrorAction stop | Out-Null @@ -389,35 +383,15 @@ Foreach ($IMAGE in $WINOS_IMAGES) { # update Main OS # - # Add servicing stack update (Step 18 from the table) - - # Depending on the Windows release that you are updating, there are 2 different approaches for updating the servicing stack - # The first approach is to use the combined cumulative update. This is for Windows releases that are shipping a combined cumulative update that - # includes the servicing stack updates (i.e. SSU + LCU are combined). Windows 11, version 21H2 and Windows 11, version 22H2 are examples. In these - # cases, the servicing stack update is not published seperately; the combined cumulative update should be used for this step. However, in hopefully - # rare cases, there may breaking change in the combined cumulative update format, that requires a standalone servicing stack update to be published, - # and installed first before the combined cumulative update can be installed. - - # This is the code to handle the rare case that the SSU is published and required for the combined cumulative update - # Write-Output "$(Get-TS): Adding package $SSU_PATH" - # Add-WindowsPackage -Path $MAIN_OS_MOUNT -PackagePath $SSU_PATH | Out-Null - - # Now, attempt the combined cumulative update. Unlike WinRE and WinPE, we don't need to check for error 0x8007007e + # Add servicing stack update (Step 17 from the table). Unlike WinRE and WinPE, we don't need to check for error 0x8007007e Write-Output "$(Get-TS): Adding package $LCU_PATH to main OS, index $($IMAGE.ImageIndex)" Add-WindowsPackage -Path $MAIN_OS_MOUNT -PackagePath $LCU_PATH | Out-Null - # The second approach for Step 18 is for Windows releases that have not adopted the combined cumulative update - # but instead continue to have a seperate servicing stack update published. In this case, we'll install the SSU - # update. This second approach is commented out below. - # Write-Output "$(Get-TS): Adding package $SSU_PATH to main OS, index $($IMAGE.ImageIndex)" - # Add-WindowsPackage -Path $MAIN_OS_MOUNT -PackagePath $SSU_PATH | Out-Null - - # Optional: Add language to main OS + # Optional: Add language to main OS and corresponding language experience Features on Demand Write-Output "$(Get-TS): Adding package $OS_LP_PATH to main OS, index $($IMAGE.ImageIndex)" Add-WindowsPackage -Path $MAIN_OS_MOUNT -PackagePath $OS_LP_PATH -ErrorAction stop | Out-Null - # Optional: Add a Features on Demand to the image Write-Output "$(Get-TS): Adding language FOD: Language.Fonts.Jpan~~~und-JPAN~0.0.1.0 to main OS, index $($IMAGE.ImageIndex)" Add-WindowsCapability -Name "Language.Fonts.$LANG_FONT_CAPABILITY~~~und-$LANG_FONT_CAPABILITY~0.0.1.0" -Path $MAIN_OS_MOUNT -Source $FOD_PATH -ErrorAction stop | Out-Null @@ -436,22 +410,47 @@ Foreach ($IMAGE in $WINOS_IMAGES) { Write-Output "$(Get-TS): Adding language FOD: Language.Speech~~~$LANG~0.0.1.0 to main OS, index $($IMAGE.ImageIndex)" Add-WindowsCapability -Name "Language.Speech~~~$LANG~0.0.1.0" -Path $MAIN_OS_MOUNT -Source $FOD_PATH -ErrorAction stop | Out-Null - # Note: If I wanted to enable additional Features on Demand, I'd add these here. + # Optional: Add additional Features On Demand + For ( $index = 0; $index -lt $FOD.count; $index++)# + { + Write-Output "$(Get-TS): Adding $($FOD[$index]) to main OS, index $($IMAGE.ImageIndex)" + Add-WindowsCapability -Name $($FOD[$index]) -Path $MAIN_OS_MOUNT -Source $FOD_PATH -ErrorAction stop | Out-Null + } + + # Optional: Add Legacy Features + For ( $index = 0; $index -lt $OC.count; $index++) + { + Write-Output "$(Get-TS): Adding $($OC[$index]) to main OS, index $($IMAGE.ImageIndex)" + DISM /Image:$MAIN_OS_MOUNT /Enable-Feature /FeatureName:$($OC[$index]) /All | Out-Null + if ($LastExitCode -ne 0) + { + throw "Error: Failed to add $($OC[$index]) to main OS, index $($IMAGE.ImageIndex). Exit code: $LastExitCode" + } + } # Add latest cumulative update Write-Output "$(Get-TS): Adding package $LCU_PATH to main OS, index $($IMAGE.ImageIndex)" Add-WindowsPackage -Path $MAIN_OS_MOUNT -PackagePath $LCU_PATH -ErrorAction stop | Out-Null - # Perform image cleanup + # Perform image cleanup. Some Optional Components might require the image to be booted, and thus + # image cleanup may fail. We'll catch and handle as a warning. Write-Output "$(Get-TS): Performing image cleanup on main OS, index $($IMAGE.ImageIndex)" DISM /image:$MAIN_OS_MOUNT /cleanup-image /StartComponentCleanup | Out-Null + if ($LastExitCode -ne 0) + { + if ($LastExitCode -eq -2146498554) + { + # We hit 0x800F0806 CBS_E_PENDING. We will ignore this with a warning + # This is likely due to legacy components being added that require online operations. + Write-Warning "$(Get-TS): Failed to perform image cleanup on main OS, index $($IMAGE.ImageIndex). Exit code: $LastExitCode. The operation cannot be performed until pending servicing operations are completed. The image must be booted to complete the pending servicing operation." + } + else + { + throw "Error: Failed to perform image cleanup on main OS, index $($IMAGE.ImageIndex). Exit code: $LastExitCode" + } + } - # - # Note: If I wanted to enable additional Optional Components, I'd add these here. - # In addition, we'll add .NET 3.5 here as well. Both .NET and Optional Components might require - # the image to be booted, and thus if we tried to cleanup after installation, it would fail. - # - + # Finally, we'll add .NET 3.5 and the .NET cumulative update Write-Output "$(Get-TS): Adding NetFX3~~~~ to main OS, index $($IMAGE.ImageIndex)" Add-WindowsCapability -Name "NetFX3~~~~" -Path $MAIN_OS_MOUNT -Source $FOD_PATH -ErrorAction stop | Out-Null @@ -465,7 +464,6 @@ Foreach ($IMAGE in $WINOS_IMAGES) { # Export Write-Output "$(Get-TS): Exporting image to $WORKING_PATH\install2.wim" Export-WindowsImage -SourceImagePath $MEDIA_NEW_PATH"\sources\install.wim" -SourceIndex $IMAGE.ImageIndex -DestinationImagePath $WORKING_PATH"\install2.wim" -ErrorAction stop | Out-Null - } Move-Item -Path $WORKING_PATH"\install2.wim" -Destination $MEDIA_NEW_PATH"\sources\install.wim" -Force -ErrorAction stop | Out-Null @@ -474,7 +472,7 @@ Move-Item -Path $WORKING_PATH"\install2.wim" -Destination $MEDIA_NEW_PATH"\sourc ### Update WinPE -This script is similar to the one that updates WinRE, but instead it mounts Boot.wim, applies the packages with the latest cumulative update last, and saves. It repeats this for all images inside of Boot.wim, typically two images. It starts by applying the servicing stack Dynamic Update. Since the script is customizing this media with Japanese, it installs the language pack from the WinPE folder on the language pack ISO. Additionally, it adds font support and text to speech (TTS) support. Since the script is adding a new language, it rebuilds lang.ini, used to identify languages installed in the image. For the second image, we'll save setup.exe and setuphost.exe for later use, to ensure these versions matches the \sources\setup.exe and \sources\setuphost.exe version from the installation media. If these binaries aren't identical, Windows Setup will fail during installation. We'll also save the serviced boot manager files for later use in the script. Finally, the script cleans and exports Boot.wim, and copies it back to the new media. +This script is similar to the one that updates WinRE, but instead it mounts Boot.wim, applies the packages with the latest cumulative update last, and saves. It repeats this for all images inside of Boot.wim, typically two images. It starts by applying the servicing stack Dynamic Update. Since the script is customizing this media with Japanese, it installs the language pack from the WinPE folder on the language pack ISO. Additionally, it adds font support and text to speech (TTS) support. Since the script is adding a new language, it rebuilds lang.ini, used to identify languages installed in the image. For the second image, we save setup.exe and setuphost.exe for later use, to ensure these versions matches the \sources\setup.exe and \sources\setuphost.exe version from the installation media. If these binaries aren't identical, Windows Setup will fail during installation. We'll also save the serviced boot manager files for later use in the script. Finally, the script cleans and exports Boot.wim, and copies it back to the new media. ```powershell # @@ -484,31 +482,14 @@ This script is similar to the one that updates WinRE, but instead it mounts Boot # Get the list of images contained within WinPE $WINPE_IMAGES = Get-WindowsImage -ImagePath $MEDIA_NEW_PATH"\sources\boot.wim" -Foreach ($IMAGE in $WINPE_IMAGES) { +Foreach ($IMAGE in $WINPE_IMAGES) +{ # update WinPE Write-Output "$(Get-TS): Mounting WinPE, image index $($IMAGE.ImageIndex)" Mount-WindowsImage -ImagePath $MEDIA_NEW_PATH"\sources\boot.wim" -Index $IMAGE.ImageIndex -Path $WINPE_MOUNT -ErrorAction stop | Out-Null # Add servicing stack update (Step 9 from the table) - - # Depending on the Windows release that you are updating, there are 2 different approaches for updating the servicing stack - # The first approach is to use the combined cumulative update. This is for Windows releases that are shipping a combined - # cumulative update that includes the servicing stack updates (i.e. SSU + LCU are combined). Windows 11, version 21H2 and - # Windows 11, version 22H2 are examples. In these cases, the servicing stack update is not published separately; the combined - # cumulative update should be used for this step. However, in hopefully rare cases, there may breaking change in the combined - # cumulative update format, that requires a standalone servicing stack update to be published, and installed first before the - # combined cumulative update can be installed. - - # This is the code to handle the rare case that the SSU is published and required for the combined cumulative update - # Write-Output "$(Get-TS): Adding package $SSU_PATH" - # Add-WindowsPackage -Path $WINPE_MOUNT -PackagePath $SSU_PATH | Out-Null - - # Now, attempt the combined cumulative update. - # There is a known issue where the servicing stack update is installed, but the cumulative update will fail. - # This error should be caught and ignored, as the last step will be to apply the cumulative update - # (or in this case the combined cumulative update) and thus the image will be left with the correct packages installed. - try { Write-Output "$(Get-TS): Adding package $LCU_PATH to WinPE, image index $($IMAGE.ImageIndex)" @@ -518,38 +499,34 @@ Foreach ($IMAGE in $WINPE_IMAGES) { { $theError = $_ Write-Output "$(Get-TS): $theError" - - if ($theError.Exception -like "*0x8007007e*") { - Write-Output "$(Get-TS): This failure is a known issue with combined cumulative update, we can ignore." + if ($theError.Exception -like "*0x8007007e*") + { + Write-Warning "$(Get-TS): Failed with error 0x8007007e. This failure is a known issue with combined cumulative update, we can ignore." } - else { + else + { throw } } - # The second approach for Step 9 is for Windows releases that have not adopted the combined cumulative update - # but instead continue to have a separate servicing stack update published. In this case, we'll install the SSU - # update. This second approach is commented out below. - - # Write-Output "$(Get-TS): Adding package $SSU_PATH" - # Add-WindowsPackage -Path $WINPE_MOUNT -PackagePath $SSU_PATH | Out-Null - # Install lp.cab cab Write-Output "$(Get-TS): Adding package $WINPE_OC_LP_PATH to WinPE, image index $($IMAGE.ImageIndex)" Add-WindowsPackage -Path $WINPE_MOUNT -PackagePath $WINPE_OC_LP_PATH -ErrorAction stop | Out-Null # Install language cabs for each optional package installed $WINPE_INSTALLED_OC = Get-WindowsPackage -Path $WINPE_MOUNT - Foreach ($PACKAGE in $WINPE_INSTALLED_OC) { - - if ( ($PACKAGE.PackageState -eq "Installed") -and ($PACKAGE.PackageName.startsWith("WinPE-")) -and ($PACKAGE.ReleaseType -eq "FeaturePack") ) { - + Foreach ($PACKAGE in $WINPE_INSTALLED_OC) + { + if ( ($PACKAGE.PackageState -eq "Installed") -and ($PACKAGE.PackageName.startsWith("WinPE-")) -and ($PACKAGE.ReleaseType -eq "FeaturePack") ) + { $INDEX = $PACKAGE.PackageName.IndexOf("-Package") - if ($INDEX -ge 0) { - + if ($INDEX -ge 0) + { $OC_CAB = $PACKAGE.PackageName.Substring(0, $INDEX) + "_" + $LANG + ".cab" - if ($WINPE_OC_LANG_CABS.Contains($OC_CAB)) { + if ($WINPE_OC_LANG_CABS.Contains($OC_CAB)) + { $OC_CAB_PATH = Join-Path $WINPE_OC_LANG_PATH $OC_CAB + Write-Output "$(Get-TS): Adding package $OC_CAB_PATH to WinPE, image index $($IMAGE.ImageIndex)" Add-WindowsPackage -Path $WINPE_MOUNT -PackagePath $OC_CAB_PATH -ErrorAction stop | Out-Null } @@ -558,15 +535,17 @@ Foreach ($IMAGE in $WINPE_IMAGES) { } # Add font support for the new language - if ( (Test-Path -Path $WINPE_FONT_SUPPORT_PATH) ) { + if ( (Test-Path -Path $WINPE_FONT_SUPPORT_PATH) ) + { Write-Output "$(Get-TS): Adding package $WINPE_FONT_SUPPORT_PATH to WinPE, image index $($IMAGE.ImageIndex)" Add-WindowsPackage -Path $WINPE_MOUNT -PackagePath $WINPE_FONT_SUPPORT_PATH -ErrorAction stop | Out-Null } # Add TTS support for the new language - if (Test-Path -Path $WINPE_SPEECH_TTS_PATH) { - if ( (Test-Path -Path $WINPE_SPEECH_TTS_LANG_PATH) ) { - + if (Test-Path -Path $WINPE_SPEECH_TTS_PATH) + { + if ( (Test-Path -Path $WINPE_SPEECH_TTS_LANG_PATH) ) + { Write-Output "$(Get-TS): Adding package $WINPE_SPEECH_TTS_PATH to WinPE, image index $($IMAGE.ImageIndex)" Add-WindowsPackage -Path $WINPE_MOUNT -PackagePath $WINPE_SPEECH_TTS_PATH -ErrorAction stop | Out-Null @@ -576,9 +555,14 @@ Foreach ($IMAGE in $WINPE_IMAGES) { } # Generates a new Lang.ini file which is used to define the language packs inside the image - if ( (Test-Path -Path $WINPE_MOUNT"\sources\lang.ini") ) { + if ( (Test-Path -Path $WINPE_MOUNT"\sources\lang.ini") ) + { Write-Output "$(Get-TS): Updating lang.ini" DISM /image:$WINPE_MOUNT /Gen-LangINI /distribution:$WINPE_MOUNT | Out-Null + if ($LastExitCode -ne 0) + { + throw "Error: Failed to update lang.ini. Exit code: $LastExitCode" + } } # Add latest cumulative update @@ -588,28 +572,31 @@ Foreach ($IMAGE in $WINPE_IMAGES) { # Perform image cleanup Write-Output "$(Get-TS): Performing image cleanup on WinPE, image index $($IMAGE.ImageIndex)" DISM /image:$WINPE_MOUNT /cleanup-image /StartComponentCleanup /ResetBase /Defer | Out-Null + if ($LastExitCode -ne 0) + { + throw "Error: Failed to perform image cleanup on WinPE, image index $($IMAGE.ImageIndex). Exit code: $LastExitCode" + } - if ($IMAGE.ImageIndex -eq "2") { - + if ($IMAGE.ImageIndex -eq "2") + { # Save setup.exe for later use. This will address possible binary mismatch with the version in the main OS \sources folder Copy-Item -Path $WINPE_MOUNT"\sources\setup.exe" -Destination $WORKING_PATH"\setup.exe" -Force -ErrorAction stop | Out-Null # Save setuphost.exe for later use. This will address possible binary mismatch with the version in the main OS \sources folder # This is only required starting with Windows 11 version 24H2 $TEMP = Get-WindowsImage -ImagePath $MEDIA_NEW_PATH"\sources\boot.wim" -Index $IMAGE.ImageIndex - if ([System.Version]$TEMP.Version -ge [System.Version]"10.0.26100") { - + if ([System.Version]$TEMP.Version -ge [System.Version]"10.0.26100") + { Copy-Item -Path $WINPE_MOUNT"\sources\setuphost.exe" -Destination $WORKING_PATH"\setuphost.exe" -Force -ErrorAction stop | Out-Null } - else { - + else + { Write-Output "$(Get-TS): Skipping copy of setuphost.exe; image version $($TEMP.Version)" } # Save serviced boot manager files later copy to the root media. Copy-Item -Path $WINPE_MOUNT"\Windows\boot\efi\bootmgfw.efi" -Destination $WORKING_PATH"\bootmgfw.efi" -Force -ErrorAction stop | Out-Null Copy-Item -Path $WINPE_MOUNT"\Windows\boot\efi\bootmgr.efi" -Destination $WORKING_PATH"\bootmgr.efi" -Force -ErrorAction stop | Out-Null - } # Dismount @@ -618,15 +605,15 @@ Foreach ($IMAGE in $WINPE_IMAGES) { #Export WinPE Write-Output "$(Get-TS): Exporting image to $WORKING_PATH\boot2.wim" Export-WindowsImage -SourceImagePath $MEDIA_NEW_PATH"\sources\boot.wim" -SourceIndex $IMAGE.ImageIndex -DestinationImagePath $WORKING_PATH"\boot2.wim" -ErrorAction stop | Out-Null - } Move-Item -Path $WORKING_PATH"\boot2.wim" -Destination $MEDIA_NEW_PATH"\sources\boot.wim" -Force -ErrorAction stop | Out-Null + ``` ### Update remaining media files -This part of the script updates the Setup files. It simply copies the individual files in the Setup Dynamic Update package to the new media. This step brings in updated Setup files as needed, along with the latest compatibility database, and replacement component manifests. This script also does a final replacement of setup.exe, setuphost.exe and boot manager files using the previously saved versions from WinPE. +This part of the script updates the Setup files. It simply copies the individual files in the Setup Dynamic Update package to the new media. This step brings in updated Setup files as needed, along with the latest compatibility database, and replacement component manifests. This script also does a final replacement of setup.exe, setuphost.exe, and boot manager files using the previously saved versions from WinPE. ```powershell # @@ -636,14 +623,18 @@ This part of the script updates the Setup files. It simply copies the individual # Add Setup DU by copy the files from the package into the newMedia Write-Output "$(Get-TS): Adding package $SETUP_DU_PATH" cmd.exe /c $env:SystemRoot\System32\expand.exe $SETUP_DU_PATH -F:* $MEDIA_NEW_PATH"\sources" | Out-Null +if ($LastExitCode -ne 0) +{ + throw "Error: Failed to expand $SETUP_DU_PATH. Exit code: $LastExitCode" +} # Copy setup.exe from boot.wim, saved earlier. Write-Output "$(Get-TS): Copying $WORKING_PATH\setup.exe to $MEDIA_NEW_PATH\sources\setup.exe" Copy-Item -Path $WORKING_PATH"\setup.exe" -Destination $MEDIA_NEW_PATH"\sources\setup.exe" -Force -ErrorAction stop | Out-Null # Copy setuphost.exe from boot.wim, saved earlier. -if (Test-Path -Path $WORKING_PATH"\setuphost.exe") { - +if (Test-Path -Path $WORKING_PATH"\setuphost.exe") +{ Write-Output "$(Get-TS): Copying $WORKING_PATH\setuphost.exe to $MEDIA_NEW_PATH\sources\setuphost.exe" Copy-Item -Path $WORKING_PATH"\setuphost.exe" -Destination $MEDIA_NEW_PATH"\sources\setuphost.exe" -Force -ErrorAction stop | Out-Null } @@ -651,16 +642,15 @@ if (Test-Path -Path $WORKING_PATH"\setuphost.exe") { # Copy bootmgr files from boot.wim, saved earlier. $MEDIA_NEW_FILES = Get-ChildItem $MEDIA_NEW_PATH -Force -Recurse -Filter b*.efi -Foreach ($File in $MEDIA_NEW_FILES){ +Foreach ($File in $MEDIA_NEW_FILES) +{ if (($File.Name -ieq "bootmgfw.efi") -or ($File.Name -ieq "bootx64.efi") -or ($File.Name -ieq "bootia32.efi") -or ($File.Name -ieq "bootaa64.efi")) { - Write-Output "$(Get-TS): Copying $WORKING_PATH\bootmgfw.efi to $($File.FullName)" Copy-Item -Path $WORKING_PATH"\bootmgfw.efi" -Destination $File.FullName -Force -ErrorAction stop | Out-Null } elseif ($File.Name -ieq "bootmgr.efi") { - Write-Output "$(Get-TS): Copying $WORKING_PATH\bootmgr.efi to $($File.FullName)" Copy-Item -Path $WORKING_PATH"\bootmgr.efi" -Destination $File.FullName -Force -ErrorAction stop | Out-Null } @@ -685,4 +675,5 @@ Write-Output "$(Get-TS): Dismounting ISO images" Dismount-DiskImage -ImagePath $FOD_ISO_PATH -ErrorAction stop | Out-Null Write-Output "$(Get-TS): Media refresh completed!" + ``` diff --git a/windows/deployment/update/release-cycle.md b/windows/deployment/update/release-cycle.md index 0f7b0fe8c7..818669e001 100644 --- a/windows/deployment/update/release-cycle.md +++ b/windows/deployment/update/release-cycle.md @@ -1,6 +1,6 @@ --- title: Update release cycle for Windows clients -description: Learn about the release cycle for updates so Windows clients in your organization stay productive and protected. +description: Learn about the release cycle for updates so Windows clients in your organization stay productive and protected. ms.service: windows-client ms.subservice: itpro-updates ms.topic: conceptual @@ -11,7 +11,7 @@ ms.localizationpriority: medium appliesto: - ✅ Windows 11 - ✅ Windows 10 -ms.date: 06/04/2024 +ms.date: 01/31/2025 --- # Update release cycle for Windows clients @@ -54,6 +54,9 @@ Monthly security update releases are available through the following channels: Many update management tools, such as [Microsoft Configuration Manager](/mem/configmgr/) and [Microsoft Intune](/mem/intune/), rely on these channels for update deployment. + +[!INCLUDE [Checkpoint cumulative updates](./includes/checkpoint-cumulative-updates.md)] + ## Optional nonsecurity preview release **Optional nonsecurity preview releases** provide IT admins an opportunity for early validation of that content prior to the **monthly security update release**. Admins can test and validate production-quality releases ahead of the planned monthly security update release for the following month. These updates are optional, cumulative, nonsecurity preview releases. New features might initially be deployed in the prior month's **optional nonsecurity preview release**, then ship in the following **monthly security update release**. **Optional nonsecurity preview releases** are typically released on the fourth Tuesday of the month at 10:00 AM Pacific Time (PST/PDT). These releases are only offered to the most recent, supported versions of Windows. @@ -66,10 +69,14 @@ Many update management tools, such as [Microsoft Configuration Manager](/mem/con - LCU preview To access the optional nonsecurity preview release: -- Navigate to **Settings** > **Update & Security** > **Windows Update** and select **Check for updates**. +- Navigate to **Settings** > **Update & Security** > **Windows Update** and select **Check for updates**. - Use [Windows Insider Program for Business](https://insider.windows.com/for-business) - Use the [Microsoft Update Catalog](https://www.catalog.update.microsoft.com/Home.aspx). + +[!INCLUDE [Checkpoint cumulative updates](./includes/checkpoint-cumulative-updates.md)] + + ## OOB releases **Out-of-band (OOB) releases** might be provided to fix a recently identified issue or vulnerability. They're used in atypical cases when an issue is detected and can't wait for the next monthly release, because devices must be updated immediately to address security vulnerabilities or to resolve a quality issue impacting many devices. **Out-of-band (OOB) releases** are provided outside of the monthly schedule when there's an exceptional need. @@ -83,6 +90,9 @@ Some key considerations about OOB releases include: - Critical OOB releases are automatically available to WSUS and Windows Update client policies, just like the monthly security update releases. - Some OOB releases are classified as noncritical. - Noncritical releases only go to the Microsoft Update Catalog for users or organizations to voluntarily obtain the update. + + +[!INCLUDE [Checkpoint cumulative updates](./includes/checkpoint-cumulative-updates.md)] ## Continuous innovation for Windows 11 diff --git a/windows/deployment/update/servicing-stack-updates.md b/windows/deployment/update/servicing-stack-updates.md index 85af66e440..f8476b518e 100644 --- a/windows/deployment/update/servicing-stack-updates.md +++ b/windows/deployment/update/servicing-stack-updates.md @@ -15,48 +15,31 @@ appliesto: - ✅ Windows 11 - ✅ Windows 10 - ✅ Windows Server -ms.date: 12/08/2023 +ms.date: 1/22/2025 --- # Servicing stack updates ## What is a servicing stack update? -Servicing stack updates provide fixes to the servicing stack, the component that installs Windows updates. Additionally, it contains the component-based servicing stack (CBS), which is a key underlying component for several elements of Windows deployment, such as DISM, SFC, changing Windows features or roles, and repairing components. [CBS](https://techcommunity.microsoft.com/t5/ask-the-performance-team/understanding-component-based-servicing/ba-p/373012) is a small component that typically doesn't have updates released every month. +Servicing stack updates provide fixes to the servicing stack, the component that installs Windows updates. Additionally, it contains the component-based servicing stack (CBS), which is a key underlying component for several elements of Windows deployment, such as: -## Why should servicing stack updates be installed and kept up to date? - -Servicing stack updates improve the reliability of the update process to mitigate potential issues while installing the latest quality updates and feature updates. If you don't have the latest servicing stack update installed, there's a risk that your device can't be updated with the latest Microsoft security fixes. +- Deployment Image Servicing and Management (DISM) +- System File Checker (SFC) +- Changing Windows features or roles +- Component repair -## When are they released? - -Servicing stack update are released depending on new issues or vulnerabilities. In rare occasions, a servicing stack update might need to be released out of band to address an issue impacting systems installing the monthly security update. New servicing stack updates are classified as `Security` with a severity rating of `Critical`. +[CBS](https://techcommunity.microsoft.com/t5/ask-the-performance-team/understanding-component-based-servicing/ba-p/373012) is a small component that typically doesn't have updates released every month. ## What's the difference between a servicing stack update and a cumulative update? -Both Windows client and Windows Server use the cumulative update mechanism, in which many fixes to improve the quality and security of Windows are packaged into a single update. Each cumulative update includes the changes and fixes from all previous updates. +Both Windows client and Windows Server use the cumulative update mechanism, in which many fixes to improve the quality and security of Windows are packaged into a single update. Each cumulative update includes the changes and fixes from all previous updates. A servicing stack update improves the reliability of the update process to mitigate potential issues while installing the latest monthly security update release and feature updates. -Servicing stack updates improve the reliability of the update process to mitigate potential issues while installing the latest monthly security update release and feature updates. If you don't install the latest servicing stack update, there's a risk that your device can't be updated with the latest Microsoft security fixes. - -Microsoft publishes all cumulative updates and servicing stack updates for Windows 10, version 2004 and later together as one cumulative monthly update to the normal release category in Windows Server Update Services (WSUS). - -## Is there any special guidance? - -Typically, the improvements are reliability and performance improvements that don't require any specific special guidance. If there's any significant impact, it will be present in the release notes. - -Most users don't need to install an isolated servicing stack update. In the rare case that you need to install an isolated servicing stack update, Microsoft recommends you install the latest servicing stack updates for your operating system before installing the latest cumulative update. - -## Installation notes - -* Servicing stack updates contain the full servicing stack; as a result, typically administrators only need to install the latest servicing stack update for the operating system. -* Installing servicing stack update doesn't require restarting the device, so installation shouldn't be disruptive. -* Servicing stack update releases are specific to the operating system version (build number), much like quality updates. -* Servicing stack updates can be delivered with Windows Update, or you can perform a search to install the latest available at [Servicing stack update for Windows 10](https://portal.msrc.microsoft.com/security-guidance/advisory/ADV990001). -* Once a servicing stack update is installed, it can't be removed or uninstalled from the machine. - -## Simplifying on-premises deployment of servicing stack updates - -With the Windows Update experience, servicing stack updates and cumulative updates are deployed together to the device. The update stack automatically orchestrates the installation, so both are applied correctly. Starting in February 2021, the cumulative update includes the latest servicing stack updates, to provide a single cumulative update payload to both WSUS and the Microsoft Update Catalog. If you use an endpoint management tool backed by WSUS, such as Configuration Manager, you'll only have to select and deploy the monthly cumulative update. The latest servicing stack updates will automatically be applied correctly. Release notes and file information for cumulative updates, including those related to the servicing stack, will be in a single KB article. The combined monthly cumulative update is available on Windows 10, version 2004 and later starting with [KB4601382](https://support.microsoft.com/kb/4601382), released in February of 2021. +Starting in February 2021, the cumulative update includes the latest servicing stack updates, providing a single combined cumulative update payload for Windows Update, Windows Server Update Services (WSUS), and the Microsoft Update Catalog. This combined monthly cumulative update is available on Windows 10, version 2004 and later starting with [KB4601382](https://support.microsoft.com/kb/4601382). If you use an endpoint management tool backed by WSUS, such as Configuration Manager, you only have to select and deploy the monthly cumulative update. The latest servicing stack updates are automatically applied correctly. Release notes and file information for cumulative updates, including notes and information related to the servicing stack, are in a single KB article. +## When are they released? + +Changes in the servicing stack are developed and released as part of the monthly cumulative update depending on new issues or vulnerabilities. In rare occasions, a prerequisite servicing stack update might need to be released out of band to address an issue impacting systems installing the monthly cumulative update. Out of band servicing stack updates are classified as Security with a severity rating of Critical. + diff --git a/windows/deployment/upgrade/log-files.md b/windows/deployment/upgrade/log-files.md index 5da693649e..78f9f1690b 100644 --- a/windows/deployment/upgrade/log-files.md +++ b/windows/deployment/upgrade/log-files.md @@ -11,7 +11,7 @@ ms.collection: - highpri - tier2 ms.subservice: itpro-deploy -ms.date: 01/18/2024 +ms.date: 01/29/2025 appliesto: - ✅ Windows 11 - ✅ Windows 10 @@ -51,13 +51,13 @@ A `setupact.log` or `setuperr.log` entry includes the following elements: 1. **The date and time** - 2023-09-08 09:20:05 -1. **The log level** - Info, Warning, Error, Fatal Error +2. **The log level** - Info, Warning, Error, Fatal Error -1. **The logging component** - CONX, MOUPG, PANTHR, SP, IBSLIB, MIG, DISM, CSI, CBS +3. **The logging component** - CONX, MOUPG, PANTHR, SP, IBSLIB, MIG, DISM, CSI, CBS The logging components SP (setup platform), MIG (migration engine), and CONX (compatibility information) are useful for troubleshooting Windows Setup errors. -1. **The message** - Operation completed successfully. +4. **The message** - Operation completed successfully. See the following example: diff --git a/windows/deployment/upgrade/resolve-windows-upgrade-errors.md b/windows/deployment/upgrade/resolve-windows-upgrade-errors.md index da72341ab0..444ff9cf37 100644 --- a/windows/deployment/upgrade/resolve-windows-upgrade-errors.md +++ b/windows/deployment/upgrade/resolve-windows-upgrade-errors.md @@ -8,7 +8,7 @@ ms.localizationpriority: medium ms.topic: conceptual ms.service: windows-client ms.subservice: itpro-deploy -ms.date: 01/18/2024 +ms.date: 01/29/2025 appliesto: - ✅ Windows 11 - ✅ Windows 10 diff --git a/windows/deployment/upgrade/setupdiag.md b/windows/deployment/upgrade/setupdiag.md index 00ae1403ff..c66b48114b 100644 --- a/windows/deployment/upgrade/setupdiag.md +++ b/windows/deployment/upgrade/setupdiag.md @@ -12,7 +12,7 @@ ms.topic: troubleshooting ms.collection: - highpri - tier2 -ms.date: 01/18/2024 +ms.date: 01/29/2025 appliesto: - ✅ Windows 11 - ✅ Windows 10 @@ -479,7 +479,7 @@ Refer to "https://learn.microsoft.com/windows/desktop/Debug/system-error-codes" "FailureDetails":"Err = 0x00000057, LastOperation = Gather data, scope: EVERYTHING, LastPhase = Downlevel", "DeviceDriverInfo":null, "Remediation":[ - + ], "SetupPhaseInfo":null, "SetupOperationInfo":null diff --git a/windows/deployment/upgrade/submit-errors.md b/windows/deployment/upgrade/submit-errors.md index 48726194a2..5caad8feef 100644 --- a/windows/deployment/upgrade/submit-errors.md +++ b/windows/deployment/upgrade/submit-errors.md @@ -8,7 +8,7 @@ author: frankroj ms.localizationpriority: medium ms.topic: conceptual ms.subservice: itpro-deploy -ms.date: 01/18/2024 +ms.date: 01/29/2025 appliesto: - ✅ Windows 11 - ✅ Windows 10 diff --git a/windows/deployment/upgrade/windows-error-reporting.md b/windows/deployment/upgrade/windows-error-reporting.md index c7251d75b2..34c5e47773 100644 --- a/windows/deployment/upgrade/windows-error-reporting.md +++ b/windows/deployment/upgrade/windows-error-reporting.md @@ -8,7 +8,7 @@ author: frankroj ms.localizationpriority: medium ms.topic: conceptual ms.subservice: itpro-deploy -ms.date: 01/18/2024 +ms.date: 01/29/2025 appliesto: - ✅ Windows 11 - ✅ Windows 10 @@ -18,7 +18,7 @@ appliesto: > [!NOTE] > -> This article is a 300 level article (moderately advanced). +> This article is a 300 level article (moderately advanced). > > See [Resolve Windows upgrade errors](resolve-windows-upgrade-errors.md) for a full list of articles in this section. diff --git a/windows/deployment/upgrade/windows-upgrade-paths.md b/windows/deployment/upgrade/windows-upgrade-paths.md index 1033866907..4d1dcd205e 100644 --- a/windows/deployment/upgrade/windows-upgrade-paths.md +++ b/windows/deployment/upgrade/windows-upgrade-paths.md @@ -11,7 +11,7 @@ ms.collection: - highpri - tier2 ms.subservice: itpro-deploy -ms.date: 02/13/2024 +ms.date: 01/29/2025 appliesto: - ✅ Windows 10 - ✅ Windows 11 diff --git a/windows/deployment/usmt/getting-started-with-the-user-state-migration-tool.md b/windows/deployment/usmt/getting-started-with-the-user-state-migration-tool.md index 9e1d97ccac..3a2a091e06 100644 --- a/windows/deployment/usmt/getting-started-with-the-user-state-migration-tool.md +++ b/windows/deployment/usmt/getting-started-with-the-user-state-migration-tool.md @@ -8,7 +8,7 @@ ms.service: windows-client author: frankroj ms.topic: conceptual ms.subservice: itpro-deploy -ms.date: 08/30/2024 +ms.date: 01/29/2025 appliesto: - ✅ Windows 11 - ✅ Windows 10 diff --git a/windows/deployment/usmt/migrate-application-settings.md b/windows/deployment/usmt/migrate-application-settings.md index d189141607..563fffa13b 100644 --- a/windows/deployment/usmt/migrate-application-settings.md +++ b/windows/deployment/usmt/migrate-application-settings.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 08/30/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/migration-store-types-overview.md b/windows/deployment/usmt/migration-store-types-overview.md index f0fdf74531..e69fa2a0eb 100644 --- a/windows/deployment/usmt/migration-store-types-overview.md +++ b/windows/deployment/usmt/migration-store-types-overview.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/offline-migration-reference.md b/windows/deployment/usmt/offline-migration-reference.md index 8e72361a5d..631c7b6aa6 100644 --- a/windows/deployment/usmt/offline-migration-reference.md +++ b/windows/deployment/usmt/offline-migration-reference.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: @@ -50,7 +50,7 @@ For exceptions to what can be migrated offline, see [What Does USMT Migrate?](us ## What offline environments are supported? -All currently supported +All currently supported The following table defines the supported combination of online and offline operating systems in USMT. @@ -183,9 +183,9 @@ The following XML example illustrates some of the elements discussed earlier in ```xml - C:\Windows - D:\Windows - E:\ + C:\Windows + D:\Windows + E:\ 1 diff --git a/windows/deployment/usmt/understanding-migration-xml-files.md b/windows/deployment/usmt/understanding-migration-xml-files.md index 3adb68387b..2994c4a929 100644 --- a/windows/deployment/usmt/understanding-migration-xml-files.md +++ b/windows/deployment/usmt/understanding-migration-xml-files.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-best-practices.md b/windows/deployment/usmt/usmt-best-practices.md index 4ebf6ff55f..fe77583153 100644 --- a/windows/deployment/usmt/usmt-best-practices.md +++ b/windows/deployment/usmt/usmt-best-practices.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-choose-migration-store-type.md b/windows/deployment/usmt/usmt-choose-migration-store-type.md index 1847cce5d9..e8a0d69a2f 100644 --- a/windows/deployment/usmt/usmt-choose-migration-store-type.md +++ b/windows/deployment/usmt/usmt-choose-migration-store-type.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-command-line-syntax.md b/windows/deployment/usmt/usmt-command-line-syntax.md index 4844937b52..71da51bdda 100644 --- a/windows/deployment/usmt/usmt-command-line-syntax.md +++ b/windows/deployment/usmt/usmt-command-line-syntax.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-common-migration-scenarios.md b/windows/deployment/usmt/usmt-common-migration-scenarios.md index 1685667185..d618b669c3 100644 --- a/windows/deployment/usmt/usmt-common-migration-scenarios.md +++ b/windows/deployment/usmt/usmt-common-migration-scenarios.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-configxml-file.md b/windows/deployment/usmt/usmt-configxml-file.md index c0e4682965..f77777e41f 100644 --- a/windows/deployment/usmt/usmt-configxml-file.md +++ b/windows/deployment/usmt/usmt-configxml-file.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: @@ -496,7 +496,7 @@ The following sample `Config.xml` file contains detailed examples about items th - + --> diff --git a/windows/deployment/usmt/usmt-conflicts-and-precedence.md b/windows/deployment/usmt/usmt-conflicts-and-precedence.md index f9874a4d2f..c2a0454e4b 100644 --- a/windows/deployment/usmt/usmt-conflicts-and-precedence.md +++ b/windows/deployment/usmt/usmt-conflicts-and-precedence.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: @@ -79,7 +79,7 @@ Specifying `migrate="no"` in the `Config.xml` file is the same as deleting the c %CSIDL_PERSONAL%\* [*.doc] - + ``` ### How does USMT process each component in an .xml file with multiple components? @@ -116,7 +116,7 @@ In the following example, mp3 files aren't excluded from the migration. The mp3 C:\* [*.mp3] - + ``` ### \ and \ rules precedence examples @@ -185,11 +185,11 @@ The destination computer contains the following files: A custom **.xml** file contains the following code: ```xml - - - c:\data\* [*] - - + + + c:\data\* [*] + + ``` For this example, the following information describes the resulting behavior if the code is added to the custom **.xml** file. diff --git a/windows/deployment/usmt/usmt-custom-xml-examples.md b/windows/deployment/usmt/usmt-custom-xml-examples.md index 130f3031c8..c398822c63 100644 --- a/windows/deployment/usmt/usmt-custom-xml-examples.md +++ b/windows/deployment/usmt/usmt-custom-xml-examples.md @@ -8,7 +8,7 @@ ms.service: windows-client author: frankroj ms.topic: conceptual ms.subservice: itpro-deploy -ms.date: 01/09/2024 +ms.date: 01/29/2025 appliesto: - ✅ Windows 11 - ✅ Windows 10 @@ -120,7 +120,7 @@ The following sample is a custom **.xml** file named `CustomFile.xml` that migra My Video - + MigXmlHelper.DoesObjectExist("File","%CSIDL_MYVIDEO%") @@ -251,8 +251,8 @@ The behavior for this custom **.xml** file is described within the ` - - + + @@ -264,7 +264,7 @@ The behavior for this custom **.xml** file is described within the ` - + C:\*\Presentations\* [*] C:\Presentations\* [*] diff --git a/windows/deployment/usmt/usmt-customize-xml-files.md b/windows/deployment/usmt/usmt-customize-xml-files.md index 8eefa733d4..00a902de28 100644 --- a/windows/deployment/usmt/usmt-customize-xml-files.md +++ b/windows/deployment/usmt/usmt-customize-xml-files.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-determine-what-to-migrate.md b/windows/deployment/usmt/usmt-determine-what-to-migrate.md index bad57314e9..098c1a8a45 100644 --- a/windows/deployment/usmt/usmt-determine-what-to-migrate.md +++ b/windows/deployment/usmt/usmt-determine-what-to-migrate.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-estimate-migration-store-size.md b/windows/deployment/usmt/usmt-estimate-migration-store-size.md index 014e48a76e..ae5b4e142e 100644 --- a/windows/deployment/usmt/usmt-estimate-migration-store-size.md +++ b/windows/deployment/usmt/usmt-estimate-migration-store-size.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-exclude-files-and-settings.md b/windows/deployment/usmt/usmt-exclude-files-and-settings.md index 354badb01a..72388d511e 100644 --- a/windows/deployment/usmt/usmt-exclude-files-and-settings.md +++ b/windows/deployment/usmt/usmt-exclude-files-and-settings.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-extract-files-from-a-compressed-migration-store.md b/windows/deployment/usmt/usmt-extract-files-from-a-compressed-migration-store.md index 59234776e5..9fefd6f0b4 100644 --- a/windows/deployment/usmt/usmt-extract-files-from-a-compressed-migration-store.md +++ b/windows/deployment/usmt/usmt-extract-files-from-a-compressed-migration-store.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-faq.yml b/windows/deployment/usmt/usmt-faq.yml index 666888f9d3..fb9a10a99e 100644 --- a/windows/deployment/usmt/usmt-faq.yml +++ b/windows/deployment/usmt/usmt-faq.yml @@ -11,12 +11,12 @@ metadata: ms.mktglfcycl: deploy ms.sitesec: library audience: itpro - ms.date: 01/09/2024 + ms.date: 01/29/2025 ms.topic: faq title: Frequently Asked Questions summary: | **Applies to:** - + - Windows 11 - Windows 10 @@ -30,13 +30,13 @@ sections: How much space is needed on the destination computer? answer: | The destination computer needs enough available space for the following items: - + - Operating system - + - Applications - + - Uncompressed store - + - question: | Can the files and settings be stored directly on the destination computer or is a server needed? answer: | @@ -47,13 +47,13 @@ sections: - Directly on the destination computer. To store it directly on the destination computer: - + 1. Create and share the directory `C:\store` on the destination computer. - + 1. Run the **ScanState** tool on the source computer and save the files and settings to `\\\store` - + 1. Run the **LoadState** tool on the destination computer and specify `C:\store` as the store location. - + - question: | Can data be migrated between operating systems with different languages? answer: | @@ -80,7 +80,7 @@ sections: How can a folder or a certain type of file be excluded from the migration? answer: | The **\** element can be used to globally exclude data from the migration. For example, this element can be used to exclude all MP3 files on the computer or to exclude all files from `C:\UserData`. This element excludes objects regardless of any other **\** rules that are in the **.xml** files. For an example, see **\** in the [Exclude files and settings](usmt-exclude-files-and-settings.md) article. For the syntax of this element, see [XML elements library](usmt-xml-elements-library.md). - + - question: | What happens to files that were located on a drive that don't exist on the destination computer? answer: | @@ -91,22 +91,22 @@ sections: - C:\\ is the system drive on the destination computer. the file is migrated to `C:\data\File.pst`. This behavior holds true even when **\** rules attempt to move data to a drive that doesn't exist on the destination computer. - + - name: USMT .xml Files questions: - question: | Where are there examples of USMT **.xml** files? answer: | The following articles include examples of USMT **.xml** files: - + - [Exclude files and settings](usmt-exclude-files-and-settings.md) - + - [Reroute files and settings](usmt-reroute-files-and-settings.md) - + - [Include files and settings](usmt-include-files-and-settings.md) - + - [Custom XML examples](usmt-custom-xml-examples.md) - + - question: | Can custom **.xml** files that were written for USMT 5.0 be used? answer: | @@ -121,9 +121,9 @@ sections: Why must the **.xml** files be included with both the `ScanState.exe` and `LoadState.exe` commands? answer: | The **.xml** files aren't copied to the store as in previous versions of USMT. Because the **ScanState** and **LoadState** tools need the **.xml** files to control the migration, the same set of **.xml** files must be specified for the `ScanState.exe` and `LoadState.exe` commands. If a particular set of mig\*.xml files were used in the **ScanState** tool, either called through the `/auto` option, or individually through the `/i` option, then the same option should be used to call the exact same mig\*.xml files in the **LoadState** tool. However, the `Config.xml` file doesn't need to be specified, unless files and settings that were migrated to the store need to be excluded. For example, the **Documents** folder might be migrated to the store, but not to the destination computer. To do this type of migration, modify the `Config.xml` file and specify the updated file with the `LoadState.exe` command. **LoadState** migrates only the desired files and settings. - + If an **.xml** file is excluded from the `LoadState.exe` command, then all of the data in the store that was migrated with the missing **.xml** files are migrated. However, the migration rules that were specified for the `ScanState.exe` command don't apply. For example, if a `MigApp.xml` file that has a rerouting rule such as `MigsysHelperFunction.RelativeMove("c:\data", "%CSIDL_PERSONAL%")` is excluded, USMT doesn't reroute the files. Instead, it migrates them to `C:\data`. - + - question: | Which files can be modified and specified on the command line? answer: | @@ -133,20 +133,20 @@ sections: What happens if the **.xml** files aren't specified on the command line? answer: | - **ScanState** - + If no files are specified with the `ScanState.exe` command, all user accounts and default operating system components are migrated. - + - **LoadState** - + If no files are specified with the `LoadState.exe` command, all data that is in the store is migrated. However, any target-specific migration rules that were specified in **.xml** files with the `ScanState.exe` command doesn't apply. For example, if a `MigApp.xml` file that has a rerouting rule such as `MigsysHelperFunction.RelativeMove("c:\data", "%CSIDL_PERSONAL%")` is excluded, USMT doesn't reroute the files. Instead, it migrates them to `C:\data`. - + - name: Conflicts and Precedence questions: - question: | What happens when there are conflicting XML rules or conflicting objects on the destination computer? answer: | For more information, see [Conflicts and precedence](usmt-conflicts-and-precedence.md). - + additionalContent: | diff --git a/windows/deployment/usmt/usmt-general-conventions.md b/windows/deployment/usmt/usmt-general-conventions.md index 38b66a02b6..950371b73e 100644 --- a/windows/deployment/usmt/usmt-general-conventions.md +++ b/windows/deployment/usmt/usmt-general-conventions.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: @@ -73,21 +73,21 @@ The XML helper functions in the [XML elements library](usmt-xml-elements-library The encoded location is composed of the node part, optionally followed by the leaf enclosed in square brackets. This format makes a clear distinction between nodes and leaves. For example, specify the file - + `C:\Windows\Notepad.exe` - + as - + **c:\\Windows\[Notepad.exe\]** - + Similarly, specify the directory - + `C:\Windows\System32` - + as - + **c:\\Windows\\System32** - + Note the absence of the **\[\]** characters in second example. The registry is represented in a similar way. The default value of a registry key is represented as an empty **\[\]** construct. For example, the default value for the `HKLM\SOFTWARE\MyKey` registry key is **HKLM\\SOFTWARE\\MyKey\[\]**. diff --git a/windows/deployment/usmt/usmt-hard-link-migration-store.md b/windows/deployment/usmt/usmt-hard-link-migration-store.md index d2cae89bc7..7c21f7e783 100644 --- a/windows/deployment/usmt/usmt-hard-link-migration-store.md +++ b/windows/deployment/usmt/usmt-hard-link-migration-store.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-how-it-works.md b/windows/deployment/usmt/usmt-how-it-works.md index 591b1d3804..0da69dfec4 100644 --- a/windows/deployment/usmt/usmt-how-it-works.md +++ b/windows/deployment/usmt/usmt-how-it-works.md @@ -8,7 +8,7 @@ ms.service: windows-client author: frankroj ms.topic: conceptual ms.subservice: itpro-deploy -ms.date: 01/09/2024 +ms.date: 01/29/2025 appliesto: - ✅ Windows 11 - ✅ Windows 10 @@ -33,7 +33,7 @@ When the **ScanState** tool runs on the source computer, it goes through the fol There are three types of components: - Components that migrate the operating system settings. - + - Components that migrate application settings. - Components that migrate users' files. diff --git a/windows/deployment/usmt/usmt-how-to.md b/windows/deployment/usmt/usmt-how-to.md index c3589124d1..72231c5f35 100644 --- a/windows/deployment/usmt/usmt-how-to.md +++ b/windows/deployment/usmt/usmt-how-to.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-identify-application-settings.md b/windows/deployment/usmt/usmt-identify-application-settings.md index feca874008..41d2a4f881 100644 --- a/windows/deployment/usmt/usmt-identify-application-settings.md +++ b/windows/deployment/usmt/usmt-identify-application-settings.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-identify-file-types-files-and-folders.md b/windows/deployment/usmt/usmt-identify-file-types-files-and-folders.md index e5b15c352d..e46ff9f218 100644 --- a/windows/deployment/usmt/usmt-identify-file-types-files-and-folders.md +++ b/windows/deployment/usmt/usmt-identify-file-types-files-and-folders.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-identify-operating-system-settings.md b/windows/deployment/usmt/usmt-identify-operating-system-settings.md index cedbe8d1f9..941df2cced 100644 --- a/windows/deployment/usmt/usmt-identify-operating-system-settings.md +++ b/windows/deployment/usmt/usmt-identify-operating-system-settings.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-identify-users.md b/windows/deployment/usmt/usmt-identify-users.md index 736881d3b3..314590b2b7 100644 --- a/windows/deployment/usmt/usmt-identify-users.md +++ b/windows/deployment/usmt/usmt-identify-users.md @@ -9,7 +9,7 @@ author: frankroj ms.topic: conceptual ms.localizationpriority: medium ms.subservice: itpro-deploy -ms.date: 01/09/2024 +ms.date: 01/29/2025 appliesto: - ✅ Windows 11 - ✅ Windows 10 diff --git a/windows/deployment/usmt/usmt-include-files-and-settings.md b/windows/deployment/usmt/usmt-include-files-and-settings.md index f4d79a27f2..6ff87626e6 100644 --- a/windows/deployment/usmt/usmt-include-files-and-settings.md +++ b/windows/deployment/usmt/usmt-include-files-and-settings.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: @@ -25,12 +25,12 @@ The following **.xml** file migrates a single registry key. ```xml - Component to migrate only registry value string + Component to migrate only registry value string - HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache [Persistent] + HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache [Persistent] @@ -95,8 +95,8 @@ The following **.xml** file migrates all files and subfolders of the `Engineerin - - + + @@ -114,7 +114,7 @@ The following **.xml** file migrates all files and subfolders of the `Engineerin - + C:\*\EngineeringDrafts\* [*] C:\EngineeringDrafts\* [*] @@ -149,7 +149,7 @@ The following **.xml** file migrates `.mp3` files located in the specified drive - + ``` ## Migrate a specific file diff --git a/windows/deployment/usmt/usmt-loadstate-syntax.md b/windows/deployment/usmt/usmt-loadstate-syntax.md index a4bf1f2eeb..30667f7873 100644 --- a/windows/deployment/usmt/usmt-loadstate-syntax.md +++ b/windows/deployment/usmt/usmt-loadstate-syntax.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 04/30/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-log-files.md b/windows/deployment/usmt/usmt-log-files.md index 70f159b544..27e897b01d 100644 --- a/windows/deployment/usmt/usmt-log-files.md +++ b/windows/deployment/usmt/usmt-log-files.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-migrate-efs-files-and-certificates.md b/windows/deployment/usmt/usmt-migrate-efs-files-and-certificates.md index 39944f9a6a..8d146557a2 100644 --- a/windows/deployment/usmt/usmt-migrate-efs-files-and-certificates.md +++ b/windows/deployment/usmt/usmt-migrate-efs-files-and-certificates.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-migrate-user-accounts.md b/windows/deployment/usmt/usmt-migrate-user-accounts.md index 41f319446d..2e82b3db4e 100644 --- a/windows/deployment/usmt/usmt-migrate-user-accounts.md +++ b/windows/deployment/usmt/usmt-migrate-user-accounts.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-migration-store-encryption.md b/windows/deployment/usmt/usmt-migration-store-encryption.md index b5dc3eb5fe..2084dbdd22 100644 --- a/windows/deployment/usmt/usmt-migration-store-encryption.md +++ b/windows/deployment/usmt/usmt-migration-store-encryption.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-overview.md b/windows/deployment/usmt/usmt-overview.md index f0023bfc0b..0e8726cf9a 100644 --- a/windows/deployment/usmt/usmt-overview.md +++ b/windows/deployment/usmt/usmt-overview.md @@ -7,7 +7,7 @@ author: frankroj ms.reviewer: kevinmi,warrenw manager: aaroncz ms.author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: overview ms.collection: - highpri diff --git a/windows/deployment/usmt/usmt-plan-your-migration.md b/windows/deployment/usmt/usmt-plan-your-migration.md index 20bbc09ad5..6fbc90a488 100644 --- a/windows/deployment/usmt/usmt-plan-your-migration.md +++ b/windows/deployment/usmt/usmt-plan-your-migration.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-recognized-environment-variables.md b/windows/deployment/usmt/usmt-recognized-environment-variables.md index 0d2153bbaa..74170fceed 100644 --- a/windows/deployment/usmt/usmt-recognized-environment-variables.md +++ b/windows/deployment/usmt/usmt-recognized-environment-variables.md @@ -7,7 +7,7 @@ ms.reviewer: kevinmi,warrenw manager: aaroncz ms.author: frankroj author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.collection: - highpri diff --git a/windows/deployment/usmt/usmt-reference.md b/windows/deployment/usmt/usmt-reference.md index 9581170803..adeaf3c10e 100644 --- a/windows/deployment/usmt/usmt-reference.md +++ b/windows/deployment/usmt/usmt-reference.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-requirements.md b/windows/deployment/usmt/usmt-requirements.md index 26b5f86f7a..438b71d40b 100644 --- a/windows/deployment/usmt/usmt-requirements.md +++ b/windows/deployment/usmt/usmt-requirements.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 04/30/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-reroute-files-and-settings.md b/windows/deployment/usmt/usmt-reroute-files-and-settings.md index f002c6d337..e7a5305f00 100644 --- a/windows/deployment/usmt/usmt-reroute-files-and-settings.md +++ b/windows/deployment/usmt/usmt-reroute-files-and-settings.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: @@ -70,7 +70,7 @@ The following custom **.xml** file reroutes **.mp3** files located in the fixed - + ``` ## Reroute a specific file @@ -83,8 +83,8 @@ The following custom **.xml** file migrates the `Sample.doc` file from `C:\Engin Sample.doc into the Documents folder - - + + C:\EngineeringDrafts\ [Sample.doc] diff --git a/windows/deployment/usmt/usmt-resources.md b/windows/deployment/usmt/usmt-resources.md index 239d7be582..6e81c92b9a 100644 --- a/windows/deployment/usmt/usmt-resources.md +++ b/windows/deployment/usmt/usmt-resources.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: @@ -23,7 +23,7 @@ appliesto: - Microsoft Visual Studio - The User State Migration Tool (USMT) XML schema (the `MigXML.xsd` file) can be used to validate the migration **.xml** files using an XML authoring tool such as Microsoft Visual Studio. - + For more information about how to use the schema with an XML authoring environment, see the environment's documentation. - [Ask the Directory Services Team blog](https://techcommunity.microsoft.com/t5/ask-the-directory-services-team/bg-p/AskDS). diff --git a/windows/deployment/usmt/usmt-scanstate-syntax.md b/windows/deployment/usmt/usmt-scanstate-syntax.md index 24f73b72d1..a25a4bde8e 100644 --- a/windows/deployment/usmt/usmt-scanstate-syntax.md +++ b/windows/deployment/usmt/usmt-scanstate-syntax.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 04/30/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-technical-reference.md b/windows/deployment/usmt/usmt-technical-reference.md index 1254f4fef0..d269cd7597 100644 --- a/windows/deployment/usmt/usmt-technical-reference.md +++ b/windows/deployment/usmt/usmt-technical-reference.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-test-your-migration.md b/windows/deployment/usmt/usmt-test-your-migration.md index 57767aecf4..4b1d005a41 100644 --- a/windows/deployment/usmt/usmt-test-your-migration.md +++ b/windows/deployment/usmt/usmt-test-your-migration.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-topics.md b/windows/deployment/usmt/usmt-topics.md index e3be3d8fd0..56ee8a1868 100644 --- a/windows/deployment/usmt/usmt-topics.md +++ b/windows/deployment/usmt/usmt-topics.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-troubleshooting.md b/windows/deployment/usmt/usmt-troubleshooting.md index 3e85b84a37..3ca79322a4 100644 --- a/windows/deployment/usmt/usmt-troubleshooting.md +++ b/windows/deployment/usmt/usmt-troubleshooting.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-utilities.md b/windows/deployment/usmt/usmt-utilities.md index 20c70db094..bef1f41088 100644 --- a/windows/deployment/usmt/usmt-utilities.md +++ b/windows/deployment/usmt/usmt-utilities.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-what-does-usmt-migrate.md b/windows/deployment/usmt/usmt-what-does-usmt-migrate.md index e03e8db9c0..56cee12f98 100644 --- a/windows/deployment/usmt/usmt-what-does-usmt-migrate.md +++ b/windows/deployment/usmt/usmt-what-does-usmt-migrate.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/18/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/usmt-xml-elements-library.md b/windows/deployment/usmt/usmt-xml-elements-library.md index a4694c75a9..fc41899980 100644 --- a/windows/deployment/usmt/usmt-xml-elements-library.md +++ b/windows/deployment/usmt/usmt-xml-elements-library.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: @@ -95,7 +95,7 @@ The following example is from the `MigApp.xml` file: %HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang] DWORD 00000000 - + ``` ## \ @@ -127,7 +127,7 @@ The following example is from the `MigApp.xml` file: %HklmWowSoftware%\Microsoft\Office\16.0\Common\Migration\Office [Lang] DWORD 00000000 - + ``` ## \ @@ -1070,10 +1070,10 @@ Example: - DOC @@ -1126,18 +1126,18 @@ Syntax: For example, to migrate all \*.doc files from the source computer, specifying the following code under the **\** element: ```xml - - doc - + + doc + ``` is the same as specifying the following code below the **\** element: ```xml - - - - + + + + ``` @@ -1202,7 +1202,7 @@ The following example is from the `MigUser.xml` file: %CSIDL_MYVIDEO% - + MigXmlHelper.DoesObjectExist("File","%CSIDL_MYVIDEO%") @@ -1702,11 +1702,11 @@ The following example is from the `MigUser.xml` file: %CSIDL_MYMUSIC% - + MigXmlHelper.DoesObjectExist("File","%CSIDL_MYMUSIC%") - + @@ -1846,11 +1846,11 @@ The following example is from the `MigUser.xml` file. For more examples, see the %CSIDL_STARTMENU% - + MigXmlHelper.DoesObjectExist("File","%CSIDL_STARTMENU%") - + @@ -1901,11 +1901,11 @@ The following example is from the `MigUser.xml` file: %CSIDL_MYMUSIC% - + MigXmlHelper.DoesObjectExist("File","%CSIDL_MYMUSIC%") - + @@ -1969,7 +1969,7 @@ Examples: To migrate the Sample.doc file from any drive on the source computer, use **\** as follows. If multiple files exist with the same name, all such files get migrated. ```xml - + ``` For more examples of how to use this element, see [Exclude Files and Settings](usmt-exclude-files-and-settings.md), [Reroute Files and Settings](usmt-reroute-files-and-settings.md), and [Custom XML Examples](usmt-custom-xml-examples.md). @@ -2171,7 +2171,7 @@ For example: ```xml - %CSIDL_COMMON_APPDATA%\QuickTime + %CSIDL_COMMON_APPDATA%\QuickTime ``` @@ -2204,7 +2204,7 @@ The following **.xml** file excludes all `.mp3` files from migration. For additi - + diff --git a/windows/deployment/usmt/usmt-xml-reference.md b/windows/deployment/usmt/usmt-xml-reference.md index 3b1f32fc27..21d2195393 100644 --- a/windows/deployment/usmt/usmt-xml-reference.md +++ b/windows/deployment/usmt/usmt-xml-reference.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/verify-the-condition-of-a-compressed-migration-store.md b/windows/deployment/usmt/verify-the-condition-of-a-compressed-migration-store.md index 818a24659e..f611d55175 100644 --- a/windows/deployment/usmt/verify-the-condition-of-a-compressed-migration-store.md +++ b/windows/deployment/usmt/verify-the-condition-of-a-compressed-migration-store.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/usmt/xml-file-requirements.md b/windows/deployment/usmt/xml-file-requirements.md index 7d1969ad11..8b1d97b433 100644 --- a/windows/deployment/usmt/xml-file-requirements.md +++ b/windows/deployment/usmt/xml-file-requirements.md @@ -6,7 +6,7 @@ manager: aaroncz ms.author: frankroj ms.service: windows-client author: frankroj -ms.date: 01/09/2024 +ms.date: 01/29/2025 ms.topic: conceptual ms.subservice: itpro-deploy appliesto: diff --git a/windows/deployment/windows-autopatch/manage/windows-autopatch-hotpatch-updates.md b/windows/deployment/windows-autopatch/manage/windows-autopatch-hotpatch-updates.md index efb01d9aa2..d92f402704 100644 --- a/windows/deployment/windows-autopatch/manage/windows-autopatch-hotpatch-updates.md +++ b/windows/deployment/windows-autopatch/manage/windows-autopatch-hotpatch-updates.md @@ -20,7 +20,7 @@ ms.collection: [!INCLUDE [windows-autopatch-applies-to-all-licenses](../includes/windows-autopatch-applies-to-all-licenses.md)] > [!IMPORTANT] -> This feature is in public preview. It is being actively developed and might not be complete. They're made available on a "Preview" basis. You can test and use these features in production environments and scenarios and provide feedback. +> This feature is in public preview. It's being actively developed and might not be complete. They're made available on a "Preview" basis. You can test and use these features in production environments and scenarios and provide feedback. Hotpatch updates are [Monthly B release security updates](/windows/deployment/update/release-cycle#monthly-security-update-release) that can be installed without requiring you to restart the device. Hotpatch updates are designed to reduce downtime and disruptions. By minimizing the need to restart, these updates help ensure faster compliance, making it easier for organizations to maintain security while keeping workflows uninterrupted. @@ -40,14 +40,14 @@ VBS must be turned on for a device to be offered Hotpatch updates. For informati ### Arm 64 devices must disable compiled hybrid PE usage (CHPE) (Arm 64 CPU Only) -This requirement only applies to Arm 64 CPU devices when using Hotpatch updates. Hotpatch updates aren't compatible with servicing CHPE OS binaries located in the `%SystemRoot%\SyChpe32` folder. To ensure all the Hotpatch updates are applied, you must set the CHPE disable flag and restart the device to disable CHPE usage. You only need to set this flag one time. The registry setting remains applied through updates. To disable CHPE, set the following registry key: -Path: `**HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management**` -Key value: `**HotPatchRestrictions=1**` +This requirement only applies to Arm 64 CPU devices when using Hotpatch updates. Hotpatch updates aren't compatible with servicing CHPE OS binaries located in the `%SystemRoot%\SyChpe32` folder. To ensure all the Hotpatch updates are applied, you must set the CHPE disable flag and restart the device to disable CHPE usage. You only need to set this flag one time. The registry setting remains applied through updates. To disable CHPE, create and/or set the following DWORD registry key: +Path: `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management` +DWORD key value: HotPatchRestrictions=1 -> [!IMPORTANT:] -> This setting is required because it forces the operating system to use the emulation x86-only binaries insetad of CHPE binaries on Arm 64 devices. CHPE binaries include native Arm 64 code to improve performance, excluding the CHPE binaries might affect performance or compatibility. Be sure to test application compatibility and performance before rolling out Hotpatch updates widely on Arm 64 CPU based devices. +> [!IMPORTANT] +> This setting is required because it forces the operating system to use the emulation x86-only binaries instead of CHPE binaries on Arm 64 devices. CHPE binaries include native Arm 64 code to improve performance, excluding the CHPE binaries might affect performance or compatibility. Be sure to test application compatibility and performance before rolling out Hotpatch updates widely on Arm 64 CPU based devices. -If you choose to no longer use Hotpatch updates, clear the CHPE disasble flag (`HotPatchRestrictions=0`) then restart the device to turn on CHPE usage. +If you choose to no longer use Hotpatch updates, clear the CHPE disable flag (`HotPatchRestrictions=0`) then restart the device to turn on CHPE usage. ## Eligible devices @@ -76,7 +76,7 @@ For more information about the release calendar for Hotpatch updates, see [Relea ## Enroll devices to receive Hotpatch updates > [!NOTE] -> If you're using Autopatch groups and want your devices to receive Hotpatch updates, you must create a Hotpatch policy and assign devices to it. Turning on Hotpatch updates doesn't change the deferral setting applied to devices within an Autopatch group. +> If you're using Autopatch groups and want your devices to receive Hotpatch updates, you must create a Hotpatch policy and assign devices to it. Turning on Hotpatch updates doesn't change the deferral setting applied to devices within an Autopatch group. **To enroll devices to receive Hotpatch updates:** @@ -94,4 +94,4 @@ For more information about the release calendar for Hotpatch updates, see [Relea These steps ensure that targeted devices, which are [eligible](#eligible-devices) to receive Hotpatch updates, are configured properly. [Ineligible devices](#ineligible-devices) are offered the latest cumulative updates (LCU). > [!NOTE] -> Turning on Hotpatch updates doesn't change the existing deadline-driven or scheduled install configurations on your managed devices. Deferral and active hour settings will still apply. +> Turning on Hotpatch updates doesn't change the existing deadline-driven or scheduled install configurations on your managed devices. Deferral and active hour settings still apply. diff --git a/windows/deployment/windows-autopatch/manage/windows-autopatch-manage-autopatch-groups.md b/windows/deployment/windows-autopatch/manage/windows-autopatch-manage-autopatch-groups.md index cce3435eec..ffcd082e07 100644 --- a/windows/deployment/windows-autopatch/manage/windows-autopatch-manage-autopatch-groups.md +++ b/windows/deployment/windows-autopatch/manage/windows-autopatch-manage-autopatch-groups.md @@ -78,6 +78,9 @@ Before you start managing Autopatch groups, ensure you meet the [Windows Autopat > [!IMPORTANT] > Windows Autopatch creates the device-based Microsoft Entra ID assigned groups based on the choices made in the deployment ring composition page. Additionally, the service assigns the update ring policies for each deployment ring created in the Autopatch group based on the choices made in the Windows Update settings page as part of the Autopatch group guided end-user experience. +> [!CAUTION] +> If a device that was previously added to an Autopatch group uses an Entra group (via Assigned groups or Dynamic distribution method) is removed from the Entra group, the device is removed and de-registered from the Autopatch service. The removed device no longer has any Autopatch service-created policies applied to it and the device won't appear in the Autopatch devices reports. + ## Rename an Autopatch group **To rename an Autopatch group:** diff --git a/windows/deployment/windows-autopatch/manage/windows-autopatch-manage-driver-and-firmware-updates.md b/windows/deployment/windows-autopatch/manage/windows-autopatch-manage-driver-and-firmware-updates.md index ddab13c440..e968491819 100644 --- a/windows/deployment/windows-autopatch/manage/windows-autopatch-manage-driver-and-firmware-updates.md +++ b/windows/deployment/windows-autopatch/manage/windows-autopatch-manage-driver-and-firmware-updates.md @@ -68,7 +68,7 @@ For deployment rings set to **Automatic**, you can choose the deferral period fo The deferral period allows you to delay the installation of driver and firmware updates on the devices in the specified deployment ring in case you want to test the update on a smaller group of devices first or avoid potential disruptions during a busy period. -The deferral period can be set from 0 to 14 days, and it can be different for each deployment ring. +The deferral period can be set from 0 to 30 days, and it can be different for each deployment ring. > [!NOTE] > The deferral period only applies to automatically approved driver and firmware updates. An admin must specify the date to start offering a driver with any manual approval. diff --git a/windows/deployment/windows-autopatch/prepare/windows-autopatch-configure-network.md b/windows/deployment/windows-autopatch/prepare/windows-autopatch-configure-network.md index c7543c92be..138807e7f0 100644 --- a/windows/deployment/windows-autopatch/prepare/windows-autopatch-configure-network.md +++ b/windows/deployment/windows-autopatch/prepare/windows-autopatch-configure-network.md @@ -63,7 +63,7 @@ The following URLs must be on the allowed list of your proxy and firewall so tha | Microsoft service | URLs required on allowlist | | ----- | ----- | -| Windows Autopatch |
  • mmdcustomer.microsoft.com
  • mmdls.microsoft.com
  • logcollection.mmd.microsoft.com
  • support.mmd.microsoft.com
  • devicelistenerprod.microsoft.com
  • login.windows.net
  • payloadprod*.blob.core.windows.net
  • device.autopatch.microsoft.com
| +| Windows Autopatch |
  • mmdcustomer.microsoft.com
  • mmdls.microsoft.com
  • logcollection.mmd.microsoft.com
  • support.mmd.microsoft.com
  • devicelistenerprod.microsoft.com
  • login.windows.net
  • device.autopatch.microsoft.com
| ## Delivery Optimization diff --git a/windows/security/application-security/application-control/app-control-for-business/deployment/appcontrol-deployment-guide.md b/windows/security/application-security/application-control/app-control-for-business/deployment/appcontrol-deployment-guide.md index 4ee7ef2757..42881a0f12 100644 --- a/windows/security/application-security/application-control/app-control-for-business/deployment/appcontrol-deployment-guide.md +++ b/windows/security/application-security/application-control/app-control-for-business/deployment/appcontrol-deployment-guide.md @@ -43,7 +43,7 @@ All App Control for Business policy changes should be deployed in audit mode bef ## Choose how to deploy App Control policies > [!IMPORTANT] -> Due to a known issue, you should always activate new **signed** App Control Base policies with a reboot on systems with [**memory integrity**](../../../../hardware-security/enable-virtualization-based-protection-of-code-integrity.md) enabled. We recommend [deploying via script](deploy-appcontrol-policies-with-script.md) in this case. +> Due to a known issue in Windows 11 updates earlier than 2024 (24H2), you should activate new **signed** App Control Base policies with a reboot on systems with [**memory integrity**](../../../../hardware-security/enable-virtualization-based-protection-of-code-integrity.md) enabled. We recommend [deploying via script](deploy-appcontrol-policies-with-script.md) in this case. > > This issue does not affect updates to signed Base policies that are already active on the system, deployment of unsigned policies, or deployment of supplemental policies (signed or unsigned). It also does not affect deployments to systems that are not running memory integrity. diff --git a/windows/security/application-security/application-control/app-control-for-business/design/applications-that-can-bypass-appcontrol.md b/windows/security/application-security/application-control/app-control-for-business/design/applications-that-can-bypass-appcontrol.md index 23d40c8440..f2ebb636f5 100644 --- a/windows/security/application-security/application-control/app-control-for-business/design/applications-that-can-bypass-appcontrol.md +++ b/windows/security/application-security/application-control/app-control-for-business/design/applications-that-can-bypass-appcontrol.md @@ -49,7 +49,7 @@ Unless your use scenarios explicitly require them, Microsoft recommends that you - texttransform.exe - visualuiaverifynative.exe - system.management.automation.dll -- webclnt.dll/davsvc.dll +- webclnt.dll/davsvc.dll3 - wfc.exe - windbg.exe - wmic.exe @@ -62,6 +62,8 @@ Unless your use scenarios explicitly require them, Microsoft recommends that you 2 If you're using your reference system in a development context and use msbuild.exe to build managed applications, we recommend that you allow msbuild.exe in your code integrity policies. Otherwise, we recommend that you block msbuild.exe. +3 If you block WebDAV DLLs, we recommend that you also disable the **WebClient** service using a group policy or MDM policies. + * Microsoft recognizes the efforts of people in the security community who help us protect customers through responsible vulnerability disclosure, and extends thanks to the following people:
diff --git a/windows/security/application-security/application-control/app-control-for-business/design/microsoft-recommended-driver-block-rules.md b/windows/security/application-security/application-control/app-control-for-business/design/microsoft-recommended-driver-block-rules.md index df6cb4eff5..67506d5785 100644 --- a/windows/security/application-security/application-control/app-control-for-business/design/microsoft-recommended-driver-block-rules.md +++ b/windows/security/application-security/application-control/app-control-for-business/design/microsoft-recommended-driver-block-rules.md @@ -3150,7 +3150,6 @@ The following recommended blocklist xml policy file can also be downloaded from - diff --git a/windows/security/application-security/application-control/app-control-for-business/operations/citool-commands.md b/windows/security/application-security/application-control/app-control-for-business/operations/citool-commands.md index c8bb39fb47..617ba5eb29 100644 --- a/windows/security/application-security/application-control/app-control-for-business/operations/citool-commands.md +++ b/windows/security/application-security/application-control/app-control-for-business/operations/citool-commands.md @@ -9,7 +9,7 @@ appliesto: # CiTool technical reference -CiTool makes App Control for Business policy management easier for IT admins. You can use this tool to manage App Control for Business policies and CI tokens. This article describes how to use CiTool to update and manage policies. It's currently included as part of the Windows image in Windows 11, version 22H2. +CiTool makes App Control for Business policy management easier for IT admins. You can use this tool to manage App Control for Business policies and CI tokens. This article describes how to use CiTool to update and manage policies. It's included in the Windows images starting with Windows 11, version 22H2, and Windows Server 2025. ## Policy commands diff --git a/windows/security/application-security/application-isolation/toc.yml b/windows/security/application-security/application-isolation/toc.yml index c8ed951135..c2de68aab3 100644 --- a/windows/security/application-security/application-isolation/toc.yml +++ b/windows/security/application-security/application-isolation/toc.yml @@ -1,20 +1,16 @@ items: - name: Microsoft Defender Application Guard (MDAG) href: microsoft-defender-application-guard/md-app-guard-overview.md -- name: MDAG for Edge standalone mode - href: microsoft-defender-application-guard/md-app-guard-overview.md -- name: MDAG for Edge enterprise mode and enterprise management 🔗 - href: /deployedge/microsoft-edge-security-windows-defender-application-guard -- name: MDAG for Microsoft Office - href: https://support.microsoft.com/office/application-guard-for-office-9e0fb9c2-ffad-43bf-8ba3-78f785fdba46 -- name: MDAG configure via MDM 🔗 - href: /windows/client-management/mdm/windowsdefenderapplicationguard-csp + items: + - name: MDAG for Microsoft Edge standalone mode + href: microsoft-defender-application-guard/md-app-guard-overview.md + - name: MDAG for Microsoft Edge enterprise mode and enterprise management 🔗 + href: /deployedge/microsoft-edge-security-windows-defender-application-guard + - name: MDAG for Microsoft Office + href: https://support.microsoft.com/office/application-guard-for-office-9e0fb9c2-ffad-43bf-8ba3-78f785fdba46 + - name: Configure MDAG via MDM 🔗 + href: /windows/client-management/mdm/windowsdefenderapplicationguard-csp - name: App containers 🔗 href: /virtualization/windowscontainers/about - name: Windows Sandbox - href: windows-sandbox/windows-sandbox-overview.md - items: - - name: Windows Sandbox architecture - href: windows-sandbox/windows-sandbox-architecture.md - - name: Windows Sandbox configuration - href: windows-sandbox/windows-sandbox-configure-using-wsb-file.md + href: windows-sandbox/index.md \ No newline at end of file diff --git a/windows/security/application-security/application-isolation/windows-sandbox/index.md b/windows/security/application-security/application-isolation/windows-sandbox/index.md new file mode 100644 index 0000000000..90957adc4b --- /dev/null +++ b/windows/security/application-security/application-isolation/windows-sandbox/index.md @@ -0,0 +1,43 @@ +--- +title: Windows Sandbox +description: Windows Sandbox overview +ms.topic: overview +ms.date: 09/09/2024 +--- + +# Windows Sandbox + +Windows Sandbox (WSB) offers a lightweight, isolated desktop environment for safely running applications. It's ideal for testing, debugging, exploring unknown files, and experimenting with tools. Applications installed within the sandbox remain isolated from the host machine using hypervisor-based virtualization. As a disposable virtual machine (VM), Windows Sandbox ensures reboot persistence, quick launch times, and a lower memory footprint compared to full VMs. Its one-click setup simplifies the user experience. + +The sandbox is temporary; closing it deletes all software, files, and state. Each launch provides a fresh instance. Host-installed software isn't available in the sandbox. Applications needed within the sandbox must be installed there explicitly. + +> [!NOTE] +> Starting with Windows 11, version 22H2, data persists through restarts initiated within the sandbox, useful for applications requiring a reboot. + +Windows Sandbox offers the following features: + +- **Part of Windows**: Everything required for this feature is included in the supported Windows editions like Pro, Enterprise, and Education. There's no need to maintain a separate VM installation. +- **Disposable**: Nothing persists on the device. Everything is discarded when the user closes the application. +- **Pristine**: Every time Windows Sandbox runs, it's as clean as a brand-new installation of Windows. +- **Secure**: Uses hardware-based virtualization for kernel isolation. It relies on the Microsoft hypervisor to run a separate kernel that isolates Windows Sandbox from the host. +- **Efficient**: Takes a few seconds to launch, supports virtual GPU, and has smart memory management that optimizes memory footprint. + +> [!IMPORTANT] +> Windows Sandbox enables network connection by default. It can be disabled using the [Windows Sandbox configuration file](windows-sandbox-configure-using-wsb-file.md#networking). Enabling networking can expose untrusted applications to the internal network. + +WSB can be used without any technical skills in various scenarios where users need a secure, clean environment for testing or running potentially harmful software. Here are some ways in which you can use WSB: + +- **Clean environment for software testing**: Test or debug your applications in WSB's clean environment to identify and resolve bugs or compatibility issues. +- **Secure web browsing**: Use WSB for secure web browsing, especially when accessing unfamiliar or potentially dangerous websites without putting your system at risk of malware infection. +- **Running Untrusted Applications**: Mitigate security risks by opening untrusted applications or files, such as email attachments in WSB. Improve your safety and security by opening a sandbox with networking disabled and mapping the folder with the application or file you want to open to the sandbox in read-only mode. Check [Sample configuration files](windows-sandbox-sample-configuration.md) for more details. +- **Testing or demoing new software for the first time**: Test drive or demo new software, preview versions, extensions, or add-ons without the hassle of installing and then uninstalling on your host machine. +- **Maintaining multiple dev environments**: Streamline your development process by utilizing WSB to maintain multiple sandboxes for different development environments. For example, maintain a sandbox for each python version and its dependencies! + +> [!NOTE] +> Windows Sandbox currently doesn't allow multiple instances to run simultaneously. + + +[!INCLUDE [windows-sandbox](../../../../../includes/licensing/windows-sandbox.md)] + +> [!NOTE] +> Windows Sandbox is currently not supported on Windows Home edition. diff --git a/windows/security/application-security/application-isolation/windows-sandbox/toc.yml b/windows/security/application-security/application-isolation/windows-sandbox/toc.yml new file mode 100644 index 0000000000..9654e55dcd --- /dev/null +++ b/windows/security/application-security/application-isolation/windows-sandbox/toc.yml @@ -0,0 +1,26 @@ +items: +- name: Windows Sandbox + href: index.md +- name: Overview + expanded: true + items: + - name: Windows Sandbox versions + href: windows-sandbox-versions.md + - name: Architecture + href: windows-sandbox-architecture.md +- name: Install Windows Sandbox + href: windows-sandbox-install.md +- name: Use & configure Windows Sandbox + href: windows-sandbox-configure-using-wsb-file.md +- name: Windows Sandbox command line interface + href: windows-sandbox-cli.md +- name: Tutorials + items: + - name: Sample configuration files + href: windows-sandbox-sample-configuration.md +- name: WindowsSandbox Policy CSP 🔗 + href: /windows/client-management/mdm/policy-csp-windowssandbox +- name: Frequently asked questions + href: windows-sandbox-faq.yml +- name: Troubleshooting + href: windows-sandbox-troubleshoot.md \ No newline at end of file diff --git a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-architecture.md b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-architecture.md index 0da205053a..fcb9b56ddc 100644 --- a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-architecture.md +++ b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-architecture.md @@ -2,7 +2,7 @@ title: Windows Sandbox architecture description: Windows Sandbox architecture ms.topic: conceptual -ms.date: 03/26/2024 +ms.date: 09/09/2024 --- # Windows Sandbox architecture @@ -27,18 +27,10 @@ Traditional VMs apportion statically sized allocations of host memory. When reso ## Memory sharing -Because Windows Sandbox runs the same operating system image as the host, it's enhanced to use the same physical memory pages as the host for operating system binaries via a technology referred to as "direct map." For example, when *ntdll.dll* is loaded into memory in the sandbox, it uses the same physical pages as those pages of the binary when loaded on the host. Memory sharing between the host and the sandbox results in a smaller memory footprint when compared to traditional VMs, without compromising valuable host secrets. +Because Windows Sandbox runs the same operating system image as the host, it's enhanced to use the same physical memory pages as the host for operating system binaries via a technology referred to as "direct map." For example, when `ntdll.dll` is loaded into memory in the sandbox, it uses the same physical pages as those pages of the binary when loaded on the host. Memory sharing between the host and the sandbox results in a smaller memory footprint when compared to traditional VMs, without compromising valuable host secrets. ![A chart compares the memory footprint in Windows Sandbox versus a traditional VM.](images/3-memory-sharing.png) -## Integrated kernel scheduler - -With ordinary virtual machines, the Microsoft hypervisor controls the scheduling of the virtual processors running in the VMs. Windows Sandbox uses a new technology called "integrated scheduling," which allows the host scheduler to decide when the sandbox gets CPU cycles. - -![A chart compares the scheduling in Windows Sandbox versus a traditional VM.](images/4-integrated-kernal.png) - -Windows Sandbox employs a unique policy that allows the virtual processors of the Sandbox to be scheduled like host threads. Under this scheme, high-priority tasks on the host can preempt less important work in the Sandbox. This preemption means that the most important work is prioritized, whether it's on the host or in the container. - ## WDDM GPU virtualization Hardware accelerated rendering is key to a smooth and responsive user experience, especially for graphics-intensive use cases. Microsoft works with its graphics ecosystem partners to integrate modern graphics virtualization capabilities directly into DirectX and Windows Display Driver Model (WDDM), the driver model used by Windows. diff --git a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-cli.md b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-cli.md new file mode 100644 index 0000000000..c181a80a91 --- /dev/null +++ b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-cli.md @@ -0,0 +1,101 @@ +--- +title: Windows Sandbox command line +description: Windows Sandbox command line interface +ms.topic: how-to +ms.date: 10/22/2024 +--- + +# Windows Sandbox command line interface + +Starting with Windows 11, version 24H2, the Windows Command Line Interface (CLI) offers powerful tools for creating, managing, and controlling sandboxes, executing commands, and sharing folders within sandbox sessions. This functionality is especially valuable for scripting, task automation, and improving development workflows. In this section, you'll explore how the Windows Sandbox CLI operates, with examples demonstrating how to use each command to enhance your development process. + +**Common parameters**: + +- `--raw`: Formats all outputs in JSON format. +- `-?, -h, --help`: Show help and usage information + +## Start + +The start command creates and launches a new sandbox. The command returns the sandbox ID, which is a unique identifier for the sandbox. The sandbox ID can be used to refer to the sandbox in other commands. + +- `--id `: ID of the Windows Sandbox environment. +- `--c, --config `: Formatted string with the settings that should be used to create the Windows Sandbox environment. + +**Examples**: + +- Create a Windows Sandbox environment with the default settings: + + ```cmd + wsb start + ``` + +- Create a Windows Sandbox environment with a custom configuration: + + ```cmd + wsb start --config "Disabled" + ``` + +## List + +The list command displays a table that shows the information the running Windows Sandbox sessions for the current user. The table includes the sandbox ID. The status can be either running or stopped. The uptime is the duration that the sandbox has been running. + +```cmd +wsb list +``` + +## Exec + +The exec command executes a command in the sandbox. The command takes two arguments: the sandbox ID and the command to execute. The command can be either a built-in command or an executable file. The exec command runs the command in the sandbox and returns the exit code. The exec command can also take optional arguments that are passed to the process started in the sandbox. + +> [!NOTE] +> Currently, there is no support for process I/O meaning that there is no way to retrieve the output of a command run in Sandbox. + +An active user session is required to execute a command in the context of the currently logged on user. Therefore, before running this command a remote desktop connection should be established. This can be done using the [connect](#connect) command. + +- `--id ` (REQUIRED): ID of the Windows Sandbox environment. +- `-c, --command ` (REQUIRED): The command to execute within Windows Sandbox. +- `-r, --run-as ` (REQUIRED): Specifies the user context to execute the command within. If the System option is selected, the command runs in the system context. If the ExistingLogin option is selected, the command runs in the currently active user session or fails if there's no active user session. +- `-d, --working-directory `: Directory to execute command in. + +```cmd +wsb exec –-id 12345678-1234-1234-1234-1234567890AB -c app.exe -r System +``` + +## Stop + +The stop command stops a running Windows Sandbox session. The command takes the sandbox ID as an argument. + +The stop command terminates the sandbox process and releases the resources allocated to the sandbox. The stop command also closes the window that shows the sandbox desktop. + +```cmd +wsb stop --id 12345678-1234-1234-1234-1234567890AB +``` + +## Share + +The share command shares a host folder with the sandbox. The command takes three arguments: the sandbox ID, the host path, and the sandbox path. The host path should be a folder. The sandbox path can be either an existing or a new folder. An Additional, `--allow-write` option can be used to allow or disallow the Windows Sandbox environment to write to the folder. + +- `--id ` (REQUIRED): ID of the Windows Sandbox environment. +- `-f, --host-path ` (REQUIRED): Path to folder that is shared from the host. +- `-s, --sandbox-path ` (REQUIRED): Path to the folder within the Windows Sandbox. +- `-w, --allow-write`: If specified, the Windows Sandbox environment is allowed to write to the shared folder. + +```cmd +wsb share --id 12345678-1234-1234-1234-1234567890AB -f C:\host\folder -s C:\sandbox\folder --allow-write +``` + +## Connect + +The connect command starts a remote session within the sandbox. The command takes the sandbox ID as an argument. The connect command opens a new window with a remote desktop session. The connect command allows the user to interact with the sandbox using the mouse and keyboard. + +```cmd +wsb connect --id 12345678-1234-1234-1234-1234567890AB +``` + +## IP + +The ip command displays the IP address of the sandbox. The command takes the sandbox ID as an argument. + +```cmd +wsb ip --id 12345678-1234-1234-1234-1234567890AB +``` diff --git a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-configure-using-wsb-file.md b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-configure-using-wsb-file.md index 0de253e2e9..f1a42226e3 100644 --- a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-configure-using-wsb-file.md +++ b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-configure-using-wsb-file.md @@ -1,11 +1,32 @@ --- -title: Windows Sandbox configuration -description: Windows Sandbox configuration +title: Use and configure Windows Sandbox +description: Use and configure Windows Sandbox ms.topic: how-to -ms.date: 03/26/2024 +ms.date: 09/09/2024 --- -# Windows Sandbox configuration +# Use and configure Windows Sandbox + +To launch a Windows Sandbox with default settings, locate and select Windows Sandbox on the Start menu or search for 'Windows Sandbox'. This launches a basic Sandbox with maximum capacity of 4GB memory with the following properties: + +- **vGPU (virtualized GPU)**: Enabled on non-Arm64 devices. +- **Networking**: Enabled. The sandbox uses the Hyper-V default switch. +- **Audio input**: Enabled. The sandbox shares the host's microphone input into the sandbox. +- **Video input**: Disabled. The sandbox doesn't share the host's video input into the sandbox. +- **Protected client**: Disabled. The sandbox doesn't use increased security settings on the Remote Desktop Protocol (RDP) session. +- **Printer redirection**: Disabled. The sandbox doesn't share printers with the host. +- **Clipboard redirection**: Enabled. The sandbox shares the host clipboard with the sandbox so that text and files can be pasted back and forth. + +> [!IMPORTANT] +> +> - Networking is enabled by default. This can expose untrusted applications to the internal network. To launch a Sandbox with networking disabled, use a custom .wsb file. +> - With Clipboard redirection automatically enabled, you can easily copy files from the host and paste them into the Windows Sandbox window. + +You have the freedom to open files, install applications from the web, and perform various other tasks that benefit from an isolated clean environment. + +When you're finished experimenting, close the sandbox. A dialog box prompts you to confirm the deletion of all sandbox content. Select **Ok** to proceed. Confirm that your host machine doesn't exhibit any of the modifications that you made in Windows Sandbox. + +## Configure a custom Windows Sandbox Windows Sandbox supports simple configuration files, which provide a minimal set of customization parameters for Sandbox. This feature can be used with Windows 10 build 18342 or Windows 11. Windows Sandbox configuration files are formatted as XML and are associated with Sandbox via the `.wsb` file extension. @@ -14,7 +35,7 @@ A configuration file enables the user to control the following aspects of Window - **vGPU (virtualized GPU)**: Enable or disable the virtualized GPU. If vGPU is disabled, the sandbox uses Windows Advanced Rasterization Platform (WARP). - **Networking**: Enable or disable network access within the sandbox. - **Mapped folders**: Share folders from the host with *read* or *write* permissions. Exposing host directories might allow malicious software to affect the system or steal data. -- **Logon command**: A command that's executed when Windows Sandbox starts. +- **Logon command**: A command to execute when Windows Sandbox starts. - **Audio input**: Shares the host's microphone input into the sandbox. - **Video input**: Shares the host's webcam input into the sandbox. - **Protected client**: Places increased security settings on the Remote Desktop Protocol (RDP) session to the sandbox. @@ -25,7 +46,7 @@ A configuration file enables the user to control the following aspects of Window > [!NOTE] > The size of the sandbox window currently isn't configurable. -## Creating a configuration file +## Create a configuration file To create a configuration file: @@ -37,10 +58,8 @@ To create a configuration file: ``` -3. Add appropriate configuration text between the two lines. For details, see [examples](#examples). -4. Save the file with the desired name, but make sure its filename extension is `.wsb`. In Notepad, you should enclose the filename and the extension inside double quotation marks, for example, `"My config file.wsb"`. - -## Using a configuration file +3. Add appropriate configuration text between the two lines. For details, see [examples](windows-sandbox-sample-configuration.md). +4. Save the file with the desired name, but make sure its filename extension is `.wsb`. In Notepad, you should enclose the filename and the extension inside double quotation marks, for example, `"MyConfigFile.wsb"`. To use a configuration file, double-click it to start Windows Sandbox according to its settings. You can also invoke it via the command line as shown here: @@ -48,19 +67,21 @@ To use a configuration file, double-click it to start Windows Sandbox according C:\Temp> MyConfigFile.wsb ``` -## Keywords, values, and limits +## Configuration options ### vGPU Enables or disables GPU sharing. -`value` +```xml +value +``` Supported values: -- *Enable*: Enables vGPU support in the sandbox. -- *Disable*: Disables vGPU support in the sandbox. If this value is set, the sandbox uses software rendering, which might be slower than virtualized GPU. -- *Default* This value is the default value for vGPU support. Currently, this default value denotes that vGPU is enabled. +- **Enable**: Enables vGPU support in the sandbox. +- **Disable**: Disables vGPU support in the sandbox. If this value is set, the sandbox uses software rendering, which might be slower than virtualized GPU. +- **Default**: This value is the default value for vGPU support. Currently, this default value denotes that vGPU is enabled. > [!NOTE] > Enabling virtualized GPU can potentially increase the attack surface of the sandbox. @@ -69,20 +90,24 @@ Supported values: Enables or disables networking in the sandbox. You can disable network access to decrease the attack surface exposed by the sandbox. -`value` +```xml +value +``` Supported values: -- *Enable*: Enables networking in the sandbox. -- *Disable*: Disables networking in the sandbox. -- *Default*: This value is the default value for networking support. This value enables networking by creating a virtual switch on the host and connects the sandbox to it via a virtual NIC. +- **Enable**: Enables networking in the sandbox. +- **Disable**: Disables networking in the sandbox. +- **Default**: This value is the default value for networking support. This value enables networking by creating a virtual switch on the host and connects the sandbox to it via a virtual NIC. > [!NOTE] > Enabling networking can expose untrusted applications to the internal network. ### Mapped folders -An array of folders, each representing a location on the host machine that is shared with the sandbox at the specified path. At this time, relative paths aren't supported. If no path is specified, the folder is mapped to the container user's desktop. +An array of folders, each representing a location on the host machine that is shared with the sandbox at the specified path. Currently, relative paths aren't supported. + +When using `` to map folders, the folders are mapped before the execution of the [Logon command](#logon-command). Beginning in Windows 11, version 23H2, you can use environment variables in the path. ```xml @@ -97,12 +122,12 @@ An array of folders, each representing a location on the host machine that is sh ``` -- *HostFolder*: Specifies the folder on the host machine to share into the sandbox. The folder must already exist on the host, or the container fails to start. -- *SandboxFolder*: Specifies the destination in the sandbox to map the folder to. If the folder doesn't exist, it is created. If no sandbox folder is specified, the folder is mapped to the container desktop. -- *ReadOnly*: If *true*, enforces read-only access to the shared folder from within the container. Supported values: *true*/*false*. Defaults to *false*. +- **HostFolder**: Specifies the folder on the host machine to share into the sandbox. The folder must already exist on the host, or the container fails to start. +- **SandboxFolder**: Specifies the destination in the sandbox to map the folder to. If the folder doesn't exist, it gets created. If no sandbox folder is specified, the folder is mapped to the container user's desktop. The default user of Sandbox is `WDAGUtilityAccount`. +- **ReadOnly**: If *true*, enforces read-only access to the shared folder from within the container. Supported values: *true*/*false*. Defaults to *false*. > [!NOTE] -> Files and folders mapped in from the host can be compromised by apps in the sandbox or potentially affect the host. +> Files and folders mapped from the host can be compromised by apps in the sandbox or potentially affect the host. Changes made during a Sandbox session to a mapped folder with write-permissions will persist after a Sandbox is disposed. ### Logon command @@ -114,22 +139,24 @@ Specifies a single command that will be invoked automatically after the sandbox ``` -*Command*: A path to an executable or script inside the container that will be executed after signing in. +**Command**: A path to an executable or script inside the container that will be executed after signing in. > [!NOTE] -> Although very simple commands will work (such as launching an executable or script), more complicated scenarios involving multiple steps should be placed into a script file. This script file may be mapped into the container via a shared folder, and then executed via the *LogonCommand* directive. +> Although very simple commands will work (such as launching an executable or script), more complicated scenarios involving multiple steps should be placed into a script file. This script file may be mapped into the container via a shared folder, and then executed via ``. ### Audio input Enables or disables audio input to the sandbox. -`value` +```xml +value +``` Supported values: -- *Enable*: Enables audio input in the sandbox. If this value is set, the sandbox can receive audio input from the user. Applications that use a microphone may require this capability. -- *Disable*: Disables audio input in the sandbox. If this value is set, the sandbox can't receive audio input from the user. Applications that use a microphone may not function properly with this setting. -- *Default*: This value is the default value for audio input support. Currently, this default value denotes that audio input is enabled. +- **Enable**: Enables audio input in the sandbox. If this value is set, the sandbox can receive audio input from the user. Applications that use a microphone might require this capability. +- **Disable**: Disables audio input in the sandbox. If this value is set, the sandbox can't receive audio input from the user. Applications that use a microphone might not function properly with this setting. +- **Default**: This value is the default value for audio input support. Currently, this default value denotes that audio input is enabled. > [!NOTE] > There may be security implications of exposing host audio input to the container. @@ -138,30 +165,32 @@ Supported values: Enables or disables video input to the sandbox. -`value` +```xml +value +``` Supported values: -- *Enable*: Enables video input in the sandbox. -- *Disable*: Disables video input in the sandbox. Applications that use video input may not function properly in the sandbox. -- *Default*: This value is the default value for video input support. Currently, this default value denotes that video input is disabled. Applications that use video input may not function properly in the sandbox. +- **Enable**: Enables video input in the sandbox. +- **Disable**: Disables video input in the sandbox. Applications that use video input might not function properly in the sandbox. +- **Default**: This value is the default value for video input support. Currently, this default value denotes that video input is disabled. Applications that use video input might not function properly in the sandbox. > [!NOTE] > There may be security implications of exposing host video input to the container. ### Protected client -When Protected Client mode is enabled, Sandbox adds a new layer of security boundary by running inside an [AppContainer Isolation](/windows/win32/secauthz/appcontainer-isolation) execution environment. +When Protected Client mode is enabled, Sandbox adds a new layer of security boundary by running inside an [AppContainer Isolation](/windows/win32/secauthz/appcontainer-isolation) execution environment. AppContainer Isolation provides Credential, Device, File, Network, Process, and Window isolation. -AppContainer Isolation provides Credential, Device, File, Network, Process, and Window isolation. - -`value` +```xml +value +``` Supported values: -- *Enable*: Runs Windows sandbox in Protected Client mode. If this value is set, the Sandbox runs in AppContainer Isolation. -- *Disable*: Runs the Sandbox in the standard mode without extra security mitigations. -- *Default*: This value is the default value for Protected Client mode. Currently, this default value denotes that the sandbox doesn't run in Protected Client mode. +- **Enable**: Runs Windows sandbox in Protected Client mode. If this value is set, the Sandbox runs in AppContainer Isolation. +- **Disable**: Runs the Sandbox in the standard mode without extra security mitigations. +- **Default**: This value is the default value for Protected Client mode. Currently, this default value denotes that the sandbox doesn't run in Protected Client mode. > [!NOTE] > This setting may restrict the user's ability to copy/paste files in and out of the sandbox. @@ -170,135 +199,36 @@ Supported values: Enables or disables printer sharing from the host into the sandbox. -`value` +```xml +value +``` Supported values: -- *Enable*: Enables sharing of host printers into the sandbox. -- *Disable*: Disables printer redirection in the sandbox. If this value is set, the sandbox can't view printers from the host. -- *Default*: This value is the default value for printer redirection support. Currently, this default value denotes that printer redirection is disabled. +- **Enable**: Enables sharing of host printers into the sandbox. +- **Disable**: Disables printer redirection in the sandbox. If this value is set, the sandbox can't view printers from the host. +- **Default**: This value is the default value for printer redirection support. Currently, this default value denotes that printer redirection is disabled. ### Clipboard redirection Enables or disables sharing of the host clipboard with the sandbox. -`value` +```xml +value +``` Supported values: -- *Enable*: Enables sharing of the host clipboard with the sandbox. -- *Disable*: Disables clipboard redirection in the sandbox. If this value is set, copy/paste in and out of the sandbox is restricted. -- *Default*: This value is the default value for clipboard redirection. Currently, copy/paste between the host and sandbox are permitted under *Default*. +- **Enable**: Enables sharing of the host clipboard with the sandbox. +- **Disable**: Disables clipboard redirection in the sandbox. If this value is set, copy/paste in and out of the sandbox is restricted. +- **Default**: This value is the default value for clipboard redirection. Currently, copy/paste between the host and sandbox are permitted under *Default*. ### Memory in MB Specifies the amount of memory that the sandbox can use in megabytes (MB). -`value` - -If the memory value specified is insufficient to boot a sandbox, it is automatically increased to the required minimum amount. - -## Examples - -### Example 1 - -The following config file can be used to easily test the downloaded files inside the sandbox. To achieve this testing, networking and vGPU are disabled, and the sandbox is allowed read-only access to the shared downloads folder. For convenience, the logon command opens the downloads folder inside the sandbox when it's started. - -#### Downloads.wsb - ```xml - - Disable - Disable - - - C:\Users\Public\Downloads - C:\Users\WDAGUtilityAccount\Downloads - true - - - - explorer.exe C:\users\WDAGUtilityAccount\Downloads - - +value ``` -### Example 2 - -The following config file installs Visual Studio Code in the sandbox, which requires a slightly more complicated LogonCommand setup. - -Two folders are mapped into the sandbox; the first (SandboxScripts) contains VSCodeInstall.cmd, which installs and runs Visual Studio Code. The second folder (CodingProjects) is assumed to contain project files that the developer wants to modify using Visual Studio Code. - -With the Visual Studio Code installer script already mapped into the sandbox, the LogonCommand can reference it. - -#### VSCodeInstall.cmd - -Downloads VS Code to `downloads` folder and runs installation from `downloads` folder. - -```batch -REM Download Visual Studio Code -curl -L "https://update.code.visualstudio.com/latest/win32-x64-user/stable" --output C:\users\WDAGUtilityAccount\Downloads\vscode.exe - -REM Install and run Visual Studio Code -C:\users\WDAGUtilityAccount\Downloads\vscode.exe /verysilent /suppressmsgboxes -``` - -#### VSCode.wsb - -```xml - - - - C:\SandboxScripts - C:\Users\WDAGUtilityAccount\Downloads\sandbox - true - - - C:\CodingProjects - C:\Users\WDAGUtilityAccount\Documents\Projects - false - - - - C:\Users\WDAGUtilityAccount\Downloads\sandbox\VSCodeInstall.cmd - - -``` - -### Example 3 - -The following config file runs a PowerShell script as a logon command to swap the primary mouse button for left-handed users. - -`C:\sandbox` folder on the host is mapped to the `C:\sandbox` folder in the sandbox, so the `SwapMouse.ps1` script can be referenced in the sandbox configuration file. - -#### SwapMouse.ps1 - -Create a PowerShell script using the following code, and save it in the `C:\sandbox` directory as `SwapMouse.ps1`. - -```powershell -[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null - -$SwapButtons = Add-Type -MemberDefinition @' -[DllImport("user32.dll")] -public static extern bool SwapMouseButton(bool swap); -'@ -Name "NativeMethods" -Namespace "PInvoke" -PassThru - -$SwapButtons::SwapMouseButton(!([System.Windows.Forms.SystemInformation]::MouseButtonsSwapped)) -``` - -### SwapMouse.wsb - -```xml - - - - C:\sandbox - C:\sandbox - True - - - - powershell.exe -ExecutionPolicy Bypass -File C:\sandbox\SwapMouse.ps1 - - -``` +If the memory value specified is insufficient to boot a sandbox, it's automatically increased to the required minimum amount of 2048 MB. diff --git a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-faq.yml b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-faq.yml new file mode 100644 index 0000000000..ca1408a957 --- /dev/null +++ b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-faq.yml @@ -0,0 +1,107 @@ +### YamlMime:FAQ +metadata: + title: Windows Sandbox frequently asked questions (FAQ) + description: Use these frequently asked questions (FAQ) to learn important details about Windows Sandbox. + author: vinaypamnani-msft + ms.author: vinpa + ms.topic: faq + ms.date: 10/23/2024 + +title: Common questions about Windows Sandbox +summary: Windows Sandbox (WSB) provides a lightweight desktop environment to safely run applications in isolation. This Frequently Asked Questions (FAQ) article is intended to help you learn more about Windows Sandbox. + +sections: + + - name: Concepts + questions: + + - question: Who can use WSB? + answer: | + WSB can be used in various scenarios by anyone without any technical skills. Here are some ways in which you can use WSB: + + - **Clean environment for software testing**: Test or debug your applications in WSB's clean environment to identify and resolve bugs or compatibility issues. + - **Secure web browsing**: Use WSB for secure web browsing, especially when accessing unfamiliar or potentially dangerous websites without putting your system at risk of malware infection. + - **Running Untrusted Applications**: Mitigate security risks by running untrusted applications or files, such as email attachments in WSB. + - **Test software features risk-free**: Easily test out software without the need for installing or uninstalling on your host machine. + - **Maintaining multiple dev environments**: Streamline your development process by utilizing WSB to maintain multiple sandboxes for different development environments. + - **Privacy Protection**: Users concerned about online privacy can use Windows Sandbox for activities like social media browsing or online shopping to prevent tracking cookies and other privacy-invading techniques. + + - question: What's the difference between a Hyper-V virtual machine (VM) and Windows Sandbox? + answer: | + 1. **Lightweight and Temporary**: + - Windows Sandbox: It's a lightweight, disposable environment that runs within your existing Windows installation. You can quickly launch it, test applications, and discard it without affecting your main system. + - Hyper-V VMs: Hyper-V VMs are more heavyweight. They require dedicated resources (CPU, memory, disk space) and take longer to set up. + 1. **Security Isolation**: + - Windows Sandbox: Provides a secure, isolated environment for testing untrusted software. Any changes made within the sandbox are discarded when you close it. + - Hyper-V VMs: While VMs also offer isolation, they persistently store changes unless you revert them manually. + 1. **Resource Efficiency**: + - Windows Sandbox: More resource efficient than a full VM. It adjusts memory usage according to the demand. It also reuses many of the host's read only OS files. + - Hyper-V VMs: VMs have fixed resource allocations, which can impact overall system performance. + 1. **Ease of Use**: + - Windows Sandbox: Simple to use—just open it, test your software, and close it. No complex setup or management. + - Hyper-V VMs: Require more configuration, including setting up virtual switches, network adapters, and managing VM snapshots. + + - question: What applications aren't supported inside a Windows Sandbox? + answer: | + Inbox apps (for example, Store, Notepad) and Optional features turned on via 'Turn Windows Features On or Off' aren't supported. + While Store apps can be installed, you can't download them directly from the Store since the Store app isn't available in the Sandbox. However, if you have an `.appx` package, you can still install those apps. + + - name: Usage + questions: + + - question: Why can I not change certain settings using a config file? + answer: | + You can't make changes to properties if they're controlled by Group Policy. Contact your IT Administrator for more details. + + - question: How do I open multiple Sandbox instances? + answer: | + Today, Windows Sandbox only allows users to launch one Sandbox instance at a time. + + - question: Installing the latest version of Windows Sandbox fails. How do I fix this? + answer: | + Ensure that your device has access to the Internet, Windows Update, and Microsoft Store. Beginning from Windows 11 24H2, the old Windows Sandbox app attempts to download the latest version from the Store. If the upgrade fails on the first attempt, subsequent attempts continue in the background. Meanwhile, the app can still be used. Additionally, the update is queued in the "Updates & Downloads" section of the Microsoft Store app for users who wish to manually install. + + + - question: How do I know which version of Windows Sandbox am I running? + answer: | + Run `Get-AppxPackage -Name WindowsSandbox | Select-Object Version` in a PowerShell prompt. If the version is empty, you're running an older version of Windows Sandbox. If it returns a version number, you're running the newer version. + Alternatively, you can run `wsb --version`. If `wsb` is not available, you're running an older version of Windows Sandbox. + The new version of Windows Sandbox also appears in Windows Settings under **System** > **System components**. + + - question: How do I save the Sandbox state? + answer: | + Windows Sandbox is temporary; closing it deletes all software, files, and state. + + - question: How can I open Windows Sandbox with a different OS version? + answer: | + Windows Sandbox only allows you to use the same build as your host OS. This allows us to keep Windows Sandbox 'lightweight'. + + - question: How do I uninstall Windows Sandbox? + answer: | + To remove Windows Sandbox, and all its components, navigate to **Settings > System > Optional features**, then select **More Windows features**, scroll down and unselect Windows Sandbox, then select OK. + + - name: Feedback + questions: + + - question: Where can I provide feedback? + answer: | + You can file a bug in Feedback Hub by: + + 1. Open the Feedback Hub app. + 1. Select **Report a problem** or **Suggest a feature**. + 1. Fill in the **Summarize your feedback** and **Explain in more details** boxes with a detailed description of the issue or suggestion. A useful feedback item includes: + - Short and descriptive issue title. + - Windows version and build number, which can be gathered from a command prompt using the `cmd.exe --version` command. + - Device information (including CPU type, memory, disk etc.) + - Detailed repro steps. What steps do we need to take to reproduce the issue? Provide as much detail as you can. Provide error message text where possible or screenshots of errors if text can't be captured. + - Behavior you were expecting. + 1. Select an appropriate category and subcategory by using the dropdown menus. There's a dedicated option in Feedback Hub to file **Windows Sandbox** bugs and feedback. It's located under **Security and Privacy** category. + 1. Select **Next**. + 1. If you are able to reproduce the issue, please collect traces as follows: Select the Recreate my problem tile, then select Start capture, reproduce the issue, and then select **Stop capture**. + 1. Attach any relevant screenshots or files for the problem, then select **Submit**. + + Alternatively, you can also use the [Windows Sandbox GitHub repository](https://github.com/microsoft/Windows-Sandbox) to: + + - **Search existing issues** to see if there are any associated with a problem that you're having. In the search bar, you can remove "is:open" to include resolved issues in your search. Consider commenting or giving a thumbs up to any open issues that you would like to express your interest in moving forward as a priority. + - **File a new issue**: If you have found a problem with WSB or WSB documentation and there doesn't appear to be an existing issue, you can select the green **New issue** button and then choose **WSB - Bug Report**. Provide a title for the issue, your Windows build number, whether you're running inbox or undocked Windows Sandbox, any other software versions involved, the repro steps, expected behavior, actual behavior, and diagnostic logs if available and appropriate. + - **File a feature request** by selecting the green **New issue** button and then select **Feature request**, then answer the questions describing your request. diff --git a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-install.md b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-install.md new file mode 100644 index 0000000000..32b1aee636 --- /dev/null +++ b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-install.md @@ -0,0 +1,59 @@ +--- +title: Install Windows Sandbox +description: Install Windows Sandbox +ms.topic: how-to +ms.date: 09/09/2024 +--- + +# Install Windows Sandbox + +## Prerequisites + +- Arm64 (for Windows 11, version 22H2 and later) or AMD64 architecture +- Virtualization capabilities enabled in BIOS +- At least 4 GB of RAM (8 GB recommended) +- At least 1 GB of free disk space (SSD recommended) +- At least two CPU cores (four cores with hyper-threading recommended) + +> [!NOTE] +> Beginning in Windows 11, version 24H2, inbox store apps like Calculator, Photos, Notepad and Terminal are not available inside Windows Sandbox. Ability to use these apps will be added soon. + +## Installation + +1. Ensure that your machine is using Windows 11 or Windows 10, version 1903 or later. + +2. Enable virtualization on the machine. + + - If you're using a physical machine, make sure virtualization capabilities are enabled in the BIOS. + - If you're using a virtual machine, you need to enable nested virtualization. If needed, also update the VM to support nested virtualization. Run the following PowerShell commands on the host: + + ```powershell + Set-VMProcessor -VMName -ExposeVirtualizationExtensions $true + Update-VMVersion -VMName + ``` + +3. Use the search bar on the task bar and type **Turn Windows Features on or off** to access the Windows Optional Features tool. Select **Windows Sandbox** and then **OK**. Restart the computer if you're prompted. + + If the **Windows Sandbox** option is unavailable, your computer doesn't meet the requirements to run Windows Sandbox. If you think this analysis is incorrect, review the prerequisite list and steps 1 and 2. + + > [!NOTE] + > To enable Sandbox using PowerShell, open PowerShell as Administrator and run the following command: + > + > ```powershell + > Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online + > ``` + +4. Locate and select **Windows Sandbox** on the Start menu to run it for the first time. + + > [!NOTE] + > Beginning in Windows 11, version 24H2, Windows Sandbox adheres to the mouse settings of the host system. + > + > If you are on an older build and if the host system is set to use a left-handed mouse, you must apply these settings in Windows Sandbox manually when Windows Sandbox starts. Alternatively, you can use a sandbox configuration file to run a logon command to swap the mouse setting. For an example, see [Example 3](windows-sandbox-sample-configuration.md#example-3---mapping-folders-and-running-a-powershell-script-as-a-logon-command). + +## Try WSB preview features by joining the Windows Insider Program + +To try the most recent features or updates to WSB, join the [Windows Insiders Program](https://insider.windows.com/getting-started). After joining the Windows Insiders Program, you can choose the channel you would like to receive preview builds from inside the Windows settings menu. You can choose from: + +- **Dev channel**: Most recent updates, but low stability. +- **Beta channel**: Ideal for early adopters, more reliable builds than the Dev channel. +- **Release Preview channel**: Preview fixes and key features on the next version of Windows just before its available to the general public. diff --git a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-overview.md b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-overview.md deleted file mode 100644 index 8d8f873a38..0000000000 --- a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-overview.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Windows Sandbox -description: Windows Sandbox overview -ms.topic: conceptual -ms.date: 03/26/2024 ---- - -# Windows Sandbox - -Windows Sandbox provides a lightweight desktop environment to safely run applications in isolation. Software installed inside the Windows Sandbox environment remains "sandboxed" and runs separately from the host machine. - -A sandbox is temporary. When it's closed, all the software and files and the state are deleted. You get a brand-new instance of the sandbox every time you open the application. Note, however, that as of Windows 11, version 22H2, your data persists through a restart initiated from inside the virtualized environment—useful for installing applications that require the OS to reboot. - -Software and applications installed on the host aren't directly available in the sandbox. If you need specific applications available inside the Windows Sandbox environment, they must be explicitly installed within the environment. - -Windows Sandbox has the following properties: - -- **Part of Windows**: Everything required for this feature is included in Windows 10 Pro and Enterprise. There's no need to download a Virtual Hard Disk (VHD). -- **Pristine**: Every time Windows Sandbox runs, it's as clean as a brand-new installation of Windows. -- **Disposable**: Nothing persists on the device. Everything is discarded when the user closes the application. -- **Secure**: Uses hardware-based virtualization for kernel isolation. It relies on the Microsoft hypervisor to run a separate kernel that isolates Windows Sandbox from the host. -- **Efficient:** Uses the integrated kernel scheduler, smart memory management, and virtual GPU. - -> [!IMPORTANT] -> Windows Sandbox enables network connection by default. It can be disabled using the [Windows Sandbox configuration file](/windows/security/threat-protection/windows-sandbox/windows-sandbox-configure-using-wsb-file#networking). - -[!INCLUDE [windows-sandbox](../../../../../includes/licensing/windows-sandbox.md)] - -## Prerequisites - -- ARM64 (for Windows 11, version 22H2 and later) or AMD64 architecture -- Virtualization capabilities enabled in BIOS -- At least 4 GB of RAM (8 GB recommended) -- At least 1 GB of free disk space (SSD recommended) -- At least two CPU cores (four cores with hyper-threading recommended) - -> [!NOTE] -> Windows Sandbox is currently not supported on Windows Home edition. -> Beginning in Windows 11, version 24H2, all inbox store apps like calculator, photos, notepad and terminal are not available inside Windows Sandbox. Ability to use these apps will be added soon. -## Installation - -1. Ensure that your machine is using Windows 10 Pro or Enterprise, build version 18305 or Windows 11. - -2. Enable virtualization on the machine. - - - If you're using a physical machine, make sure virtualization capabilities are enabled in the BIOS. - - If you're using a virtual machine, you need to enable nested virtualization. If needed, also update the VM to support nested virtualization. Run the following PowerShell commands on the host: - - ```powershell - Set-VMProcessor -VMName -ExposeVirtualizationExtensions $true - Update-VMVersion -VMName - ``` - -3. Use the search bar on the task bar and type **Turn Windows Features on or off** to access the Windows Optional Features tool. Select **Windows Sandbox** and then **OK**. Restart the computer if you're prompted. - - If the **Windows Sandbox** option is unavailable, your computer doesn't meet the requirements to run Windows Sandbox. If you think this analysis is incorrect, review the prerequisite list and steps 1 and 2. - - > [!NOTE] - > To enable Sandbox using PowerShell, open PowerShell as Administrator and run the following command: - > - > ```powershell - > Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online - > ``` - -4. Locate and select **Windows Sandbox** on the Start menu to run it for the first time. - - > [!NOTE] - > Windows Sandbox does not adhere to the mouse settings of the host system, so if the host system is set to use a left-handed mouse, you must apply these settings in Windows Sandbox manually when Windows Sandbox starts. Alternatively, you can use a sandbox configuration file to run a logon command to swap the mouse setting. For an example, see [Example 3](windows-sandbox-configure-using-wsb-file.md#example-3). - -## Usage - -1. Copy an executable file (and any other files needed to run the application) from the host and paste them into the **Windows Sandbox** window. -2. Run the executable file or installer inside the sandbox. -3. When you're finished experimenting, close the sandbox. A dialog box will state that all sandbox content will be discarded and permanently deleted. Select **Ok**. -4. Confirm that your host machine doesn't exhibit any of the modifications that you made in Windows Sandbox. diff --git a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-sample-configuration.md b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-sample-configuration.md new file mode 100644 index 0000000000..8d1a0ca697 --- /dev/null +++ b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-sample-configuration.md @@ -0,0 +1,112 @@ +--- +title: Windows Sandbox sample configuration files +description: Windows Sandbox sample configuration files +ms.topic: how-to +ms.date: 09/09/2024 +--- + +# Windows Sandbox sample configuration files + +## Example 1 - Mapping Folders and testing an unknown downloaded file in a Sandbox + +The following config file can be used to easily test unknown downloaded files inside a sandbox. To achieve this testing, networking and vGPU are disabled, and the sandbox is allowed read-only access to the downloads folder from the host and is placed inside a 'temp' folder in the sandbox. For convenience, the logon command opens the downloads folder inside the sandbox when it's started. + +### Downloads.wsb + +```xml + + Disable + Disable + + + C:\Users\Public\Downloads + C:\temp + true + + + + explorer.exe C:\temp + + + +``` + +## Example 2 - Installing Visual Studio Code at launch in a Sandbox + +The following config file installs Visual Studio Code in the sandbox, which requires a slightly more complicated LogonCommand setup. + +Two folders are mapped into the sandbox; the first (`SandboxScripts`) contains VSCodeInstall.cmd, which installs and runs Visual Studio Code. The second folder (`CodingProjects`) is assumed to contain project files that the developer wants to modify using Visual Studio Code. + +With the Visual Studio Code installer script already mapped into the sandbox, the `` can reference it. + +### VSCodeInstall.cmd + +This batch file should be created in the `C:\SandboxScripts` directory on the host. It downloads VS Code to `temp` folder inside the sandbox and runs installation from `temp` folder. + +```batch +REM Download Visual Studio Code +curl -L "https://update.code.visualstudio.com/latest/win32-x64-user/stable" --output C:\temp\vscode.exe + +REM Install and run Visual Studio Code +C:\temp\vscode.exe /verysilent /suppressmsgboxes +``` + +### VSCode.wsb + +```xml + + + + C:\SandboxScripts + C:\temp\sandbox + true + + + C:\CodingProjects + C:\temp\Projects + false + + + + C:\temp\sandbox\VSCodeInstall.cmd + + +``` + +## Example 3 - Mapping Folders and running a PowerShell script as a Logon Command + +Beginning in Windows 11, version 24H2, Windows Sandbox adheres to the mouse settings of the host system. If you are on an older build and if the host system is set to use a left-handed mouse, you must apply these settings in Windows Sandbox manually when Windows Sandbox starts. Alternatively, you can use a sandbox configuration file to run a logon command to swap the mouse setting. + +In this example, the `C:\sandbox` folder on the host is mapped to the `C:\sandbox` folder in the sandbox, so the `SwapMouse.ps1` script can be referenced in the sandbox configuration file. + +### SwapMouse.ps1 + +Create a PowerShell script using the following code, and save it in the `C:\sandbox` directory as `SwapMouse.ps1`. + +```powershell +[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null + +$SwapButtons = Add-Type -MemberDefinition @' +[DllImport("user32.dll")] +public static extern bool SwapMouseButton(bool swap); +'@ -Name "NativeMethods" -Namespace "PInvoke" -PassThru + +$SwapButtons::SwapMouseButton(!([System.Windows.Forms.SystemInformation]::MouseButtonsSwapped)) +``` + +### SwapMouse.wsb + +```xml + + + + C:\sandbox + C:\sandbox + True + + + + powershell.exe -ExecutionPolicy Bypass -File C:\sandbox\SwapMouse.ps1 + + +``` \ No newline at end of file diff --git a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-troubleshoot.md b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-troubleshoot.md new file mode 100644 index 0000000000..a908b5875c --- /dev/null +++ b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-troubleshoot.md @@ -0,0 +1,21 @@ +--- +title: Troubleshoot Windows Sandbox +description: Troubleshoot Windows Sandbox +ms.topic: troubleshooting +ms.date: 09/09/2024 +--- + +# Troubleshoot Windows Sandbox + +This article lists some common issues with Windows Sandbox and possible solutions. To submit feedback about Windows Sandbox, see [Where can I provide feedback?](windows-sandbox-faq.yml#where-can-i-provide-feedback) + +| Error | Possible Solution | +|--|--| +| `WININET_E_NAME_NOT_RESOLVED`
`WU_E_PT_ENDPOINT_UNREACHABLE` | Upgrade to Windows Sandbox app fails because user isn't connected to internet or network adapter is connected but no internet connection. Check your internet connection. | +| `ERROR_FILE_NOT_FOUND` | `.wsb` config file provided by the user doesn't exist. Make sure that the path to the `.wsb` file is correct. | +| `E_INVALIDARG` | The `.wsb` file provided by the user is invalid or has errors. Check the `.wsb` file. | +| `REGDB_E_IIDNOTREG` | Verify if Windows Sandbox component is enabled under 'Turn Windows features on or off'. For more information, see [Install Windows Sandbox](windows-sandbox-install.md) | +| `The following settings are enforced by your IT administrator.` | `.wsb` file has a setting enabled that is controlled via group policy. | +| `No hypervisor was found. Please enable hypervisor support.` | Windows Sandbox only supports Hyper-V Hypervisor. Third-party hypervisors are not supported. Ensure that Hyper-V is enabled. | +| `Cannot upgrade to the latest version of Windows Sandbox` | Ensure that your device has access to the Internet, Windows Update and Microsoft Store. Beginning with Windows 11, version 24H2, the old Windows Sandbox app attempts to download the latest version from the Store. If the upgrade fails initially, installation continues in the background while the user can still use the app. Additionally, the app is queued in the "Updates & downloads" section of the Microsoft Store app for users who wish to install it manually. | +| `E_FAIL`, or `E_UNEXPECTED` or general failure during installation. | Possible causes:

- Installing Windows Sandbox is disabled via group policy. Check with your IT Admin.
- Timeout error where we can't reach the Microsoft Store. Try again later. | diff --git a/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-versions.md b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-versions.md new file mode 100644 index 0000000000..42ffe331cc --- /dev/null +++ b/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-versions.md @@ -0,0 +1,32 @@ +--- +title: Windows Sandbox versions +description: Windows Sandbox versions +ms.topic: conceptual +ms.date: 10/22/2024 +--- + +# Windows Sandbox versions + +Starting with Windows 11, version 24H2, a newer version of Windows Sandbox is available from the Microsoft Store, featuring an improved user experience and new command line functionality. + +- **Faster Updates**: With the app now being updated through the Microsoft Store, you can install the bug fixes and new features as soon as they're available, rather than needing to wait for an update of the Windows operating system. +- **Revamped UI**: The app now features WinUI 3, a modern and sleek user interface built on the Fluent design system. +- **New Runtime Features**: Users can now access clipboard redirection, audio/video input control, and folder sharing directly during runtime using the "…" icon in the top-right corner without needing a preconfigured `.wsb` file. +- **Command Line Preview**: An early version of [command line support](windows-sandbox-cli.md) for Windows Sandbox is now available. + +## Upgrading to the newer version + +### Prerequisites + +- Windows Sandbox must already be installed. If it isn't already installed, [install Windows Sandbox](windows-sandbox-install.md). +- Device must be running Windows 11, version 24H2, with KB10D or later. +- Internet access for Microsoft Store and Windows Update. + +### Upgrade + +- Launch **Windows Sandbox** from the Start menu. +- If the app isn't upgraded to the latest version, a progress dialog appears as it automatically attempts to update. This process typically takes 30 seconds to 2 minutes. +- Once the installation is complete, you're directed to the updated version of the app. + +> [!NOTE] +> If the upgrade fails on the first try, the installation continues in the background while you use the older version of the app. Additionally, the app is queued in the "Updates & downloads" section of the Microsoft Store app for users who wish to install it manually. \ No newline at end of file diff --git a/windows/security/book/includes/windows-sandbox.md b/windows/security/book/includes/windows-sandbox.md index 8e2f55f747..d8d6385b3f 100644 --- a/windows/security/book/includes/windows-sandbox.md +++ b/windows/security/book/includes/windows-sandbox.md @@ -14,4 +14,4 @@ Once Windows Sandbox is closed, nothing persists on the device. All the software [!INCLUDE [learn-more](learn-more.md)] -- [Windows Sandbox](/windows/security/threat-protection/windows-sandbox/windows-sandbox-overview) +- [Windows Sandbox](/windows/security/application-security/application-isolation/windows-sandbox) diff --git a/windows/security/docfx.json b/windows/security/docfx.json index e0cd0064c8..eebfabaaa0 100644 --- a/windows/security/docfx.json +++ b/windows/security/docfx.json @@ -142,9 +142,10 @@ "✅ Windows Server 2019", "✅ Windows Server 2016" ], - "application-security/application-control/windows-defender-application-control/**/*.md": [ + "application-security/application-control/app-control-for-business/**/*.md": [ "✅ Windows 11", "✅ Windows 10", + "✅ Windows Server 2025", "✅ Windows Server 2022", "✅ Windows Server 2019", "✅ Windows Server 2016" diff --git a/windows/security/identity-protection/hello-for-business/faq.yml b/windows/security/identity-protection/hello-for-business/faq.yml index 9a2ac25742..26e30724a9 100644 --- a/windows/security/identity-protection/hello-for-business/faq.yml +++ b/windows/security/identity-protection/hello-for-business/faq.yml @@ -47,7 +47,7 @@ sections: The smart card emulation feature of Windows Hello for Business verifies the PIN and then discards the PIN in exchange for a ticket. The process doesn't receive the PIN, but rather the ticket that grants them private key operations. There isn't a policy setting to adjust the caching. - question: Where is Windows Hello biometrics data stored? answer: | - When you enroll in Windows Hello, a representation of your biometrics, called an enrollment profile, is created. The enrollment profile biometrics data is device specific, is stored locally on the device, and does not leave the device or roam with the user. Some external fingerprint sensors store biometric data on the fingerprint module itself rather than on Windows device. Even in this case, the biometrics data is stored locally on those modules, is device specific, doesn't roam, never leaves the module, and is never sent to Microsoft cloud or external server. For more details, see [Windows Hello biometrics in the enterprise](/windows/security/identity-protection/hello-for-business/hello-biometrics-in-enterprise#where-is-windows-hello-data-stored) and [Windows Hello face authentication](/windows-hardware/design/device-experiences/windows-hello-face-authentication). + When you enroll in Windows Hello, a representation of your biometrics, called an enrollment profile, is created. The enrollment profile biometrics data is device specific, is stored locally on the device, and does not leave the device or roam with the user. Some external fingerprint sensors store biometric data on the fingerprint module itself rather than on Windows device. Even in this case, the biometrics data is stored locally on those modules, is device specific, doesn't roam, never leaves the module, and is never sent to Microsoft cloud or external server. For more details, see [Windows Hello biometrics in the enterprise](/windows/security/identity-protection/hello-for-business/how-it-works#biometric-data-storage) and [Windows Hello face authentication](/windows-hardware/design/device-experiences/windows-hello-face-authentication). - question: What is the format used to store Windows Hello biometrics data on the device? answer: | Windows Hello biometrics data is stored on the device as an encrypted template database. The data from the biometrics sensor (like face camera or fingerprint reader) creates a data representation—or graph—that is then encrypted before it's stored on the device. Each biometrics sensor on the device which is used by Windows Hello (face or fingerprint) will have its own biometric database file where template data is stored. Each biometrics database file is encrypted with unique, randomly generated key that is encrypted to the system using AES encryption producing an SHA256 hash. diff --git a/windows/security/identity-protection/hello-for-business/rdp-sign-in.md b/windows/security/identity-protection/hello-for-business/rdp-sign-in.md index bc28fecee5..305932af9b 100644 --- a/windows/security/identity-protection/hello-for-business/rdp-sign-in.md +++ b/windows/security/identity-protection/hello-for-business/rdp-sign-in.md @@ -1,7 +1,7 @@ --- title: Remote Desktop sign-in with Windows Hello for Business description: Learn how to configure Remote Desktop (RDP) sign-in with Windows Hello for Business. -ms.date: 06/11/2024 +ms.date: 01/27/2025 ms.topic: how-to --- diff --git a/windows/security/identity-protection/passwordless-strategy/journey-step-3.md b/windows/security/identity-protection/passwordless-strategy/journey-step-3.md index 9bc006a4e0..3d3f9622e0 100644 --- a/windows/security/identity-protection/passwordless-strategy/journey-step-3.md +++ b/windows/security/identity-protection/passwordless-strategy/journey-step-3.md @@ -2,7 +2,7 @@ title: Transition into a passwordless deployment description: Learn about how to transition into a passwordless deployment, the third step of the Microsoft passwordless journey. ms.topic: concept-article -ms.date: 10/29/2024 +ms.date: 01/30/2025 --- # Transition into a passwordless deployment @@ -123,7 +123,7 @@ function Generate-RandomPassword{ $NewPassword = ConvertTo-SecureString -String (Generate-RandomPassword) -AsPlainText -Force -Set-ADAccountPassword -identity $userId -NewPassword $NewPassword -Reset +Set-ADAccountPassword -identity $samAccountName -NewPassword $NewPassword -Reset ``` If your organizational policies allow it, you can configure the randomized passwords to never expire, or use a long expiration period. This configuration prevents the user from being prompted to change their password. diff --git a/windows/security/index.yml b/windows/security/index.yml index 43817f6227..7b2cccd5ae 100644 --- a/windows/security/index.yml +++ b/windows/security/index.yml @@ -131,7 +131,7 @@ landingContent: - text: Microsoft Defender Application Guard (MDAG) url: /windows/security/application-security/application-isolation/microsoft-defender-application-guard/md-app-guard-overview - text: Windows Sandbox - url: /windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-overview + url: /windows/security/application-security/application-isolation/windows-sandbox/ - linkListType: how-to-guide links: - text: Configure Windows Sandbox diff --git a/windows/security/licensing-and-edition-requirements.md b/windows/security/licensing-and-edition-requirements.md index 2e2dc3b457..2bf77557b9 100644 --- a/windows/security/licensing-and-edition-requirements.md +++ b/windows/security/licensing-and-edition-requirements.md @@ -1,7 +1,7 @@ --- title: Windows Security Features Licensing And Edition Requirements description: Learn about Windows licensing and edition requirements for the features included in Windows. -ms.topic: conceptual +ms.topic: reference ms.date: 12/02/2024 appliesto: - ✅ Windows 11 diff --git a/windows/security/operating-system-security/data-protection/bitlocker/includes/choose-how-bitlocker-protected-operating-system-drives-can-be-recovered.md b/windows/security/operating-system-security/data-protection/bitlocker/includes/choose-how-bitlocker-protected-operating-system-drives-can-be-recovered.md index b0ff6c39b5..45ad55ad06 100644 --- a/windows/security/operating-system-security/data-protection/bitlocker/includes/choose-how-bitlocker-protected-operating-system-drives-can-be-recovered.md +++ b/windows/security/operating-system-security/data-protection/bitlocker/includes/choose-how-bitlocker-protected-operating-system-drives-can-be-recovered.md @@ -19,6 +19,8 @@ If this policy setting is disabled or not configured, the default recovery optio For Microsoft Entra hybrid joined devices, the BitLocker recovery password is backed up to both Active Directory and Entra ID. +For Microsoft Entra joined devices, the BitLocker recovery password is backed up to Entra ID. + | | Path | |--|--| | **CSP** | `./Device/Vendor/MSFT/BitLocker/`[SystemDrivesRecoveryOptions](/windows/client-management/mdm/bitlocker-csp#systemdrivesrecoveryoptions)| diff --git a/windows/security/operating-system-security/data-protection/personal-data-encryption/index.md b/windows/security/operating-system-security/data-protection/personal-data-encryption/index.md index 03607ce506..2f0191609b 100644 --- a/windows/security/operating-system-security/data-protection/personal-data-encryption/index.md +++ b/windows/security/operating-system-security/data-protection/personal-data-encryption/index.md @@ -25,11 +25,11 @@ Unlike BitLocker that releases data encryption keys at boot, Personal Data Encry To use Personal Data Encryption, the following prerequisites must be met: - Windows 11, version 22H2 and later -- The devices must be [Microsoft Entra joined][AAD-1]. Domain-joined and Microsoft Entra hybrid joined devices aren't supported +- The devices must be [Microsoft Entra joined][ENTRA-1] or [Microsoft Entra hybrid joined][ENTRA-2]. Domain-joined devices aren't supported - Users must sign in using [Windows Hello for Business](../../../identity-protection/hello-for-business/index.md) > [!IMPORTANT] -> If you sign in with a password or a [security key][AAD-2], you can't access Personal Data Encryption protected content. +> If you sign in with a password or a [FIDO2 security key][ENTRA-3], you can't access Personal Data Encryption protected content. [!INCLUDE [personal-data-encryption-pde](../../../../../includes/licensing/personal-data-encryption-pde.md)] @@ -111,5 +111,6 @@ Certain Windows applications support Personal Data Encryption out of the box. If -[AAD-1]: /azure/active-directory/devices/concept-azure-ad-join -[AAD-2]: /azure/active-directory/authentication/howto-authentication-passwordless-security-key +[ENTRA-1]: /entra/identity/devices/concept-directory-join +[ENTRA-2]: /entra/identity/devices/concept-hybrid-join +[ENTRA-3]: /entra/identity/authentication/howto-authentication-passwordless-security-key-windows#sign-in-with-fido2-security-key diff --git a/windows/security/operating-system-security/device-management/windows-security-configuration-framework/get-support-for-security-baselines.md b/windows/security/operating-system-security/device-management/windows-security-configuration-framework/get-support-for-security-baselines.md index 05f61ccf78..75939e36c9 100644 --- a/windows/security/operating-system-security/device-management/windows-security-configuration-framework/get-support-for-security-baselines.md +++ b/windows/security/operating-system-security/device-management/windows-security-configuration-framework/get-support-for-security-baselines.md @@ -16,16 +16,7 @@ The Security Compliance Manager (SCM) is now retired and is no longer supported. More information about this change can be found on the [Microsoft Security Guidance blog](/archive/blogs/secguide/security-compliance-manager-scm-retired-new-tools-and-procedures). -### Where can I get an older version of a Windows baseline? - -Any version of Windows baseline before Windows 10, version 1703, can still be downloaded using SCM. Any future versions of Windows baseline will be available through SCT. See the version matrix in this article to see if your version of Windows baseline is available on SCT. - -- [SCM 4.0 Download](/previous-versions/tn-archive/cc936627(v=technet.10)) -- [SCM Frequently Asked Questions (FAQ)](https://social.technet.microsoft.com/wiki/contents/articles/1836.microsoft-security-compliance-manager-scm-frequently-asked-questions-faq.aspx) -- [SCM Release Notes](https://social.technet.microsoft.com/wiki/contents/articles/1864.microsoft-security-compliance-manager-scm-release-notes.aspx) -- [SCM baseline download help](https://social.technet.microsoft.com/wiki/contents/articles/1865.microsoft-security-compliance-manager-scm-baseline-download-help.aspx) - -### What file formats are supported by the new SCT? +### What file formats are supported by the SCT? The toolkit supports formats created by the Windows GPO backup feature (`.pol`, `.inf`, and `.csv`). Policy Analyzer saves its data in XML files with a `.PolicyRules` file extension. LGPO also supports its own LGPO text file format as a text-based analog for the binary registry.pol file format. For more information, see the LGPO documentation. Keep in mind that SCMs' `.cab` files are no longer supported. @@ -56,16 +47,16 @@ No. SCM supported only SCAP 1.0, which wasn't updated as SCAP evolved. The new t | Name | Build | Baseline Release Date | Security Tools | |--|--|--|--| +| Windows Server 2025 | [SecGuide](https://techcommunity.microsoft.com/blog/microsoft-security-baselines/windows-server-2025-security-baseline/4358733) | January 2025 | [SCT 1.0](https://www.microsoft.com/download/details.aspx?id=55319) | | Windows Server 2022 | [SecGuide](https://techcommunity.microsoft.com/t5/microsoft-security-baselines/windows-server-2022-security-baseline/ba-p/2724685) | September 2021 | [SCT 1.0](https://www.microsoft.com/download/details.aspx?id=55319) | | Windows Server 2019 | [SecGuide](https://techcommunity.microsoft.com/t5/microsoft-security-baselines/security-baseline-final-for-windows-10-v1809-and-windows-server/ba-p/701082) | November 2018 | [SCT 1.0](https://www.microsoft.com/download/details.aspx?id=55319) | | Windows Server 2016 | [SecGuide](/archive/blogs/secguide/security-baseline-for-windows-10-v1607-anniversary-edition-and-windows-server-2016) | October 2016 | [SCT 1.0](https://www.microsoft.com/download/details.aspx?id=55319) | -| Windows Server 2012 R2 | [SecGuide](/archive/blogs/secguide/security-baseline-for-windows-10-v1607-anniversary-edition-and-windows-server-2016) | August 2014 | [SCT 1.0](https://www.microsoft.com/download/details.aspx?id=55319) | ### Microsoft products | Name | Details | Security Tools | |--|--|--| -| Microsoft 365 Apps for enterprise, version 2306 | [SecGuide](https://techcommunity.microsoft.com/t5/microsoft-security-baselines/security-baseline-for-m365-apps-for-enterprise-v2306/ba-p/3858702) | [SCT 1.0](https://www.microsoft.com/download/details.aspx?id=55319) | +| Microsoft 365 Apps for enterprise, version 2412 | [SecGuide](https://techcommunity.microsoft.com/blog/microsoft-security-baselines/security-baseline-for-m365-apps-for-enterprise-v2412/4357320) | [SCT 1.0](https://www.microsoft.com/download/details.aspx?id=55319) | | Microsoft Edge, version 128 | [SecGuide](https://techcommunity.microsoft.com/t5/microsoft-security-baselines/security-baseline-for-microsoft-edge-version-128/ba-p/4237524) | [SCT 1.0](https://www.microsoft.com/download/details.aspx?id=55319) | ## Related articles diff --git a/windows/security/operating-system-security/device-management/windows-security-configuration-framework/security-compliance-toolkit-10.md b/windows/security/operating-system-security/device-management/windows-security-configuration-framework/security-compliance-toolkit-10.md index ced5288d21..3556919a26 100644 --- a/windows/security/operating-system-security/device-management/windows-security-configuration-framework/security-compliance-toolkit-10.md +++ b/windows/security/operating-system-security/device-management/windows-security-configuration-framework/security-compliance-toolkit-10.md @@ -23,18 +23,16 @@ The Security Compliance Toolkit consists of: - Windows 10 security baselines - Windows 10, version 22H2 - Windows 10, version 21H2 - - Windows 10, version 20H2 - Windows 10, version 1809 - Windows 10, version 1607 - Windows 10, version 1507 - Windows Server security baselines + - Windows Server 2025 - Windows Server 2022 - Windows Server 2019 - Windows Server 2016 - - Windows Server 2012 R2 - Microsoft Office security baseline - - Office 2016 - - Microsoft 365 Apps for Enterprise Version 2206 + - Microsoft 365 Apps for Enterprise Version 2412 - Microsoft Edge security baseline - Microsoft Edge version 128 - Tools diff --git a/windows/security/operating-system-security/network-security/vpn/how-to-configure-diffie-hellman-protocol-over-ikev2-vpn-connections.md b/windows/security/operating-system-security/network-security/vpn/how-to-configure-diffie-hellman-protocol-over-ikev2-vpn-connections.md index c2a7ae57a8..2fc0efca6e 100644 --- a/windows/security/operating-system-security/network-security/vpn/how-to-configure-diffie-hellman-protocol-over-ikev2-vpn-connections.md +++ b/windows/security/operating-system-security/network-security/vpn/how-to-configure-diffie-hellman-protocol-over-ikev2-vpn-connections.md @@ -1,7 +1,7 @@ --- title: How to configure cryptographic settings for IKEv2 VPN connections description: Learn how to update the IKEv2 cryptographic settings of VPN servers and clients by running VPN cmdlets to secure connections. -ms.date: 05/06/2024 +ms.date: 01/27/2025 ms.topic: how-to --- diff --git a/windows/security/operating-system-security/network-security/vpn/how-to-use-single-sign-on-sso-over-vpn-and-wi-fi-connections.md b/windows/security/operating-system-security/network-security/vpn/how-to-use-single-sign-on-sso-over-vpn-and-wi-fi-connections.md index daf7f89f5d..9a4865a98c 100644 --- a/windows/security/operating-system-security/network-security/vpn/how-to-use-single-sign-on-sso-over-vpn-and-wi-fi-connections.md +++ b/windows/security/operating-system-security/network-security/vpn/how-to-use-single-sign-on-sso-over-vpn-and-wi-fi-connections.md @@ -1,7 +1,7 @@ --- title: How to use single sign-on (SSO) over VPN and Wi-Fi connections description: Explains requirements to enable single sign-on (SSO) to on-premises domain resources over WiFi or VPN connections. -ms.date: 05/06/2024 +ms.date: 01/27/2025 ms.topic: how-to --- diff --git a/windows/security/operating-system-security/network-security/vpn/vpn-authentication.md b/windows/security/operating-system-security/network-security/vpn/vpn-authentication.md index 539eeaeda6..26a2c22a06 100644 --- a/windows/security/operating-system-security/network-security/vpn/vpn-authentication.md +++ b/windows/security/operating-system-security/network-security/vpn/vpn-authentication.md @@ -1,7 +1,7 @@ --- title: VPN authentication options description: Learn about the EAP authentication methods that Windows supports in VPNs to provide secure authentication using username/password and certificate-based methods. -ms.date: 05/06/2024 +ms.date: 01/27/2025 ms.topic: concept-article --- @@ -80,14 +80,3 @@ The following image shows the field for EAP XML in a Microsoft Intune VPN profil :::image type="content" source="images/vpn-eap-xml.png" alt-text="Screenshot showing EAP XML configuration in Intune profile."::: -## Related topics - -- [VPN technical guide](vpn-guide.md) -- [VPN connection types](vpn-connection-type.md) -- [VPN routing decisions](vpn-routing.md) -- [VPN and conditional access](vpn-conditional-access.md) -- [VPN name resolution](vpn-name-resolution.md) -- [VPN auto-triggered profile options](vpn-auto-trigger-profile.md) -- [VPN security features](vpn-security-features.md) -- [VPN profile options](vpn-profile-options.md) -- [Extensible Authentication Protocol (EAP) for network access](/windows-server/networking/technologies/extensible-authentication-protocol/network-access) diff --git a/windows/security/operating-system-security/network-security/vpn/vpn-auto-trigger-profile.md b/windows/security/operating-system-security/network-security/vpn/vpn-auto-trigger-profile.md index 85b51dd4d1..53c870afc0 100644 --- a/windows/security/operating-system-security/network-security/vpn/vpn-auto-trigger-profile.md +++ b/windows/security/operating-system-security/network-security/vpn/vpn-auto-trigger-profile.md @@ -1,7 +1,7 @@ --- title: VPN auto-triggered profile options description: With auto-triggered VPN profile options, Windows can automatically establish a VPN connection based on IT admin-defined rules. Learn about the types of auto-trigger rules that you can create for VPN connections. -ms.date: 05/06/2024 +ms.date: 01/27/2025 ms.topic: how-to --- @@ -77,14 +77,3 @@ See [VPN profile options](vpn-profile-options.md) and [VPNv2 CSP](/windows/clien The following image shows associating apps to a VPN connection in a VPN Profile configuration policy using Microsoft Intune. :::image type="content" source="images/vpn-app-trigger.png" alt-text="Creation of VPN profile in Intune: application association options." lightbox="images/vpn-app-trigger.png"::: - -## Related articles - -- [VPN technical guide](vpn-guide.md) -- [VPN connection types](vpn-connection-type.md) -- [VPN routing decisions](vpn-routing.md) -- [VPN authentication options](vpn-authentication.md) -- [VPN and conditional access](vpn-conditional-access.md) -- [VPN name resolution](vpn-name-resolution.md) -- [VPN security features](vpn-security-features.md) -- [VPN profile options](vpn-profile-options.md) diff --git a/windows/security/operating-system-security/network-security/vpn/vpn-conditional-access.md b/windows/security/operating-system-security/network-security/vpn/vpn-conditional-access.md index 8fa4ab6725..9702c4afee 100644 --- a/windows/security/operating-system-security/network-security/vpn/vpn-conditional-access.md +++ b/windows/security/operating-system-security/network-security/vpn/vpn-conditional-access.md @@ -1,7 +1,7 @@ --- title: VPN and conditional access description: Learn how to integrate the VPN client with the Conditional Access platform, and how to create access rules for Microsoft Entra connected apps. -ms.date: 05/06/2024 +ms.date: 01/27/2025 ms.topic: how-to --- @@ -19,7 +19,7 @@ Conditional Access Platform components used for Device Compliance include the fo - [Windows Health Attestation Service](../../system-security/protect-high-value-assets-by-controlling-the-health-of-windows-10-based-devices.md) (optional) - Microsoft Entra Certificate Authority - It's a requirement that the client certificate used for the cloud-based device compliance solution be issued by a Microsoft Entra ID-based Certificate Authority (CA). A Microsoft Entra CA is essentially a mini-CA cloud tenant in Azure. The Microsoft Entra CA can't be configured as part of an on-premises Enterprise CA. See also [Always On VPN deployment for Windows Server and Windows 10](/windows-server/remote/remote-access/vpn/always-on-vpn/deploy/always-on-vpn-deploy). -- Microsoft Entra ID-issued short-lived certificates - When a VPN connection attempt is made, the Microsoft Entra Token Broker on the local device communicates with Microsoft Entra ID, which then checks for health based on compliance rules. If compliant, Microsoft Entra ID sends back a short-lived certificate that is used to authenticate the VPN. Note that certificate authentication methods such as EAP-TLS can be used. When the client reconnects and determines that the certificate has expired, the client will again check with Microsoft Entra ID for health validation before a new certificate is issued. +- Microsoft Entra ID-issued short-lived certificates - When a VPN connection attempt is made, the Microsoft Entra Token Broker on the local device communicates with Microsoft Entra ID, which then checks for health based on compliance rules. If compliant, Microsoft Entra ID sends back a short-lived certificate that is used to authenticate the VPN. Certificate authentication methods such as EAP-TLS can be used. When the client reconnects and determines that the certificate has expired, the client will again check with Microsoft Entra ID for health validation before a new certificate is issued. - [Microsoft Intune device compliance policies](/mem/intune/protect/device-compliance-get-started): Cloud-based device compliance uses Microsoft Intune Compliance Policies, which are capable of querying the device state and define compliance rules for the following, among other things. - Antivirus status - Auto-update status and update compliance @@ -35,7 +35,7 @@ The following client-side components are also required: ## VPN device compliance -At this time, the Microsoft Entra certificates issued to users don't contain a CRL Distribution Point (CDP) and aren't suitable for Key Distribution Centers (KDCs) to issue Kerberos tokens. For users to gain access to on-premises resources such as files on a network share, client authentication certificates must be deployed to the Windows profiles of the users, and their VPNv2 profiles must contain the <SSO> section. +At this time, the Microsoft Entra certificates issued to users don't contain a CRL Distribution Point (CDP) and aren't suitable for Key Distribution Centers (KDCs) to issue Kerberos tokens. For users to gain access to on-premises resources such as files on a network share, client authentication certificates must be deployed to the Windows profiles of the users, and their VPNv2 profiles must contain the `` section. Server-side infrastructure requirements to support VPN device compliance include: @@ -60,8 +60,8 @@ Two client-side configuration service providers are leveraged for VPN device com - Upon request, forward the Health Attestation Certificate (received from HAS) and related runtime information to the MDM server for verification > [!NOTE] -> It's required that certificates used for obtaining Kerberos tickets to be issued from an on-premises CA, and that SSO to be enabled in the user's VPN profile. This will enable the user to access on-premises resources. -> In the case of AzureAD-only joined devices (not hybrid joined devices), if the user certificate issued by the on-premises CA has the user UPN from AzureAD in Subject and SAN (Subject Alternative Name), the VPN profile must be modified to ensure that the client does not cache the credentials used for VPN authentication. To do this, after deploying the VPN profile to the client, modify the *Rasphone.pbk* on the client by changing the entry **UseRasCredentials** from 1 (default) to 0 (zero). +> It's required that certificates used for obtaining Kerberos tickets to be issued from an on-premises CA, and that SSO to be enabled in the user's VPN profile. This allows the user to access on-premises resources. +> In the case of Microsoft Entra joined devices (not hybrid joined devices), if the user certificate issued by the on-premises CA has the user UPN from Microsoft Entra in Subject and SAN (Subject Alternative Name), the VPN profile must be modified to ensure that the client doesn't cache the credentials used for VPN authentication. To do this, after deploying the VPN profile to the client, modify the *Rasphone.pbk* on the client by changing the entry **UseRasCredentials** from 1 (default) to 0 (zero). ## Client connection flow @@ -71,7 +71,7 @@ The VPN client side connection flow works as follows: When a VPNv2 Profile is configured with \ \true<\/Enabled> the VPN client uses this connection flow: -1. The VPN client calls into Windows 10's or Windows 11's Microsoft Entra Token Broker, identifying itself as a VPN client. +1. The VPN client calls into Windows 10 or Windows 11 Microsoft Entra Token Broker, identifying itself as a VPN client. 1. The Microsoft Entra Token Broker authenticates to Microsoft Entra ID and provides it with information about the device trying to connect. The Microsoft Entra Server checks if the device is in compliance with the policies. 1. If compliant, Microsoft Entra ID requests a short-lived certificate. 1. Microsoft Entra ID pushes down a short-lived certificate to the Certificate Store via the Token Broker. The Token Broker then returns control back over to the VPN client for further connection processing. @@ -92,14 +92,3 @@ See [VPN profile options](vpn-profile-options.md) and [VPNv2 CSP](/windows/clien - [Tip of the Day: The Conditional Access Framework and Device Compliance for VPN (Part 2)](/archive/blogs/tip_of_the_day/tip-of-the-day-the-conditional-access-framework-and-device-compliance-for-vpn-part-2) - [Tip of the Day: The Conditional Access Framework and Device Compliance for VPN (Part 3)](/archive/blogs/tip_of_the_day/tip-of-the-day-the-conditional-access-framework-and-device-compliance-for-vpn-part-3) - [Tip of the Day: The Conditional Access Framework and Device Compliance for VPN (Part 4)](/archive/blogs/tip_of_the_day/tip-of-the-day-the-conditional-access-framework-and-device-compliance-for-vpn-part-4) - -## Related articles - -- [VPN technical guide](vpn-guide.md) -- [VPN connection types](vpn-connection-type.md) -- [VPN routing decisions](vpn-routing.md) -- [VPN authentication options](vpn-authentication.md) -- [VPN name resolution](vpn-name-resolution.md) -- [VPN auto-triggered profile options](vpn-auto-trigger-profile.md) -- [VPN security features](vpn-security-features.md) -- [VPN profile options](vpn-profile-options.md) diff --git a/windows/security/operating-system-security/network-security/vpn/vpn-connection-type.md b/windows/security/operating-system-security/network-security/vpn/vpn-connection-type.md index 7199978f6c..0c0b47c65c 100644 --- a/windows/security/operating-system-security/network-security/vpn/vpn-connection-type.md +++ b/windows/security/operating-system-security/network-security/vpn/vpn-connection-type.md @@ -1,7 +1,7 @@ --- title: VPN connection types description: Learn about Windows VPN platform clients and the VPN connection-type features that can be configured. -ms.date: 05/06/2024 +ms.date: 01/27/2025 ms.topic: concept-article --- @@ -46,13 +46,3 @@ In Intune, you can also include custom XML for non-Microsoft plug-in profiles: > [!div class="mx-imgBorder"] > ![Custom XML.](images/vpn-custom-xml-intune.png) -## Related articles - -- [VPN technical guide](vpn-guide.md) -- [VPN routing decisions](vpn-routing.md) -- [VPN authentication options](vpn-authentication.md) -- [VPN and conditional access](vpn-conditional-access.md) -- [VPN name resolution](vpn-name-resolution.md) -- [VPN auto-triggered profile options](vpn-auto-trigger-profile.md) -- [VPN security features](vpn-security-features.md) -- [VPN profile options](vpn-profile-options.md) diff --git a/windows/security/operating-system-security/network-security/vpn/vpn-guide.md b/windows/security/operating-system-security/network-security/vpn/vpn-guide.md index 3233517baa..c1c9ac3826 100644 --- a/windows/security/operating-system-security/network-security/vpn/vpn-guide.md +++ b/windows/security/operating-system-security/network-security/vpn/vpn-guide.md @@ -1,7 +1,7 @@ --- title: Windows VPN technical guide description: Learn how to plan and configure Windows devices for your organization's VPN solution. -ms.date: 05/06/2024 +ms.date: 01/27/2025 ms.topic: overview --- diff --git a/windows/security/operating-system-security/network-security/vpn/vpn-name-resolution.md b/windows/security/operating-system-security/network-security/vpn/vpn-name-resolution.md index 666f60d6c1..36074af74a 100644 --- a/windows/security/operating-system-security/network-security/vpn/vpn-name-resolution.md +++ b/windows/security/operating-system-security/network-security/vpn/vpn-name-resolution.md @@ -1,7 +1,7 @@ --- title: VPN name resolution description: Learn how name resolution works when using a VPN connection. -ms.date: 05/06/2024 +ms.date: 01/27/2025 ms.topic: concept-article --- @@ -58,14 +58,3 @@ The fields in **Add or edit DNS rule** in the Intune profile correspond to the X | **Name** | **VPNv2/*ProfileName*/DomainNameInformationList/*dniRowId*/DomainName** | | **Servers (comma separated)** | **VPNv2/*ProfileName*/DomainNameInformationList/*dniRowId*/DnsServers** | | **Proxy server** | **VPNv2/*ProfileName*/DomainNameInformationList/*dniRowId*/WebServers** | - -## Related articles - -- [VPN technical guide](vpn-guide.md) -- [VPN connection types](vpn-connection-type.md) -- [VPN routing decisions](vpn-routing.md) -- [VPN authentication options](vpn-authentication.md) -- [VPN and conditional access](vpn-conditional-access.md) -- [VPN auto-triggered profile options](vpn-auto-trigger-profile.md) -- [VPN security features](vpn-security-features.md) -- [VPN profile options](vpn-profile-options.md) \ No newline at end of file diff --git a/windows/security/operating-system-security/network-security/vpn/vpn-office-365-optimization.md b/windows/security/operating-system-security/network-security/vpn/vpn-office-365-optimization.md index aced17dd8e..02b7c5daff 100644 --- a/windows/security/operating-system-security/network-security/vpn/vpn-office-365-optimization.md +++ b/windows/security/operating-system-security/network-security/vpn/vpn-office-365-optimization.md @@ -2,7 +2,7 @@ title: Optimize Microsoft 365 traffic for remote workers with the Windows VPN client description: Learn how to optimize Microsoft 365 traffic for remote workers with the Windows VPN client ms.topic: how-to -ms.date: 05/06/2024 +ms.date: 01/27/2025 --- # Optimize Microsoft 365 traffic for remote workers with the Windows VPN client diff --git a/windows/security/operating-system-security/network-security/vpn/vpn-profile-options.md b/windows/security/operating-system-security/network-security/vpn/vpn-profile-options.md index 4fdbb86971..43f5802163 100644 --- a/windows/security/operating-system-security/network-security/vpn/vpn-profile-options.md +++ b/windows/security/operating-system-security/network-security/vpn/vpn-profile-options.md @@ -1,7 +1,7 @@ --- title: VPN profile options description: Windows adds Virtual Private Network (VPN) profile options to help manage how users connect. VPNs give users secure remote access to the company network. -ms.date: 05/06/2024 +ms.date: 01/27/2025 ms.topic: how-to --- @@ -316,13 +316,3 @@ After you configure the settings that you want using ProfileXML, you can create - [VPNv2 configuration service provider (CSP) reference](/windows/client-management/mdm/vpnv2-csp) - [How to Create VPN Profiles in Configuration Manager](/previous-versions/system-center/system-center-2012-R2/dn261200(v=technet.10)) -## Related articles - -- [VPN technical guide](vpn-guide.md) -- [VPN connection types](vpn-connection-type.md) -- [VPN routing decisions](vpn-routing.md) -- [VPN authentication options](vpn-authentication.md) -- [VPN and conditional access](vpn-conditional-access.md) -- [VPN name resolution](vpn-name-resolution.md) -- [VPN auto-triggered profile options](vpn-auto-trigger-profile.md) -- [VPN security features](vpn-security-features.md) diff --git a/windows/security/operating-system-security/network-security/vpn/vpn-routing.md b/windows/security/operating-system-security/network-security/vpn/vpn-routing.md index e5f0bc3f68..6bbae9aa58 100644 --- a/windows/security/operating-system-security/network-security/vpn/vpn-routing.md +++ b/windows/security/operating-system-security/network-security/vpn/vpn-routing.md @@ -1,5 +1,5 @@ --- -ms.date: 05/06/2024 +ms.date: 01/27/2025 title: VPN routing decisions description: Learn about approaches that either send all data through a VPN or only selected data. The one you choose impacts capacity planning and security expectations. ms.topic: concept-article @@ -43,14 +43,3 @@ When you configure a VPN profile in Microsoft Intune, you can enable split tunne ![split tunnel.](images/vpn-split.png) Once enabled, you can add the routes that should use the VPN connection. - -## Related articles - -- [VPN technical guide](vpn-guide.md) -- [VPN connection types](vpn-connection-type.md) -- [VPN authentication options](vpn-authentication.md) -- [VPN and conditional access](vpn-conditional-access.md) -- [VPN name resolution](vpn-name-resolution.md) -- [VPN auto-triggered profile options](vpn-auto-trigger-profile.md) -- [VPN security features](vpn-security-features.md) -- [VPN profile options](vpn-profile-options.md) \ No newline at end of file diff --git a/windows/security/operating-system-security/network-security/vpn/vpn-security-features.md b/windows/security/operating-system-security/network-security/vpn/vpn-security-features.md index 0ca87d7370..2e53eeeae5 100644 --- a/windows/security/operating-system-security/network-security/vpn/vpn-security-features.md +++ b/windows/security/operating-system-security/network-security/vpn/vpn-security-features.md @@ -1,7 +1,7 @@ --- title: VPN security features description: Learn about security features for VPN, including LockDown VPN and traffic filters. -ms.date: 05/06/2024 +ms.date: 01/27/2025 ms.topic: concept-article --- @@ -55,14 +55,3 @@ A VPN profile configured with LockDown secures the device to only allow network > [!CAUTION] > Be careful when deploying LockDown VPN, as the resultant connection won't be able to send or receive any network traffic without the VPN connection being established. - -## Related articles - -- [VPN technical guide](vpn-guide.md) -- [VPN connection types](vpn-connection-type.md) -- [VPN routing decisions](vpn-routing.md) -- [VPN authentication options](vpn-authentication.md) -- [VPN and conditional access](vpn-conditional-access.md) -- [VPN name resolution](vpn-name-resolution.md) -- [VPN auto-triggered profile options](vpn-auto-trigger-profile.md) -- [VPN profile options](vpn-profile-options.md) diff --git a/windows/security/threat-protection/index.md b/windows/security/threat-protection/index.md index 68fce9d079..0409ddfbb3 100644 --- a/windows/security/threat-protection/index.md +++ b/windows/security/threat-protection/index.md @@ -25,7 +25,7 @@ See the following articles to learn more about the different areas of Windows th - [Virtualization-Based Protection of Code Integrity](../hardware-security/enable-virtualization-based-protection-of-code-integrity.md) - [Web Protection](/microsoft-365/security/defender-endpoint/web-protection-overview) - [Windows Firewall](../operating-system-security/network-security/windows-firewall/index.md) -- [Windows Sandbox](../application-security/application-isolation/windows-sandbox/windows-sandbox-overview.md) +- [Windows Sandbox](../application-security/application-isolation/windows-sandbox/index.md) ## Next-generation protection diff --git a/windows/whats-new/deprecated-features.md b/windows/whats-new/deprecated-features.md index 568b781fc7..4b2f886e48 100644 --- a/windows/whats-new/deprecated-features.md +++ b/windows/whats-new/deprecated-features.md @@ -1,7 +1,7 @@ --- title: Deprecated features in the Windows client description: Review the list of features that Microsoft is no longer actively developing in Windows 10 and Windows 11. -ms.date: 12/12/2024 +ms.date: 01/24/2025 ms.service: windows-client ms.subservice: itpro-fundamentals ms.localizationpriority: medium @@ -57,7 +57,7 @@ The features in this article are no longer being actively developed, and might b | NPLogonNotify and NPPasswordChangeNotify APIs | Starting in Windows 11, version 24H2, the inclusion of password payload in MPR notifications is set to disabled by default through group policy in [NPLogonNotify](/windows/win32/api/npapi/nf-npapi-nplogonnotify) and [NPPasswordChangeNotify](/windows/win32/api/npapi/nf-npapi-nppasswordchangenotify) APIs. The APIs may be removed in a future release. The primary reason for disabling this feature is to enhance security. When enabled, these APIs allow the caller to retrieve a user's password, presenting potential risks for password exposure and harvesting by malicious users. To include password payload in MPR notifications, set the [EnableMPRNotifications](/windows/client-management/mdm/policy-csp-windowslogon#enablemprnotifications) policy to `enabled`.| March 2024 | | TLS server authentication certificates using RSA keys with key lengths shorter than 2048 bits | Support for certificates using RSA keys with key lengths shorter than 2048 bits will be deprecated. Internet standards and regulatory bodies disallowed the use of 1024-bit keys in 2013, recommending specifically that RSA keys should have a key length of 2048 bits or longer. For more information, see [Transitioning of Cryptographic Algorithms and Key Sizes - Discussion Paper (nist.gov)](https://csrc.nist.gov/CSRC/media/Projects/Key-Management/documents/transitions/Transitioning_CryptoAlgos_070209.pdf). This deprecation focuses on ensuring that all RSA certificates used for TLS server authentication must have key lengths greater than or equal to 2048 bits to be considered valid by Windows.

TLS certificates issued by enterprise or test certification authorities (CA) aren't impacted with this change. However, we recommend that they be updated to RSA keys greater than or equal to 2048 bits as a security best practice. This change is necessary to preserve security of Windows customers using certificates for authentication and cryptographic purposes.| March 2024| | Test Base | [Test Base for Microsoft 365](/microsoft-365/test-base/overview), an Azure cloud service for application testing, is deprecated. The service will be retired in the future and will be no longer available for use after retirement. | March 2024 | -| Windows Mixed Reality | [Windows Mixed Reality](/windows/mixed-reality/enthusiast-guide/before-you-start) is deprecated and will be removed in Windows 11, version 24H2. This deprecation includes the [Mixed Reality Portal](/windows/mixed-reality/enthusiast-guide/install-windows-mixed-reality) app, [Windows Mixed Reality for SteamVR](/windows/mixed-reality/enthusiast-guide/using-steamvr-with-windows-mixed-reality), and Steam VR Beta. Existing Windows Mixed Reality devices will continue to work with Steam through November 2026, if users remain on their current released version of Windows 11, version 23H2. After November 2026, Windows Mixed Reality will no longer receive security updates, nonsecurity updates, bug fixes, technical support, or online technical content updates.

This deprecation doesn't affect HoloLens. We remain committed to HoloLens and our enterprise customers. | December 2023 | +| Windows Mixed Reality | [Windows Mixed Reality](/windows/mixed-reality/enthusiast-guide/before-you-start) is deprecated and will be removed in Windows 11, version 24H2. This deprecation includes the [Mixed Reality Portal](/windows/mixed-reality/enthusiast-guide/install-windows-mixed-reality) app, [Windows Mixed Reality for SteamVR](/windows/mixed-reality/enthusiast-guide/using-steamvr-with-windows-mixed-reality), and Steam VR Beta. Existing Windows Mixed Reality devices will continue to work with Steam through November 2026, if users remain on their current released version of Windows 11, version 23H2. After November 2026, Windows Mixed Reality will no longer receive security updates, nonsecurity updates, bug fixes, technical support, or online technical content updates. | December 2023 | | Microsoft Defender Application Guard for Edge | [Microsoft Defender Application Guard](/windows/security/application-security/application-isolation/microsoft-defender-application-guard/md-app-guard-overview), including the [Windows Isolated App Launcher APIs](/windows/win32/api/isolatedapplauncher/), is deprecated for Microsoft Edge for Business and [will no longer be updated](feature-lifecycle.md). To learn more about Edge for Business security capabilities, see [Microsoft Edge security for your business](/deployedge/ms-edge-security-for-business).

**[Update - October 2024]**: Starting with Windows 11, version 24H2, Microsoft Defender Application Guard, including the [Windows Isolated App Launcher APIs](/windows/win32/api/isolatedapplauncher/), is no longer available.

**[Update - April 2024]**: Because Application Guard is deprecated there will not be a migration to Edge Manifest V3. The corresponding extensions and associated Windows Store app will not be available after May 2024. This affects the following browsers: *Application Guard Extension - Chrome* and *Application Guard Extension - Firefox*. If you want to block unprotected browsers until you are ready to retire MDAG usage in your enterprise, we recommend using AppLocker policies or [Microsoft Edge management service](/deployedge/microsoft-edge-management-service). For more information, see [Microsoft Edge and Microsoft Defender Application Guard](/deployedge/microsoft-edge-security-windows-defender-application-guard). | December 2023 | | Legacy console mode | The [legacy console mode](/windows/console/legacymode) is deprecated and no longer being updated. In future Windows releases, it will be available as an optional [Feature on Demand](/windows-hardware/manufacture/desktop/features-on-demand-v2--capabilities). This feature won't be installed by default. | December 2023 | | Windows speech recognition | [Windows speech recognition](https://support.microsoft.com/windows/83ff75bd-63eb-0b6c-18d4-6fae94050571) is deprecated and is no longer being developed. This feature is being replaced with [voice access](https://support.microsoft.com/topic/4dcd23ee-f1b9-4fd1-bacc-862ab611f55d). Voice access is available for Windows 11, version 22H2, or later devices. Currently, voice access supports five English locales: English - US, English - UK, English - India, English - New Zealand, English - Canada, and English - Australia. For more information, see [Setup voice access](https://support.microsoft.com/topic/set-up-voice-access-9fc44e29-12bf-4d86-bc4e-e9bb69df9a0e). | December 2023 | diff --git a/windows/whats-new/extended-security-updates.md b/windows/whats-new/extended-security-updates.md index de53336b4b..306de5a2a9 100644 --- a/windows/whats-new/extended-security-updates.md +++ b/windows/whats-new/extended-security-updates.md @@ -8,7 +8,7 @@ author: mestew manager: aaroncz ms.localizationpriority: medium ms.topic: conceptual -ms.date: 11/01/2023 +ms.date: 01/21/2025 ms.collection: - highpri - tier2 @@ -43,15 +43,17 @@ The following are frequently asked questions about the ESU program for Windows 1 ### How much does ESU cost? -Final pricing and enrollment conditions will be made available closer to the October 2025 date for end of support, approximately one year before the end of support for Windows 10. ESU will be free for all Windows 365 customers. For more information about Windows 365, see [What is Windows 365?](/windows-365/overview). +Extended Security Updates for Windows 10 can be purchased today through the Microsoft Volume Licensing Program, at $61 USD per device for Year One. For more information, see [When to use Windows 10 Extended Security Updates](https://techcommunity.microsoft.com/blog/windows-itpro-blog/when-to-use-windows-10-extended-security-updates/4102628). The price doubles every consecutive year, for a maximum of three years. ESU is available at no additional cost for Windows 10 virtual machines running in Windows 365 or Azure Virtual Desktop. Additionally, Windows 10 endpoints connecting to Windows 365 Cloud PCs will be entitled to the ESU for up to three years, with an active Windows 365 subscription license. For more information about Windows 365, see [What is Windows 365?](/windows-365/overview). + ### Is there a minimum license purchase requirement for Windows 10 ESU? -There are no minimum license purchase requirements for Windows 10 ESU. +The minimum license purchase requirements for Windows 10 ESU is one license. ### Can ESUs be purchased for a specific duration? -Customers can't buy partial periods, for instance, only six months. Extended Security Updates are transacted per year (12-month period), starting with the end of support date. +The Extended Security Update Program for Windows 10 must be purchased by year. Customers can't buy partial periods, for instance, only six months. Year One starts in November 2025. If you decide to purchase the program in Year Two, you'll have to pay for Year One too, as ESUs are cumulative. + ### When will the ESU offer be available for licensing?