1

Я пытался запускать приложения как обычно из меню Пуск 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 ответ1

0

Я мог бы воспроизвести проблему еще раз, и оказалось, что openAgent устанавливает хук с именем OsHookDll_x86 от той же компании.

Этот хук применяется к DispatchHookW():

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

который влияет на цикл сообщений Windows. Цикл сообщений Windows необходим для запуска любого приложения с графическим интерфейсом.

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

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

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

!analyze -v не работает из-за отсутствия символов для ntdll.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .