Question

Dans une question précédente, j'ai demandé ce qu'il voulait dire quand mon programme a retourné une valeur obscure comme

-1073741819

Eh bien, maintenant je reçois une autre grande valeur de retour,

-1073740777

Et je voudrais savoir s'il y a une liste de toutes ces valeurs et ce qu'elles signifient sopmewhere?

Était-ce utile?

La solution

En général, vous obtiendrez de meilleurs résultats de recherche si vous imprimez le numéro d'erreur dans l'hexagone, au lieu de la forme décimale signée.

Par exemple, votre première erreur est -1073741819 qui peut également être représenté par 0XC0000005 dans l'hexagone. Ceci est une erreur « violation d'accès » comme Google va rapidement vous dire.

Autres conseils

Parce que le système de code d'erreur Windows est extensible, il n'y a pas lieu unique pour rechercher tous les codes d'erreur Windows possibles. Cependant, vous pouvez commencer par:

  • Etude de la Structure des codes d'erreur COM . Parfois, savoir ce que l'installation d'une erreur provient peut vous aider à découvrir ce fichier en-tête il vient.
  • Visual Studio, depuis au moins 2003, comprend un outil ERRLOOK . Essayez cette première si vous utilisez Visual Studio.
  • Un grand nombre des codes que vous rencontrerez sont en Winerror.h . J'ai inclus un lien vers MSDN qui contient le contenu de ce fichier d'en-tête. Ou vous pouvez regarder la liste de code d'erreur par numéro sur ce .
  • Idéalement, vous savez ce que la fonction retourne le code, et vous pouvez rechercher la fonction sur MSDN et regardez toutes les valeurs de retour possibles. Bien sûr, vous aurez besoin de se référer à Winerror.h, ou un autre fichier d'en-tête pour obtenir les valeurs réelles.
  • Vous pouvez find (comme grep Unix) dans le répertoire Include du SDK de la plate-forme soit pour la valeur hexadécimale de la totalité du code d'erreur, ou la valeur décimale de seulement la section de code - à savoir, les 16 bits inférieurs. Utilisez HRESULT_CODE pour extraire que. Voir la structure des codes d'erreur COM ci-dessus.
  • Il y a quelques outils de recherche d'erreur où vous pouvez coller une valeur et il semble dans sa base de données et vous indique ce que cela signifie. Regardez et ici .
  • Google. Utilisez la pleine valeur hexagonale. Parfois, vous trouverez des informations très utiles, ou au moins des indices.

Eh bien, il y a un tas d'entre eux ici,

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

Mais quand je reçois un comme votre exemple que je viens de Google le numéro.

Beaucoup d'entre eux (mais pas je pense que ceux liés à COM) sont dans un fichier d'en-tête nommé winerror.h .

(certaines versions de Visual Studio), sous le menu 'Tools', vous trouverez peut-être un élément de menu nommé 'Error Lookup...'.

NTSTATUS

NTSTATUS * couvre une gamme d'équipements
FACILITY_URT (0x013) * exceptions CLR

HRESULTS

FACILITY_NULL (0x000)
FACILITY_RPC (0x001)
FACILITY_DISPATCH (0x002)
FACILITY_RPC_STUBS (0x003)
FACILITY_USER (0x004) * plusieurs bibliothèques peuvent réutiliser le même code d'erreur
FACILITY_MCA_ERROR_CODE (0x005)
FACILITY_WIN32 , MSDN (0x007) * codes standard d'erreur 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)

Contrôles de bugs

Bug Vérifiez le code de référence de * Écrans aka bleu

Voici une classe C# pour vous aider à convertir les codes d'erreur à 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();
        }
    }
}

Voici un outil en ligne gratuit 100% « MagnumDB » pour « Base de données de numéro magique » qui contient environ 350 000 constantes (entiers, chaînes, etc.), GUIDs analysés à partir de l'ensemble des fichiers de Windows SDK (~ 6000 fichiers), que vous pouvez interroger par valeur et par nom. Avertissement: Je l'ai écrit après des années de recherche de constantes, les noms, ... GUIDs

Voici le résultat pour -1073741819 qui associe 3 constantes différentes ( avec la même valeur et la même signification) définie dans 3 fichiers différents, les plus courantes étant STATUS_ACCESS_VIOLATION.

-1073740777 qui est défini dans STATUS_INVALID_CRUNTIME_PARAMETER winnt.h.

Il prend en charge des entiers, des entiers signés, entiers non signés, la notation hexadécimale, ainsi que des recherches de texte brut. Il connaît également la valeur des constantes qui sont définies par des opérations (par exemple C2 = c1 + 1).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top