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,所有我们相信它们之间能源码级兼容)。

WDM内核驱动程序模型分析

WDM内核驱动程序模型分析

WDM内核驱动程序模型分析WDM驱动程序是Windows 2000操作系统重要的组成部分,它的正常工作需要有Windows 2000其它内核组件的支持,同时大部分的内核组件也必须同WDM驱动程序交互来完成它们的功能,为能够完整而清晰的说明WDM驱动程序的工作情况,本文首先说明Windows 2000操作系统的内核工作机理,同时将给出WDM驱动程序和内核其它组件的协同工作机制,最后分析WDM驱动程序的结构和工作流程。

1 Windows 2000内核组件工作模式1.1 Windows 2000的设计思想在现代操作系统中,应用程序和操作系统本身是分开的——操作系统代码运行在核心态并有权访问系统数据和硬件;应用程序运行在用户态,能够使用的接口和访问系统数据的权限都受到限制。

当用户程序调用系统服务时,处理器捕获该调用,然后把调用的线程切换到核心态。

当系统服务完成后,操作系统将线程描述表切换回用户态,允许调用者继续运行。

系统核心态部分的设计是丰富多样的。

较典型的有以下几种:A) 传统的单片式操作系统。

系统被设计为一个单一的、庞大的软件系统,在内部组件之间有许多关联。

这种软件系统依赖于许多系统组件。

这种相互关联意味着要扩展系统,就需要对全部代码库进行大量修改。

同时在单片式操作系统中大量的操作系统代码运行于同一内存空间,这就意味着任何操作系统组件都可能损坏正在被其它组件使用数据。

B) 分片式的操作系统。

将操作系统发分为不同层次中的模块。

每个模块提供一组功能函数其它模块调用。

在某一层次上的代码只能调用较低层次上的代码。

在一些了系统中,DEC公司的OpenVMS包括老的Multics操作系统,硬件甚至强制分层(使用多重、分级处理模式)。

分层操作系统结构的优点是,由于每层代码只能访问较低层的接口(和数据结构),因此限制了使用无限权利的代码数量,这种结构也允许在最底层开始调试操作系统,然后一层一层的往上调试,直到整个操作系统工作正常。

关于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链接”。

USB驱动程序的编写采用WDM驱动程序

USB驱动程序的编写采用WDM驱动程序

U S B驱动程序的编写采用W D M驱动程序Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】USB驱动程序的编写采用WDM 驱动程序。

WDM 驱动程序是一些例程的集合,它们被动地存在,等待主机系统软件(PnP 管理器、I/O 管理器、电源管理器等)来调用或激活它们。

具体驱动程序不同,其所包含的例程也不同。

一个WDM 驱动程序的基本组成包括以下5个例程:(1)驱动程序入口例程:处理驱动程序的初始化。

(2)即插即用例程:处理PnP 设备的添加、删除和停止。

(3)分发例程:处理用户应用程序发出的各种 I/O 请求。

(4)电源管理例程:处理电源管理请求。

(5)卸载例程:处理驱动程序的卸载。

包含文件:, ,, , , makefile,sources)在文件中,包含了上述五个例程:中定义了各种数据结构还有各种IOCTL控制码,用于不同数据的读写。

中实现了各种驱动例程。

包含了上述五个所说例程外还包含了其他例程,课程从下面的驱动程序入口例程得出一些信息。

