挂在随机文件上的应用程序

挂在随机文件上的应用程序

在我的 Windows 7 系统上,我每天都会遇到应用程序冻结的情况,一天好几次,这种情况已经持续了几天。这个系统已经稳定运行 4 年了,所以发生了一些新情况。

主要症状是 Thunderbird 在启动时冻结,无法使用。我一直以为是 Thunderbird 的问题,最后创建了一个新配置文件,因为我的配置文件已经 10 多年了。

我为什么会想到这个配置文件?因为我发现.msf如果不重启,我无法删除某些文件。尝试这样做会冻结 Explorer,因此必须重新启动。
使用新配置文件后,Thunderbird 仍会冻结,但频率会降低,因此我可以阅读邮件并快速撰写回复。

昨天,我用 gvim 编辑了一个.hmtl文件,同时,我将其加载到 Firefox 中查看结果。
工作了一个小时后,它再次冻结。任何试图操作该.hmtl文件的进程都被冻结了。关闭 Firefox 和 gvim 也无济于事。

使用进程资源管理器(未以管理员身份启动)无法使用.hmtl句柄搜索功能显示文件。Handle.exe 也无法显示。重新启动可解锁未损坏的文件。我有chkdsk /B两个设备(C:一个是 SSD,D:一个是 HDD),因为.msf文件已打开D:,并且.hmtl已打开C:

我怀疑是 Windows 搜索的问题,于是清除了它的数据库。
我尝试停用 Windows 搜索、我的防病毒软件 (Avast) 和两个作为服务运行的同步/备份工具。

没有释放任何锁。

我发现这个有趣的 windbg 用法:Windows 中的挂起进程:有没有办法查明原因?

我已经附加了 Thunderbird 进程,目前它处于冻结状态,现在我看到以下情况:

FAULTING_IP: 
ntdll!DbgBreakPoint+0
00000000`7772cc90 cc              int     3

EXCEPTION_RECORD:  ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 000000007772cc90 (ntdll!DbgBreakPoint)
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 1
   Parameter[0]: 0000000000000000

FAULTING_THREAD:  0000000000000000

BUGCHECK_STR:  HANG

PROCESS_NAME:  thunderbird.exe

ERROR_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>

EXCEPTION_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>

EXCEPTION_PARAMETER1:  0000000000000000

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

DERIVED_WAIT_CHAIN:  

Dl Eid Cid     WaitType
-- --- ------- --------------------------
   56  74c.1a04 Speculated (Triage)    -->
   0   74c.12b4 File IO                

WAIT_CHAIN_COMMAND:  ~56s;k;;~0s;k;;

BLOCKING_THREAD:  00000000000012b4

DEFAULT_BUCKET_ID:  APPLICATION_HANG_BlockedOn_FileIO

PRIMARY_PROBLEM_CLASS:  APPLICATION_HANG_BlockedOn_FileIO

LAST_CONTROL_TRANSFER:  from 00000000751dc1ff to 000000007772df0a

STACK_TEXT:  
00000000`0024ddd8 00000000`751dc1ff : 00000000`003becdc 00000000`003becf4 00000000`005847e0 

000000ba`00340201 : ntdll!ZwCreateFile+0xa
00000000`0024dde0 00000000`751cd18f : 00000000`003becdc 00000000`00000000 00000000`00000000 

00000000`00000060 : wow64!whNtCreateFile+0x10f
00000000`0024deb0 00000000`75152776 : 00000000`77360745 00000000`751c0023 00000000`00000246 

00000000`003bf2f8 : wow64!Wow64SystemServiceEx+0xd7
00000000`0024e770 00000000`751cd286 : 00000000`00000000 00000000`75151920 ffffffff`fc5f0000 

00000000`7770dfc1 : wow64cpu!TurboDispatchJumpAddressEnd+0x2d
00000000`0024e830 00000000`751cc69e : 00000000`00000000 00000000`00000000 00000000`751c4b10 

00000000`7ffe0030 : wow64!RunCpuSimulation+0xa
00000000`0024e880 00000000`777216a6 : 00000000`00584330 00000000`00000000 00000000`7780e670 

00000000`777e1950 : wow64!Wow64LdrpInitialize+0x42a
00000000`0024edd0 00000000`7777d150 : 00000000`00000000 00000000`77720db1 00000000`0024f380 

00000000`00000000 : ntdll!LdrpInitializeProcess+0x17e3
00000000`0024f2c0 00000000`7770b63e : 00000000`0024f380 00000000`00000000 00000000`fffdf000 

00000000`00000000 : ntdll! ?? ::FNODOBFM::`string'+0x25b20
00000000`0024f330 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 

00000000`00000000 : ntdll!LdrInitializeThunk+0xe


