如何调用有问题的进程外COM服务器,从而导致其客户端在调用其方法时随机挂起(而没有杀死客户端进程)?
考虑一个进程,该进程产生一个工作线程,初始化STA COM,获得一个有问题的COM对象,然后开始调用其方法,直到它们挂起。如何防止或中断挂起?
如果线程在特定时间内没有响应,则天真的解决方案是调用TerminateThread
。但是Microsoft commands here要求每个调用CoInitializeEx
的线程都必须调用CoUninitialize
或冒资源泄漏的风险,而TerminateThread
会跳过这一点。 (附带说明:如果线程终止,CoUninitialize
是不必要的吗?)
如果使用公共Windows API确实无法解决此问题,那么我可以公开使用未记录的/内部的方式以及进行操作系统篡改。是否可以用某些东西代替Ole32.dll
打算返回线程的内容?这甚至是在Ole32.dll
中完成的吗?还是导致Windows用虚假数据唤醒线程? (假设其他线程也使用它们自己的STA COM)。