HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Windows 11 Windows 11LSA ProtectionRunAsPPLCredential GuardLSASSCredential TheftIntuneGroup PolicyPowerShellDefenderVBS

LSA Protection, RunAsPPL and Credential Guard: Three Defences for One Target, and the Driver That Stops Them All

IA
Imran Awan
21 August 2026

Every credential on a Windows device passes through one process. Its name is lsass.exe, the Local Security Authority Subsystem Service. It validates your sign-in, holds your Kerberos tickets, and answers when an application asks who you are. That makes it the single highest-value target on the machine. Windows offers three overlapping ways to defend it, and almost every engineer I speak to has enabled one while believing they enabled another.

This post separates them. It explains what a protected process actually is, how that differs from virtualisation-based credential isolation, and why a single third-party smartcard or anti-virus driver can silently stop either one from loading. Most importantly, it shows you how to prove from a device which protections are genuinely running, rather than merely written into the registry.

The short version

LSA protection (RunAsPPL) makes lsass.exe a protected process so only Microsoft-signed code can load into it. Credential Guard is something else entirely: it moves your secrets out of lsass.exe into an isolated process called LSAIso.exe, behind the hypervisor. Enabling one does not enable the other, and both are configured in one place but enforced somewhere else, so a registry value proves nothing on its own. Read WinInit event 12 and the Win32_DeviceGuard WMI class to find out what is really running, and read the CodeIntegrity operational log to find the driver that is stopping it.

The problem: three defences, one target, and a config that lies

Here is the ticket, roughly as it always arrives. A security review asks for LSA protection. An engineer opens Intune, searches the Settings Catalog for anything containing the word "guard", finds Credential Guard, sets it to Enabled, and closes the ticket. Six months later an auditor asks for evidence that LSASS runs as a protected process, and there is none, because nobody ever configured that.

The reverse failure is quieter and worse. An engineer does the right thing. They set RunAsPPL to 1, reboot, and move on. The registry value is there. The device reports compliant. And LSASS is running completely unprotected, because a smartcard mini-driver on that hardware model is not signed for LSA, so the loader declined the whole request at boot.

Three separate mechanisms sit on top of lsass.exe. They are frequently conflated, so here is what each one actually stops.

ProtectionWhat it actually stopsMechanism
LSA protection (RunAsPPL)Non-protected processes reading LSASS memory or injecting code into it. Any plug-in not signed with a Microsoft signature is refused at load time.Protected process light, enforced by the kernel at process creation
Credential GuardExtraction of NTLM password hashes, Kerberos ticket-granting tickets, and Credential Manager domain credentials, even by malware running as administrator.Virtualisation-based security. Secrets never live in lsass.exe at all.
ASR rule 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2Processes opening a handle to LSASS process memory. Blocks the access, not the process.Microsoft Defender Antivirus attack surface reduction

Notice the third row. Microsoft is explicit that if you have enabled LSA protection, that attack surface reduction rule "isn't required" and "doesn't provide extra protection", because the two work similarly. Defender for Endpoint even reclassifies it as not applicable. The rule exists for the organisations that cannot enable the other two, and Microsoft names the reason: "compatibility issues with custom smartcard drivers or other programs that load into the LSA."

The gotcha that defines this whole topic. Configured and running are two different states, and Windows will happily show you the first while withholding the second. A registry value is a request. The boot-time loader decides whether to honour it. If a plug-in fails the signature check, LSASS starts unprotected and the registry value stays exactly where you left it. Nothing turns red. Nothing raises an alert. You have to go and look.

Why it happens: a protected process is not a virtual machine

Let us build this up from nothing, because the difference between the two features only makes sense once you know what the LSA is.

What the LSA is, in plain English

The Local Security Authority, or LSA, is the part of Windows responsible for authentication. It checks passwords, issues access tokens, enforces the local security policy, and holds the derived credentials that let single sign-on work. It lives in a user-mode process called lsass.exe, started at boot by wininit.exe.

