Com 为什么CoreRegisterClassObject要创建两个额外的线程?

Com 为什么CoreRegisterClassObject要创建两个额外的线程?,com,winapi,multithreading,Com,Winapi,Multithreading,我正在尝试修复一个问题,这个问题最近才发生在VPN上的许多机器上。它们各自运行我编写的一个客户端应用程序,该应用程序公开一个COM自动化对象 出于某种奇怪的原因,我还没有发现,应用程序中的一个线程占用了所有可用的CPU时间,减慢了机器上的其他操作。在观察应用程序的奇怪行为时,我注意到它是第三个线程启动的,如果我在我的机器上调试,我会注意到第一个创建两个额外线程的调用 如果这两个线程中的第二个是进入无限循环的线程,我根本不知道如何修复它。下一步我在哪里可以检查出什么问题?它可能是由微软在上个“补丁

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

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

如果这两个线程中的第二个是进入无限循环的线程,我根本不知道如何修复它。下一步我在哪里可以检查出什么问题?它可能是由微软在上个“补丁星期二”推出的最新补丁之一开始的吗

我尝试提取线程的堆栈跟踪:

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

似乎您正在使用
MTA
CoRegisterClassObject
启动新线程来服务RPC请求。但是,不清楚为什么会获得100%的CPU使用率。

启用Microsoft symbol server并发布该线程的堆栈跟踪。我认为最好在该线程消耗CPU时进行进程转储。进程转储可以为您提供有关正在发生的事情的更多信息。看起来像是用户/域/安全相关问题。计算机是它们正在VPN的域的成员吗?它们都是普通工作组安装。我有一个登录和pwd在管理员组中的每一个。(虽然我的客户端在普通用户帐户外壳中应该表现正常)是的,该应用程序使用MTA并使用自己的锁定。奇怪的是,在其他运行良好的机器上,CoRegisterClassObject似乎不创建线程(或者它们很好地终止)