DRIVR_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS 蓝屏分析

最近在写windows驱动的时候发现有一个偶发蓝屏现象,打了一个full dump。记录分析的流程,便于以后查阅。

蓝屏

1 由上面的图片可以见到,蓝屏错误码是DRIVR_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS。查询 微软文档,可知该错误表示:驱动程序未能在卸载前取消挂起的操作。初步方向就是:程序卸载的时候有一些操作正在执行中,没等操作执行完驱动就退出了。
chatgpt回答如下:

DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS 是一个 Windows 操作系统的蓝屏错误代码,表示驱动程序卸载时存在未取消挂起操作的错误。
通常情况下,在卸载驱动程序之前,需要确保所有正在进行的操作都已经完成或被取消。否则,可能会导致错误的操作或系统崩溃等问题。如果驱动程序卸载时存在未取消挂起操作,就会触发 DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS 错误,并导致系统崩溃。
为了避免这种错误,驱动程序在卸载之前必须正确处理所有正在进行的操作,并将它们取消或等待它们完成。在取消挂起操作时,应该使用正确的同步机制,以避免竞态条件和其他同步问题。
如果发生了 DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS 错误,可以尝试以下几种方法来解决问题:
检查驱动程序的代码,确保在卸载之前正确处理所有正在进行的操作,并将它们取消或等待它们完成。需要检查所有可能导致挂起操作的代码路径,并确保在适当的时间取消或等待这些操作。
使用正确的同步机制来避免竞态条件和其他同步问题。在取消或等待挂起操作时,应该使用适当的同步机制,例如互斥量、信号量、事件等,以确保线程安全和正确性。
使用调试工具来分析错误。可以使用 Microsoft 的调试工具来分析 DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS 错误,以确定错误的原因和位置。例如,可以使用 Windows 调试器 (WinDbg) 或 Visual Studio 调试器来分析错误。
更新驱动程序或操作系统。如果 DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS 错误是由驱动程序或操作系统的 Bug 导致的,可以尝试更新驱动程序或操作系统来解决问题。
需要注意的是,DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS 错误可能会导致系统崩溃,因此需要尽快解决问题,以确保系统的稳定性和安全性。

2 用windbg打开memory.dmp,执行!analyze -v,可以看到错误堆栈如下所示。
在这里插入图片描述

可以看到此时驱动已经被卸载掉(Unloaded状态)了,遂利用ida计算驱动基址+偏移可得如下
在这里插入图片描述
查看源码可得崩溃函数是KernelApcInjectCallback,也就是apc的回调函数。
KeInitializeApc(
pInjectApc, (PKTHREAD)pThread,
OriginalApcEnvironment, &KernelApcInjectCallback,
NULL, (PKNORMAL_ROUTINE)(ULONG_PTR)pUserFunc, UserMode, Arg1);

3 利用!process查看当前进程的信息,可以看到是git.exe。
进程信息
再!process bc18查看详细信息,观察堆栈,正是上面!analyze -v分析出来的异常堆栈。
在这里插入图片描述

4 根据上面信息就可以基本可以认为是,当git做apc注入的时候,用户做了手动卸载驱动的操作。此时由于apc注入的操作已经被挂起了,所以直接退出驱动会导致异常。至于为什么是偶发,是因为卸载驱动不是一个经常性操作,而且刚好碰上有进程注入未执行完的操作的概率较低。

5 基于这个结论,尝试复现该问题。在KeInitializeApc之前 和 KeInsertQueueApc之后分别执行休眠5秒的操作(目的是为了阻塞这个操作)。重新安装驱动,执行一个git clone操作,然后卸载驱动,等待一会之后发现,蓝屏了。重复多次,稳定复现。如此可得出结论:是因为该线程操作未正确取消导致的问题。
复现蓝屏
6 解决方法:添加计数器机制(或者其它同步机制)。在DriverUnload的时候判断该计数器的值,如果不满足,则等待条件满足之后再继续往下执行。

