我的公司生成一個在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
[email protected]() + 0x65 bytes
[email protected]() + 0x1a bytes
[email protected]() + 0x11 bytes
[email protected]() + 0x1794c bytes
[email protected]() + 0x37 bytes
有沒有從我們這個堆棧上的應用程序代碼,並與上述證據配對,我懷疑崩潰是因爲外殼擴展(大概一個信息提示處理程序,給定堆棧跟蹤)在我們的應用程序顯示「保存」對話框時調用,但由於某種原因在進程中未加載。
- 是我的假設是否合理?
- 如果是這樣,我應該如何去跟蹤負責任的shell擴展?