Windows 10 家庭版 / “基于 x64 的 PC” / Dell XPS 13 9360
在可靠性监视器中,我每天都会遇到许多“应用程序故障”。它们可以一直追溯到 2017-12-04,没有任何变化(下面的详细信息相同),我认为这台机器是第一次使用的。问题被标记为已报告(过去几分钟内的问题实例除外)。
@magicandre1981 还建议我开一个Windows 应用反馈中心中的公开问题因为某些原因。
我的问题是:我该如何识别这种情况?是什么原因导致崩溃?能以某种方式解决这些问题吗?
问题详细信息
- 故障应用程序路径:
C:\Windows\System32\rundll32.exe
- 问题事件名称:APPCRASH
- 故障模块名称:Windows.UI.Immersive.dll
- 故障模块版本:10.0.16299.125
- 异常偏移量:00000000000ac885
- 异常代码:c0000005
- 操作系统版本:10.0.16299.2.0.0.768.101
- 存储桶 ID:ab5106f0b0020ee0d7e0c2d4f71642fb (1720589277589816059)
已安装“防病毒软件”(McAfee VirusSafe)并且正在运行,没有警报,没有隔离的项目,也没有我能找到的重要日志。这sfc /scannow
表明系统运行正常。
手动触发问题
似乎可以通过登录来触发崩溃。这不是过去导致崩溃的原因,因为机器通常没有用户登录和退出(甚至打开和关闭机器)。
进程监控允许跟踪进程的创建和退出以第二个用户身份运行它,我能够看到崩溃的过程:
- 命令行:
"C:\WINDOWS\system32\rundll32.exe" -localserver 22d8c27b-47a1-48d1-ad08-7da7abd79617
。
目前还不清楚这个 UUID 是什么。该-localserver
选项似乎没有记录。Google 找到了一个问题,唯一的答案声称它是“进程分析性能分析程序(Windows 性能计数器程序)”。诚然,我可以看到它,profapi.dll
并且powrprof.dll
正在加载此进程。
- 父进程:DllHost.exe(“COM Surrogate”)。
被形容为 ”我对这段代码感觉不太好,所以我打算让 COM 将它托管在另一个进程中。这样,如果它崩溃了,崩溃的将是 COM Surrogate 牺牲进程,而不是我“。
- 命令行:
C:\WINDOWS\system32\DllHost.exe /Processid:{133EAC4F-5891-4D04-BADA-D84870380A80}
父级命令行中的此 UUID能可以在注册表中找到。它与名称“Shell Create Object Task Server”相关联。使用 Process Monitor 中的注册表跟踪,我看到DllHost
加载了shell32.dll
,位于HKCR\CLSID\{133eac...}\InProcServer32
)。
=> 我认为我们可以将这个父进程识别为 shell32.dll /“Shell Create Object Task Server”,并且它是操作系统的一部分。
两个进程都以用户身份运行NT AUTHORITY\SYSTEM
。这似乎是一个可能的调查地点。GUI 软件的特权部分在做什么,需要在单独的进程中运行吗?
崩溃回溯
运行后procdump -ma -i C:\dumps
,我能够捕获崩溃转储。(procdump -u
停止捕获)。来自 DebugDiag 的分析器能够打开它们并运行 CrashHangAnalysis:
在 rundll32.exe_171225_165805.dmp 中,汇编指令位于Windows_UI_Immersive!CUserTileValidator::_SetReadOnlyCapability+1d在C:\Windows\System32\Windows.UI.Immersive.dll来自 Microsoft Corporation 的尝试从线程 0 上的内存位置 0x00000000 读取时引发访问冲突异常 (0xC0000005)。
以下线程
rundll32.exe_171225_165805.dmp
正在处理通过 LRPC 到端点的入站 RPC 调用OLE54BFB094974A828ACE9FBFE5A353
:( 0 )
线程 0 - 系统 ID 4332
- 入口点 rundll32!wWinMainCRTStartup
- 创建时间 25/12/2017 16:58:04
- 用户模式所用时间 0 天 00:00:00.000
- 内核模式所用时间 0 天 00:00:00.000
ntdll!NtWaitForMultipleObjects+14 ntdll!WerpWaitForCrashReporting+a8 ntdll!RtlReportExceptionHelper+33e ntdll!RtlReportException+9d combase!ServerExceptionFilter+71 combase!AppInvokeExceptionFilterWithMethodAddress+62 combase!`ObjectMethodExceptionHandlingAction<<lambda_76d9e92c799d246a4afbe64a2bf5673d> >'::`1'::filt$0+77 ucrtbase!_C_specific_handler+a0 ntdll!RtlpExecuteHandlerForException+d ntdll!RtlDispatchException+358 ntdll!KiUserExceptionDispatch+2e Windows_UI_Immersive!CUserTileValidator::_SetReadOnlyCapability+1d Windows_UI_Immersive!CUserTileValidator::_GenerateLargeFromDynamicAndReset+23 Windows_UI_Immersive!CUserTileValidator::ValidateUserTile+141 rpcrt4!Invoke+73 rpcrt4!NdrStubCall2+3a5 rpcrt4!NdrStubCall3+e3 combase!CStdStubBuffer_Invoke+62 rpcrt4!CStdStubBuffer_Invoke+3b combase!ObjectMethodExceptionHandlingAction<<lambda_76d9e92c799d246a4afbe64a2bf5673d> >+53 combase!DefaultStubInvoke+2d2 combase!ServerCall::ContextInvoke+492 combase!AppInvoke+99e combase!ComInvokeWithLockAndIPID+55b combase!ComInvoke+210 combase!ThreadDispatch+d4 combase!ThreadWndProc+e8 user32!UserCallWinProcCheckWow+2ad user32!DispatchMessageWorker+19f rundll32!_InvokeLocalServer+1b9 rundll32!wWinMain+168 rundll32!operator delete+2eb kernel32!BaseThreadInitThunk+14 ntdll!RtlUserThreadStart+21
Inbound RPC Call: Protocol Sequence ncalrpc Endpoint OLE54BFB094974A828ACE9FBFE5A353 Source Process ID 1160 Source Thread ID 2624
根据 Process Explorer,PID 1160 是“RPC”和“RPC Endpoint Mapper”的 svchost.exe 实例。
答案1
崩溃的原因是什么? 能以某种方式解决吗?
显然,崩溃是由验证UserTile
该特定用户引起的。
我相信这是指您登录时显示的图片。将用户的图片设置为从中获取的任意图像文件后Pictures/
,当我切换用户并以特定用户身份登录时不再触发崩溃。
我该如何识别这一点?
看起来“异常偏移”是 DLL/EXE 内部的代码偏移(即避免重定位/地址随机化的影响)。因此,可以通过“异常偏移”+ 特定的 DLL/EXE 内容来识别崩溃位置 -
- 故障模块名称:Windows.UI.Immersive.dll
- 故障模块版本:10.0.16299.125
- “基于 x64 的 PC”(DLL 的 64 位版本,而不是 32 位“x86”)。
如果您有 DLL/EXE 的调试符号,您可能需要付出额外的努力来查找此位置。procdump
按照所述方法捕获崩溃转储。如果 DLL/EXE 来自 Microsoft,请使用支持 Microsoft 符号服务的任何调试器打开转储。与数字地址相比,符号名称不太可能随时间(或不同的硬件平台)而改变。调试器还将显示导致崩溃的嵌套函数调用的完整跟踪。
- 象征性位置:
Windows_UI_Immersive!CUserTileValidator::_SetReadOnlyCapability+1d
等等。