7 总结:驱动和进程不同,进程崩溃只会影响进程本身,而且也非常好调试。驱动则是难调试,问题难复现,所以在写驱动时一定要小心。openedr是个不错的参考对象,edrdrv用C++风格封装了一层,对这种同步问题,以及内存管理问题都做了一层兜底。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13584.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI选股】如何通过python调用通达信-小达实现AI选股(量化又多了一个选股工具,原文Chrome浏览器请改为Edge浏览器)

文章目录 前言一、通达信-小达是什么?二、使用步骤1. 引入browser_cookie3库2. 通达信-小达 AI选股源代码 总结 前言 ChatGPT火遍网络,那么有没有可以不用写公式就可以实现AI选股的方法?答案是有,今天我们就来试试通达信的小达&a…

Opera One将取代 Opera 浏览器

导读Opera 日前推出了一款名为 Opera One 的新浏览器,该浏览器正处于开发者预览阶段,用户可以访问官网下载试用(链接)。这个浏览器的终极目标是在今年晚些时候取代其当家的 Opera 浏览器。 Opera One 遵循 "模块化设计理念&q…

ChatGPT引发新思考, 软件工程师们该如何应对?

语言模型ChatGPT最近火爆科技圈,仅两月时间,其月活跃用户数已突破1亿,成为史上用户增长速度最快的消费级应用程序。这款AI语言模型,让撰写邮件、论文、脚本,制定商业提案,创作诗歌、故事,甚至敲…

ChatGPT + Python = 王炸!

重磅,ChatGPT再次迎来里程碑式更新! ChatGPT在上月推出了令人瞩目的插件功能,如果把ChatGPT看做是智能手机,那插件就相当于应用商店。现在的ChatGPT像一个“万能”的超级工具,善用它可以带来很多好处。 就与多年前移…

chatgpt赋能Python-python_aipocr

Python AIPocr:一款优秀的OCR识别库 Python AIPocr是一款基于Python语言的OCR识别库,具有许多强大的功能,可用于图像的字符和文本识别。在当前的人工智能应用时代,OCR技术的应用越来越广泛,Python AIPocr可以帮助开发…

大模型圆桌,ChatGPT、文心一言、讯飞星火如何看待「泛自动驾驶」

2022年11月30日,ChatGPT横空出世,掀开了人工智能认知大模型的进化爆发序幕。半年以来,国内外科技公司不甘落后,相继推出各自的认知模型,试图在巨大时代浪潮里分得一杯羹。 那么,层出不穷的大模型如何看待人…

ChatGPT:新晋CV工程师

在短短的两个星期内,ChatGPT 迅速成为公众聊天的焦点。超过一百万的人与OpenAI的新聊天机器人“交谈”,让它写诗和大学论文,生成创意食谱,创建虚拟机…它也被用来撰写新闻文章和YouTube视频的介绍。 作为计算机视觉公司的机器学习…

ChatGPT版必应发飙!怒斥人类:放尊重些

金磊 发自 凹非寺量子位 | 公众号 QbitAI 谁能想到,ChatGPT版必应竟能像人一样发脾气! 事情是这样的。 前两天一个华人小哥不是“黑”了ChatGPT版必应,扒出它的小名叫Sydney嘛。 这可把一众网友们兴奋坏了,摩拳擦掌地准备去调戏它…

微软内战打响,ChatGPT对决新必应!13个灵魂拷问,新老AI各有所长

视学算法报道 编辑:编辑部 【导读】新必应和ChatGPT大PK,谁更厉害?记者亲测,新必应似乎比ChatGPT表现更好。 根据微软的说法,「新必应」搜索引擎是由「比ChatGPT更强大」的OpenAI技术驱动的。 因此,新必应…

ChatGPT与DataFocus:革新企业决策分析的数据分析工具

