wdm设备驱动程序入门

合集下载

WDM驱动

WDM驱动

Windows驱动开发模型WDM学习笔记绪言 (4)1.WDM驱动程序开发基础知识 (5)1.1WDM简介:Win32 Driver Model Win32驱动程序模型 (5)1.2 Win32 API (5)1.3 WDM特性 (5)1.4 WDM工作原理 (6)1.5 WDM与其它驱动程序的比较 (6)2.WDM驱动程序开发环境DDK设备驱动程序开发包 (6)2.1■安装DDK (6)2.1.1.Windows 98 DDK的安装 (7)2.1.2.Windows 95 DDK的安装 (7)2.1.3.NT DDK的安装 (8)2.2 ■构造环境:建立WDM驱动程序构造环境的方法 (8)2.2.1. 用SETENV.bat来安装驱动程序构造环境 (9)2.2.2. 手工运行SETENV.bat (9)2.2.3. 构造WDM驱动程序 (9)2.2.4.构造驱动程序 (9)2.2.5.检查Windows 98 DDK的安装 (9)3.WDM驱动程序的设计与开发 (10)3.1■WDM 驱动程序的运作流程 (10)3.2■驱动程序设计 (10)3.3■驱动程序开发 (11)3.3.l.编写驱动程序框架 (11)3.3.2.测试驱动程序 (11)4.WDM驱动程序编译运行:编译和安装设备驱动程序的方法 (12)4.1■编译设备驱动程序的方法 (12)4.1.1.举例分析 (12)4.1.2.编译的基本步骤 (13)4.2■设备驱动程序的安装和启动 (13)4.2.1.添加注册表中的键值 (13)4.2.2.控制驱动程序的装入次序 (14)4.2.3.驱动程序的Start值 (14)4.2.4.修改注册表的方法 (15)4.2.5.启动设备驱动程序 (15)4.2.6.调试工具 (16)5.wdm驱动开发基础-一些需要注意的问题汇总 (16)5.1注册表的角色 (16)5.2.如何命名注册表键 (16)5.3从用户模式中访问设备键 (17)5.4 函数原型“IN”关键字 (17)5.5 注册设备接口 (18)5.6 初始化设备扩展 (18)5.7 注意侧效 (19)5.8 try-finally中的控制流程 (20)5.9 生成异常 (22)5.10 __Leave语句 (23)5.11 简化页大小 (24)5.12 页故障关于分页 (24)5.13 alloc_text的使用 (25)5.14 关于段布置 (26)5.15 服务函数描述 (26)5.16 ExAllocatePoolWithTag (28)5.17 ExAllocatePool的其它形式 (29)5.18 单链表 (30)5.19 lookaside链表的服务函数 (31)5.20 打开注册表键 (31)5.21 删除子键或键值 (32)5.22 枚举子键或键值 (33)5.23 IRQL限定 (35)5.24 IRQL的明确控制 (35)5.25 自旋锁 (36)6. wdm驱动开发基础代码分析解析 (36)绪言在Windows的不同版本上开发的驱动程序“模型”(模型这个词语应该来源于单词“Mode”。

WDM驱动开发之路(1)

WDM驱动开发之路(1)

WDM驱动开发之路(1)WDM开发之路(1)--驱动开发网WDM教程WDM驱动开发之路写在前面:在专栏的前几期中,我们一起初步学习了vxd的开发技术。

Vxd技术是很深奥的,不是一篇两篇文章能讲清楚,但你已经入了门,剩下的就要看你的修行了。

多看书,多泡论坛(当然是上咱们的驱动开发网论坛了:->),多写程序…我的手不够用了。

功到自然成嘛。

不过话又说回来,vxd只是权宜之计,WDM才符合当今的潮流(程序员都是时髦人士,君不见先是VB、VC然后是asp、JSP、PHP,数也数不过来呀),Win9x寿终正寝时也就是vxd的末日,你不想随它而去吧(开个玩笑),那就随我来。

按笔者的想法,这篇文章写成连载形式,一次讲一个主题,并且必要时带着例子,让大伙step by step地把WDM驱动弄个透底,不想让大家觉得稀里糊涂,也不想让大家觉得白买杂志了。

今天我们一起讨论第一部分,了解篇。

(一)了解篇WDM模型(Windows Driver Model)是微软公司为当前主流操作系统Windows98和Windows 2000的驱动程序设计的一种构架。

它和传统的win3.x和win95使用的vxd的驱动是完全不同的体系结构。

不过对于最终用户来说,WDM驱动程序在Windows98和Windows2000下的表现很相似。

作为驱动开发人员来说,它在两者中有很多的不同。

并且Windows98中的WDM只能算是Windowss2000中的WDM的一个了集。

在Windows98中有一些驱动程序只能使用VXD来实现,如串行通讯驱动等。

要写驱动程序,首先要了解操作系统的结构。

在WDM体系中,windows2000操作系统中是最标准的实现方式,Windows98则是部分兼容WDM结构。

照微软的说法,Windows98和Windows2000 X86(Intel 架构)版本实现二进制码兼容(参见98DDK),Windows2000 x86版本与其它CPU平台版本实现源码级兼容(因为Windows 2000是基本NT相似的结构,最底层是硬件抽象层HAL,所有我们相信它们之间能源码级兼容)。

关于Windows WDM设备驱动程序

关于Windows WDM设备驱动程序
2.Operate the hardware using WDM in kernel mode.As we know, we have no privilege to operate the hardware resource (i.e. physical memory, disk, port(s))directly in user mode.
关于Windows WDM设备驱动程序
描述:
1 WDM支持哪些操作系统(起码要求说明是否支持WIN XP系列
2 WDM可以实现哪些方面的功能
3 使用WDM是否可以实现全局控制WINDOWS
4 WDM和VXD的区别
5 WDM程序的载体的存在方式(即DLL、EXE、DRV、VXD等)
6 WDM程序的开发工具(如用VC++应创建哪类工程)
3.Oh, you mistake the architecture of the WDM in OS.Your driver in WDM mode is only ONE part in the large operation system.You could say "affect" not "control" system kernel, because it has ring0 privilege.
"NT System Drivers" are used by Windows NT, Windows 2000 and to a degree by Windows 98 (in a slightly newer form known as "Windows Driver Model"drivers). They execute at kernel mode and, like VxDs, use an entirely different API that user mode application code. They consist entirely of 32-bit code. The documentation included with the Windows NT, 2000 and 98 DDKs describes the API calls used by NT system and WDM drivers. "Dynamic Link Libraries", or DLLs, are basically normal application code packaged into a dynamically-loadable module. They execute at user mode and consist entirely either of 16- or 32-bit code and use the normal Windows API (they *can* call CreateWindow(), etc.). They are loaded by applications or other DLLs and export functions (usually by name) that can be called directly.

WDM入门

WDM入门

WDM驱动程序入门(1)-Hello WDMWDM驱动程序是一种很新的东西,相信很多人都跟我一样,对它很感兴趣,但是又找不到学习的切入点。

究其原因,还是因为WDM是一种非常“死板板”的程序,它一运行就是工作在系统的底层RING 0处,提供各种接口给应用程序调用。

也正因为如此,它不像普通的应用程序一样,可以很快地上手——更多的时候,你是在阅读它的技术资料和各种接口信息,你还要非常地熟悉系统底层的工作原理,否则一个不小心,就“蓝屏”了,呵呵——话说回来,写驱动程序的时候,死机是家常便饭。

因此很多人都对WDM望而生畏了。

回想一下,我刚开始学WDM的情形还历历在目——看书看了整整3天,但是看完之后好像跟没看也差不了多少,还是不知道怎么入门,甚至连怎么写一个“Hello World”都不知道——后来才知道其实WDM是没有所谓的“Hello World”程序的,唉,真是痛苦啊,这主要还是因为网络上的WDM资料太少造成的。

为了不让大家重蹈我的覆辙并对WDM有个感性的认识,在此我给出一个最简单的完整的WDM框架,并附有注释,姑且可以算是一个入门的“Hello World”吧。

废话少说,让我们马上开始研究,要求读者已安装DDK 2000。

(在Win98中我还没有测试过,不清楚是否能正常运行)/***************************************************************程序名称:Hello World for WDM文件名称:HelloWDM.cpp作者:罗聪日期:2002-8-16***************************************************************///一定要的头文件,声明了函数模块和变量:#include "HelloWDM.h"/***************************************************************函数名称:DriverEntry()功能描述:WDM程序入口***************************************************************///extern "C"是必须的,表示“用C链接”。

Windows下设备驱动程序的开发方法

Windows下设备驱动程序的开发方法

目录一、驱动开发环境的搭建 (1)1.1 关于DDK (1)1.2 关于驱动程序的编译 (1)1.3关于驱动程序的运行 (2)二、驱动程序的结构 (3)2.1 驱动程序的头文件 (3)2.2 驱动程序的入口点 (3)2.3 创建设备例程 (4)2.4 卸载驱动例程 (5)2.5 派遣例程 (6)三、编写驱动程序的基础知识 (6)3.1 内核模式下的字符串操作 (6)3.2 内核模式下各种开头函数的区别 (8)3.3 一个示例程序 (10)3.4 补充说明 (10)四、在驱动中使用链表 (10)4.1 内存的分配与释放 (10)4.2 使用LIST_ENTRY (12)4.3 使用自旋锁 (12)五、在驱动中读写文件 (15)5.1 使用OBJECT_ATTRIBUTES (15)5.2 创建、打开文件 (16)5.3 读写文件操作 (16)5.4 文件的其它相关操作 (18)六、在驱动中操作注册表 (18)6.1 创建、打开注册表 (19)6.2 读写注册表 (20)6.3 枚举注册表 (21)七、在驱动中获取系统时间 (21)7.1 获取启动毫秒数 (21)7.2 获取系统时间 (22)八、在驱动中创建内核线程 (23)8.1 创建内核线程 (23)8.2 关于线程同步 (24)九、初探IRP (25)9.1 IRP的概念 (25)9.2 IRP的处理 (26)9.3 IRP派遣例程示例 (27)十、驱动程序与应用层的通信 (29)10.1 使用WriteFile通信 (29)10.2 使用DeviceIoControl进行通信 (32)十二、驱动程序开发实例 (33)12.1 NT驱动程序 (33)12.2 WDM驱动程序 (35)十三、参考资料 (41)一、驱动开发环境的搭建1.1 关于DDK开发驱动程序必备的一个东西就是DDK(Device Development Kit,设备驱动开发包),它跟我们在ring3常听到的SDK差不多,只不过它们分别支持开发不同的程序而已。

WDM驱动程序设计

WDM驱动程序设计

用Setup程序安装DDK,步骤为:
(1)运行Windows 98 DDK中的SETUP.EXE文件,安装Windows 98 DDK到C:\98DDK。
(2)安装VC++ 5.0到C:\VCPPDEV。
(3)修改CONFIG.SYS增大环境变量空间。在CONFIG.SYS文件最后加入一行:
(4)安装VC++ 5.0到C:\Program Files\DevStudio\VC。
(5)建立C:\MSTOOLS\BINW16目录,拷贝资源编译器。
Windows 95 DDK需要一个能将Win32资源的源文件编译成16位资源的资源编译器。如果有Win32 SDK,可以将BINW16目录下的文件直接拷贝到C:\MSTOOLS\BINW16;如果没有Win32 SDK,则可以使用第三方的资源编译器,这里以使用Borland的资源编译器为例:
另外值得注意的是,一个硬件只允许有一个PDO,却可以拥有多个FDO,在驱动程序中直接操作的不是硬件而是相应的PDO与FDO。在Ring-3与Ring-0通讯方面,系统为每一个用户请求打包形成一个IRP结构,将其发送至驱动程序,并通过识别IRP中的PDO来区别是发送给哪一个设备的。另外,在驱动程序的加载方面,WDM不通过驱动程序名称识别,而是通过一个128位的GUID来实现驱动程序的识别。
call ddkenv.bat (DDK的环境)
call vcvars32.bat (VC++的环境)
C:\MASM611\BINR\NEW-VARS.BAT
C:\DDK\DDKINIT.BAT 32 BASE
C:\Program Files\DevStudio\VC\bin\

基于Windows开发WDM设备驱动程序的方法

基于Windows开发WDM设备驱动程序的方法

基于Windows2000开发WDM设备驱动程序的方法摘要:本文介绍了Windows 2000 WDM驱动程序结构及其原理,给出一个驱动程序的例子关键词: WDM 驱动程序1.概述引入了全新的WDM (Win32 Driver Model)的驱动程序架构,说是新技术,其实早在1997年Microsoft就提出了该项技术并在Windows 98中得到了充分的应用,换句话说,Windows 98也支持WDM。

这样WDM就成为了一个跨平台的驱动程序模型不仅如此WDM驱动程序还可以在不修改源代码的情况下经过重新编译后在非Intel平台上运行。

2.WDM设备驱动程序的特点和原理2.1通用驱动程序对基本上一样的硬件,因为他们共享一个总线或完成类似的任务,设备驱动程序可以使用这些标准的驱动程序功能,使公共总线的共享容易,且更容易写出新的驱动程序,总线驱动程序,如USB、1394,和类驱动程序。

(1)Win32程序接口:可以使用Win32函数像访问文件那样访问设备CreateFile() 、Closehandle()、ReadFile()、WriteFile()、DeviceIoControl ()用于发出特殊请求,可发送数据给驱动和从驱动得到数据,IOCTL代码可以是预先定义的也可是自己定义的。

(2)创建设备大多数WDM设备对象都是在PnP管理器中调用AddDevice入口时创建,这个PnP 例程在插入新设备和安装Inf文件时被调用,此后一系列的PnP IRP 被发送到驱动程序,指示设备应如何启动和查询它的功能2.2WDM-的工作原理WDM是在NT 4.0驱动程序结构上发展起来的,所以它与NT 4.0驱动程序极为相似,但是它却有了本质上的提高,比如它支持USB、IEEE 1394、ACPI等全新的硬件标准。

虽然Windows 98与Windows 2000都支持WDM,可是并不意味着Windows 98下的VxD可以在 Windows 2000下运行,而NT下的WDM却可以在Windows 98下运行。

开发WDM型USB设备驱动程序

开发WDM型USB设备驱动程序

开发WDM型USB设备驱动程序USB设备驱动程序开发⼯具开发USB设备驱动程序需要专门的开发⼯具,⽬前应⽤⼴泛的⼯具主要有两⼤类。

⼀类是Microsoft公司提供的Windows DDK(Device Driver Kit)。

它有Windows 98 DDK 和Windows 2000 DDK两个版本。

Windows 98 DDK能够开发Windows 95/98/Me/NT下的VxD、KMD和WDM驱动程序。

Windows 2000 DDK 能够开发Windows 98/Me/NT/2000下的KMD和WDM驱动程序。

由于DDK基于汇编语⾔的编程⽅式和内核模式的调⽤,对没有深厚的OS原理和编程⽔平的⼈员来说,任务相当艰巨。

另⼀类是NuMega公司提供的DriverStudio,它是⼀个⼤的开发⼯具包,包含VtoolsD、SoftICE和DriverWorks等开发⼯具。

VtoolsD开发包提供了对VxD编程的C/C++类库⽀持,利⽤VtoolsD中的QuickVxD⼯具可以快速⽣成VxD的C/C++代码框架,开发者可以在此基础上根据各⾃的需要添加⾃⼰的代码。

DriverWorks⽤于开发KMD和WDM驱动程序,并且对DDK函数进⾏了类的封装,从⽽为开发Windows NT、Windows 2000和Widnwos98 WDM设备驱动程序提供了⼀个⾃动化的⽅法。

DriverWorks,提供了VC++下的开发向导Driver Wizard,按照它的提⽰可以迅速地⽣成驱动程序的框架。

这个框架结构提供可以正确执⾏WDM动态环境中IRP的请求,⽽且,也包含⽤于简化系统提供的标准类驱动程序(如HID、流)和总线驱动程序(如PCI和USB)接⼝的类等。

总之,利⽤DriverWorks开发WDM驱动程序,可以⼤⼤简化开发⼈员的⼯作量、缩短开发周期以及降低开发驱动程序的难度。

[1]⽤DriverWorks开发WDM型USB设备驱动程序要想使⽤DriverWorks,必须先安装以下软件:DriverStudio2.5,VisualStudio6.0,以及Windows2000DDK。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设备对象与设备驱动程序关系
每个功能设备对应一个设备对象(设备对象栈为设备对象内部属性), 相同型号的多个功能设备对应多个设备对象。每个设备对象具有不同的私 有属性值(如设备ID)。
相同型号的多个功能设备共用一个过滤驱动程序和功能驱动程序,
即只有一个驱动程序对象。
设备驱动程序与设备关系:
同类中成员函数与类实例关系。
显示驱动程序是用于显示和打印设备的内核模式驱动程 序。 文件系统驱动程序在本地磁盘或网络上实现标准PC文件 系统模型(含多层次目录结构和命名文件概念)。 保留设备驱动程序主要包括Windows NT早期版本的驱动 程序,它直接控制一个硬设备而不用其他驱动程序帮助 ,可以不做修改地在Windows 2000中运行。
驱动程序的AddDevice函数示例:
NTSTATUS AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT pdo) { NTSTATUS status; PDEVICE_OBJECT fdo; status=IoCreateDevice(DriveObject, sizeof(WDM_DEVICE_EXTENSION), NULL, FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo); //在fdo中产生我们的功能设备对象 if (NT_ERROR(status)) return status; ……}
PnP管理器根据需要给设备发送各种PnP IRP
PnP管理器给设备发送“启动设备”PnP IRP,驱动程序将分 配的资源信息向下传送到设备配置头区域中,并启动设备
驱动程序处于等待状态,等待IRP的到来
WDM驱动程序的结构
WDM驱动程序包含许多例程,操作系统调用这些例程来执
行对IRP的各种操作。
基本驱动程序例程 I/O控制例程 StartIO AdapterControl OnInterrupt DpcForIsr StartIO处理请求队列、 AdapterControl处理DMA 操作、OnInterrupt处理中断。 分发例程
已装 入?
执行DriverEntry(),设置各例程 入口地址,将对象指针装入I/O 管理器中
PnP管理器装入最底层过滤驱动程序,调用其 AddDevice函数,该函数创建一个FiDO,实现FiDO与 同级驱动程序的连接
AddDevice函数把PDO连接到FiDO上
PnP管理器依次装入各级驱动程序,完成整个设备对象栈
IRP的设置与派遣:
I/O管理器在创建完IRP后,将I/O请求信息设置到IRP中, 并将IRP发送到设备驱动程序中。 已知参数信息: PDEVICE_OBJECT DeviceObject; //设备对象结构 IRP_MJ_Xxx; //I/O请求对应的功能码 I/O管理器的处理流程: PIO_STACK_LOCATION stack = IoGetNextIrpStackLocation(Irp); //获得该IRP第一个堆栈单元的指针(堆栈初始为空) stack->MajorFunction = IRP_MJ_Xxx; //填充MajorFunction代码 …… //对栈做其他初始化的工作 //如StartIo() NTSTATUS status = IoCallDriver(DeviceObject,Irp); //把IRP发送到设备驱动程序
驱动程序处理:每层驱动程序都可决定如何处理IRP,既可直接处理 完该IRP就不再向下传,也可处理完后继续向下传递,还可只做向下 传递工作。下层处理完的返回信息又通过该包的结构逐层向上传递。
系统重启
硬件接入
添加新设备 指定 检测 安装向导指定新的硬件类 型
总线驱动程序检测到新的 硬件
取配置头区域信息 由指定得到信息 取得厂商、设备类型、版本、资源需求等信息
文件系统 驱动程序
保留设备 驱动程序
PnP 驱动程序 WDM驱动程序
显示 驱动程序
类驱动程序
小驱动程序
Windows2000/XP设备驱动程序的种类
虚拟设备驱动程序(Virtual Device Driver,VDD)可 使DOS应用程序访问x86平台上的硬件,也可支持 Windows 9x下的对端口访问。 WDM驱动程序 是一种遵循电源管理协议并能在Win98 和Win2000上实现源代码级兼容的PnP驱动程序。WDM 驱动程序又可分为类驱动程序(管理已定义类的设备) 和小驱动程序(提供厂商专有的支持)。
Windows2000/XP设备驱动程序设计
Windows 2000/XP的设备驱动程序


什么是驱动程序 OS patch 学习Windows驱动程序的难点 技术壁垒,资料少 内核编程 user-api-内核
Windows 2000/XP的设备驱动程序
虚拟设备 驱动程序(VDD) 内核模式 驱动程序

I/O请求包(IRP)
定义:I/O请求包(IRP)是驱动程序操作的中心,它是一个内核“对象”, 是预先定义的数据结构。 应用:I/O管理器通过IRP对设备对象进行操作。 I/O管理器接收到一个I/O请求后,分配并初始化一个IRP,再把它传递 到合适的设备驱动程序中的最高驱动程序中。 设备对象属性为设备驱动程序处理的数据。
Parameters成员的几个常见的类型:
IRP_MJ_CREATE请求,创建设备映射; IRP_MJ_CLOSE请求,关闭设备映射; IRP_MJ_READ请求,读取设备对象的信息; IRP_MJ_WRITE请求,对设备对象写信息; IRP_MJ_PNP请求,实现PnP管理,如 IRP_MN_START_DEVICE请求,启动设备; IRP_MJ_IOCTL请求,I/O控制。
2、IRP创建与处理
创建者:I/O管理器,或其他的驱动程序。
创建IRP的函数: IoBuildAsynchronousFsdRequest();//创建异步IRP IoBuildSynchronousFsdRequest();//创建同步IRP IoBuildDeviceIoControlRequest(); //创建同步IRP_MJ_DEVICE_CONTROL或 // IRP_MJ_INTERNAL_DEVICE_CONTROL 请求 IoAllocateIrp();//创建其他种类IRP IoMakeAssociatedIrp();//创建某些IRP的子IRP
1.IRP组成
由一个固定的首部和一个可变数目的I/O栈组成。
IRP首部组成
IRP中的I/O栈组成
I/O栈:通过IO_STACK_LOCATION结构数组实现。 一次I/O请求可能对应多个I/O操作 实现方法: 较多个IRP实现; 一个IRP实现+I/O栈实现。(较优)

IO_STACK_LOCATION结构成员: MajorFunction(该IRP的主功能码) MinorFunction(该IRP的副功能码) Parameters(IRP参数) DeviceObject(与该栈单元对应的设备对象地址) FileObject(内核文件对象地址) CompletionRoutine(I/O完成程序地址) Context(任意的与上下文相关的值)。
WDM的基本结构
1、设备对象
设备对象:系统为帮助软件管理硬件而创建的一个数据 结构(包括 PDO、FDO、FiDO)。 PDO(物理设备对象):设备对象中的物理型对象。 FDO(功能设备对象):设备对象中的功能型对象。 FiDO(过滤器设备对象):在I/O管理器、FDO和PDO间的监视、修改 IRP流的过滤型对象,分上层过滤和下层过滤对象。
驱动程序的DriverEntry函数示例:
extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { // 初始化例程的入口地址 DriverObject->DriverUnload = DriverUnload; DriverObject->DriverExtension->AddDevice = AddDevice; DriverObject->DriverStartIo = StartIo; DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp; DriverObject->MajorFunction[IRP_MJ_POWER]= DispatchPower; DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = DispatchWmi; …… // 这里可加入其他MajorFunction处理例程的入口地址
驱动程序的IRP派遣函数示例:
NTSTATUS DispatchXxx(PDEVICE_OBJECT device, PIRP Irp) { PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);//获得栈单元指针 PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)device->DeviceExtension //获得设备扩展 …… //其他IRP处理操作 return STATUS_Xxx; //返回状态码 }
DriverEntry
AddDevice
DispatchPnp DispatchPower
DispatchWmi DispatchRead DispatchWrite
WDM驱动程序包含例程
• DriverEntry例程:这个例程是每一个设备驱动程序的入口。完成 某些全局初始化(如将驱动程序对象指针装入到I/O管理器中)工 作,设置响应各种用户请求的分发例程与I/O控制例程的入口。 • AddDevice例程:对于功能驱动程序,其AddDevice函数的基本职责 是创建一个设备对象并把它连接到以PDO为底的设备堆栈中。 • DispatchPnp例程:用于处理IRP_MJ_PNP消息,以便能实现即插即 用的功能。 • DispatchPower例程:用于实现对电源管理的支持。 • DispatchWmi例程:WMI是微软实现的基于Web的企业管理工业标准 ,该例程用于处理有关的消息。
相关文档
最新文档