精华内容
下载资源
问答
  • DPC_WATCHDOG_VIOLATION蓝屏分析

    万次阅读 多人点赞 2020-03-13 21:28:25
    文章目录DPC_WATCHDOG_VIOLATION蓝屏分析1. 背景1. 分析1.1 初步分析1.2 DPC WATCHDOG1.3 DPC超时时间获取1.4 分析2. 总结 DPC_WATCHDOG_VIOLATION蓝屏分析 1. 背景 今天在我们客户的电脑上面出现了一个蓝屏,并且...

    DPC_WATCHDOG_VIOLATION蓝屏分析

    1. 背景

    今天在我们客户的电脑上面出现了一个蓝屏,并且反馈蓝屏码很奇怪是DPC_WATCHDOG_VIOLATION;本来PC上面没有安装我们的任何软件,这个问题与我们无关。但是出于对技术的好奇,本人分析了一下这个问题,并且这个问题本人以前也没有遇到过,因此写文记录一下这个分析过程。

    1. 分析

    1.1 初步分析

    拿到dmp文件之后,我们先查看错误码信息:

    
    DPC_WATCHDOG_VIOLATION (133)
    The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
    or above.
    Arguments:
    Arg1: 0000000000000000, A single DPC or ISR exceeded its time allotment. The offending
    	component can usually be identified with a stack trace.
    Arg2: 0000000000000501, The DPC time count (in ticks).
    Arg3: 0000000000000500, The DPC time allotment (in ticks).
    Arg4: fffff8077ff73358, cast to nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, which contains
    	additional information regarding this single DPC timeout
    

    从描述上面来看大概是这个意思:DPC看门狗检测到了在DPC或者DPC级别上面执行的太久了,导致蓝屏。这个就很奇怪了,难道Windows无法在DPC上面执行太久吗?还真是的,我们看一下这个的基本分析。

    1.2 DPC WATCHDOG

    应该是从Vista开始就引入了这样一个东西,当一个CPU连续处于DPC下面执行的时候,就可能超过某个值而导致蓝屏,我们可以逆向一下Windows代码看下:
    在这里插入图片描述
    从这里看,如果超过时间并且KeEnableWatchdogTimeout为真的话,那么引发133蓝屏。那么KeEnableWatchdogTimeout这个是什么时候初始化的呢?我们可以看到初始化的代码如下:

    char __fastcall KeInitSystem(int a1)
    {
        //...
        if (!HviIsAnyHypervisorPresent())
          KeEnableWatchdogTimeout = 1;
        //...
    }
    

    HviIsAnyHypervisorPresent这个函数返回cpuid指令是否由hypervisor实现,如果不是的话,那么开启WatchDog。

    并且我们在ntoskrnl中可以看到如下定义:

    在这里插入图片描述

    这个两个分别代表DPC狗超时的最大时间和单个DPC最大的时间。

    1.3 DPC超时时间获取

    通过KeQueryDpcWatchdogInformation可以获取到当前处理器的DPC超时时间信息,如下:

    NTSTATUS KeQueryDpcWatchdogInformation(
      PKDPC_WATCHDOG_INFORMATION WatchdogInformation
    );
    
    typedef struct _KDPC_WATCHDOG_INFORMATION {
      ULONG DpcTimeLimit;
      ULONG DpcTimeCount;
      ULONG DpcWatchdogLimit;
      ULONG DpcWatchdogCount;
      ULONG Reserved;
    } KDPC_WATCHDOG_INFORMATION, *PKDPC_WATCHDOG_INFORMATION;
    

    其中:

    1. DpcTimeLimit : 当前处理器单个延迟过程调用的时间限制。如果已禁用DPC超时,则此值设置为0。
    2. DpcTimeCount : 如果已启用DPC超时,则本次延迟过程调用的剩余时间。
    3. DpcWatchdogLimit : 一系列延迟过程调用所允许的总时间限制。如果已禁用DPC看门狗,则此值设置为零。
    4. DpcWatchdogCount : 如果启用DPC看门狗,则当前连续延迟过程调用序列的剩余时间值。

    1.4 分析

    有了上面这些基础知识以后我们就可以分析这个问题了:

    2: kd> k
     # Child-SP          RetAddr           Call Site
    00 ffff8380`20bf5b08 fffff807`7fbee83d nt!KeBugCheckEx
    01 ffff8380`20bf5b10 fffff807`7fa1f857 nt!KeAccumulateTicks+0x1cbe1d
    02 ffff8380`20bf5b70 fffff807`804b91e1 nt!KeClockInterruptNotify+0xc07
    03 ffff8380`20bf5f30 fffff807`7fa029e5 hal!HalRequestSoftwareInterrupt+0x171
    04 ffff8380`20bf5f60 fffff807`7fbc2cba nt!KiCallInterruptServiceRoutine+0xa5
    05 ffff8380`20bf5fb0 fffff807`7fbc3227 nt!KiInterruptSubDispatchNoLockNoEtw+0xfa
    06 ffffbb07`daa476f0 fffff807`7faa26e8 nt!KiInterruptDispatchNoLockNoEtw+0x37
    07 ffffbb07`daa47880 fffff807`7fa27dfb nt!KxWaitForSpinLockAndAcquire+0x28
    08 ffffbb07`daa478b0 fffff807`859ef1c2 nt!KeAcquireSpinLockAtDpcLevel+0x5b
    09 ffffbb07`daa478e0 fffff807`859ed8b0 tcpip!IsSessionStateFastPathCompatible+0x12
    0a ffffbb07`daa47a00 fffff807`7fa6ae85 tcpip!WfpIndicateSendControl+0x2d0
    0b ffffbb07`daa47c40 fffff807`7fa6a4df nt!KiExecuteAllDpcs+0x305
    0c ffffbb07`daa47d80 fffff807`7fbc8265 nt!KiRetireDpcList+0x1ef
    0d ffffbb07`daa47fb0 fffff807`7fbc8050 nt!KxRetireDpcList+0x5
    0e ffffbb07`db1129d0 fffff807`7fbc7720 nt!KiDispatchInterruptContinue
    0f ffffbb07`db112a00 00007ffa`9dc674e9 nt!KiDpcInterrupt+0x2f0
    

    从这个堆栈我们发现2号CPU目前在执行DPC例程,然后时钟中断产生,通过调用KeAccumulateTicks计算DPC的总执行时间,发现执行超时蓝屏。 那么我们看一下当前CPU的DCP超时信息:

    2: kd> dt nt!_KPRCB ffff838020e40180 DPC*
       +0x2e00 DpcData : [2] _KDPC_DATA
       +0x2e50 DpcStack : 0xffffbb07`daa47fb0 Void
       +0x2e5c DpcRequestRate : 0
       +0x2e64 DpcLastCount : 0x3c0c
       +0x2e6a DpcRoutineActive : 0x1 ''
       +0x2e6c DpcRequestSummary : 0n19
       +0x2e6c DpcRequestSlot : [2] 0n19
       +0x2e6c DpcNormalProcessingActive : 0y1
       +0x2e6c DpcNormalProcessingRequested : 0y1
       +0x2e6c DpcNormalThreadSignal : 0y0
       +0x2e6c DpcNormalTimerExpiration : 0y0
       +0x2e6c DpcNormalDpcPresent : 0y1
       +0x2e6c DpcNormalLocalInterrupt : 0y0
       +0x2e6c DpcNormalSpare : 0y0000000000 (0)
       +0x2e6c DpcThreadActive : 0y0
       +0x2e6c DpcThreadRequested : 0y0
       +0x2e6c DpcThreadSpare : 0y00000000000000 (0)
       +0x5880 DpcGate : _KGATE
       +0x58e8 DpcWatchdogPeriod : 0n7680
       +0x58ec DpcWatchdogCount : 0n1280
       +0x58f4 DpcWatchdogProfileCumulativeDpcThreshold : 0x1b80
       +0x5b8c DpcTime : 0x515
       +0x5b9c DpcTimeCount : 0x501
       +0x5ba0 DpcTimeLimit : 0x500
       +0x5c00 DpcWatchdogProfileSingleDpcThreshold : 0x496
       +0x5f58 DpcWatchdogDpc : _KDPC
       +0x5f98 DpcWatchdogTimer : _KTIMER
       +0x61a8 DpcWatchdogProfile : 0xffffaa0f`64184000  -> 0x00000000`0000000e Void
       +0x61b0 DpcWatchdogProfileCurrentEmptyCapture : 0xffffaa0f`64187600  -> (null) 
    

    这里可以看到DpcTimeLimit : 0x500 总时间tick 数目为500,但是已经执行了DpcTimeCount : 0x501 501个,导致蓝屏。

    从上面的堆栈我们可以发现这个DPC是TCPIP发起的DPC,由Windows自身引起的问题应该比较小,不过很大可能是因为nt!KeAcquireSpinLockAtDpcLevel占用自旋锁时间太长,导致超时,那么我们看下其他的处理器在干嘛,我们看到一个很可疑的驱动:

     # Child-SP          RetAddr           Call Site
    00 ffffbb07`ddb96140 fffff807`7dcf3467 Wdf01000!imp_WdfIoQueueRetrieveNextRequest+0x66 
    01 ffffbb07`ddb96180 fffff807`7dcf3100 xxxx+0x3467
    02 ffffbb07`ddb961e0 fffff807`7dcf2cbb xxxx+0x3100
    03 ffffbb07`ddb96210 fffff807`7dcf2393 xxxx+0x2cbb
    04 ffffbb07`ddb96280 fffff807`8545bed0 xxxx+0x2393
    05 ffffbb07`ddb962b0 fffff807`8545b879 NETIO!KfdClassify+0x28e0
    06 ffffbb07`ddb96380 fffff807`8545aed9 NETIO!KfdClassify+0x2289
    07 ffffbb07`ddb964c0 fffff807`8545d1da NETIO!KfdClassify+0x18e9
    08 ffffbb07`ddb96640 fffff807`85459b91 NETIO!KfdClassify+0x3bea
    09 ffffbb07`ddb967d0 fffff807`8545933a NETIO!KfdClassify+0x5a1
    0a ffffbb07`ddb96be0 fffff807`85458f63 NETIO!WfpStreamInspectReceive+0x8fa
    0b ffffbb07`ddb96d70 fffff807`854588a4 NETIO!WfpStreamInspectReceive+0x523
    0c ffffbb07`ddb97150 fffff807`859e85e0 NETIO!WfpStreamInspectSend+0x274
    0d ffffbb07`ddb971d0 fffff807`859e8144 tcpip+0x285e0
    0e ffffbb07`ddb972e0 fffff807`7fa69e18 tcpip+0x28144
    0f ffffbb07`ddb97310 fffff807`7fa69d8d nt!KeExpandKernelStackAndCalloutInternal+0x78
    10 ffffbb07`ddb97380 fffff807`85a271d4 nt!KeExpandKernelStackAndCalloutEx+0x1d
    11 ffffbb07`ddb973c0 fffff807`88ce9348 tcpip+0x671d4
    12 ffffbb07`ddb97430 fffff807`88ce32ed afd!AfdTLStartBufferedVcSend+0xa0
    13 ffffbb07`ddb974e0 fffff807`88ce0120 afd!AfdSend+0x9cd
    14 ffffbb07`ddb97740 fffff807`7fa31f39 afd!AfdDispatch+0x160
    15 ffffbb07`ddb977b0 fffff807`7ffe93f5 nt!IofCallDriver+0x59
    
    

    因此我们大概猜测,因为这个线程执行导致了另外线程DPC一直执行,我们看下IRQL级别

    3: kd> !irql
    Debugger saved IRQL for processor 0x3 -- 0 (LOW_LEVEL)
    

    这里比较奇怪了,如果是这个线程占用了自旋锁的话,那么将会这个时候IRQL应该是2才对,但是这个是0,说明刚开始的猜测是错误的,那么我们简单看一下这个线程DPC的执行过程:

    3: kd> dt nt!_KPRCB ffff838020ed5180 DPC*
       +0x2e00 DpcData : [2] _KDPC_DATA
       +0x2e50 DpcStack : 0xffffbb07`daa57fb0 Void
       +0x2e5c DpcRequestRate : 0
       +0x2e64 DpcLastCount : 0x22c9
       +0x2e6a DpcRoutineActive : 0 ''
       +0x2e6c DpcRequestSummary : 0n50
       +0x2e6c DpcRequestSlot : [2] 0n50
       +0x2e6c DpcNormalProcessingActive : 0y0
       +0x2e6c DpcNormalProcessingRequested : 0y1
       +0x2e6c DpcNormalThreadSignal : 0y0
       +0x2e6c DpcNormalTimerExpiration : 0y0
       +0x2e6c DpcNormalDpcPresent : 0y1
       +0x2e6c DpcNormalLocalInterrupt : 0y1
       +0x2e6c DpcNormalSpare : 0y0000000000 (0)
       +0x2e6c DpcThreadActive : 0y0
       +0x2e6c DpcThreadRequested : 0y0
       +0x2e6c DpcThreadSpare : 0y00000000000000 (0)
       +0x5880 DpcGate : _KGATE
       +0x58e8 DpcWatchdogPeriod : 0n7680
       +0x58ec DpcWatchdogCount : 0n1283
       +0x58f4 DpcWatchdogProfileCumulativeDpcThreshold : 0x1b80
       +0x5b8c DpcTime : 3
       +0x5b9c DpcTimeCount : 0
       +0x5ba0 DpcTimeLimit : 0x500
       +0x5c00 DpcWatchdogProfileSingleDpcThreshold : 0x496
       +0x5f58 DpcWatchdogDpc : _KDPC
       +0x5f98 DpcWatchdogTimer : _KTIMER
       +0x61a8 DpcWatchdogProfile : 0xffffaa0f`64202000  -> (null) 
       +0x61b0 DpcWatchdogProfileCurrentEmptyCapture : 0xffffaa0f`64202000  -> (null) 
    

    这里看到DpcWatchdogCount : 0n1283这个值很大,那么可以推测这个CPU执行的DPC将非常多,导致的概率也非常大,那么我们干掉这个驱动。

    测试,果然蓝屏问题消失。

    2. 总结

    其实还有一个命令可以直接查看watchdog的信息,就是!swd,如下:

    3: kd> !swd
    SWD: Initial DPC Watchdog Period:    120.000 (s)
    SWD: Initial DPC Timeout Period:     20.000 (s)
    
    CPU Type       Counter    Time (s)
     0: DPC        Period     120.000 (s)
     0: DPC        Count      0.000 (s)
     0: DPCTimeout Period     20.000 (s)
     0: DPCTimeout Count      20.000 (s)
     0: Thread                <Disabled>
    
     1: DPC        Period     120.000 (s)
     1: DPC        Count      0.000 (s)
     1: DPCTimeout Period     20.000 (s)
     1: DPCTimeout Count      20.000 (s)
     1: Thread                <Disabled>
    
     2: DPC        Period     120.000 (s)
     2: DPC        Count      20.000 (s)
     2: DPCTimeout Period     20.000 (s)
     2: DPCTimeout Count      1844674407370.939 (s)
     2: Thread                <Disabled>
    
     3: DPC        Period     120.000 (s)
     3: DPC        Count      20.046 (s)
     3: DPCTimeout Period     20.000 (s)
     3: DPCTimeout Count      20.000 (s)
     3: Thread                <Disabled>
    

    从上面的分析我们可以发现,Windows应该是趋向于在DPC级别少做事情,因为DPC会影响整体系统的响应(无法线程调度了);因此如果在DPC中需要做太多事情的话,MSDN推荐使用Worker去处理。

    并且我们平时在使用自旋锁等提升IRQL到DPC级别的操作的时候,也需要尽量避免过于复杂的操作。

    展开全文
  • 快进视频时突然卡住,然后蓝屏,报DPC_WATCHDOG_VOLTAGE错误代码,连续一周频繁发生(刷微博,点开视频也会突然破音然后卡死) 系统版本: 10.0.18362 故障分析 确保开启启动和故障恢复 随后在C:\Windows\minidump...

    故障现象

    快进视频时突然卡住,然后蓝屏,报DPC_WATCHDOG_VOLTAGE错误代码,连续一周频繁发生(刷微博,点开视频也会突然破音然后卡死)
    蓝屏

    系统版本:
    10.0.18362

    故障分析

    确保开启启动和故障恢复
    启动和故障恢复
    随后在C:\Windows\minidump找到最近的日志文件,用BlueScreenView分析是由hal.dll和ntoskrnl.exe导致的,也可以将这份dump文件上传至微软社区问答会有工程师来分析是什么导致的这个故障。

    经分析是 Atheros 无线网卡驱动程序不兼容或损坏导致的,而这个就是我本机安装的无线网卡驱动,驱动为athw8x.sys,将驱动换为athw10x.sys 目前还未出现其他情况。

    总结

    建议打驱动时找本机的官网支持中心下载官方的驱动包进行安装,而且注意分辨型号,可能不同的型号虽然参数特别相似但是驱动确不一样不能混用。

    Ps: 华硕笔记本ZX50JX4200

    展开全文
  • win10 dpc_watchdog_violation 蓝屏

    万次阅读 2018-07-16 16:32:43
    系统: win10 企业版 15063  ...Windows 10中的DPC_WATCHDOG_VIOLATION蓝屏 修复win7/win10出现iaStorA.sys蓝屏的方法 微软支持工程师Anannya Podder给出的答案是,这可能是iastor.sys存储驱动与...

    系统: win10 企业版 15063 

    待机时电脑蓝屏。

    检测原因:

    Bluescreen Error: DPC_WATCHDOG_VIOLATION

    Windows 10中的DPC_WATCHDOG_VIOLATION蓝屏

    修复win7/win10出现iaStorA.sys蓝屏的方法

    微软支持工程师Anannya Podder给出的答案是,这可能是iastor.sys存储驱动与Windows 10不兼容导致的,微软正在研究解决方法,避免在升级Windows 10的过程中把它也带过来。

    如果你已经升级了而且会遇到蓝屏,可以试试如下解决方法:

    1、右键点击开始按钮并选择设备管理器。

    2、展开第一条“IDE ATA/ATAPI控制器”。

    3、选择带有“SATA AHCI”的条目,比如说标准SATA AHCI控制器,右键选择“属性”,切换到“驱动程序”标签页。

    4、点击“更新驱动程序”按钮,依次选择“浏览计算机并查找驱动程序软件”、“从计算机的设备驱动程序列表中选择”。

    5、选择“标准SATA ACHI控制器”,下一步,完成。

    6、重启。

    展开全文
  • 解决蓝屏 DPC_WATCHDOG_VIOLATION

    万次阅读 2020-12-06 14:15:10
    解决蓝屏 DPC_WATCHDOG_VIOLATION 我电脑出现几次这个问题,都是在开机的时候,或者在息屏后唤醒的时候。 这种错误情况的发生可能是由于 iastor.sys 驱动没有完全兼容 Windows 10系统所造成的。 第一步:win+x ,...

    解决蓝屏 DPC_WATCHDOG_VIOLATION

    我电脑出现几次这个问题,都是在开机的时候,或者在息屏后唤醒的时候。
    这种错误情况的发生可能是由于 iastor.sys 驱动没有完全兼容 Windows 10系统所造成的。

    在这里插入图片描述
    第一步:win+x ,选择设备管理
    在这里插入图片描述
    第二步:展开存储控制器,选择SATA的,并右击选择“属性”在这里插入图片描述第三步:在属性中驱动程序选项卡中,选择更新驱动程序,选择“浏览我的计算机以查找驱动程序软件
    在这里插入图片描述
    在这里插入图片描述

    第四步:选择让我从“计算机上的可驱动程序列表中选取”,选择“intel主板SATA/AHCI驱动”,在点击下一步。
    在这里插入图片描述
    在这里插入图片描述
    重启电脑!

    展开全文
  • win10蓝屏代码:dpc_watchdog_violation 解决方案之一 如果电脑是双硬盘的可以试试这种方式. 先说一下博主我的电脑情况; 配置如下; 128固态+1t 720转 机械硬盘 下载文件是储存在机械硬盘的一个分区,百度云下载经常...
  • DPC_WATCHDOG_VIOLATION电脑蓝屏问题来源

    千次阅读 2021-01-16 09:58:05
    DPC_WATCHDOG_VIOLATION 多为硬件驱动出现问题,个人电脑出现的问题是独一无二的,通过网上找的方法或许并没有效果,这时,应该分析dmp日志。 步骤如下: 1.安装 WinDbg Preview,这是微软官方推出的 Debug 工具。 2...
  • 反映说出现了蓝屏故障,并提示错误代码DPC_WATCHDOG_VIOLATION,遇到这样的问题该怎么办呢,可能是软件或者硬件原因引起,本教程就给大家带来win10电脑出现蓝屏并提示代码DPC_WATCHDOG_VIOLATION的详细解决步骤。...
  • 之后电脑不太流畅是实情,但是更悲剧的事情在后面:每次弹出u盘的时候电脑都会死机,并且出现DPC_WATCHDOG_VIOLATION蓝屏重启。之前同事用小内存的时候虽然会卡,但是基本没死机过。所以,首先排除了内存的原因。...
  • 电脑无故卡死,然后蓝屏,很频繁,系统是win11 在网上搜索的方法都不顶用,求大能分析哈https://www.lanzoul.com/inAoGxosedc
  • 用尽系统自带的工具均无法恢复,F8能进系统。后来使用如下方法解决了 这种错误情况的发生可能是由于 iastor.sys 驱动没有完全兼容 Windows 8系统所造成的。微软正在研究一种可行方案,来避免升级 Windows 8时所产生...
  • 喵了个咪的,今天早晨上班打开电脑,进入桌面三分钟后出现DPC_WATCHDOG_VIOLATION,您的电脑遇到错误需要重启,这是个什么东东,别说,我还真没有遇到过这样的情况。 在办公室其他的电脑上百度了下,三种方法: 1...
  • 最近自己组装台电脑玩, 出现过几次蓝屏 代码 DPC_WATCHDOG_VIOLATION 打开设备管理器 发现好几个黄色感叹号的 点开显示没有兼容驱动(忘记截图了) 大概有 pci内存控制器, sm总线控制器 ... 于是下了360驱动大师, ...
  • 虚拟机kali使用nmap或者masscan,就会导致win10主机蓝屏。本人原因是因为Wise System Monitor流量监控软件所导致取消开机自启就行。
  • 电脑出现了问题,隔几天就死机蓝屏,设备管理器中,控制器设置的是标准的sata接口 请问怎么解决
  • #电脑蓝屏 电脑一直蓝屏蓝屏代码 dpc-watchdog-violation,用微软debug工具分析的dump文件如下,来个大佬救救我谢谢! 链接: 百度网盘 请输入提取码 百度网盘为您提供文件的网络备份、同步和分享服务。空间大、...
  • DPC-Watchdog-Violation

    2014-11-19 14:02:00
    此错误导致系统蓝屏且重启,初步判定为安装了虚拟软件所致。 转载于:https://www.cnblogs.com/tianlangli/p/4108114.html
  • 常见的windows蓝屏代码查询及处理

    千次阅读 2020-10-20 11:30:37
    所谓解绳之人还得系绳之人,window蓝屏当然就要找微软啦 这里我给微软的蓝屏代码整理了下,浏览器中 ctrl+F 调出查找即可定位具体的蓝屏代码位置,然后点击对应的【右边描述连接】即可查看解决办法和描述 代码 ...
  • 蓝屏错误疑难解答适用于: Windows 10如果某个问题导致设备意外关机或重启,则可能会发生蓝屏错误(也称为停止错误)。你可能会看到一个蓝屏,同时显示消息“你的设备遇到了问题,需要重启”。注意如果你遇到黑屏或...
  • windows蓝屏代码

    千次阅读 2018-12-02 20:41:00
    DPC_WATCHDOG_TIMEOUT 0x00000103 MUP_FILE_SYSTEM 0x00000104 AGP_INVALID_ACCESS 0x00000105 AGP_GART_CORRUPTION 0x00000106 AGP_ILLEGALLY_REPROGRAMMED 0x00000108 THIRD_PARTY_FILE_...
  • 完整的蓝屏错误代码大全详解

    千次阅读 2021-06-18 13:43:35
    一个死机(BSOD)的蓝屏,技术上称为一个STOP错误,若在Windows遭受了严重的错误,被迫“停”的问题。 在任何Windows操作系统中都会出现BSOD错误,包括Windows 10,Windows 8,Windows 7,Windows Vista,Windows ...
  • ​针对以下常见的蓝屏错误代码进行问题排除,并未提供所有错误代码的列表,但由于许多错误代码可能具有相同的解决方案,因此最佳做法是按照以下步骤操作来对蓝屏错误进行问题排除。CRITICAL_PROCESS_DIEDSYSTEM_...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

dpc_watchdog_violation蓝屏