WIndows内核模式驱动程序运行环境

本文详细介绍了Windows内核模式驱动程序的运行环境,包括系统进程环境、特定用户线程环境和任意用户线程环境。驱动程序的运行环境对其性能和资源开销有直接影响,特别是其派遣例程的上下文。当用户直接访问设备时,驱动程序的派遣例程将在发出请求的用户线程上下文中运行,反之,如果请求经过高层驱动程序转发,可能会在任意线程上下文中运行,这会影响驱动程序的操作,如文件对象和句柄的处理。
摘要由CSDN通过智能技术生成

        程序运行时所处的环境 即所谓的执行上下文是程序设计中的重要概念。 对于用户线程而言运行环境也就是线程所属进程的环境, 但对于驱动程序这个问题变得非常复杂。通常这是文件系统开发人员所关心的问题,但所有的内核模式驱动程序开发人员都能得益于对运行环境的深入理解并能使驱动程序拥有更高的性能和更低的开销。

        运行环境的概念程序例程的运行环境实际是指其线程和进程的执行环境,在NT系列操作系统中, 这个环境由当前的线程环境块TEB和进程环境块PEB建立。环境中包括虚拟内存设置(包含物理内存页面与虚拟内地址的对应信息)、句柄转换(句柄是基于进程的)、调度器信息、堆栈、通用寄存器及浮点寄存器的状态。对于特定的内核模式例程在什么运行环境下运行这个问题,首先要了解由内核调度器所建立的当前线程是系统中哪一个线程,由于每个线程都只属于一个进程,当前线程决定了当前进程。 这也意味着所有的数据包括句柄、虚拟内存、线程调度器状态、寄存器都是线程和进程唯一的。

        运行环境的种类

        内核模式例程可能运行在三种不同的环境中:系统进程环境(system进程)、一个特定的用户线程(进程)环境、任意用户线程(进程) 环境。 内核模式驱动程序运行时它
的部分代码可能在这三个环境之一运行。例如驱动程序的DriverEntry函数总是运行于一个系统进程上(system)下文中。系统进程上下文没有与之相对应的用户上下文,因此不存在线程环境块TEB也没有用户进程会映射入内核虚拟地址空间的低2GB内。而延时过程调用DPC例程,比如驱动程序为中断服务程序或是定时器溢出函数所设置的DPC例程则运行于一个任意用户线程上下文中。这意味着DPC运行期间当前线程可能是任何一个用户线程并且该线程所属的进程将映射入内核虚拟地址空间的低2GB内。

        驱动程序的派谴例程在什么样的上下文中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值