Expedição de Exceção

Quando ocorre uma exceção de hardware ou software, o processador interrompe a execução no ponto em que a exceção ocorreu e transfere o controle para o sistema. Primeiro, o sistema salva o estado do computador do thread atual e as informações que descrevem a exceção. Em seguida, o sistema tenta encontrar um manipulador de exceção para lidar com a exceção.

O estado do computador do thread no qual a exceção ocorreu é salvo em uma estruturaCONTEXT de. Essas informações (chamadas de registro de contexto) permitem que o sistema continue a execução no ponto da exceção se a exceção for tratada com êxito. A descrição da exceção (chamada de registro de exceção) é salva em uma estrutura de EXCEPTION_RECORD. Como armazena as informações dependentes do computador do registro de contexto separadamente das informações independentes do computador do registro de exceção, o mecanismo de tratamento de exceções é portátil para diferentes plataformas.

As informações nos registros de contexto e de exceção estão disponíveis por meio da função GetExceptionInformation e podem ser disponibilizadas para todos os manipuladores de exceção executados como resultado da exceção. O registro de exceção inclui as informações a seguir.

  • Um código de exceção que identifica o tipo de exceção.
  • Sinalizadores que indicam se a exceção é contínua. Qualquer tentativa de continuar a execução após uma exceção não incontinuável gera outra exceção.
  • Um ponteiro para outro registro de exceção. Isso facilita a criação de uma lista vinculada de exceções se ocorrerem exceções aninhadas.
  • O endereço no qual a exceção ocorreu.
  • Uma matriz de argumentos que fornecem informações adicionais sobre a exceção.

Quando ocorre uma exceção no código do modo de usuário, o sistema usa a seguinte ordem de pesquisa para localizar um manipulador de exceção:

  1. Se o processo estiver sendo depurado, o sistema notificará o depurador. Para obter mais informações, consulte de Tratamento de Exceções do Depurador.
  2. Se o processo não estiver sendo depurado ou se o depurador associado não manipular a exceção, o sistema tentará localizar um manipulador de exceção baseado em quadro pesquisando os quadros de pilha do thread no qual ocorreu a exceção. O sistema pesquisa primeiro o quadro de pilha atual e, em seguida, pesquisa os quadros de pilha anteriores em ordem inversa.
  3. Se nenhum manipulador baseado em quadros puder ser encontrado ou nenhum manipulador baseado em quadros manipular a exceção, mas o processo estiver sendo depurado, o sistema notificará o depurador uma segunda vez.
  4. Se o processo não estiver sendo depurado ou se o depurador associado não manipular a exceção, o sistema fornecerá o tratamento padrão com base no tipo de exceção. Para a maioria das exceções, a ação padrão é chamar a função ExitProcess.

Quando ocorre uma exceção no código do modo kernel, o sistema pesquisa os quadros de pilha da pilha de kernel na tentativa de localizar um manipulador de exceção. Se um manipulador não puder ser localizado ou nenhum manipulador manipular a exceção, o sistema será desligado como se a função ExitWindows tivesse sido chamada.