shell扩展可能会导致我的程序崩溃吗?

时间:2011-10-14 14:30:12

标签: windows debugging mfc crash shell-extensions

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

我们没有在任何集成系统上发现此崩溃。客户向我们提供了故障转储,该故障转储显示程序正在尝试从地址160b2d48处的某些无法访问的内存中读取。地址似乎来自地址空间的代码部分,因为在其上方和下方加载了DLL(15dc0000-16085000和160c0000-1611b000),但该地址没有加载任何内容。崩溃线程的堆栈如下:

>   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扩展(可能是给定堆栈跟踪的信息提示处理程序)对话框,但由于某种原因未在过程中加载。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)