驱动程序入口例程:NTSTATUSDriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath){NTSTATUS ntStatus = STATUS_SUCCESS;PDEVICE_OBJECT deviceObject = NULL;DriverObject->MajorFunction[IRP_MJ_CREATE] = Ezusb_Create; DriverObject->MajorFunction[IRP_MJ_CLOSE] = Ezusb_Close; ources. If you want to add a new source # file to thiscomponent. This file merely indirects to the real make file # that is shared by all thedriver components of the Windows NT DDK # !INCLUDE $(NTMAKEENV) 不要编辑这个文件。

WDM驱动程序简介

WDM驱动程序简介
可移植性:源代码级可移植 可配置性:避免对硬件特征和系统设置作绝对假
设;避免在代码中直接引用硬件
可抢先性和可中断性 多处理器安全 基于对象 数据包驱动 异步
Windows XP 系统结构
WDM驱动程序模型
WDM模型主要包含以下内容:
1、描述了设备驱动程序的标准结构和应该完成的主 要功能。
一个应用程序打开了设备因此系统发送给驱动另一个irp处理函数进行了少量的操作之后返回???操作系统与驱动的交互过程?应用程序尝试读取或者写入一些数据因此系统发送一个irp处理例程将irp放入一个队列之后返回
设备驱动程序设计
第二讲
WDM驱动程序简介
Windows XP 驱动程序分类
内核模式驱动程序的属性
迷你驱动:包含在类驱动中,用于管理设备实例的厂商专有
特征例程。类驱动和迷你驱动合在一起才构成一个完整的 功能驱动程序。
IRP包
WDM驱动的层次结构
上层过滤器驱动程序 功能驱动程序
下层过滤器驱动程序 总线驱动程序
驱动程序如何工作
驱动程序是一个收集让操作系统调用的用来执行各 种涉及到硬件操作的子程序的容器。
某些I/O操作引发设备中断,中断服务例程做一些 很少的操作,然后请求一个DPC,之后返回。
DPC例程运行了,它可能要读回数据,或者继续下 一次的写操作等,然后开始下一个排在队列中的 IRP,之后DPC例程返回系统。
随着时间变化,在这期间系统会发送各种IRP给驱 动程序,驱动程序进行相应的处理。
操作系统与驱动的交互过程
系统运行时设备插入或者系统重新启动发现了某个 设备,系统就会装载可执行的驱动程序到内存中, 并且调用其DriverEntry例程。DriveEntry做了一些 初始化操作之后返回。

WDM 介绍

WDM 介绍

Communication between WDM Driver and AP
WDM 驅動與應用程式的通信方式: 為設備創建符號鏈接法:在驅動程式中用 IoCreateDevice() 創建新的設備對象的時候給新創 建的設備對象取個名字; 然后調用 IoCreateSymbolicLink() 創建一個符號鏈接;之后在应用 程序中调用 Createfile()打开驱动程序。
Innovating Customer Value
The Composition of WDM
一個完整的 WDM 驅動程序,除了包含驱动程序源文件,還包含 MAKEFILE, SOURCE, .RC和 .INF 文件: SOURCE檔 主要是用來指定編譯的源文件; MAKEFILE檔 在 WDM 驅動中都是一樣的,不需要修改,它存在的原因是在用“ build“編譯 WDM 驅動程序的時候,大部分的編譯工作 build 會傳遞給 NMAKE 來執行;
IANC Confidential
Innovating Customer Value
WDM Filter Driver Programming
Programming Process: WDM 驅動程序是一些例程的集合,它們被動的存在,等待主機系統軟件(PnP 管理器、 I/O管理器、 電源管理器等)來調用或激活它們。一個 WDM 驅動程序至少包括 5 個例 程: 1)驅動程序入口例程:處理驅動程序的初始化; 2)即插即用例程: 處理 PnP 設備的添加、刪除和停止(包括IRP_MJ_PNP .etc); 3)分發例程: 處理用戶應用程序發出的各種 I/O 請求(包括 IRP_MJ_CREATE \ IRP_MJ_READ \ IRP_MJ_WRITE\ IRP_MJ_DEVICE_CONTROL .ect); 4)電源管理例程:處理電源管理請求(包括 IRP_MJ_POWER) 5)卸載例程: 處理驅動程序的卸載。

WDM设备驱动程序的设计和实现

WDM设备驱动程序的设计和实现

理 , 给 出U B 备 驱 动 程 序 的 一 个 设 计 实例 , U B K 程 序 分 为 即插 即 用 ( n ) 电 源 管理 、 S 初 始 化 、 S 设 备 并 S设 将 S  ̄动 PP 、 UB UB I 等 功 能模 块 ; 有 结 构 清 晰 、 / O 具 易移 植 、 用性 好 等优 点 , U B 动 程 序 设 计 中具 有 良好 的 应 用 价 值 。 复 在 S驱
象 和设备 对象 。 n o s Wid w 2 P / 的I O子系统 也是 一个
个 WD 中 必 须 拥 有 基 本 的 驱 动 程 序 例 程 M D vr nr、 i f eE t 以及 分 发例 程D sac P p D sacP w r y i t n 、 i th o e 、 p h p
【 键 词 】 WD ; 动 程 序 ; S 关 M 驱 UB 【 图分 类 号 】 T 3 1 中 F 1. 1 【 献标识码 】 A 文 【 章 编 号 】 10 — 7 X(0 7 0 — 0 8 0 文 0 3 7 3 2 0 )5 0 2 — 3
0 引 言
Hale Waihona Puke 对 象 (DO) 中 间 某 处 的 对 象 称 为 功 能 设 备 对 象 P , ( D 。在 F F O) DO的上 面 和下 面 还有 些 过滤 器设 备 对象

