HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Windows 11 Windows 11File ExplorerContext MenuShell ExtensionsRegistryGroup PolicyIntuneIExplorerCommandMSIXPowerShell

The Windows 11 Context Menu: Where Your App's Right-Click Entries Went, and the Supported Way to Get Them Back

IA
Imran Awan
21 August 2026

A user upgrades to Windows 11, right-clicks a file, and the entry your line-of-business tool has put there for eight years is gone. The backup agent's "Restore previous version" is gone. The developer utility's "Open Bash here" is gone. Everything looks broken. Nothing is broken. The entries moved, and the reason they moved is a deliberate architectural change in the shell that has a documented, supported answer - and a widely-copied registry hack that is neither.

The short version

Windows 11 has two context menus. The compact one is drawn by a packaged COM class in Windows.UI.FileExplorer.dll and only shows commands registered through IExplorerCommand plus package identity. Every legacy in-process IContextMenu shell extension is demoted to the Windows 10 menu behind "Show more options" or Shift+F10, where Microsoft says nothing was removed. The famous fix - an empty InprocServer32 value under a per-user CLSID - works only because Microsoft documents that per-user class registrations outrank machine ones, is documented nowhere by Microsoft itself, has no Group Policy or CSP equivalent, and disables the modern menu for every app at once. The supported answer is to make the vendor ship IExplorerCommand, and in the meantime teach Shift+F10.

The problem: the entry is not missing, it is demoted

Start with the vocabulary, because half the confusion here comes from two words being used loosely.

A context menu - Microsoft's own documentation calls it a shortcut menu - is the list you get when you right-click something in File Explorer or on the desktop. A shell extension is a piece of third-party code that adds entries to that list. A shortcut menu handler, or context menu handler, is the specific kind of shell extension that does this.

Historically, a shortcut menu handler was a COM object - a Component Object Model object, meaning a class Windows can create on demand by GUID - implemented in a DLL. Explorer loaded that DLL into its own process and asked it for menu items. Every 7-Zip, TortoiseGit, WinMerge, Notepad++, antivirus scanner and backup agent right-click entry you have ever seen worked this way.

Windows 11 introduced a second, compact context menu. It is not a skin over the old one. It is a different menu, built by different code, from a different registration source. Legacy handlers are not enumerated for it at all.

So the symptom in the field looks like this. A helpdesk ticket says the enterprise backup client "lost its right-click integration after the Windows 11 upgrade". The vendor insists nothing changed. Both are telling the truth. The entry is one click away, under Show more options at the bottom of the compact menu.

Context, in Microsoft's own words. The Windows Developer Blog post that introduced the design states that "Show more options" loads the Windows 10 context menu as-is "for access to low-use Shell verbs and apps still working on porting over", and that "No commands have been removed entirely." The same post confirms that "Shift-F10 or the keyboard menu key will also load the Windows 10 context menu." Nothing is deleted. It is one keystroke away.

What happens next is the actual problem. An admin searches for "restore classic context menu Windows 11", finds a two-line reg add command on a forum, tests it on their own machine, sees it work instantly, and pushes it to ten thousand devices as a login script or an Intune platform script. That command is not in any Microsoft documentation. It has no Group Policy backing. It disables the new menu wholesale rather than restoring one app's entry. And its failure modes are quiet - which is the worst kind.

Why it happens: two menus, two registration models

Here is the chain, in order, from the moment the user right-clicks.

Path 1: the Windows 11 compact menu

  1. The user right-clicks a file in File Explorer. The window belongs to explorer.exe.
  2. Explorer builds the modern menu using the packaged COM class registered on this device under the CLSID {86ca1aa0-34aa-4e8b-a509-50c905bae2a2}, whose registered display name is File Explorer Context Menu and whose in-process server is C:\Windows\System32\Windows.UI.FileExplorer.dll.
  3. Explorer places the common commands - cut, copy, rename, delete, share - as icons at the top.
  4. It then enumerates commands that apps have registered through the windows.fileExplorerContextMenus package manifest extension. Microsoft's design guidance is that "App extensions are grouped together below Shell verbs", and that an app with more than one command is folded into a flyout attributed to that app.
  5. For each such command, Explorer activates the app's COM class and calls its IExplorerCommand methods - GetTitle, GetIcon, GetState - to decide what to draw and whether it should be enabled.
  6. The Show more options item is appended at the bottom.

