wdm驱动程序的框架

wdm驱动程序的框架

ID:32585845

大小:65.52 KB

页数:15页

时间:2019-02-13

wdm驱动程序的框架_第1页
wdm驱动程序的框架_第2页
wdm驱动程序的框架_第3页
wdm驱动程序的框架_第4页
wdm驱动程序的框架_第5页
资源描述:

《wdm驱动程序的框架》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、WDM驱动程序的框架1・DriverEntry()DDK中定义的函数原型如下:NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject.INPUNICODE_STRINGRegistryPath);DriverEntry的第一个参数是一个指针,指向一个刚被初始化的驱动程序对象,该对象就代表你的驱动程序。DriverEntry的第二个参数是设备服务键的键名。如果该例程执行成功,则返回STATUS_SUCCESS,如果失败,则依据失败状态返回定义在ntstatus.h中的错误值。这是驱动程序的入口函数,相当于用户态程序的main()函数

2、,它在驱动程序被加载进内存的时■候调用。主要工作是把各种函数指针填入驱动程序对彖。这些指针为操作系统指明了驱动程序容器屮各种子例程的位置,这样,该驱动程序对彖关联的设备对象在接收到上层的IRP的时候,就会通过驱动程序对象中设置的函数指针,找到相应的派遣函数來做处理。Eg.—个简单的DriverEntry()代码片断:DriverObject->DriverUnload=DriverUnload;<—1DrivcrObjcct->DrivcrExtcnsion-〉AddDcvicc二AddDcvicc;DriverObject->DriverStartIo=Startlo;

3、DriverObject->MajorFunction[TRPMJCREATE]二DriverDispatchCreate;<—2DriverObject->MajorFunction[IRPMJCLOSE]二DriverDispatchClose;DriverUnload指向驱动程序的清除例程。I/O管理器会在卸载驱动程序前调用该例程。通常,WDM驱动程序的DriverEntry例程一般不分配任何资源,所以DriverUnload例程也没冇什么清除工作要做。DriverDispatchxxx驱动程序可能仅需要处理儿种类型的IRP,所以至少应该设置与那儿种IRP类型相对应

4、的指针元素,使它们指向相应的派遣函数。AddDevice指向驱动程序的AddDevice两数,在该畅数中主耍创建一个设备对象并把它连接到以pdo为底的设备堆栈中。2.AddDevice()DDK中定义的函数原型如下:NTSTATUSAxxAddDevice(INPDRIVER_OBJECTDriverObject,INPDEVICE_OBJECTPhysicalDeviceObject);AddDevice隊i数的第一个参数是指向该驱动的驱动对彖的指针,第二个参数代表由底层驱动创建的物理设备对象。对于功能驱动程序,其AddDevice函数的某木职责是创建一个设备对象并把它

5、连接到以pdo为底的设备堆栈中。相关步骤如下:true1.调用loCreateDevice()创建设备对象,并建立一个私有的设备扩展对彖。true2.寄存一个或多个设备接口,以便应用程序能知道设备的存在。另外,还可以给出设备名并创建符号连接。true3.初始化设备扩展和设备对象的Flag成员。true4.调用IoAttachDeviceToDeviceStack()函数把新设备对象放到堆栈上。※关于AddDevice()pKi数:在规范的WDM程序屮,创建设备对象的任务本来该由AddDevicepKi数来做,而这个函数也是通过驱动程序对象的一个函数指针來定位的。在这种规范

6、的WDM程序中,一旦有新硬件加入,系统就会口动通过驱动程序对象的函数指针找到AddDevice函数,并调用它來创建设备对象。但是在这里,并不是在为实际存在的硬件写驱动,而只是写一个内核模式下的程序,因此就只需耍在DriverEntry函数中创建一个设备对彖,然后创建设备链接(可选)就可以了。(以上为网上摘录)2.DriverDispatchXXX一般派遣函数冇两个参数:一个指向DEVICE_OBJECT结构的指针,指向由驱动在AddDeviceC或DriverEntry)中创建的设备对象。第二个参数是指向一个IRP结构的指针。派遣两数DriverDispatchXXX主要

7、负责处理上层的IRP。这里先要提一下,每个IRP都与两个数据结构相关联,就是IRP本身和IRPStack——IO_STACK_LOCATION结构。在这两个结构里面,包含了所有上层传递给木层设备对象的信息。最重耍的一个信息就是:在IO_STACK_LOCATION结构中,包含了IRP的功能码MajorFunction和MinorFunction(IRP的功能码标识了该IRP具体是什么请求,比如读请求的MajorFunction值为IRP_MJ_READ)oDriverDispatch函数的处理流程一般是这样的:首先通过IRP获

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

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

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