Оптимизация и настройка Windows XP, Windows Vista, Windows 7, Windows 8

Устранение неполадок при возникновении Blue Screen Of Death (BSOD)

Ошибки возникновения "Синих экранов смерти" (Как расшифровать сообщение BSOD «Синий экран смерти» — «Blue Screen of Death»)и описание некоторых из них. А также небольшая утилита поможет разобраться с ошибкой.

BlueScreenView – утилита для анализа «синих экранов смерти» Бесплатная утилита под названием BlueScreenView позволит пользователям разобраться, что именно послужило причиной появления «синего экрана», и принять меры во избежание указанной проблемы в дальнейшем.

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

Если на жестком диске компьютера установлено несколько экземпляров операционной системы Windows, программу можно использовать с любым из них. Пользователям достаточно выбрать альтернативное местоположение папки minidump (в меню Advanced Options). Интерфейс приложения может быть модифицирован в соответствии с предпочтениями пользователя. В частности, BlueScreenView позволяет скрывать или отображать отдельные столбцы данных.

Утилита не требует установки на жесткий диск и активируется путем запуска exe-файла. Продукт BlueScreenView можно загрузить.

Если вы получили одну из этих ошибок, запустите отладчик ядра (kerneldebugger) и напечатайте следующие команды:

kb
!process 0 7
!vm
!errlog

Примечание: BUGCODES.H and EXLEVELS.H are both in the Windows NT DDK.

Или просто посмотрите, если здесь есть решения для вашего стопа. Когда ищите описание ошибки, смотрите не столько на номер, сколько на название, потому что в системах NT-2000-XP номера могут отличаться. Так же советую читать не только то, что написано для Вашей системы, но и для других 2-х, потому что все три системы схожи и решения близки.

Ниже приведены самые часто встречающиеся ошибки. Дано их описание и решения.

APC_INDEX_MISMATCH 0x00000001
DEVICE_QUEUE_NOT_BUSY 0x00000002
INVALID_AFFINITY_SET 0x00000003
INVALID_DATA_ACCESS_TRAP 0x00000004
INVALID_PROCESS_ATTACH_ATTEMPT 0x00000005
INVALID_PROCESS_DETACH_ATTEMPT 0x00000006
INVALID_SOFTWARE_INTERRUPT 0x00000007
IRQL_NOT_DISPATCH_LEVEL 0x00000008
IRQL_NOT_GREATER_OR_EQUAL 0x00000009

Это внутренняя ошибка ядра (kernel). Ошибка может возникнуть из-за несовпадения KeEnterCricticalRegion и KeLeaveCriticalRegion в файловой системе.

IRQL_NOT_LESS_OR_EQUAL 0x0000000A
NO_EXCEPTION_HANDLING_SUPPORT 0x0000000B
MAXIMUM_WAIT_OBJECTS_EXCEEDED 0x0000000C

Была сделана попытка затронуть виртуальную память на внутреннем процессе IRQ уровня, который слишком высок. Если kernel debugger доступен, вы можете отследить, где именно система запнулась. Дополнительная информация. Одна из самых часто возникающих ошибок Windows NT - STOP 0x0000000A. Этот STOP может быть вызван как Программным Обеспечением, так и проблемой с оборудованием. Для выявления причин вы должны разобрать этот STOP, используя дебагер. Тем не менее, некоторые выводы можно сделать, рассмотрев параметры STOP сообщения и сообщения сопутствующего этот STOP. Параметры:

  1. адрес, по которому выполнено ошибочное обращение
  2. IRQL, который использовался для обращения к памяти
  3. тип доступа к памяти: 0 = операция чтения, 1 = операция записи
  4. адрес инструкции, которая затребовала доступ к памяти по адресу

Примечание: Имейте ввиду, что эта ошибка возникает в 99% из-за "кривых" драйверов. Некоторые из них в Windows XP вы можете обнаружить используя утилиту verifier.exe: Start (Пуск) -> Run (Выполнить) -> verifier.exe

MUTEX_LEVEL_NUMBER_VIOLATION 0x0000000D
NO_USER_MODE_CONTEXT 0x0000000E
SPIN_LOCK_ALREADY_OWNED 0x0000000F
SPIN_LOCK_NOT_OWNED 0x00000010
THREAD_NOT_MUTEX_OWNER 0x00000011
TRAP_CAUSE_UNKNOWN 0x00000012
EMPTY_THREAD_REAPER_LIST 0x00000013
CREATE_DELETE_LOCK_NOT_LOCKED 0x00000014
LAST_CHANCE_CALLED_FROM_KMODE 0x00000015
CID_HANDLE_CREATION 0x00000016
CID_HANDLE_DELETION 0x00000017
REFERENCE_BY_POINTER 0x00000018
BAD_POOL_HEADER 0x00000019
MEMORY_MANAGEMENT 0x0000001A
PFN_SHARE_COUNT 0x0000001B
PFN_REFERENCE_COUNT 0x0000001C
NO_SPIN_LOCK_AVAILABLE 0x0000001D
KMODE_EXCEPTION_NOT_HANDLED 0x0000001E

