Приложения запускаются, но не показывают интерфейс

897
Thomas Weller

Я пытался запускать приложения как обычно из меню Пуск Windows. Через ~ 30 минут я получил следующие эффекты:

  • приложения с графическим интерфейсом больше не отображаются.
  • Я могу продолжать использовать приложения GUI, которые уже открыты
  • Я могу открыть не-GUI / консольные приложения (как cmd).
  • В командной строке я вижу, что приложения с графическим интерфейсом запускаются с использованием tasklist

Вот пример:

>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 

Как вы можете себе представить, я пытался запустить диспетчер задач, чтобы диагностировать проблему 3 раза. Но ни одно из окон диспетчера задач не стало видимым.

Исходя из предположения, что tasklistпроцессы отображаются в том порядке, в котором они были запущены, я примерно определил проблему:

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

openAgentэто приложение, которое я закрыл (или, по крайней мере, пытался закрыть, так как оно все еще работает). Что-то должно было произойти сбой из-за присутствия WerFault, но я не мог видеть диалоговое окно отчетов об ошибках Windows.

При openAgentпринудительном завершении приложения taskkill /pid 7012 /fвсе приложения, которые я пытался запустить, внезапно появились.

Глядя на диалоговое окно Windows Error Reporting, оно показывает исключение 80000003, которое является (отладочной) точкой останова.

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

К сожалению, у меня нет ни дампов ядра, ни аварийного дампа пользовательского режима openAgent, так что это вся информация, которую я могу вам дать.

Моя система - Windows 7 SP1 x64 Enterprise, нет ожидающих обновлений Windows, процессор Intel Core i7. openAgentэто исполняемый файл SilkTest от MicroFocus, инструмента автоматизации тестирования.

1
Вы не предоставили достаточно информации, чтобы объяснить, что происходит. Ramhound 8 лет назад 1

1 ответ на вопрос

0
Thomas Weller

I could reproduce the issue once again and it turns out that openAgent installs a hook called OsHookDll_x86 from the same company.

This hook applies to DispatchHookW():

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

which affects the Windows Message loop. The windows message loop is needed by any GUI application to run.

The hook sends Windows Messages to openAgent via USER32!SendMessageW() but openAgent was suspended by Windows Error Reporting (WerFault) and therefore cannot process such messages, resulting in a timeout:

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

I could not fully analyze the rest since during my debug session, everything else started to freeze as well. I assume that the hook tries to resend the message instead of returning, thus resulting in an endless loop.

!analyze -v did not work due to Missing symbols for ntdll.