Windows Rundll32 (дочерний процесс DllHost) падает. Как я могу даже идентифицировать это?
Windows 10 Home / "x64-ПК" / Dell XPS 13 9360
В Мониторе надежности у меня ежедневно происходит много "сбоев приложений". Они возвращаются к 2017-12-04 без изменений (подробности ниже идентичны), когда я считаю, что эта машина была впервые использована. Проблема помечена как сообщенная (за исключением случаев проблемы за последние несколько минут).
@ magicandre1981 также предложил по какой-то причине открыть общедоступную проблему в Windows Feedback Hub.
Мой вопрос: как я могу это определить? Что вызывает сбои? Могут ли они быть решены как-то?
Детали проблемы
- Неверный путь к приложению:
C:\Windows\System32\rundll32.exe
- Название проблемного события: APPCRASH
- Имя модуля неисправности: Windows.UI.Immersive.dll
- Версия модуля неисправности: 10.0.16299.125
- Смещение исключения: 00000000000ac885
- Код исключения: c0000005
- Версия ОС: 10.0.16299.2.0.0.768.101
- Идентификатор Bucket: ab5106f0b0020ee0d7e0c2d4f71642fb (1720589277589816059)
"Антивирус" установлен (McAfee VirusSafe) и работает без предупреждений, объектов на карантине и журналов, которые я могу найти. sfc /scannow
дает системе чистый счет здоровья.
Запуск проблемы вручную
Кажется возможным вызвать сбой, войдя в систему. Это не то, что вызывало его в прошлом, потому что на машине обычно нет входа и выхода пользователя (или даже включения и выключения машины).
Process Monitor позволяет отслеживать процесс создания и выхода из процесса. Запустив его от имени второго пользователя, я вижу процесс сбоя:
- Командная строка:
"C:\WINDOWS\system32\rundll32.exe" -localserver 22d8c27b-47a1-48d1-ad08-7da7abd79617
,
Не совсем понятно, что это за UUID. -localserver
опция не представляется документированной. Google находит вопрос, единственный ответ утверждает, что это "Программа анализа производительности профилирования процессов (Программа Windows Performance Counter)". По общему признанию я могу видеть это profapi.dll
а также powrprof.dll
загружаются в этом процессе.
- Родительский процесс: DllHost.exe ("Суррогат COM").
- Командная строка:
C:\WINDOWS\system32\DllHost.exe /Processid:{133EAC4F-5891-4D04-BADA-D84870380A80}
Этот UUID в командной строке родителя можно найти в реестре. Он связан с именем "Сервер задач Shell Create Object". Используя отслеживание реестра в 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 вызвала исключение нарушения прав доступа (0xC0000005) при попытке чтения из ячейка памяти 0x00000000 в потоке 0.
Следующие темы в
rundll32.exe_171225_165805.dmp
обрабатывают входящий вызов RPC через LRPC кOLE54BFB094974A828ACE9FBFE5A353
конечная точка:(0)
Поток 0 - системный идентификатор 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
PID 1160 - это экземпляр svchost.exe для "RPC" и "RPC Endpoint Mapper", согласно Process Explorer.
1 ответ
Что вызывает сбои? Могут ли они быть решены как-то?
Видимо, сбои вызваны проверкой UserTile
этого конкретного пользователя.
Я полагаю, что это относится к изображению, которое отображается при входе в систему. После установки изображения пользователя в произвольный файл изображения, взятый из Pictures/
, сбой больше не был вызван, когда я переключаю пользователей и захожу как конкретный пользователь.
Как я могу это определить?
Похоже, что "Смещение исключения" - это смещение кода внутри DLL/EXE (т.е. исключается эффект перемещения / рандомизации адреса). Таким образом, место сбоя можно определить по "Смещению исключения" + конкретное содержимое DLL / EXE -
- Имя модуля неисправности: Windows.UI.Immersive.dll
- Версия модуля неисправности: 10.0.16299.125
- "x64-based PC" (64-битная версия DLL, а не 32-битная "x86").
Если у вас есть символы отладки для DLL/EXE, вы можете приложить дополнительные усилия, чтобы найти это местоположение. использование procdump
как описано, чтобы захватить аварийный дамп. Откройте дамп с любым отладчиком, который поддерживает Microsoft Symbol Service, если DLL / EXE от Microsoft. Имена символов с меньшей вероятностью будут меняться со временем (или на разных аппаратных платформах), чем числовые адреса. Отладчик также покажет полную трассировку вызовов вложенных функций, приводящих к сбою.
- Символическое местоположение:
Windows_UI_Immersive!CUserTileValidator::_SetReadOnlyCapability+1d
и т.п.