Попытайтесь установить взаимоисключения используя NTOS\EX\EXLEVELS.H файл заголовков. Вы должны найти точки взаимодействия и определить, какие из них пытаются получить доступ к этому уровню в неверной последовательности. Параметры:

  1. настоящая нить уровня взаимодействия
  2. уровень взаимодействия пытающийся получить доступ
KMODE_EXCEPTION_NOT_HANDLED 0x0000001E
SHARED_RESOURCE_CONV_ERROR 0x0000001F

Это очень часто встречающаяся ошибка - Дополнительная информация. Обычно исключённый адрес указывает на драйвер или функцию, которая вызвала стоп-экран. Всегда обращайте внимание не только на указанный драйвер, но и на сам адрес или имидж, содержащий эту ошибку. Обычно это код исключения 0x80000003. Эта ошибка означает, что точка прерывания или суждение было достигнуто при обращении к памяти, но система загрузилась с /NODEBUG ключа. Это ошибка не должна появляться слишком часто. Если ошибка появляется постоянно, убедитесь, что отладчик (debugger) подключён и система загружается с /DEBUG switch.

На неИнтеловских системах, если адрес исключения 0XBFC0304, ошибка появляется вследствие кэширования процессора. Если ошибка будет появляться снова, свяжитесь с производителями.

Как правило, требуется анализ второго параметра этого сообщения, который указывает на адрес драйвера/функции, которая была причиной проблемы. Параметры:

  1. код исключительной ситуации
  2. адрес, при обработке которого произошел сбой
  3. Parameter 0 of the exception
  4. Parameter 1 of the exception
KERNEL_APC_PENDING_DURING_EXIT 0x00000020
QUOTA_UNDERFLOW 0x00000021
FILE_SYSTEM 0x00000022
FAT_FILE_SYSTEM 0x00000023
NTFS_FILE_SYSTEM 0x00000024
NPFS_FILE_SYSTEM 0x00000025
CDFS_FILE_SYSTEM 0x00000026
RDR_FILE_SYSTEM 0x00000027
CORRUPT_ACCESS_TOKEN 0x00000028
SECURITY_SYSTEM 0x00000029

Название ошибки указывает на повреждённый/отключённый APC счётчик. Если счётчик показывает значение не равное нулю, то он и есть источник проблемы. Отрицательное значение указывает на то, что файловая система вызывала FsRtlEnterFileSystem большее количество раз чем FsRtlExitFileSystem. Положительное значение указывает наоборот FsRtlExitFileSystem было вызвано большее количество раз чем FsRtlEnterFileSystem. Если у вас такая ситуация, проверьте все файловые системы установленные на машине. Сторонние перенаправители более всего подозреваются в сбое, так как они не были так тщательно протестированы, как NTFS, FAT, HPFS и RDR.

Текущий IRQL должен быть равен 0. Если нет, то определённый порядок аннулирования драйверов может быть причиной возникновения ошибки, возвращаясь на высоком уровне IRQ. Всегда пытайтесь заметить, что вы делали или какие приложения закрывали, какие драйвера были установлены на момент возникновения синего экрана. Этот симптом указывает на серьёзную проблему в драйверах третьей стороны. Параметры:

  1. адрес APC, по которому висел (был в ожидании) на момент выхода.
  2. нить APC disable count
  3. текущий IRQ уровень
INCONSISTENT_IRP 0x0000002A

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

  1. адрес на котором IRP был найден в несоответствующем состоянии
PANIC_STACK_SWITCH 0x0000002B
PORT_DRIVER_INTERNAL 0x0000002C
SCSI_DISK_DRIVER_INTERNAL 0x0000002D

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

DATA_BUS_ERROR 0x0000002E
INSTRUCTION_BUS_ERROR 0x0000002F
SET_OF_INVALID_CONTEXT 0x00000030

Этот стоп чаще всего вызывается ошибкой в памяти системы. В большинстве случаев это неисправный RAM, Level 2 (L2) RAM cache ошибки, ошибки видео RAM и повреждённый жёсткий диск. Так же это может случиться, когда драйвер обращается к 0x8XXXXXXX адресу памяти, который не существует. Параметры:

  1. адрес виртуальной памяти, который стал причиной ошибки
  2. физический адрес причины ошибки
  3. регистрация статуса процессора (PSR)
  4. регистрация инструкции ошибки (FIR)
PHASE0_INITIALIZATION_FAILED 0x00000031

Инициализация системы не прошла на ранней стадии. Нужно более детально установить ошибку, так как этот код вам не говорит практический ни о чём.

PHASE1_INITIALIZATION_FAILED 0x00000032
UNEXPECTED_INITIALIZATION_CALL 0x00000033
CACHE_MANAGER 0x00000034

