Quando inicio meu driver manualmente usando StartService
, ou outros meios, ou quando ele é carregado pelo sistema automaticamente quando definido como auto_start causa uma tela azul antes de DriverEntry
ser alcançado.
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
O driver foi instalado corretamente usando SetupOpenInfFile
e SetupInstallFileW
:
λ 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 :
Estou usando uma versão ativada por kmspico do Windows 7. Tenho o modo de depuração ativado, teste a assinatura e a imposição de assinatura do driver, e MyDriver.sys é um WDM Driver.c básico compilado usando o Visual Studio 2017.
Eu simplesmente não consigo imaginar por que estou recebendo essa tela azul e, por algum motivo, na minha compilação do Windows 7, esta é a única tela azul que já recebi em 30 minidespejos de tela azul em 4 anos, todos 0x124, mas todos exigem um acionador de software, visto que todos os outros drivers podem ser iniciados corretamente. Além disso, todas as telas azuis que eu já tive em 2018 mostram:
Error : GCACHEL2_ERR_ERR (Proc 0 Bank 6)
Status : 0xee2000000040110a
Address : 0x00000000fef1ffc0
Misc. : 0x0000007880010086
Mas mais uma vez, meu PC pode rodar agora por 150 dias e isso só acontecerá quando eu iniciar este driver específico.
Isso é semelhante, mas não ajudou.
No MiniDump, ele diz que ocorreu a exceção em ntosknl.exe+4acfac
que é nt!WheapCreateLiveTriageDump+0x6c
, que é instrução mov [rsp+518h+Size], rdi
, mas isso parece ser um thread criado para um despejo ao vivo do WHEA no caso de um 0x124 e não mostra a pilha de chamadas que causou a exceção KeBugCheckEx
no topo da pilha como seria para uma tela azul normal; consequentemente, eu realmente não vejo a tela azul porque KeBugCheckEx
é o que mostra a tela azul e ela não é chamada neste cenário. Toda tela azul 0x124 tem nt!WheapCreateLiveTriageDump+0x6c
no topo da pilha e mostra isso como o endereço que causou a exceção por algum motivo - acho que é porque é a instrução depois RtlCaptureContext
de , que é o que aparece como um endereço de retorno na pilha, então esse é o contexto que é capturado. Normalmente, quando você recebe umKeBugCheckEx
tela azul, o IP com falha mostrado é aquele que causou a exceção em primeiro lugar e estará em algum lugar abaixo da pilha de chamadas e visto que isso não faz parte desta pilha de chamadas, ele apenas usa o endereço de retorno do RtlCaptureContext
quadro. De alguma forma, ele sabe que o módulo com falha é GenunineIntel.sys
, a menos que sempre mostre isso para 0x124 - claramente não acho que seja o módulo que causou o MCA.
Não responda que tenho hardware defeituoso -- não tenho. Bem, esta é a minha CPU , e eu tenho uma BIOS diferente da indicada, mas atualizei para uma versão 1.9.0 de 2019 e ainda exibe telas azuis com o mesmo status de MCI, mas isso não deve ser relevante porque é uma condição que é criado por software e só acontece quando carrego esse driver específico, portanto, deve ser resolvido sem alterar o hardware ou o firmware.
Na verdade, curiosamente, eu até recebi um bugcheck 7E, que foi a primeira vez que a tela azul mostrou uma tela azul, mas o minidump mostrou 0x124 ...
Acabei de executá-lo em uma máquina virtual com o depurador de kernel windbg conectado à porta COM1 virtual por meio de um pipe nomeado e invadiu o depurador, você adivinhou
MyDriver!__security_init_cookie+0x2d
e, de fato, vemos vários pontos de interrupção cc após a ramificação de falha na imagem . Como eu disse, não estava alcançandoDriverEntry
, então eu esperava que o erro estivesse noGsDriverEntry
. Entrarei em contato com você sobre o que está causando a falha dessa função. Mas quanto a esse erro, ele estava sendo causado por uma exceção de ponto de interrupção quando um depurador não está conectado - mais importante , não é um problema de hardwareEste era o código original:
Quando você olha para ele, é bastante óbvio que vai falhar
A correção estava alterando o
.vxproj
arquivo para Windows7, onde dizia Windows10Agora eu tenho isso
__security_init_cookie
: