Whatis.Ru

Информация о компьютерах доступным языком
Назад на сайт

Вы не зашли.


#1 17-04-2011 23:10:00

Rumit
Мастер
Откуда: Из матки
Зарегистрирован: 18-01-2008
Сообщений: 992
Вебсайт

.:: Разборки с железом. BSOD

Голубые Экраны Смерти (BSOD) носят стихийный характер, появляясь в непредсказуемое время, не связанное ни с какими конкретными действиями пользователя. Приложения начинают выдавать критические ошибки в самых разных местах, причем коды ошибок во всех случаях обычно разные. Попробуем в этом разобраться...

Голубой Экран замечателен тем, что явным образом сигнализирует о наличие серьезной проблемы и дает наводку, куда копать. Зачастую, имя глючного драйвера высвечивается на экране, однако там его может и не быть, или (что еще хуже) может стоять имя совершенно другого драйвера. Получается запутанная цепочка.

К примеру, кривой драйвер от видеокарты имеет тенденцию разрушать структуры графической подсистемы Windows, в результате чего в BSOD'е отображается имя системного драйвера win32k.sys (см.ниже), в котором реализована значительная часть функций USER и GDI, которые тут вовсе не причём. Так что, интерпретация показаний BSOD - это магия, наука, и искусство - вместе взятые.

BSOD, с именем системного драйвера Win32k.sys, пострадавшего из-за другого драйвера:

*** STOP: 0x0000001E (0xC0000005,0xA0016B0E,0x00000001,0x5050585C)
KMODE_EXCEPTION_NOT_HANDLED

*** Address A0016B0E base at A0000000, DateStamp 30430FF7 - Win32k.sys
Beginning dump of phusical memory
Damping phusical memory to disk: 69

Помимо дефектов драйверов, Голубые Экраны Смерти могут вызываться отказами железа (например разогнанным процем), неисправной оперативкой, не до конца воткнутой в слот PCI-картой, плохим БП, вздутых электролитов на материнке и т.п. Поэтому, прежде чем "колоть дрова", необходимо убедиться, что железо полностью исправно.

Как разобраться в инструкциях BSOD мы обсудим позже, а сейчас - познакомимся с драйвером!


Болтовня ничего не стоит. Покажите мне код.. (Linus Torvalds)

http://ne-kurim.ru/ncounter/134735-4.png

Неактивен

#2 17-04-2011 23:12:38

Rumit
Мастер
Откуда: Из матки
Зарегистрирован: 18-01-2008
Сообщений: 992
Вебсайт

Re: .:: Разборки с железом. BSOD

Что такое драйвер?

Драйвер устройства позволяет создать интерфейс между системой и нестандартным оборудованием. Это программа в бинарном формате, загружаемая в память во время загрузки ОС. Обычно драйвера пишут на ассемблере (можно и на других языках), которые после компиляции переводятся в бинарник (например, программой EXE2BIN из комплекта винды).

Вот стандартное содержимое программы драйвера:

1) Заголовок Устройства (DEVICE_ID)
2) Атрибут устройства
3) Заголовок запроса
4) Две основные подпрограммы STRATEGY и INTERRUPT
5) Обработчик ошибок
6) Флаги состояния устройства
7) Блок параметров BIOS


Заголовок устройства

Первую часть файла занимает 18-байтовая структура - Заголовок Устройства. Первые 4 байта заголовка, ОС модифицирует при установке драйвера. Поле Next_Device корректируется, отражая включение данного устройства в цепочку уже имеющихся устройств:


    Смещ.  Длина Содержимое
    ===== ====== ====================================================================================================
            ┌───────┬───────┐
     +0      4  │ смещ. |сегмент│ Next_Device: адрес след. устройства в цепи (если 0ffffH, то это последний драйвер)
            ├───┴───┼───┴───┘
     +4      2  │DevAttr│         битовые поля, составляющие Атрибут устройства
            ├───┴───┤
     +6      2  │Stratgy│         смещение подпрограммы STRATEGY
            ├───┴───┤
     +8      2  │Intrupt│         смещение подпрограммы INTERRUPT
            ├───┴───┴───────────────────────┐
    +0aH     8  │'L' 'P' 'T' '1' 20H 20H 20H 20H│ дополненное пробелами имя устр-ва
            └───┴───┴───┴───┴───┴───┴───┴───┘




