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?

È stato utile?

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 Unix grep) nella directory Include 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. Utilizzare HRESULT_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.

entrare descrizione dell'immagine qui

E per -1.073,740777 millions che è STATUS_INVALID_CRUNTIME_PARAMETER definito winnt.h.

entrare descrizione dell'immagine qui

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top