zoukankan      html  css  js  c++  java
  • 常见内核数据结构.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. 其他
  • 相关阅读:
    如何保证access_token长期有效
    微信自定义菜单的创建
    是否同一棵二叉搜索树
    Tree Traversals Again(根据前序,中序,确定后序顺序)
    List Leaves 树的层序遍历
    leetcode-优美的排列
    leetcode-下一个排列
    leetcode-二进制手表
    leetcode-组合总数III(回溯)
    leetcode-累加数(C++)
  • 原文地址:https://www.cnblogs.com/wolflion/p/3093281.html
Copyright © 2011-2022 走看看