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

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函数
 
     
     

转载于:https://www.cnblogs.com/Tbit/archive/2010/03/31/1701632.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值