Pregunta

En una pregunta anterior, le pregunté lo que significaba cuando regresó mi programa un valor oscura como

-1073741819

Bueno, ahora estoy recibiendo otro valor de retorno grande,

-1073740777

Y me gustaría saber si hay alguna lista de todos estos valores y lo que significan sopmewhere?

¿Fue útil?

Solución

En general, mejores serán los resultados de la búsqueda si se imprime el número de error en hexadecimal, en lugar de la forma decimal con signo.

Por ejemplo, su primer error es -1073741819 que también puede ser representado por 0xC0000005 en hexadecimal. Se trata de una "violación de acceso" error como Google le dirá rápidamente.

Otros consejos

Debido a que el sistema de código de error de Windows es extensible, no existe un único lugar para buscar todos los posibles códigos de error de Windows. Sin embargo, se puede comenzar con:

  • de los códigos de error COM . A veces, sabiendo lo que viene instalación de un error puede ayudar a descubrir qué archivo de cabecera viene.
  • Visual Studio, por lo menos desde 2003, incluye una herramienta ERRLOOK . Trate de que en primer lugar si usted está utilizando Visual Studio.
  • Muchos de los códigos que se encontrará en Winerror.h . He incluido un enlace a MSDN que contiene el contenido de ese archivo de cabecera. O se puede ver en el listado de código de error por número de este página.
  • Lo ideal sería que usted sabe cuál es la función devuelve el código, y luego se puede buscar la función en MSDN y mirar a todos los posibles valores de retorno. Por supuesto, tendrá que hacer referencia a Winerror.h, o un archivo de otra cabecera para obtener los valores reales.
  • Puede find (como Unix grep) en el directorio Include de la plataforma SDK ya sea para el valor hexadecimal de todo el código de error, o el valor decimal de sólo la sección de código - es decir, los 16 bits más bajos. Usar HRESULT_CODE para extraer eso. Ver la estructura de Códigos de error COM anteriormente.
  • Hay algunas herramientas de búsqueda de errores donde se puede pegar en un valor y se ve que en su base de datos y le informa lo que significa. Mira aquí y aquí .
  • Google. Utilice el valor hexadecimal completa. A veces encontrará información muy útil, o al menos indicios.

Bueno, hay un montón de ellos aquí,

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

Pero cuando llego a uno como su ejemplo que acabo de Google el número.

Muchos de ellos (pero no creo que los relacionados con COM) están en un fichero de cabecera con el nombre Winerror.h .

(algunas versiones de Visual Studio), en el menú 'Tools', es posible encontrar un elemento de menú denominado 'Error Lookup...'.

NTSTATUS

NTSTATUS * cubre una amplia gama de instalaciones
FACILITY_URT (0x013) * excepciones CLR

HRESULTS

FACILITY_NULL (0x000)
FACILITY_RPC (0x001)
FACILITY_DISPATCH (0x002)
FACILITY_RPC_STUBS (0x003)
FACILITY_USER (0x004) * varias bibliotecas pueden volver a utilizar el mismo código de error
FACILITY_MCA_ERROR_CODE (0x005)
FACILITY_WIN32 , MSDN (0x007) * códigos de error estándar 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)

comprobaciones de errores

comprobación de error Código de referencia * Pantallas azules aka

Aquí hay una clase en C# para ayudarle a convertir los códigos de error a 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();
        }
    }
}

Esta es una herramienta en línea gratuita 100% " MagnumDB " para "Base de datos Número mágico" que contiene aproximadamente 350.000 (constantes enteros, cadenas, etc.) guids analizan desde el conjunto de archivos de Windows SDK (~ 6.000 archivos), que se puede consultar por su valor y por su nombre. Exención de responsabilidad: La escribí después de años de búsqueda de constantes, nombres, guids ...

Aquí está el resultado para -1073741819 que mapea a 3 constantes diferentes ( con el mismo valor y el mismo significado) definido en 3 archivos diferentes, el ser STATUS_ACCESS_VIOLATION más común.

introducir descripción de la imagen aquí

Y para -1073740777 que es STATUS_INVALID_CRUNTIME_PARAMETER definido en winnt.h.

introducir descripción de la imagen aquí

Se admite enteros, firmaron enteros, enteros sin signo notación hexadecimal, y también las búsquedas de texto en bruto. También conoce el valor de constantes que se define por las operaciones (como C2 = c1 + 1).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top