Why do many Windows error codes start with 0xC000xxxx? Is there a reference for them?

I've noticed that most Windows error codes come in one of two forms:

  • Standard system error codes, e.g. 0x05 is Access Denied.
  • Error codes in the form 0xC000xxxx, which I can't find any reference for.

I first considered that the latter error codes were just system error codes that had been bitwise OR'ed with 0xC0000000 for some reason, but this doesn't seem to be the case; they do not match up to the nature of the fault if mapped in that way.

All of the references to such errors on Google seem to be related to application crashes, but no error names are provided.

They don't seem to be application specific, either, since some of the Nt* APIs inside ntdll.dll return them, e.g. NtCreateDirectoryObject returns 0xC0000022 when called with bad parameters.

What's the difference between the two types of error code? Does Microsoft officially recognise them as standard error codes? Is there a reference page for them?


There's an extensive list of error values in the documentation of NTSTATUS values.

For example, 0xC0000022 stands for STATUS_ACCESS_DENIED, which is a very common return value.

Somewhat unrelated, but there's also a list of Bug Check codes. These codes are usually displayed when receiving a BSOD.