Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Проверка PAGE_FAULT_IN_NONPAGED_AREA ошибок имеет значение 0x00000050. Это указывает на то, что была использована неверная системная память. Как правило, адрес памяти неверен или адрес памяти указывает на освобожденную память.
Это важно
Эта статья предназначена для программистов. Если вы являетесь клиентом, который получил код ошибки синего экрана при использовании компьютера, см. раздел Устранение ошибок синего экрана.
PAGE_FAULT_IN_NONPAGED_AREA Параметры
Параметр | Описание |
---|---|
1 |
Ссылка на адрес памяти |
2 |
После версии Windows 1507 (TH1) - x64 0: Операция считывания 2: Операция записи 10: Выполнить операцию После версии Windows 1507 (TH1) - x86 0: Операция считывания 2: Операция записи 10: Выполнить операцию После версии Windows 1507 (TH1) - Arm 0: Операция считывания 1: Операция записи 8: Выполнить операцию До Windows 1507 (TH1) версии x64 / x86 0: Операция считывания 1: Операция записи |
3 |
Обратитесь к памяти, на которую она ссылается (если она известна) |
4 |
Тип ошибки страницы 0x0 - NONPAGED_BUGCHECK_FREED_PTE - Указанный адрес указан в таблице страниц, помеченный как свободный. 0x2 - NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE Указанный адрес не имеет действительной активной записи таблицы страниц. 0x03 - NONPAGED_BUGCHECK_WRONG_SESSION - Попытка обращения к адресу пространства сеанса была предпринята в контексте процесса, у которого нет сеанса. Обычно это означает, что вызывающий объект неправильно пытается получить доступ к адресу сеанса, не получив правильно ссылку на объект нужного процесса и не присоединившись к нему первым. Этот багчек и подтип в последний раз использовался в Windows 10 RS3. В Windows 10 RS4 и более поздних версиях эта ошибка отображается как 0x02 (NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE). 0x04 - NONPAGED_BUGCHECK_VA_NOT_CANONICAL - Предпринята попытка обращения к неканоническому (незаконному) виртуальному адресу (Параметр 1). Вызывающий абонент никогда не должен пытаться получить доступ к этому адресу. 0xF - NONPAGED_BUGCHECK_USER_VA_ACCESS_INCONSISTENT - Код режима ядра пытался получить доступ к виртуальному адресу режима пользователя, когда такой доступ запрещен. |
Если драйвер, ответственный за ошибку, может быть идентифицирован, его имя выводится на синий экран и сохраняется в памяти по адресу (PUNICODE_STRING) KiBugCheckDriver. Вы можете использовать команду отладчика dx для отображения этого - dx KiBugCheckDriver
.
Причина
Проверка на наличие ошибок 0x50 может быть вызвана установкой неисправной системной службы или неправильным кодом драйвера. Эта ошибка может быть вызвана антивирусным программным обеспечением, а также поврежденным томом NTFS.
Это также может произойти после установки неисправного оборудования или в случае отказа установленного оборудования (обычно связанного с неисправной оперативной памятью, будь то основная память, кэш L2 RAM или видеопамять).
Замечания
Журнал событий: Проверьте средство просмотра событий системного входа на наличие дополнительных сообщений об ошибках, которые могут помочь точно определить устройство или драйвер, вызвавший ошибку. Ищите критические ошибки в системном журнале, которые появились примерно в то же время, что и "синий экран".
Устранение неисправности драйвера: Проверьте имя водителя, если оно было указано на синем экране или присутствует в журнале событий. Обратитесь к поставщику драйвера, чтобы узнать, доступен ли обновленный драйвер.
Решение проблемы с неисправным обслуживанием системы: Отключите службу и убедитесь, что это устранит ошибку. Если это так, обратитесь к производителю системного сервиса по поводу возможного обновления. Если ошибка возникает во время запуска системы, изучите варианты восстановления Windows. Дополнительные сведения см. в разделе Параметры восстановления в Windows 10.
Решение проблемы с антивирусным программным обеспечением: Отключите программу и подтвердите, что это устраняет ошибку. Если это так, обратитесь к производителю программы о возможном обновлении.
Устранение проблемы с поврежденным томом NTFS: Запустите Chkdsk /f /r для обнаружения и исправления ошибок диска. Необходимо перезагрузить систему перед началом сканирования диска на системном разделе. Свяжитесь с производителем системы жесткого диска, чтобы найти любые диагностические инструменты, которые они предоставляют для подсистемы жесткого диска.
Диагностика памяти Windows: Запустите средство диагностики памяти Windows, чтобы проверить физическую память. Нажмите кнопку «Пуск», а затем выберите «Панель управления». В поле поиска введите Память, а затем выберите Диагностика проблем с памятью на компьютере. После выполнения теста используйте средство просмотра событий для просмотра результатов в системном журнале. Найдите запись MemoryDiagnostics-Results, чтобы просмотреть результаты.
Решение неисправной аппаратной проблемы: Если оборудование было добавлено в систему недавно, удалите его, чтобы проверить, повторяется ли ошибка. Если существующее оборудование вышло из строя, удалите или замените неисправный компонент. Необходимо выполнить диагностику оборудования, предоставленную производителем системы. Подробную информацию об этих процедурах см. в руководстве пользователя компьютера.
Общие сведения об устранении неполадок с синим экраном см. в разделах Анализ данных синего экрана и Расширенное устранение неполадок для ошибки остановки или ошибки синего экрана.
Резолюция
Чтобы определить конкретную причину и создать исправление кода, требуется опыт программирования и доступ к исходному коду неисправного модуля.
Как правило, указанный адрес находится в освобожденной памяти или просто недействителен. Это не может быть защищено с помощью try - кроме обработчика -- это может быть защищено только зондом или подобными методами программирования. Сведения об обработке буфера и зондах в драйверах файловой системы см. в разделе Обработка буфера. Сведения о передовых методах разработки драйверов и распространенных ошибках, совершаемых разработчиками драйверов, см. в разделе Рекомендации по разработке драйверов Surface Team.
Используйте расширение отладки !analyze с параметром -v verbose, чтобы отобразить сведения о проверке ошибок, чтобы определить основную причину.
2: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except.
Typically the address is just plain bad or it is pointing at freed memory.
Arguments:
Arg1: ffffffff00000090, memory referenced.
Arg2: 0000000000000000, value 0 = read operation, 1 = write operation.
Arg3: fffff80240d322f9, If non-zero, the instruction address which referenced the bad memory
address.
Arg4: 000000000000000c, (reserved)
В этом примере параметр 2 указывает, что проверка на наличие ошибок произошла при чтении области памяти.
Просмотрите все выходные данные !analyze, чтобы получить информацию о том, что происходило во время проверки на наличие ошибок. Изучите MODULE_NAME: и FAULTING_MODULE: чтобы увидеть, какой код участвует в ссылке на недействительную системную память.
Посмотрите на STACK TEXT, чтобы понять, что было запущено в момент сбоя. Если доступно несколько файлов дампа, сравните информацию, чтобы найти общий код, который находится в стеке.
Используйте команду .trap, предоставленную в выходных данных !analyze, чтобы задать контекст.
TRAP_FRAME: fffff98112e8b3d0 -- (.trap 0xfffff98112e8b3d0)
Используйте команды отладчика, такие как kb (Display Stack Backtrace), чтобы исследовать код ошибки.
Используйте команду для lm t n
получения списка модулей, загруженных в память.
Используйте команду d, da, db, dc, dd, dD, df, dp, dq, du, dw (Память дисплея) для исследования областей памяти, на которые ссылаются параметры 1 и 3.
2: kd> db ffffffff00000090
ffffffff`00000090 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000a0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000b0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000c0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000d0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000e0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000f0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`00000100 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
В этом случае не похоже, что в этой области памяти есть данные в параметре 1, который является областью памяти, которую пытались прочитать.
Используйте команду !address для просмотра параметра 3, который является адресом инструкции, ссылающейся на плохую память.
2: kd> !address fffff80240d322f9
Usage: Module
Base Address: fffff802`40ca8000
End Address: fffff802`415fb000
Region Size: 00000000`00953000
VA Type: BootLoaded
Module name: ntoskrnl.exe
Module path: [\SystemRoot\system32\ntoskrnl.exe]
Используйте u, ub, uu (Unassemble)Dissasemble с параметром 3, чтобы проверить, какой из них ссылается на плохую память. Дополнительные сведения о процессоре X64 и языке ассемблера см. в разделе Процессор x64.
2: kd> u fffff80240d322f9
nt!RtlSubtreePredecessor+0x9:
fffff802`40d322f9 488b4810 mov rcx,qword ptr [rax+10h]
fffff802`40d322fd eb07 jmp nt!RtlSubtreePredecessor+0x16 (fffff802`40d32306)
fffff802`40d322ff 488bc1 mov rax,rcx
fffff802`40d32302 488b4910 mov rcx,qword ptr [rcx+10h]
fffff802`40d32306 4885c9 test rcx,rcx
fffff802`40d32309 75f4 jne nt!RtlSubtreePredecessor+0xf (fffff802`40d322ff)
fffff802`40d3230b c3 ret
fffff802`40d3230c c3 ret
Используется ub
для дизассемблирования в обратном направлении от заданного адреса.
Используйте команду r (Регистры) для проверки того, что выполнялось при проверке системной ошибки.
2: kd> r
Last set context:
rax=ffffffff00000080 rbx=0000000000000000 rcx=ffffa68337cb7028
rdx=7a107838c48dfc00 rsi=0000000000000000 rdi=0000000000000000
rip=fffff80240d322f9 rsp=ffff840c96510958 rbp=ffffffffffffffff
r8=ffffffffffffffff r9=0000000000000000 r10=7ffffffffffffffc
r11=ffff840c96510a10 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei ng nz na pe nc
cs=0010 ss=0018 ds=0000 es=0000 fs=0000 gs=0000 efl=00010282
nt!RtlSubtreePredecessor+0x9:
fffff802`40d322f9 488b4810 mov rcx,qword ptr [rax+10h] ds:ffffffff`00000090=????????????????
В данном случае fffff80240d322f9
находится в инструкции указателя регистра, rip.
Команда !pte
and !pool
также может быть использована для проверки памяти.
Используйте !memusage
и для изучения общего состояния системной памяти.
Дополнительные сведения об использовании памяти Windows см. в книге «Windows Internals 7th Edition, часть 1 », авторы Павел Иосифович, Марк Е. Руссинович, Дэвид А. Соломон и Алекс Ионеску.
Средство проверки драйверов
Driver Verifier — это средство, которое запускается в режиме реального времени для изучения поведения водителей. Например, средство проверки драйверов проверяет использование ресурсов памяти, таких как пулы памяти. Если он видит ошибки в выполнении кода драйвера, он заранее создает исключение, чтобы разрешить дальнейшую проверку этой части кода драйвера. Диспетчер проверки драйверов встроен в Windows и доступен на всех компьютерах с Windows. Используйте средство проверки драйверов, чтобы отследить конкретную причину сбоя.
Чтобы запустить диспетчер средств проверки драйверов, введите средство проверки в командной строке. Вы можете настроить, какие драйверы вы хотите проверить. Код, который проверяет драйверы, увеличивает накладные расходы по мере выполнения, поэтому постарайтесь проверить как можно меньшее количество драйверов. Если был обнаружен неисправный драйвер, выберите его. Дополнительные сведения см. в разделе "Проверка драйверов".
См. также
Bug Check Code Reference (Справочник с кодами критических ошибок)