学习笔记之DRIVER_OBJECT对象结构

驱动对象(DRIVER_OBJECT) 每个驱动程序会有唯一的DRIVER_OBJECT驱动对象与之对应,并且这个DRIVER_OBJECT是在驱动加载时候,被内核中的对象管理器所创建。它作为驱动一个实例被内核加载,并且内核对一个驱动只加载一个实例。确切的说,是由内核的I/O管理器负责加载的。驱动程序需要在DriveEntry中初始化。 typedef struct _DRIVER_OBJECT { CSHORT Type; 阅读详情

typedef struct _DRIVER_OBJECT

{

        CSHORT      Type;

        CSHORT      Size;

        //一个链表,记录了该驱动创建的所有设备对象

        PDEVICE_OBJECT  DeiceObject;

        ULONG  Flags;

        PVOID DriverStart;

        ULONG DriverSize;

        PVOID DriverSection;

        PDRIVER_EXTENSION DriverExtension;

        UNICODE_STRING DriverName;

        PUNICODE_STRING HardwareDataBase;

        PFAST_IO_DISPATCH FastIoDispatch;

        PDRIVER_INITIALIZE DriverInit;

        PDRIVER_STARTIO DriverStartIo;

        PDRIVER_UNLOAD DriverUnload;

        PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION];

}DRIVER_OBJECT;

I/O管理器在装载驱动时,首先调用IopLoadDriver()函数,该函数执行一下功能

1.   确定要装载的驱动名称,查询该驱动是否已经被装载。系统中包含一个已经装载的驱动链表,I/O管理器是通过查询这个链表确定驱动是否被装载的,如果已经被装载,则返回成功;另外注册表中也必须配置相关的信息

2.   如果驱动没有被装载,I/O管理器请求虚拟存储管理器(VMM)将驱动可执行文件映射到内存中,VMM在映射时检查该文件是否为可用的PE格式,如果不是,VMM使请求失败,驱动装载失败

3.   I/O管理器通过对象管理器创建驱动对象,该驱动对象存储在非分页内存池中,因此任意IRQL都可以访问

4.   I/O管理器将驱动对象结构清零,MajorFunction中的每一个元素被设置为IopInvalidDeiviceRequest()。该函数仅仅返回STATUS_INVALID_DEVICE_REQUEST状态码

5.   I/O管理器将DriverInit字段设置为驱动的入口程序(DriverEntry),DriverSection被初始化为驱动的Section对象指针,该section对象指向驱动的可执行文件;DriverStart设置为驱动映像的基址;DriverSize被设置为驱动映像的尺寸。

6.   I/O管理器将该驱动对象插到 NT Object Manager维护的驱动列表中

7.   HardwareDatabase字段初始化为Configuration Manager的硬件配置信息。底层驱动可以使用这个字段决定驱动启动顺序的配置;DriverName也被初始化,这样错误记录服务可以记录相关的信息

8.    I/O 管理器调用驱动初始化程序。该初始化程序总是在系统进程中IRQL_PASSIVE_LEVEL级别被调用。

 

Windg中的相关命令:

查询所有的驱动信息:!drivers

查询所有的设备对象信息!devnode 0 1

列出相应的设备对象和驱动对象信息!devobj和!drvobj

这里遇到一个问题,就是我使用dt nt!_DRIVER_OBJECT查询DriverOject对象的DriverSection字段时,不知道该如何得到驱动的文件名,不知哪位大侠指教一下。

找到NDIS驱动对象:

再用dt nt!_DRIVER_OBJECT查询

 注意上面的DriverSection字段,这个应该能连接到Ndis.sys文件的,可是我不知道咋连接,寒一个

用!ca显示的不对,用dt nt!_SECTION_OBJECT也不对,用dt nt!_SECTION_OBJECT_POINTERS 也不对,郁闷了,到底是什么呢, 

WDM中通过driver name获取Driver Object并遍历此Driver产生的Device Object 这里需要用到一个未公开的(undocumented)API 阅读详情

相关推荐

DRIVER_OBJECT,DEVICE_OBJECT 结构体分析

在wdm.h这个头文件中可以看到这两个结构体的定义,下面简单的分析一下结构体中的内容。 DRIVER_OBJECT typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; //这个驱动生成的设备对象,形成一个链,DeviceObject指向这个链 PDEVICE_OBJECT DeviceO

hushengqiang的专栏 888

《Windows NT FileSystem Internals》学习笔记之DRIVER_OBJECT对象结构

