Dimi4
09.06.2008, 19:23
ПУТЕШЕСТВИЕ к ядру Windows
Intro
Причиной написание етой статье стали "синие экраны" винды. Юзаю я висту от недавно. Когда попытался поставить VertigoServ сразу улетел в бсод. "Мдаааа" - подумал я. И забил на вертиго. Но не тут - то было. Подключая флеш драйв винда опять улетела в бсод.(при загрузке компа)
Начало путишествия к ядру Windows
Вытянул нафиг мою "пахучую" флэшку из компа, и норм загрузился, увидил родной робочый стол. Ура :)
Лезу к диспетчеру
Первым делом полез в диспетчер устройств, и начал читать сводку о проблемах с обородуванием и драйверами. Увидил также там желтые вопросительные знаки, которые уведомляют, что с оборудованием что-то не так. Приходитьсся выяснить что. Ми подключил флэшку опять, перезапустил диспетчер, но на этот раз видил, что возле "Корневой USB концентратор" появилься предупреждающий символ. "Фиговооо..." подумал я.
Прочел о "Состоянии устройства". Оказалось, что : "устройство отсутсвует, работает неправильно, либо на него не установлены все драйверы."
Драйвер - не подписан!
Я быстренько набрал в комманд строке:
sigverif
этим действием вызвал утилиту, которая выдает список всех драйверо, не подписаных цыфрофой подписсю. Думаю понятно, что прежде всего эти драйвера попадают под подозрения, так как подписаные чётко проверяються в лабораториях Windows hardware quality.
Вот и появились наши неподписаные драйвера. решил сохранить их в лог файл(мб пригодяться :D ).
(Дополнительно --- Ведение журнала ----- просмотр журнала)
Диспетчер проверки драйверов
Теперь можна проверить все драйверы без подписи, и выявить дефективные. Поможет нам утилита
verifier. Запускаем из цмд
verifier
Для тонкой проверки, я выбрал параметр - "Создать нестандартные даные". Всего есть 8 методов проверки. Чтобы не упустить не одного источника злобной ошибки, чекаем все 8.
Некст степ: "Автоматичиске выбрать неподписаные драйвера" звучит заманчево. Но этот список не похож на тот, который мы достали из утилиты sigverif. Так что выбираем: "Выберете имя драйверов". Выбираем, сравниваем с логом, который сохранили(вот и пригодился).
Перезапустили ПК.
ПУТЕШЕСТВИЕ к ядру
Опять подключил флэху, и снова БСОД! :( .
Сообщение:
STOP: ) 0x000000A_IRQ_OR_LESS_EQUAL
Похоже, что дело действительно в драйвере, но в каком?
Грузимся в безопасном
завершаем работу верифаера:
verifier /reset
теперь нам нужно проконтролировать работу Ядра, + записать в файл инфо об состоянии.
Открываем свойства "моего компютера". далее "дополнительно --- параметры --- загрузка и восстановление" Отключаем режим "выполнить автоматическую перезагрузку", выбрать из списка "дамп памяти ядра".
Чтобы поймать нашие "плохие дрова" нужно спровоцировать винду на ищо один бсод. Опять запускаем verifier. но в качестве проверки пределяем "особый пул". (В этом случае драйверам выделяеться определенная область памяти. Если драйвер выходит за его пределы, появляеться бсод, и винда регистрирует этот момент.)
Предотвращаем запись поверх дампа.
Чтобы это сделать, необходимо открыть снова "загрузка и восстоновление" и выбрать "Малый дамп памяти (64кб)". Перезапускаем винду.
Определяем дефектные драйверы
Чтобы прочитать дамп памяти необходима утилита - Debugging tools for windows.(microsoft.com/whdc/devtools/debugging.In-stallx86.mspx).
Скачиваем (15мб около) и устанавливаем. Запускаем утилиту WinDbg
необходимо скачать символы, которые потребуються чтения дампа ядра. Качать только нужное будем так: (cmd)
SRV*C:\Symbols\*http://msdl.microsoft.com/download/symbols
Нужно открыть дамп. File| Open Crash Dump
прога спрашивает: save info. for workspace тискаем "ДА". После этого открылось окно "Command" с первой инфой.
Находим строку :
Probably caused by. Если там есть файл с расширением SYS - драйвер заблочен.
Хм. ВинДбг не розказал нам имя драйвера.
Пробуем узнать с помощю команды:
!analyze -v
Так, опять видим уже знакомые ошибки:
IRQ_OR_LESS_EQUAL
Листаем вниз до строчки :
STACK_TEXT
ми обнаружыл адреса и названий функий ядра,которые вызывались перед збоем.
Если названия функций в верхних начинаються не с !nt речь идет не о нормальных функ. ядра. А оно именно так ;) Идем дальше.
вводим команду:
!thread
постраемся вывести список данных, которые булы перепутаны при сбое.
Наконец-то.
Утилита выдала етот список.
Быстренько копируем шеснадцатеричное число в комманд.строку, и перед нима добавляем !irp
!irp f8978ffc
Ура, выяснилось что при сбое был сохранен пакет запроса ввода\вывода. Два драйвера попытались вызвать этот пакет одновременно, что привело к сбою.
Возвращаемся
Опять проверил драйверы устройств, только что обнаруженные с помощю WinDbg, програмой DriveMax. Инсталировав, и запустив эту утилиту, я выяснил, какая версия деф. драйверов используються. оказалось, что драйвер usb накопителя устарел.
Пошол прямо на хоумпагу разработчика.
Драйвер 2 это вообще особый случай. driveMax его не нашел. гугля разказала что драйвер не относиться к апаратным, а к защите от копирование под названием Starforce. (Stalker наверно помешал моей винде. :D ) обновил драйвер, и всё норм!
спс чипу, пережыл тоже что и он.
Intro
Причиной написание етой статье стали "синие экраны" винды. Юзаю я висту от недавно. Когда попытался поставить VertigoServ сразу улетел в бсод. "Мдаааа" - подумал я. И забил на вертиго. Но не тут - то было. Подключая флеш драйв винда опять улетела в бсод.(при загрузке компа)
Начало путишествия к ядру Windows
Вытянул нафиг мою "пахучую" флэшку из компа, и норм загрузился, увидил родной робочый стол. Ура :)
Лезу к диспетчеру
Первым делом полез в диспетчер устройств, и начал читать сводку о проблемах с обородуванием и драйверами. Увидил также там желтые вопросительные знаки, которые уведомляют, что с оборудованием что-то не так. Приходитьсся выяснить что. Ми подключил флэшку опять, перезапустил диспетчер, но на этот раз видил, что возле "Корневой USB концентратор" появилься предупреждающий символ. "Фиговооо..." подумал я.
Прочел о "Состоянии устройства". Оказалось, что : "устройство отсутсвует, работает неправильно, либо на него не установлены все драйверы."
Драйвер - не подписан!
Я быстренько набрал в комманд строке:
sigverif
этим действием вызвал утилиту, которая выдает список всех драйверо, не подписаных цыфрофой подписсю. Думаю понятно, что прежде всего эти драйвера попадают под подозрения, так как подписаные чётко проверяються в лабораториях Windows hardware quality.
Вот и появились наши неподписаные драйвера. решил сохранить их в лог файл(мб пригодяться :D ).
(Дополнительно --- Ведение журнала ----- просмотр журнала)
Диспетчер проверки драйверов
Теперь можна проверить все драйверы без подписи, и выявить дефективные. Поможет нам утилита
verifier. Запускаем из цмд
verifier
Для тонкой проверки, я выбрал параметр - "Создать нестандартные даные". Всего есть 8 методов проверки. Чтобы не упустить не одного источника злобной ошибки, чекаем все 8.
Некст степ: "Автоматичиске выбрать неподписаные драйвера" звучит заманчево. Но этот список не похож на тот, который мы достали из утилиты sigverif. Так что выбираем: "Выберете имя драйверов". Выбираем, сравниваем с логом, который сохранили(вот и пригодился).
Перезапустили ПК.
ПУТЕШЕСТВИЕ к ядру
Опять подключил флэху, и снова БСОД! :( .
Сообщение:
STOP: ) 0x000000A_IRQ_OR_LESS_EQUAL
Похоже, что дело действительно в драйвере, но в каком?
Грузимся в безопасном
завершаем работу верифаера:
verifier /reset
теперь нам нужно проконтролировать работу Ядра, + записать в файл инфо об состоянии.
Открываем свойства "моего компютера". далее "дополнительно --- параметры --- загрузка и восстановление" Отключаем режим "выполнить автоматическую перезагрузку", выбрать из списка "дамп памяти ядра".
Чтобы поймать нашие "плохие дрова" нужно спровоцировать винду на ищо один бсод. Опять запускаем verifier. но в качестве проверки пределяем "особый пул". (В этом случае драйверам выделяеться определенная область памяти. Если драйвер выходит за его пределы, появляеться бсод, и винда регистрирует этот момент.)
Предотвращаем запись поверх дампа.
Чтобы это сделать, необходимо открыть снова "загрузка и восстоновление" и выбрать "Малый дамп памяти (64кб)". Перезапускаем винду.
Определяем дефектные драйверы
Чтобы прочитать дамп памяти необходима утилита - Debugging tools for windows.(microsoft.com/whdc/devtools/debugging.In-stallx86.mspx).
Скачиваем (15мб около) и устанавливаем. Запускаем утилиту WinDbg
необходимо скачать символы, которые потребуються чтения дампа ядра. Качать только нужное будем так: (cmd)
SRV*C:\Symbols\*http://msdl.microsoft.com/download/symbols
Нужно открыть дамп. File| Open Crash Dump
прога спрашивает: save info. for workspace тискаем "ДА". После этого открылось окно "Command" с первой инфой.
Находим строку :
Probably caused by. Если там есть файл с расширением SYS - драйвер заблочен.
Хм. ВинДбг не розказал нам имя драйвера.
Пробуем узнать с помощю команды:
!analyze -v
Так, опять видим уже знакомые ошибки:
IRQ_OR_LESS_EQUAL
Листаем вниз до строчки :
STACK_TEXT
ми обнаружыл адреса и названий функий ядра,которые вызывались перед збоем.
Если названия функций в верхних начинаються не с !nt речь идет не о нормальных функ. ядра. А оно именно так ;) Идем дальше.
вводим команду:
!thread
постраемся вывести список данных, которые булы перепутаны при сбое.
Наконец-то.
Утилита выдала етот список.
Быстренько копируем шеснадцатеричное число в комманд.строку, и перед нима добавляем !irp
!irp f8978ffc
Ура, выяснилось что при сбое был сохранен пакет запроса ввода\вывода. Два драйвера попытались вызвать этот пакет одновременно, что привело к сбою.
Возвращаемся
Опять проверил драйверы устройств, только что обнаруженные с помощю WinDbg, програмой DriveMax. Инсталировав, и запустив эту утилиту, я выяснил, какая версия деф. драйверов используються. оказалось, что драйвер usb накопителя устарел.
Пошол прямо на хоумпагу разработчика.
Драйвер 2 это вообще особый случай. driveMax его не нашел. гугля разказала что драйвер не относиться к апаратным, а к защите от копирование под названием Starforce. (Stalker наверно помешал моей винде. :D ) обновил драйвер, и всё норм!
спс чипу, пережыл тоже что и он.