Windows内核编程基础篇之常见内核数据结构

    1,驱动框架常见数据结构有 驱动对象结构,  设备对象结构等。

        A)驱动对象结构  (DRIVER_OBJECT)

            每个驱动对象代表一个已加载的内核驱动程序,指向驱动对象结构的指针常常作为DriverEntryAddDeviceUnload等函数的参数。驱动对象结构式半透明的。其中公开的域包括DeviceObject,DriverExtension,HardwareDatabase ,FastIoDispath,DriverInit,DriverStartIo,DriverUnload以及MajorFunction

        驱动对象的数据结构如下:

typedef struct _DRIVER_OBJECT {
  CSHORT Type;
  CSHORT Size;
//
  // The following links all of the devices created by a single driver
  // together on a list, and the Flags word provides an extensible flag
  // location for driver objects.
  //
PDEVICE_OBJECT DeviceObject;
  ULONG Flags;
//
  // The following section describes where the driver is loaded. The count
  // field is used to count the number of times the driver has had its
  // registered reinitialization routine invoked.
  //
PVOID DriverStart;
  ULONG DriverSize;
  PVOID DriverSection;
  PDRIVER_EXTENSION DriverExtension;
//
  // The driver name field is used by the error log thread
  // determine the name of the driver that an I/O request is/was bound.
  //
UNICODE_STRING DriverName;
//
  // The following section is for registry support. Thise is a pointer
  // to the path to the hardware information in the registry
  //
PUNICODE_STRING HardwareDatabase;
//
  // The following section contains the optional pointer to an array of
  // alternate entry points to a driver for "fast I/O" support. Fast I/O
  // is performed by invoking the driver routine directly with separate
  // parameters, rather than using the standard IRP call mechanism. Note
  // that these functions may only be used for synchronous I/O, and when
  // the file is cached.
  //
PFAST_IO_DISPATCH FastIoDispatch;
//
  // The following section describes the entry points to this particular
  // driver. Note that the major function dispatch table must be the last
  // field in the object so that it remains extensible.
  //
PDRIVER_INITIALIZE DriverInit;
  PDRIVER_STARTIO DriverStartIo;
  PDRIVER_UNLOAD DriverUnload;
  PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
} DRIVER_OBJECT;
  typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; // ntndis


      其中DeviceObject域指向由此驱动创建的设备对象:FastIoDispath域指向快速I/O 入口。DriverInit指向驱动入口点地址(DriverEntry):DriverUnload 指向驱动卸载程序:MajorFunction 是一张函数分发表,数组的所引致与IRP_MJ_Xxx相对应。

     自己重新对上面的结构体认识了下,省略了部分,主要了解下面的:

typedef struct _DRIVER_OBJECT{
       //结构的类型和大小
       CSHORT  Type;
       CSHORT  Size;
       //设备对象,这里实际上是一个设备对象的链表的开始。因为 DeviceObject 中有相关链表信息。
       PDEVICE_OBJECT  DeviceObject;
       •••
       //这个内核模块在内核空间中的开始地址和大小
       PVOID  DriverStart;
       ULONG  DriverSize;
       •••
       //驱动的名字
       UNICODE_STRING  DriverName;
       •••
       //快速IO分发函数
       PFAST_IO_DISPATCH  FastIoDispatch;
       •••
       //驱动的卸载函数
       PDRIVER_UNLOAD.DriverUnload;
       //普通分发函数
       PDRIVER_DISPATCH  MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
}DRIVER_OBJECT;
     这样看起来是不是 少了很多呢, 上面做了注释的是 主要需要了解的。


