Someone on your team reads that Windows can now print without third-party drivers. It sounds like an unambiguous win. Two decades of print spooler vulnerabilities, gone, because the spooler stops loading vendor code entirely. So they enable Windows protected print mode on a pilot ring, and the pilot ring stops printing.
Not all of it. The queues pointing at the new Mopria certified multifunction devices are fine. The finance team's cheque printer is gone. The label printers in the warehouse are gone. The pull-print client that everyone badges against is gone, because it installed itself as a print monitor DLL, and Windows protected print mode does not load print monitor DLLs any more.
This post is about what Windows protected print mode actually is, in plain English, and how to size that blast radius on your own fleet before you commit to it.
Windows protected print mode (WPP) makes Windows print only through Windows Ready Print, the inbox Microsoft IPP Class Driver, and blocks third-party print drivers completely. Microsoft documents that turning it on uninstalls printers that use third-party drivers and deletes those drivers from the print driver store. It needs Windows 11, version 24H2 (build 10.0.26100) or later, and it is enabled through one Group Policy setting or one Printers CSP node. It is technically reversible, but reversing it does not put your printers back, so inventory every queue, driver and print monitor first.
The problem: the queues that disappear the day you enable it
Start with the vocabulary, because three names get used interchangeably and they are not the same thing.
IPP is the Internet Printing Protocol. Microsoft describes it as an HTTP-based protocol where each request is an HTTP POST and printers are addressed by URI, for example ipps://printer.example.com/ipp/print. It is a standard, not a Microsoft feature.
Mopria is the alliance of printer manufacturers and software vendors that defines the standards for IPP printing and eSCL scanning. A Mopria certified device is guaranteed to conform. That certification is the practical test of whether a printer works without a driver.
Windows Ready Print is Microsoft's name for Windows' preferred way of talking to printers. It covers IPP, eSCL scanning and Universal Print. It does not require installing third-party drivers.
Windows protected print mode, WPP for short, is the switch. Microsoft's documentation is precise about what it does: it "exclusively uses Windows Ready Print". Exclusively is the operative word. Nothing else gets to print.
So the failure mode is not subtle. Microsoft states plainly that upon enabling WPP, "printers that use third-party drivers are uninstalled". It goes further. The driver is deleted from the print driver store, and it cannot be used while WPP is active.
Here is the honest list of what stops working, taken from Microsoft's own pages rather than from guesswork.
| What stops working | What Microsoft documents |
|---|---|
| Third-party v3 and v4 print drivers | WPP "disables the ability to load third-party drivers". Printers using them are uninstalled and the driver is deleted from the driver store. |
| Printer port monitors implemented as DLLs | Microsoft names this attack directly: "a printer port monitor can be a Dynamic Link Library (DLL), and attackers would abuse this to load malicious code", and states that legacy APIs are restricted to values that only make sense for IPP. |
| Modules loaded through print APIs | "APIs that allow module loading will be modified to prevent loading of new modules", naming AddPrintProviderW. Only Microsoft signed binaries required for IPP are loaded. |
| Symbolic-link tricks against the spooler | Attackers used symlinks to make the spooler load code, and Microsoft states "that is no longer possible". |
| Microsoft XPS Document Writer and Windows Fax and Scan | "XPS and fax are removed when Windows protected print mode is turned on." Both need manual reinstall after disabling WPP. |
| OneNote (Desktop) as a printer | Turning on WPP "uninstalls all unsupported software printers on Windows, including OneNote (Desktop)". The replacement is the OneNote (Desktop) Protected virtual printer, shipped by default in OneNote 2410 and later on Windows 11 build 26100 or higher. |
| Scanning on some multifunction devices | "Some compatible devices' scanners are unavailable in Windows protected print mode." The test is again Mopria certification. |
| Print Management against legacy print servers | From a WPP-enabled client "you cannot use Print Management to manage servers with Windows protected print mode disabled". |
| Custom finishing and vendor utilities | Microsoft's answer is Print Support Apps. Manufacturers "will still be able to provide custom features via Print Support Apps", distributed through the Store. If your vendor has not shipped one, the feature is simply gone. |
Why it happens: what WPP actually changes in the print stack
To understand why the change is this blunt, you need the chain that a print job travels today.
An application calls the Windows print APIs. Those APIs hand the job to the Print Spooler service, Spooler, running as C:\Windows\System32\spoolsv.exe. The spooler loads the printer's driver. It calls a print processor, then a language monitor, then a port monitor, to get bytes onto the wire. Most jobs pass through an XPS conversion handled by printfilterpipelinesvc.exe.
Every one of those steps is an opportunity to load somebody else's code into a highly privileged process. Microsoft's own framing of the problem is blunt: print bugs "accounted for 9% of all cases reported to the Microsoft Security Response Center (MSRC) over the past three years", and the spooler "runs as SYSTEM, which is one of the highest privilege levels in Windows".
The design that follows from that is to stop loading the third-party code, and then, because there is no third-party code left to break, tighten everything else. Microsoft documents four changes.
A different spooler process. "When users enable Windows protected print mode, normal spooler operations are deferred to a new Spooler process that implements the Windows protected print mode improvements." So the service name does not change. The process handling your jobs does.
Lower privileges. The new Spooler Worker process runs with "a new restricted token that removes many privileges such as SeTcbPrivilege, SeAssignPrimaryTokenPrivilege, and no longer runs at SYSTEM IL". IL is integrity level.
Per-user XPS rendering. XPS conversion moves out of SYSTEM. Microsoft names the process, PrintFilterPipelineSVC, as "the source of many memory corruption vulnerabilities", and states that running it as the user minimises the impact of those bugs.
Binary mitigations that were previously impossible. Because no third-party binary is in the process, Microsoft can switch on exploit mitigations that only work if every loaded module cooperates. The documented list is Control Flow Guard and Control Flow Enforcement Technology, child process creation disabled, Redirection Guard, and Arbitrary Code Guard.
That last point is the real answer to "why not just harden the old stack". These protections are, in Microsoft's words, "often all or nothing", and decades-old print drivers are not compatible with them. You cannot enable Arbitrary Code Guard in a process that is about to load a driver from 2009.
Two claims are worth quoting exactly, because they are the business case. WPP "prevents the installation of third-party drivers and enables additional security features", and it "mitigates over half of past reported security issues for Windows print". Over half. Not all. That honesty is useful when someone asks whether this ends print vulnerabilities forever.
How to verify: read every surface before you commit
Before any of the configuration, work out what you have. The order matters: state first, then inventory, then the surrounding surfaces.
The documented way to ask whether WPP is on
Microsoft ships an API whose entire job is answering this question. It is Windows.Graphics.Printing.ProtectedPrint.WindowsProtectedPrintInfo, described in the documentation as providing "an API for querying whether Windows protected print mode is enabled on the current device". It has one property, IsProtectedPrintEnabled, and the documented requirement is Windows 11, version 24H2, introduced in 10.0.26100.0.
You can call it from Windows PowerShell. The command below resolves the WinRT type and reads the property. A return of False means WPP is off on this device right now, and True means it is on.
$false on failure will report "WPP is disabled" across a whole fleet of PowerShell 7 runs. Distinguish "read failed" from "read returned false". The companion script does exactly that.
Registry: the policy tree and the print stack
Two parent keys matter. The first is the Printers policy tree, which is where Group Policy and the Printers CSP write. The parent key is stated once here, so the table stays readable.
| Subkey and value | Policy it backs | Notes |
|---|---|---|
WPP\WindowsProtectedPrintGroupPolicyState | Configure Windows protected print | The documented ADMX and CSP backing store for WPP. Present means policy-managed. Absent means unmanaged, not off. |
IPP\RequireIpps | Require IPPS for IPP printers | Only IPP printers supporting IPPS can be installed. Documented as Windows Insider Preview at the time of writing. |
IPP\AlwaysSendIppPageCounts | Always send job page count information for IPP printers | Renders all pages up front and sends a total page count. Matters if your accounting system counts pages. |
Driver\ConfigureDriverValidationLevel | Manage Print Driver signature validation | Documented values 0 to 4, default 4, "Allow all validly signed drivers". Useful as a staging step before WPP. |
PointAndPrint\RestrictDriverInstallationToAdministrators | Limits print driver installation to Administrators | Covered in depth in the sibling PrintNightmare post. Listed here only so you can see it is a different key. |
This is what the managed state looks like in Registry Editor on a device where the policy has landed. The value name is long, so the panel wraps it rather than clipping it.
The second parent key is the live print stack itself. This is where you read what is actually installed, rather than what policy asked for.
| Subkey | What lives there | Why it matters for WPP |
|---|---|---|
Monitors\<name>\Driver | The DLL for each port monitor and language monitor | Any non-Microsoft DLL here is a module that stops loading under WPP. This is where vendor pull-print hooks hide. |
Environments\<arch>\Drivers | Installed drivers, split by version subkey such as Version-3 and Version-4 | The v3 versus v4 split you are inventorying. |
Providers | Print providers, for example Internet Print Provider and LanMan Print Services | Providers are the loadable modules that AddPrintProviderW module blocking is about. |
Printers\<queue> | Per-queue configuration | Where each installed queue is described. Also where an undocumented readiness hint appears, discussed below. |
REG_DWORD named WindowsProtectedPrintSupportVerified under HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\<queue>. On the test device it is present and set to 1 for two Brother USB printers and for the inbox virtual queues, and entirely absent for the two network queues behind a pull-print port. That pattern is suggestive, and it lines up with Microsoft's statement that some Mopria certified printers are installed with third-party drivers and can be reinstalled after WPP is enabled. Microsoft does not document this value anywhere. An undocumented value can change in any update, so use it as a hint during discovery and never as compliance logic.
PowerShell: the inventory that actually answers the question
Three inbox cmdlets do the work. Get-Printer lists queues, Get-PrinterDriver lists drivers with their major version, and Get-PrinterProperty reads per-queue properties. Joining the first two on driver name is what turns a list into a verdict.
System files and DLLs: what is in the flow
Naming the binaries makes the chain concrete. Every path below is under C:\Windows\System32 unless stated.
| Binary | Role in the print flow |
|---|---|
spoolsv.exe | The Print Spooler service host. Under WPP, operations are deferred to a new spooler process with a restricted token. |
localspl.dll | The local print provider, and also the DLL behind the inbox Local Port monitor. |
win32spl.dll | The remote print provider, used when a client talks to a print server. |
inetpp.dll | The Internet Print Provider, the module behind IPP printing. |
printfilterpipelinesvc.exe | The XPS filter pipeline. Under WPP this runs as the user rather than SYSTEM. |
printisolationhost.exe | Driver isolation host. This is the sandbox that exists precisely because drivers are loaded today. |
tcpmon.dll, usbmon.dll | Inbox Standard TCP/IP Port and USB Monitor port monitors. |
| The IPP class driver package | Staged in the driver store as prnms012.inf. On the test device the driver's data file is MSIPP.xml in the same driver store folder. Verify on your own build with Get-PrinterDriver -Name 'Microsoft IPP Class Driver' | Format-List *. |
Event Viewer: honest about what exists
Microsoft does not publish a set of event IDs specific to Windows protected print mode. Saying so is more useful than inventing some. What does exist is the standard print channel set, and several of those IDs are exactly the evidence you want when WPP removes a queue or blocks a module.
The channel is stated once above. The IDs below were read from the provider manifest on a Windows 11 build 26200 device with Get-WinEvent -ListProvider Microsoft-Windows-PrintService, so you can reproduce the list yourself rather than trusting this table.
| Event ID | Message, abbreviated | Why it matters for WPP |
|---|---|---|
| 300 | Printer was created | What you expect to see as queues are reinstalled on Windows Ready Print. |
| 301 | Printer was deleted, and users will no longer be able to print to this printer | The signature of WPP removing a non-compatible queue. Count these after enablement. |
| 307 | Document owned by user was printed on printer through port | Proof that printing still works. Operational channel only, and it is off by default. |
| 316 | Printer driver was added or updated | Driver churn. Under WPP you should stop seeing third-party names here. |
| 372 | The document failed to print on printer | The first thing to check when a user says printing broke after enablement. |
| 808 | The print spooler failed to load a plug-in module | The closest thing to a module-blocking signal. Expect these where a vendor monitor or provider is refused. |
| 842 | Print job sent through print processor on printer, driver, in isolation mode | Records the isolation mode used. Useful as a before-and-after comparison. |
Microsoft-Windows-PrintService/Operational is disabled by default, confirmed on a current build. Enable it on your pilot ring first, or you will have no per-job record to compare against. Microsoft also documents that event 307 shows a generic document name unless the "Allow job name in event logs" policy under Computer Configuration > Administrative Templates > Printers is enabled.
Log files, services and scheduled tasks
There is no dedicated WPP text log. The driver activity, however, lands in the standard device install log, which is genuinely useful here because WPP's most disruptive action is a driver removal.
| Path | What to search for | Healthy versus broken |
|---|---|---|
C:\Windows\INF\setupapi.dev.log | Printer, and the INF name from Get-PrinterDriver, for example koaxcj__.inf | Healthy after enablement: entries showing the vendor INF being removed and the IPP class driver package being used. Broken: repeated install attempts for a vendor INF, which means something is still trying to push a driver that WPP will refuse. |
C:\Windows\System32\spool\drivers\x64\3 | Vendor DLL names such as a language monitor DLL | This directory holds the v3 driver payloads. Its contents before enablement are your rollback shopping list. |
Services are simpler than people expect. The service name does not change under WPP. On a current build the Print Spooler is configured as below, and the two supporting services are demand-start.
| Service | Display name | Expected state |
|---|---|---|
Spooler | Print Spooler | Running, Automatic, image C:\Windows\System32\spoolsv.exe, running as LocalSystem, depends on RPCSS and http. Unchanged by WPP at the service level. What changes is the process that handles operations. |
PrintNotify | Printer Extensions and Notifications | Manual start, normally stopped until needed. |
PrintWorkflowUserSvc_* | PrintWorkflow per-user service | Manual, per-user instance. This is the plumbing that Print Support Apps use, so it matters more after migration, not less. |
Three scheduled tasks live under the printing path. None of them enable or disable WPP, but they are worth knowing about when you are explaining why a queue reappeared.
| Task | Typical state on a client |
|---|---|
PrinterCleanupTask | Ready. Housekeeping for stale printer state. |
PrintJobCleanupTask | Disabled on the test device. |
EduPrintProv | Ready. Education printer provisioning. |
Does Microsoft ship a readiness tool?
No. This is worth being direct about, because it is the gap this post exists to fill. Microsoft's documented readiness guidance is manual and per-device: open Settings, look at each installed printer for the compatibility shield icon, and check the Mopria certified products list for anything with a scanner. There is no documented fleet inventory report, no Intune report, and no supported cmdlet that returns "this device is ready".
That is what the companion script does. It reads WPP state from both documented surfaces, joins every queue to its driver, classifies each driver as inbox-driverless, inbox-virtual, v3 or v4, flags every non-Microsoft print monitor DLL, and prints a blast-radius count. It never enables WPP and never removes a driver.
The fix: enable it deliberately, in waves
There are three ways to turn WPP on, and they are not equivalent. Settings is per-device and user-reversible. Group Policy and the Printers CSP are managed and, importantly, take the local off switch away.
Group Policy: the exact path
The setting lives in the Printers node of Administrative Templates, backed by Printing.admx. The steps below are Microsoft's own, expanded so nothing is assumed.
- Press Start and open the Local Group Policy Editor, or open your domain Group Policy Management Console and edit the GPO you want to carry this.
- Expand Computer Configuration.
- Expand Administrative Templates.
- Select Printers.
- Right click Configure Windows protected print and choose Edit.
- Select the Enabled radio button.
- Click Apply, then OK.
- Confirm the result on a target device by reading
IsProtectedPrintEnabledwith the PowerShell shown earlier. Do not confirm it by looking only at the registry, because the policy value encoding is not documented.
Intune: the CSP node, and the Settings Catalog equivalent
Microsoft documents the Intune configuration as a custom OMA-URI. The node is device-scoped, ADMX-backed, and documented as Windows 11, version 24H2 [10.0.26100] and later on Pro, Enterprise, Education and IoT Enterprise.
- Sign in to the Microsoft Intune admin center at intune.microsoft.com.
- Go to Devices, then Configuration.
- Click Create, then New policy.
- Set Platform to Windows 10 and later.
- Set Profile type to Templates, choose Custom, then click Create.
- Give the profile a name, for example Windows protected print - ring 1, then click Next.
- On Configuration settings, click Add.
- Set OMA-URI to
./Device/Vendor/MSFT/Policy/Config/Printers/ConfigureWindowsProtectedPrint. - Set Data type to String.
- Set Value to
<enabled/>, exactly as written, angle brackets included. - Click Save, then Next.
- Assign the profile to your pilot group only. Not to All Devices. Review and create.
The Settings Catalog is the other route. Because this is an ADMX-backed policy from Printing.admx, it also appears in the catalog's Administrative Templates category under Printers, with the same friendly name, Configure Windows protected print. Microsoft's WPP documentation only publishes the custom OMA-URI, so if your tenant shows both, prefer whichever your organisation already standardises on and do not deploy both at once.
Settings: the per-device path, and the reversibility reality
End users and single-device testing use Settings. The path and the wording are documented.
- Open Settings and go to Bluetooth & devices, then Printers & scanners.
- Check each installed printer for the WPP compatibility icon.
- For any device with a scanner, confirm it on the Mopria certified products list. If it is not certified, only printing will be available.
- Scroll to Printer preferences and under Windows protected print mode select Set up.
- Select Yes, continue for the prompts. The dialog identifies printers that need reinstalling.
- Reinstall any compatible printers that were removed.
- To reverse it later, return to the same place and select Turn Off, then Yes.
Defender and security policy: what actually applies
Be careful here, because it is easy to overclaim. Windows protected print mode is not a Microsoft Defender feature and it is not an Endpoint Security profile. It is an ADMX-backed Printers policy. There is no Defender Antivirus setting, no attack surface reduction rule and no App Control policy that turns it on.
Two genuine adjacencies exist. First, WPP applies exploit mitigations itself, and those mitigations are the same primitives you know from Exploit Protection: Control Flow Guard, CET, Arbitrary Code Guard, child process creation blocking and Redirection Guard. You do not configure them per-process for the spooler. WPP switches them on because there is no third-party binary left to break them. Second, Microsoft Defender for Endpoint device control includes printer protection, which restricts which printers a user may print to. That is a different control answering a different question. It governs destinations, not which drivers the spooler will load. Deploying one does not give you the other.
A migration order that does not create an outage
- Run the readiness inventory across the fleet and aggregate the JSON. You are looking for the count of at-risk queues per device, and the distinct list of vendor drivers and print monitors.
- Take the distinct printer models from that list and check each against the Mopria certified products list. Confirm IPP is enabled on the device itself, because Microsoft's guidance is explicit: "To use Windows protected print mode, ensure printers have IPP enabled."
- For every vendor feature someone depends on, such as secure release, stapling or account codes, ask the vendor whether they ship a Print Support App. That is Microsoft's documented replacement path.
- Reinstall pilot printers on the inbox IPP class driver while WPP is still off. This decouples "does driverless printing work here" from "does WPP break something else".
- Only then enable WPP on the pilot ring, with the PrintService Operational channel already turned on.
- Compare event 301 counts against your at-risk list. If a queue disappeared that your inventory said was ready, your inventory logic has a gap. Fix it before ring two.
Proof it worked: a real readiness run
The output below is a genuine run of the companion script on a Windows 11 build 26200 device, not an illustration. Device and print server identifiers have been replaced with redaction markers. Everything else, including the vendor names and the driver versions, is as it came out.
Read that output as a decision, not a report. Four of seven queues on one ordinary laptop would vanish. Six third-party v3 drivers would be deleted from the driver store. One vendor language monitor DLL, the pull-print hook, stops loading. Multiply that by a fleet and you have the change-advisory conversation you need to have before, not after.
The same script run under PowerShell 7 on the same device returns WPP=unknown rather than WPP=disabled, because the WinRT type does not resolve there. That is the honest answer, and it is the whole reason the script separates "read failed" from "read returned false".
-JsonPath to a per-device file, gather them centrally, and count at-risk queues by model. The distinct list of vendor drivers across the fleet is usually short, often under a dozen models, and each one is a single yes-or-no question to the manufacturer about Mopria certification. That is a tractable project. Auditing thousands of devices by opening Settings on each is not.
References
- Windows protected print mode - Microsoft Learn. The setup and turn-off steps, what happens on enablement, XPS and fax reinstall, OneNote behaviour.
- Windows protected print mode for enterprises - Microsoft Learn. Group Policy steps, the Intune OMA-URI, and the Print Management restriction against non-WPP servers.
- More information on Windows protected print mode for enterprises and developers - Microsoft Learn. The spooler changes, module blocking, per-user XPS rendering, restricted token and binary mitigations.
- Windows Ready Print and Windows protected print mode - Microsoft Learn. What Windows Ready Print, Mopria and Print Support Apps are.
- Windows protected print mode FAQ - Microsoft Learn. Reversibility, scanners, Mopria printers installed with vendor drivers, and the statement that WPP will be enabled by default at a future date.
- Printers Policy CSP - Microsoft Learn. The
ConfigureWindowsProtectedPrintnode, its ADMX mapping to theWPPkey andWindowsProtectedPrintGroupPolicyStatevalue, and the supported OS. - WindowsProtectedPrintInfo class - Microsoft Learn. The documented API for querying WPP state, and its 10.0.26100 requirement.
- End of servicing plan for third-party printer drivers on Windows - Microsoft Learn. The January 2026, July 2026 and July 2027 dates.
- What's new in Windows 11, version 24H2 for IT pros - Microsoft Learn. Where WPP is listed as a 24H2 feature, with the Settings and Group Policy paths.
- Device control in Microsoft Defender for Endpoint - Microsoft Learn. The printer protection capability, which is a separate control from WPP.
- Event ID 307 does not show the printed document name in Windows - Microsoft Support. Why job names are generic, and the policy that changes it.
Community deep-dives, each fetched and confirmed on topic
| Author | Post | Why it is worth reading |
|---|---|---|
| Martin Bengtsson | Windows Protected Print: Securing Printing on Windows 11 with Microsoft Intune | Walks the Intune deployment end to end and is clear about the spooler privilege changes. |
| Peter van der Woude | Getting started with Windows protected print mode | The cleanest step-by-step on the configuration itself, from the Intune side. |
The sibling post on this site covers Point and Print driver-install hardening after PrintNightmare, including RestrictDriverInstallationToAdministrators and the Point and Print Restrictions settings. That is the interim control for fleets that cannot move to WPP yet. This post is about the destination.
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.