Path 2: the Windows 10 menu behind Show more options

  1. The user clicks Show more options, or presses Shift+F10, or presses the dedicated menu key, or holds Shift while right-clicking.
  2. Explorer builds the classic menu using the long-standing shell code in shell32.dll and windows.storage.dll.
  3. That code reads HKEY_CLASSES_ROOT looking for shellex\ContextMenuHandlers subkeys under the relevant shell object - * for all files, Directory for folders, Directory\Background for the folder background, and so on.
  4. For each handler subkey it reads the CLSID, resolves that CLSID to an InprocServer32 DLL, loads the DLL into the Explorer process, and calls IContextMenu on it.
  5. It also reads static verbs registered under HKEY_CLASSES_ROOT\<ProgID>\shell\<verb>.

Step 4 of Path 2 is the reason for the whole redesign. Microsoft's documentation on shortcut menu handlers is blunt about the risk: "Take care when creating in-process handlers as they can cause harm to the process that loads them." The developer blog is blunter still, noting that legacy commands "run in-process in Explorer, which can cause performance and reliability issues." A single badly written handler could hang or crash the shell for the whole session. The compact menu keeps that code off the fast path.

Gotcha: the handler subkey naming is inverted on some inbox handlers. Microsoft's registration rules say the handler subkey name is arbitrary and its (Default) value holds the CLSID. Several handlers that ship with Windows do the opposite - the subkey is named with the CLSID and the default value holds a description such as Start Menu Pin. If your inventory script assumes only one layout, it will report a GUID where a name belongs and vice versa. The companion script tests both and picks whichever field actually matches a GUID pattern.

The registry surface: classic handler registration

Every classic handler lives beneath one of these. The shell object is the part that varies.

HKEY_CLASSES_ROOT\<shell-object-or-ProgID>\shellex\ContextMenuHandlers\
Shell objectWhat it targetsHandler types accepted
*All filesShortcut menu, property sheet, verbs
AllFileSystemObjectsAll files and file foldersShortcut menu, property sheet, verbs
FolderAll folders, including virtual onesShortcut menu, property sheet, verbs
DirectoryFilesystem folders onlyShortcut menu, property sheet, verbs
Directory\BackgroundThe empty background inside a folderShortcut menu only
DesktopBackgroundThe desktop wallpaper areaShortcut menu, verbs
DriveDrives such as C:\Shortcut menu, property sheet, verbs
PrintersAll printersShortcut menu, property sheet

Two more subkey names matter and are frequently confused with ContextMenuHandlers. DragDropHandlers holds handlers that appear when you right-drag an object and drop it. PropertySheetHandlers holds tabs added to the Properties dialog. Both are registered the same way, both also implement in-process COM, and both are outside the compact menu.

The registry surface: approval and policy

These two keys govern whether a registered handler is allowed to run at all.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ (and the HKEY_CURRENT_USER equivalent)
Subkey and valueTypeWhat it does
Shell Extensions\ApprovedKey of REG_SZ values named by CLSIDThe administrator-approved list. Microsoft documents both the HKLM copy (all users) and the HKCU copy (per user).
Policies\Explorer > EnforceShellExtensionSecurityREG_DWORDWhen 1, only handlers present in one of the Approved keys are allowed to run.
Policies\Explorer > NoViewContextMenuREG_DWORDWhen 1, right-click menus do not appear at all on the desktop or in File Explorer. Not a menu-style switch - a total suppression.

For MSIX-packaged apps there is a manifest element that writes the Approved entry for you: desktop7:ApprovedShellExtension, taking a Name and a Clsid. Microsoft is explicit that using it requires the package to set desktop7:Scope to machine, which in turn requires the custom capability Microsoft.classicAppCompatElevated_8wekyb3d8bbwe - and that capability "is granted to only a limited set of apps". In practice that route is closed to most software.

The binaries and processes involved

