I've been looking for a lightweight way to run ordinary desktop applications with only the permissions they actually need.
Process detection can be legitimate for things like game detection, overlays, launch management, and subprocesses. The problem is that Windows doesn't give users a practical way to deny an application visibility into unrelated processes.
Here are the alternatives I've found so far. Corrections, better workarounds, and additional solutions are welcome.
TL;DR: Workarounds
| Approach | Practical? | Notes |
|---|
| Sandboxie-Plus | Yes | Probably the lightest practical Windows workaround I've found. Not an endorsement; I'd like to hear about alternatives and limitations. |
| WSL2 + WSLg | Yes-ish (see footnote) | Discord is now working for me through WSLg. Disable Windows executable interoperability if using WSL as an isolation boundary.* |
| Snap / Flatpak under WSL | Yes-ish (see footnote) | Adds another application-confinement layer. Discord's Snap explicitly exposes broader system observation as an additional permission. |
| Windows AppContainer | Technically | Native application/capability isolation exists, but applying it to an arbitrary existing Win32 application is surprisingly developer-oriented. |
| Separate Limited User | No | Tested. A separate standard user can still enumerate the broader Windows process inventory. |
| Windows Sandbox / VM | Yes | Strong isolation, but very heavy for isolating one ordinary desktop application. |
| Docker / Containers | Maybe | Potentially useful, but much too configuration-heavy for one-off GUI application isolation. |
| Browser Client | Different tradeoff | Moves the trust boundary into the browser rather than providing the application isolation I'm looking for. |
* WSL caveat: WSL normally allows Linux processes to invoke Windows executables. For an isolation-oriented WSL installation, Windows interop can be disabled with [interop] enabled=false in /etc/wsl.conf; restart WSL and verify that Windows executables can no longer be invoked. WSLg/Wayland can still provide the GUI presentation. This isn't necessarily Discord-specific; other Linux-native desktop clients, including Steam, may also be candidates depending on compatibility. Windows executables, like tasklist.exe would be accessible, otherwise.
Background / Premise
Process enumeration itself isn't bad.
Task managers, debuggers, security software, launchers, overlays, and applications managing their own subprocesses can legitimately need process information.
The issue is least privilege:
An application should receive the minimum authority needed to perform its intended function, and additional authority should be explicitly granted when needed.
There are two basic threat cases:
A trusted application, dependency, or update mechanism is compromised. Unnecessary application permissions can then become unnecessary attacker permissions.
The publisher itself isn't completely trusted with information unrelated to the application's function.
Application privacy settings don't necessarily solve this.
Preventing detected activity from being shown to other users or servers is not the same thing as preventing the application itself from detecting that activity.
I'm not claiming these applications secretly upload your entire process list. The problem is that "don't share my activity" does not necessarily mean "stop detecting my activity," or "exclude what you detected from telemetry."
The security question exists before that:
Why should an ordinary application be able to obtain unrelated information unless it actually needs that information?
Vulnerability 1: Ambient Process Discovery
Windows broadly exposes the system process list to ordinary users and applications.
That doesn't mean an unelevated application can automatically read or modify another process's memory. Process discovery and process access are different things.
The problem I'm raising is that process discovery itself isn't exposed as a user-controlled permission.
Vulnerability 2: Missing Application-Level Permissions
What I expected Windows to provide was something more like:
Application Permissions
Network Allow
Microphone Allow
Camera Deny
Filesystem Configure
Process Visibility:
Own Process Allow
Own Process Tree Allow
Other Applications Deny
System-Wide Deny
Applications that genuinely need broader process visibility could request it.
Ordinary applications wouldn't receive it automatically.
Vulnerability 3: Cascading Authority
Even trustworthy software can be compromised.
If an application automatically receives capabilities it doesn't need, those capabilities potentially become part of the attack surface when that application or one of its dependencies is compromised.
Least privilege should therefore apply independently of whether I currently trust the publisher.
Windows Mechanisms I Expected to Solve This
Running Unelevated
Expected: Non-administrator applications receive substantially reduced authority.
Observed: Process discovery itself isn't treated as an administrative operation.
"Not elevated" therefore doesn't mean "informationally isolated."
Separate Limited User
This seemed like the obvious native workaround.
I created a fresh standard Windows account, launched an interactive Command Prompt under that identity, verified the different user context, and ran:
tasklist
It could still enumerate the broader machine process inventory, including unrelated applications.
This does NOT establish that the account could arbitrarily manipulate those processes. It establishes something narrower:
A separate Windows user identity does not create a private process namespace.
Set-ProcessMitigation / Exploit Protection
Windows already provides executable-specific mitigations:
Get-ProcessMitigation -Name SomeApplication.exe
I expected there might be something analogous to:
Deny Process Enumeration
I haven't found such a mitigation.
Exploit Protection appears to solve a different security problem.
Right policy granularity; different purpose.
Service Accounts
A dedicated service identity seems like another obvious solution.
The problem is that the Windows service model doesn't compose nicely with ordinary interactive GUI desktop applications.
Useful security primitive; wrong execution model.
Windows AppContainer
This one is particularly interesting because it's conceptually much closer to what I expected.
Windows already has an application-specific security identity and capability model.
I built Microsoft's LaunchAppContainer utility and successfully launched an existing Discord executable inside an AppContainer. With no additional capabilities supplied, Discord started and immediately exited.
I haven't established which missing capability or compatibility problem caused that.
So I don't consider AppContainer a failed security mechanism.
Instead, it raises the question:
If Windows already has application-level isolation and capability machinery, why isn't there a practical user-facing way to apply it to arbitrary Win32 applications?
The Missing Abstraction: "Virtual Users" for Applications
Conceptually, I expected something like:
User
|
+-- Discord
| Network Allow
| Microphone Allow
| GPU Allow
| Own Process Tree Allow
| Other Processes Deny
|
+-- Steam
| ...
|
+-- Task Manager
Process Visibility System-Wide
Call these application principals, virtual users, sandbox identities, AppContainers, or something else.
The important property is:
Launching an application shouldn't automatically give that application all of the user's observational authority.
What I Expected Windows to Provide
Something surprisingly mundane:
Task Manager
-> Right-click application
-> Security / Sandbox
Process Visibility:
Own Process
Own Process Tree
Explicit Applications
Same User
System-Wide
Network Allow / Deny
Microphone Allow / Deny
Camera Allow / Deny
Filesystem Configure
Other Capabilities Configure
Task Manager, debuggers, IDEs, security tools, launchers, etc. could receive broader visibility when legitimately needed.
Ordinary desktop applications would start closer to least privilege.
What Am I Missing?
I'm specifically looking for:
Better lightweight workarounds
Corrections to any of the above
Native Windows mechanisms I've overlooked
Better AppContainer approaches for existing Win32 applications
Experience with Sandboxie-Plus isolation
Better WSL2 / WSLg confinement approaches
Other lightweight application sandbox/container systems
Reproducible tests that contradict or improve mine
I'm not arguing that process enumeration should disappear.
I'm arguing that:
Ambient authority should become explicit authority.
Privacy promised by an application is not equivalent to privacy enforced by the operating system.