基于windowsxx开发wdm设备驱动程序的方法

基于windowsxx开发wdm设备驱动程序的方法

ID:30640978

大小:19.78 KB

页数:9页

时间:2019-01-02

基于windowsxx开发wdm设备驱动程序的方法_第1页
基于windowsxx开发wdm设备驱动程序的方法_第2页
基于windowsxx开发wdm设备驱动程序的方法_第3页
基于windowsxx开发wdm设备驱动程序的方法_第4页
基于windowsxx开发wdm设备驱动程序的方法_第5页
资源描述:

《基于windowsxx开发wdm设备驱动程序的方法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、从本学科出发,应着重选对国民经济具有一定实用价值和理论意义的课题。课题具有先进性,便于研究生提出新见解,特别是博士生必须有创新性的成果基于WindowsXX开发WDM设备驱动程序的方法摘要:本文介绍了Windows000WDM驱动程序结构及其原理,给出一个驱动程序的例子关键词:WDM驱动程序1.概述引入了全新的WDM(Win3DriverModel)的驱动程序架构,说是新技术,其实早在1997年Microsoft就提出了该项技术并在Windows8中得到了充分的应用,换句话说,Windows8也支持WDM。这样W

2、DM就成为了一个跨平台的驱动程序模型不仅如此WDM驱动程序还可以在不修改源代码的情况下经过重新编译后在非Intel平台上运行。2.WDM设备驱动程序的特点和原理通用驱动程序对基本上一样的硬件,因为他们共享一个总线或完成类似的任务,设备驱动程序可以使用这些标准的驱动程序功能,使公共总线的共享容易,且更容易写出新的驱动程序,总线驱动程序,如USB、1394,和类驱动程序。(1)Win32程序接口:可以使用Win32函数像访问文件那样访问设备CreateFile()、Closehandle()、ReadFile()、W

3、riteFile()、DevicEioControl用于课题份量和难易程度要恰当,博士生能在二年内作出结果,硕士生能在一年内作出结果,特别是对实验条件等要有恰当的估计。从本学科出发,应着重选对国民经济具有一定实用价值和理论意义的课题。课题具有先进性,便于研究生提出新见解,特别是博士生必须有创新性的成果发出特殊请求,可发送数据给驱动和从驱动得到数据,IOCTL代码可以是预先定义的也可是自己定义的。(2)创建设备大多数WDM设备对象都是在PnP管理器中调用AddDevice入口时创建,这个PnP例程在插入新设备和安装

4、Inf文件时被调用,此后一系列的PnPIRP被发送到驱动程序,指示设备应如何启动和查询它的功能的工作原理WDM是在驱动程序结构上发展起来的,所以它与驱动程序极为相似,但是它却有了本质上的提高,比如它支持USB、IEEE1394、ACPI等全新的硬件标准。虽然Windows8与Windows000都支持WDM,可是并不意味着Windows8下的VxD可以在Windows000下运行,而NT下的WDM却可以在Windows8下运行。不过原先准备在两个平台上同时运行需要编写两个截然不同的驱动程序,而现在只需要编写一个W

5、DM驱动程序就可以了。同驱动程序一样,WDM驱动程序也是分层的,即不同层上的驱动程序有着不同的优先权,而Windowsx下的VxD则没有此结构。另外,WDM还引入了功能设备对象FDO与物理设备对象PDO两个新概念来描述硬件,一个PDO代表一个真实硬件,在驱动程序看来则是一个FDO。课题份量和难易程度要恰当,博士生能在二年内作出结果,硕士生能在一年内作出结果,特别是对实验条件等要有恰当的估计。从本学科出发,应着重选对国民经济具有一定实用价值和理论意义的课题。课题具有先进性,便于研究生提出新见解,特别是博士生必须有创

6、新性的成果另外值得注意的是,一个硬件只允许有一个PDO,但却可以拥有多个FDO,而在驱动程序中我们不是直接操作硬件而是操作相应的PDO与FDO。在Ring-3与Ring-0通讯方面,操作系统为每一个用户请求打包成一个IRP结构,将其发送至驱动程序并通过识别IRP中的PDO来识别是发送给哪一个设备的。另外,在驱动程序的加载方面WDM既不靠驱动程序名称也不靠一个具有某种特殊意义的ID,而是依靠一个128位的GUID来识别驱动程序。 IRP处理I/O请求包IRP是驱动程序操作的中心,IRP是一个内核对象,它是预先定义好

7、的数据结构,带有一组对它进行操作的I/O管理器例程,I/O管理器接受一个I/O请求,然后将它传送到合适的驱动程序栈中的最高驱动程序之前,分配并处始化一个IRP,每个I/O请求有主功能代码参数比如一个写的I/O请求转换成一个IRP时,I/O管理器填写主要的IRP首部,并构造第一个个栈单元,对写请求来讲,首部包含用户缓冲区信息,而栈单元则包含写的具体参数。如果调用另一个驱动则必须创建下一个栈单元。一个IRP到栈顶时,使用PIO_STACK_LOCATIONIoGetCurrentIrpStackLocation(IN

8、PIRPIrp);IoGetCurrentIrpStackLocationreturnsapointertothecaller'sstacklocationinthegivenIRP。如决定需要把这个IRP沿设备栈向下传递,使用IoCopyCurrentIrpStackLocationToNextor课题份量和难易程度要恰当,博士生能在二年内作出结果,硕士生能在一年内作出

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。