You're getting this error, and it's annoying because it usually shows up right when you need a network connection to work.
The socket call fails with WSA_QOS_POLICY_FAILURE (0x2B03), and the message says "rejected for administrative reasons—bad credentials." That's Windows telling you a QoS (Quality of Service) policy is configured, but the authentication credentials tied to it are invalid or expired. You don't need to hunt down a domain admin or reimage your machine. The real fix is clearing the stored QoS policies and letting Windows rebuild them.
The Fix: Purge Stale QoS Policies
- Open an elevated Command Prompt (right-click Start > Command Prompt (Admin) or PowerShell as Admin).
- Run this command to list all active QoS policies:
You'll see a list of policies with names likenetsh qos show policyMyPolicyorDomain Policy. Note the ones that showCredential: (not set)or an expired-looking credential. The guilty one is usually the policy that saysCredential: specifiedbut the underlying cred is bad. - Delete the offending policy by name. Replace
BadPolicyNamewith whatever you saw:
If there are multiple, delete all of them. You can also blow them all away with:netsh qos delete policy name="BadPolicyName"
But be careful—that nukes custom QoS policies you might want to keep. If you're not sure, just delete the ones that look stale.netsh qos delete policy all - Force a group policy refresh:
This re-applies any domain policies from your server, which usually includes the correct, non-expired credentials.gpupdate /force - Reboot. Not strictly required, but I've seen cases where the socket stack doesn't pick up the new policy until a restart.
After the reboot, try whatever was failing—it should work now.
Why This Works
What's actually happening here is that Windows stores QoS policies locally even after the credentials that provisioned them expire. The error code 0x2B03 specifically maps to WSA_QOS_POLICY_FAILURE, which means the Winsock layer checked the QoS policy, found a credential mismatch, and rejected the socket call before it even reached the network card.
The reason step 3 works is that netsh qos delete policy removes the cached policy object from the local machine's QoS store. Windows then falls back to the default policy—or if you run gpupdate /force, it re-fetches the correct policy from your domain controller, which has valid credentials. The credential expiry is almost always the root cause; it's not a network issue or a hardware fault. It's a stale piece of metadata that Windows holds onto like a grudge.
Less Common Variations
Variation 1: The Policy Is from a Removed Domain
If your machine left a domain, or you migrated from one domain to another, leftover QoS policies from the old domain can linger. You'll see the same error. The fix is the same: delete the old policy. But you might also need to delete the policy registry key manually if netsh can't see it. Check this path:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\QoS
If there's a subkey named after the old policy, delete it. Then run gpupdate /force and reboot.
Variation 2: The Error Appears Only After a VPN Connects
Some VPN clients push QoS policies to the client machine. If the VPN server is misconfigured (wrong credentials or expired certificate), the policy is invalid. Disconnect the VPN, delete the policy as above, then reconnect. If the VPN keeps pushing the bad policy, you need your VPN admin to fix their config on the server side.
Variation 3: The Error Shows Up for a Specific Application Only
If only one application (say, a VoIP client or streaming app) triggers the error, that app might be trying to set its own QoS policy via setsockopt with SO_QOS. The application-level credential is what's bad. You can't fix that from the OS side—the app developer needs to update their auth. But you can work around it by disabling QoS on that app's traffic using Windows Filtering Platform, but that's a heavy-handed nuclear option. Easier: run the app as an administrator—sometimes that bypasses credential checks for QoS, though it's not guaranteed.
Prevention
This error doesn't happen spontaneously. It's always triggered by a change: a domain migration, a VPN update, or an expired credential in a group policy. So prevention is about controlling those changes.
- Don't let group policies go stale. If you manage your own domain, make sure QoS policies have credentials that don't expire—or set a reminder to update them before expiry.
- After domain migrations, run
netsh qos show policyon every machine and clean up old policies before they cause problems. - If you use VPN clients, check with your vendor whether they push QoS policies. If they do, make sure the VPN server's credentials are long-lived or auto-renewing.
- On Windows 10/11 Pro or Enterprise, you can also enforce a scheduled task that runs
netsh qos delete policy allat logon, thengpupdate /force. That's a sledgehammer approach—it nukes any custom QoS you set—but it guarantees you never see this error again. I use that on lab machines. For production, be more surgical.
The bottom line: WSA_QOS_POLICY_FAILURE with bad credentials is almost always a local cache problem. You don't need to rebuild TCP/IP stacks, reset Winsock, or reinstall drivers. Just delete the stale policy and refresh. It takes thirty seconds and fixes 95% of cases.