Атрибут устройства

Поле 'DevAttr' Заголовка устройства описывает свойства данного устройства:


     1 1 1 1 1 1
    ╓5┬4┬3┬2┬1┬0┬9┬8╥7┬6┬5┬4┬3┬2┬1┬0╖
    ║ │ │ │0│ │0 0 0 0│ │0 0│ │ │ │ ║
    ╙╥┴╥┴╥┴─┴╥┴─┴─┴─╨─┴╥┴─┴─┴╥┴╥┴╥┴╥╜  бит                                 
     ║ ║ ║   ║         ║     ║ ║ ║ ╚═►  0: 1=входное устройство
     ║ ║ ║   ║         ║     ║ ║ ╚═══►  1: 1=выходное устройство
     ║ ║ ║   ║         ║     ║ ╚═════►  2: 1=устройство NUL     
     ║ ║ ║   ║         ║     ╚═══════►  3: 1=часы                           
     ║ ║ ║   ║         ╚═════════════►  6: 1=логическое устр-во
     ║ ║ ║   ╚═══════════════════════► 11: 1=поддерживает open/close   
     ║ ║ ╚═══════════════════════════► 13: 1=не-IBM блочное устройство     
     ║ ╚═════════════════════════════► 14: 1=поддерживает IOCTL             
     ╚═══════════════════════════════► 15: 1=символьное устройство; 0=блочное




STRATEGY и INTERRUPT

Два поля в заголовке устройства - это 16-битовые адреса двух подпрограмм внутри драйвера. По любому запросу устройства, ОС сначала вызывает подпрограмму 'Strategy', передавая
ей адрес Заголовка Запроса. Задачей подпрограммы Strategy является сохранение этого значения.

Затем вызывается подпрограмма 'Interrupt'. Её задача состоит в обработке команды, указанной в Заголовке запроса. Как правило, драйвер содержит нечто вроде N-арного узла ветвлений для обработки всех возможных запросов, таких как: ввод/вывод, чтение/запись, сброс устройства и т.п. Обработав запрос, драйвер должен установить Флаг Состояния Устройства, индицирующее статус завершения или ошибки.


Заголовок запроса

Каждый запрос к драйверу устройства сопровождается указателем на пакет в 'Interrupt'. Каждый пакет начинается таким 13-байтовым заголовком:


    Смещ.  Длина  Содержимое
    ===== ====== ====================================================
                ┌───┐
     +0      1  │len│         длина пакета
                ├───┤
     +1      1  │unt│         номер единицы
                ├───┤
     +2      1  │cmd│         код команды (действия)
                ├───┴───┐
     +3      2  │Status │     слово состояния устройства
                ├───┴───┴───────────────────────┐
     +5H     8  │ (резерв)                      │
                ├───┴ ─ ┴ ─ ┴───┴───┼───┴───┴───┘
    +0dH     ?  │ данные            │  данные согласно коду команды
                └───┴ ─ ┴ ─ ┴───┴───┘ 




Обработчик ошибок

Когда драйвер получает некорректный запрос, он устанавливает бит ошибки в слове состояния устройства (бит 15) и помещает код ошибки в Заголовок запроса.


Слово состояния

Драйвер устройства всегда возвращает Cлово состояния устройства. Это слово расположено по смещению 3 в Заголовке запроса. При нормальном завершении запроса драйвер должен установить бит "готово" и выйти через RET.