Only files verifiable on a live Windows 11 device are listed. Every one of these was confirmed present on the build used for this article.

FileRole in the flow
C:\Windows\explorer.exeThe shell process that owns the File Explorer window and hosts the menu. In-process legacy handlers load here.
C:\Windows\System32\Windows.UI.FileExplorer.dllThe in-process server registered for the File Explorer Context Menu COM class. This is the code that draws the compact Windows 11 menu.
C:\Windows\System32\shell32.dllCore shell library. Owns the classic shortcut menu construction, canonical verbs and ShellExecute.
C:\Windows\System32\windows.storage.dllShell namespace and file association plumbing. Resolves ProgIDs and association arrays that the classic menu enumerates.
C:\Windows\System32\explorerframe.dllThe File Explorer window frame, navigation pane and view hosting.
C:\Windows\System32\twinui.dll and twinui.pcshell.dllModern shell UI surfaces used across the Windows 11 shell.
C:\Windows\System32\dllhost.exeThe COM surrogate. A packaged command declared with com:SurrogateServer is activated out of process here, which is precisely what keeps it off the Explorer fast path.

Why "out of process" is the whole point. The modern manifest registration uses com:SurrogateServer. That means the app's DLL is hosted by the COM surrogate rather than injected into explorer.exe. If the command crashes, the surrogate dies and Explorer survives. Microsoft still warns to keep GetTitle, GetIcon and GetState fast and to "Run longer operations after Invoke is called", because those three calls are still on the menu-construction path.

How to verify: inventory before you touch anything

Do not change a registry value until you know what is currently registered. The first check is a thirty-second manual one, and it settles most tickets.

Step 1: confirm the entry is only demoted, not gone

Right-click the file. If the app's entry is not in the compact menu, press Shift+F10 - or hold Shift and right-click, or press the dedicated menu key if the keyboard has one. If the entry appears there, the app is a legacy IContextMenu handler and there is nothing wrong with the device. That is the expected, documented behaviour.

Tip that closes tickets faster than any registry change. Put Shift+F10 in the upgrade communications, not in a knowledge base article nobody reads. It is a documented equivalence - Microsoft's own developer blog states that Shift+F10 and the keyboard menu key load the Windows 10 context menu. One line in the "what changes in Windows 11" email removes most of the ticket volume that drives admins towards the unsupported hack in the first place.

Step 2: read the classic handler registration directly

This command lists every classic shortcut menu handler registered for all files, showing the handler name and the CLSID it points at. Run it in a normal console; no elevation is needed to read HKLM class keys.

PowerShell - list classic handlers for all files
Get-ChildItem 'HKLM:\SOFTWARE\Classes\*\shellex\ContextMenuHandlers' | Select-Object PSChildName, @{n='Clsid';e={ (Get-ItemProperty $_.PSPath).'(default)' }} # Healthy: a handful of rows, each with a name and a GUID in braces. # Broken: a row whose Clsid column is blank - the registration is incomplete # and Explorer will still try to resolve it on every right-click.

Read it like this. The PSChildName column is the handler's arbitrary name - it is a label, and Windows never shows it to a user. The Clsid column is what actually matters, because that GUID is the COM class Explorer will try to create.

Step 3: resolve a CLSID to the DLL behind it

A CLSID on its own tells you nothing. Resolve it to the file on disk, then check the file is still there. This is where orphaned handlers surface - a registration left behind by an uninstall that removed the DLL but not the keys.

PowerShell - resolve one handler CLSID to its server DLL
$clsid = '{aaaaaaaa-0b0b-1c1c-2d2d-333333333333}' $key = "HKLM:\SOFTWARE\Classes\CLSID\$clsid\InprocServer32" $dll = (Get-ItemProperty -LiteralPath $key -ErrorAction SilentlyContinue).'(default)' $dll Test-Path ([Environment]::ExpandEnvironmentVariables($dll)) # Healthy: a real path, then True. Explorer loads it and the menu paints. # Broken: a real path, then False. The handler is ORPHANED. Explorer still # attempts activation on every single right-click and pays for the # failure before the menu appears. This is a real, common slow-menu cause. # Broken: an empty path. That is the shadowing pattern the hack exploits.

Step 4: check whether the unsupported override is already deployed

Before you argue about whether to deploy the hack, find out whether a previous admin already did. The override is per-user, so it hides in HKEY_CURRENT_USER and will not appear in a machine-scope audit.

Registry Editor
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}
(Default)   REG_SZ   File Explorer Context Menu
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32
(Default)   REG_SZ   C:\Windows\System32\Windows.UI.FileExplorer.dll
ThreadingModel   REG_SZ   Apartment
Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32
(Default)   REG_SZ   (empty string - this is the unsupported override)
Illustrative composite. The two HKLM rows are a real reading from a Windows 11 build 26200 device; the HKCU row shows what the override looks like when present.

Step 5: run the companion inventory script

Doing steps 2 to 4 by hand across eight shell objects and two hives is tedious and easy to get wrong. The companion script does the whole sweep, resolves every CLSID, checks every DLL on disk, reports the Approved and policy state, and gives a plain verdict on the override. It is strictly read-only - it never creates, changes or deletes a registry value, and it does not restart Explorer.

PowerShell - run the inventory
.\Get-ShellContextMenuInventory.ps1 .\Get-ShellContextMenuInventory.ps1 -OrphansOnly .\Get-ShellContextMenuInventory.ps1 -IncludeProgIds -CsvPath C:\Temp\cm.csv # First form: full inventory plus the override verdict. # Second form: only the registrations that are broken or orphaned. # Third form: also walks every file-type ProgID. Slow, thorough, CSV output. # Exit 0 means every read succeeded. Exit 1 means at least one read failed # and the inventory is incomplete - it refuses to look clean when it is not.

Event Viewer: honestly not applicable

There is no Event Log channel for context menu construction, and Microsoft publishes no Event IDs for it. This is not an oversight in this article - it is a design consequence. Menu building happens thousands of times a day inside the shell process on the UI path. Emitting an event per handler activation would be self-defeating. If a handler fails to load, Explorer silently omits the item.

Two adjacent channels do exist and are genuinely useful, so use them instead of hunting for IDs that do not exist.

Event Viewer > Applications and Services Logs > Microsoft > Windows > ...
ChannelDocumented ID to look forWhen it helps
AppXDeployment-Server > Microsoft-Windows-AppXDeploymentServer/OperationalEvent 404 - Microsoft's app packaging troubleshooting guidance says to search for the most recent error event 404 for deployment errorsA vendor's MSIX or sparse package failed to register, so its modern command never appears
Windows Logs > Application, source Application ErrorNo fixed ID for this scenario; read the faulting module nameA legacy in-process handler crashed explorer.exe. The faulting module names the culprit DLL

For the packaging side there is also a cmdlet rather than a log file. Get-AppxLog returns the app package installation log produced during deployment, including errors and warnings. That is the documented way to see why a sparse package registration failed.

Gotcha: there is no log file for this feature. Explorer does not write a context menu trace to disk. If you go looking for something under C:\Windows\Logs you will not find it, and any blog that names such a path is inventing it. The nearest real artefacts are the two Event Log channels above and Get-AppxLog for the packaging path.

Services and scheduled tasks: also not applicable

No Windows service drives the context menu, and there is no scheduled task under \Microsoft\Windows\... that rebuilds or refreshes it. Menu construction is synchronous work inside explorer.exe at the moment of the right-click. The only service adjacent to this feature area is AppXSvc (display name AppX Deployment Service), which must be running for a packaged or sparse-packaged app's registration to be applied - but it plays no part in drawing a menu.

Defender and security policy: not applicable, and here is why

Nothing in this feature area is configured through Microsoft Defender Antivirus, Attack Surface Reduction rules, exploit protection, Windows Defender Application Control or the firewall. There is no Endpoint Security profile for context menus. It is worth stating plainly because context menu handlers are DLLs loaded into the shell, which sounds like something ASR ought to govern - it does not. The relevant control is the shell's own approval mechanism, EnforceShellExtensionSecurity plus the Approved list, which is an Administrative Template setting, not a Defender one.

The fix: what is supported, and what only looks like a fix

The supported answer, route 1: the vendor implements IExplorerCommand

This is the real fix and the only one Microsoft documents for getting an app into the Windows 11 compact menu. It is work for the software vendor, not for you, but knowing exactly what to ask for turns a vague support ticket into an actionable one.

Microsoft's requirement is stated directly: Windows 11 apps extend the modern File Explorer context menu by implementing IExplorerCommand and registering the command with app identity. Three parts are needed.

  1. A native DLL implements one or more COM classes exposing IExplorerCommand. C++ is the usual choice because the code runs on the shell integration path.
  2. The package manifest registers each COM class as a windows.comServer extension, using com:SurrogateServer and a com:Class whose Id is the command's CLSID.
  3. The package manifest registers the command as a windows.fileExplorerContextMenus extension, associating a shell item type with that same CLSID via desktop5:ItemType and desktop5:Verb.

The desktop5:ItemType/@Type attribute is the modern equivalent of the old shell object names: * for files, Directory for selected folders, Directory\Background for a folder background. The desktop5:Verb/@Clsid must match the com:Class/@Id and the CLSID on the COM class itself. Get one of the three out of step and the command silently never appears.

Microsoft's own closing note on the topic is the sentence to quote at a vendor: use "Show more options" only to inspect legacy context-menu extensions, because a command registered through windows.fileExplorerContextMenus and implemented with IExplorerCommand appears in the Windows 11 context menu.

The supported answer, route 2: sparse package for an unpackaged Win32 app

The obvious vendor objection is "our product is a Win32 installer, we are not shipping MSIX". That objection does not hold, and this is the most useful thing in this article to bring to a vendor conversation.

An unpackaged Win32 app can use the same IExplorerCommand and the same manifest registrations by installing a sparse package - Microsoft also calls this "packaging with external location". A sparse package does not contain the app binaries. It is a small identity-only package that references the externally installed app. The existing installer, the existing binary locations and the existing update process all stay as they are.

The manifest declares uap10:AllowExternalContent as true in Properties, sets the application's uap10:TrustLevel to mediumIL and its uap10:RuntimeBehavior to win32App, and requests the runFullTrust and unvirtualizedResources restricted capabilities. The AllowExternalContent feature was introduced in Windows 10 version 2004, build 19041, so every supported Windows 11 device has it.

The supported answer, route 3: keep the legacy handler but declare it in MSIX

If a vendor is already repackaging as MSIX and does not want to rewrite the handler, Microsoft documents a middle path. Add the desktop9 namespace and declare the existing IContextMenu implementation through windows.fileExplorerClassicContextMenuHandler, or windows.fileExplorerClassicDragDropContextMenuHandler for right-drag handlers, with a desktop9:ExtensionHandler per item type. Microsoft states this feature is available on Windows 11 version 21H2, build 22000, and later, and requires MaxVersionTested greater than 10.0.21300.0.

Gotcha: route 3 does not get you into the compact menu. It makes a legacy handler work again after packaging, which otherwise breaks. It does not promote the entry. Microsoft's own note on that page recommends implementing IExplorerCommand and using desktop4:FileExplorerContextMenus instead if you are writing a new shell extension. If a vendor tells you they "added Windows 11 context menu support" and cites desktop9, they have fixed packaging compatibility, not menu placement.

The unsupported hack: exactly what it is and exactly why it works

The command that circulates on forums creates a subkey with an empty default value.

HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32 -> (Default) = ""

The mechanism is not magic, and it rests on one behaviour that Microsoft does document. HKEY_CLASSES_ROOT is a merged view of HKEY_LOCAL_MACHINE\Software\Classes and HKEY_CURRENT_USER\Software\Classes, and, in Microsoft's exact words, "The user-specific settings have priority over the default settings."

So the chain is: Windows registers the modern menu class in the machine store with a real DLL path. The hack writes the same CLSID into the per-user store with an empty path. COM resolves the per-user copy first, gets an empty server path, and activation of the class fails. Explorer, unable to create the modern menu, falls back to the Windows 10 menu. Every legacy handler reappears at the top level, and the user is delighted.

Do not deploy this to a fleet. Six concrete reasons, not a vibe.

1. Microsoft documents it nowhere. The CLSID appears in no Microsoft reference documentation, no CSP, no Administrative Template and no Settings toggle. It exists in community how-tos and user forum answers only. Undocumented means uncommitted: nothing obliges the next servicing update to preserve it.

2. There is no machine-wide equivalent. The trick works because per-user class settings outrank machine ones. You cannot shadow HKLM with HKLM. That forces per-user deployment, and per-user deployment means every new user profile on every device is a fresh gap.

3. It has a documented failure mode. Microsoft states that if an application runs with administrator rights and User Account Control is disabled, "the COM runtime ignores the per-user COM configuration and accesses only the per-machine COM configuration." On any device where UAC has been turned off, the override is silently ineffective for elevated shell processes.

4. It is a sledgehammer. It does not restore one vendor's entry. It disables the entire modern menu for that user - including well-behaved IExplorerCommand commands from apps that did the work properly, and including the modern menu's own layout and cloud-provider integration.

5. It needs an Explorer restart. Which means either a disruptive shell restart in a login script or a change that appears not to work until the user signs out, generating exactly the tickets you were trying to prevent.

6. It is tied to an implementation detail that can move. The CLSID and the backing Windows.UI.FileExplorer.dll are internal shell registration details, not an API. Feature-update rollbacks, class re-registration during servicing, and shell refactoring have all historically changed details of this kind.

Observed and undocumented - read this before writing detection logic. Everything in this article about the CLSID {86ca1aa0-34aa-4e8b-a509-50c905bae2a2}, its display name File Explorer Context Menu, its Windows.UI.FileExplorer.dll server path, and the Shell Extensions\Blocked and PackagedCom\ClassIndex keys is observed on a live device, not documented by Microsoft. Read it for diagnosis. Do not build an Intune detection script, a compliance rule or a remediation on any of it, because an undocumented value can change in any update and your detection will start lying to you rather than failing.

Group Policy reality: there is no setting for this

This is the finding, so let it be plain. There is no Group Policy setting that chooses between the Windows 11 and Windows 10 context menu. Not in any shipped Administrative Template. The two documented context-menu policies both do something else, and both are worth knowing precisely so nobody mistakes them for the switch.

The first is Remove File Explorer's default context menu, registry value NoViewContextMenu. Its documented description is that it "Removes shortcut menus from the desktop and File Explorer" and that if enabled, "menus don't appear when you right-click the desktop or when you right-click the items in File Explorer". It suppresses right-clicking entirely. To find it:

gpedit.mscUser ConfigurationAdministrative TemplatesWindows ComponentsFile Explorer
  1. Open the Group Policy Management Editor on the GPO you intend to change, or gpedit.msc for a local test.
  2. Expand User Configuration. This is a per-user policy; it does not exist under Computer Configuration.
  3. Expand Administrative Templates, then Windows Components, then File Explorer.
  4. Double-click Remove File Explorer's default context menu.
  5. Select Enabled only if you genuinely want right-click menus gone. Click Apply, then OK.
  6. Confirm on the client with gpupdate /target:user /force, then read HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer and expect NoViewContextMenu to be 1.

The second is Allow only per user or approved shell extensions, registry value EnforceShellExtensionSecurity. Its documented purpose is to direct Windows "to only run those shell extensions that have either been approved by an administrator or that won't impact other users of the machine". The same navigation applies:

  1. Navigate to User Configuration > Administrative Templates > Windows Components > File Explorer.
  2. Double-click Allow only per user or approved shell extensions.
  3. Select Enabled, click Apply, then OK.
  4. Both policies live in WindowsExplorer.admx and write to Software\Microsoft\Windows\CurrentVersion\Policies\Explorer.
  5. Before enabling this in production, inventory the Approved list first. A handler that is registered but not approved stops loading, and the entry disappears from the classic menu too.

Intune reality: the same two policies, no menu switch

Both settings are ADMX-backed Policy CSP entries. Microsoft documents them as user-scope only, which matters when you choose how to deliver them.

intune.microsoft.comDevicesConfigurationCreateSettings catalog
  1. Sign in to the Microsoft Intune admin center at intune.microsoft.com.
  2. Go to Devices, then Configuration, then Create, then New policy.
  3. Set Platform to Windows 10 and later and Profile type to Settings catalog. Click Create.
  4. Name the profile something an auditor will understand later, for example W11 - File Explorer shell extension approval.
  5. Click Add settings and search the picker for File Explorer.
  6. Pick Allow only per user or approved shell extensions to deliver EnforceShellExtensionSecurity, or Remove File Explorer's default context menu to deliver NoViewContextMenu. Set the toggle deliberately.
  7. Assign the profile to a user group. Because both policies are user-scope, assigning them to a device group is the classic mistake that makes them appear to do nothing.
  8. Review and create, then confirm delivery under Devices > Configuration > the profile > Device status.

If you would rather use a custom OMA-URI profile, the documented paths are exactly these two. Both are ADMX-backed, which means the value must be supplied in SyncML format rather than as a bare number.

./User/Vendor/MSFT/Policy/Config/ADMX_WindowsExplorer/NoViewContextMenu ./User/Vendor/MSFT/Policy/Config/ADMX_WindowsExplorer/EnforceShellExtensionSecurity

The trap in the Intune route. Because there is no CSP for the menu style, the only way to deploy the hack through Intune is a platform script or a Win32 app that writes to HKCU. Intune platform scripts run in the SYSTEM context by default, so a naive reg add HKCU\... writes into the SYSTEM profile and changes nothing for the signed-in user. Admins then "fix" this by iterating over every profile hive or by loading the default user hive - which is how you end up with an unsupported, undocumented change applied inconsistently across a fleet, with no reporting and no rollback path. If you cannot state which users on which devices currently have it, you cannot support it.

Proof it worked: a real run on build 26200

The output below is a genuine run of the companion script on a Windows 11 Enterprise device, build 26200, under Windows PowerShell 5.1. Identifiers are replaced and one third-party product name is redacted. Nothing else is altered.

Get-ShellContextMenuInventory.ps1 -OrphansOnly - real run, identifiers replaced
Hive ShellObject Handler Clsid DllExists State ---- ----------- ------- ----- --------- ----- HKLM Folder VendorShellExt {aaaaaaaa-0b0b-1c1c-2d2d-333333333333} False CLSID-UNREGISTERED Registrations found : 41 Orphaned - DLL missing : 0 CLSID not registered at all : 1 Handler key with no CLSID : 0 Blank InprocServer32 default : 0 Per-user shadowing machine : 0 # Healthy: every row reads State OK, and all four broken counters are 0. # This device has one genuinely broken registration - a handler subkey whose # CLSID has no InprocServer32 anywhere. Explorer tries to resolve it on every # right-click on a folder and gets nothing. That is a real cost, and no amount # of menu switching fixes it. The owning app must be repaired or removed.

The second half of the same run answers the question the whole article is about.

Approval state, packaged classes and the override verdict - real run
HKLM Approved : present, 34 CLSID value(s) HKCU Approved : absent HKLM Blocked : present, 1 value(s) [observed, not in the reference docs] HKLM EnforceShellExtensionSecurity : not configured HKCU EnforceShellExtensionSecurity : not configured HKLM NoViewContextMenu : not configured HKCU NoViewContextMenu : not configured PackagedCom\ClassIndex : 124 packaged COM class(es) registered New-menu CLSID : {86ca1aa0-34aa-4e8b-a509-50c905bae2a2} COM name (as registered): File Explorer Context Menu VERDICT : the per-user override key is ABSENT. This device uses the Windows 11 context menu as shipped. Legacy IContextMenu handlers appear under "Show more options" (Shift+F10). Machine registration : C:\Windows\System32\Windows.UI.FileExplorer.dll Backing DLL on disk : True # Healthy: override ABSENT, machine registration present, DLL True. # Broken: override EXISTS with an empty default - the unsupported hack is # deployed on this profile and the modern menu is disabled wholesale. # Broken: machine registration missing or DLL False - that is a servicing # problem, not a preference. Run DISM /Online /Cleanup-Image # /RestoreHealth and then sfc /scannow.