Параметры:

  1. код статуса системы, который описывает почему система решила, что инициализация не прошла
  2. указывает место внутри INIT.C, где ошибка инициализации фазы 1 произошла
NO_MORE_IRP_STACK_LOCATIONS 0x00000035

Драйвер высшего уровня пытался вызвать драйвер низшего уровня через IoCallDriver() интерфейс, но в запасе не было свободного места в области стека, поэтому драйвер низшего уровня не сможет достичь нужных параметров, так как для него вообще нет никаких параметров. Это гибельная ситуация, так как драйвер высшего уровня считает, что заполнил параметры для драйвера низшего уровня (что-то он должен был сделать, чтобы вызвать драйвер низшего уровня). Тем не менее, так как для последнего драйвера нет свободного места в области стека, составитель аннулировал конец пакета. Это означает, что, скорее всего, какая-то другая память была повреждена. Параметры:

  1. адрес IRP
DEVICE_REFERENCE_COUNT_NOT_ZERO 0x00000036
FLOPPY_INTERNAL_ERROR 0x00000037
SERIAL_DRIVER_INTERNAL 0x00000038
SYSTEM_EXIT_OWNED_MUTEX 0x00000039
SYSTEM_UNWIND_PREVIOUS_USER 0x0000003A
SYSTEM_SERVICE_EXCEPTION 0x0000003B
INTERRUPT_UNWIND_ATTEMPTED 0x0000003C
INTERRUPT_EXCEPTION_NOT_HANDLED 0x0000003D

Драйвер устройства пытался удалить из системы одно из объектов его устройства, но счётчик обращений этого объекта не был равен 0, означающий что для этого объекта всё ещё были невыполненные задачи (счётчик указывает номер причин, почему данный объект на может быть удалён). Это ошибка вызова драйвера. Параметры:

  1. адрес объекта
MULTIPROCESSOR_CONFIGURATION_NOT_SUPPORTED 0x0000003E

Мультипроцессорная система не симметрична по отношению друг к другу. Чтобы быть симметричными, процессоры должны быть одного типа и уровня. Например, попытка использовать процессор уровня Pentium и 80486 вызовет ошибку. Кроме того, на х86 системах, возможность вычислений с плавающей точкой должны быть на обоих процессорах или ни на одном.

NO_MORE_SYSTEM_PTES 0x0000003F

Не хватает РТЕ (page file entries). Обычно причиной является драйвер, который плохо вычищает файл подкачки (swap). Если отладчик ядра (kernel debugger) доступен проследите, где система запнулась и введите следующую команду: !sysptes 3 или увеличите объем виртуальной памяти.

TARGET_MDL_TOO_SMALL 0x00000040

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

IoBuildPartialMdl( IN PMDL SourceMdl,
IN OUT PMDL TargetMdl,
IN PVOID VirtualAddress,
IN ULONG Length )
MUST_SUCCEED_POOL_EMPTY 0x00000041
ATDISK_DRIVER_INTERNAL 0x00000042
NO_SUCH_PARTITION 0x00000043

Если отладчик ядра (kernel debugger) доступен, команда Виртуальной Машины (VM) показывает различные величины. Параметры:

  1. величина запроса, который не может быть удовлетворён
  2. номер страниц, которые были использованы из nonpaged pool.
  3. номер слишком больших страниц, запрашиваемых из nonpaged pool.
  4. номер доступных страниц
MULTIPLE_IRP_COMPLETE_REQUESTS 0x00000044
INSUFFICIENT_SYSTEM_MAP_REGS 0x00000045
DEREF_UNKNOWN_LOGON_SESSION 0x00000046
REF_UNKNOWN_LOGON_SESSION 0x00000047

Драйвер запросил завершение IRP [IoCompleteRequest()], но пакет был уже завершён. Эту ошибку сложно выявить, так как самый простой случай - драйвер пытается завершить одну и ту же операцию дважды - обычно не то, что случается на самом деле. Реже - 2 различных драйвера пытаются завладеть пакетом и завершить его. Первый как правило срабатывает, а второй нет. Отследить, какой именно драйвер сделал это, трудно, так как следы первого драйвера были переписаны вторым. Тем не менее, конфликт может быть выявлен, рассматривая DeviceObject поля, в каждом местоположении стека. Параметры:

  1. адрес IRP
CANCEL_STATE_IN_COMPLETED_IRP 0x00000048

Это ошибка указывает, что I/O Request Packet (IRP), который должен быть завершён, имеет порядок отмены определённый в нём, означая, что пакет в таком положении, что может быть отменен. Тем не менее, пакет не относиться более к драйверу, так как он уже вошёл в стадию завершения.

PAGE_FAULT_WITH_INTERRUPTS_OFF 0x00000049
IRQL_GT_ZERO_AT_SYSTEM_SERVICE 0x0000004A
STREAMS_INTERNAL_ERROR 0x0000004B

Означает именно то, что пишет: ошибка страницы с выключенным прерыванием. Рассматривайте эту ошибку, так же как 0x0A

Продолжение...