Skip to content

[ARM64] Fatal error 0xC000001D (Illegal Instruction) during Find-WinGetPackage / CreateCompositePackageCatalogOptions in PowerShell 7 (ARM64) #6599

Open

Description

@hyperfi

Relevant area(s)

WinGet CLI, PowerShell Module

Relevant command(s)

No response

Brief description of your issue

On Windows 11 ARM64 running native PowerShell 7 (ARM64), calling Find-WinGetPackage or using PowerToys Microsoft.WinGet.CommandNotFound causes an unhandled native crash terminating the process with:

Fatal error. 0xC000001D (STATUS_ILLEGAL_INSTRUCTION)

The crash occurs during COM/WinRT interop inside WinRT.ObjectReference.TryAs / ManagementDeploymentFactory.CreateCreateCompositePackageCatalogOptions when calling Marshal.QueryInterface.

Note:

  • The standard CLI winget search ... works as expected.
  • Get-WinGetVersion works as expected.
  • Find-WinGetPackage works inside Windows PowerShell 5.1 (x64 emulated via .NET Framework).
  • Find-WinGetPackage consistently crashes inside native PowerShell 7 ARM64 (.NET 8/9/10 CsWinRT projection).

Steps to reproduce

  1. Open native ARM64 PowerShell 7 (pwsh.exe) on a Windows 11 ARM64 machine.
  2. Run PowerShell without any user profile:
    pwsh -NoProfile
  3. Import the WinGet client module:
    Import-Module Microsoft.WinGet.Client
  4. Execute a package search query:
    Find-WinGetPackage -Query 'notepad' -Count 1
  5. Observe the immediate fatal crash (0xC000001D) and process exit.

Alternative trigger via PowerToys:

  1. In PowerToys Settings, enable the "Command Not Found" feature.
  2. Launch a normal PowerShell 7 session.
  3. Type any invalid/unknown command to invoke the module.
  4. The process immediately terminates with code 3221225501 (0xC000001D).

Expected behavior

  1. Find-WinGetPackage -Query 'notepad' -Count 1 should successfully search and return matching packages from the catalog without crashing.
  2. In PowerToys, when an unrecognized command is typed, Microsoft.WinGet.CommandNotFound should catch the event and suggest matching WinGet packages instead of crashing the shell.
  3. The PowerShell process (pwsh.exe) should remain running and not exit with fatal code 3221225501 (0xC000001D).

Actual behavior

The PowerShell process crashes instantly with an unhandled fatal illegal instruction error and exits with code 3221225501 (0xC000001D).

Terminal output and stack trace:

Fatal error.
0xC000001D
at System.Runtime.InteropServices.Marshal.QueryInterface(IntPtr, System.Guid ByRef, IntPtr ByRef)
at WinRT.ObjectReference1[[WinRT.Interop.IUnknownVftbl, Microsoft.WinGet.Client.Engine, Version=1.26.0.0, Culture=neutral, PublicKeyToken=null]].TryAs(WinRT.IObjectReference, System.Guid, WinRT.ObjectReference1<WinRT.Interop.IUnknownVftbl> ByRef)
at WinRT.IObjectReference.TryAs[[WinRT.Interop.IUnknownVftbl, Microsoft.WinGet.Client.Engine, Version=1.26.0.0, Culture=neutral, PublicKeyToken=null]](System.Guid, WinRT.ObjectReference1<WinRT.Interop.IUnknownVftbl> ByRef) at WinRT.IObjectReference.As[[WinRT.Interop.IUnknownVftbl, Microsoft.WinGet.Client.Engine, Version=1.26.0.0, Culture=neutral, PublicKeyToken=null]](System.Guid) at WinRT.IObjectReference.As(System.Guid) at Microsoft.Management.Deployment.CreateCompositePackageCatalogOptions..ctor(WinRT.IObjectReference) at ABI.Microsoft.Management.Deployment.CreateCompositePackageCatalogOptionsRcwFactoryAttribute.CreateInstance(WinRT.IInspectable) at WinRT.DefaultComWrappers.CreateObject(IntPtr) at WinRT.DefaultComWrappers.CreateObject(IntPtr, System.Runtime.InteropServices.CreateObjectFlags) at System.Runtime.InteropServices.ComWrappers.CreateAndRegisterObjectForComInstance(IntPtr, IntPtr, System.Runtime.InteropServices.CreateObjectFlags, System.Object, IntPtr ByRef) at System.Runtime.InteropServices.ComWrappers.TryGetOrCreateObjectForComInstanceInternal(IntPtr, IntPtr, System.Runtime.InteropServices.CreateObjectFlags, System.Object, System.Object, System.Object ByRef) at System.Runtime.InteropServices.ComWrappers.GetOrCreateObjectForComInstance(IntPtr, System.Runtime.InteropServices.CreateObjectFlags) at WinRT.ComWrappersSupport.CreateRcwForComObject[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](IntPtr, Boolean) at WinRT.ComWrappersSupport.CreateRcwForComObject[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](IntPtr) at WinRT.MarshalInspectable1[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].FromAbi(IntPtr)
at WinRT.MarshalInterface1[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].FromAbi(IntPtr) at Microsoft.WinGet.Client.Engine.Helpers.ManagementDeploymentFactory.Create[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Type, System.Guid ByRef) at Microsoft.WinGet.Client.Engine.Helpers.ManagementDeploymentFactory.CreateCreateCompositePackageCatalogOptions() at Microsoft.WinGet.Client.Engine.Commands.Common.FinderCommand.GetPackageCatalogReference(Microsoft.Management.Deployment.CompositeSearchBehavior) at Microsoft.WinGet.Client.Engine.Commands.Common.FinderCommand.GetPackageCatalog(Microsoft.Management.Deployment.CompositeSearchBehavior) at Microsoft.WinGet.Client.Engine.Commands.Common.FinderCommand.FindPackages(Microsoft.Management.Deployment.CompositeSearchBehavior, UInt32, Microsoft.Management.Deployment.PackageFieldMatchOption) at Microsoft.WinGet.Client.Engine.Commands.Common.FinderExtendedCommand.FindPackages(Microsoft.Management.Deployment.CompositeSearchBehavior, Microsoft.Management.Deployment.PackageFieldMatchOption) at Microsoft.WinGet.Client.Engine.Commands.FinderPackageCommand+<>c__DisplayClass1_0.<Find>b__0() at Microsoft.WinGet.Client.Engine.Commands.Common.ManagementDeploymentCommand.Execute[[System.__Canon, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Func1<System.__Canon>)
at Microsoft.WinGet.Client.Engine.Commands.FinderPackageCommand.Find(System.String)
at Microsoft.WinGet.Client.Commands.FindPackageCmdlet.ProcessRecord()

[process exited with code 3221225501 (0xc000001d)]

Environment

[winget --info]
Windows Package Manager v1.29.380
Windows: Windows.Desktop v10.0.26300.9711
System Architecture: Arm64
Package: Microsoft.DesktopAppInstaller v1.29.380.0

PowerShell Version: PowerShell 7 (ARM64)
PowerShell WinGet Module: Microsoft.WinGet.Client (1.11.400 / Engine 1.26.0.0)
PowerToys: Microsoft.WinGet.CommandNotFound (1.0.4.0)
VC++ Runtime: ARM64 Visual C++ 14.50.35719 installed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Issue-BugIt either shouldn't be doing this or needs an investigation.Needs-TriageIssue needs to be triagedPowerShellIssue related to WinGet PowerShell Module or cmdlet

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions