Skip to content

Commit fad16f5

Browse files
mattwojomarswe
andauthored
Add ARM64EC doc (#1661)
* Slight tweaks to Windows 10 on ARM intro * Adding QC and ARM reference links * Updating blog link from preview to official release * Rearrange links on homepage * Adding Developer Kit link * Add ARM64 EC doc * Add to TOC * Add local author metadata * Remove extra text * fix sdk link, reorg * update vs link * Update with get started instructions * Update intro and prereqs * Correct SDK text * Update sdk text * Update arm64ec.md Rely more on the blog for now * General text updates and date refreshes * Update apps-on-arm-troubleshooting-x86.md Only link to ARM64EC once in the beginning of the x86 troubleshooting, since it's just a suggested idea Co-authored-by: Marc Sweetgall <[email protected]>
1 parent dca3ca6 commit fad16f5

11 files changed

+122
-65
lines changed

landing/arm-docs/TOC.md

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# [Windows 10 on ARM](/windows/arm)
2+
## [ARM64EC for Windows 11 apps on ARM](/windows/uwp/porting/arm64ec)
23
## [Windows 10 apps on ARM](/windows/uwp/porting/apps-on-arm)
34
### [How x86 emulation works on ARM](/windows/uwp/porting/apps-on-arm-x86-emulation)
45
### [Troubleshooting x86 apps on ARM](/windows/uwp/porting/apps-on-arm-troubleshooting-x86)

landing/arm-docs/index.yml

+17-16
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,28 @@
11
### YamlMime:Landing
22

3-
title: Windows 10 on ARM documentation # < 60 chars
4-
summary: Windows 10 runs on PCs powered by ARM processors. This page provides the information for you to learn more about the platform and get started developing apps. # < 160 chars
3+
title: Windows on ARM documentation
4+
summary: Windows runs on PCs powered by ARM processors. This page provides the information for you to learn more about the platform and get started developing apps. # < 160 chars
55

66
metadata:
7-
title: Windows 10 on ARM documentation # Required; page title displayed in search results. Include the brand. < 60 chars.
8-
description: This page provides the information for you to get started developing ARM64 win32 and UWP apps. # Required; article description that is displayed in search results. < 160 chars.
9-
ms.service: guidance #Required; service per approved list. service slug assigned to your service by ACOM.
10-
ms.topic: landing-page # Required
11-
author: hickeys #Required; your GitHub user alias, with correct capitalization.
12-
ms.author: hickeys #Required; microsoft alias of author; optional team alias.
13-
ms.date: 05/08/2018 #Required; mm/dd/yyyy format.
7+
title: Windows on ARM documentation
8+
description: This page provides the information for you to get started developing ARM64 win32 and UWP apps.
9+
ms.service: guidance
10+
ms.topic: landing-page
11+
author: mattwojo
12+
ms.author: mattwoj
13+
ms.date: 06/25/2021
1414
ms.localizationpriority: medium
1515

1616
# linkListType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | sample | tutorial | video | whats-new
1717

1818
landingContent:
1919
# Cards and links should be based on top customer tasks or top subjects
2020
# Start card title with a verb
21-
# Card (optional)
22-
- title: About Windows 10 on ARM
21+
- title: About Windows on ARM
2322
linkLists:
2423
- linkListType: overview
2524
links:
26-
- text: Windows 10 on ARM
25+
- text: Windows on ARM
2726
url: /windows/uwp/porting/apps-on-arm
2827
- linkListType: learn
2928
links:
@@ -37,10 +36,12 @@ landingContent:
3736
url: https://channel9.msdn.com/Events/Build/2018/BRK2438
3837

3938
# Card
40-
- title: Develop for Windows 10 on ARM
39+
- title: Develop for Windows on ARM
4140
linkLists:
4241
- linkListType: how-to-guide
4342
links:
43+
- text: ARM64EC for Windows 11 apps on ARM
44+
url: /windows/uwp/porting/arm64ec
4445
- text: Build ARM64 apps with the SDK
4546
url: https://blogs.windows.com/windowsdeveloper/2018/11/15/official-support-for-windows-10-on-arm-development/
4647
- text: Build ARM64 Drivers with the WDK
@@ -61,13 +62,13 @@ landingContent:
6162
url: https://developer.qualcomm.com/hardware/windows-on-snapdragon/snapdragon-developer-kit
6263

6364
# Card
64-
- title: Any feedback?
65+
- title: Feedback
6566
linkLists:
6667
- linkListType: reference
6768
links:
6869
- text: Use the feedback hub
6970
url: feedback-hub://?tabid=2&contextid=803
7071
- text: Report a bug
7172
url: mailto:[email protected]
72-
- text: Give doc feedback
73-
url: https://github.com/MicrosoftDocs/windows-uwp/tree/docs/landing/arm-docs
73+
- text: Provide documentation feedback
74+
url: https://github.com/MicrosoftDocs/windows-uwp/issues

windows-apps-src/develop/toc.yml

+2
Original file line numberDiff line numberDiff line change
@@ -1387,6 +1387,8 @@
13871387
- name: Windows 10 on ARM
13881388
href: ../porting/apps-on-arm.md
13891389
items:
1390+
- name: ARM64EC for Windows 11 apps on ARM
1391+
href: ../porting/arm64ec.md
13901392
- name: How x86 emulation works on ARM
13911393
href: ../porting/apps-on-arm-x86-emulation.md
13921394
- name: Troubleshooting desktop x86 apps

windows-apps-src/porting/apps-on-arm-program-compat-troubleshooter.md

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
---
22
title: Program Compatibility Troubleshooter on ARM
3-
43
description: Guidance for adjusting compatibility settings if your app isn't working correctly on ARM
5-
ms.date: 02/15/2018
4+
ms.date: 06/25/2021
65
ms.topic: article
7-
keywords: windows 10 s, always connected, compatibility troubleshooter, windows on ARM
6+
keywords: windows, always connected, compatibility troubleshooter, windows on ARM
87
ms.localizationpriority: medium
98
---
9+
1010
# Program Compatibility Troubleshooter on ARM
11-
Emulation to support x86 apps is a new feature created for Windows 10 on ARM64. Sometimes the emulation performs optimizations that don't result in the best experience. You can use the Program Compatibility Troubleshooter to toggle emulation settings for your x86 app, reducing the default optimizations and potentially increasing compatibility.
11+
12+
Emulation to support x86 apps is a new feature created for Windows on ARM64. Sometimes the emulation performs optimizations that don't result in the best experience. You can use the Program Compatibility Troubleshooter to toggle emulation settings for your x86 app, reducing the default optimizations and potentially increasing compatibility.
1213

1314
## Start the Program Compatibility Troubleshooter
14-
You start the [Program Compatibility Troubleshooter](https://support.microsoft.com/help/15078/windows-make-older-programs-compatible) manually in the same way on any Windows 10 PC: right-click an executable (.exe) file and select **Troubleshoot compatibility**. This screen appears.
15+
16+
You start the [Program Compatibility Troubleshooter](https://support.microsoft.com/help/15078/windows-make-older-programs-compatible) manually in the same way on any Windows PC: right-click an executable (.exe) file and select **Troubleshoot compatibility**. This screen appears.
1517

1618
![Screenshot of the Troubleshoot compatibility options.](images/arm/Capture4.png)
1719

1820
If you click on **Troubleshoot program** you will be presented with the following options.
1921

2022
![Screenshot of the What problems do you notice options.](images/arm/Capture5.png)
2123

22-
All options enable the settings that are applicable and applied on all Windows 10 Desktop PCs. In addition, the first, second, and fourth options apply the [Disable application cache](#disable-app-cache) and [Disable hybrid execution mode](#disable-hybrid-exec-mode) emulation settings.
24+
All options enable the settings that are applicable and applied on Windows Desktop PCs. In addition, the first, second, and fourth options apply the [Disable application cache](#disable-app-cache) and [Disable hybrid execution mode](#disable-hybrid-exec-mode) emulation settings.
2325

2426
## Toggling emulation settings
27+
2528
> [!WARNING]
2629
> Changing emulation settings may result in your application unexpectedly crashing or not launching at all.
2730
@@ -52,4 +55,4 @@ You can also select multi-core settings, as shown here.
5255

5356
These settings change the number of memory barriers used to synchronize memory accesses between cores in apps during emulation. **Fast** is the default mode, but the **strict** and **very strict** options will increase the number of barriers. This slows down the app, but reduces the risk of app errors. The **single-core** option removes all barriers but forces all app threads to run on a single core.
5457

55-
If changing a specific setting resolves your issue, please email *[email protected]* with details, so that we may incorporate your feedback.
58+
If changing a specific setting resolves your issue, please email *[email protected]* with details, so that we may incorporate your feedback.

windows-apps-src/porting/apps-on-arm-troubleshooting-arm32.md

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
---
22
title: Troubleshooting ARM32 UWP apps
33
description: Common issues with ARM32 apps when running on ARM, and how to fix them.
4-
ms.date: 01/03/2019
4+
ms.date: 06/25/2021
55
ms.topic: article
6-
keywords: windows 10 s, always connected, ARM32 apps on ARM, windows 10 on ARM, troubleshooting
6+
keywords: windows, always connected, ARM32 apps on ARM, windows 10 on ARM, troubleshooting
77
ms.localizationpriority: medium
88
---
99

@@ -14,14 +14,16 @@ If your ARM32 or ARM64 UWP app isn't working correctly on ARM, here's some guida
1414
>[!NOTE]
1515
> To build your UWP application to natively target the ARM64 platform, you must have Visual Studio 2017 version 15.9 or later, or Visual Studio 2019. For more information, see [this blog post](https://blogs.windows.com/buildingapps/2018/11/15/official-support-for-windows-10-on-arm-development).
1616
17-
1817
## Common issues
18+
1919
Here are some common issues to keep in mind when troubleshooting ARM32 and ARM64 apps.
2020

2121
### Using Windows 10 Mobile-only APIs on ARM-based processors
22+
2223
ARM apps may run into problems when using mobile-only APIs (for example, **HardwareButtons**). To mitigate this, you can dynamically detect whether your app is running on Windows 10 Mobile before calling these APIs. Follow the guidance in the blog post, [Dynamically detecting features with API contracts](https://blogs.windows.com/buildingapps/2015/09/15/dynamically-detecting-features-with-api-contracts-10-by-10/).
2324

2425
### Including dependencies not supported by UWP apps
26+
2527
Universal Windows Platform (UWP) apps that aren't properly built with Visual Studio and the UWP SDK may have dependencies on OS components that aren't available to ARM apps running on an ARM64 system. Examples of these dependencies include:
2628

2729
- Expecting parts of the .NET Framework to be available.
@@ -32,10 +34,12 @@ These issues can be resolved by: removing the unavailable dependencies and rebui
3234
For more info on .NET APIs available for UWP apps, see [.NET for UWP apps](/dotnet/api/index?view=dotnet-uwp-10.0&preserve-view=true)
3335

3436
### Compiling an app with an older version of Visual Studio and SDK
37+
3538
If you're running into issues, be sure to use the latest versions of Microsoft Visual Studio and the Windows SDK to compile your app. Apps compiled with an earlier version of Visual Studio and the SDK may have issues that have been fixed in later versions.
3639

3740
## Debugging
41+
3842
You can use existing tools for developing apps for the ARM platform. Here are some helpful resources.
3943

4044
- Visual Studio 15.5 Preview 1 and later supports running ARM32 apps by using Universal Authentication mode. This automatically bootstraps the necessary remote debugging tools.
41-
- See [Debugging on ARM64](/windows-hardware/drivers/debugger/debugging-arm64) to learn more about tools and strategies for debugging on ARM.
45+
- See [Debugging on ARM64](/windows-hardware/drivers/debugger/debugging-arm64) to learn more about tools and strategies for debugging on ARM.

windows-apps-src/porting/apps-on-arm-troubleshooting-x86.md

+14-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
---
22
title: Troubleshooting x86 desktop apps
33
description: Learn how to troubleshoot and fix common issues with an x86 desktop app running on ARM64 including information about drivers, shell extensions, and debugging.
4-
ms.date: 05/09/2018
4+
ms.date: 06/25/2021
55
ms.topic: article
6-
keywords: windows 10 s, always connected, x86 emulation on ARM, troubleshooting
6+
keywords: windows, x86, ARM64, always connected, x86 emulation on ARM, troubleshooting
77
ms.localizationpriority: medium
88
---
9+
910
# Troubleshooting x86 desktop apps
11+
1012
>[!IMPORTANT]
11-
> The ARM64 SDK is now available as part of Visual Studio 2017 15.9 or Visual Studio 2019. We recommend that you recompile your app to ARM64 so that your app runs at full native speed. For more info, see the [Visual Studio support for Windows 10 on ARM development](https://blogs.windows.com/windowsdeveloper/2018/11/15/official-support-for-windows-10-on-arm-development/) blog post.
13+
> With Visual Studio 2017 or later, it is possible recompile your app to ARM64 or ARM64EC so that your app runs at full native speed. For more info about compiling as ARM64, see the blog post: [Official support for Windows 10 on ARM development](https://blogs.windows.com/buildingapps/2018/11/15/official-support-for-windows-10-on-arm-development). For information about ARM64EC, see [Announcing ARM64EC: Building Native and Interoperable Apps for Windows 11 on ARM](https://aka.ms/arm64ecannounceblog).
1214
1315
If an x86 desktop app doesn't work the way it does on an x86 machine, here's some guidance to help you troubleshoot.
1416

@@ -20,6 +22,7 @@ If an x86 desktop app doesn't work the way it does on an x86 machine, here's som
2022
| Your x86 app does not work as expected. | Try using the Compatibility Troubleshooter by following guidance from [Program Compatibility Troubleshooter on ARM](apps-on-arm-program-compat-troubleshooter.md). For some other troubleshooting steps, see the [Troubleshooting x86 apps on ARM](apps-on-arm-troubleshooting-x86.md) article. |
2123

2224
## Best practices for WOW
25+
2326
One common problem occurs when an app discovers that it's running under WOW and then assumes that it is on an x64 system. Having made this assumption, the app may do the following:
2427

2528
- Try to install the x64 version of itself, which isn't supported on ARM.
@@ -30,19 +33,24 @@ Generally, an app should not make assumptions about the host system when it is d
3033

3134
An app may place registry keys under the native registry view, or perform functions based on the presence of WOW. The original **IsWow64Process** indicates only whether the app is running on an x64 machine. Apps should now use [IsWow64Process2](/windows/desktop/api/wow64apiset/nf-wow64apiset-iswow64process2) to determine whether they're running on a system with WOW support.
3235

33-
## Drivers
36+
## Drivers
37+
3438
All kernel-mode drivers, [User-Mode Driver Framework (UMDF)](/windows-hardware/drivers/wdf/overview-of-the-umdf) drivers, and print drivers must be compiled to match the architecture of the OS. If an x86 app has a driver, then that driver must be recompiled for ARM64. The x86 app may run fine under emulation however, its driver will need to be recompiled for ARM64 and any app experience that depends on the driver will not be available. For more info about compiling your driver for ARM64, see [Building ARM64 Drivers with the WDK](/windows-hardware/drivers/develop/building-arm64-drivers).
3539

36-
## Shell extensions
37-
Apps that try to hook Windows components or load their DLLs into Windows processes will need to recompile those DLLs to match the architecture of the system; i.e. ARM64. Typically, these are used by input method editors (IMEs), assistive technologies, and shell extension apps (for example, to show cloud storage icons in Explorer or a right click Context menu). To learn how to recompile your apps or DLLs to ARM64, see the [Early preview of Visual Studio support for Windows 10 on ARM development](https://blogs.windows.com/buildingapps/2018/05/08/visual-studio-support-for-windows-10-on-arm-development/) blog post.
40+
## Shell extensions
41+
42+
Apps that try to hook Windows components or load their DLLs into Windows processes will need to recompile those DLLs to match the architecture of the system; i.e. ARM64. Typically, these are used by input method editors (IMEs), assistive technologies, and shell extension apps (for example, to show cloud storage icons in Explorer or a right click Context menu). To learn how to recompile your apps or DLLs to ARM64, see the [Early preview of Visual Studio support for Windows 10 on ARM development](https://blogs.windows.com/buildingapps/2018/05/08/visual-studio-support-for-windows-10-on-arm-development/) blog post.
3843

3944
## Debugging
45+
4046
To investigate your app's behavior in more depth, see [Debugging on ARM](/windows-hardware/drivers/debugger/debugging-arm64) to learn more about tools and strategies for debugging on ARM.
4147

4248
## Virtual Machines
49+
4350
The Windows Hypervisor platform is not supported on the Qualcomm Snapdragon 835 Mobile PC Platform. Hence, running virtual machines using Hyper-V will not work. We continue to make investments in these technologies on future Qualcomm chipsets.
4451

4552
## Dynamic Code Generation
53+
4654
X86 desktop apps are emulated on ARM64 by the system generating ARM64 instructions at runtime. This means if an x86 desktop app prevents dynamic code generation or modification in its process, that app cannot be supported to run as x86 on ARM64.
4755

4856
This is a security mitigation some apps enable on their process using [SetProcessMitigationPolicy](/windows/desktop/api/processthreadsapi/nf-processthreadsapi-setprocessmitigationpolicy) API with the `ProcessDynamicCodePolicy` flag. To run successfully on ARM64 as an x86 process, this mitigation policy will have to be disabled.

windows-apps-src/porting/apps-on-arm-x86-emulation.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
title: How x86 and ARM32 emulation work on ARM
33

44
description: Learn how emulation for x86 apps makes the rich ecosystem of existing Win32 apps available on ARM devices.
5-
ms.date: 02/15/2018
5+
ms.date: 06/25/2021
66
ms.topic: article
7-
keywords: windows 10 s, always connected, x86 emulation on ARM
7+
keywords: windows, arm64, x86, always connected, x86 emulation on ARM
88
ms.localizationpriority: medium
99
---
10+
1011
# How x86 emulation works on ARM
11-
Emulation for x86 apps makes the rich ecosystem of Win32 apps available on ARM. This provides the user the magical experience of running an existing x86 win32 app without any modifications to the app. The app doesn’t even know that it is running on a Windows on ARM PC, unless it calls specific APIs ([IsWoW64Process2](/windows/desktop/api/wow64apiset/nf-wow64apiset-iswow64process2)).
1212

13-
The [WOW64](/windows/desktop/WinProg64/running-32-bit-applications) layer of Windows 10 allows x86 code to run on the ARM64 version of Windows 10. x86 emulation works by compiling blocks of x86 instructions into ARM64 instructions with optimizations to improve performance. A service caches these translated blocks of code to reduce the overhead of instruction translation and allow for optimization when the code runs again. The caches are produced for each module so that other apps can make use of them on first launch.
13+
Emulation for x86 apps makes the rich ecosystem of Win32 apps available on ARM. This provides the user the magical experience of running an existing x86 win32 app without any modifications to the app. The app doesn’t even know that it is running on a Windows on ARM PC, unless it calls specific APIs ([IsWoW64Process2](/windows/desktop/api/wow64apiset/nf-wow64apiset-iswow64process2)).
1414

15-
For more details about these technologies, see the [Windows 10 on ARM](https://channel9.msdn.com/Events/Build/2017/P4171) Channel9 video.
15+
The [WOW64](/windows/desktop/WinProg64/running-32-bit-applications) layer of Windows allows x86 code to run on the ARM64 version of Windows. x86 emulation works by compiling blocks of x86 instructions into ARM64 instructions with optimizations to improve performance. A service caches these translated blocks of code to reduce the overhead of instruction translation and allow for optimization when the code runs again. The caches are produced for each module so that other apps can make use of them on first launch.

0 commit comments

Comments
 (0)