FOLLOWUP_IP: 
wow64!whNtCreateFile+10f
00000000`751dc1ff 448bd8          mov     r11d,eax

SYMBOL_STACK_INDEX:  1

SYMBOL_NAME:  wow64!whNtCreateFile+10f

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: wow64

IMAGE_NAME:  wow64.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  562593aa

STACK_COMMAND:  ~0s ; kb

BUCKET_ID:  X64_HANG_wow64!whNtCreateFile+10f

FAILURE_BUCKET_ID:  APPLICATION_HANG_BlockedOn_FileIO_cfffffff_wow64.dll!whNtCreateFile

WATSON_STAGEONE_URL:  http://watson.microsoft.com/0004cc90.htm?Retriage=1

Followup: MachineOwner
---------

所以,好吧,我确信 Thunderbird 阻塞了 IO,现在,它得到了证实。根据 API 文档,此调用可以是打开现有文件。我尝试转储给出文件名的参数(据我所知)并随机使用此命令播放:“dt ntdll!_OBJECT_ATTRIBUTES 00000000`005847e0”,但我不熟悉 windbg 和调用约定,因此到目前为止我未能深入研究该结构。

那么我下一步该做什么?

编辑:
按照建议将我的 WinDbg 更改为 x86 版本后,我的转储变得可分析。
冻结消失了,就像你专注于一个问题时总是会发生的那样:它会短暂消失以避免被解决,直到今天晚上,当佳能 DPP 在批量处理 RAW 文件时冻结时。
以下是跟踪:

FAULTING_IP: 
ntdll!DbgBreakPoint+0
7736000c cc              int     3

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 7736000c (ntdll!DbgBreakPoint)
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 1
   Parameter[0]: 00000000

FAULTING_THREAD:  00000000

BUGCHECK_STR:  HANG

PROCESS_NAME:  DPPBatch.exe

ERROR_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>

EXCEPTION_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>

EXCEPTION_PARAMETER1:  00000000

MOD_LIST: <ANALYSIS/>

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

DERIVED_WAIT_CHAIN:  

Dl Eid Cid     WaitType
-- --- ------- --------------------------
   1   1b88.1ff4 Speculated (Triage)    -->
   0   1b88.1948 File IO                

WAIT_CHAIN_COMMAND:  ~1s;k;;~0s;k;;

BLOCKING_THREAD:  00001948

DEFAULT_BUCKET_ID:  APPLICATION_HANG_BlockedOn_FileIO

PRIMARY_PROBLEM_CLASS:  APPLICATION_HANG_BlockedOn_FileIO

LAST_CONTROL_TRANSFER:  from 74e8c5fd to 77370106

STACK_TEXT:  
0018ed8c 74e8c5fd 0018ee28 80100080 0018edcc ntdll!ZwCreateFile+0x12
0018ee30 76e53f56 00000060 80100080 00000001 KERNELBASE!CreateFileW+0x35e
0018ee5c 76e553b4 0058e300 80000000 00000001 kernel32!CreateFileWImplementation+0x69
0018ee8c 100dbf8e 01f4ed98 80000000 00000001 kernel32!CreateFileA+0x37
WARNING: Stack unwind information not available. Following frames may be wrong.
0018eeb8 10002275 01f40000 00000000 10002294 DPPDLL!GNZ_getFilenameFromScriptFile+0x3e
0018eef8 0018ef7c 01f4ed98 00000000 0018ef7c DPPDLL!UCSCloseProfile+0xea5
0018eefc 01f4ed98 00000000 0018ef7c 01f4fc20 0x18ef7c
0018ef7c 00000000 00000000 00000000 00000000 0x1f4ed98
FOLLOWUP_IP: 
DPPDLL!GNZ_getFilenameFromScriptFile+3e
100dbf8e 8bf8            mov     edi,eax

SYMBOL_STACK_INDEX:  4

SYMBOL_NAME:  dppdll!GNZ_getFilenameFromScriptFile+3e

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: DPPDLL

IMAGE_NAME:  DPPDLL.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  52251a6c

STACK_COMMAND:  ~0s ; kb

BUCKET_ID:  HANG_dppdll!GNZ_getFilenameFromScriptFile+3e

FAILURE_BUCKET_ID:  APPLICATION_HANG_BlockedOn_FileIO_cfffffff_DPPDLL.dll!GNZ_getFilenameFromScriptFile

WATSON_STAGEONE_URL:  http://watson.microsoft.com/0001000c.htm?Retriage=1

Followup: MachineOwner
---------

我很容易就找到了相应的文件,它位于我的 D: 驱动器上:D:\Sauvegarde\Tirages\photos\20151214 - totale D70\\GNZC0E116282C365.vbf。经过 2 小时的工作后,它挂起了进程。我当时正在使用 PC。它看起来肯定是文件系统损坏或设备驱动程序错误,所以我将再次运行 chkdsk。
与此同时,我尝试启动 ProcessExplorer 来查找等待文件的进程 IO,它成功了。但我记得它应该以管理员身份启动,所以我关闭它并右键单击图标......它花了大约 5 分钟才弹出(我没想到它会弹出,这让我很惊讶)。再次,根据 Process Explorer,没有与阻塞文件关联的句柄(我寻找的是“vbf”)。

好吧,我认为我关于调试器的问题已经得到解答了(存在 2 个版本的 WinDbg),我的问题仍然需要解决,但我不确定这是否是获得帮助的正确地方。

相关内容