Descreve uma exceção.
Sintaxe
typedef struct _EXCEPTION_RECORD {
DWORD ExceptionCode;
DWORD ExceptionFlags;
struct _EXCEPTION_RECORD *ExceptionRecord;
PVOID ExceptionAddress;
DWORD NumberParameters;
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD;
Membros
ExceptionCode
O motivo pelo qual a exceção ocorreu. Esse é o código gerado por uma exceção de hardware ou o código especificado na função RaiseException para uma exceção gerada por software. As tabelas a seguir descrevem os códigos de exceção que provavelmente ocorrerão devido a erros comuns de programação.
| Valor |
Significado |
-
EXCEPTION_ACCESS_VIOLATION
|
O thread tentou ler ou gravar em um endereço virtual para o qual ele não tem o acesso apropriado.
|
-
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
|
O thread tentou acessar um elemento de matriz que está fora dos limites e o hardware subjacente dá suporte à verificação de limites.
|
-
EXCEPTION_BREAKPOINT
|
Um ponto de interrupção foi encontrado.
|
-
EXCEPTION_DATATYPE_MISALIGNMENT
|
O thread tentou ler ou gravar dados desalinhados no hardware que não fornecem alinhamento. Por exemplo, os valores de 16 bits devem ser alinhados em limites de 2 bytes; Valores de 32 bits em limites de 4 bytes e assim por diante.
|
-
EXCEPTION_FLT_DENORMAL_OPERAND
|
Um dos operandos em uma operação de ponto flutuante é desnormal. Um valor desnormal é um que é muito pequeno para representar como um valor de ponto flutuante padrão.
|
-
EXCEPTION_FLT_DIVIDE_BY_ZERO
|
O thread tentou dividir um valor de ponto flutuante por um divisor de ponto flutuante de zero.
|
-
EXCEPTION_FLT_INEXACT_RESULT
|
O resultado de uma operação de ponto flutuante não pode ser representado exatamente como uma fração decimal.
|
-
EXCEPTION_FLT_INVALID_OPERATION
|
Essa exceção representa qualquer exceção de ponto flutuante não incluída nesta lista.
|
-
EXCEPTION_FLT_OVERFLOW
|
O expoente de uma operação de ponto flutuante é maior do que a magnitude permitida pelo tipo correspondente.
|
-
EXCEPTION_FLT_STACK_CHECK
|
A pilha estoura ou é subfluxada como resultado de uma operação de ponto flutuante.
|
-
EXCEPTION_FLT_UNDERFLOW
|
O expoente de uma operação de ponto flutuante é menor do que a magnitude permitida pelo tipo correspondente.
|
-
EXCEPTION_ILLEGAL_INSTRUCTION
|
O thread tentou executar uma instrução inválida.
|
-
EXCEPTION_IN_PAGE_ERROR
|
O thread tentou acessar uma página que não estava presente e o sistema não pôde carregar a página. Por exemplo, essa exceção poderá ocorrer se uma conexão de rede for perdida durante a execução de um programa pela rede.
|
-
EXCEPTION_INT_DIVIDE_BY_ZERO
|
O thread tentou dividir um valor inteiro por um divisor inteiro de zero.
|
-
EXCEPTION_INT_OVERFLOW
|
O resultado de uma operação de inteiro causou uma execução do bit mais significativo do resultado.
|
-
EXCEPTION_INVALID_DISPOSITION
|
Um manipulador de exceção retornou uma disposição inválida para o dispatcher de exceção. Os programadores que usam uma linguagem de alto nível, como C, nunca devem encontrar essa exceção.
|
-
EXCEPTION_NONCONTINUABLE_EXCEPTION
|
O thread tentou continuar a execução depois que ocorreu uma exceção nãocontinuável.
|
-
EXCEPTION_PRIV_INSTRUCTION
|
O thread tentou executar uma instrução cuja operação não é permitida no modo de computador atual.
|
-
EXCEPTION_SINGLE_STEP
|
Uma armadilha de rastreamento ou outro mecanismo de instrução única sinalizou que uma instrução foi executada.
|
-
EXCEPTION_STACK_OVERFLOW
|
O thread usou sua pilha.
|
É provável que outro código de exceção ocorra ao depurar processos de console. Ele não surge devido a um erro de programação. O código de exceção DBG_CONTROL_C ocorre quando CTRL+C é inserido em um processo de console que manipula sinais CTRL+C e está sendo depurado. Esse código de exceção não deve ser tratado por aplicativos. Ele é gerado apenas para o benefício do depurador e é gerado somente quando um depurador é anexado ao processo de console.
ExceptionFlags
Esse membro contém zero ou mais sinalizadores de exceção. A tabela a seguir descreve alguns dos sinalizadores de exceção comumente vistos. Os sinalizadores de exceção não presentes na tabela a seguir devem ser tratados como reservados para uso do sistema.
| Sinalizador de exceção |
Significado |
-
EXCEPTION_NONCONTINUABLE
|
A presença desse sinalizador indica que a exceção é uma exceção nãocontinuável, enquanto a ausência desse sinalizador indica que a exceção é uma exceção contínua.
Qualquer tentativa de continuar a execução após uma exceção nãocontinuável causar a exceção EXCEPTION_NONCONTINUABLE_EXCEPTION .
|
-
EXCEPTION_SOFTWARE_ORIGINATE
|
Esse sinalizador é reservado para uso do sistema.
|
ExceptionRecord
Um ponteiro para uma estrutura EXCEPTION_RECORD associada. Os registros de exceção podem ser encadeados para fornecer informações adicionais quando ocorrerem exceções aninhadas.
ExceptionAddress
O endereço em que a exceção ocorreu.
NumberParameters
O número de parâmetros associados à exceção. Esse é o número de elementos definidos na matriz ExceptionInformation .
ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]
Uma matriz de argumentos adicionais que descrevem a exceção. A função RaiseException pode especificar essa matriz de argumentos. Para a maioria dos códigos de exceção, os elementos de matriz são indefinidos. A tabela a seguir descreve os códigos de exceção cujos elementos de matriz são definidos.
| Código da exceção |
Significado |
-
EXCEPTION_ACCESS_VIOLATION
|
O primeiro elemento da matriz contém um sinalizador de leitura/gravação que indica o tipo de operação que causou a violação de acesso. Se esse valor for zero, o thread tentou ler os dados inacessíveis. Se esse valor for 1, o thread tentará gravar em um endereço inacessível.
Se esse valor for 8, o thread causará uma violação de DEP (prevenção de execução de dados) no modo de usuário.
O segundo elemento de matriz especifica o endereço virtual dos dados inacessíveis.
|
-
EXCEPTION_IN_PAGE_ERROR
|
O primeiro elemento da matriz contém um sinalizador de leitura/gravação que indica o tipo de operação que causou a violação de acesso. Se esse valor for zero, o thread tentou ler os dados inacessíveis. Se esse valor for 1, o thread tentará gravar em um endereço inacessível.
Se esse valor for 8, o thread causará uma violação de DEP (prevenção de execução de dados) no modo de usuário.
O segundo elemento de matriz especifica o endereço virtual dos dados inacessíveis.
O terceiro elemento de matriz especifica o código NTSTATUS subjacente que resultou na exceção.
|
Para habilitar um depurador para depurar um destino que está em execução em uma arquitetura diferente (32 bits versus 64 bits), use uma das formas explícitas dessa estrutura.
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 com suporte |
Windows XP [aplicativos da área de trabalho | Aplicativos UWP] |
|
Servidor mínimo com suporte |
Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
|
Cabeçalho |
winnt.h (inclua Windows.h) |
Confira também
EXCEPTION_DEBUG_INFO
EXCEPTION_POINTERS
Getexceptioninformation
Raiseexception
Unhandledexceptionfilter