Compartilhar via


Proteção contra a reentrância em funções de gancho

Enquanto uma função de gancho processa um evento, eventos adicionais podem ser disparados, o que pode fazer com que a função hook seja reentrada antes que o processamento do evento original seja concluído. O problema com a reentrância em funções de gancho é que os eventos são concluídos fora da sequência, a menos que a função hook lide com essa situação.

Por exemplo, considere um caso em que uma função de gancho em um programa de leitor de tela está processando o evento EVENT_OBJECT_VALUECHANGE para um controle de edição. Se, ao processar o primeiro evento de alteração de valor, a função hook for reentrada para processar um evento de alteração de valor subsequente, o segundo evento será concluído antes do primeiro evento. Essa situação faz com que o leitor de tela transmita informações imprecisas para o usuário.

Como o processamento de eventos é interrompido, eventos adicionais podem ser recebidos sempre que a função hook chama uma função que faz com que a fila de mensagens do thread proprietário seja verificada. Isso acontece quando qualquer um dos seguintes são chamados dentro da função de gancho:

Como as funções de gancho chamam as propriedades e métodos AccessibleObjectFromEvent e IAccessible , não é possível impedir a reentrada. A única solução é que os desenvolvedores cliente adicionem código na função de gancho que detecta a reentrância e tomem as medidas apropriadas se a função hook for reentrada.