Бит "занято" устанавливается, когда драйвер не может выполнить запрос из-за того, что физическое устройство занято предыдущим запросом.
Бит "ошибка" устанавливается, когда драйвер получает невыполнимый запрос.


     1 1 1 1 1 1
    ╓5┬4┬3┬2┬1┬0┬9┬8╥7┬6┬5┬4┬3┬2┬1┬0╖
    ║e│резерв   │b│d║  код ошибки   ║ 
    ╙╥┴─┴─┴─┴─┴─┴╥┴╥╨─┴─┴─┴─┴─┴─┴─┴─╜ 
     ║           ║ ║ ╚═════════════╩═►  0-7: код ошибки
     ║           ║ ╚═════════════════►    8: 1=готово
     ║           ╚═══════════════════►    9: 1=занято
     ╚═══════════════════════════════►   15: 1=ошибка




Блок параметров BIOS (BPB)

Это - подмножество данных для непосредственного выполнения запрошенных действий. Запрос к драйверу 'Построить BPB' требует, чтобы драйвер заполнил блок по определённой схеме. Эта схема определяет все требования операции.

===================================================


Дефекты проектирования драйверов разработчиками могут носить самый разный характер - от выпадений в голубой экран, до замедления работы компа и глючного поведения (совсем не связанных с драйвером) прикладных приложений. В пресловутых экранах смерти и нестабильной работе винды в большинстве случаев виноваты драйвера сторонних производителей. Давайте попробуем их обнаружить и удалить из системы, заменив на более свежие и "прямые".


Болтовня ничего не стоит. Покажите мне код.. (Linus Torvalds)

http://ne-kurim.ru/ncounter/134735-4.png

Неактивен

#3 17-04-2011 23:15:24

Rumit
Мастер
Откуда: Из матки
Зарегистрирован: 18-01-2008
Сообщений: 992
Вебсайт

Re: .:: Разборки с железом. BSOD

Драва без сертификата - в топку!

Весь комплект инструментария необходимый для разработки драйверов, Microsoft распространяет бесплатно (DDK - Driver Development Kit). Этот комплект (!)позволяет любому заточить "как бы" работающий, "как бы" драйвер! Как только появился DDK, сразу-же огромная армия "пионеров" дружненько взялись за разработку своих драйверов, от которых ничего путного ждать не приходится. Драйвер - это не "Hello World", и правильно написать его не каждому по-зубам!!!

Во избежание этого беспредела, Microsoft ввела процедуру сертификации драйверов на соответствие предъявляемых им требований, после которой драйверу выдавалась цифровая подпись. И хотя сертификация - всего лишь формальная процедура, не гарантирующая отсутствие фатальных ошибок и дефектов разработки, часть откровенно "пионерских" драйверов она все-таки отсеивает.

В идеале, в системе следует держать только драйвера заверенные цифровой подписью, т.к. она указывает на определенный уровень культуры разработки. Драйвера без цифровой подписи - это хуже, чем кот с кошкой в одном мешке! Встречались экземпляры, в которых обнаруживали зловредные программы, которые вызывали нестабильность системы.

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

Запускаем её (Win+R --> sigverif) и жмём "Дополнительно". Во вкладке "Поиск" настраиваем критерии отбора, перемещая радио-кнопку в положение "Искать другие файлы..", после чего в "Параметрах поиска" открываем бокс и выбираем "*.sys". Ниже указываем папку для поиска "C:\WINDOWS", обязательно отметив галочку "включая подпапки":

http://radikal.ru/F/s41.radikal.ru/i091/1104/84/4114c2140bad.png

После нажатия на "ОК" --> "Пуск", на экране появится градусник, отображающий ход прогресса и винт начнет шуршать башками. По завершении будет составлен список драйверов без цифровой подписи.

Некоторые горячие головы предлагают сразу удалить все неподписанные драйвера, но последствия такой операции могут оказаться весьма плачевными и лучше, кликнув правой клавишей мыши на иконку драйвера, найти в "свойствах" имя производителя, по которому можно установить, что за приложение/железка установила этот драйвер и деинсталлировать ее цивилизованным путем, правда, здесь есть одно "но". Наличие/отсутствие цифровой подписи само по себе ещё ни о чём не говорит, и даже если мы используем только подписанные драйвера, никаких гарантий стабильности это нам не дает. Вот тут-то мы и переходим ко второй части, а именно - тестированию драйверов в боевых условиях!


