Запуск моего драйвера ядра (StartService) приводит к появлению синего экрана 0x124 из-за исключения проверки машины из-за ошибки банка 6 кэша L2 на процессоре 0.

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

      Microsoft (R) Windows Debugger Version 10.0.19041.685 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.


Loading Dump File [C:\Windows\Minidump\041421-18486-01.dmp]
Mini Kernel Dump File: Only registers and stack trace are available


************* Path validation summary **************
Response                         Time (ms)     Location
OK                                             c:\symbols

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*c:\symbols*https://msdl.microsoft.com/download/symbols
Symbol search path is: srv*c:\symbols*https://msdl.microsoft.com/download/symbols
Executable search path is: c:\symbols
Windows 7 Kernel Version 7601 (Service Pack 1) MP (8 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 7601.23864.amd64fre.win7sp1_ldr.170707-0600
Machine Name:
Kernel base = 0xfffff800`0364a000 PsLoadedModuleList = 0xfffff800`0388c750
Debug session time: Wed Apr 14 10:45:37.450 2021 (UTC + 1:00)
System Uptime: 0 days 0:00:03.199
Loading Kernel Symbols
......................................................
Loading User Symbols
Mini Kernel Dump does not contain unloaded driver list
For analysis of this file, run !analyze -v
4: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

WHEA_UNCORRECTABLE_ERROR (124)
A fatal hardware error has occurred. Parameter 1 identifies the type of error
source that reported the error. Parameter 2 holds the address of the
WHEA_ERROR_RECORD structure that describes the error conditon.
Arguments:
Arg1: 0000000000000000, Machine Check Exception
Arg2: fffffa801a70b8f8, Address of the WHEA_ERROR_RECORD structure.
Arg3: 0000000000000000, High order 32-bits of the MCi_STATUS value.
Arg4: 0000000000000000, Low order 32-bits of the MCi_STATUS value.

Debugging Details:
------------------

fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock

KEY_VALUES_STRING: 1

    Key  : Analysis.CPU.Sec
    Value: 1

    Key  : Analysis.DebugAnalysisProvider.CPP
    Value: Create: 8007007e on QWERTYUIOP

    Key  : Analysis.DebugData
    Value: CreateObject

    Key  : Analysis.DebugModel
    Value: CreateObject

    Key  : Analysis.Elapsed.Sec
    Value: 1

    Key  : Analysis.Memory.CommitPeak.Mb
    Value: 74

    Key  : Analysis.System
    Value: CreateObject


BUGCHECK_CODE:  124

BUGCHECK_P1: 0

BUGCHECK_P2: fffffa801a70b8f8

BUGCHECK_P3: 0

BUGCHECK_P4: 0

CUSTOMER_CRASH_COUNT:  1

PROCESS_NAME:  System

STACK_TEXT:  
fffff880`03fa25b0 fffff800`03909cd9 : fffffa80`1a70b8d0 fffffa80`19aa2660 fffff8a0`00413b10 00000000`00000000 : nt!WheapCreateLiveTriageDump+0x6c
fffff880`03fa2ad0 fffff800`037e96d7 : fffffa80`1a70b8d0 fffff800`038632f8 fffffa80`19aa2660 00000000`00000202 : nt!WheapCreateTriageDumpFromPreviousSession+0x49
fffff880`03fa2b00 fffff800`03750fd5 : fffff800`038c5bc0 00000000`00000001 fffff8a0`00413a88 fffffa80`19aa2660 : nt!WheapProcessWorkQueueItem+0x57
fffff880`03fa2b40 fffff800`036c3c85 : fffff800`03ae6200 fffff800`03750fb0 fffffa80`19aa2600 00000000`00000000 : nt!WheapWorkQueueWorkerRoutine+0x25
fffff880`03fa2b70 fffff800`03955152 : 00000000`00000000 fffffa80`19aa2660 00000000`00000080 fffffa80`19a8db10 : nt!ExpWorkerThread+0x111
fffff880`03fa2c00 fffff800`036ab926 : fffff880`03d89180 fffffa80`19aa2660 fffff880`03d940c0 00000000`00000000 : nt!PspSystemThreadStartup+0x5a
fffff880`03fa2c40 00000000`00000000 : fffff880`03fa3000 fffff880`03f9d000 fffff880`04782720 00000000`00000000 : nt!KiStartSystemThread+0x16


MODULE_NAME: GenuineIntel

IMAGE_NAME:  GenuineIntel.sys

STACK_COMMAND:  .thread ; .cxr ; kb

FAILURE_BUCKET_ID:  X64_0x124_GenuineIntel_PROCESSOR_CACHE

OS_VERSION:  7.1.7601.23864

BUILDLAB_STR:  win7sp1_ldr

OSPLATFORM_TYPE:  x64

OSNAME:  Windows 7

FAILURE_ID_HASH:  {270f58cb-a20a-a72d-6d81-eb8c82f01f7a}

Followup:     MachineOwner
---------

4: kd> !errrec fffffa801a70b8f8
===============================================================================
Common Platform Error Record @ fffffa801a70b8f8
-------------------------------------------------------------------------------
Record Id     : 01d73112eb4e0c21
Severity      : Fatal (1)
Length        : 928
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Creator       : Microsoft
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Notify Type   : Machine Check Exception
Timestamp     : 4/14/2021 9:45:37 (UTC)
Flags         : 0x00000002 PreviousError

fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
===============================================================================
Section 0     : Processor Generic
-------------------------------------------------------------------------------
Descriptor    @ fffffa801a70b978
Section       @ fffffa801a70ba50
Offset        : 344
Length        : 192
Flags         : 0x00000001 Primary
Severity      : Fatal
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock

fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Proc. Type    : x86/x64
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Instr. Set    : x64
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Error Type    : Cache error
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Operation     : Generic
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Flags         : 0x00
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Level         : 2
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
CPU Version   : 0x00000000000906e9
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Processor ID  : 0x0000000000000000

fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
===============================================================================
Section 1     : x86/x64 Processor Specific
-------------------------------------------------------------------------------
Descriptor    @ fffffa801a70b9c0
Section       @ fffffa801a70bb10
Offset        : 536
Length        : 128
Flags         : 0x00000000
Severity      : Fatal
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock

fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Local APIC Id : 0x0000000000000000
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
CPU Id        : e9 06 09 00 00 08 10 00 - bf fb fa 7f ff fb eb bf
                00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
                00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00

Proc. Info 0  @ fffffa801a70bb10
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock

fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
===============================================================================
Section 2     : x86/x64 MCA
-------------------------------------------------------------------------------
Descriptor    @ fffffa801a70ba08
Section       @ fffffa801a70bb90
Offset        : 664
Length        : 264
Flags         : 0x00000000
Severity      : Fatal
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock

fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
Error         : GCACHEL2_ERR_ERR (Proc 0 Bank 6)
  Status      : 0xee2000000040110a
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
  Address     : 0x00000000fef1ffc0
fffff800038370e8: Unable to get Flags value from nt!KdVersionBlock
  Misc.       : 0x0000007880010086

Драйвер был правильно установлен с помощьюи:

      λ sc qc MyDriver
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: MyDriver
TYPE : 1 KERNEL_DRIVER
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : \??\C:\Windows\system32\drivers\MyDriver.sys
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : MyDriver
DEPENDENCIES :
SERVICE_START_NAME :

Я использую версию Windows 7, активированную kmspico. У меня включен режим отладки, отключена проверка подписи и принудительное использование подписи драйверов, а MyDriver.sys — это базовый файл WDM Driver.c, скомпилированный с использованием Visual Studio 2017.

Я просто не могу себе представить, почему я получаю этот синий экран, и по какой-то причине в моей сборке Windows 7 это единственный синий экран, который я когда-либо получал из 30 минидампов синего экрана за 4 года, все 0x124, но все требуют определенного программный триггер, поскольку все остальные драйверы могут быть запущены корректно. Более того, каждый синий экран, который я когда-либо видел в 2018 году, показывает:

      Error         : GCACHEL2_ERR_ERR (Proc 0 Bank 6)
  Status      : 0xee2000000040110a
  Address     : 0x00000000fef1ffc0
  Misc.       : 0x0000007880010086

Но опять же, мой компьютер может работать 150 дней, и это произойдет только тогда, когда я запущу этот конкретный драйвер.

Это похоже, но не помогло.

В MiniDump написано, что исключение произошло вчто такое, что такое инструкция, но похоже, что это поток, созданный для живого дампа WHEA в случае 0x124, и не показывает стек вызовов, вызвавший исключение, в верхней части стека, как это было бы для обычного синего экрана; соответственно, я на самом деле не вижу синего экрана, потому что именно он показывает синий экран и не вызывается в этом сценарии. Каждый синий экран 0x124 имеетв верхней части стека и показывает это как адрес, вызвавший исключение по какой-то причине - я думаю, это потому, что это инструкция после , которая отображается как обратный адрес в стеке, так что это контекст, который фиксируется . Обычно, когда вы получаетена синем экране показан неисправный IP-адрес, который в первую очередь вызвал исключение, и будет где-то в стеке вызовов, и, поскольку он не является частью этого стека вызовов, он просто использует обратный адресрамка. Каким-то образом он знает, что неисправный модуль, если только он не всегда показывает это для 0x124 - очевидно, я не думаю, что это модуль, вызвавший MCA.

Не отвечайте, что у меня неисправное оборудование — это не так. Что ж, это мой процессор , и у меня другой BIOS, чем заявленный, но я обновился до версии 1.9.0 2019 года , и он по-прежнему отображает синие экраны с тем же статусом MCI, но это не должно иметь значения, потому что это условие это создается программным обеспечением и происходит только тогда, когда я загружаю этот конкретный драйвер, поэтому его можно решить без изменения оборудования или прошивки.

На самом деле, как ни странно, я даже получил проверку ошибок 7E, и это был первый раз, когда синий экран показывал синий экран, но минидамп показывал 0x124...

1 ответ

Я только что запустил его на виртуальной машине с отладчиком ядра Windbg, подключенным к виртуальному порту COM1 через именованный канал, и он взломал отладчик, как вы уже догадались.MyDriver!__security_init_cookie+0x2d, и действительно, мы видим кучу точек останова cc после ветки сбоя на изображении. Как я уже сказал, оно не достиглоDriverEntryпоэтому я ожидал, что ошибка будет вGsDriverEntry. Я вернусь к вам и расскажу, что вызывает сбой этой функции. Но что касается этой ошибки, она была вызвана исключением точки останова, когда отладчик не подключен - что более важно, это не аппаратная проблема.

Это был исходный код:

Когда смотришь на него, совершенно очевидно, что он потерпит неудачу.

Исправление заключалось в изменении.vxprojфайл в Windows7, где написано Windows10

Теперь у меня есть это__security_init_cookie:

Другие вопросы по тегам