Dove posso trovare un elenco di tutti i codici di errore di Windows?
-
22-08-2019 - |
Domanda
In una domanda precedente, ho chiesto cosa volesse dire quando il mio programma ha restituito un valore oscura come
-1073741819
Bene, ora sto ottenendo un altro valore di ritorno di grandi dimensioni,
-1073740777
E mi piacerebbe sapere se c'è qualche elenco di tutti questi valori e il loro significato sopmewhere?
Soluzione
In genere si ottengono migliori risultati di ricerca se si stampa il numero di errore in esadecimale, invece di forma decimale firmato.
Ad esempio, il primo errore è -1073741819 che può anche essere rappresentato da 0xC0000005 in esadecimale. Questo è un errore "violazione di accesso", come Google rapidamente dirvi.
Altri suggerimenti
Dato che il sistema di codice di errore di Windows è estensibile, non c'è posto solo per cercare tutti i possibili codici di errore di Windows. Tuttavia, si può iniziare con:
- dei codici di errore COM . A volte sapere cosa impianto di un errore viene da può aiutare a scoprire che cosa file di intestazione da cui proviene.
- Visual Studio, almeno dal 2003, include uno strumento
ERRLOOK
. Prova che prima se si sta utilizzando Visual Studio. - Molti dei codici che si incontrano sono in
Winerror.h
. Ho incluso un link a MSDN che contiene il contenuto di tale file di intestazione. Oppure si può guardare il listato di codice di errore numero sul questo pagina. - Idealmente si sa quale funzione ha restituito il codice, e quindi si può cercare la funzione su MSDN e guardare tutti i possibili valori di ritorno. Naturalmente, sarà necessario fare riferimento a
Winerror.h
, o un file di un altro colpo di testa per ottenere i valori reali. - Puoi
find
(come Unixgrep
) nella directoryInclude
della piattaforma SDK sia per il valore esadecimale dell'intero codice di errore, o il valore decimale della sola sezione di codice - cioè, i 16 bit inferiori. UtilizzareHRESULT_CODE
per estrarre questo. Vedere la struttura dei codici di errore COM sopra. - Ci sono alcuni strumenti di ricerca errore in cui è possibile incollare in un valore e sembra in su nel suo database e ti dice che cosa significa. Guardate qui e qui .
- Google. Utilizzare l'intero valore esadecimale. A volte troverete informazioni molto utili, o almeno indizi.
Beh, c'è un gruppo di loro qui,
http://msdn.microsoft.com/en -us / library / ms681381 (VS.85) aspx
Ma quando torno a uno come tuo esempio ho appena Google il numero.
Molti di loro (ma non credo che quelli relativi a COM) sono in un file di intestazione denominato Winerror.h .
In (alcune versioni di Visual Studio), sotto il menu 'Tools
', si potrebbe trovare una voce di menu denominata 'Error Lookup...
'.
NTSTATUS
NTSTATUS * copre una serie di servizi
FACILITY_URT (0x013) * CLR eccezioni
HRESULTS
FACILITY_NULL (0x000)
FACILITY_RPC (0x001)
FACILITY_DISPATCH (0x002)
FACILITY_RPC_STUBS (0x003)
FACILITY_USER (0x004) * librerie multiple può riutilizzare lo stesso codice di errore
FACILITY_MCA_ERROR_CODE (0x005)
FACILITY_WIN32 , MSDN (0x007) * codici di errore standard di WINAPI
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)
controlli dei bug
Bug Controllare il codice di riferimento * Schermi aka blu
Ecco una classe in C#
per aiutare a convertire i codici di errore per 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();
}
}
}
Qui è uno strumento online gratuito 100% " MagnumDB " per "Numero di database magico" che contiene circa 350.000 costanti (interi, stringhe, GUID, etc.) analizzati dai intere file di Windows SDK (~ 6.000 file), che è possibile interrogare per valore e per nome. Diniego: L'ho scritto dopo anni di ricerca per le costanti, i nomi, GUID ...
Ecco il risultato per -1073741819 che associa a 3 diverse costanti ( con lo stesso valore e lo stesso significato) definita in 3 file diversi, il più comune è STATUS_ACCESS_VIOLATION
.
E per -1.073,740777 millions che è STATUS_INVALID_CRUNTIME_PARAMETER
definito winnt.h
.
E 'supporta interi, hanno firmato interi, interi senza segno, la notazione esadecimale, e anche ricerche di testo crudo. Sa anche il valore di costanti che sono definiti dalle operazioni (come c2 = c1 + 1).