ChatGPT和Datafocus是目前市场上非常火热的两个数据分析工具,那么这两者之间有何联系呢?本文将着重探究ChatGDP和Datafocus搜索式BI这两个工具的联系及合作。 一、引言 随着大数据时代的到来,对于大数据的处理和分析变得越来越重要。为了更…

chatgpt赋能python:Python自动录音——让录制音频更加轻松自如

Python自动录音——让录制音频更加轻松自如 介绍 在现如今的数字时代,音频已经成为了人们生活中不可或缺的一部分。无论是在语音助手、在线教育还是音乐领域,音频的使用越来越普遍。然而,在某些情况下,我们可能需要录制一些音频…

chatgpt赋能python:Python录屏录音介绍

Python录屏录音介绍 在日常工作和学习中,录制屏幕和录制音频是一件很常见的事情。Python语言拥有强大的生态系统和第三方库支持,也可以轻松实现录制屏幕和录制音频的功能。本篇文章将介绍如何使用Python语言实现录屏录音功能。 Python录屏 录制屏幕可…

chatgpt赋能python:Python录音:介绍和使用方法

Python录音:介绍和使用方法 Python是一种高级编程语言,出现了许多支持模块,可用于不同领域中的开发和处理任务。对于音频处理和录音,Python提供了许多用于录制和处理音频的库和模块。在这篇文章中,我们将介绍如何使用…

chatgpt赋能python:PyAudio录音:快速入门指南

PyAudio录音:快速入门指南 PyAudio是一个流行的Python模块,用于录制音频并执行实时处理。它使用了底层音频库,具备可扩展性和灵活性,且可以用于听音乐、语音识别等方面。在本篇文章中,我们将快速入门PyAudio录音&…

宕机超 12 小时,损失过亿,唯品会基础平台负责人被免职!

整理 | 朱珂欣 出品 | CSDN程序人生(ID:coder_life) 对于后端程序员来说,“高并发”并非新鲜的话题,经历过一次服务器宕机,职业生涯才“完整”。 但如果事故超过 12 小时,或许会直接造成职业…

常见分布式锁4:zookeeper 瞬时znode节点 + watcher监听机制,ChatGPT回复的解决死锁的方案

原文地址在这里 临时节点具备数据自动删除的功能。当client与ZooKeeper连接和session断掉时,相应的临时节点就会被删除。zk有瞬时和持久节点,瞬时节点不可以有子节点。会话结束之后瞬时节点就会消失,基于zk的瞬时有序节点实现分布式锁&#x…

如何用ChatGPT设计出可控制的代码?

【编者按】如何训练 ChatGPT 实现自己想要的代码与功能,秘诀就是编写更具交互性和前瞻性的设计提示,本文作者分享了如何利用 ChatGPT 设计出可控制的代码步骤。 原文链接:https://www.friendlyskies.net/maybe/a-quick-way-to-get-more-creat…

使用ChatGPT和EZDML迅速高效生成可运行的软件系统原型

ChatGPT最近很热,其对程序员可以说影响极大,是不得不跟的潮流趋势,因此EZDML新版也把ChatGPT的支持加上了,可以在几分钟内按您的意思生成一个数据模型,再搭载使用EZDML自带的代码模板,能快速生成可真正运行…

2023年最新CSA研讨会-ChatGPT的安全影响白皮书下载

万物相生相成。以ChatGPT为代表的生成式人工智能,为网络安全领域曾经难解的问题,提供全新解决思路,也伴生出令人担忧的安全问题。 出现矛盾意味着新的突破正要诞生。对于网络安全厂商来说,如何在保证数据安全、合规的基础上&#…

文艺一言 VS chatGPT

最近百度文心一言新闻发布会召开,会上正式推出了百度版ChatGPT——文心一言。号称中国版的chatgpt,好不好用我不知道,毕竟现在还是内测期间,得有邀请码才能用。但是从发布会开始后,百度集团股价出现持续下挫&#xff0…