Windows驱动程序运行上下文简要分析

Windows驱动程序运行上下文简要分析

       Windows驱动程序在内核态执行,作为驱动开发人员,我们有必要对驱动程序的执行环境有所了解,这将有助于我们正确合理地使用系统资源,从而避免产生一些难以检测的bug

 

       总体来说,windows驱动程序运行的上下文环境有如下四类:

1、  请求系统服务线程的上下文

在这种情况下,驱动程序直接在请求系统服务的那个线程上下文执行。由于用户可能请求异步执行,通常只有文件系统驱动程序或者处于文件系统以上的过滤驱动程序才会运行在这个上下文中。在这个上下文中,驱动程序可以访问该用户线程的虚拟地址空间。

 

2、  驱动程序或一些内核组件创建的专用工作线程(worker thread)的上下文

有些情况下驱动程序不能在请求系统服务那个线程的上下文中执行一些操作,因此驱动程序可以创建一个专用的工作线程(通过PsCreateSystemThread()函数),然后驱动程序就运行在这个工作线程上下文来完成这些工作,该专用工作线程是属于一个特殊的系统进程的。

 

3、  I/O管理器创建的工作线程(worker thread)的上下文

在需要确定的线程上下文环境时,我们也可以利用I/O管理器创建的工作线程(也叫系统工作线程)上下文来完成一些I/O操作。要注意的是,一旦我们把I/O请求交给系统工作线程,我们的线程上下文就发生了改变,我们能访问的虚拟地址空间将不同于先前请求I/O那个线程的虚拟地址空间,同时,很多在以前上下文中的有效的资源将不在有效。

 

4、  任意随机线程的上下文

这个上下文最典型的例子就是:当一个硬件中断产生时,如果允许的话,当前处理器执行的线程将被打断执行,而与该中断相联系的ISR将被执行,此时ISR运行的上下文将是不确定的,这就是所谓的任意线程上下文。

任意线程上下文中的很多资源对驱动程序来说都是不可访问的。

你可能感兴趣的:(thread,windows,工作)