windows 2000/xp WDM设备驱动程序开发 (1)

0. 参考文献

《windows WDM 设备驱动程序开发指南》《programming the microsoft windows driver model》

《windows 2000驱动程序开发大全》

使用driverworks工具(driverStudio),而没有用DDK,因为更快捷

1. WDM驱动

例程

页故障:软件级别中断,运行在DISPATCH_LEVEL上; 所以访问DISPATCH_LEVEL的代码需运行在非分页内存

1.3 设备接口

旧的命名方法:驱动创建一个符号链接,应用来访问。

新的命名方法:128位GUID唯一标识, GUIDGEN生成

2. WDM基本结构

driverworks: kdriver, kpnpDevice, kpnpLowerDevice

2.1  kdriver

1)装载驱动时,pnp管理器为每个驱动程序调用一次driverentry例程

2)初始化之后,pnp调用addDevice初始化设备;运行时有新设备被枚举将调用addDevice设备

adddevice本职是把新设备附加到设备堆栈中

3)driverworks中FDO和PDO连接

2.2 kpnpdevice

DO_EXCLUSIVE 指出设备是否排斥(io管理器仅允许打开一次)

列举了一些函数

HID, human interface device;

WMI,windows 管理诊断

3. IRP操作

driverworks对IRP进行了封装KIrp

IRP重要域:

1)MdlAddress(PMDL): 指向内存描述符表,当使用DO_DIRECT_IO,

对于IRP_MJ_READ/WRITE, IO管理器就创建MDL,锁定用户内存。

对于IRP_MJ_DEVICE_CONTROL, METHOD_IN_DIRECT/ METHOD_OUT_DIRECT, 输出缓冲区创建MDL

2)associatedIrp.systemBuffer, 系统的数据缓冲区,DO_BUFFERED_IO会用

3)IoStatus, status收到NTSTATUS, information用于保存数据传输操作

创建IRP时,同时创建关联的IO_STACK_LOCATION堆栈数组,每个堆栈单元对应一个要处理该IRP的驱动,存储IRP类型和参数等

MajorFunction: 如IRP_MJ_READ

minorFunction: 如IRP_MJ_PNP 的IRP_MN_START_DEVICE, IRP_MN_REMOVE_DEVICE

parameters: create, read, startdevice

deviceObject

completionRoutine

3.2 kirp

函数: complete(), 完成IRP,绝不允许拥有自旋锁的情况下调用此函数,运行在IRQL<=DISPATCH_LEVEL

status(), 即iostatus.status域, 如STATUS_PENDING

information(), 若status不是STATUS_SUCCESS, 则这里设置为0

IoctlBuffer(), bufferedReadDest, bufferedWriteSource() 对应associatedIrp.systembuffer

MarkPending()

IoctlCode(), readSize(),

WDM使用的成员函数

allocatedResources, 系统分配的资源

translatedResources, 系统分配的翻译资源

3.3 IRP基本操作

完成IRP    I.pnpComplete()

取消IRP

时间: 2024-11-08 04:48:30

windows 2000/xp WDM设备驱动程序开发 (1)的相关文章

windows 2000/xp WDM设备驱动程序开发 (2)