The LSA is deliberately extensible. Third parties plug into it. A smartcard vendor supplies a mini-driver. An enterprise password-policy product supplies a password filter. A single sign-on product supplies a Security Support Provider, or SSP, and an Authentication Package, or AP. Each of these is a DLL that LSASS loads into its own address space at startup.

That extensibility is exactly the problem. Anything loaded into LSASS runs with LSASS's access to credentials. And because those DLLs are registered by name in the registry, the list is short and readable.

What LSA protection does

LSA protection, configured through a registry value named RunAsPPL, marks lsass.exe as a protected process. Two things follow.

First, non-protected processes can no longer read LSASS memory or inject code into it. That is the part that stops credential-dumping tools cold.

Second, and this is where deployments break, every plug-in loaded into the LSA must now be digitally signed with a Microsoft signature. Microsoft is precise about what that means. LSA plug-ins that are drivers, such as smartcard drivers, need Windows Hardware Quality Labs (WHQL) certification. Plug-ins with no WHQL path must be signed through the file signing service for LSA. And even a correctly Microsoft-signed plug-in can still fail to load if it does not conform to Microsoft's Security Development Lifecycle process guidance, or if it uses shared sections.

A valid Authenticode signature from the vendor is not enough. This catches people constantly. The DLL is signed, the certificate chains, Windows Explorer shows a clean signature tab, and LSA still refuses it.

The load chain, in order

Here is what happens on every boot, step by step.

  1. wininit.exe starts and creates the LSASS process.
  2. If LSA protection applies, LSASS is created at protection level 4. wininit.exe writes event 12 to the System log recording that fact.
  3. LSASS loads lsasrv.dll, the LSA server itself.
  4. lsasrv.dll reads the package lists under the Lsa registry key and loads each named DLL.
  5. For each DLL, code integrity, implemented in ci.dll, checks the signing level and the shared-section rules.
  6. A DLL that fails is refused, and code integrity writes event 3033 or 3063 to the CodeIntegrity operational log.

Step 2 is the one that matters. Windows does not partially apply LSA protection. Either the process is created protected or it is not. If a critical component cannot survive that, the practical outcome on many devices is that the protection does not come up, and you are left with the registry value and nothing else.

What Credential Guard does instead

Credential Guard takes a completely different approach. Rather than hardening lsass.exe, it removes the secrets from it.

With Credential Guard running, LSASS talks over remote procedure calls to a separate process, the isolated LSA process, LSAIso.exe. Kerberos ticket-granting tickets, NTLM password hashes and Credential Manager domain credentials live in there. That process runs inside virtualisation-based security, isolated at runtime by the hypervisor using Virtual Secure Mode, underneath the secure kernel, securekernel.exe. Microsoft states that the isolated LSA process hosts no device drivers at all, only a small subset of operating system binaries, all signed with a certificate that virtualisation-based security trusts.

That is the crucial architectural difference, and it explains the compatibility story. Your smartcard driver cannot break Credential Guard by failing a signature check, because your smartcard driver is never invited into LSAIso.exe in the first place. Credential Guard breaks things a different way: by refusing to hand out credential material that insecure protocols need.

Context: what Credential Guard does not protect. Microsoft publishes the limits, and they are worth knowing before you present this as a complete answer. Local accounts and Microsoft accounts are not protected. Kerberos service tickets are not protected, only the ticket-granting ticket. Credentials you type in response to an NTLM prompt are not protected. Key loggers are not stopped. Non-Microsoft security packages are not covered. And on a virtual machine, Credential Guard protects against attacks inside the guest, not from a privileged host.

The default-on behaviour nobody briefed you on

Both features now arrive switched on, and the rules differ per feature and per install type. This is where the confusion in most estates originates.

For LSA protection, Microsoft documents automatic enablement on Windows 11 version 22H2 and later when three conditions are all true: the device is a new installation rather than an upgrade, the device is enterprise joined (Active Directory domain joined, Microsoft Entra joined, or hybrid joined), and the device is capable of hypervisor-protected code integrity. Automatic enablement does not set a UEFI variable.

