首页 > 编程语言 >记 Intel 的 31.0.101.5186 版本驱动带崩 WPF 程序

记 Intel 的 31.0.101.5186 版本驱动带崩 WPF 程序

时间:2024-04-26 09:02:06浏览次数:30  
标签:101.5186 Intel ucrtbase dll 31.0 模块 v0400 wpfgfx

本文记录一个 Intel 显卡驱动问题,暂时只在 Intel UHD Graphics 770 显卡带 31.0.101.5186 版本的显卡驱动时,才概率复现问题

显卡驱动 31.0.101.5186 版本是在 2024.01.24 之前发布的,在出现问题的设备上的表现是,运行任何的 WPF 应用程序,都会闪崩,最多窗口创建出来,但是没有任何窗口内容,是一片黑,甚至很多时候都看不见窗口

通过事件查看器能够看到大概如下的错误日志信息内容大概如下

错误应用程序名称: 林德熙.exe,版本: 2.0.12.0,时间戳: 0xce4c9261
错误模块名称: ucrtbase.dll,版本: 10.0.22621.2506,时间戳: 0x097c794c
异常代码: 0xc0000409
错误偏移量: 0x000000000007f61e
错误进程 ID: 0x0x4E80
错误应用程序启动时间: 0x0x1DA78089FE8C794
错误应用程序路径: C:\lindexi\Application\林德熙.exe
错误模块路径: C:\Windows\System32\ucrtbase.dll
报告 ID: 10171c9f-c182-410f-bfa9-d162e93a9bae
错误程序包全名: 
错误程序包相对应用程序 ID: 

截图如下

以上信息具备一点点迷惑性,因为报告的错误模块是 ucrtbase.dll 模块。不熟悉 ucrtbase.dll 的伙伴可以在网上搜 ucrtbase.dll 崩溃问题,就会搜出来许许多多和 ucrtbase.dll 相关的信息。但其实这些方向接近全部都是错误的,为什么这么说呢?因为 ucrtbase.dll 是 ucrt 库,全称是 Universal C Runtime 是 Win 下的 C 标准库,基本上可以认为这是一个十分稳定的模块,真要有出错也是上层传了很离谱的参数或调用形式十分诡异才可能出错,以下是微软官方文档对 UCRT 的描述:

The Microsoft C Runtime Library (CRT) was refactored in Visual Studio 2015. The Standard C Library, POSIX extensions and Microsoft-specific functions, macros, and global variables were moved into a new library, the Universal C Runtime Library (Universal CRT or UCRT). The compiler-specific components of the CRT were moved into a new vcruntime library.

那为什么会看到这个错误日志里面的 错误模块 是 ucrtbase.dll 呢?通过我从伙伴们拿到的 DUMP 进行分析可以知道,其实是因为 UCRT 提供了 abort 方法,这个方法用于让进程崩溃退出,导致了最后的崩溃点记录在 ucrtbase.dll 模块。这个 abort 方法是用在当应用程序的代码逻辑发现出现了严重的异常问题,需要让进程崩溃时调用的,一旦调用了这个 abort 方法,那进程将会崩溃掉

比方当前遇到的 Intel 驱动相关模块内部出现了奇怪的问题,驱动模块决定让进程崩溃掉,所采用的方法就是间接调用了 ucrtbase.dll 的 abort 方法

通过将 Dump 文件拖入到 VisualStudio 进行混合调试分析,可以看到以下的调用堆栈

