Questão Aplicativos iniciando, mas não mostrando a interface do usuário


Eu tentei iniciar aplicativos como de costume no menu Iniciar do Windows. Mais de 30 minutos, tenho os seguintes efeitos:

  • aplicações com uma GUI não são mostradas mais.
  • Eu posso continuar usando aplicativos GUI que já estão abertos
  • Posso abrir aplicativos não-GUI / console (como cmd).
  • No prompt da linha de comando, posso ver que os aplicativos da GUI foram iniciados usando tasklist

Aqui está um exemplo:

>tasklist | find "taskmgr"
taskmgr.exe                   4352 Console                    1      7.216 K
taskmgr.exe                   7824 Console                    1      7.216 K
taskmgr.exe                   7232 Console                    1      7.232 K

Como você pode imaginar, tentei iniciar o Gerenciador de Tarefas para diagnosticar o problema 3 vezes. Mas nenhuma das janelas do Gerenciador de Tarefas ficou visível.

Sob a suposição de que tasklist exibe os processos na ordem em que foram iniciados, identifiquei aproximadamente o problema:

...
openAgent.exe                 7012 Console                    1    592.440 K Not Responding
...
WerFault.exe                  3592 Console                    1     10.112 K Unknown
...

openAgent é um aplicativo que eu fechei (ou pelo menos tentei fechar, pois ainda parece estar rodando). Algo deve ter caído devido à presença de WerFault, mas não consegui ver a caixa de diálogo Relatório de erros do Windows.

Terminando o openAgent aplicação vigorosamente usando taskkill /pid 7012 /f, todas as aplicações que tentei começar apareceram de repente.

Olhando para o diálogo de Relatório de Erros do Windows agora, ele mostra exceção 80000003, que é um ponto de interrupção (depuração).

O que aconteceu aqui? Eu gostaria de entender a situação do ponto de vista do Windows Internals. Em teoria, eu esperaria que a falha de um aplicativo de modo de usuário não pudesse influenciar outros aplicativos.

Infelizmente eu não tenho um dump do kernel da situação nem um despejo de memória do modo de usuário openAgent, então esta é toda a informação que posso lhe dar.

Meu sistema é o Windows 7 SP1 x64 Enterprise, sem atualizações pendentes do Windows, CPU Intel Core i7. openAgent é um executável do SilkTest by MicroFocus, uma ferramenta de automação de testes.


1


origem


Você não forneceu informações suficientes para explicar o que aconteceu. - Ramhound


Respostas:


Eu poderia reproduzir o problema mais uma vez e verifica-se que openAgent instala um gancho chamado OsHookDll_x86 da mesma empresa.

Este gancho aplica-se a DispatchHookW():

2:010> k
...
0049f2b0 75a86381 OsHookDll_x86!GetMessageHook+0x37
0049f2cc 75a780a9 USER32!DispatchHookW+0x38
...
0049f544 5eff5709 USER32!PeekMessageW+0x108

que afeta o loop de mensagem do Windows. O loop de mensagens do Windows é necessário por qualquer aplicativo GUI para ser executado.

O gancho envia mensagens do Windows para openAgent através da USER32!SendMessageW() mas openAgent foi suspenso pelo Relatório de Erros do Windows (WerFault) e, portanto, não pode processar tais mensagens, resultando em um tempo limite:

1:009> k
ChildEBP RetAddr  
00138f90 75a79886 USER32!NtUserMessageCall+0x15
00138fcc 75a797f3 USER32!SendMessageTimeoutWorker+0xa6
00138ff4 59d6066c USER32!SendMessageTimeoutW+0x21
...

Eu não pude analisar completamente o resto desde que durante a minha sessão de depuração, todo o resto começou a congelar também. Eu suponho que o gancho tenta reenviar a mensagem em vez de retornar, resultando em um loop infinito.

!analyze -v não funcionou devido a Símbolos ausentes para ntdll.


0