D sacWm , 它例 程 则 可根 据 实 际情 况选 择 : M i t p h i其 WD
驱 动 程 序 一 般 都 有 几 个 支 持 不 同 类 型 I P 分 发 例 R 的 程【 ” 。Wid w 应 用程序 与设 备 驱动 程序 打交 道 主要是 nos 通 过 C etFl 、 e i IC nr 、 ed i 、 i Fl 等 ra i D vc o ot lR a Fl Wr e i e e e o e t e

WDM驱动程序的框架

WDM驱动程序的框架

WDM驱动程序的框架1. DriverEntry ()DDK中定义的函数原型如下:NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath);DriverEntry的第一个参数是一个指针,指向一个刚被初始化的驱动程序对象,该对象就代表你的驱动程序。

DriverEntry的第二个参数是设备服务键的键名。

如果该例程执行成功,则返回STATUS_SUCCESS,如果失败,则依据失败状态返回定义在ntstatus.h中的错误值。

这是驱动程序的入口函数,相当于用户态程序的main()函数,它在驱动程序被加载进内存的时候调用。

主要工作是把各种函数指针填入驱动程序对象。

这些指针为操作系统指明了驱动程序容器中各种子例程的位置,这样,该驱动程序对象关联的设备对象在接收到上层的IRP的时候,就会通过驱动程序对象中设置的函数指针,找到相应的派遣函数来做处理。

Eg.一个简单的DriverEntry()代码片断:DriverObject->DriverUnload =DriverUnload; <--1DriverObject->DriverExtension->AddDevice = AddDevice;DriverObject->DriverStartIo = StartIo;DriverObject->MajorFunction [IRP_MJ_CREATE] = DriverDispatchCreate; <--2DriverObject->MajorFunction [IRP_MJ_CLOSE] = DriverDispatchClose;DriverUnload指向驱动程序的清除例程。

I/O管理器会在卸载驱动程序前调用该例程。

通常,WDM驱动程序的DriverEntry例程一般不分配任何资源,所以DriverUnload例程也没有什么清除工作要做。

wdm设备驱动程序入门共39页文档

wdm设备驱动程序入门共39页文档

应用程序对设备对象的操作过程
操作接口:设备驱动程序的Win32 API函数,或重载的设备驱动程序的 Win32 API回调函数。 操作参数:设备句柄、操作类型及其它信息。 例:DeviceIoControl(hDevice, DIOC_MY_IO, NULL, 0,
NULL, 0, NULL,NULL); Win32子系统处理:将I/O操作转换后交I/O管理器处理, I/O管理器创建 一个I/O请求包(IRP)后,送到设备对象栈的最上层设备对象对应的驱动 程序。
已装 入?
执行DriverEntry(),设置各例程 的入口地址,将对象指针装入I/O 管理器中
PnP管理器装入最底层过滤驱动程序,调用其 AddDevice函数,该函数创建一个FiDO,实现FiDO与 同级驱动程序的连接
AddDevice函数把PDO连接到FiDO上 PnP管理器依次装入各级驱动程序,完成整个设备对象栈
PnP管理器根据需要给设备发送各种PnP IRP PnP管理器给设备发送“启动设备”PnP IRP,驱动程序将分 配的资源信息向下传送到设备配置头区域中,并启动设备
驱动程序处于等待状态,等待IRP的到来
WDM驱动程序的结构
WDM驱动程序包含许多例程,操作系统调用这些例程来执
行对IRP的各种操作。
Hale Waihona Puke 基本驱动程序例程取得厂商、设备类型、版本、资源需求等信息
PnP管理器就创建PDO,在注册表中添加某些项
N
所有硬件检测完毕?
Y PnP管理器决定分配哪些资源给各个设备
设备驱动程序的装入过程
PnP管理器查找注册表中与该PDO相吻合的各级驱 动程序
找到? N
Y
读INF文件,按INF文 件指令安装各级驱动

