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

1

Eu tentei iniciar os aplicativos normalmente a partir do menu Iniciar do Windows. Mais de 30 minutos, tenho os seguintes efeitos:

  • aplicativos com uma GUI não são mais mostrados.
  • posso continuar usando aplicativos GUI que já estão abertos
  • Eu 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

Veja 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.

Supondo que tasklist exiba os processos na ordem em que foram iniciados, identifiquei o problema de forma aproximada:

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

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

Finalizando o aplicativo openAgent com força usando taskkill /pid 7012 /f , todos os aplicativos que tentei iniciar apareceram de repente.

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

O que aconteceu aqui? Eu gostaria de entender a situação do ponto de vista de Internos do Windows. 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 de openAgent , então esta é toda a informação que eu 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 da MicroFocus, uma ferramenta de automação de testes.

    
por Thomas Weller 28.08.2015 / 11:15

1 resposta

0

Eu pude reproduzir o problema mais uma vez e acontece que openAgent instala um hook chamado OsHookDll_x86 da mesma empresa.

Esse gancho se aplica 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 via USER32!SendMessageW() , mas openAgent foi suspenso pelo Relatório de Erros do Windows ( WerFault ) e, portanto, não pode processar essas 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, pois 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 .

    
por 28.08.2015 / 14:02