Then there is the upgrade path, which is documented separately in the Windows 11 security book and is easy to miss. "LSA protection is enabled by default on all devices to help safeguard credentials. For new installations, it activates immediately. For upgrades, it becomes active after a five-day evaluation period followed by a system reboot." Microsoft adds that enterprise policy settings for LSA protection override the default upgrade behaviour.

For Credential Guard, default enablement starts in Windows 11 22H2 on devices meeting the licence and hardware requirements. It is Enterprise and Education only; Windows Pro is not entitled. The default enablement is without UEFI lock, so it can be turned off remotely. And critically: a device that had Credential Guard explicitly disabled before the upgrade stays disabled afterwards.

Destructive risk: UEFI lock is close to one-way. Value 1 on either feature stores the setting in a UEFI firmware variable. For LSA protection, the registry no longer controls it, and you need the Local Security Authority Protected Process Opt-out tool from the Microsoft Download Center to remove the variable. For Credential Guard, you need physical presence at the machine to press a function key and accept the change during a bcdedit-driven procedure. Do not deploy value 1 to a fleet you have not tested. Use 2, which is enabled without a UEFI variable, until you are certain.

How to verify: every surface, in the order that answers the question

There are seven surfaces worth reading. Take them in this order, because each one narrows the question.

1. Registry: the whole feature area

Two parent keys carry almost everything. Here is the first.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
ValueType and dataWhat it means
RunAsPPLREG_DWORD 0, 1 or 20 off. 1 on with a UEFI variable. 2 on without a UEFI variable, enforced on Windows 11 22H2 and later.
LsaCfgFlagsREG_DWORD 0, 1 or 2Credential Guard. 0 disabled, 1 with UEFI lock, 2 without lock. A different feature that happens to be the neighbour.
Security PackagesREG_MULTI_SZSSP/AP DLL names, without the .dll extension. Loaded by the LSA at every start.
Authentication PackagesREG_MULTI_SZAuthentication package DLLs. msv1_0 is the in-box entry.
Notification PackagesREG_MULTI_SZPassword filter DLLs, registered per the password filter documentation. scecli is in-box.
MSV1_0\IsolatedCredentialsRootSecretSubkey valueMicrosoft documents checking for this to predict whether a Windows Pro device picks up Credential Guard default enablement on upgrade.
RunAsPPLBootREG_DWORD, observedUndocumented. Present on live 22H2+ devices. Community answers treat it as a companion to RunAsPPL. Do not build detection logic on it.
IsPplAutoEnabledREG_DWORD, observedUndocumented. Present on devices where automatic enablement applied. Reported here for completeness only.

The two rows marked undocumented deserve a word. Both exist on the Windows 11 Enterprise build 26200 device I used for this post. Neither name appears anywhere in Microsoft's documentation. An undocumented value can change meaning, or vanish, in any monthly update, so read them for interest and never for compliance.

The second parent key is the virtualisation-based security tree.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard
Value or subkeyType and dataWhat it means
EnableVirtualizationBasedSecurityREG_DWORD 1Turns virtualisation-based security on. Credential Guard cannot run without it.
RequirePlatformSecurityFeaturesREG_DWORD 1 or 31 requires Secure Boot. 3 requires Secure Boot and direct memory access protection. Choose 3 and the hardware must have an IOMMU or you get nothing.
LockedREG_DWORD 0 or 10 without UEFI lock, 1 with UEFI lock.
Scenarios\CredentialGuardSubkey, EnabledThe Credential Guard scenario node.
Scenarios\HypervisorEnforcedCodeIntegritySubkey, Enabled, LockedMemory integrity, formerly HVCI. A prerequisite condition for LSA protection automatic enablement.
MandatoryREG_DWORD 1Refuses to boot if the hypervisor or secure kernel fails to load. Microsoft warns to use special care.

