Exceções de hardware
A maioria das exceções padrão reconhecidas pelo sistema operacional é exceções definidas pelo hardware.O Windows reconhece algumas exceções de software de nível inferior, mas eles são geralmente mais facilmente tratados pelo sistema operacional.
Windows mapeia os erros de hardware de diferentes processadores para os códigos de exceção nesta seção.Em alguns casos, um processador pode gerar apenas 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 estão resumidas na tabela a seguir:
Código de exceção |
Causa da exceção |
---|---|
STATUS_ACCESS_VIOLATION |
Ler ou gravar em um local de memória inacessível. |
STATUS_BREAKPOINT |
Se deparar com um ponto de interrupção definido pelo hardware; usado somente por depuradores. |
STATUS_DATATYPE_MISALIGNMENT |
Ler ou gravar dados em um endereço que não está alinhado corretamente; Por exemplo, entidades de 16 bits precisam ser alinhadas em limites de 2 bytes.(Não aplicável a 80 Intelxx86 processadores.) |
STATUS_FLOAT_DIVIDE_BY_ZERO |
Dividir o tipo de ponto flutuante por 0.0. |
STATUS_FLOAT_OVERFLOW |
Excedendo o máximo expoente positivo do tipo de ponto flutuante. |
STATUS_FLOAT_UNDERFLOW |
Excedendo a magnitude do expoente de negativo menor do tipo de ponto flutuante. |
STATUS_FLOATING_RESEVERED_OPERAND |
Usando um formato de ponto flutuante reservado (uso inválido do formato). |
STATUS_ILLEGAL_INSTRUCTION |
Tentando executar um código de instrução não é definido pelo processador. |
STATUS_PRIVILEGED_INSTRUCTION |
Executando uma instrução que não é permitida no modo de máquina atual. |
STATUS_INTEGER_DIVIDE_BY_ZERO |
Dividir um tipo inteiro por 0. |
STATUS_INTEGER_OVERFLOW |
Tentando uma operação que excede o intervalo do número inteiro. |
STATUS_SINGLE_STEP |
Executar uma instrução no modo de etapa única; usado somente por depuradores. |
Muitas das exceções listadas na tabela anterior destinam-se para ser manipulado por depuradores, o sistema operacional ou outro código de nível inferior.Com exceção do número inteiro e erros de ponto flutuante, o seu código não deve lidar com esses erros.Assim, você normalmente deve usar o filtro de manipulação de exceção para ignorar as exceções (avaliar como 0).Caso contrário, você pode impedir que os mecanismos de nível inferior de responder apropriadamente.Você no entanto, pode tomar precauções de apropriada contra o efeito em potencial destes erros de baixo nível por escrever manipuladores de terminação.