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

问题描述:

我有细的工作只是将更新3059317之前基于MFC的程序:MFC程序挂起:在Vista上更新KB3059317后损坏了Comctl32.dll?

MS15-060:中的漏洞共同控制可能允许远程执行代码: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 - 现在该怎么办?

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

UPDATE

在所有的情况下,关闭Aero的总是解决问题。并且KB3059317似乎不是对Windows Vista的唯一2015年6月更新,它显示了这种奇怪的行为。

+0

看看'CWnd :: WindowProc'这是什么'this'指向? “message”,“wParam”和“lParam”的值是什么? –

+0

由于该更新,我的系统上也有一些应用程序崩溃。 – navossoc

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

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

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

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