驱动编程这么长时间了,还没有 彻底理解这个玩意,呵呵惭愧。看了《Windows NT FileSystem Internals》把每一个细节搞清楚了,这里记下来,防止以后忘掉(以后还不知道能不能开发驱动呢)typedef struct _DRIVER_OBJECT{        CSHORT      Type;        CSHORT      Size;     

不论你在什么时候开始,重要的是开始之后就不要停止。 1292

驱动对象与设备对象结构解析

内核结构体简介DRIVER_OBJECTDEVICE_OBJECT 参考《windows驱动开发技术详解》、MSDN与网上诸多文章 感谢前辈们的无私贡献 DRIVER_OBJECT DRIVER_OBJECT  全字段解析 +0x0 SHORT Type; +0x2 SHORT Size;

MZLI_L的博客 537

2.5 Windows驱动开发:DRIVER_OBJECT对象结构

在Windows内核中,每个设备驱动程序都需要一个`DRIVER_OBJECT`对象,该对象由系统创建并传递给驱动程序的`DriverEntry`函数。驱动程序使用此对象来注册与设备对象和其他系统对象的交互,并在操作系统需要与驱动程序进行交互时使用此对象。`DRIVER_OBJECT`对象还包含了与驱动程序所管理的设备对象相关联的设备扩展结构,以及用于处理`I/O`请求的函数指针等信息。它是驱动程序与操作系统内核之间的桥梁,用于协调设备的操作和管理。本章将探索驱动程序开发的基础部分,了解驱动对象`DRIVE

微软技术分享 1万+

Windows NT File System Internals . pdf

Windows NT File System Internals.pdf 英文版

Windows NT 文件系统内幕(中文版)

Windows NT 文件系统内幕(中文版) 分为6个PDF文件

驱动开发:探索DRIVER_OBJECT驱动对象

入口处都会存在这样一个驱动对象,该对象内所包含的就是当前所加载驱动自身的一些详细参数,例如驱动大小,驱动标志,驱动名,驱动节等等,每一个驱动程序都会存在这样的一个结构。这一系列则是微软的调用号,不同的RIP代表着不同的涵义,但一般驱动也就会用到如下这几种调用号。编译这段程序,签名并运行,我们即可看到如下输出信息,此时当前自身驱动的详细参数都可以被输出;编译这段程序,签名并运行,我们即可看到如下输出信息,此时当前自身驱动的详细参数都可以被输出;即可得到全部的数据,这段代码可以写成如下样子,其中的。

支持一对一答疑的编程作家朱文伟的博客! 801

Windows NT File System Internals(中英文两本,含随书源码)

Windows NT File System Internals(中英文两本,含随书源码) 注意:这里的英文版是单独一本完整版,其它帖子里的英文版是分散独立的,内容有缺失~~

DRIVER_OBJECT & DEVICE_OBJECT

驱动对象结构 DRIVER_OBJECT ,定义如下:(左侧为相对于结构体起始地址的偏移量)  struct _DRIVER_OBJECT (sizeof=168)  +00 int16 Type  +02 int16 Size  +04 struct _DEVICE_OBJECT *DeviceObject  +08 uint32 Flags  +0c void *DriverStart  +10 uint32 DriverSize  +14 void *DriverSection(即为PsLoadedM

Iqian1314的专栏 2673

Windows NT文件系统深度解析

本专栏深入剖析Windows NT文件系统的核心机制,涵盖I/O管理、缓存体系、虚拟内存与驱动开发实践。结合原著《Windows NT File System Internals》的技术精髓,解析文件控制块、Unicode字符串处理、过滤器驱动设计等关键技术。适合内核开发者、系统程序员及存储技术爱好者,帮助读者掌握NT系统底层原理,提升驱动开发与系统调试能力。内容兼顾理论与实战,配有结构化代码分析与设计思路,是深入Windows系统内部不可多得的进阶指南。

【AI Infra】【RLHF框架】VeRL中WorkerGroup与Ray资源调度的协同机制剖析

本文深入剖析了VeRL框架中WorkerGroup与Ray资源调度的协同机制。通过解析Ray Placement Group的资源抽象和VeRL的RayResourcePool封装,详细阐述了WorkerGroup如何与底层资源精确绑定,并实现RLHF训练中异构、多阶段任务的灵活资源分配与动态调整,为大规模分布式强化学习训练提供了高效解决方案。

weixin_29204205的博客 391

DRIVER_OBJECT结构体

DRIVER_OBJECT结构体 http://blog.youkuaiyun.com/denglin_123/article/details/6501738 个驱动程序对象代表了一个加载了的内核模式驱动程序映像.这个驱动对象就是以DRIVER_OBJECT结构体的形式存在的.这个驱动对象的指针从驱动程序的DriverEntry函数或AddDevice函数的参数传入的. type

sourthstar的专栏 880

《深入浅出强化学习原理入门》学习笔记(三)机器人找金币应用实例

《深入浅出强化学习原理入门》学习笔记(三)MDP应用实例

lxs3213196的博客 3187

驱动对象(DRIVER_OBJECT)

驱动对象(DRIVER_OBJECT)  每个驱动程序对象代表了一个加载了的内核模式驱动程序映像.这个驱动对象就是以 DRIVER_OBJECT结构体的形式存在的.这个驱动对象的指针从驱动程序的DriverEntry函数 或AddDevice函数的参数传入的. typedef struct {     PDEVICE_OBJECT DeviceObject;     // 设备对

YL_WH的专栏 1243

(三十九)Flask 多应用架构(Multiple Apps)与 DispatcherMiddleware 实战解析

(三十九)Flask 多应用架构(Multiple Apps)与 DispatcherMiddleware 实战解析

孤寒者的博客 1万+

2025华为杯第二十二届中国研究生数学建模竞赛A题:通用神经网络处理器下的核内调度问题 - 完整解题分析+完整MATLAB源码!

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 2054

DRIVER_OBJECT

DRIVER_OBJECT 每个驱动程序对象代表一个加载的内核模式驱动程序的形象。一个指向驱动程序对象是一个输入参数,一个驱动程序的DriverEntry,AddDevice例程,和可选的重新初始化例程和它的卸载程序,如果有的话。

LH806732的专栏 1705

辐射制冷无规散射结构非球形散射体的结构优化与设计准则

本文针对辐射制冷材料中非球形散射体的光散射特性开展研究,提出了一种基于体积散射截面和不对称因子的综合评价方法。通过建立简化模型分析球体、圆柱体、长方体等六种几何形状在太阳波段的散射性能,发现金字塔形和圆锥形具有更强的后向散射能力。研究创新性地提出"反射因子SR=S(1-g)"这一评价参数,该参数与宏观反射率高度相关,为非球形散射体的优化设计提供了定量依据。仿真结果表明,合理选择散射体形状可显著提升辐射制冷材料的太阳反射率,为实现高效被动制冷提供了新的结构设计思路。

huanghm88的专栏 80
上一篇: 2008安全漏洞发展趋势Top10
下一篇: RTL8139网卡驱动程序分析
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值