Three things in that output are worth reading carefully, because each one is a decision point.

First, HKCU Approved : absent together with EnforceShellExtensionSecurity : not configured means no approval enforcement is in play. Every registered handler is allowed to load. If you turn that policy on without first populating the Approved list, entries will vanish from the classic menu too, and the tickets will look identical to the Windows 11 demotion tickets you were trying to solve.

Second, PackagedCom\ClassIndex : 124 shows the modern path is alive and well on this device. Packaged apps are registering COM classes normally. If a vendor claims Windows 11 "does not support" context menu extensions, this number is the counter-argument.

Third, the verdict line is the one to put in a report. It states which of the two menu behaviours the device is actually in, and it distinguishes "the override is absent" from "I could not read the key" - the script exits 1 rather than printing a clean-looking result when any read fails.

The pragmatic fleet position. Inventory with the script and fix the orphans, because those are a real and measurable cost. Communicate Shift+F10 in the upgrade comms. Open a vendor ticket that names IExplorerCommand, windows.fileExplorerContextMenus and sparse packaging, so it cannot be closed as "works as designed". Leave the CLSID override alone, or if a specific team genuinely cannot work without it, scope it to that team, document it as unsupported, and re-test it after every feature update. That is a compensating control. A fleet-wide login script is not.

References

Microsoft official

TopicSource
IExplorerCommand, windows.comServer, windows.fileExplorerContextMenus, sparse packagesAdd a File Explorer context menu command to a packaged desktop app
The Windows 11 menu design, "Show more options", Shift+F10 equivalenceExtending the Context Menu and Share Dialog in Windows 11
shellex\ContextMenuHandlers, handler subkey names, the Approved keyRegistering Shell Extension Handlers
Static verbs, cascading menus, in-process handler riskCreating Shortcut Menu Handlers
The merged view, and per-user class settings outranking machine onesHKEY_CLASSES_ROOT Key
NoViewContextMenu and EnforceShellExtensionSecurity - GPO paths, ADMX file, OMA-URIsADMX_WindowsExplorer Policy CSP
Keeping a legacy IContextMenu handler working inside MSIX (desktop9)Support legacy context menus
desktop7:ApprovedShellExtension and its capability requirementdesktop7:ApprovedShellExtension
Sparse packages / packaging with external locationGrant package identity by packaging with external location
AppX deployment event log and event 404, Get-AppxLogTroubleshooting packaging, deployment, and query of Windows apps

Community

One community write-up was fetched and verified as being genuinely on this topic. It is listed because it documents the unsupported override that this article argues against deploying - useful for recognising the exact command your users have already run, not as a recommendation.

AuthorArticle
Anoop C NairDisable or Enable Windows 11 Context Menu How to Guide - documents the HKCU\Software\Classes\CLSID\...\InprocServer32 override step by step

Companion script

The read-only inventory script used for the output above lives in the Windows 11 scripts repository, one folder per post:

Get-ShellContextMenuInventory.ps1 - enumerates every classic context menu handler, resolves each CLSID to its backing DLL, flags orphans, reports the Approved and policy state, and gives a verdict on the unsupported override. It never writes a registry value.

PowerShell — companion script

Download it from Imran76Awan/Windows-11-Scripts — no sign-in required. It is read-only: it reports and never changes a device or anything in Intune. Validate it in your own environment before relying on the output.

Get-ShellContextMenuInventory.ps1 — Read-only inventory of the classic (IContextMenu) shell context menu handlers
View all scripts on GitHub
Was this post helpful?
React below — no account needed
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Windows 11
File Explorer takes eight seconds to open a folder: finding the…
File Explorer loads third-party COM DLLs into its own process and calls them once per…
Windows 11
SMB signing became mandatory and your NAS stopped working:…
Windows 11 24H2 and later require SMB signing, refuse insecure guest logons and ship…
Windows 11
Print Spooler Hardening After PrintNightmare: The Settings That…
Microsoft flipped the Point and Print driver installation default on 10 August 2021 and a…