Two more paths complete the picture. Group Policy and the Intune Settings Catalog write LSA protection to HKLM\SOFTWARE\Policies\Microsoft\Windows\System, value name RunAsPPL, which I confirmed by reading LocalSecurityAuthority.admx in C:\Windows\PolicyDefinitions. Credential Guard policy lands in HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard.

Registry Editor
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
RunAsPPL           REG_DWORD   0x00000002 (2)
RunAsPPLBoot       REG_DWORD   0x00000002 (2)
LsaCfgFlags        REG_DWORD   0x00000001 (1)
Illustrative rendering of a genuine read from a Windows 11 Enterprise 26200 device.

2. Event Viewer: the events that decide it

Two channels matter. The first is where you learn whether the protections came up.

Windows Logs > System   (source: Microsoft-Windows-Wininit)
IDFeatureWhat it tells you
12LSA protection"LSASS.exe was started as a protected process with level: 4." This is the documented proof, and its absence is the documented failure.
13Credential Guard"Credential Guard (LsaIso.exe) was started and will protect LSA credentials."
14Credential GuardConfiguration readout. First variable 0x1 or 0x2 means configured to run, 0x0 means not. Second variable must be 0, meaning protect mode.
15Credential GuardWarning. Configured but the secure kernel is not running, so Windows continued without it.
16Credential GuardWarning. LsaIso.exe failed to launch, with an error code.
17Credential GuardError reading the Credential Guard UEFI configuration.

The second channel is where you learn which component is to blame.

Applications and Services Logs > Microsoft > Windows > CodeIntegrity > Operational
IDModeMeaning
3033EnforcedA process, usually LSASS.exe, tried to load an image that did not meet the Microsoft signing level requirements. It was refused.
3063EnforcedThe image did not meet the security requirements for shared sections. Refused.
3065Audit onlyShared-section requirements not met, but current policy allowed the load. This is the pre-flight warning.
3066Audit onlyMicrosoft signing level not met, but current policy allowed the load. Logged together with 3065 when the plug-in has shared sections.

Gotcha: filtering by event ID alone will mislead you. Microsoft's wording is "a process, usually LSASS.exe". Usually, not always. These four IDs fire for any process subject to a code integrity rule. On the healthy device I used for this post, there were 21 such events in thirty days and not one of them involved LSASS. Every single one was a browser loading its own graphics DLLs under its own code integrity guard. An engineer who filters the log by ID, sees red error icons, and reports that LSA protection broke the browser has diagnosed the wrong thing entirely. Always read the process name in the message body.

Event Viewer  -  Microsoft-Windows-CodeIntegrity/Operational
Level: Error  |  Event ID: 3033  |  Source: CodeIntegrity
Code Integrity determined that a process (\Device\HarddiskVolume3\Program Files\VENDOR\product.exe) attempted to load \Device\HarddiskVolume3\Program Files\VENDOR\graphics.dll that did not meet the Microsoft signing level requirements.
A genuine event from the test device with the vendor and file names redacted. Note that the process is not lsass.exe. This event has nothing to do with LSA protection.

3. System files and DLLs

Naming the binaries makes the flow concrete. All of these live in C:\Windows\System32 and all were verified present on the test device.

BinaryRole in the flow
wininit.exeStarts LSASS at boot, at protection level 4 when LSA protection applies. Writes events 12 to 17.
lsass.exeThe Local Security Authority Subsystem Service host process. The target of all three protections.
lsasrv.dllThe LSA server itself, loaded into LSASS. Reads the package lists and loads the plug-ins.
LsaIso.exeThe isolated LSA process. Exists only when Credential Guard is running. Holds the secrets.
securekernel.exeThe secure kernel underneath virtualisation-based security. Event 15 fires when this is not running.
ci.dllCode integrity. Performs the signing level and shared-section checks and raises 3033, 3063, 3065 and 3066.
msv1_0.dllThe in-box authentication package registered under Authentication Packages.
scecli.dllThe in-box password filter registered under Notification Packages.
kerberos.dll, ntlmshared.dllThe Kerberos and NTLM providers whose derived credentials Credential Guard relocates.

