Quick answer for advanced users
Run netsh wfp show state to dump current WFP state, then identify the process that called FwpsNetEventsSubscribe or FwpsEnum with overly narrow conditions. Kill that process or recompile your filter driver with broader match fields. The template you're passing contains an immutable FWPM_CONDITION that can never be satisfied by any real packet.
Why you're seeing 0x80320033
I know this error is infuriating — it's usually a developer-side bug in a WFP callout driver or a misconfigured firewall script. The kernel returns FWP_E_NEVER_MATCH when the enumeration template or subscription you've defined has a logical contradiction. For example, if you specify a condition that requires both IPv4 and IPv6 match simultaneously, or a port range where the low port is higher than the high port, the filter engine knows instantly this template will never match a single object.
Common real-world triggers: a third-party VPN driver (like Cisco AnyConnect or Pulse Secure) that registers a broken network event subscription, or a homegrown WFP callout that hardcodes a field ID incorrectly. On Windows 10 22H2 and Windows 11 23H2, I've seen this happen after a Windows Update that changed the WFP condition GUIDs without updating the driver.
Fix step-by-step
- Identify the offending process. Open PowerShell as admin and run:
If that returns nothing, check the System event log for WFP errors with Event ID 5447 or 5448.Get-WmiObject -Namespace root\wmi -Class WFPFilter | Where-Object {$_.Error -eq 0x80320033} | Format-List - Check for stale handles. When a WFP subscription call crashes, it leaves a dead handle. Restart the base filtering engine:
This clears all cached subscriptions.net stop BFE
net start BFE - Dump current WFP state. Run
netsh wfp show state. Look for any filter that has aconditionwithfieldKeythat references an invalid or mismatched layer. Usually you'll see a filter inFWPM_LAYER_ALE_AUTH_CONNECT_V4with a condition that makes no sense. - Remove the bad filter. If you know the filter ID (from the netsh output), delete it:
Replace 12345 with your filter ID.netsh wfp delete filter id=12345 - Update your filter driver or script. If you wrote the code, check the
FWPM_FILTERstructure. Common mistake: settingfilterConditionwith two conditions where one isFWP_MATCH_EQUALfor a field that's not present in the target layer. For example,FWPM_CONDITION_IP_LOCAL_PORTis not valid inFWPM_LAYER_INBOUND_IPPACKET. Remove that condition.
Alternative fixes if the main one doesn't work
If restarting BFE didn't help, check for a misbehaving antivirus. Bitdefender and McAfee both hook into WFP and have caused this error in the past. Temporarily disable real-time protection, then reproduce the error. If it disappears, update or reinstall the AV software.
Another option: use the Windows Filtering Platform Control Tool (WFPCtl) from the WDK. It lets you enumerate all filters and subscriptions with their exact conditions. I've used it to spot a condition where the developer accidentally used FWPM_CONDITION_FLAGS with a bitmask that didn't exist in the ALE layer. WFPCtl is part of the Windows SDK — install it via Visual Studio Installer, then run wfpstate.
If you're still stuck, check the callout driver version against the Windows build. WFP condition GUIDs changed between Windows 10 2004 and 22H2. If your driver was compiled against an older SDK, rebuild it with the latest WDK.
Prevention tips
Always validate your FWPM_FILTER structure against the target layer before subscribing. Microsoft's WFP documentation includes a table of valid fields per layer — print it out. I keep a laminated copy on my desk. Also, never reuse a condition array across layers without checking each field's availability.
If you're writing a callout driver, wrap your FwpsNetEventsSubscribe call in a try-except block and log the error code. That way you get the exact condition that caused the mismatch. I've saved hours by doing this — the event data includes the broken template.
Finally, set up a WFP audit rule with audit -security to log all failed subscription attempts. This gives you a record of which process triggered the error and when. Run auditpol /set /subcategory:"Filtering Platform Packet Drop" /success:enable /failure:enable.
This error is a pain, but once you know the drill — check the conditions, restart BFE, and validate your layer mapping — it's a 5-minute fix. You've got this.