>	ucrtbase.dll!abort()
 	ucrtbase.dll!terminate()
 	ucrtbase.dll!FindHandler<__FrameHandler4>()
 	ucrtbase.dll!__InternalCxxFrameHandler<class __FrameHandler4>(struct EHExceptionRecord *,unsigned __int64 *,struct _CONTEXT *,struct _xDISPATCHER_CONTEXT *,struct FH4::FuncInfo4 *,int,unsigned __int64 *,unsigned char)
 	ucrtbase.dll!__CxxFrameHandler4()
 	ntdll.dll!RtlpExecuteHandlerForException()
 	ntdll.dll!RtlDispatchException()
 	ntdll.dll!KiUserExceptionDispatch()
 	KernelBase.dll!RaiseException()
 	igd12um64xel.dll!00007ffcc094a65f()
 	igd12um64xel.dll!00007ffcc0b51646()
 	igd12um64xel.dll!00007ffcc0a54e21()
 	igd12um64xel.dll!00007ffcc088b3cc()
 	igd12um64xel.dll!00007ffcc0851271()
 	igd12um64xel.dll!00007ffcc0850bea()
 	igd12um64xel.dll!00007ffcc086fd57()
 	igd12um64xel.dll!00007ffcc086f4e6()
 	D3D12Core.dll!NDXGI::CDevice::CreateDriverInstance(void *,void *,void *,enum D3D12DDI_CREATE_DEVICE_FLAGS)
 	D3D12Core.dll!CDevice::LLOCompleteLayerConstruction(void)
 	D3D12Core.dll!NDXGI::CDevice::LLOCompleteLayerConstruction(void)
 	D3D12.dll!00007ffce2a15bae()
 	D3D12Core.dll!D3D12CoreCreateLayeredDevice()
 	D3D12Core.dll!D3D12CoreCreateDevice()
 	D3D12Core.dll!D3D12ValidateAndCreateDevice()
 	D3D12.dll!00007ffce2a16c5b()
 	D3D12.dll!00007ffce2a1662e()
 	d3d9on12.dll!00007ffce28f4ae0()
 	d3d9on12.dll!00007ffce296df7b()
 	d3d9.dll!CreateDeviceLHDDI()
 	d3d9.dll!D3D9CreateDirectDrawObject()
 	d3d9.dll!FetchDirectDrawData()
 	d3d9.dll!InternalDirectDrawCreate()
 	d3d9.dll!CEnum::CEnum()
 	d3d9.dll!Direct3DCreate9Impl()
 	d3d9.dll!Direct3DCreate9Ex()
 	wpfgfx_v0400.dll!CD3DModuleLoaderInternal::CreateD3DObjects(struct IDirect3D9 * *,struct IDirect3D9Ex * *)
 	wpfgfx_v0400.dll!CDisplaySet::Init(void)
 	wpfgfx_v0400.dll!CDisplayManager::CreateNewDisplaySet(unsigned long,unsigned long,class CDisplaySet const * *)
 	wpfgfx_v0400.dll!CDisplayManager::DangerousGetLatestDisplaySet(class CDisplaySet const * * const)
 	wpfgfx_v0400.dll!CMILFactory::GetCurrentDisplaySet(class CDisplaySet const * *)
 	wpfgfx_v0400.dll!CMILFactory::UpdateDisplayState(bool *,int *)
 	wpfgfx_v0400.dll!CComposition::ProcessComposition(bool *)
 	wpfgfx_v0400.dll!CComposition::Compose(bool *)
 	wpfgfx_v0400.dll!CPartitionThread::RenderPartition(class Partition *)
 	wpfgfx_v0400.dll!CPartitionThread::Run(void)
 	wpfgfx_v0400.dll!CPartitionThread::ThreadMain(void *)
 	kernel32.dll!00007ffd129a257d()
 	ntdll.dll!RtlUserThreadStart()

可以看到实际的错误模块是 igd12um64xel.dll 模块,这是一个 Intel 驱动相关的模块,这个模块触发了 KernelBase.dll 的 RaiseException 方法,证明出现了异常。接着这个异常没有人处理,最后进入了 ucrtbase.dll 的 terminate 方法,再进入 abort 方法让进程崩溃

在 WPF 的 gfx 层的 CD3DModuleLoaderInternal::CreateD3DObjects 方法里面,将会调用 d3d9.dll!Direct3DCreate9Ex 方法,这是一个非常正常的创建 D3D9 的方法,在 d3d9.dll 的底层将会使用 d3d9on12.dll 模块进入到 D3D12.dll 里面,紧接着碰触了 Intel 的驱动模块,最后在 Intel 驱动模块抛出异常崩掉

换句话说就是以上的错误内容和 ucrtbase.dll 没有任何关系,真正的错误点是 igd12um64xel.dll 模块

我将此问题报告给到 WPF 官方,详细请看 https://github.com/dotnet/wpf/issues/8920

但预计此问题和 WPF 毫无关系,完全属于 Intel 的问题

另外,现在 2024.03.17 最新 Intel 驱动是 31.0.101.5379 版本,如遇到问题还请大家尝试更新一下显卡驱动

额外,还有伙伴来和我报告说,他的应用程序只要包含中文名就能遇到相同的错误堆栈,只要改成英文名就没有问题,这也很有趣。如果大家遇到类似的问题,不妨看看是不是名称带上中文名了,试试给他换成英文再试试。那位伙伴说只要 exe 的名称是英文的,不带中文的就可以正常运行,所在文件夹随意,所在文件夹路径带上中文是可以的。详细关于中文名无法启动问题,请参阅 WPF软件因中文名无法启动,原因竟是英特尔驱动 – 晨旭的博客