4. Services and scheduled tasks

There is no service and no scheduled task that drives either feature, and it is worth saying so plainly rather than sending you hunting. Both are boot-time decisions. There is nothing under \Microsoft\Windows\... in Task Scheduler to check, and nothing to restart.

What does matter is which services are hosted inside LSASS, because these are what you affect when the process changes. On the test device, querying Win32_Service for a path containing lsass.exe returned six: SamSs (Security Accounts Manager), Netlogon, KeyIso (CNG Key Isolation), VaultSvc (Credential Manager), EFS (Encrypting File System) and LocalKdc (Kerberos Local Key Distribution Center). Three were running.

5. Log files

Neither feature writes a plain-text log, and there is no equivalent of a CBS or setup log to grep. What exists is the backing store for the two event channels, which you can copy off a device for offline analysis.

FileWhat to look for
C:\Windows\System32\winevt\Logs\System.evtxSearch for the string started as a protected process with level. A healthy line reads "LSASS.exe was started as a protected process with level: 4." A broken device has no such line for the current boot at all.
C:\Windows\System32\winevt\Logs\Microsoft-Windows-CodeIntegrity%4Operational.evtxSearch for lsass.exe, not for the event ID. A healthy device returns nothing. A broken device returns the full path of the offending DLL.
MDMDiagReport.html from mdmdiagnosticstool.exe -area DeviceEnrollment -zip C:\Temp\mdm.zipConfirms whether the Intune policy for ConfigureLsaProtectedProcess actually arrived, as distinct from whether it took effect.

6. PowerShell

Now the part you can copy. This first block reads the configured state from both registry surfaces. It writes nothing.

PowerShell - run elevated
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' | Select-Object RunAsPPL, RunAsPPLBoot, LsaCfgFlags # Healthy and modern: RunAsPPL is 2, or absent on an auto-enabled device. # RunAsPPL of 0 means someone explicitly turned the protection off. # LsaCfgFlags is Credential Guard, NOT LSA protection. Different feature. Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard' | Select-Object EnableVirtualizationBasedSecurity, RequirePlatformSecurityFeatures, Locked # EnableVirtualizationBasedSecurity of 1 is required for Credential Guard. # RequirePlatformSecurityFeatures of 3 needs an IOMMU. On hardware without one # you get no VBS at all, and section 5 below will show status 1 rather than 2.

This second block reads the running state, which is the answer you actually came for. There is no supported way to read a running process's protection level from PowerShell, so the WinInit event is the evidence, exactly as Microsoft documents.

PowerShell - run elevated
$boot = (Get-CimInstance Win32_OperatingSystem).LastBootUpTime Get-WinEvent -FilterHashtable @{ LogName='System'; ProviderName='Microsoft-Windows-Wininit'; Id=12; StartTime=$boot } # One event returned = LSASS is genuinely running protected this boot. # "No events were found" = it is NOT, whatever the registry claims. $dg = Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard $dg.VirtualizationBasedSecurityStatus # 0 not enabled, 1 enabled but NOT running, 2 enabled and running. $dg.SecurityServicesRunning # Look for the value 1. That, and only that, means Credential Guard is running. # 2 is memory integrity, 3 System Guard Secure Launch, 4 SMM Firmware Measurement. # Compare against $dg.SecurityServicesConfigured. Configured but not running is # the same class of failure as an LSA protection mismatch, one layer down.

7. Defender and security policy

The Defender surface is the attack surface reduction rule named "Block credential stealing from the Windows local security authority subsystem", GUID 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2. It is a standard protection rule, depends on Microsoft Defender Antivirus, and in Intune it is configured through an Endpoint security > Attack surface reduction profile.