PCI传输卡的WDM驱动程序设计.

PCI传输卡的WDM驱动程序设计.

PCI传输卡的WDM驱动程序设计2008-01-20摘要:介绍了在Windows2000操作系统下,使用DriverStudio软件编写符合WDM模式的PCI数据传输卡驱动程序,并详细分析了一个应用实例。

关键词:PCI总线设备驱动程序 WDM模式 DriverStudioPCI总线规范是为提高微机总线的数据传输速度而制定的一种局部总线标准。

在设计自行开发的基于PCI总线的数据传输设备时,需要开发相应的`设备驱动程序。

通常开发PCI设备驱动程序有多种模式,在Windows2000环境下,主要采用WDM模式。

本文针对自行开发的基于PCI总线的CCD视频信号传输控制卡,编写了符合WDM模式的驱动程序。

1WDM模式驱动程序1.1WDM模式(WindowsDriverModel)Windows2000对驱动程序的编写不再基于以往的Win3.x和Win9x下的VxD(虚拟设备驱动程序)结构,而是基于一种新的驱动模型――WDM(WindowsDriverModel)。

WDM为Windows98/2000/XP操作系统的设备驱动程序的设计提供了统一的框架。

WDM来源于WindowsNT的分层32位设备驱动程序模型(layered32-bitdevicedrivermodel)。

它支持更多的特性,如即插即用(PnP)、电源管理、WMI和NT事件。

1.2设备驱动程序设备驱动程序是操作系统的一个组成部分,它由I/O管理器(I/OManager)管理和调动。

Windows2000操作系统下的I/O管理器功能描述如图1所示。

I/O管理器每收到一个来自用户应用程序的请求就创建一个I/O请求包(IRP)的数据结构,并将其作为参数传递给驱动程序。

驱动程序通过识别IRP中的物理设备对象(PDO)来区别是发送给哪一个设备。

IRP结构中存放请求的类型、用户缓冲区的首地址、用户请求数据的长度等信息。

驱动程序处理完这个请求后,在该结构中填入处理结果的有关信息,调用IoCompleteRequest将其返回给I/O管理器,用户应用程序的请求随即返回。

wdm

wdm

wdmWDMDWDM是Dense Wavelength Division Multiplexing(密集波分复用)的缩写,这是一项用来在现有的光纤骨干网上提高带宽的激光技术。

更确切地说,该技术是在一根指定的光纤中,多路复用单个光纤载波的紧密光谱间距,以便利用可以达到的传输性能(例如,达到最小程度的色散或者衰减),这样,在给定的信息传输容量下,就可以减少所需要的光纤的总数量。

用途DWDM能够在同一根光纤中,把不同的波长同时进行组合和传输。

为了保证有效,一根光纤转换为多个虚拟光纤。

所以,如果你打算复用8个光纤载波(OC),即一根光纤中传输8路信号,这样传输容量就将从2.5 Gb/s提高到20 Gb/s。

目前,由于采用了DWDM技术,单根光纤可以传输的数据流量最大达到400Gb/s。

随着厂商在每根光纤中加入更多信道,每秒兆兆位的传输速度指日可待。

技术波分复用(WDM)是将两种或多种不同波长的光载波信号(携带各种信息)在发送端经复用器(亦称合波器,Multiplexer)汇合在一起,并耦合到光线路的同一根光纤中进行传输的技术;在接收端,经解复用器(亦称分波器或称去复用器,Demultiplexer)将各种波长的光载波分离,然后由光接收机作进一步处理以恢复原信号。

这种在同一根光纤中同时传输两个或众多不同波长光信号的技术,称为波分复用。

WDM本质上是光域上的频分复用FDM技术。

每个波长通路通过频域的分割实现,每个波长通路占用一段光纤的带宽。

WDM系统采用的波长都是不同的,也就是特定标准波长,为了区别于SDH系统普通波长,有时又称为彩色光接口,而称普通光系统的光接口为"白色光口"或"白光口"。

通信系统的设计不同,每个波长之间的间隔宽度也有不同。

按照通道间隔的不同,WDM可以细分为CWDM(稀疏波分复用)和DWDM(密集波分复用)。

CWDM的信道间隔为20nm,而DWDM的信道间隔从0.2nm 到1.2nm,所以相对于DWDM,CWDM称为稀疏波分复用技术。

WDM驱动程序入门(2)——驱动程序的小秘密

WDM驱动程序入门(2)——驱动程序的小秘密

WDM驱动程序入门(2)——驱动程序的小秘密好啦,辛辛苦苦终于写完了程序,让我们编译运行吧!按下Ctrl+F5(嘿嘿,让我们先假设你习惯用VC来写程序),我等啊等……疑?怎么毫无动静的?再看看Output窗口,哇!有几百个错误啊!!不禁头大——这是怎么回事呢?原来,WDM程序编译出来的并不是我们常见的.exe,而是.sys文件,在未经设置编译环境之前,是不能直接用VC来编译的(这就是为什么会有几百个错误了)。

这种类型的文件你可以在WINNT/System32/Drivers里面找到很多。

其实驱动程序也是一种PE 文件,它同样由DOS MZ header开头,也有完整的DOS stub和PE header,同样拥有Import table和Export table——hoho……那跟普通的PE文件有什么不一样呢?伟大的领袖毛主席教育我们,实践是检验真理的唯一标准。

那么就让我们先来做个小剖析,加深对.sys文件的认识吧!(如果你对.sys的内部细节没有兴趣的话,可以略过不看。

^_^)首先祭出Delphi里附带的tdump.exe程序(别问我为什么用这个,这只是纯粹的习惯问题)。

让我们键入:C:/WINNT/System32/Drivers>tdump ccport.sys -em -ee参数-em是列出Import table,-ee是列出Export table。

回车之后,屏幕列出一大堆东西:C:/WINNT/SYSTEM32/DRIVERS>tdump ccport.sys -em -ee Turbo Dump Version 5.0.16.12 Copyright ? 1988, 2000 Inprise CorporationDisplay of File CCPORT.SYSIMPORT: NTOSKRNL.EXE={hint:011Fh}.’memcpy’IMPORT: NTOSKRNL.EXE={hint:003Dh}.’IoDeleteDevice’IMPORT: NTOSKRNL.EXE={hint:0030h}.’IoAttachDeviceT oDeviceStack’IMPORT: NTOSKRNL.EXE={hint:008Eh}.’KeSetEvent’IMPORT: NTOSKRNL.EXE={hint:0068h}.’IofCallDriver’IMPORT: NTOSKRNL.EXE={hint:0095h}.’KeWaitForSingle Object’IMPORT: NTOSKRNL.EXE={hint:0074h}.’KeInitializeEvent’IMPORT: NTOSKRNL.EXE={hint:003Fh}.’IoDetachDevice’IMPORT: NTOSKRNL.EXE={hint:00D3h}.’RtlFreeUnicodeS tring’IMPORT: NTOSKRNL.EXE={hint:0077h}.’KeInitializeSpinL ock’IMPORT: NTOSKRNL.EXE={hint:0129h}.’strcpy’IMPORT: NTOSKRNL.EXE={hint:0121h}.’memset’IMPORT: NTOSKRNL.EXE={hint:003Ch}.’IoCreateUnprote ctedSymbolicLink’IMPORT: NTOSKRNL.EXE={hint:0038h}.’IoCreateDevice’IMPORT: NTOSKRNL.EXE={hint:00C2h}.’RtlAnsiStringToU nicodeString’IMPORT: NTOSKRNL.EXE={hint:0069h}.’IofCompleteReq uest’IMPORT: NTOSKRNL.EXE={hint:0124h}.’sprintf’IMPORT: NTOSKRNL.EXE={hint:003Eh}.’IoDeleteSymboli cLink’IMPORT: NTOSKRNL.EXE={hint:0042h}.’IoFreeIrp’IMPORT: NTOSKRNL.EXE={hint:004Dh}.’IoInitializeIrp’IMPORT: NTOSKRNL.EXE={hint:002Dh}.’IoAllocateIrp’IMPORT: NTOSKRNL.EXE={hint:0027h}.’InterlockedExcha nge’IMPORT: NTOSKRNL.EXE={hint:0025h}.’InterlockedCom pareExchange’IMPORT: NTOSKRNL.EXE={hint:0035h}.’IoCancelIrp’IMPORT: NTOSKRNL.EXE={hint:012Ah}.’strlen’IMPORT: NTOSKRNL.EXE={hint:0126h}.’strcat’IMPORT: NTOSKRNL.EXE={hint:0114h}.’atoi’IMPORT: NTOSKRNL.EXE={hint:0128h}.’strcmp’IMPORT: NTOSKRNL.EXE={hint:0034h}.’IoBuildSynchron ousFsdRequest’IMPORT: NTOSKRNL.EXE={hint:00D5h}.’RtlInitAnsiString’IMPORT: HAL.DLL={hint:0006h}.’KfAcquireSpinLock’IMPORT: HAL.DLL={hint:0009h}.’KfReleaseSpinLock’EXPORT ord:0001=’Vcomm_DriverControl’我们可以很清楚地看到,它主要调用了NTOSKRNL.EXE和HAL.DLL文件(实际上你会发现,几乎所有的WDM驱动程序都会调用NTOSKRNL.EXE文件,从它的名字你可以看出为什么了吧?),并且输出了一个函数“Vcomm_DriverControl”。

基于Windows的USB接口WDM驱动研究和应用

基于Windows的USB接口WDM驱动研究和应用
南京信息工程大学硕士学位论文
基于Windows的USB接口WDM驱动研究和应用
摘要
w.mdows2000/)(PⅣWindows操作系 统下对硬件设备的操作,必须通过在WDM模型下设计的驱动程序这个软接口。随着USB2.0 的发展,运用USB这种具有热插拔,高速率等优点的接口设备已开始流行。Windows驱动 程序模型WDM(Windows Driver Model)是一种全新的设备驱动程序模式,可以运行于 windows98/2000/)(P等多种操作系统平台。WDM采用模块化、分层次类型的驱动程序结 构。作为一种符合WDM的驱动程序,USB驱动程序分为USB总线驱动程序和USB功能 驱动程序两个层次。USB总线驱动程序负责控制实际的硬件,实现与底层的通信。USB功 能驱动程序由设备开发者编写,位于USB总线驱动程序的上层,通过向USB总线驱动程 序发送USB请求包,来实现对USB设备信息的发送或接收。本文以运用EZ—USB芯片的 卫星视频接收设备为例,论述了如何运用DDK工具包,开发USB设备WDM驱动程序。
Driver),也称为VxD。虚拟设备驱动程序,原来的设计目标是为了支持在Windows平台下
的设备,它作为动态连接库(DLL)链接到操作系统里,工作在保护模式下(Rin90)。VxD 解决了那些常规应用程序不能完成的工作,比如直接硬件的读写,也可以说,使用VxD是 扩展操作系统内核的一种方法。VxD最初的编写采用的是Intel汇编语言,后来随着VtoolsD
(保密的论文在解密后应遵循此规定)
作者签名:

期:
导师签名:

期:
南京信息工程大学硕士学位论文
基于Windows的USB接121 WDM驱动研究和应用
第一章绪论

wdm驱动

wdm驱动

wdm驱动
WDM驱动是指Windows Driver Model(Windows驱动模型)驱动,它是一种用于开发Windows操作系统设备驱动程序的软件框架。

WDM驱动是为Windows 98、Windows Me和Windows 2000引入的,它提供了一种标准化的方式来编写设备驱动程序。

相比于传统的驱动开发方式,WDM驱动具有更丰富的功能和更高的灵活性。

WDM驱动在设备驱动程序的开发中提供了许多优点,包括:
1. 简化了驱动程序的开发:WDM驱动使用一套统一的API,使得驱动程序的开发更加简单和一致。

2. 可移植性:WDM驱动可以在不同的Windows操作系统版本上运行,而无需进行大量的修改。

3. 兼容性:WDM驱动允许旧的驱动程序与新的设备完全兼容,而无需进行修改。

4. 性能:WDM驱动通过使用更高级的设备驱动模型和硬件访问机制,提高了设备驱动程序的性能。

总之,WDM驱动是一种用于开发Windows设备驱动程序的软件框架,它提供了许多优势和便利,使开发者能够更轻松地开发高性能和兼容性强的驱动程序。

USB驱动程序的编写采用WDM 驱动程序(计算机类)

USB驱动程序的编写采用WDM 驱动程序(计算机类)

USB驱动程序的编写采用WDM 驱动程序。

WDM 驱动程序是一些例程的集合,它们被动地存在,等待主机系统软件(PnP 管理器、I/O 管理器、电源管理器等)来调用或激活它们。

具体驱动程序不同,其所包含的例程也不同。

一个WDM 驱动程序的基本组成包括以下5个例程:(1)驱动程序入口例程:处理驱动程序的初始化。

(2)即插即用例程:处理PnP 设备的添加、删除和停止。

(3)分发例程:处理用户应用程序发出的各种 I/O 请求。

(4)电源管理例程:处理电源管理请求。

(5)卸载例程:处理驱动程序的卸载。

包含文件:ezusbsys.c, ezusbsys.h,ezusbsys.rc, resource.h, version.h, makefile,sources)在ezusbsys.c文件中,包含了上述五个例程:ezusbsys.h中定义了各种数据结构还有各种IOCTL控制码,用于不同数据的读写。

Ezusbsys.c 中实现了各种驱动例程。

包含了上述五个所说例程外还包含了其他例程,课程从下面的驱动程序入口例程得出一些信息。

驱动程序入口例程:NTSTATUSDriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath){NTSTATUS ntStatus = STATUS_SUCCESS;PDEVICE_OBJECT deviceObject = NULL;DriverObject->MajorFunction[IRP_MJ_CREATE] = Ezusb_Create; DriverObject->MajorFunction[IRP_MJ_CLOSE] = Ezusb_Close;//分发例程DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = Ezusb_ProcessIOCTL;//即插即用例程DriverObject->MajorFunction[IRP_MJ_PNP] = Ezusb_DispatchPnp;//电源管理例程DriverObject->MajorFunction[IRP_MJ_POWER] = Ezusb_DispatchPower;//设备添加例程DriverObject->DriverExtension->AddDevice = Ezusb_PnPAddDevice;//卸载例程DriverObject->DriverUnload = Ezusb_Unload;return ntStatus;}在原有框架下,主要实现了的代码段在于ezusbsys.c文件中的如下例程:NTSTATUSEzusb_Read_Write( IN PDEVICE_OBJECT fdo, IN PIRP Irp )在该例程中实现对大数据块的读写控制和实现。

USB.设备的WDM.驱动程序设计

USB.设备的WDM.驱动程序设计

USB设备的WDM驱动程序设计卡拉河海大学计算机及信息工程学院niekele2010@yahoo.fr摘要:本文介绍了WDM驱动模型,并且针对USB总线给出了USB设备的WDM驱动程序的设计方法。

关键词: WDM、USB总线、驱动程序一, W DM驱动模型介绍为了方便用户进行WINDOWS平台的驱动程序开发,Microsoft于1996年宣布了一种适用于当前广泛使用的WIN2000及WINDOWS XP操作系统的Win32驱动程序模型。

这个驱动模型就是WDM(Windows Driver Model)——WINDOWS驱动模型。

WDM驱动具有以下几个特点。

详见参考文献[1]第一章。

1)可移植性好,采用WDM模型的设备驱动程序在不同的Windows操作系统上基本上是二进制兼容的,而在不同的CPU平台Windows操作系统上是源代码兼容的。

2)分层结构。

WDM模型使用了如图1的层次结构。

图中左边是一个设备对象堆栈。

设备对象是系统为帮助软件管理硬件而创建的数据结构。

一个物理硬件可以有多个这样的数据结构。

处于堆栈最底层的设备对象称为物理设备对象(physical device object),或简称为PDO。

在设备对象堆栈的中间某处有一个对象称为功能设备对象(functional device object),或简称FDO。

在FDO的上面和下面还会有一些过滤器设备对象(filter device object)。

位于FDO上面的过滤器设备对象称为上层过滤器,位于FDO下面(但仍在PDO 之上)的过滤器设备对象称为下层过滤器。

3)可配置性好。

WDM驱动程序通过其底层的类(总线)驱动程序枚举和访问硬件资源,使得设备的配置变得相对简单和容易。

而且WDM驱动程序还可以支持WMI(Windows Management Instrumentation),通过WMI,用户可以控制驱动程序的某些行为和属性。

4)支持即插即用和电源管理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本特征,规范该类设备与操作系统中其它软件环境的接 口。采用类驱动有利于分层和功能重用。
迷你驱动:包含在类驱动中,用于管理设备实例的厂商专有
特征例程。类驱动和迷你驱动合在一起才构成一个完整的 功能驱动程序。
IRP包
WDM驱动的层次结构
上层过滤器驱动程序 功能驱动程序
下层过滤器驱动程序 总线驱动程序
sys和exe
像EXE程序一样,驱动程序也是可执行文件。其扩 展名为.SYS
在结构上严格地说驱动程序和任何32位的Windows 或者控制台的应用程序没什么区别。和EXE程序一 样,一个驱动程序也需要许多辅助程序,许多也都 是动态链接自操作系统内核或来自一组驱动或者其 他的支持库。
但是驱动程序没有主程序。取而代之的是其包含了 一批系统可以在适当的时候调用的子程序集。驱动 程序除了其自己的硬件外不关心任何别的事情:系 统管理了其他的任何事务,包括决定在何时运行你 的驱动程序代码。
设备驱动程序设计
第二讲
WDM驱动程序简介
Windows XP 驱动程序分类
内核模式驱动程序的属性
可移植性:源代码级可移植 可配置性:避免对硬件特征和系统设置作绝对假
设;避免在代码中直接引用硬件
可抢先性和可中断性 多处理器安全 基于对象 数据包驱动 异步
Windows XP 系统结构
WDM驱动程序模型
WDM模型主要包含以下内容:
1、描述了设备驱动程序的标准结构和应该完成的主 要功能。
2、描述了操作系统为设备驱动提供的各种服务,以 及操作系统与设备驱动程序之间详细的交互过程
3、为常见类型的设备提供一系列的总线驱动程序和 类驱动程序。
WDM驱动程序的分类
功能驱动:每个WDM驱动都包含功能驱动;它了解使硬件
即插即用管理器发送给驱动程序一些IRP,相应的 IRP处理函数处理完该IRP之后返回。
一个应用程序打开了设备,因此系统发送给驱动另 一个IRP,处理函数进行了少量的操作之后返回
操作系统与驱动的交互过程
应用程序尝试读取或者写入一些数据,因此系统发 送一个IRP,处理例程将IRP放入一个队列之后返回。
最后,用户拔出设备或者关闭系统,这时,系统发 送一些IRP,分发例程做好相应的处理,然后返回, 系统把驱动程序代码移出内存。
应用程序与驱动的交互
应用程序里面要做的工作首先就是要调用 CreatFile 打开设备,具ห้องสมุดไป่ตู้操作就像打开一个 文件一样。
应用程序准备好相应的数据或者缓冲区等, 调用相应的WIN32 API如WriteFile,ReadFile, DeviceIoControl等,对设备进行读写等各种 操作。
最后应用程序关闭设备,具体操作就像关闭 一个文件一样 。
工作的所有细节,负责具体I/O过程,负责处理中断事件, 为用户提供一种设备适合的控制方式。
总线驱动:查找并发现硬件设备,确定设备的资源使用情况,
管理硬件与计算机的实际连接,负责物理的I/O过程
过滤器驱动:对功能驱动程序执行I/O操作时进行过滤和监
视,修改现有功能驱动程序的行为,为用户提供额外服务
类驱动:实现某种设备类型的共通功能,管理整个设备类的
驱动程序如何工作
驱动程序是一个收集让操作系统调用的用来执行各 种涉及到硬件操作的子程序的容器。
一些例程,如DriverEntry和AddDevice例程和一些 特定的I/O 请求包(IRP)的处理函数会出现在每个 这样的容器中 。
需要排队请求的驱动程序可能还有一个StartIo例程。 而执行直接存储器存取(DMA)操作的驱动程序 会有一个AdapterControl例程。产生硬件中断的驱 动程序也会有一个中断服务例程(ISR)和一个延 迟过程调用(DPC)例程
某些I/O操作引发设备中断,中断服务例程做一些 很少的操作,然后请求一个DPC,之后返回。
DPC例程运行了,它可能要读回数据,或者继续下 一次的写操作等,然后开始下一个排在队列中的 IRP,之后DPC例程返回系统。
随着时间变化,在这期间系统会发送各种IRP给驱 动程序,驱动程序进行相应的处理。
操作系统与驱动的交互过程
系统运行时设备插入或者系统重新启动发现了某个 设备,系统就会装载可执行的驱动程序到内存中, 并且调用其DriverEntry例程。DriveEntry做了一些 初始化操作之后返回。
即插即用管理器(PnP Manager)调用AddDevice例 程,让其做一些与设备实例相关的初始化操作之后 返回。
相关文档
最新文档