Поделиться через


0x139 проверки ошибок: KERNEL_SECURITY_CHECK_FAILURE

Проверка ошибок KERNEL_SECURITY_CHECK_FAILURE имеет значение 0x00000139. Эта ошибка проверка указывает на то, что ядро обнаружило повреждение критической структуры данных.

Важно!

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

Параметры 0x139 KERNEL_SECURITY_CHECK_FAILURE проверки ошибок

Параметр Описание
1 Тип повреждения. Дополнительные сведения приведены в таблице ниже.
2 Адрес кадра ловушки для исключения, вызвавшего ошибку проверка
3 Адрес записи исключения для исключения, вызвавшего ошибку проверка
4 Зарезервировано

В следующей таблице описаны возможные значения параметра 1.

Параметр 1 Описание
0 Переполнен буфер на основе стека (устаревшее нарушение /GS).
1 Код инструментирования VTGuard обнаружил попытку использовать недопустимую виртуальную таблицу функций. Как правило, объект C++ был поврежден, а затем была предпринята попытка вызова виртуального метода с использованием этого указателя поврежденного объекта.
2 Код инструментирования файлов cookie стека обнаружил переполнение буфера на основе стека (нарушение GS).
3 Повреждена LIST_ENTRY (например, двойное удаление). Дополнительные сведения см. в следующем разделе о причинах.
4 Зарезервировано
5 Недопустимый параметр передан в функцию, которая считает недопустимые параметры неустранимой.
6 Файл cookie безопасности стека не был правильно инициализирован загрузчиком. Это может быть вызвано сборкой драйвера для запуска только на Windows 8 и попыткой загрузить образ драйвера в более ранней версии Windows. Чтобы избежать этой проблемы, необходимо создать драйвер для запуска в более ранней версии Windows.
7 Был запрошен неустранимый выход из программы.
8 Граница массива, проверка вставленная компилятором, обнаружила недопустимую операцию индексирования массива.
9 Был выполнен вызов RtlQueryRegistryValues с указанием RTL_QUERY_REGISTRY_DIRECT без RTL_QUERY_REGISTRY_TYPECHECK, а целевое значение не находилось в доверенном кусте системы.
10 Проверка непрямого защитника вызовов обнаружила недопустимую передачу управления.
11 Защита записи проверка обнаружена недопустимая запись в память.
12 Предпринята попытка переключиться на недопустимый контекст волокон.
13 Предпринята попытка назначить недопустимый контекст регистра.
14 Недопустимое число ссылок для объекта.
18 Предпринята попытка переключиться на недопустимый контекст jmp_buf.
19 В данные, доступные только для чтения, внесены небезопасные изменения.
20 Сбой криптографического самотестировщика.
21 Обнаружена недопустимая цепочка исключений.
22 Произошла ошибка криптографической библиотеки.
23 Из DllMain был выполнен недопустимый вызов.
24 Обнаружен недопустимый базовый адрес образа.
25 При защите от задержки импорта нагрузки обнаружен неустранимый сбой.
26 Был сделан вызов небезопасного расширения.
27 Была вызвана нерекомендуемая служба.
28 Обнаружен доступ за пределы буфера.
29 Запись RTL_BALANCED_NODE RBTree повреждена.
37 Была вызвана запись переключения за пределы диапазона.
38 Попытка подключения longjmp к недопустимому целевому объекту.
39 Экспорт подавленного целевого объекта вызова не может быть сделан допустимым целевым объектом вызова.

Причина

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

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

Ниже перечислены распространенные причины повреждения записей списка.

  • Драйвер повредил объект синхронизации ядра, например KEVENT (например, двойная инициализация KEVENT, когда поток по-прежнему ждал того же KEVENT, или позволяет KEVENT на основе стека выйти из область в то время как другой поток использовал этот KEVENT). Этот тип проверка ошибок обычно встречается в nt! Ke* or nt! Код Ki*. Это может произойти, когда поток завершает ожидание объекта синхронизации или когда код пытается поместить объект синхронизации в состояние сигнала. Как правило, сигнальным объектом синхронизации является тот, который был поврежден. Иногда средство проверки драйверов со специальным пулом может помочь отследить виновника (если поврежденный объект синхронизации находится в блоке пула, который уже освобожден).
  • Драйвер повредил периодический KTIMER. Этот тип проверка ошибок обычно встречается в nt! Ke* or nt! Код Ki* и включает сигнал таймера, вставку или удаление таймера из таблицы таймера. Таймер может быть поврежден, но может потребоваться проверить таблицу таймера с помощью !timer (или вручную пройдя по ссылкам списка таймеров), чтобы определить, какой таймер был поврежден. Иногда средство проверки драйверов с помощью специального пула может помочь отследить виновника (если поврежденный KTIMER находится в блоке пула, который уже был освобожден).
  • Драйвер неправильно управил внутренний LIST_ENTRY связанный список. Типичным примером может быть вызов RemoveEntryList дважды для одной и той же записи списка без повторного включения записи списка между двумя вызовами RemoveEntryList . Возможны и другие варианты, например двойная вставка записи в тот же список.
  • Драйвер освободил структуру данных, содержащую LIST_ENTRY, не удаляя структуру данных из соответствующего списка, что приводит к обнаружению повреждений позже при проверке списка после повторного использования старого блока пула.
  • Драйвер использовал список LIST_ENTRY в параллельном режиме без надлежащей синхронизации, что привело к разрыву обновления списка.

В большинстве случаев вы можете определить поврежденную структуру данных, пройдя связанный список вперед и назад (команды dl и dlb полезны для этой цели) и сравнив результаты. Если список несогласован между перемещением вперед и назад, как правило, является расположением повреждения. Так как операция обновления связанного списка может изменять ссылки на список соседнего элемента, следует внимательно изучить соседей поврежденной записи списка, так как они могут быть основными виновниками.

Поскольку многие системные компоненты используют внутренние LIST_ENTRY списки, различные типы неправильного управления ресурсами драйвера с помощью системных API могут привести к повреждению связанного списка в управляемом системой связанном списке.

Решение

Для определения причины этих проблем обычно требуется использовать отладчик для сбора дополнительных сведений. Необходимо изучить несколько файлов дампа, чтобы узнать, имеет ли этот код остановки схожие характеристики, например код, который выполняется при появлении кода остановки.

Дополнительные сведения см. в разделах Анализ аварийного дампа с помощью отладчиков Windows (WinDbg),Использование расширения !analyze и !analyze.

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

Эти общие советы по устранению неполадок могут быть полезны.

  • Если вы недавно добавили оборудование в систему, попробуйте удалить или заменить его. Или обратитесь к производителю, чтобы узнать, доступны ли какие либо исправления.

  • Если недавно были добавлены новые драйверы устройств или системные службы, попробуйте удалить или обновить их. Попробуйте определить, что изменилось в системе, вызвавшее появление новой ошибки проверка кода.

  • Проверьте системный вход в Просмотр событий на наличие дополнительных сообщений об ошибках, которые могут помочь определить устройство или драйвер, вызывающий ошибку. Дополнительные сведения см. в разделе Открытие Просмотр событий. Ищите критические ошибки в системном журнале, которые появились примерно в то же время, что и "синий экран".

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

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

  • Дополнительные общие сведения об устранении неполадок см. в разделе Blue Screen Data.

См. также

Анализ аварийного дампа с помощью отладчиков Windows (WinDbg)

Анализ файла дампа Kernel-Mode с помощью WinDbg