Fix it now
0xC000006D is the general logon failure. Microsoft publishes it as “Generic logon failure” with two causes: an invalid username and/or password, or a LAN Manager authentication level mismatch between the source and target computers. The detail you need is in the sub-status recorded alongside it in the security event log.
net use \\server\share /user:DOMAIN\username *
nltest /dsgetdc:contoso.local
cmdkey /list
- On the machine that refused the connection, open Event Viewer, Windows Logs, Security, and find event 4625 for the attempt. Read the Sub Status field, not the message the user saw.
- Match the sub-status against the table below. 0xC000006A is a wrong password; 0xC0000064 means no account by that name exists as submitted.
- Test the identity format explicitly. Try the down-level form,
DOMAIN\username, then the user principal name form,user@contoso.local, and see whether the sub-status changes. - Confirm the client can find a domain controller with
nltest /dsgetdc:contoso.localbefore concluding anything about the credential. - Clear any stored credential for that server so Windows stops replaying an old password behind your back, then retry and re-read the newest event.
- If nothing about the credential is wrong, compare the LAN Manager authentication level setting on both machines. Microsoft names a mismatch there as a documented cause of this code.
Read the event on the machine that did the refusing. For a share that is the file server, not the client, and looking in the wrong place is the commonest reason this takes an hour instead of five minutes.
If the connection succeeds and the newest event records a success, you are done. If not, the next section maps each sub-status to its own fix.
Why it happens
When an authentication attempt fails, the package returns a general status to the caller and records a more precise sub-status in the event log. The user-facing message is deliberately unhelpful: Microsoft’s own note on repeated 0xC0000064 events is that several in a row can indicate a user enumeration attack, which is exactly what a message distinguishing an unknown account from a wrong password would make easier. The detail lives in the security log, which only administrators can read.
The fields worth reading are the account name and domain exactly as submitted, the logon type, both status values, and the source network address. Logon type 3 is a network logon such as a share; type 10 is Remote Desktop. Between the submitted name and the logon type you can usually tell within seconds whether this is a typing mistake, an identity format problem or something structural.
Identity format causes more of these than bad passwords do. The down-level form is domain and user separated by a backslash. The user principal name form is the user name, an at sign and a suffix, and the suffix has to be one the forest actually knows about, which is not always the DNS domain name. A local account on a remote machine needs the machine name in front of it, and a local account name typed without a prefix is often sent as a domain account instead.
One documented cause is regularly missed: Microsoft lists a LAN Manager authentication level mismatch between the source and target computers as a cause of 0xC000006D, alongside a bad username or password. If the credential is definitely right and the account is definitely fine, that is where to look next, and no amount of retyping the password will move it.
The password is genuinely wrong, or an old one is being replayed
You have this one if Sub-status 0xC000006A, and the bad password count on the account rises with each attempt.
- Have the user type the password rather than relying on anything saved, watching for Caps Lock and keyboard layout.
- Clear stored entries for that server in Credential Manager.
- Check
Get-ADUser <name> -Properties BadLogonCount, LastBadPasswordAttemptto confirm attempts are arriving.
If attempts keep arriving when the user is not typing anything, something on the machine holds the old password. Find it before the account locks out.
The name submitted does not exist in that form
You have this one if Sub-status 0xC0000064, often with a user principal name suffix that looks right but is not one the forest recognises.
- Check the account exists as spelled:
Get-ADUser -Filter "SamAccountName -eq 'jsmith'". - Try the down-level form with the correct NetBIOS domain name, which is not always the same as the DNS name.
- For a local account on the target machine, prefix it with the machine name or a dot and a backslash so it is not sent as a domain account.
The client cannot find a domain controller
You have this one if Sub-status 0xC000005E, typically on remote or VPN clients while office machines are unaffected.
- Run
nltest /dsgetdc:contoso.localfrom the client and see whether a controller answers. - Check the adapter’s DNS servers are domain DNS servers rather than a router or a public resolver.
- For remote sites, confirm the subnet is mapped to the right Active Directory site so clients are not being sent to a controller across a broken link.
Microsoft’s own note on this one is that it is typically an infrastructure or availability issue rather than a security issue, so treat it as a network problem and stop testing credentials.
A restriction on the account blocks this particular attempt
You have this one if Sub-status 0xC000006F or 0xC0000070. The same credentials work at another time of day, or from a different machine.
- Check the logon hours on the account object and widen them if the restriction is stale.
- Check the list of workstations the account may sign in from, which uses computer names rather than addresses.
- Where the restriction is deliberate, add the machine or the hours rather than removing the control entirely.
Workstation restrictions are easy to forget because they are invisible until somebody moves desk or gets a new machine.
Two machines hold different copies of the same local account
You have this one if Workgroup machines, or a server not joined to the domain, where the same user name exists on both sides with different passwords.
- Decide which machine holds the authoritative account and use its name as the prefix.
- Better, stop maintaining duplicate local accounts across machines.
- Beyond a couple of machines, join them to the domain so identity lives in one place.
Full reference
Mapping the sub-status to the fault
These are Microsoft’s published descriptions, taken from the tables for Security events 4776 and 4625.
| Value | Published meaning |
|---|---|
0xC000006D |
Generic logon failure. An invalid username and/or password was used, or there is a LAN Manager authentication level mismatch between the source and target computers |
0xC000006A |
Account logon with misspelled or bad password |
0xC0000064 |
The username you typed does not exist. Bad username |
0xC000005E |
There are currently no logon servers available to service the logon request |
0xC000006F |
Account logon outside authorized hours |
0xC0000070 |
Account logon from unauthorized workstation |
Note that 0xC000006A is the wrong-password sub-status and is not itself in this article’s code list, because it is not what the caller receives – it is what the log records underneath 0xC000006D. That is the whole shape of this problem: the code you are shown and the code that explains it are different, and only one of them is useful.
Identity formats, and when each one works
| Form | Example | Where it works |
|---|---|---|
| Down-level | CONTOSO\jsmith |
Anywhere, provided CONTOSO is the NetBIOS domain name and not the DNS one |
| User principal name | jsmith@contoso.local |
Where the suffix is one the forest knows. Alternative suffixes are configured deliberately |
| Local account on the target | FS01\admin |
Against that machine only |
| Local account on this machine | .\admin |
On the machine you are sitting at |
| Bare name | jsmith |
Ambiguous. Windows decides what to append, and it may not decide what you meant |
The LAN Manager authentication level
This is the cause most often left out of advice on this code, and Microsoft lists it explicitly. The setting decides which authentication protocols a machine will send and accept. Two machines configured at incompatible levels cannot complete a logon, and the result is a generic failure with a correct password and a healthy account.
- Compare the setting on both the source and the target, not just on the one that is complaining.
- Expect this where an older device, appliance or application is talking to a hardened Windows machine, or where a hardening baseline has been applied to one side only.
- Raise the weaker side rather than lowering the stronger one. Lowering it to make a connection work weakens every other connection that machine makes.
- If the weaker side is a device that cannot be raised, that is a replacement conversation, not a configuration one.
Reading the event without guessing
- Go to the machine that refused the connection. For a share, that is the file server.
- Windows Logs, Security, and find the newest 4625 for the account and time in question.
- Read Account Name and Account Domain exactly as submitted. Half the answers are visible right there.
- Read Logon Type. 3 is a network logon; 10 is Remote Desktop.
- Read Sub Status, and only then decide what to change.
- Retry, and read the newest event again. A changed sub-status is progress even when the connection still fails.
Every code this article covers
| Code | What it points at | Source |
|---|---|---|
0xC000006D |
Generic logon failure. Microsoft names two causes: an invalid username and/or password, or a LAN Manager authentication level mismatch between the source and target computers | Microsoft Learn |
0xC0000064 |
The username you typed does not exist. Bad username. Several of these in a row can indicate a user enumeration attack | Microsoft Learn |
0xC000005E |
There are currently no logon servers available to service the logon request. Microsoft notes this is typically an infrastructure or availability issue rather than a security one | Microsoft Learn |
0xC000006F |
Account logon outside authorized hours | Microsoft Learn |
0xC0000070 |
Account logon from unauthorized workstation | Microsoft Learn |
Confirm the fix worked
- Repeat the connection and confirm the newest security event records a success rather than a failure.
- Confirm the bad password count on the account has stopped rising.
- Test the same credentials from a second machine, to prove the fix is on the account rather than on one client.
- Where a stored credential was the cause, sign out and back in and confirm nothing re-creates it.
- If you changed an authentication level setting, confirm the machine’s other connections still work before you leave it.
Questions people ask about this
Is there anything to buy here?
No. Every step uses tools included with Windows and the free administration tools. This is a diagnosis job, and the answer is nearly always a typing mistake, a stored credential or a directory setting.
Why does Windows not just tell the user what went wrong?
Because a helpful message is also helpful to an attacker. Microsoft’s own note is that repeated 0xC0000064 events can indicate a user enumeration attack, which is exactly what a message distinguishing an unknown account from a wrong password would enable. The detail goes to the security log instead.
The event log shows attempts I did not make. Should I worry?
Look at the source network address first. Attempts from a machine the user owns are usually a stored credential. Attempts from an unfamiliar address, especially against an internet-facing service, deserve immediate attention.
Does the user principal name always work in place of the down-level name?
Only when the suffix is one the forest knows. Alternative suffixes are configured deliberately, and a mail domain that happens to look right is not automatically a valid one for signing in.
The password is definitely correct and the account is fine. What now?
Compare the LAN Manager authentication level on both machines. Microsoft lists a mismatch there as a cause of this code, and it produces exactly this symptom: a correct credential refused with a generic failure.