Болтовня ничего не стоит. Покажите мне код.. (Linus Torvalds)

http://ne-kurim.ru/ncounter/134735-4.png

Неактивен

#4 18-04-2011 06:39:28

гвоздик
фУлиган
Откуда: Донецк, ДНР
Зарегистрирован: 19-07-2006
Сообщений: 2263
Вебсайт

Re: .:: Разборки с железом. BSOD

На семёрке вкладка "поиск" отсутствует.
http://imglink.ru/thumbnails/18-04-11/8a74073eac36bc7af0efdacb05f16326.jpg


http://nick-name.ru/forum5t3/%E3%E2%EE%E7%E4%E8%EA.gif

Неактивен

#5 18-04-2011 15:43:27

Anatol
 
Откуда: Ненька Україна
Зарегистрирован: 24-09-2007
Сообщений: 1089

Re: .:: Разборки с железом. BSOD

Rumit-м уже весьма немало написано статей которые не стыдно и на сам сайт выложить. нечего им в недрах форума делать ). Администрация, как считаете?


Notebook: Sony Vaio VGN-SZ691N - ArchLinux x64
Home: AMD Athlon 64 X2 Dual 2.61 ГГц, RAM 4 Gb, GeForce 450 GTS, ArchLinux x64
Home for games: Windows 7 Ultimate x64

Неактивен

#6 18-04-2011 15:44:55

Hydrogen
«¤Version 1.1-stable¤»
Откуда: /dev/random
Зарегистрирован: 19-07-2006
Сообщений: 4372
Вебсайт

Re: .:: Разборки с железом. BSOD

категорически за smile3


http://nick-name.ru/forum/%CDydrogen.gif

Неактивен

#7 18-04-2011 23:50:30

Rumit
Мастер
Откуда: Из матки
Зарегистрирован: 18-01-2008
Сообщений: 992
Вебсайт

Re: .:: Разборки с железом. BSOD

гвоздик, К сожалению семёрку не могу проверить. Сижу на ХР...

Anatol, Hudrogen, Приятно слышать! Спасибо за положительный отзыв, drinks  но сам я на это не претендую...


Болтовня ничего не стоит. Покажите мне код.. (Linus Torvalds)

http://ne-kurim.ru/ncounter/134735-4.png

Неактивен

#8 19-04-2011 07:35:07

гвоздик
фУлиган
Откуда: Донецк, ДНР
Зарегистрирован: 19-07-2006
Сообщений: 2263
Вебсайт

Re: .:: Разборки с железом. BSOD

Да я ж не в упрек, просто, как уточнение для естествоиспытателей!podmig


http://nick-name.ru/forum5t3/%E3%E2%EE%E7%E4%E8%EA.gif

Неактивен

#9 21-04-2011 15:24:52

Rumit
Мастер
Откуда: Из матки
Зарегистрирован: 18-01-2008
Сообщений: 992
Вебсайт

Re: .:: Разборки с железом. BSOD

Вернёмся в тему...

Значит, мы видим экран смерти и понимаем, что он нам хочет что-то сказать! ...но что именно? Давайте разбираться...



Расшифровка кода BSOD

Первое, что нам нужно будет сделать - это перехватить последний вздох системы, в виде дампа памяти на момент краха! Для этого жмём:

Win+Break --> Дополнительно --> Загрузка и восстановление --> Параметры

..нужно снять там галочку "Выполнить авто-перезагрузку". С этого момента ваша зубная боль (перезагрузки) превращается в головную. При очередном отказе системы, появляется BSOD с кодом ошибки, и по-ходу в папке WINDOWS возникнет папка Minidump. В ней и находятся необходимые нам файлы!!! Они нам пригодятся в будущем, а пока - разберёмся с инфой BSOD'а.

Как показывает практика, львиная доля экранов смерти приходится на обращение к несуществующей области памяти, поэтому в качестве примера возьмём эту ошибку STOP 0х0Аh (IRQL_NOT_LESS_OR_EQUAL).