Microsoft's own notes on the rule are unusually candid, and they change how you should think about it. It blocks access to LSASS process memory, not the running of processes. It produces a large volume of audit events, "almost all of which are safe to ignore". And if you have LSA protection enabled, the rule is not required and adds nothing.

Tip: check Windows Security before you write any policy. Open Windows Security > Device security > Core isolation details. Local Security Authority protection, Memory integrity and Credential Guard all surface there with a plain on/off state, and Microsoft notes that when LSA protection blocks something from loading, a notification names the blocked file. That is the fastest possible read on a single device, and it takes ten seconds.

The fix: audit first, then enable, in both consoles

Order matters here more than in almost any other hardening task, because the failure mode is silent. Audit, remediate, then enable.

Step 1: confirm audit mode, then read the audit events

Audit mode logs what would fail without blocking anything. Microsoft documents it as on by default from Windows 11 22H2, so on a modern device you usually have nothing to do. Confirm it, because it is not where you would guess.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe

The value is AuditLevel, type REG_DWORD, data 00000008. Note carefully that this is not under the Lsa key, which is where most people look first and find nothing. It is an Image File Execution Options subkey named after the executable. Then read events 3065 and 3066 in the CodeIntegrity operational log and act on whatever they name.

Gotcha: audit mode can be silently suppressed. Microsoft states that LSA audit events are not generated when Smart App Control is enabled on a device, and separately that these operational events are not generated when a kernel debugger is attached and enabled. In either case an empty log proves nothing. Check Smart App Control under Windows Security > App and browser control > Smart App Control settings and turn it off if you need to audit properly.

Step 2: enable LSA protection with Intune

intune.microsoft.comDevicesConfigurationSettings catalogLocal Security Authority
  1. Sign in to the Microsoft Intune admin center at intune.microsoft.com.
  2. Go to Devices, then Configuration, then select Create and New policy.
  3. For Platform choose Windows 10 and later. For Profile type choose Settings catalog. Select Create.
  4. Give the policy a name, for example Win11 - LSA protection - pilot ring. Select Next.
  5. On Configuration settings select Add settings.
  6. In the settings picker, browse to the category Local Security Authority and select Configure Lsa Protected Process. Close the picker.
  7. Set the value to Enabled without UEFI lock for a pilot. Choose Enabled with UEFI lock only once you are certain, and read the red callout above first.
  8. Select Next, add scope tags if you use them, and select Next.
  9. On Assignments, assign to a small pilot device group. Select Next.
  10. Review and select Create. Restart the targeted devices, because neither feature takes effect until a reboot.

If your tenant does not surface the Settings Catalog entry, the custom OMA-URI still works. Create a Templates > Custom profile and add a row with OMA-URI ./Device/Vendor/MSFT/Policy/Config/LocalSecurityAuthority/ConfigureLsaProtectedProcess, data type Integer, and value 1 for UEFI lock or 2 without.

Step 3: enable LSA protection with Group Policy

gpedit.mscComputer ConfigurationAdministrative TemplatesSystemLocal Security Authority
  1. Open the Group Policy Management Console with gpmc.msc, or the Local Group Policy Editor with gpedit.msc for a single machine.
  2. Create or edit a Group Policy Object linked to the organisational unit holding your computer accounts, then right-click and choose Edit.
  3. Expand Computer Configuration, then Administrative Templates, then System, then Local Security Authority.
  4. Open Configures LSASS to run as a protected process and set it to Enabled.
  5. Under Options, choose Enabled without UEFI Lock for a pilot, or Enabled with UEFI Lock for the locked variant.
  6. Select OK, run gpupdate /force on a target, and restart it.

Destructive risk: Not Configured does not undo this. Microsoft is explicit. "If you set this policy to Not Configured and the policy was previously enabled, the prior setting doesn't get cleaned up and continues to be enforced. You must set the policy to Disabled under the Options dropdown to disable the feature." Unlinking your GPO or deleting the Intune policy will not roll this back. You have to affirmatively set Disabled.