以上提到的包含中文名就崩溃的问题,根据晨旭大佬在GitHub上的记录,已在 Intel 的 31.0.101.5379 版本驱动修复

标签:101.5186,Intel,ucrtbase,dll,31.0,模块,v0400,wpfgfx
From: https://www.cnblogs.com/lindexi/p/18079544

相关文章

  • 只要2599元!Intel笔记本旗舰i9-13980HX搬上桌面:史上最强mATX小板
    这两年出现了不少集成Intel、AMD笔记本移动处理器的桌面主板,深圳尔英(Erying)更是首次将Intel13代酷睿HX系列放在了mATX小主板之上,标准的244x244毫米尺寸。新板子隶属于PoleStar极星系列,别看面积不大,配置却相当彪悍,比如10相供电电路和一体式散热装甲、四个4针风扇插针,可控制......
  • mac intellij idea卡顿排查解决
    最近我的idea异常卡顿,一顿谷歌查找后,解决。如下1.调整idea的JVM内存 Help->EditcustomVMOptions-Xms2048m-Xmx2048m-XX:ReservedCodeCacheSize=512m-XX:+IgnoreUnrecognizedVMOptions-XX:+UseG1GC-XX:SoftRefLRUPolicyMSPerMB=50-XX:+UseStringDeduplication-XX:AutoBoxC......
  • intel网卡MAC地址刷写方法
    准备一个优盘,格式化为FAT32或FAT格式。将eeupdate64e.efi文件拷入U盘根目录中。服务器插U盘开机上电,通过F11键启动菜单选择从UEFIShell启动;输入blk0:进入优盘(一定要带冒号);查看当前网卡端口列表,键盘输入eeupdate64e.efi,然后按ENTER键;其中IntelI350为集成网卡......
  • Proxmox VE 7.x ,8.x 安装 NVIDA GRID vGPU 以及 Intel SR-IOV vGPU,一键安装脚本
    在Gitee上创建了一个项目。包括了NVIDIA和Intel核显启用vGPU的脚本。 项目地址:https://gitee.com/deskpool/proxmox-vgpu脚本支持ProxmoxVE7.x和8.x,支持NVIDAGRIDvGPU和   IntelSR-IOVvGPU。 介绍ProxmoxVE上支持vGPU的脚本。包括NVIDAGRIDvGP......
  • IntelliJ IDEA2021.3.1 使用 MybatisCodeHelperPro插件
    摘自:https://blog.csdn.net/weixin_44321065/article/details/132576008一、下载下载破解后的MybatisCodeHelperPro的V3.2.2版本V3.2.2-CSDN或者V3.2.2-Gitee二、应用将下载下来的Zip文件放到电脑上的某个位置(最好放在Idea管理插件的plugins下)然后自行搜索Idea......
  • Intel MacBook Pro+macOS 14配置Games101实验环境
    参考:求一个games101图形学课程的环境配置教程,最好能够简单易懂,CSDN教程根本看不懂什么意思?-不泊的回答-知乎https://www.zhihu.com/question/459126051/answer/3420947842macos现在怎么装homebrew?-MyloZ的回答-知乎https://www.zhihu.com/question/340411846/answe......
  • 在Intellij IDEA中使用Debug
    Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。所以学习下如何在IntellijIDEA中使用好Debug,主要包括如下内容:......
  • 为 .NET 安装本地化的 IntelliSense 文件
    为.NET安装本地化的IntelliSense文件先下载文件后解压,  打开文件夹后复制到对应的C盘文件夹中(这需要注意的是若安装多个Sdk需要复制多次重新启动项目即可)  ......
  • intellij idea的快速配置详细使用
    IntelliJIDEA是一款功能强大的集成开发环境(IDE),可以用于开发各种类型的应用程序,如Java、Kotlin、JavaScript、Python等。它提供了许多快速配置选项,可以帮助开发人员更高效地开发代码。在这份文档中,我们将详细介绍IntelliJIDEA的快速配置使用方法,让您快速上手使用它。下载......
  • 快速上手IntelliJ IDEA:配置与使用指南
    引言在当今软件开发领域,选择一款强大而高效的集成开发环境(IDE)对于开发人员来说至关重要。而IntelliJIDEA作为一款功能丰富、强大灵活的Java开发工具,在业界享有盛誉。本博客将带领读者深入了解IntelliJIDEA的配置与使用,旨在让开发者能够快速上手并熟练运用这一工具,提高开......