-------------------------------------------------------------------------------------------------------

       B)设备驱动程序(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_ENTRY         ListEntry;
    WAIT_CONTEXT_BLOCK Wcb;
  } Queue;
  ULONG                       AlignmentRequirement;
  KDEVICE_QUEUE       
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《寒江独钓Windows内核编程源码》是一本非常经典的内核编程书籍。该书主要介绍了Windows内核的结构和工作原理,以及如何进行内核编程。作者通过自己的实践经验,深入浅出地解释了内核编程的基本原理和技巧。 该书的主要内容包括:Windows内核架构、内核模式和用户模式编程、驱动程序开发、处理器管理、内存管理、进程和线程管理、设备驱动程序、文件系统等。通过学习这些内容,读者可以全面了解Windows内核的各个方面,并具备进行内核编程基础知识和技能。 内核编程是一项非常高级和复杂的技术,需要读者具备扎实的操作系统和编程基础。《寒江独钓Windows内核编程源码》提供了丰富的源码示例和实践案例,帮助读者加深对内核编程的理解,并能够在实践中掌握内核编程的各种技巧和方法。 通过学习该书,读者可以深入了解Windows内核的工作原理和开发方法,提升自己的技术水平,并有可能在内核开发领域取得突破。同时,该书也适合作为操作系统课程的参考书籍,帮助读者更好地理解操作系统的底层原理和设计思想。 总之,《寒江独钓Windows内核编程源码》是一本值得学习的经典书籍,通过学习该书,读者可以从理论和实践两个方面全面提升自己的内核编程能力。 ### 回答2: 寒江独钓Windows内核编程源码,这是指在Windows操作系统内核级别的编程过程中,个人独自执钓的情景。在传统的Windows内核编程中,需要深入理解Windows操作系统的内部机制、数据结构和调度算法,并通过编写驱动程序或者修改系统核心源码来实现特定的功能或解决某些问题。这是一项相当具有挑战性和专业性的技术领域。 寒江者,指的是独自一人默默钓鱼的情景。在这个比喻中,内核编程者是在深入学习和专研Windows内核编程的过程中,独自探索和解决问题,就像在江边的一个人默默地捕捞。 Windows内核编程源码指的是Windows操作系统的核心代码。对这些源码的学习和理解,是了解Windows操作系统内部工作原理的关键。通过研究内核编程源码,我们可以了解系统如何管理进程、内存分配、文件系统等功能,以及与硬件的交互过程。 进行寒江独钓Windows内核编程源码可以带来许多好处。首先,它可以深入了解Windows操作系统的底层工作原理,从而更好地进行系统调试和性能优化。其次,它可以为用户定制和开发高性能的驱动程序,提升系统的稳定性和响应能力。此外,通过研究内核编程源码,可以了解Windows操作系统的安全性和漏洞,从而更好地防范和解决安全问题。 然而,寒江独钓Windows内核编程源码并不是一项简单的事情,它需要对操作系统原理、编程语言和底层架构有深入的理解。同时,需要拥有扎实的计算机科学基础编程技巧,以及耐心和毅力来解决各种挑战和问题。 总之,寒江独钓Windows内核编程源码是一项有挑战性的技术活动,通过对Windows操作系统内核代码的深入研究和理解,可以提高对系统的控制和优化能力,从而为用户提供更好的系统性能和功能。 ### 回答3: 《寒江独钓Windows内核编程源码》是一本关于Windows内核编程的书籍,作者以“寒江独钓”来形容自己在Windows内核编程领域的独孤求败之意。这本书主要介绍了Windows操作系统的内核编程细节和原理。 在这本书中,作者首先介绍了Windows内核的基本概念和架构,包括进程和线程管理、内存管理、驱动程序开发等。接着,作者深入讲解了Windows内核的各个模块和重要组件的实现原理,如调度器、文件系统、网络协议栈等。读者可以通过学习这些源码,深入理解Windows内核的工作原理和设计思想。 《寒江独钓Windows内核编程源码》不仅仅是一本理论性的书籍,更重要的是它提供了丰富的源代码示例和实践案例,读者可以通过实际的代码实现和调试来加深对内核编程的理解。同时,本书还特别注重实用性,提供了大量的编程技巧和调试技巧,帮助读者快速掌握Windows内核编程的方法和技巧。 总之,《寒江独钓Windows内核编程源码》是一本全面而深入的Windows内核编程技术书籍,适合那些对Windows系统内核感兴趣的程序员和操作系统开发者阅读。通过学习这本书,读者可以系统地学习Windows内核编程的原理和实践,提升自己的技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值