Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Проверка ошибок SYSTEM_SERVICE_EXCEPTION имеет значение 0x0000003B. Это означает, что при выполнении подпрограммы, которая переходит из не привилегированного кода в привилегированный код.
Внимание
Эта статья предназначена для программистов. Если вы являетесь клиентом, который получил код ошибки синего экрана при использовании компьютера, см. статью "Устранение неполадок синим экраном".
параметры SYSTEM_SERVICE_EXCEPTION
Параметр | Описание |
---|---|
1 | Исключение, вызвавшее проверку ошибок. |
2 | Адрес инструкции, вызвавшей проверку ошибок |
3 | Адрес записи контекста для исключения, вызвавшего проверку ошибки |
4 | 0 (не используется) |
Причина
Этот код остановки указывает, что выполнение кода было исключением, а поток, который был под ним, является системным потоком.
Это может произойти из-за разыменовки указателя NULL или случайного неправильного адреса. Это, в свою очередь, может быть вызвано тем, что память освобождается преждевременно или повреждение структуры данных.
Сведения об исключении, возвращаемые в параметре 1, описаны в значениях NTSTATUS. Коды исключений определяются в ntstatus.h, файле заголовка, предоставленном комплектом драйверов Windows. (Дополнительные сведения см. в разделе Файлы заголовков в комплекте драйверов Windows).
Ниже указаны распространенные коды исключений:
0x80000003: STATUS_BREAKPOINT
Точка останова или ASSERT обнаружена, когда к системе не подключен отладчик ядра.
0xC0000005: STATUS_ACCESS_VIOLATION
Произошло нарушение доступа к памяти.
Разрешение
Чтобы определить конкретную причину и создать исправление кода, требуется интерфейс программирования и доступ к исходному коду модуля сбоя.
Чтобы выполнить отладку этой проблемы, используйте команду CXR (отображаемая запись контекста) с параметром 3, а затем используйте kb (backtrace стека отображения). Вы также можете задать точку останова в коде, которая предшествует этому коду остановки и попытаться перейти к коду сбоя. Используйте команды u, ub, uu (unassemble), чтобы просмотреть код программы сборки.
Расширение отладчика !analyze отображает сведения о проверке ошибок и может оказаться полезным при определении первопричины. В следующем примере выходные данные из !analyze.
SYSTEM_SERVICE_EXCEPTION (3b)
An exception happened while executing a system service routine.
Arguments:
Arg1: 00000000c0000005, Exception code that caused the bugcheck
Arg2: fffff802328375b0, Address of the instruction which caused the bugcheck
Arg3: ffff9c0a746c2330, Address of the context record for the exception that caused the bugcheck
Arg4: 0000000000000000, zero.
...
Дополнительные сведения о WinDbg и !analyze см. в следующих разделах:
Дополнительные сведения об использовании памяти Windows см. в статье Windows Internals 7th Edition Part 1 by Павел Yosifovich, Марк Э. Руссинович, Дэвид А. Соломон и Алекс Ионеску.
Определение драйвера
Если драйвер, отвечающий за ошибку, можно определить, его имя печатается на синем экране и хранится в памяти в расположении (PUNICODE_STRING) KiBugCheckDriver. Вы можете использовать dx (выражение объектной модели отладчика отображения), команду отладчика, чтобы отобразить следующее: dx KiBugCheckDriver
kd> dx KiBugCheckDriver
KiBugCheckDriver : 0xffffe10b9991e3e8 : "nvlddmkm.sys" [Type: _UNICODE_STRING *]
Используйте расширение !error для отображения сведений о коде исключения в параметре 1. Ниже приведен пример выходных данных из !error.
2: kd> !error 00000000c0000005
Error code: (NTSTATUS) 0xc0000005 (3221225477) - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.
Просмотрите выходные данные STACK TEXT из WinDbg, чтобы узнать, что выполнялось при сбое. Если доступны несколько файлов дампа, сравните их информацию, чтобы найти общий код, который находится в стеке. Для исследования кода сбоя используйте команды отладчика, такие как kb (отображение стека обратного вывода).
Используйте следующую команду для перечисления модулей, загруженных в память: lm t n
Используйте !memusage для изучения общего состояния системной памяти. Вы также можете использовать команды !pte и !pool для изучения определенных областей памяти.
В прошлом эта ошибка связана с чрезмерным использованием страничного пула, что может произойти из-за того, что графические драйверы пользовательского режима пересекают и передают плохие данные в код ядра. Если вы подозреваете, что это так, используйте параметры пула в средство проверки драйверов для сбора дополнительных сведений.
Средство проверки драйверов
Средство проверки драйверов — это средство, которое выполняется в режиме реального времени для проверки поведения драйверов. Например, средство проверки драйверов проверяет использование ресурсов памяти, таких как пулы памяти. Если он идентифицирует ошибки в выполнении кода драйвера, он упреждающе создает исключение, чтобы позволить, чтобы часть кода драйвера была более тщательно изучена. Диспетчер проверки драйверов встроен в Windows и доступен на всех компьютерах с Windows.
Чтобы запустить диспетчер проверки драйверов, введите средство проверки в командной строке. Вы можете настроить драйверы для проверки. Код, проверяющий драйверы, добавляет затраты при выполнении, поэтому попробуйте проверить наименьшее количество драйверов. Дополнительные сведения см. в разделе "Проверка драйверов".
Замечания
Для общего устранения неполадок с кодами проверки ошибок Windows следуйте приведенным ниже рекомендациям.
Если недавно были добавлены новые драйверы устройств или системные службы, попробуйте удалить или обновить их. Попробуйте определить, что изменилось в системе, вызвавшей появление нового кода проверки ошибок.
Просмотрите диспетчер устройств, чтобы узнать, помечены ли какие-либо устройства восклицательным знаком (!), что указывает на проблему. Просмотрите журнал событий, отображаемый в свойствах для любого драйвера устройства сбоя. Попробуйте обновить соответствующий драйвер.
Проверьте системный журнал в Просмотр событий для получения дополнительных сообщений об ошибках, которые могут помочь определить устройство или драйвер, вызывающий ошибку. Ищите критические ошибки в системном журнале, которые появились примерно в то же время, что и "синий экран".
Если вы недавно добавили оборудование в систему, попробуйте удалить или заменить его. Или обратитесь к производителю, чтобы узнать, доступны ли какие либо исправления.
Дополнительные общие сведения об устранении неполадок см. в разделе "Анализ данных с синим экраном".
См. также
Анализ аварийного дампа с помощью отладчиков Windows (WinDbg)
Анализ файла дампа в режиме ядра с помощью WinDbg
Bug Check Code Reference (Справочник с кодами критических ошибок)