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