驱动开发(6)NT驱动的基本结构

本文详细介绍了Windows驱动开发中的NT驱动基本结构,包括驱动对象DRIVER_OBJECT和设备对象DEVICE_OBJECT的重要成员,以及如何创建设备、创建符号连接和释放资源。通过示例展示了驱动加载、设备创建和驱动卸载的过程,为理解WDM和KWDF驱动打下基础。
摘要由CSDN通过智能技术生成

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/49047055

在之前的一篇博文“驱动开发(2)第一个NT驱动和NT驱动的编译”(http://blog.csdn.net/zuishikonghuan/article/details/48805945)中,给出了一个空壳驱动,下面,将会以此源码为基础进行扩充,并给大家解说一下NT驱动的基本结构。其实WDM和KWDF驱动也是基于此的。

1。驱动对象 DRIVER_OBJECT

驱动的入口函数 DriverEntry 的第一个参数就是驱动加载时系统为当前驱动创建的驱动对象的指针。

这个结构微软没有完全公开,如果有兴趣可以可以到网上找找相关资料。其中一些重要的成员有:

PDEVICE_OBJECT DeviceObject:指向第一个设备对象的指针。一个驱动可以创建多个“设备”,这个成员是指向第一个设备对象的指针。驱动程序可以使用此成员和 DEVICE_OBJECT 的 NextDevice 成员来逐句通过驱动程序创建的所有设备对象的列表。

UNICODE_STRING DriverName:驱动名称,是 UNICODE_STRING 字符串。(见我的上上篇博文“内核中的字符串”)

PDRIVER_DISPATCH MajorFunction:派遣函数的指针。应将他视作一个数组,通过他注册派遣函数,如何注册我已经在之前的那一篇博文“驱动开发(2)第一个NT驱动和NT驱动的编译”中详细说了。

PDRIVER_UNLOAD DriverUnload:驱动卸载函数的指针。指向一个卸载函数,驱动卸载时负责清理工作,应在这个函数中关闭打开的句柄、释放申请的内存,防止内存泄露。如果驱动程序不注册卸载函数,那么驱动一旦加载就无法卸载。同样,如何注册我已经在之前的那一篇博文“驱动开发(2)第一个NT驱动和NT驱动的编译”中详细说了。

2。设备对象 DEVICE_OBJECT

结构原型:

typedef struct _DEVICE_OBJECT {
  CSHORT                      Type;
  USHORT                      Size;
  LONG                        ReferenceCount;
  struct _DRIVER_OBJECT  *DriverObject;
  struct _DEVICE_OBJECT  *NextDevice;
  struct _DEVICE_OBJECT  *AttachedDevice;
  struct _IRP  *CurrentIrp;
  PIO_TIMER                   Timer;
  ULONG                       Flags;
  ULONG                       Characteristics;
  __volatile PVPB             Vpb;
  PVOID                       DeviceExtension;
  DEVICE_TYPE                 DeviceType;
  CCHAR                       StackSize;
  union {
    LIST_EN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值