estructura EXCEPTION_RECORD (winnt.h)

Describe una excepción.

Sintaxis

typedef struct _EXCEPTION_RECORD {
  DWORD                    ExceptionCode;
  DWORD                    ExceptionFlags;
  struct _EXCEPTION_RECORD *ExceptionRecord;
  PVOID                    ExceptionAddress;
  DWORD                    NumberParameters;
  ULONG_PTR                ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD;

Miembros

ExceptionCode

Motivo por el que se produjo la excepción. Este es el código generado por una excepción de hardware o el código especificado en la función RaiseException para una excepción generada por software. En las tablas siguientes se describen los códigos de excepción que es probable que se produzcan debido a errores de programación comunes.

Value Significado
EXCEPTION_ACCESS_VIOLATION
El subproceso intentó leer o escribir en una dirección virtual para la que no tiene el acceso adecuado.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
El subproceso intentó acceder a un elemento de matriz que está fuera de los límites y el hardware subyacente admite la comprobación de límites.
EXCEPTION_BREAKPOINT
Se encontró un punto de interrupción.
EXCEPTION_DATATYPE_MISALIGNMENT
El subproceso intentó leer o escribir datos que no están alineados en el hardware que no proporciona alineación. Por ejemplo, los valores de 16 bits deben alinearse en límites de 2 bytes; Valores de 32 bits en límites de 4 bytes, etc.
EXCEPTION_FLT_DENORMAL_OPERAND
Uno de los operandos de una operación de punto flotante es desnormal. Un valor desnormal es aquel que es demasiado pequeño para representarse como un valor de punto flotante estándar.
EXCEPTION_FLT_DIVIDE_BY_ZERO
El subproceso intentó dividir un valor de punto flotante por un divisor de punto flotante de cero.
EXCEPTION_FLT_INEXACT_RESULT
El resultado de una operación de punto flotante no se puede representar exactamente como una fracción decimal.
EXCEPTION_FLT_INVALID_OPERATION
Esta excepción representa cualquier excepción de punto flotante que no esté incluida en esta lista.
EXCEPTION_FLT_OVERFLOW
El exponente de una operación de punto flotante es mayor que la magnitud permitida por el tipo correspondiente.
EXCEPTION_FLT_STACK_CHECK
Pila desbordada o subfluida como resultado de una operación de punto flotante.
EXCEPTION_FLT_UNDERFLOW
El exponente de una operación de punto flotante es menor que la magnitud permitida por el tipo correspondiente.
EXCEPTION_ILLEGAL_INSTRUCTION
El subproceso intentó ejecutar una instrucción no válida.
EXCEPTION_IN_PAGE_ERROR
El subproceso intentó acceder a una página que no estaba presente y el sistema no pudo cargar la página. Por ejemplo, esta excepción puede producirse si se pierde una conexión de red mientras se ejecuta un programa a través de la red.
EXCEPTION_INT_DIVIDE_BY_ZERO
El subproceso intentó dividir un valor entero por un divisor entero de cero.
EXCEPTION_INT_OVERFLOW
El resultado de una operación de entero provocó una realización del bit más significativo del resultado.
EXCEPTION_INVALID_DISPOSITION
Un controlador de excepciones devolvió una disposición no válida al distribuidor de excepciones. Los programadores que usan un lenguaje de alto nivel, como C, nunca deben encontrar esta excepción.
EXCEPTION_NONCONTINUABLE_EXCEPTION
El subproceso intentó continuar la ejecución después de que se produjera una excepción no continuable.
EXCEPTION_PRIV_INSTRUCTION
El subproceso intentó ejecutar una instrucción cuya operación no está permitida en el modo de máquina actual.
EXCEPTION_SINGLE_STEP
Una trampa de seguimiento u otro mecanismo de instrucción única señalizó que se ha ejecutado una instrucción.
EXCEPTION_STACK_OVERFLOW
El subproceso usó su pila.
 

Es probable que se produzca otro código de excepción al depurar procesos de consola. No surge debido a un error de programación. El código de excepción de DBG_CONTROL_C se produce cuando CTRL+C se escribe en un proceso de consola que controla las señales CTRL+C y se está depurando. Este código de excepción no está diseñado para ser controlado por las aplicaciones. Solo se genera para la ventaja del depurador y solo se genera cuando un depurador está asociado al proceso de consola.

ExceptionFlags

Este miembro contiene cero o más marcas de excepción. En la tabla siguiente se describen algunas de las marcas de excepción que se suelen ver. Las marcas de excepción que no están presentes en la tabla siguiente deben tratarse como reservadas para el uso del sistema.

Marca de excepción Significado
EXCEPTION_NONCONTINUABLE
La presencia de esta marca indica que la excepción es una excepción no continuable, mientras que la ausencia de esta marca indica que la excepción es una excepción continuable. Cualquier intento de continuar la ejecución después de una excepción no continua provoca la excepción EXCEPTION_NONCONTINUABLE_EXCEPTION .
EXCEPTION_SOFTWARE_ORIGINATE
Esta marca está reservada para uso del sistema.

ExceptionRecord

Puntero a una estructura de EXCEPTION_RECORD asociada. Los registros de excepciones se pueden encadenar juntos para proporcionar información adicional cuando se producen excepciones anidadas.

ExceptionAddress

Dirección donde se produjo la excepción.

NumberParameters

Número de parámetros asociados a la excepción. Este es el número de elementos definidos en la matriz ExceptionInformation .

ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

Matriz de argumentos adicionales que describen la excepción. La función RaiseException puede especificar esta matriz de argumentos. Para la mayoría de los códigos de excepción, los elementos de matriz no están definidos. En la tabla siguiente se describen los códigos de excepción cuyos elementos de matriz se definen.

Código de excepción Significado
EXCEPTION_ACCESS_VIOLATION
El primer elemento de la matriz contiene una marca de lectura y escritura que indica el tipo de operación que provocó la infracción de acceso. Si este valor es cero, el subproceso intentó leer los datos inaccesibles. Si este valor es 1, el subproceso intentó escribir en una dirección inaccesible.

Si este valor es 8, el subproceso provocó una infracción de prevención de ejecución de datos en modo de usuario (DEP).

El segundo elemento de matriz especifica la dirección virtual de los datos inaccesibles.

EXCEPTION_IN_PAGE_ERROR
El primer elemento de la matriz contiene una marca de lectura y escritura que indica el tipo de operación que provocó la infracción de acceso. Si este valor es cero, el subproceso intentó leer los datos inaccesibles. Si este valor es 1, el subproceso intentó escribir en una dirección inaccesible.

Si este valor es 8, el subproceso provocó una infracción de prevención de ejecución de datos en modo de usuario (DEP).

El segundo elemento de matriz especifica la dirección virtual de los datos inaccesibles.

El tercer elemento de matriz especifica el código NTSTATUS subyacente que dio lugar a la excepción.

Comentarios

Para permitir que un depurador depure un destino que se ejecuta en una arquitectura diferente (de 32 bits frente a 64 bits), use una de las formas explícitas de esta estructura.

typedef struct _EXCEPTION_RECORD32 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD ExceptionRecord;
    DWORD ExceptionAddress;
    DWORD NumberParameters;
    DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;

typedef struct _EXCEPTION_RECORD64 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD64 ExceptionRecord;
    DWORD64 ExceptionAddress;
    DWORD NumberParameters;
    DWORD __unusedAlignment;
    DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;

Requisitos

   
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | Aplicaciones para UWP]
Encabezado winnt.h (incluya Windows.h)

Consulte también

EXCEPTION_DEBUG_INFO

EXCEPTION_POINTERS

GetExceptionInformation

RaiseException

UnhandledExceptionFilter