Windows ships two application control stacks. Not one with two names. Two, with separate engines, separate policy stores, separate event logs and separate futures. One is App Control for Business, which most people still call WDAC. The other is AppLocker, which most people inherited from someone who left in 2016.
They overlap in purpose and differ in almost every mechanical detail. That combination is what produces the support ticket nobody can close: a file that one engine allows and the other blocks, with the block event sitting in a log channel nobody thought to open. This post explains what each stack actually enforces, at which layer, where its policy lives, which Event IDs it writes, and what Microsoft's own documentation says about choosing between them. Then it walks the audit-first path for whichever one you pick.
App Control for Business is enforced by the Code Integrity engine in ci.dll and needs no service; AppLocker is enforced by the appid.sys driver plus the Application Identity service, and stops enforcing the moment that service stops. Microsoft's documented position is that customers who can implement application control with App Control should do so, because AppLocker still gets security fixes but no new features. If both are active on the same device they act as independent gates, so a binary has to satisfy every enforced policy in both stacks, and each engine logs to its own channel without knowing the other exists. Deploy one in audit mode, read both event trees, and retire the other deliberately rather than leaving it running.
The problem: enforcement nobody can explain
The pattern is always the same. A team inherits an AppLocker policy from an old Group Policy Object. Somebody reads that App Control for Business is the strategic direction and deploys an App Control policy from Intune. Nobody removes the AppLocker rules, because nobody is certain what they still protect.
Now the device has two enforcement engines running at once. Three symptoms follow.
First, a line-of-business executable runs for one user and not another. That is a signature of AppLocker, because AppLocker rules carry a security identifier and can be scoped to a user or a group. App Control policies cannot: they apply to the managed computer as a whole and affect every user of the device.
Support then looks in the wrong log. App Control block events live in Microsoft-Windows-CodeIntegrity/Operational. AppLocker events live under a completely different tree with four sub-channels. If you only opened one of them, you concluded the block did not happen.
Second, a PowerShell script silently runs with fewer capabilities instead of failing. That is not a bug. It is App Control script enforcement handing the script host a verdict, and PowerShell responding by running the script in Constrained Language Mode rather than refusing outright.
Third, an App Control allow rule is added and the file still will not run. That is the part that breaks people's mental model. An allow rule in one stack does not override a deny in the other. The two stacks are not merged, ranked or reconciled anywhere.
Why it happens: two engines, two layers, two log trees
To untangle a device you need to know what each stack is, mechanically, before you touch any policy. Start with plain English definitions, then follow the call chain.
What App Control for Business is
App Control for Business is a code integrity policy. You compile an XML policy into a binary and place it where the Windows Code Integrity engine reads it. That engine lives in C:\Windows\System32\ci.dll and it is part of the operating system's code loading path, not an add-on. There is no service to start. If an active policy exists, it is being evaluated.
Because it is a code integrity policy, it can cover kernel mode drivers as well as user mode applications. Microsoft designed it as a security feature under the Microsoft Security Response Center servicing criteria, which in practice means a documented bypass is treated as a security vulnerability.
App Control rules can be built from the code signing certificate, from signed file metadata such as original filename and version, from the file hash, from the file path, from the reputation of the app according to Microsoft's Intelligent Security Graph, from the identity of the process that installed the app (the managed installer), or from the process that launched the binary.
What AppLocker is
AppLocker is an access control mechanism layered on top of process creation, DLL loading and script host callbacks. Microsoft's architecture documentation is specific about the mechanism: AppLocker policies are conditional access control entries, evaluated using the attribute-based access control functions SeAccessCheckWithSecurityAttributes or AuthzAccessCheck.
There are three interception points, and understanding them explains every AppLocker symptom you will ever see:
- A new process is created. AppLocker calls the Application Identity component to calculate the attributes of the main executable, updates the new process token with those attributes, then checks the policy.
- A DLL is loaded. A notification goes to AppLocker, which duplicates the process token, swaps in the DLL's attributes, evaluates the policy, and discards the duplicate token. This is why DLL rules are expensive.
- A script is run. The script host - PowerShell, for example - calls AppLocker before running the file. AppLocker calls Application Identity in user mode to calculate file properties, then evaluates.
Every one of those paths depends on the Application Identity service. Microsoft's wording is blunt: stopping this service prevents AppLocker policies from being enforced. That single sentence explains most "AppLocker is not working" tickets.
AppIDSvc) ships set to manual start. If nothing starts it, your enforced rule collections are inert. Microsoft's own guidance is that when using Group Policy you must configure the service to start automatically in at least one GPO that applies AppLocker rules. Since Windows 10 the service is a protected process, so you can no longer set its startup type to Automatic in the Services snap-in - you need sc.exe config appidsvc start=auto or a security template. And Microsoft warns that the startup type cannot be set back to Manual with sc.exe, so take a backup before you change it.
What each one covers
AppLocker divides code into five rule collections, and the file extensions are documented exactly:
| AppLocker rule collection | Extensions covered | Notes |
|---|---|---|
| Executable files | .exe, .com | The collection almost everyone configures first. |
| Windows Installer files | .msi, .mst, .msp | Covers patches and transforms, not just installers. |
| Scripts | .ps1, .bat, .cmd, .vbs, .js | Enforced by the script host calling AppLocker. |
| DLLs | .dll, .ocx | Not enabled by default. Microsoft warns it can cause performance problems on resource-constrained machines. |
| Packaged apps and installers | .appx | Publisher rules only. One rule governs install and run. |
App Control is not organised by extension. It evaluates code as the loader encounters it, which is why its coverage includes kernel drivers that AppLocker cannot touch, and why a poorly built App Control policy can slow boot or prevent it. Microsoft explicitly recommends building on the supplied base templates so that Windows signers are trusted, because App Control evaluates all processes that run, including inbox Windows processes.
Microsoft's documented guidance on choosing
This is the part worth quoting rather than paraphrasing, because it settles most internal arguments. From the App Control and AppLocker overview: "Generally, customers who are able to implement application control using App Control, rather than AppLocker, should do so. App Control is undergoing continual improvements, and is getting added support from Microsoft management platforms. Although AppLocker continues to receive security fixes, it isn't getting new feature improvements."
That is the current support statement. AppLocker is not deprecated and not removed. It is in security-fix-only maintenance. The AppLocker overview page adds a second, sharper note: AppLocker "is a defense-in-depth security feature and not considered a defensible Windows security feature", and App Control "should be used when the goal is to provide robust protection against a threat".
Microsoft then names the two cases where AppLocker is still the better answer: a mixed Windows estate where you need the same controls on versions older than Windows 10, and shared computers where you need different policies for different users or groups.
On running both, the documentation is permissive but specific. "AppLocker can also be deployed as a complement to App Control to add user or group-specific rules for shared device scenarios... As a best practice, you should enforce App Control at the most restrictive level possible for your organization, and then you can use AppLocker to further fine-tune the restrictions."
Read that carefully. It sanctions AppLocker as a deliberate narrowing layer on top of an App Control baseline. It does not sanction two independently authored, independently owned allow-lists that were never designed together. That distinction is the whole difference between a supported design and the trap.
Why both-active behaves the way it does
There is no published precedence table between the two stacks, because there is no arbitration between them. Each is an independent gate on the same execution attempt. A file that fails either one does not run.
Microsoft documents the equivalent behaviour inside App Control, and it is the clearest available statement of the intersection model: "If two base policies exist on a device, an application must pass both policies for it to run." The design page states it as a rule - multiple base policies intersect, and only applications allowed by both run without generating block events. Supplemental policies are the opposite: a base plus its supplementals is a union.
Within a single App Control policy set, evaluation order is documented as well. Deny rules win first, then explicit allow rules, then managed installer or Intelligent Security Graph extended attributes, then reputation, and anything left over is blocked implicitly. That last line is the one that surprises people: an App Control policy is default-deny.
CodeIntegrity - Operational for executables, DLLs and drivers, and AppLocker - MSI and Script for MSI installers, scripts and COM objects. So an 8029 error in an AppLocker channel can be an App Control block, not an AppLocker block. Its message text even says "due to Config CI policy". If you triage by channel name alone you will blame the wrong stack. Note also that the AppLocker MSI and Script events are not included on Windows Server Core.
The binaries involved
Naming the actual files makes the two layers concrete.
| File | Path | Role in the flow |
|---|---|---|
ci.dll | C:\Windows\System32\ci.dll | The Code Integrity engine that evaluates App Control policies. Microsoft's known-issues page names it directly: before the April 2024 security update, exceeding 32 active policies bug-checks with 0x0000003b referencing ci.dll. |
SiPolicy.p7b | C:\Windows\System32\CodeIntegrity\SiPolicy.p7b | Single-policy format binary. Group Policy deployment converts whatever file you point it at into this name. |
{PolicyId}.cip | C:\Windows\System32\CodeIntegrity\CiPolicies\Active\ | Multiple-policy format binaries, one per policy, named for the <PolicyId> element in the XML. |
appid.sys | C:\Windows\System32\drivers\appid.sys | The AppLocker driver. Registered as the AppID service, and listed as a dependency of appidsvc. |
applockerfltr.sys | C:\Windows\System32\drivers\applockerfltr.sys | The AppLocker filter driver. Microsoft's managed installer troubleshooting steps require both appidsvc and AppLockerFltr to show as RUNNING. |
appidtel.exe | C:\Windows\System32\appidtel.exe | Configures the Application Identity service and filter driver. Documented invocation is appidtel.exe start [-mionly]. |
CiTool.exe | C:\Windows\System32\CiTool.exe | Inbox App Control management tool, included from Windows 11 22H2 and Windows Server 2025. |
How to verify: prove which stack is actually enforcing
Before changing anything, establish ground truth. Every command below is read-only. Run them elevated - the Code Integrity channel, CiTool and the Device Guard WMI class all need administrator rights.
Step 1: ask the Code Integrity engine what it is enforcing
The Device Guard WMI class reports enforcement mode as a number. Kernel and user mode are reported separately, and that separation matters enormously.
Step 2: list the App Control policies on the device
CiTool dumps every policy, active or not. The two fields that matter are IsEnforced and FriendlyName. Microsoft's own example filters on enforcement state.
You can corroborate that against the files on disk. Microsoft documents the policy file locations precisely, and the presence of the legacy filename is itself a finding.
C:\Windows\System32\CodeIntegrity\SiPolicy.p7b
<EFI System Partition>\Microsoft\Boot\CiPolicies\Active\{PolicyId GUID}.cip
<EFI System Partition>\Microsoft\Boot\SiPolicy.p7b
Signed policies must be deployed into the EFI System Partition, which is why a signed policy survives an operating system reinstall and why removing one is a documented, careful procedure rather than a file delete.
Step 3: ask AppLocker what it is enforcing
The effective policy is the merged result of every AppLocker source that applies. If the object has zero rule collections, no AppLocker policy is in effect at all.
Then confirm the enforcement machinery is actually running, because rules without the service are decoration.
Step 4: read the registry, both stores
AppLocker's policy store predates the current naming. In the registry the feature is still called Software Restriction Policies version 2. Parent key, stated once:
| Subkey or value | What it holds | How to read it |
|---|---|---|
Exe, Dll, Msi, Script, Appx | One subkey per rule collection that has been configured. | Subkey absent means that collection was never configured. |
EnforcementMode under each collection | Whether that collection blocks or only audits. | Compare against Get-AppLockerPolicy -Effective; they should agree. |
| Rule GUID subkeys under each collection | The individual serialised rules. | Read the XML through the cmdlet instead - it is far more legible. |
The SrpV2 key itself | Presence is the fastest yes/no answer. | Key absent means no AppLocker policy has ever applied to this device. |
App Control's own state lives under the Code Integrity control key. Only one value here is documented, and it is a diagnostic switch:
| Value or subkey | Purpose | Status |
|---|---|---|
TestFlags (REG_DWORD) | Set to 0x300 and reboot to turn on managed installer and Intelligent Security Graph diagnostic events 3090, 3091 and 3092. | Documented by Microsoft. |
Config, Policy, State subkeys | Present on a live Windows 11 device and clearly related to Code Integrity state. | Observed and undocumented. Do not build detection logic on these - undocumented values can change in any update. |
HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard | Virtualisation-based security and memory integrity configuration, including EnableVirtualizationBasedSecurity and the Scenarios\HypervisorEnforcedCodeIntegrity subkey. | Documented. Related to App Control but not the same thing. |
Step 5: read both event trees
This is the step that resolves the "allowed by one, blocked by the other" ticket. There are two channel families. State each once, then map the IDs.
Channel name: Microsoft-Windows-CodeIntegrity/Operational
| Event ID | Meaning | Mode |
|---|---|---|
| 3076 | The main App Control block event for audit mode. The file would have been blocked if the policy were enforced. | Audit |
| 3077 | The main App Control block event for enforced policies. The file did not pass and was blocked. | Enforced |
| 3089 | Signature information for a blocked or audit-blocked file. One event per signature; correlate by Correlation ActivityID. | Both |
| 3033 / 3034 | Signature revoked, or a Lifetime Signing certificate expired. 3034 is the audit equivalent. | Both |
| 3064 / 3065 | A user mode DLL failed the policy. 3064 is audit, 3065 is enforced. | Both |
| 3090 / 3091 / 3092 | Allowed purely by managed installer or reputation (3090), no such authorisation in audit mode (3091), enforced equivalent (3092). | Both |
| 3099 | A policy has been loaded. The event details include the policy options - the single most useful event on the device. | Both |
| 3101 / 3102 / 3103 | Policy refresh started, finished, or was ignored for N policies. | Both |
| 3095 / 3097 | The policy cannot be refreshed and needs a reboot (3095), or cannot be refreshed at all (3097). | Both |
Channels: Microsoft-Windows-AppLocker/EXE and DLL | /MSI and Script | /Packaged app-Deployment | /Packaged app-Execution
| Event ID | Meaning | Which stack |
|---|---|---|
| 8000 | AppID policy conversion failed. The policy was not applied correctly to the computer. | AppLocker |
| 8001 | The AppLocker policy was applied successfully to this computer. | AppLocker |
| 8002 / 8003 / 8004 | EXE or DLL allowed / allowed but would have been prevented if enforced / prevented from running. | AppLocker |
| 8005 / 8006 / 8007 | Script or MSI allowed / audited / prevented from running. | AppLocker |
| 8008 | AppLocker component not available on this SKU. | AppLocker |
| 8020 - 8025 | Packaged app allowed, audited, prevented from running, or allowed to be installed. | AppLocker |
| 8027 | No packaged apps can execute while EXE rules are enforced and no packaged app rules are configured. | AppLocker |
| 8028 / 8029 | A script host asked App Control about a file: audited (8028) or blocked due to Config CI policy (8029). | App Control |
| 8036 / 8037 | COM object blocked by Config CI policy (8036), or the file passed the App Control policy (8037). | App Control |
| 8038 | Signature information correlated with an 8028 or 8029 event, one per signature. | App Control |
| 8039 / 8040 | Packaged app allowed to install in audit mode (8039), or prevented by Config CI policy (8040). | App Control |
| 8030 - 8035 | Managed installer check succeeded or failed during AppID verification. | Shared plumbing |
Step 6: the scheduled task and the log files
AppLocker has exactly one documented scheduled task, and it is on-demand rather than periodic. The AppLocker overview's baseline settings table states: "Appidpolicyconverter.exe is put in a scheduled task to be run on demand." That converter is what turns a deployed policy into the *.AppLocker cache files under C:\Windows\System32\AppLocker. If those files are missing while a policy exists, the conversion is where to look, and event 8000 is the matching failure signal.
App Control has no equivalent task and no text log file. Its policy binaries are the state, and the Operational channel is the log. That is genuinely a point of asymmetry between the stacks, and it is worth saying out loud: there is no App Control log file to tail. If you want file-level authorisation evidence rather than block events, Microsoft's documented route is fsutil.exe file queryEA against a file, looking for the $KERNEL.SMARTLOCKER.ORIGINCLAIM extended attribute that managed installer and the Intelligent Security Graph write.
The fix: pick one, audit first, retire the other
The decision follows directly from the documented guidance. Two questions decide it.
- Do you need per-user or per-group application rules on shared devices? If yes, AppLocker is the only stack that can express them, because App Control applies to the whole computer. If no, App Control alone is sufficient.
- Do you still manage Windows versions older than Windows 10? If yes, AppLocker gives you one policy across the estate. If no, that argument is gone.
Two noes means deploy App Control and retire AppLocker. Any yes means you have a legitimate reason to keep AppLocker - but keep it as the documented narrowing layer on top of an App Control baseline, authored by the same people, in the same change, with both audit trails reviewed together.
Deploy App Control in audit mode from Intune
Intune's App Control for Business policies use the ApplicationControl configuration service provider. Microsoft states this CSP was introduced to replace the AppLocker CSP, and that while the AppLocker CSP is still supported, no new features are being added to it and development continues through ApplicationControl.
- Sign in to the Microsoft Intune admin center.
- Go to Endpoint security and select App Control for Business.
- Select the App Control for Business tab, then Create Policy. The platform type is assigned automatically.
- On Basics, enter a name and a description you will recognise in a report six months from now.
- On Configuration settings, choose a Configuration settings format. Built-in controls is the simplest path; Enter xml data takes a policy you authored yourself.
- With built-in controls, set Enable trust of Windows components and store apps to Audit only. This is the whole point of the first deployment: events are logged in the local client logs but apps are not blocked.
- Under Select additional options for trusting apps, choose Trust apps from managed installers and/or Trust apps with a good reputation as your design requires.
- On Scope tags, apply your scope tags, then Next.
- On Assignments, target device groups. App Control policies apply to the device scope only, so a user group will only affect the devices inside it.
- On Review + create, select Create.
If you want Intune-deployed apps trusted automatically, the managed installer policy is a separate tab in the same node.
- Select the Managed installer tab, then Create.
- Name the policy on Basics.
- On Settings, set Enable Intune Managed Extension as Managed Installer to Enabled, which is the default.
- Apply scope tags, then include or exclude device groups on Assignments.
- Review + create. Allow up to ten minutes for the policy to appear and up to thirty for devices to receive it.
NotConfigured with an empty rule set, it merges as NotConfigured with the dummy rule - and a NotConfigured collection defaults to enforced once any rule exists in it. With the dummy rule as the only rule, everything else in that collection is blocked. Microsoft names the consequences: applications failing to start, and failure to boot or sign in to Windows. The documented mitigation is to remove any NotConfigured rule collection with an empty rule set from your existing AppLocker policy first. Microsoft also notes managed installers can enable stopped or disabled AppLocker policies enforced from Group Policy. Audit your inherited AppLocker XML before you tick that box.
Deploy App Control from Group Policy, and know the limitation
The GPO route exists, but it is deliberately constrained.
- On a machine with the Remote Server Administration Tools installed, run GPMC.MSC.
- Right-click the target organisational unit and choose Create a GPO in this domain, and Link it here. Name it.
- Right-click the new GPO and choose Edit to open the Group Policy Management Editor.
- Navigate to Computer Configuration\Administrative Templates\System\Device Guard.
- Right-click Deploy App Control for Business and choose Edit.
- Select Enabled and specify the local path or the UNC path where clients will fetch the policy binary.
- Close the editor and restart a test machine. Restarting is what updates the policy.
SiPolicy.p7b on the client. Separately, WMI and Group Policy do not support multiple policies at all, so admins who cannot reach the MDM stack are pointed at the ApplicationControl CSP through the MDM Bridge WMI provider instead. And for new signed base policies on machines running memory integrity, Microsoft says to deploy by script and activate with a restart rather than using Group Policy.
Deploy AppLocker in audit mode
AppLocker's own console path is a different branch of the policy tree entirely - Windows Settings, not Administrative Templates.
- For a single machine open secpol.msc; for a group of machines edit a GPO in the Group Policy Management Console.
- Expand Application Control Policies and select AppLocker.
- Right-click AppLocker and choose Properties.
- On the Enforcement tab, tick Configured for the rule collection you want, then select Audit only in that collection's list.
- Repeat for each collection you intend to control, then select OK.
- In the same GPO, go to Computer Configuration\Windows Settings\Security Settings\System Services, double-click Application Identity, and configure it to start automatically. Without this the rules will never be evaluated.
Rules themselves are created per collection through the wizard, and can also be generated with the AppLocker cmdlets:
| Cmdlet | What it does | Use it for |
|---|---|---|
Get-AppLockerFileInformation | Retrieves AppLocker file information from a list of files or from an event log, including publisher, hash and path. | Turning audit events into candidate rules. |
New-AppLockerPolicy | Generates rules for a given user or group from a list of file information, by publisher, hash or path. | Building a policy from an inventory pass. |
Get-AppLockerPolicy | Gets the policy from the local GPO, a specified GPO, or the effective policy on the device. | Auditing what is actually in force. |
Test-AppLockerPolicy | Tests whether a list of files would be allowed to run for a specific user under a given policy. | Pre-flighting a change without deploying it. |
Set-AppLockerPolicy | Sets the specified GPO to contain the specified policy. Not read-only. | Deployment only. Never in a diagnostic script. |
Intune and AppLocker: there is no settings catalog path
This is worth stating plainly because people search for it and do not find it. Intune has a first-class node for App Control for Business under Endpoint security. It has no equivalent modern node for AppLocker rules. AppLocker from Intune means the AppLocker CSP, and the CSP's own node structure is where you author it:
./Vendor/MSFT/AppLocker/ApplicationLaunchRestrictions/{Grouping}/EXE/EnforcementMode
Sibling nodes exist for DLL, MSI, Script, StoreApps and CodeIntegrity. Microsoft's guidance on the {Grouping} segment is that the value should include some randomness and that the best practice is a randomly generated GUID, to avoid problems on unenrollment. Note also that applying or deleting a policy through the CodeIntegrity/Policy node under this CSP schedules a reboot.
Retire the loser deliberately
Neither stack should be switched off by deleting files. Both have documented removal paths, and both can leave a device blocking things after the policy is "gone".
To remove App Control enforcement, Microsoft's documented sequence is to first replace the existing policy with a version that allows everything - the example policy shipped on every device at %windir%\schemas\CodeIntegrity\ExamplePolicies\AllowAll.xml - deploy that, and only then delete the policy from Intune. Policies deleted from the Intune interface are removed from the device but stay in effect until the next reboot, so deleting first and allowing second leaves a window where the device is enforcing a policy you can no longer edit.
To remove AppLocker, the documented route is to clear the policy rather than edit around it. Microsoft also publishes two scripts for the managed installer case specifically: CatCleanIMEOnly.ps1, which removes only the Intune Management Extension as a managed installer, and CatCleanAll.ps1, which removes all AppLocker-based policies from the device. Read that second name twice before you run it.
Proof it worked: a real posture report
Reading eight surfaces by hand on every device does not scale, so there is a companion script for this post that reads all of them and states a verdict. It is read-only: no Set, New, Remove, Enable or Disable against any device setting, service or registry value. It requires no PowerShell module. It aborts with exit code 1 if any read fails, rather than printing a clean result that would be a lie.
What follows is a genuine run on a managed Windows 11 Enterprise device, with identifiers replaced. Every value below was read live.
The event pass and verdict from the same run:
-EventDays 0 -Quiet across the fleet first. That skips the event log pass entirely, which is the slow part on any device with a populated AppLocker EXE and DLL log, and drops the explanatory prose. You get the policy and service posture in a few seconds per device, which is enough to answer the only question that matters at the start of a migration: how many of my machines have two stacks live at once? Then run the full version, with events, on the ones that come back flagged.
What the report gives you that a single command does not is the join. Kernel enforced with user mode off, fourteen policies of which none are yours, an AppLocker service stopped with no policy behind it: individually each of those readings is easy to misinterpret, and three of them are routinely quoted as evidence that application control is deployed when it is not.
References
- App Control and AppLocker Overview - Microsoft Learn. The positioning statement, the choose-when-to-use criteria, and the complement guidance.
- AppLocker - Microsoft Learn. The defense-in-depth note, the baseline settings table naming
appidsvcand the Appidpolicyconverter.exe scheduled task. - Understanding App Control event IDs - Microsoft Learn. The two core channels, 3076/3077/3089/3099 and the 8028/8029/8036-8040 set.
- Using Event Viewer with AppLocker - Microsoft Learn. The full 8000-8040 table and the log verbosity warning.
- AppLocker architecture and components - Microsoft Learn. The three interception points and the access check functions.
- Configure the Application Identity service - Microsoft Learn. Why a stopped service means no enforcement, and the
sc.exe config appidsvc start=autorequirement. - App Control Admin Tips and Known Issues - Microsoft Learn. Policy file locations, file rule precedence order, and the
ci.dll32-policy bug check. - Use multiple App Control for Business Policies - Microsoft Learn. The intersection rule for multiple base policies.
- Deploy App Control policies via Group Policy - Microsoft Learn. The Device Guard GPO path and the single-policy-format limitation.
- Deploy App Control for Business policies using script - Microsoft Learn.
CiPolicies\Active,SiPolicy.p7band the EFI partition path. - Managing CI policies and tokens with CiTool - Microsoft Learn. Command reference and the
--list-policiesoutput fields. - Managed installer and ISG technical reference - Microsoft Learn. The
appidsvcandAppLockerFltrchecks, theSystem32\AppLockercache files andfsutil queryEA. - Manage approved apps with App Control for Business policy in Intune - Microsoft Learn. The admin center paths, the ApplicationControl versus AppLocker CSP statement, and the AppLocker merge no-boot warning.
- AppLocker CSP - Microsoft Learn. Node structure, enforcement mode values and the
{Grouping}GUID guidance. - Enable memory integrity - Microsoft Learn. The
Win32_DeviceGuardproperty tables, including the 0/1/2 enforcement values. - Understanding AppLocker rule collections - Microsoft Learn. The five collections and their extensions.
Community deep-dives that verify against the same documentation:
| Author | Post | Why it is worth reading |
|---|---|---|
| Peter van der Woude | Analyzing Windows Defender Application Control events in audit mode | Works event 3076 in CodeIntegrity/Operational and event 8028 in AppLocker/MSI and Script into collected queries - exactly the two-channel problem this post describes. |
| Anders Ahl, MSEndpointMgr | Application Control on the Windows Platform - Architecture, Benefits, and Risks | Sets AppLocker and App Control in their historical lineage and is candid about the administrative overhead that kills application control projects. |
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.