인가가후킹 스레드 종료
내가 작업 스레드 종료를 후킹하는 메커니즘을 개발 한 날 (즉, 그것이 종료 직전, 스레드에 대한 몇 가지 코드를 실행?) 관리되는 스레드의 종료 후크 할 수있는 방법 일부 스레드. 1 단계 : 콜백 함수를 사용하여 소멸자에서 호출하는 '후크'STA COM 클래스를 개발합니다. 2 단계 : 연결하려는 스레드에서이 개체의 ThreadStatic 인스턴스를 만들고 관리되지 않는 함수 포인터로 변환 된 관리되는 대리자를 개체에 전달합니다. 그런 다음 대리자는 스레드 종료시 호출됩니다 (CLR이 스레드 종료의 일부로 모든 STA COM RCW에서 IUnknown :: Release를 호출하기 때문에).
이 메커니즘은 예를 들어 스레드 클래스를 사용하여 코드로 작성한 작업자 스레드에서 작동합니다.
그러나 응용 프로그램의 주 스레드 (콘솔 또는 Windows 응용 프로그램)에서는 작동하지 않는 것 같습니다. '후크'COM 개체가 종료 프로세스에서 너무 늦게 삭제 된 것으로 보이고 대리인을 호출하려는 시도가 실패합니다.
(이 기능을 구현하려는 이유는 스레드에서 생성 된 STA COM 개체와 함께 작동하는 기존 스레드에서 네이티브 COM 코드를 실행할 수 있기 때문입니다. '너무 늦기 전에'(즉 스레드 전에 이 스레드에서 STA COM 개체로 더 이상 작업 할 수 없습니다.)
단락 1 : 아니오. 단락 2 : 네,하지만 문제 없습니다. 3 단락 : 아니오, 네이티브 C++의 소멸자가 코 클라스를 구현했습니다. 4 단락 : 흠, 나는 그것을 조사 할 것이다. 그럼에도 불구하고 제 5 항. – mackenir
아쉽게도 AppDomain ProcessExit은 주 스레드와 다른 스레드에서 호출됩니다. – mackenir