Shell扩展会导致我的程序崩溃吗? [英] Could a shell extension be causing my program to crash?

查看:132
本文介绍了Shell扩展会导致我的程序崩溃吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的公司构建了一个在Windows XP上运行的MFC应用程序.我们的一位客户报告了该应用程序崩溃的情况,该事件在打开通用文件对话框"以允许用户保存日志文件时发生.

My company builds an MFC application that runs on Windows XP. One of our customers has reported a crash in this application that occurs when it opens a Common File Dialog to allow the user to save a log file.

我们在任何集成系统上都没有观察到此崩溃.客户向我们提供了一个崩溃转储,该崩溃转储表明该程序正试图从地址160b2d48的某些不可访问的内存中读取数据.该地址似乎来自地址空间的代码部分,因为在其上方和下方分别加载了DLL(15dc0000-16085000和160c0000-1611b000),但该地址未加载任何内容.崩溃线程的堆栈如下:

We haven't observed this crash on any of our integration systems. The customer provided us with a crash dump which shows that the program is trying to read from some inaccessible memory at address 160b2d48. The address appears to be from the code section of the address space, as there are DLLs loaded just above and below it (15dc0000-16085000 and 160c0000-1611b000), but nothing is loaded at that address. The stack of the crashing thread is as follows:

>   shell32.dll!CFSFolder::GetDetailsEx()  + 0x533c8 bytes  
    shell32.dll!CInfoTip::_GetInfoTipFromItem()  + 0x169 bytes  
    shell32.dll!CInfoTip::GetInfoTip()  + 0x1c bytes    
    shell32.dll!CFolderInfoTip::GetInfoTip()  + 0x95 bytes  
    shell32.dll!CStatusBarAndInfoTipTask::RunInitRT()  + 0xf5 bytes 
    shell32.dll!CRunnableTask::Run()  + 0x4c bytes  
    browseui.dll!CShellTaskScheduler_ThreadProc()  + 0x82 bytes 
    shlwapi.dll!ExecuteWorkItem()  + 0x1d bytes 
    ntdll.dll!_RtlpWorkerCallout@16()  + 0x65 bytes 
    ntdll.dll!_RtlpExecuteWorkerRequest@12()  + 0x1a bytes  
    ntdll.dll!_RtlpApcCallout@16()  + 0x11 bytes    
    ntdll.dll!_RtlpWorkerThread@4()  + 0x1794c bytes    
    kernel32.dll!_BaseThreadStart@8()  + 0x37 bytes

此堆栈上没有来自我们的应用程序的代码,并且与上述证据配对,我怀疑发生崩溃是因为在我们的应用程序显示Save时调用了shell扩展(可能是信息提示处理程序,给出了堆栈跟踪).对话框,但由于某种原因未加载到该过程中.

There is no code from our application on this stack, and paired with the above evidence, I suspect the crash happens because a shell extension (probably an info tip handler, given the stack trace) is called when our application shows the Save dialog, but isn't loaded in the process for some reason.

  • 我的假设合理吗?
  • 如果是这样,我应该如何跟踪负责的shell扩展?

推荐答案

是的,shell扩展和其他系统挂钩dll有效地在您的进程空间中运行.我发现这种情况发生在许多扩展dll中,这些扩展dll经常在显示文件打开对话框时导致我们的应用程序崩溃.如果您在windbg中有故障转储,请查看所有已加载的dll.忽略任何微软公司,剩下的将是罪魁祸首.或者,请客户运行自动运行,保存.arn文件并将其发送到你. AppInit和Explorer是要检查的选项卡.

Yes, shell extensions and other system hook dlls effectively run within your process space. I've found this to happen with a number of extension dlls that have caused our application to crash, often when showing a file open dialog. If you have the crash dump in windbg then take a look at all the dlls that are loaded. Ignore any Microsoft ones, and whatever's left will contain the culprit. Alternatively ask the customer to run Autoruns, Save the .arn file and send it to you. AppInit and Explorer are the tabs to check.

这篇关于Shell扩展会导致我的程序崩溃吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