Compartilhar via


Exceções de hardware

A maioria das exceções padrão reconhecidas pelo sistema operacional são exceções definidas por hardware. O Windows reconhece algumas exceções de software de nível baixo, mas elas geralmente são mais bem tratadas pelo sistema operacional.

O Windows mapeia os erros de hardware de processadores diferentes para os códigos de exceção nesta seção. Em alguns casos, um processador pode gerar somente um subconjunto dessas exceções. O Windows pré-processa informações sobre a exceção e emite o código de exceção apropriado.

As exceções de hardware reconhecidas pelo windows são resumidas na seguinte tabela:

Código de exceção Causa da exceção
STATUS_ACCESS_VIOLATION Leitura ou gravação em um local de memória inacessível.
STATUS_BREAKPOINT Encontro de um ponto de interrupção definido por hardware; usado somente por depuradores.
STATUS_DATATYPE_MISALIGNMENT Leitura ou gravação de dados em um endereço que não está alinhado corretamente; por exemplo, as entidades de 16 bits devem ser alinhadas em limites de 2 bytes. (Não aplicável a processadores Intel 80x86.)
STATUS_FLOAT_DIVIDE_BY_ZERO Divisão do tipo de ponto flutuante por 0,0.
STATUS_FLOAT_OVERFLOW Expoente positivo máximo do tipo de ponto flutuante excedido.
STATUS_FLOAT_UNDERFLOW Magnitude excedida do expoente negativo mais baixo do tipo de ponto flutuante.
STATUS_FLOATING_RESEVERED_OPERAND Usando um formato de ponto flutuante reservado (uso inválido de formato).
STATUS_ILLEGAL_INSTRUCTION Tentativa de executar um código de instrução não definido pelo processador.
STATUS_PRIVILEGED_INSTRUCTION Execução de uma instrução não permitida no modo atual do computador.
STATUS_INTEGER_DIVIDE_BY_ZERO Divisão de um tipo de inteiro por 0.
STATUS_INTEGER_OVERFLOW Tentativa de uma operação que excede o intervalo do inteiro.
STATUS_SINGLE_STEP Execução de uma instrução no modo de etapa única; usado somente por depuradores.

Muitas das exceções listadas na tabela anterior devem ser tratadas por depuradores, pelo sistema operacional, ou outro código de nível baixo. Com a exceção de erros de inteiro e de ponto flutuante, seu código não deve tratar esses erros. Assim, geralmente você deve usar o filtro de tratamento de exceções para ignorar exceções (avaliado como 0). Caso contrário, você poderá impedir que os mecanismos de nível inferior respondam adequadamente. É possível, contudo, tomar precauções apropriadas contra o efeito potencial desses erros de baixo nível gravando manipuladores de término.

Confira também

Escrevendo um manipulador de exceção
Tratamento de exceções estruturado (C/C++)