常见内核数据结构.doc

  1. 驱动框架常见数据结构
  2. 驱动对象结构 (DRIVER_OBJECT)

每个驱动对象代表一个已加载的内核驱动程序,指向驱动对象结构的指针常常作为DriverEntry, AddDevice, Unload等函数的参数。

驱动对象结构是半透明的(即结构中只有部分域是公开的),其中公开的域包括DeviceObject[指向由此驱动创建 的设备对象], DriverExtension[指向快速i/o函数入口], HardwareDatabase, FastIoDispatch, DriverInit[指向驱动入口点地址(DriverEntry)], DriverStartIo, DriverUnload[指向驱动卸载程序]以及MajorFunction[是一张函数分发表,数组的索引值与IRP_MJ_Xxx相对应].

kd> dt nt!_driver_object

http://blog.csdn.net/denglin_123/article/details/6501738

  1. 设备对象结构  (DEVICE_OBJECT)

系统使用设备对象结构来描述一个设备对象。

DriverObject域指向创建此设备对象的驱动程序对象; NextDevice域指向同一个驱动程序创建的下一个设备对象;AttachedDevice域指向绑定到此设备对象上的设备对象; Flags域指定了该设备对象的标记(缓冲读写方式还是直接读写方式);Vpb域指向与此设备对象相关的卷参数块;DeviceExtension域指向设备扩展,设备扩展中的内容由程序设计者自定义,往往用来记录与设备相关的一些信息。

kd> dt nt!_device_object

kd> dt nt!_unicode_string

http://blog.csdn.net/denglin_123/article/details/6501740

  1. 进程与线程数据结构

a. 执行体进程块 (EPROCESS)

执行体进程块是一个不透明的数据结构,用来描述一个进程对象。驱动程序可以调用PsGetCurrentProcess函数获取指向当前进程的执行体进程块指针。

kd> dt nt!_EPROCESS

  1. 内核进程块 (KPROCESS)
  2. 执行体线程块 (ETHREAD)
  3. 内核线程块 (K THREAD)
  1. 存储系统数据结构
  2. 卷参数块(VPB)
  3. 文件对象(File_Object)
  4. SCSI请求块(SPB)
  1. 网络数据结构
  2. 其他一些常见的数据结构
  3. 对象结构

任何一个对象都包括固定的对象头和不固定的对象体两部分,对象体的结构由对象类型决定。【类型为文件(FILE)的对象体结构为FILE_OBJECT,而对象头的数据结构是固定的(注意随着系统的不同,对象头的结构也会发生变化)】

kd> dt ntkrpamp !_OBJECT_HEADER

  1. 链表结构

Windows内核使用LIST_ENTRY结构组织双向链表

kd> dt nt!_LIST_ENTRY

  1. APC和DPC
  2. PE文件相关结构
  3. 基于分发器对象的同步对象结构
  4. 内存区对象(SECTION_OBJECT)
  1. 其他
原文地址:https://www.cnblogs.com/wolflion/p/3093281.html