STOP 0x0000000A сообщает, что драйвер пытался обратиться по недопустимому адресу памяти! В этом случае система катапультирует пользователя даже не попращавшись. Ну и зачем было из-за этого ронять систему? Как сказать ей, что "в Багдаде всё спокойно!"??? Дай знать об этом и всё..., ан нет - нужно обязательно клеить ласты! Билли в очередной раз доказывает, что создал непрактичную систему! Ну да хай с ним...

STOP 0х0А может быть вызван как программным обеспечением, так и проблемой с оборудованием. Для выявления причин мы должны разобрать этот STOP на мелкие кусочки! Для этих целей обычно используют дебагер, тем не менее, некоторые выводы можно сделать, рассмотрев параметры STOP-сообщения. Дебагер нас не устраивает тем, что его отчёт нужно будет отправлять в Майкрософт и тупо ждать от них ЦУ.

Помимо всех нравоучений (типа проверь железяку, обратись к админу), типичный шаблон экрана смерти выглядит примерно так:


    STOP 0x0000000A (0xWWWWWWWW, 0xXXXXXXXX, 0xYYYYYYYY, 0xZZZZZZZZ)
    IRQL_NOT_LESS_OR_EQUAL



Найти в сети имя ошибки - не проблема, да и способов решения тоже куча, но это всё только предположения! Имя ошибки ещё ни о чём не говорит, т.к. причин возникновения она не раскрывает. Вся инфа зарыта в скобках, о расшифровки которой большинство справочников дружно умалчивают. Попробую внести ясность в дело...

Значит, область значений после STOP является номером ошибки. Дальше (в скобках) идут параметры:

    W - адрес в памяти, по которому выполнено ошибочное обращение
    X - IRQL, который использовался для обращения к памяти
    Y - тип доступа к памяти: 0 = операция чтения, 1 = операция записи
    Z - адрес инструкции, которая затребовала доступ к памяти

Параметри "Z" несёт в себе наиболее значимую и в тоже время, наиболее труднодобываемую порцию инфы! Как видно из таблицы, это "Адрес инструкции". Что это такое и как узнать эту инструкцию?

Для этого нужно диззасемблировать дамп памяти, в листинге которого и указывается глючная инструкция! Обычно, это "переходы на метки" в коде программы, типа JNx, FAR и т.д. Для пояснения, дизассемблирую виндовый блокнот:


    C:\> debug c:\temp\notepad.exe

    -u
    13F2:0000 0E            PUSH    CS
    13F2:0001 1F            POP     DS
    13F2:0002 BA0E00        MOV     DX,000E
    13F2:0005 B409          MOV     AH,09
    13F2:0007 CD21          INT     21
    13F2:0009 B8014C        MOV     AX,4C01
    13F2:000C CD21          INT     21
    13F2:000E 54            PUSH    SP
    13F2:000F 68            DB      68
    13F2:0010 69            DB      69
    13F2:0011 7320          JNB     0033
    13F2:0013 7072          JO      0087
    13F2:0015 6F            DB      6F
    13F2:0016 67            DB      67
    13F2:0017 7261          JB      007A
    13F2:0019 6D            DB      6D
    13F2:001A 206361        AND     [BP+DI+61],AH
    13F2:001D 6E            DB      6E
    13F2:001E 6E            DB      6E
    13F2:001F 6F            DB      6F
    13F2:0020 7420          JZ      0042
    13F2:0022 62            DB      62
    13F2:0023 65            DB      65
    13F2:0024 207275        AND     [BP+SI+75],DH
    -


Если-бы блокнот уронил систему, то скорей всего в поле BSOD'a (0хZZZZ) стояло-бы значение или 0x00000011, или 0x00000020 (или другой адрес с переходом в коде). Смотрим, на какую строку программного кода указывает переход (на адреса 0033 и 0042 соответственно). Осталось перейти по указанному адресу и исправить баг. Это и есть "Адрес инструкции"!

