O Windows Rundll32 (processo filho de DllHost) está falhando. Como posso identificar isso?

2

Windows 10 Home / "PC baseado em x64" / Dell XPS 13 9360

No Monitor de Confiabilidade, eu tenho muitas "falhas de aplicativos" todos os dias. Eles voltam até 2017-12-04 sem variação (os detalhes abaixo são idênticos), quando eu acredito que esta máquina foi usada pela primeira vez. O problema está marcado como tendo sido relatado (além de instâncias de problemas nos últimos minutos).

@ magicandre1981 também sugeriu que eu abrisse um problema público no Hub de Comentários do aplicativo Windows por algum motivo.

Minha pergunta é: como posso identificar isso? O que causa as falhas? Eles podem ser resolvidos de alguma forma?

Detalhes do problema

  • Falha no caminho do aplicativo: C:\Windows\System32\rundll32.exe
  • Nome do Evento do Problema: APPCRASH
  • Nome do módulo de falha: Windows.UI.Immersive.dll
  • Versão do módulo de falha: 10.0.16299.125
  • Deslocamento de exceção: 00000000000ac885
  • Código de exceção: c0000005
  • Versão do SO: 10.0.16299.2.0.0.768.101
  • ID do compartimento: ab5106f0b0020ee0d7e0c2d4f71642fb (1720589277589816059)

"Antivírus" é instalado (McAfee VirusSafe) e executado sem alertas, sem itens em quarentena, sem logs significativos que eu possa encontrar. sfc /scannow fornece ao sistema um bom histórico de saúde.

Acionando o problema manualmente

Parece possível acionar a falha fazendo login. Não é isso que está causando isso no passado, porque a máquina geralmente não tem um usuário entrando e saindo (ou até mesmo ligando e desligando a máquina). ).

Process Monitor permite rastrear a criação e saída de processos . Executando-o como um segundo usuário, posso ver o processo de falha:

  • Linha de comando: "C:\WINDOWS\system32\rundll32.exe" -localserver 22d8c27b-47a1-48d1-ad08-7da7abd79617 .

Não está muito claro o que é este UUID. A opção -localserver não parece estar documentada. O Google encontra uma pergunta , a única resposta é "Perfil do processo" Programa de Análise de Desempenho (Programa Contador de Desempenho do Windows) ". É verdade que posso ver que profapi.dll e powrprof.dll estão carregados neste processo.

  • Processo pai: DllHost.exe ("COM Surrogate").

Descrito como " não me sinto bem com este código, por isso vou perguntar ao COM para hospedá-lo em outro processo. Dessa forma, se ele falhar, é o processo sacrificial do COM Surrogate que falha em vez de mim ".

  • Linha de comando: C:\WINDOWS\system32\DllHost.exe /Processid:{133EAC4F-5891-4D04-BADA-D84870380A80}

Esse UUID na linha de comando pai pode ser encontrado no registro. Ele está associado ao nome "Shell Create Object Task Server". Usando o rastreamento de registro no Process Monitor, vejo DllHost carrega shell32.dll , localizado via HKCR\CLSID\{133eac...}\InProcServer32 ).

= > Eu acho que podemos identificar este processo pai, como shell32.dll / "Shell criar objeto Task Server", e que é parte do sistema operacional.

Ambos os processos são executados como o usuário NT AUTHORITY\SYSTEM . Isso parece um possível local de investigação. Qual é a parte privilegiada do software GUI, que precisa ser executada em um processo separado?

Crash backtrace

Depois de executar procdump -ma -i C:\dumps , posso capturar os despejos de memória. ( procdump -u para parar de capturar). O analisador do DebugDiag é capaz de abri-los e executar o CrashHangAnalysis:

In rundll32.exe_171225_165805.dmp the assembly instruction at Windows_UI_Immersive!CUserTileValidator::_SetReadOnlyCapability+1d in C:\Windows\System32\Windows.UI.Immersive.dll from Microsoft Corporation has caused an access violation exception (0xC0000005) when trying to read from memory location 0x00000000 on thread 0.

The following threads in rundll32.exe_171225_165805.dmp are processing an inbound RPC call over LRPC to the OLE54BFB094974A828ACE9FBFE5A353 endpoint:

( 0 )

Thread 0 - System ID 4332

  • Entry point rundll32!wWinMainCRTStartup
  • Create time 25/12/2017 16:58:04
  • Time spent in user mode 0 Days 00:00:00.000
  • Time spent in kernel mode 0 Days 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

O PID 1160 é uma instância do svchost.exe para "RPC" e "RPC Endpoint Mapper", de acordo com o Process Explorer.

    
por sourcejedi 24.12.2017 / 16:36

1 resposta

2

O que causa as falhas? Eles podem ser resolvidos de alguma forma?

Aparentemente, as falhas são causadas pela validação do UserTile desse usuário específico.

Acredito que isso se refere à imagem que é mostrada quando você faz login. Depois de definir a foto do usuário para um arquivo de imagem arbitrário tirado de Pictures/ , a falha não foi mais acionada quando mudo para usuários e efetuo login como o usuário específico.

Como posso identificar isso?

Parece que "Exceção compensada" é um deslocamento de código dentro da DLL / EXE (ou seja, evitando o efeito de realocação / endereçamento aleatório). Assim, o local da falha pode ser identificado por "Deslocamento de exceção" + o conteúdo específico de DLL / EXE -

  • Nome do módulo de falha: Windows.UI.Immersive.dll
  • Versão do módulo de falha: 10.0.16299.125
  • "PC baseado em x64" (a versão de 64 bits da DLL, não "x86" de 32 bits).

Se você tiver símbolos de depuração para a DLL / EXE, talvez consiga fazer um esforço extra para procurar esse local. Use procdump conforme descrito para capturar um despejo de memória. Abra o despejo com qualquer depurador que suporte o serviço de símbolo da Microsoft, se a DLL / EXE for da Microsoft. Os nomes dos símbolos têm menor probabilidade de mudar com o tempo (ou plataformas de hardware diferentes) do que os endereços numéricos. Um depurador também mostrará um rastreamento completo das chamadas de função aninhadas que levaram à falha.

  • Localização simbólica: Windows_UI_Immersive!CUserTileValidator::_SetReadOnlyCapability+1d etc.
por 25.12.2017 / 19:14