Step 4: enable Credential Guard, which is a different policy in a different place

intune.microsoft.comSettings catalogDevice GuardCredential Guard
  1. Create a Settings catalog policy exactly as in step 2, steps 1 to 5.
  2. In the settings picker, browse to the category Device Guard and select Credential Guard.
  3. Choose Enabled with UEFI lock or Enabled without lock. Microsoft's guidance is direct: if you want to be able to turn Credential Guard off remotely, choose Enabled without lock.
  4. Assign and create, then restart the devices.

The Group Policy equivalent is not in the Local Security Authority node. It is one level away, under Device Guard, and it is a single setting that carries Credential Guard as a dropdown inside it.

gpedit.mscComputer ConfigurationAdministrative TemplatesSystemDevice GuardTurn On Virtualization Based Security
  1. Expand Computer Configuration, Administrative Templates, System, Device Guard.
  2. Open Turn On Virtualization Based Security and set it to Enabled.
  3. Under the Credential Guard Configuration dropdown, choose Enabled with UEFI lock or Enabled without lock.
  4. Select OK, then gpupdate /force and restart.

For completeness, the CSP route is two settings rather than one: ./Device/Vendor/MSFT/Policy/Config/DeviceGuard/EnableVirtualizationBasedSecurity set to 1, and ./Device/Vendor/MSFT/Policy/Config/DeviceGuard/LsaCfgFlags set to 1 or 2. Both are integers.

Gotcha: Credential Guard breaks single sign-on for insecure protocols. This is Microsoft's own documented known issue and it is the most common post-deployment complaint. Devices using 802.1x wired or wireless, remote desktop, or VPN that rely on password-based protocols lose single sign-on and must reauthenticate every session. The blocked list is specific: Kerberos unconstrained delegation, Kerberos where PKINIT uses RSA rather than Diffie-Hellman, MS-CHAP, WDigest and NTLM v1. For the last three, only single sign-on is blocked; a user prompted for credentials can still connect. The fix is to move from MSCHAPv2-based connections such as PEAP-MSCHAPv2 to certificate-based authentication such as PEAP-TLS.

What has no equivalent, and why that matters

Two absences are worth stating explicitly rather than leaving you to search for them.

First, LSA protection has no Security Options entry. It is not under Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options, and it is not in the Intune LocalPoliciesSecurityOptions area either, despite that being a common assumption. It is an ADMX-backed administrative template policy in the LocalSecurityAuthority.admx file, under System, and the corresponding Settings Catalog category is Local Security Authority.

Second, before Windows 11 22H2 there was no policy at all. The only route was deploying the raw registry value, and Microsoft's own guidance for multiple machines was a Group Policy Preferences registry item under Computer Configuration > Preferences > Windows Settings > Registry. If you still manage Windows 10, that preference item is your mechanism, and the audit-level value is deployed the same way.

Proof it worked: a real run on a real device

Reading eight registry values and two event channels by hand, per device, does not scale. So the companion script for this post does it in one pass and prints the distinction that matters: configured versus running, for both features, plus any event naming a component blocked from loading into LSASS.

It is read-only. It changes no setting, service or registry value, needs no PowerShell module, and runs on both Windows PowerShell 5.1 and PowerShell 7. It refuses to run unelevated on purpose, because without elevation the CodeIntegrity log returns nothing, and nothing looks exactly like a clean result.

Grab it here: Get-LsaProtectionState.ps1.

Below is a genuine run on a Windows 11 Enterprise build 26200 device, trimmed for length, with identifiers replaced. This is real output, not an illustration.

