我的公司构建了一个在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扩展(可能是给定堆栈跟踪的信息提示处理程序)对话框,但由于某种原因未在过程中加载。
答案 0 :(得分:2)
是的,shell扩展和其他系统挂钩dll在您的进程空间内有效运行。我发现这种情况发生在许多扩展dll上,导致我们的应用程序崩溃,通常在显示文件打开对话框时。如果您在windbg
中有崩溃转储,那么请查看所有已加载的dll。忽略任何微软的,任何剩下的将包含罪魁祸首。或者,要求客户运行Autoruns,保存.arn文件并将其发送给您。 AppInit和Explorer是要检查的选项卡。
答案 1 :(得分:0)