驱动学习笔记 之 认识驱动架构

1. NT 驱动的构架

 

    1.1 入口函数:  DriverEntry
   接受两个参数,  pDriverObject,该参数有I/O管理器传递. 驱动对象
                pRegisterpath ,驱动程序在注册表中的路径

 

   DriverEntry主要实现以下功能:
    1,注册其他驱动调用函数的入口:
     有DriverUnload,以及一些IRP_MI_XXX消息的处理函数

 

    2.创建驱动设备对象:
        首先,创建设备名称 devName,使用RtlInitUnicodeString 初始化该字符串
      然后,调用IoCreateDevice函数,创建设备
      再然后调用IoSymbolicLink创建符号链接

 

 

    1.2 关于IRP_MJ_XXX消息的处理函数
   接受两个参数, pDevObj:功能设备对象
              pIrp   :I/0 requset packet
   功能:      该系列函数主要是实现对IRP_MJ_XXX进行相应的处理
 
    1.3 关于DriverUnload函数
   接受一个参数:PDRIVER_OBJECT pDriverObject
   功能:    向系统卸载列程,主要实现对一些资源的释放,比如删除符号链接

 


2. WDM 驱动的构架
   WDM驱动的构架和NT驱动构架大同小异,也是DriverEntry,IRP_MJ_XXX消息的处理,还有DriverUnload函数


   主要的差别表现在:
   1.创建驱动设备的时候,需要设置AddDevice函数.
   2.需要设置对IRP_MJ_PNP的回调函数
   3,向系统卸载例程的大部分功能也是在IRP_MN_REMOVE_DEVICE中实现的


 
        1.1 入口函数:DriverEntry
 
   1.2 AddDevice函数
       接受两个参数:  DriverObject:  从I/O管理器传来的驱动对象
                PhysicalDeviceObject: 从I/O管理器传来的物理设备对象
       功能: 添加新的设备:(描述如下)
          1,创建设备名称 devName,使用RtlInitUnicodeString 初始化该字符串
          2,调用IoCreateDevice函数,创建设备
          3,用IoAttachDeviceToDeviceStack函数将这个fdo挂接在设备堆栈上,并将返回值记录在设备扩展结构中.
          4,最后,调用IoSymbolicLink创建符号链接
 
     1.3 处理IRP_MJ_PNP的函数
       接受两个参数: fdo和Irp
       功能:对即插即用IRP进行处理,主要是IRP_MN_XXX消息处理. 应注意IRP_MN_STOP_DEVICE 该消息
 
     1.4 处理IRP_MN_REMOVE_DEVICE
      接受两个参数:fdo 和 Irp
      功能:向系统卸载大部分例程

     1.5其他的处理IRP_MJ_XXX函数
 
 1.6 DriverUnload函数
 
     
     

posted @ 2010-03-31 18:02  Tbit  阅读(393)  评论(0编辑  收藏  举报