Как мне собрать информацию о зависании Windows 7, которая может включать как код драйвера, так и код пользовательского режима?

#windows-7 #device-driver #crash-dumps #nt-native-api

#windows-7 #драйвер устройства #аварийные дампы #nt-native-api

Вопрос:

Я испытываю сбой в приложении, которое приводит к сбою Windows 7, но не в традиционном «синем экране смерти», который происходит, когда драйверы устройств или другие процессы в пространстве ядра приводят к сбою всей системы, а скорее, я наблюдаю блокировку всех процессов в пространстве пользователя.

Вот состояние компьютера:

(1) Движение мыши Windows по-прежнему реагирует, и слой Aero composition по-прежнему работает (некоторые эффекты наведения курсора мыши в Explorer все еще работают), но ни один процесс win32 не работает, а GDI и пользовательский сеанс, похоже, заморожены. (2) Ctrl Alt Delete не вызывает диспетчер задач. (3) Аварийных дампов нет, и нет синего экрана смерти.

Кто-нибудь знает какой-либо способ собрать дополнительную информацию о сбое? Я знаю, что существуют проблемы на уровне драйвера, и я хотел бы собрать информацию, которую могли бы использовать пользователи уровня драйвера устройства. Когда вы получаете синий экран смерти, вы можете собрать файлы дампа памяти (DMP) и отправить их разработчикам, чтобы помочь. Что я ищу, так это способ отслеживать процессы и состояние системы, возможно, подключить отладчик ядра или что-то в этом роде. Я никогда не выполнял работу с отладчиком ядра, поэтому я ищу способ начать с этого.

Я могу легко воспроизвести сбой в win7 / 32-разрядной виртуальной машине, и у меня еще не установлены средства отладки ядра. Сначала мне интересно, кажется ли, что я выбрал стоящий подход (инструменты отладки ядра?) и если да, то я действительно не знаю, как использовать эти инструменты для сбора информации, которая могла бы помочь разработчикам режима ядра обнаружить проблему.

Комментарии:

1. DWM — это процесс Win32 😉

2. Действительно? Странно, что все процессы Win32 GDI кажутся заблокированными внутри ядра на уровне пользователя, что не является критичным, и все же эффекты DWM aero при наведении курсора мыши все еще работают (на самом деле они выполнялись на несколько секунд дольше, затем что-то заблокировало и их).).

3. все это звучит довольно загадочно. Но пытаться угадать без дополнительной информации из дампа спорно.

Ответ №1:

Загрузите WinDbg и подключитесь к соответствующему компьютеру с помощью Firewire или последовательного кабеля (USB также работает при некоторых обстоятельствах IIRC). Это позволило бы вам искать взаимоблокировки в запущенной системе с удаленного компьютера.

Другая возможность — спровоцировать сбой системы (посмертный анализ). Вы должны убедиться, что перед установкой параметров аварийного дампа установлен полный дамп. Это создаст аварийный дамп того же размера, что и объем вашей оперативной памяти. Конечно, это может создать проблему при передаче дампа пользователям (например, через сеть). Также имейте в виду, что личные данные могут содержаться в дампе, в зависимости от обстоятельств.

Как вызвать аварийный дамп — это то, что я описал здесь, соответствующая часть приведена ниже. Если вы подключены через отладчик ядра, вы также можете спровоцировать создание дампа памяти.


Можно указать, что драйвер (ы) клавиатуры вызывает BSOD:

 HKLMCurrentControlSetServiceskbdhidParameters
  

или (для более старых клавиатур PS / 2)

 HKLMSYSTEMCurrentControlSetServicesi8042prtParameters
  

И там установите REG_DWORD named CrashOnCtrlScroll в 1 .

После следующей перезагрузки вы можете принудительно отобразить синий экран с помощью Ctrl ScrollLk ScrollLk . Код проверки на ошибку в этом случае будет 0xE2 ( MANUALLY_INITIATED_CRASH ).

Комментарии:

1. Вау. ОТЛИЧНЫЙ совет о MANUALY_INITIATED_CRASH.