Códigos de erro do Windows
Descubra o que significa um código de erro do Windows: os Win32 do GetLastError, os HRESULT como 0x80070005, os NTSTATUS como 0xC0000005 e os códigos de tela azul. Aceita o valor em hexadecimal ou decimal, o nome simbólico ou parte da mensagem, e separa o HRESULT em campos.
Exemplos:

Nomes e descrições © Microsoft Corporation, extraídos dos arquivos de cabeçalho do Windows SDK e da documentação do Microsoft Learn, publicada sob a licença CC BY 4.0. As descrições são exibidas no seu idioma quando a Microsoft as traduziu.Códigos de erro do sistema no Microsoft Learn

Erros comuns

Windows Update, instalações e arquivos

Programas que não abrem ou que fecham sozinhos

Telas azuis (verificações de bug)

Como funciona

O Windows informa os erros com números de quatro famílias diferentes. Os códigos Win32, como 5 ou 1603, são os que o GetLastError retorna. Os HRESULT, como 0x80070005, são os do COM, do Windows Update e dos instaladores. Os NTSTATUS, como 0xC0000005, vêm do kernel e aparecem quando um programa é encerrado. As verificações de bug (bug checks), como 0xD1, são as das telas azuis. A ferramenta pesquisa nas quatro famílias ao mesmo tempo, com os nomes e textos que a Microsoft publica no Windows SDK.

Muitos HRESULT carregam dentro um código Win32 ou um NTSTATUS. Quando o valor tem FACILITY_WIN32, como 0x80070005, a ferramenta mostra também o código Win32 contido e sua descrição, que é a que realmente explica o erro. Ela também separa os bits do valor: a gravidade, a facility que indica qual componente o gerou e o código dentro dessa facility.

Exemplos

0x80070005FACILITY_WIN32 (7) · 5 → ERROR_ACCESS_DENIEDUm HRESULT que começa com 0x8007 envolve um código Win32 nos quatro últimos dígitos: 0x0005 é o 5, acesso negado.
-10737418190xC0000005 · STATUS_ACCESS_VIOLATIONO Visualizador de Eventos e os códigos de saída dos processos costumam mostrar o valor como decimal com sinal. É o mesmo NTSTATUS de uma violação de acesso.
16030x80070643 · ERROR_INSTALL_FAILUREO Windows Installer termina com 1603 quando uma instalação falha, e o Windows Update informa o mesmo erro como o HRESULT 0x80070643.

Casos de uso

  • Entender um erro do Windows Update, da Microsoft Store ou de um instalador antes de procurar a solução.
  • Traduzir o código de saída de um processo ou o valor exibido pelo Visualizador de Eventos para o nome da constante.
  • Identificar a verificação de bug (bug check) de uma tela azul a partir do código de parada.
  • Encontrar o valor de uma constante como ERROR_ACCESS_DENIED ou E_INVALIDARG ao programar com a API do Windows.
  • Ver o texto original em inglês de um erro exibido traduzido, para pesquisá-lo em fóruns e na documentação.

Perguntas frequentes

Por que o mesmo número aparece como dois erros diferentes?

Cada família numera seus códigos separadamente. 0x7B é o erro Win32 123, nome de arquivo incorreto, e também o bug check INACCESSIBLE_BOOT_DEVICE de uma tela azul. O contexto indica qual é: se veio de uma tela azul, é o bug check; se foi retornado por um programa ou comando, é o Win32.

Como converter um código Win32 em HRESULT?

Com a macro HRESULT_FROM_WIN32: pega-se o código em hexadecimal e coloca-se 0x8007 na frente, o que define o bit de erro como 1 e a facility como 7 (WIN32). O 5 vira 0x80070005 e o 1603, que é 0x643, vira 0x80070643. Para voltar, pegam-se os quatro últimos dígitos.

Por que aparece um número negativo?

Os HRESULT e NTSTATUS de erro têm o bit mais alto em 1; por isso, ao exibi-los como inteiro com sinal, resultam em um número negativo. -2147024891 é 0x80070005 e -1073741819 é 0xC0000005. A ferramenta aceita as duas formas.

Por que algumas descrições estão em inglês?

As descrições traduzidas são as que a Microsoft publica no Microsoft Learn para os códigos Win32. Os textos dos HRESULT, dos NTSTATUS e dos códigos Win32 que o Learn não traduziu para o seu idioma são exibidos em inglês, como constam no Windows SDK.

O que fazer se o código não aparece?

Os programas podem definir seus próprios códigos, principalmente os que têm o bit C em 1 ou uma facility que não é do Windows, e esses não constam no SDK. Nesse caso, convém olhar a facility exibida pela ferramenta para saber qual componente gerou o erro e procurar o código na documentação desse produto.