The installer runs, the window opens and the sign-in prompt appears, so the migration looks finished. Then the tunnel fails at the point where the client needs its virtual adapter, and the error mentions a service or driver rather than credentials. On Windows on Arm this sequence is common, because the compatibility rule changes between user-mode code and kernel-mode code. Approving a laptop needs the second check, not the first.

Ask for the architecture of the whole package, then verify it on the machine.

The Part That Emulation Does Not Cover

Windows on Arm can run x86 and x64 applications through emulation while they stay in user mode. Kernel-mode components do not get that treatment: a driver must be built for Arm64 to load at all. Microsoft documents the boundary, and it is exactly where VPN clients tend to sit, because many of them install a virtual network adapter or a filter driver.

So a package can present a working interface and still be unusable. The failure appears as a missing adapter, a service that will not start or a tunnel that never establishes. That is the point at which a pilot should stop. A sign-in screen is not evidence of a working data path.

Three Conditions That Decide the Migration

The first is the package. An x64 build and an Arm64 build are both called 64-bit and are not interchangeable, so a download described only as Windows 64-bit proves nothing about an Arm device. The vendor's supported installer for that architecture is the only acceptable starting point.

The second is the rest of the required components. Device posture checks, browser-based authentication helpers and smart-card middleware may each have their own architecture requirement, and a tunnel-only success does not show that the organisation's access policy is satisfied.

The third is the gateway and its supported client set. If the approved client has no Arm build, a different client is acceptable only where the gateway owner supports that client protocol, its authentication method and its policy behaviour. A built-in Windows VPN profile cannot stand in for a proprietary client just because both are described as IPsec.

Read the Architecture on the Device

Confirm what the machine is, then look at which drivers the package actually installed. Enumeration takes a minute and prevents an argument about what "64-bit" means.

Get-CimInstance Win32_OperatingSystem | Select-Object OSArchitecture
$env:PROCESSOR_ARCHITECTURE
pnputil /enum-drivers | Select-String -Pattern 'vpn|tap|wintun' -Context 0,3
Get-NetAdapter | Format-Table Name,InterfaceDescription,DriverProvider

If the adapter list shows nothing for the client, or the driver entry reports an architecture mismatch, the migration stops there. Dropping an Arm64 driver into the old container is not something the vendor supports, and compatibility-mode settings do not convert an x64 kernel driver.

Compare the installed version with the vendor's supported list for Arm, and note the difference if the installer came from an internal repository rather than the vendor.

Approve the Workload, Not the Login Screen

Run the pilot with the previous working device available as a fallback. Verify profile provisioning, the intended identity and any device checks, then exercise the private application rather than only the tunnel status.

Include private DNS, the required routes and address families, reconnection after a network change and the specified disconnected state. Record client and component versions with the result, because the next update will ask the same questions again.

Finally, confirm that supported update and removal paths exist for this platform. A package that works only after undocumented substitutions creates the same migration problem at the next release, with less time to solve it.

Pennadoù liammet