为什么CoRegisterClassObject会创建两个额外的线程?

时间:2010-06-17 15:17:41

标签: com winapi multithreading

我正在尝试修复最近才发生在VPN上的许多机器上的问题。它们各自运行我编写的客户端应用程序,该应用程序公开COM自动化对象。

由于某些奇怪的原因我还没有发现,应用程序中的一个线程占用了所有可用的CPU时间,从而减慢了机器上的其他操作。在观察应用程序的奇怪行为时,我注意到它是第三个线程启动的,如果我在我的机器上调试,我注意到第一次调用CoRegisterClassObject创建了两个额外的线程。

如果这两个线程中的第二个是进入无限循环的线程,我完全不确定如何解决这个问题。我在哪里可以检查下一步有什么问题?它可能是微软最近推出的最后一个补丁(周二补丁)推出的吗?

我和ProcessExplorer一起去提取线程的堆栈跟踪:

ntoskrnl.exe!ExReleaseResourceLite+0x1a3
ntoskrnl.exe!PsGetContextThread+0x329
WLDAP32.dll!Ordinal325+0x1231
WLDAP32.dll!Ordinal325+0x129e
WLDAP32.dll!Ordinal325+0x1178
ntdll.dll!LdrInitializeThunk+0x24
ntdll.dll!LdrShutdownThread+0xe9
kernel32.dll!ExitThread+0x3e
kernel32.dll!FreeLibraryAndExitThread+0x1e
ole32.dll!StringFromGUID2+0x65d
kernel32.dll!GetModuleFileNameA+0x1ba

1 个答案:

答案 0 :(得分:1)

您似乎正在使用MTACoRegisterClassObject启动新线程来提供RPC请求。但是,目前还不清楚为什么你会获得100%的CPU使用率。