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").

Описанный как " Я не очень хорошо себя чувствую по поводу этого кода, поэтому я собираюсь попросить COM разместить его в другом процессе. Таким образом, в случае сбоя, вместо меня вылетает жертвенный процесс COM Surrogate".

  • Командная строка: 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 и т.п.
Другие вопросы по тегам