Позорно было-бы не сказать пару слов об отладчиках реального режима, типа Soft-ICE. Он позволяет перехватить ошибки системы, не допуская её краха. Алгоритм такой: ждать ошибку и при возникновении не дать процессу перейти по указанному адресу! Вместо авто-перехода, отладчик предлагает перейти по указанному адресу вручную, что позволяет двумя строчками кода возвратить управление родительскому процессу, тем самым предотвратив BSOD. Есть над чем поработать большому Билли...

Но вернёмся к параметру (Z). Если он указывает на область адресов системных устройств, значит в момент ошибки был запущен драйвер какого-то сус-устройства. Этот драйвер обычно указан на третьей линии STOP экрана. Попробуем расшифровать такую запись:


    Stop 0x0000000A (0x0227001d, 0x00000002, 0x00000000, 0x804eba3a)
    IRQL_NOT_LESS_OR_EQUAL


...кидаем взор на параметры в скобках (справа-налево) и делаем вывод, что "Ошибка вызвана НЕ системным устройством, при операции чтения ячейки памяти 0227001Dh". Но какое именно устройство-то сглючило? Смотрим, IRQL у нас равен 02h. Но здесь - стоп, ...нужно прояснить некоторые нюансы и дать определение IRQ и IRQL.


Болтовня ничего не стоит. Покажите мне код.. (Linus Torvalds)

http://ne-kurim.ru/ncounter/134735-4.png

Неактивен

#10 21-04-2011 15:27:24

Rumit
Мастер
Откуда: Из матки
Зарегистрирован: 18-01-2008
Сообщений: 992
Вебсайт

Re: .:: Разборки с железом. BSOD

Что такое IRQ ???


IRQ - это запрос на обслуживание. Физически, IRQ представляют собой отдельно проложенные линии (проводники), которые предназначены только для передачи запросов прерывания. После получения запроса, камень обращается к таблице векторов прерываний, которая находится в памяти и содежит список адресов программ-обработчиков. От номера прерывания зависит, какая программа будет запущена. В основном этими программами являются драйвера относящиеся к устройству, которое послало запрос.

Сама таблица находится в ОЗУ и состоит из 256 элементов по 4 байта каждый (адреса от 0х0000 до 0х0400). Чтобы не было путаницы, у IRQ есть иерархия или приоритеты. Чем меньше номер прерывания, тем выше приоритет и наоборот. Системных IRQ всего 16. Самый высокий приоритет у IRQ 0, а самый низкий у IRQ 15.

Чтоб просмотреть свои прерывания, жмём [Win+R --> msinfo32 --> Ресурсы аппаратуры –-> Прерывания IRQ]:


   IRQ        функция

    0  -  Системный таймер
    1  -  Контроллер клавиатуры
    2  -  Программируемый контроллер прерываний
    3  -  COM-2
    4  -  COM-1
    5  -  Звуковая или сетевая карты или свободен
    6  -  Контроллер гибких дисков
    7  -  LPT
    8  -  CMOS и часы
    9  -  Звуковая или сетевая карты или свободен
    10 -  Свободен
    11 -  USB или SCSI или свободен
    12 -  PS/2 мышь
    13 -  Сопроцессор
    14 -  Контроллер IDE
    15 -  Дополнительный контроллер IDE



Будем считать, что с IRQ мы разобрались. Переходим к IRQL...



Что такое IRQL ???

IRQL — это некое свойство потока, как-бы приоритет. Оно означает, что потоки с более низким IRQL не смогут вытеснить поток с более высоким IRQL. Повышение IRQL изпользуется для того, чтобы поток с высоким приоритетом имел приимущество перед низким. Например, приоритет планировщика потоков (DPC) выше, чем приоритет пользовательских потоков. Если бы это было не так, тогда потоки могли бы вытеснить планировщик и тем самым «отключить» многозадачность.

В Windows NT применяются 32 уровня IRQL, самый привилегированный из которых - 31:

    31    - High
    30    - Power fail
    29    - IPI
    28    - Clock
    27    - Profile
    26-3  - Диапазон аппаратных прерываний (Devices IRQL/DIRQL)
     2    - DPC/DISPATCH
     1    - APC
     0    - PASSIVE (0)


