Unde pot găsi o listă cu toate codurile de eroare Windows? (Programare, Windows, Cod De Eroare)

user98188 a intrebat.

Într-o întrebare anterioară, am întrebat ce înseamnă atunci când programul meu a returnat o valoare obscură precum

-1073741819

Ei bine, acum primesc o altă valoare de returnare mare,

-1073740777

Și aș vrea să știu dacă există o listă cu toate aceste valori și ce înseamnă ele sopmewhere?

Comentarii

  • Nu-mi vine să cred, dar este prima dată când această întrebare a apărut pe SO, din câte văd eu. Am crezut cu siguranță că trebuie să fie un duplicat până acum. –  > Por John Saunders.
7 răspunsuri
Greg Hewgill

În general, veți obține rezultate de căutare mai bune dacă imprimați numărul de eroare în hexagonal, în loc de forma zecimală semnată.

De exemplu, prima dvs. eroare este -1073741819, care poate fi reprezentată și prin 0xC0000005 în hexagonal. Aceasta este o eroare de „încălcare a accesului”, după cum vă va spune rapid Google.

Comentarii

  • Hexagonul pentru 1073740777 este 3ffffbe9, care nu are niciun rezultat pe Google. – user98188
  • Este 1073740777 negativ, nu pozitiv. –  > Por laș anonim.
  • Și ce este 1073740777 negativ în hexagonal? – user98188
  • Dacă folosiți printf(„%08x
    „, (int)-1073740777); este ușor să obțineți răspunsul corect. Dacă folosiți un calculator, introduceți 0x100000000 și scădeți 1073740777 zecimal, apoi convertiți înapoi în hexagonal. –  > Por Jared Oberhaus.
  • Dacă lipiți „-1073741819” în Windows Calculator (calc.exe) și apoi faceți clic pe butonul Hex butonul radio (când se află în vizualizarea „Scientific”), atunci rezultatul este FFFFFFFFFFC0000005, ceea ce, după cum puteți vedea, înseamnă 0xC0000005. –  > Por ChrisW.
Jared Oberhaus

Deoarece sistemul de coduri de eroare Windows este extensibil, nu există un singur loc în care să se caute toate codurile de eroare Windows posibile. Cu toate acestea, puteți începe cu:

  • Studiați pagina Structura codurilor de eroare COM. Uneori, faptul că știți din ce facilitate provine o eroare vă poate ajuta să descoperiți din ce fișier antet provine.
  • Visual Studio, cel puțin din 2003, include o funcție ERRLOOK instrument. Încercați-l mai întâi dacă folosiți Visual Studio.
  • Multe dintre codurile pe care le veți întâlni sunt în Winerror.h. Am inclus un link către MSDN care conține conținutul acelui fișier antet. Sau vă puteți uita la lista codurilor de eroare enumerate pe numere pe acest pagină.
  • Ideal ar fi să știți ce funcție a returnat codul, iar apoi puteți căuta funcția în MSDN și să vă uitați la toate valorile de returnare posibile. Bineînțeles, va trebui să vă referiți la Winerror.h, sau la un alt fișier antet pentru a obține valorile reale.
  • Puteți find (ca în cazul Unix grep) în fișierul Include din directorul SDK al platformei pentru a obține fie valoarea hexagonală a întregului cod de eroare, fie valoarea zecimală doar a secțiunii de cod – adică a celor 16 biți inferiori. Utilizați HRESULT_CODE pentru a o extrage. Consultați structura codurilor de eroare COM de mai sus.
  • Există câteva instrumente de căutare a erorilor în care puteți introduce o valoare, iar acesta o caută în baza de date și vă spune ce înseamnă. Căutare aici și aici.
  • Google. Utilizați valoarea hexagonală completă. Uneori veți găsi informații foarte utile, sau cel puțin indicii.

ChrisW

Multe dintre ele (dar nu cred că și cele legate de COM) se află într-un fișier antet numit winerror.h.

În (unele versiuni de) Visual Studio, sub eticheta ‘Tools‘, este posibil să găsiți un element de meniu numit ‘Error Lookup...‘.

josh poley

NTSTATUS

NTSTATUS *acoperă o serie de facilități
FACILITY_URT (0x013) *CLR excepții

HRESULTS

FACILITY_NULL (0x000)
FACILITY_RPC (0x001)
FACILITY_DISPATCH (0x002)
FACILITY_RPC_STUBS (0x003)
FACILITY_USER (0x004) *mai multe biblioteci pot reutiliza același cod de eroare
FACILITY_MCA_ERROR_CODE (0x005)
FACILITY_WIN32, MSDN (0x007) *coduri de eroare WINAPI standard
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_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)

Verificări de erori

Verificarea erorilor Cod de referință *aka Blue Screens

Simon Mourier

Iată un instrument online 100% gratuit „MagnumDB” pentru „Magical Number Database”, care conține aproximativ 350.000 de constante (numere întregi, șiruri de caractere, ghizi, etc.) analizate din toate fișierele Windows SDK (~6.000 de fișiere), pe care le puteți interoga după valoare și după nume. Disclaimer: am scris-o după ani de zile de căutări de constante, nume, guids…

Iată rezultatul pentru -1073741819 care se referă la 3 constante diferite (cu aceeași valoare și același înțeles) definite în 3 fișiere diferite, cea mai comună fiind STATUS_ACCESS_VIOLATION.

Și pentru -1073740777 care este STATUS_INVALID_CRUNTIME_PARAMETER definită în winnt.h.

Suportă numere întregi, numere întregi cu semn, numere întregi fără semn, notație hexazecimală și, de asemenea, căutări de text brut. De asemenea, cunoaște valoarea constantelor care sunt definite prin operații (cum ar fi c2 = c1 + 1).

Robert Harvey

Ei bine, sunt o grămadă de ele aici,

http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx

Dar când primesc una ca în exemplul tău, pur și simplu caut numărul pe Google.

rboy

Iată o clasă în C# pentru a vă ajuta să convertiți numărul codurile de eroare în 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();
        }
    }
}