| 网站首页 | 校园文化 | 视频在线 | 搞笑图片 | 廊坊师院 | 师院风光 | 商家联盟 | 关于我们 | 下载 | 学习考试 | 创业管理 | 求职相关 | 实用文档 | 留言 | 
您现在的位置: 廊坊师范学院最大网络交流平台 >> 实用文档 >> 师院论文 >> 计算机论文 >> 计算机应用 >> 文章正文 今天是:
基于Windows2000开发WDM设备驱动程序的方法
作者:佚名 文章来源:不详 点击数: 更新时间:2007-9-12 23:33:43

摘  要:本文介绍了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驱动程序就 可以了。同NT 4.0驱动程序一样,WDM驱动程序也是分层的,即不同层上的驱动程序有着不同的优先权,而Windows 9x下的VxD则没有此结构。另外,WDM还引入了功能设备对象 FDO(functional device object)与物理设备对象PDO(physical device object)两 个新概念来描述硬件,一个PDO代表一个真实硬件,在驱动程序看来则是一个FDO 。    另外值得注意的是,一个硬件只允许有一个PDO,但却可以拥有多个FDO,而在驱动程序中我们不是直接操作硬件而是操作相应的PDO与FDO。在Ring-3与Ring-0通讯方面,操作系统为每一个用户请求打包成一个IRP(IO Request Packet)结构,将其发送至驱动程序并通过识别IRP中的PDO来识别是发送给哪一个设备的。另外,在驱动程序的加载方面WDM既不靠驱动程序名称也不靠一个具有某种特殊意义的ID,而是依靠一个128位的GUID来识别驱动程序(Windows下许多东西都是靠此进行识别的)。
2.3 IRP处理
  I/O请求包IRP是驱动程序操作的中心,IRP是一个内核对象,它是预先定义好的数据结构,带有一组对它进行操作的I/O管理器例程,I/O管理器接受一个I/O请求,然后将它传送到合适的驱动程序栈中的最高驱动程序之前,分配并处始化一个IRP,每个I/O请求有主功能代码
2.4 IRP参数
比如一个写的I/O请求转换成一个IRP时,I/O管理器填写主要的IRP首部,并构造第一个个栈单元,对写请求来讲,首部包含用户缓冲区信息,而栈单元则包含写的具体参数。如果调用另一个驱动则必须创建下一个栈单元。
一个IRP到栈顶时,使用PIO_STACK_LOCATION
   IoGetCurrentIrpStackLocation(
       IN PIRP Irp
       );IoGetCurrentIrpStackLocation returns a pointer to the caller's stack location in the given IRP。
如决定需要把这个IRP沿设备栈向下传递,使用IoCopyCurrentIrpStackLocationToNext or IoSkipCurrentIrpStackLocation简单的将内容复制到下一个单元,如果要更改下一个栈单元,要使用LOCATION
   IoGetNextIrpStackLocation(IN PIRP Irp );
IoGetNextIrpStackLocation gives a higher level driver access to the next-lower driver's I/O stack location in an IRP so the caller can set it up for the lower driver.
可使用IoCallDriver调用下一个驱动程序,当最低一层的驱动处理玩后调用IoCompleteRequest,IRP再向上传递返回用户,当IRP向上传递时也可以每个驱动有机会再处理它,每个驱动要设置IoSetCompletionRoutine挂接一个例程 ,一个驱动不一定要沿着设备栈向下传递IRP,如果自己能处理就就使用IoCompleteRequest完成IrP
2.5 设备接口
用户态使用Win32 CreateFile访问驱动程序,dwShareMode为0时来请求独占内核对象在设备对象DEVICE_OBJECT结构中存储设备的信息,对于与设备的每个交互,相关的DEVICE_OBJECT被传递给驱动的回调例程。,但是开发者可以扩展设备结构,称为设备扩展
在PnP IRP中我们加载设备NTSTATUS Wdm1AddDevice(      IN PDRIVER_OBJECT DriverObject,指向驱动程序的指针      IN PDEVICE_OBJECT pdo指向物理设备的指针)
{      DebugPrint("AddDevice");
 status = IoCreateDevice (DriverObject,创建设备
&n

[1] [2] [3] 下一页


文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    高校无厘精彩推荐
    固顶文章 校花扎堆!大学男生最向往的女生
    普通文章 有调查称女大学生未婚同居者62.4
    普通文章 网友公认纯美校花 今成为北影大一
    普通文章 大学各系的接吻方式
    普通文章 中国高校十大荒唐事件 从象牙塔到
    普通文章 “图说八荣八耻”宣传画进校园
    普通文章 图文:大学校园内的性学讲座
    普通文章 中国青年DV大赛-激扬互动视界
    普通文章 男子在校园内放飞99只蝴蝶求爱
    普通文章 让女生流口水的绝版帅哥

    高校动态
    固顶文章 廊坊师范学院2007年本科新生入学
    普通文章 大一新生流行高校论坛虚拟报到老
    普通文章 两名在校大学生借环保公益广告创
    普通文章 北大学生告微软侵隐私 称其程序收
    普通文章 贫困大学生因恋爱心理扭曲 持枪杀
    普通文章 大学四年,我没有谈过一次恋爱
    普通文章 大二学生对话新生:恋爱放纵不是大
    普通文章 大学新生军训强制女生剪短头发遭
    普通文章 大学新生军训强制女生剪短头发遭
    普通文章 找关系开发人脉 85后大学新生打探

     

    最 新 热 门 最 新 推 荐 相 关 文 章
    基于Linux内核的键盘模拟…
    基于μC/OS的嵌入式系统…
    基于Vxworks实时操作系统…
    基于J2ME平台的SOAP协议…
    基于ARM核的AT75C220及其…
    使用http协议和winsocka…
    基于CDMA的无线图像监控…
    基于EDA技术的FPGA设计
    基于ASP.NET的Web网络应…
    基于ASP技术开发Web数据…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 关于我们 | 友情链接 | 发展历程 | 用户留言 | 管理登录 | 
    420Studio