Fix SMB Cluster Dialect Error 0XC05D0001
This error hits when a Windows Server cluster node runs a newer SMB dialect than the cluster functional level supports. Dialect mismatch blocks SMB connections.
When This Error Shows Up
You'll see STATUS_SMB_BAD_CLUSTER_DIALECT (0XC05D0001) right when a client tries to connect to an SMB share hosted on a Windows Server Failover Cluster. The connection fails immediately. No timeout, no retry. Just a hard stop with this error.
I've seen it most often after you've applied a Windows Update or a feature upgrade on one cluster node but not the others. Say you've got a three-node cluster running Windows Server 2019. You patch one node to a newer build that supports SMB 3.1.1 natively, but the cluster functional level is still at Windows Server 2016 (which only knows SMB 3.0). The patched node tries to negotiate a higher dialect, the cluster says "no," and the whole thing breaks.
Another trigger: you mix Windows Server versions in the same cluster. For example, two nodes on Server 2019 and one on Server 2022. The 2022 node brings SMB 3.1.1 with it, but the cluster functional level is at Server 2016. That mismatch kills connections to any share hosted on the 2022 node.
Root Cause in Plain English
Every Windows Server cluster has a functional level. Think of it as the "minimum common language" all nodes agree to speak. The cluster functional level controls which SMB dialect the cluster will accept. If any node tries to use an SMB dialect higher than what the cluster functional level allows, the cluster blocks it.
The cluster doesn't try to negotiate down to a compatible dialect. It just fails with this error. That's by design—Microsoft decided that SMB dialect negotiation within a cluster should be strict to prevent silent data corruption or weird behavior. So you've got to make the cluster functional level match what all your nodes can support.
Here's the kicker: you can't raise the cluster functional level unless all nodes are running at least that OS version. So if you have a Server 2016 node in the cluster, you're stuck at the Server 2016 functional level. The fix is to either remove that old node or upgrade it.
How to Fix the Dialect Mismatch
Skip any voodoo about modifying SMB settings on individual nodes. That won't help here because the cluster controls the dialect, not the node's local SMB configuration.
Step 1: Check Your Cluster Functional Level
Open PowerShell as Administrator on any cluster node. Run this command:
Get-Cluster | Select-Object ClusterFunctionalLevel
Look at the output. It will be a number like 9 (Server 2012 R2), 10 (Server 2016), 11 (Server 2019), or 12 (Server 2022). Write that number down.
Step 2: Check Each Node's Operating System
You need every node in the cluster to be at the same OS version—or at least a version that matches or exceeds the functional level you want to use. Run this on each node:
Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object Caption, Version
Make a list. If any node is running an older OS (like Server 2016 when the others are Server 2019), that node is the problem.
Step 3: Upgrade or Remove the Outdated Node
You've got two choices here. Both work.
Option A: Upgrade the old node. Apply the latest Windows Server version to match the rest of the cluster. That means a full OS upgrade (in-place or clean install) on that node. Then rejoin it to the cluster. This is the cleanest path.
Option B: Remove the old node. If you can't upgrade it (maybe it's a legacy app box), evict it from the cluster. Run this on a healthy node:
Remove-ClusterNode -Name OldNodeName
After removal, the cluster will have only nodes that all speak the same dialect.
Step 4: Raise the Cluster Functional Level
Once all nodes are on the same OS version (or higher), you can raise the functional level. In PowerShell, run:
Update-ClusterFunctionalLevel
The command will prompt you to confirm. Type Y and hit Enter. It takes about 30 seconds. After it finishes, the cluster will support the higher SMB dialect.
Don't skip a cluster validation test after this. Run:
Test-Cluster
This checks that all nodes can talk to each other with the new functional level. If you get any warnings about SMB, recheck your node OS versions.
What to Check If It Still Fails
If you still see error 0XC05D0001 after these steps, here's what I'd check in order:
- Cluster quorum settings. A node that lost quorum might still be in the cluster but unable to negotiate properly. Run
Get-ClusterQuorumto see if it's set to Node and File Share Majority or something that allows a split-brain scenario. - SMB signing settings. On each node, check
Get-SmbServerConfiguration | Select-Object RequireSecuritySignature. If one node requires signing and another doesn't, you can get negotiation failures that look like this error. Set them all the same:Set-SmbServerConfiguration -RequireSecuritySignature $true(or$falsedepending on your policy). - Third-party antivirus or firewall. Some security software intercepts SMB traffic. Temporarily disable it on one node and test. If the error goes away, you've found the blocker. Re-enable the software and add an exception for SMB traffic on ports 445 and 139.
- Check the cluster log. Run
Get-ClusterLog -Destination C:\ClusterLogsand look for lines containing "SMB" or "dialect". That'll tell you exactly which node and which share triggered the error.
One last thing: if you're running a stretched cluster across sites, make sure the network latency between sites is under 1ms round-trip. Anything higher can cause SMB negotiation to timeout and fall back to a lower dialect, which the cluster might reject with this error.
Was this solution helpful?