MFC程序挂起:在Vista上更新KB3059317后损坏的Comctl32.dll?

时间:2015-06-17 06:22:16

标签: c++ windows mfc comctl32

我有一个基于MFC的程序,在应用更新3059317之前工作正常:

  

MS15-060:Microsoft公共控件中的漏洞可能允许远程执行代码:2015年6月9日)

此更新会将Comctl32.dll替换为新版本。

应用此更新后,打开对话框会挂起程序。并非所有对话框都会受到影响,但打印预览会一直挂起,但不会导致程序崩溃。它变得没有反应。

我不知道如何尝试调试此问题以便找到解决方法。程序挂起时创建内存转储会产生以下堆栈跟踪:

comctl32.dll!751f8505() 
Xxx.exe!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2095 + 0x13 bytes
Xxx.exe!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 285
Xxxx.exe!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 434 + 0x10 bytes
user32.dll!76aafd72() 
user32.dll!76aa84de() 
user32.dll!76aafd72() 
user32.dll!76aa9f8d() 
ntdll.dll!77dd5a7e() 
user32.dll!76aaa2af() 
comctl32.dll!75249cfb() 
comctl32.dll!751fb559() 
user32.dll!76aafd72() 
user32.dll!76aafe4a() 
user32.dll!76ab09d3() 
user32.dll!76abb759() 
Xxx.exe!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1116 + 0x7 bytes
Xxx.exe!CWnd::Default() Line 315 + 0x13 bytes
Xxx.exe!CParsedEdit::OnPaint() Line 1603
Xxx.exe!CBannerEdit::OnPaint() Line 368

所以我们确实陷入Comctl32.dll - 现在是什么?

顺便说一下,在某些情况下,卸载更新可以解决问题。

更新

在所有情况下,关闭Aero始终可以解决问题。和KB3059317似乎 不是唯一展示此功能的Windows Vista 2015年6月更新 奇怪的行为。

2 个答案:

答案 0 :(得分:2)

Areo Vista至少在我们的应用程序中只有一个对话框失败了:对话框没有被绘制。它存在,但它只是不可见。

要解决Vista Aero上的问题,请在执行SetRedraw()OnInitDialog()方法时删除对OnSize()功能的任何调用。

似乎SetRedraw(TRUE)没有(正面)效果,至少在这两种情况下。

答案 1 :(得分:0)

我在使用.NET 4编写的自定义程序时遇到了同样的问题,该程序使用了ListView控件的自定义版本。程序不挂起它产生和错误“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。”卸载此更新后,一切都很好。