如何安全地防止/终止挂起的Win32 / COM线程而又不中断进程?

时间:2019-06-04 23:05:48

标签: multithreading winapi com thread-safety

如何调用有问题的进程外COM服务器,从而导致其客户端在调用其方法时随机挂起(而没有杀死客户端进程)?

考虑一个进程,该进程产生一个工作线程,初始化STA COM,获得一个有问题的COM对象,然后开始调用其方法,直到它们挂起。如何防止或中断挂起?

如果线程在特定时间内没有响应,则天真的解决方案是调用TerminateThread。但是Microsoft commands here要求每个调用CoInitializeEx的线程都必须调用CoUninitialize或冒资源泄漏的风险,而TerminateThread会跳过这一点。 (附带说明:如果线程终止,CoUninitialize是不必要的吗?)

如果使用公共Windows API确实无法解决此问题,那么我可以公开使用未记录的/内部的方式以及进行操作系统篡改。是否可以用某些东西代替Ole32.dll打算返回线程的内容?这甚至是在Ole32.dll中完成的吗?还是导致Windows用虚假数据唤醒线程? (假设其他线程也使用它们自己的STA COM)。

0 个答案:

没有答案