MFC 程序挂起:在 Vista 上更新KB3059317后损坏的 Comctl32.dll
MFC program hangs: broken Comctl32.dll after update KB3059317 on Vista?
我有一个基于 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不是 2015 年 6 月唯一显示此内容的 Windows Vista 更新奇怪的行为。
对于我们应用程序中的一个对话框,Areo Vista 至少失败了:对话框只是没有绘制。它存在,但它只是不可见。
要解决 Vista Aero 上的问题,请在执行OnInitDialog()
和OnSize()
方法时删除对SetRedraw()
函数的任何调用。
至少在这两种情况下,SetRedraw(TRUE)
似乎没有(积极的)影响。
我使用使用
自定义版本的 ListView 控件的 .NET 4 编写的自定义程序也有同样的问题。 程序不挂起它产生错误"试图读取或写入受保护的内存。这通常表明其他内存已损坏。 卸载此更新后,一切正常。
相关文章:
- 为什么会发生堆损坏
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 平均图像时图像损坏
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 为什么C中的通用链表中存储的数据已损坏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- C++双重释放或损坏(out)
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 使用全局声明的向量时,C++双重释放错误/损坏
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 删除字符串后C++检测到堆损坏
- 两个垫子的 OpenCV 数据是相同的,但使用 Mat::at 检索时的值已损坏
- 我可以写入关闭的套接字并强制纠正损坏的管道错误吗?
- 损坏的结构字符数组 - sqlite C++
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- zlib 膨胀在使用小缓冲区时会损坏
- 正在调试 malloc():新内存损坏
- MFC 程序挂起:在 Vista 上更新KB3059317后损坏的 Comctl32.dll