PowerShell - .\Get-LsaProtectionState.ps1
2. LSA protection (RunAsPPL) - CONFIGURED Lsa\RunAsPPL : 2 [ OK ] RunAsPPL = 2. Configured WITHOUT a UEFI variable. Policies\...\System\RunAsPPL : not set (value genuinely absent) # "not set" is deliberate wording. A failed read says READ FAILED instead. -- Observed but NOT documented by Microsoft - do not build logic on these Lsa\RunAsPPLBoot : 2 Lsa\IsPplAutoEnabled : 2 3. LSA protection - RUNNING (the part that actually matters) [ OK ] WinInit event 12 found for the current boot. LSASS IS running protected. 2026-08-21 20:10:43 : LSASS.exe was started as a protected process with level: 4. LSA protection configured : CONFIGURED ON LSA protection running : RUNNING # Healthy: both columns agree. Broken: CONFIGURED ON / NOT RUNNING. 5. Credential Guard - RUNNING VirtualizationBasedSecurityStatus : 2 - VBS is enabled and running SecurityServicesRunning : 1, 2, 3, 4 [ OK ] SecurityServicesRunning contains 1. Credential Guard IS running. Event 13 at 20:10:43 : Credential Guard was started and will protect LSA credentials. Event 14 at 20:10:43 : Credential Guard configuration: Registry Configuration: 0x1 Test Configuration: 0 Auto Enablement: 0 # Registry Configuration 0x1 = configured to run. Test Configuration must be 0. 6. What would break - audit mode and blocked images IFEO LSASS.exe\AuditLevel : 8 [ OK ] Audit mode is configured. Events 3065 and 3066 logged without blocking. Events matched in window : 21 Naming lsass.exe : 0 Naming another process : 21 [ WARN ] 21 event(s) with the same IDs name a DIFFERENT process. Subject processes seen : browser.exe, app.exe # THIS is the finding. Twenty-one scary red 3033 errors, zero of them LSA-related. 7. Packages registered to load into LSA -- Authentication Packages [ OK ] msv1_0 C:\WINDOWS\System32\msv1_0.dll signer: CN=Microsoft Windows, O=Microsoft Corporation, ... # A non-Microsoft signer here is your prime suspect. A valid third-party # Authenticode signature is NOT sufficient for an LSA plug-in. Verdict LSA protection - configured : CONFIGURED ON LSA protection - running : RUNNING Credential Guard - configured : CONFIGURED ON Credential Guard - running : RUNNING [ OK ] All reads succeeded. Report is complete.

Read the verdict block as four independent facts, not one. Two of them being green tells you nothing about the other two. That separation is the entire point of the exercise.

If your run comes back with LSA protection CONFIGURED ON and NOT RUNNING, section 6 of the output is where you go next, and you are looking for one thing only: an event whose subject process is lsass.exe. The image path in that message is the component to remove or replace. Then reboot and run it again.

References

Microsoft official documentation:

Community deep-dives, both fetched and verified on the topic:

AuthorArticleWhy it is useful
Peter van der WoudeEasier configuring additional LSA protectionWalks the original custom OMA-URI approach for ConfigureLsaProtectedProcess, from April 2023. The comment thread is where the move into the Settings Catalog under Local Security Authority is first recorded.
Anoop C NairWindows 11 New LSA Local Security Authority PoliciesCovers both policies in the node, including Allow Custom SSPs and APs to be loaded into LSASS, which pairs naturally with LSA protection and is rarely discussed.

One closing thought. LSA protection and Credential Guard are complementary, not alternatives, and Microsoft says so directly: systems that support Credential Guard or enable it by default can also enable and benefit from LSA protection. Deploy both. Just do not deploy one and report the other.

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-LsaProtectionState.ps1 — Reports whether LSA protection (RunAsPPL) and Credential Guard are CONFIGURED versus
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
Memory Integrity will not turn on: finding the incompatible…
Memory Integrity (HVCI) is the highest-value hardening toggle in Windows 11, and it…
Windows 11
Attack Surface Reduction rules broke a line-of-business app:…
An ASR rule in Block mode kills an app and tells you nothing but a GUID. Here is the…
Windows 11
Virtualisation-based security will not start: the firmware,…
VBS is the foundation Credential Guard, Memory Integrity and Secure Launch sit on, and…