Onde posso encontrar uma lista de todos os códigos de erro do Windows?
-
22-08-2019 - |
Pergunta
Em uma pergunta anterior, eu perguntei o que ele queria dizer quando meu programa devolveu um valor obscura como
-1073741819
Bem, agora eu estou começando outro valor de retorno grande,
-1073740777
E eu gostaria de saber se há alguma lista de todos esses valores e que eles sopmewhere média?
Solução
Geralmente você vai ficar melhor os resultados da pesquisa se você imprimir o número do erro em hexadecimal, em vez de forma decimal assinado.
Por exemplo, seu primeiro erro é -1073741819 que também pode ser representado por 0xC0000005 em hexadecimal. Este é um erro "violação de acesso" como o Google vai rapidamente dizer-lhe.
Outras dicas
Como o sistema de código de erro do Windows é extensível, não há um único lugar para olhar para cima todos os códigos de erro do Windows possíveis. No entanto, você pode começar com:
- de códigos de erro COM . Às vezes saber o que facilidade um erro vem podem ajudar a descobrir o que cabeçalho do arquivo vem.
- Visual Studio, desde pelo menos 2003, inclui uma ferramenta
ERRLOOK
. Tente que primeiro se você estiver usando o Visual Studio. - Muitos dos códigos que você encontrará estão em
Winerror.h
. Eu incluí um link para MSDN que contém o conteúdo desse arquivo de cabeçalho. Ou você pode olhar para o código de erro lista por número no este página . - O ideal é que você sabe o que função retornou o código, e então você pode consultar a função no MSDN e olhar para todos os possíveis valores de retorno. Claro, você vai precisar para se referir a
Winerror.h
, ou um arquivo de outro cabeçalho para obter os valores reais. - Você pode
find
(como Unixgrep
) no diretórioInclude
da plataforma SDK tanto para o valor hexadecimal de todo o código de erro, ou o valor decimal de apenas a seção de código - ou seja, os 16 bits mais baixos. UseHRESULT_CODE
para extrair isso. Veja a estrutura de códigos de erro COM acima. - Existem algumas ferramentas de pesquisa de erro, onde você pode colar em um valor e parece-lo em seu banco de dados e diz-lhe o que significa. Olhe aqui e aqui .
- Google. Use o valor hexadecimal completo. Às vezes, você vai encontrar informações muito úteis, ou pelo menos pistas.
Bem, há um monte deles aqui,
http://msdn.microsoft.com/en -us / library / ms681381 (VS.85) .aspx
Mas quando eu chegar em um como o seu exemplo, eu apenas o Google o número.
Muitos deles (mas não Acho que os relacionados com COM) estão em um arquivo de cabeçalho chamado winerror.h .
Em (algumas versões do) Visual Studio, no menu 'Tools
', que você pode encontrar um item de menu chamado 'Error Lookup...
'.
NTSTATUS
NTSTATUS * abrange uma gama de instalações
FACILITY_URT (0x013) * exceções CLR
HRESULTS
FACILITY_NULL (0x000)
FACILITY_RPC (0x001)
FACILITY_DISPATCH (0x002)
FACILITY_RPC_STUBS (0x003)
FACILITY_USER (0x004) * várias bibliotecas pode reutilizar o mesmo código de erro
FACILITY_MCA_ERROR_CODE (0x005)
FACILITY_WIN32 , MSDN (0x007) * códigos de erro WINAPI padrão
FACILITY_WINDOWS (0x008)
FACILITY_SECURITY (0x009)
FACILITY_CERT (0x00B)
FACILITY_INTERNET (0x00C)
FACILITY_MEDIASERVER (0x00D)
FACILITY_MSMQ (0x00E)
FACILITY_SETUPAPI (0x00F)
FACILITY_SCARD (0x010)
FACILITY_COMPLUS (0x011)
FACILITY_HTTP (0x019)
FACILITY_USERMODE_FILTER_MANAGER (0x01F)
FACILITY_WINDOWSUPDATE (0x024)
FACILITY_GRAPHICS (0x026)
FACILITY_NAP (0x027)
FACILITY_INK (0x028)
FACILITY_TPM_SOFTWARE (0x029)
FACILITY_UI (0x02A)
FACILITY_PLA (0x030)
FACILITY_FVE (0x031)
FACILITY_FWP (0x032)
FACILITY_WINRM (0x033)
FACILITY_NDIS (0x034)
FACILITY_USERMODE_HYPERVISOR (0x035)
FACILITY_USERMODE_VIRTUALIZATION (0x037)
FACILITY_USERMODE_VOLMGR (0x038)
FACILITY_BCD (0x039)
FACILITY_USERMODE_VHD (0x03A)
FACILITY_SDIAG (0x03C)
FACILITY_WEBSERVICES (0x03D)
FACILITY_WPN (0x03E)
FACILITY_MBN (0x054)
FACILITY_P2P (0x063)
FACILITY_BLUETOOTH_ATT (0x065)
FACILITY_AUDIO (0x066)
FACILITY_IMAPI2 (0x0AA)
FACILITY_RTC_INTERFACE (0x0EE)
FACILITY_SIP_STATUS_CODE (0x0EF)
FACILITY_PINT_STATUS_CODE (0x0F0)
FACILITY_MAX_WDSTPTMGMT (0x110)
FACILITY_WDSMCSERVER (0x121)
FACILITY_MAX_WDSMC (0x122)
FACILITY_MAX_WDSCP (0x125)
FACILITY_BACKUP (0x7FF)
FACILITY_NTDSB (0x800)
FACILITY_DIRECT3D10 (0x879)
FACILITY_DXGI (0x87A)
FACILITY_DXGI_DDI (0x87B)
FACILITY_DIRECT3D11 (0x87C)
FACILITY_DWRITE (0x898)
FACILITY_D2D (0x899)
FACILITY_DEFRAG (0x900)
FACILITY_ONLINE_ID (0xA02)
Bug Cheques
Bug verificar o código de referência * Telas aka azuis
Aqui está uma classe em C#
para ajudá-lo converter o códigos de erro para string
:
public static class WinErrors
{
#region definitions
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr LocalFree(IntPtr hMem);
[DllImport("kernel32.dll", SetLastError = true)]
static extern int FormatMessage(FormatMessageFlags dwFlags, IntPtr lpSource, uint dwMessageId, uint dwLanguageId, ref IntPtr lpBuffer, uint nSize, IntPtr Arguments);
[Flags]
private enum FormatMessageFlags : uint
{
FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100,
FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200,
FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000,
FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000,
FORMAT_MESSAGE_FROM_HMODULE = 0x00000800,
FORMAT_MESSAGE_FROM_STRING = 0x00000400,
}
#endregion
/// <summary>
/// Gets a user friendly string message for a system error code
/// </summary>
/// <param name="errorCode">System error code</param>
/// <returns>Error string</returns>
public static string GetSystemMessage(int errorCode)
{
try
{
IntPtr lpMsgBuf = IntPtr.Zero;
int dwChars = FormatMessage(
FormatMessageFlags.FORMAT_MESSAGE_ALLOCATE_BUFFER | FormatMessageFlags.FORMAT_MESSAGE_FROM_SYSTEM | FormatMessageFlags.FORMAT_MESSAGE_IGNORE_INSERTS,
IntPtr.Zero,
(uint) errorCode,
0, // Default language
ref lpMsgBuf,
0,
IntPtr.Zero);
if (dwChars == 0)
{
// Handle the error.
int le = Marshal.GetLastWin32Error();
return "Unable to get error code string from System - Error " + le.ToString();
}
string sRet = Marshal.PtrToStringAnsi(lpMsgBuf);
// Free the buffer.
lpMsgBuf = LocalFree(lpMsgBuf);
return sRet;
}
catch (Exception e)
{
return "Unable to get error code string from System -> " + e.ToString();
}
}
}
Aqui é uma ferramenta online gratuita 100% " MagnumDB " para "banco de dados Número mágico", que contém cerca de 350.000 constantes (inteiros, cordas, guids, etc.) analisado a partir inteiros os arquivos do Windows SDK (~ 6.000 arquivos), que você pode consultar por valor e por nome. Disclaimer: Eu escrevi-o após anos de pesquisa para constantes, nomes, guids ...
Aqui está o resultado para -1073741819 que mapeia para 3 constantes diferentes ( com o mesmo valor eo mesmo significado) definida em 3 arquivos diferentes, o mais comum sendo STATUS_ACCESS_VIOLATION
.
E para -1073740777 que é STATUS_INVALID_CRUNTIME_PARAMETER
definido no winnt.h
.
Ele suporta inteiros, inteiros assinados, inteiros sem sinal, notação hexadecimal, e também pesquisas de texto cru. Ele também sabe o valor de constantes que são definidas pelas operações (como c2 = c1 + 1).