FltRegisterFilter
调用失败的处理
今天准备调试昨天的一个mini filter
的时候,突然系统蓝屏了,感觉很奇怪,因为在以前是没有问题,而且这几天也没有改过代码,怎么突然有问题了呢?于是启动
windDBG
进行调试。
一 调试
在DriverEntry
里下了断点,运行到
FltRegisterFilter
时,返回值
status
给出了错误,是一个负数,但是这个数值是十进制的,显示的格式是
On-1*********
。不知道这样格式的数据代表什么样的错误。
在WDK
的文档中,我查了一下,
FltRegisterFilter
的返回值错误有如下的:
1.
STATUS_INSUFFICIENT_RESOURCES
内存分配失败
2. STATUS_INVALID_PARAMETER
有两种情况,一个是传入的第二个参数中的Version
没有设置成
FLT_REGISTRATION_VERSION
,一个是传入的第二个参数中的命名提供者函数是一个非法的非
NULL
值。
3. STATUS_FLT_NOT_INITIALIZED
Filter管理器还没有初始化就调用注册函数。需要确保
filter
管理器已经作为一个驱动启动了。
二 获取返回值
由于在调试器中返回值是比较奇怪的格式:On-1*********
。把后边的数当作十进制的数换算成
16
进制的,没有找到这个错误。在
ntstatus.h
中我找到了
STATUS_FLT_NOT_INITIALIZED
的值,定义是:
#define STATUS_FLT_NOT_INITIALIZED ((NTSTATUS)0xC01C0007L)
在WDK
文档中说过的其他值也找到了定义,但就是没有办法找到调试中返回的这个
status
值。
既然在WinDBG
中是显示成十进制的,那么联系到
Visual Studiao
可以让变量按照
16
进制方式显示,是不是也可以让
WinDBG
显示
16
进制格式的值?我查了一下
WinDBG
的文档,介绍了
n
可以用来设置。但是试了一下发现没有效果,返回的
status
值还是那样的格式,没有变化。
这样的办法不行,又想了一个办法:看内存。把status
的内存显示出来,那么就能获取返回值的
16
进制表示。于是在
WinDBG
的帮助文件中查了一下
d
的用法,感觉
dyd
符合我的要求,显示了一下
status
,出来一个二进制的显示列表。粗看一下,没有搞明白。接着用
dd
,终于露出了
status
的庐山真面目,是
C0000034
。
三 理解返回的错误值
在知道了错误返回值后,终于找到了它的定义:
#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034L)
不过这个返回值如果表示对象的名字没有发现,那么还是很令人很困惑的,因为在这里没有涉及到什么对象,不明白返回值里说的对象是指哪个对象。立即上Google
搜索了一把,嘿嘿,出来了,有个人在邮件列表中问到了跟我现在一模一样的问题,后边有人回答他了,说是在
minifilter
装载的时候,默认实例的名字设置不对,没有找到
。
难道是我修改的filter
的安装
inf
文件中设置有误,马上查看,确实是。改之,问题解决。
分享到:
相关推荐
基于springboot的java毕业&课程设计
基于springboot的java毕业&课程设计
【优化覆盖】算术算法求解传感器覆盖优化问题【含Matlab源码 2436期】.zip
【优化覆盖】蜣螂算法DBO求解无线传感器WSN覆盖优化问题【含Matlab源码 3567期】.zip
FusionCompute修改VRM节点IP地址 该任务指导工程师对VRM节点的IP地址、主机的管理IP地址进行修改。 执行该任务时应注意: • 建议同时修改VRM和主机的管理IP。如果修改了VRM的IP,会导致本地PC与VRM的连接短暂中断。 • 修改前应已完成网络规划,并在FusionCompute中确认VRM节点运行正常,所有主机运行正常(无处于异常或维护状态的主机)。 • 如果跨网段修改IP地址时,则应注意在完成所有节点IP地址的修改后,在相应的汇聚交换机进行配置,保证修改后的主机IP地址、VRM节点及本地PC之间能进行正常通信。相关交换机配置命令,请参考交换机配置样例。 • 如果跨网段修改管理IP地址,同时涉及修改管理VLAN,请先修改管理平面VLAN,待修改完成,且各节点与VRM网络通信正常后,再进行修改VRM IP地址和主机IP地址的操作。
基于springboot的java毕业&课程设计
MySQL8.4.0 LTS(mysql-server_8.4.0-1ubuntu22.04_amd64.deb-bundle.tar)适用于Ubuntu 22.04 Linux (x86, 64-bit)
【优化参数】遗传算法求解管道调节阀参数整定优化问题(含压力、阀门高度)【含Matlab源码 4165期】.zip
课设毕设基于SSM的汉服文化平台网站 LW+PPT+源码可运行.zip
基于springboot的java毕业&课程设计
基于springboot的java毕业&课程设计
java毕业设计 基于springboot Vue前后端分离自习室预约系统源码+使用文档+全部资料(优秀项目).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。java毕业设计 基于springboot Vue前后端分离自习室预约系统源码+使用文档+全部资料(优秀项目).zipjava毕业设计 基于springboot Vue前后端分离自习室预约系统源码+使用文档+全部资料(优秀项目
最简单的 UDP-RTP 协议解析程序
人工智能换脸技术在近年来迅速发展,被广泛用于个人学习和娱乐目的。这项技术能够将一个人的脸部特征转移到另一个人的脸上,产生逼真的视觉效果。在学术界和工业界,AI换脸技术被用于电影特效、数字双胞胎生成和面部动画制作等领域。然而,对于普通用户而言,这项技术提供了一种有趣的方式来探索虚拟身份和玩转创意思维。 尽管AI换脸技术提供了令人惊叹的视觉效果,但也存在一些伦理和法律问题需要引起注意。特别是在隐私和虚假信息方面,滥用这项技术可能会导致潜在的风险和误解。因此,对于个人用户,使用AI换脸技术时需要保持理性和正确的态度,避免将其用于不当用途,包括欺骗、恶作剧或其他违法活动。 对于有需要的人群,希望他们能够理解AI换脸技术的局限性和使用范围。这项技术的目的在于推动科技发展和提升用户体验,但并非用于损害他人利益或伪造虚假信息。在个人学习和娱乐过程中,可以通过实践和研究更好地理解人工智能技术的潜力和局限性,促进技术的健康发展和应用。 总的来说,AI换脸技术作为一种前沿技术,为个人学习和娱乐提供了新颖且有趣的体验。然而,为了避免潜在风险和误解,用户应谨慎使用并遵循道德准则和法律规定。只有在合法、道
4.0 入住喷绘(转曲).cdr
基于springboot的java毕业&课程设计
【优化布局】免疫算法求解充电站最优布局【含Matlab源码 2539期】.zip
基于springboot的java毕业&课程设计
智慧藏文化博物馆建设方案PPT(79页)
基于springboot的java毕业&课程设计