4. WDM环境 a  安装VC6.0: b  安装相应操作系统的DDK(组件一定要全选): c  安装DriverStudio: d  用VC6.0打开Compuware\Driver Studio\DriverWorks\Source\VdwLibs.dsw工程: 1)用DriverStudio的driverWizard来创建工程 创建RegSample完后编译出现错误,删掉没有的函数,然后去掉了ntstrsafe.lib 链接库 2)EzDriverInstaller (driverstu

Linux 设备驱动程序 -- 开发环境的搭建

目录 VMPlayer, Ubuntu 14.04的下载安装 Ubuntu 系统的配置 (1) Ubuntu系统源的更新 (2) 编译器安装 (3) 编辑器vim安装 (4) SSH服务器安装配置 (5) Samba服务器配置安装 Linux源码下载编译以及安装 第一个设备驱动程序Hello World 1. VMPlayer, Ubuntu 14.04 下载安装

Linux下PCI设备驱动程序开发 --- PCI驱动程序实现(三)

三.PCI驱动程序实现 1. 关键数据结构 PCI设备上有三种地址空间:PCI的I/O空间.PCI的存储空间和PCI的配置空间.CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用.内核在启动时负责对所有PCI设备进行初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/proc/pci中列出所有找到的PCI设备,以及这些设备的参数和属性. Linux驱动程序通常使用结构(struct)来表示

windows设备驱动程序WDF开发(3)

第8章 KMDF过滤器驱动程序 1. 管理设备的主功能为功能驱动FDO, 过滤器驱动位于FDO的上层或下层 WdfFdoInitSetFilter // 声明这个一个过滤驱动 2. 安装要修改FDO的inf文件 FilterSample实例 第9章 USB设备开发 1. USB2.0 最快480Mb/s, UBS3.0速度 5.0Gbps (500MB/s) 2. USB设备有一到多个配置 每个配置有一到多个接口 每个接口有一到多个端点,端点是通信管道的终点, 有四种:批量(bulk), 控制,

USB设备驱动开发之远程访问USB设备(一)

By Fanxiushu 2016 05-15  转载或引用本文,请注明原始作者. 使用过vmware的人都应该知道,vmware虚拟机有这样的一个功能, 当在宿主机上插入一个USB设备的时候,通过设置,可以在vmware的虚拟机系统里边能访问到这个USB设备, 而且访问这个USB设备,就跟真的把这个USB设备插入到这个虚拟系统中一样,跟真实的几乎没任何区别. 再看一种情况,假设有两台机器C和S,C 机器是你正在使用的机器, S机器在远端,你只能通过远程控制S. S机器的配置和功能都很强大,大部

linux 字符设备驱动开发详解

一.设备的分类及特点 1.字符设备 字符设备是面向数据流的设备,没有请求缓冲区,对设备的存取只能按顺序按字节的存取而不能随机访问.    Linux下的大多设备都是字符设备.应用程序是通过字符设备节点来访问字符设备的.通常至少需要实现 open, close, read, 和 write 等系统调用.    设备节点一般都由mknod命令都创建在/dev目录下,包含了设备的类型.主/次设备号以及设备的访问权限控制等,如:crw-rw----  1 root  root 4, 64 Feb 18

《Linux设备驱动开发具体解释(第3版)》(即《Linux设备驱动开发具体解释:基于最新的Linux 4.0内核》)网购链接

<Linux设备驱动开发具体解释:基于最新的Linux 4.0内核> china-pub   spm=a1z10.3-b.w4011-10017777404.30.kvceXB&id=521111707813&rn=4cf013961288ab7c4dfd2016aeb21fa8&abbucket=5">天猫     dangdang   京东 China-pub 8月新书销售榜 推荐序一 技术日新月异,产业斗转星移,滚滚红尘,消逝的事物太多,新事物的诞

《Linux设备驱动开发详解:基于最新的Linux 4.0内核》china-pub预售

<Linux设备驱动开发详解:基于最新的Linux 4.0内核>china-pub今日上线进入预售阶段: http://product.china-pub.com/4733972 推荐序一 技术日新月异,产业斗转星移,滚滚红尘,消逝的事物太多,新事物的诞生也更迅猛.众多新生事物如灿烂烟花,转瞬即逝.当我们仰望星空时,在浩如烟海的专业名词中寻找,赫然发现,Linux的生命力之旺盛顽强,斗志之昂扬雄壮,令人称奇.它正以摧枯拉朽之势迅速占领包括服务器.云计算.消费电子.工业控制.仪器仪表.导航娱乐等

[转]解析Winndows 2000/XP物理内存管理

物理内存是相对比较紧张的资源,合理利用将是一个操作系统的性能的关键.Windows 2000/XP内部使用一个称为页框数据库(Page Frame Database)的结构用于描述物理内存的状态.本文将从这一结构入手详述Windows物理内存的组织与管理. Windows将物理内存按PAGE_SIZE(在x86上,为0x1000字节,即4K)为单位,将其划分,每一单元在页框数据库中均有一项描述其状态及用途等.页框数据库实际上是由这些描述每一页情况结构的数组.页框数据库由内核变量MmPfnData