...к примеру это означает, что планировщик работающий на уровне DPC/DISPATCH может быть прерван аппаратными прерываниями, межпроцессорными прерываниями (IPI) и т.д., но не может быть прерван асинхронными процедурами (APC) и обычными потоками, работающими на уровне PASSIVE.

Также IRQL помогает отслеживать и выявлять логические ошибки при проектировании ОС. Легендарная ошибка IRQL_NOT_LESS_OR_EQUAL означает следующую ситуацию... Драйвер с IRQL меньше чем DPC/DISPATCH, обратился к отсутствующей в памяти странице. Эта страница находится не в памяти, а на диске, и требуется вызов подсистемы, которая загрузила-бы её в память.

Однако эта подсистема (в соответствии с архитектурой Win) имеет IRQL меньше, чем DPC/DISPATCH. Следовательно, она не имеет права прерывать тот код, который вызвал ошибку страницы. В то же время привилегированный код не может продолжить выполнение, пока страница не будет загружена. Возникает логический тупик, который и приводит к краху ОС. Такой-вот получается клубок....

Конечно-же при помощи этих знаний у нас не получится полностью расшифровать данные BSOD, но кое что мы уже имеем...


    Stop 0x0000000A (0x0227001d, 0x00000002, 0x00000000, 0x804eba3a)
    IRQL_NOT_LESS_OR_EQUAL


...это возбудил "кто-то" с низким приоритетом и копать здесь системные устройства ни к чему! Код, зашитый в блок IRQL несёт в себе более детальную информацию, когда выглядет как в первом посте: 0xA0016B0E. Последний байт (0Eh) - это и есть привилегия IRQ, породившего BSOD (0Eh=14d). Остальные-же данные блока IRQL расшифровать не так-уж просто, т.к. они зависят от установленного железа и ОС, и не имеют систематизированной инфы. Здесь нужно будет применять сторонний софт, чем мы и займёмся в следующий раз...


Болтовня ничего не стоит. Покажите мне код.. (Linus Torvalds)

http://ne-kurim.ru/ncounter/134735-4.png

Неактивен

#11 25-05-2011 10:08:00

Rumit
Мастер
Откуда: Из матки
Зарегистрирован: 18-01-2008
Сообщений: 992
Вебсайт

Re: .:: Разборки с железом. BSOD

Чтоб продолжить тему нужен был дамп, а система упорно нехотела клеить ласты. А сегодня - пробил тот час! Играл в игруху и хоп-па - BSOD. Правда всего-навсего сглючила видяха (пора менять), но всё-же..

Всё, что понадобится из софта, для определения драйвера, вызвавшего BSOD - это дамп памяти на момент краха, и программа BlueScreenView. Она не требует установки и после запуска сама лезет в папку System32\MiniDump, чтоб показать нам всё что нарыла:

http://radikal.ru/F/s009.radikal.ru/i308/1105/0f/508e7377aee1.jpg

..двойнок клик на строке с именем дампа и вот она вся подноготная:

http://radikal.ru/F/s39.radikal.ru/i083/1105/f3/43f38e02e476.gif

...ага, виновник всех проблем - драйвер NVIDIA. Чтоб определить, кому принадлежит файл, запускаем поиск в папке Windows по имени драйвера, и в свойствах файла смотрим принадлежность: NVIDIA Compatible Windows 2000 Display driver, Version 56.73. Проверяем, есть-ли он в списке неподписанных драйверов, и если да, то в первую очередь переустанавливаем его на "правильный". Если-же с подписью всё ОК, то остаётся дизасемблировать дамп и искать проблемы в нём. Не помешает просмотреть и лог системы - Win+R -> Eventvwr -> Система.


Для самообразования!

Коллекцию BSOD'ов всех мастей и видов, можно найти здесь.

Удачи Вам, и жизни без BSOD'ов!


Болтовня ничего не стоит. Покажите мне код.. (Linus Torvalds)

http://ne-kurim.ru/ncounter/134735-4.png

Неактивен


Board footer

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Рейтинг@Mail.ru