WDM中的结构(2) ---驱动程序对象

WDM中的结构

                               ---驱动程序对象

驱动程序对象(DRIVER_OBJECT)是装载后的驱动程序的映像。驱动程序对象的指针作为参数传递给DriverEntry例程和重初始化或卸载例程。驱动程序对象由I/O管理器在装载驱动程序时创建,并由其负责删除。在初始化期间,DriverEntry例程要负责把要把驱动程序函数(即Dispatch例程)指针装入到驱动程序对象的MajorFunction中,如DispatchPower、DispatchPnp等例程,I/O管理器根据驱动程序对象的Dispatch例程指针找到相应IRP的处理函数。

由于驱动程序对象是驱动程序装载后的映像,因此系统内每一个驱动程序都只由唯一的一个驱动程序对象。只有在DriverEntry例程中可以直接修改驱动程序对象的各个字段,没有其他方法(函数)可以修改驱动程序对象。

驱动程序对象也是半透明的,只有以下几个字段可以修改:

 

PDEVICE_OBJECT DeviceObject     驱动程序创建的设备对象的指针。在IoCreateDevice      函数中自动创建,通过它,驱动程序可以遍历设备对象列表。

PDRIVER_EXTENSION DriverExtension  驱动扩展指针。此结构唯一可访问的是DriverExtension->AddDevice字段,用来存储AddDevice例程指针。

PUNICODE_STRING HardwareDatabase 指向注册表/Registry/Machine/Hardware中硬件配置信息

PFAST_IO_DISPATCH FastIoDispatch 指向驱动的fast I/O进入点的指针

PDRIVER_INITIALIZE DriverInit  指向DriverEntry的指针,由I/O管理器设置

PDRIVER_STARTIO DriverStartIo  函数StartIO进入点指针,在DriverEntry 函数内设置

PDRIVER_UNLOAD DriverUnload 函数DriverUnload进入点指针,在DriverEntry函数内设置

PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1]

                                                         IRP处理例程指针组成的数组,通过此数组分发IRP。数组的内容在DriverEntry函数内设置。

 

    此结构在wdm.hntddk.h内定义。

    另外,驱动程序进入点DriverEntry函数的名称最好不要改(当然,也不是不能改,但会很麻烦,因为要为连接器重定义入口点名称),否则系统找不到此函数的偏移地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值