다음을 통해 공유


후크 함수의 재진입에 대한 보호

후크 함수가 이벤트를 처리하는 동안 추가 이벤트가 트리거되어 원래 이벤트에 대한 처리가 완료되기 전에 후크 함수가 다시 입력될 수 있습니다. 후크 함수의 재진입 문제는 후크 함수가 이 상황을 처리하지 않는 한 이벤트가 시퀀스에서 완료된다는 것입니다.

예를 들어 화면 읽기 프로그램 프로그램의 후크 함수가 편집 컨트롤에 대한 EVENT_OBJECT_VALUECHANGE 이벤트를 처리하는 경우를 생각해 보세요. 첫 번째 값 변경 이벤트를 처리하는 동안 후크 함수가 다시 입력되어 후속 값 변경 이벤트를 처리하는 경우 첫 번째 이벤트 전에 두 번째 이벤트가 완료됩니다. 이 경우 화면 읽기 프로그램이 사용자에게 부정확한 정보를 전달합니다.

이벤트 처리가 중단되므로 후크 함수가 소유 스레드의 메시지 큐를 확인하는 함수를 호출할 때마다 추가 이벤트가 수신될 수 있습니다. 이는 후크 함수 내에서 다음 중 어느 것이라도 호출되는 경우에 발생합니다.

후크 함수는 AccessibleObjectFromEventIAccessible 속성 및 메서드를 호출하므로 재진입을 방지할 수 없습니다. 유일한 해결 방법은 클라이언트 개발자가 후크 함수에 재진입을 감지하는 코드를 추가하고 후크 함수가 다시 입력되면 적절한 조치를 취하는 것입니다.