Windows Debugging之十一

I/O数据结构

==========

数据结构

有四种代表I/O请求的主要的数据结构: file objects(文件对象), driver objects(驱动对象),  device objects(设备对象), I/O request packets(IRPs)(IO请求封包)

这些数据结构中的每一个都定义在DDK文档库中的头文件NTDDK.H中. 你可以使用内核debugger的命令!file, !devobj, !drvobj, 和 !irp来查看它们.


文件对象- File Object
这是一个代表着打开的文件, 设备, 目录, 卷等的, 在用户态可见的对象. 文件对象可以通过文件句柄来访问, 文件句柄是由受保护的子系统函数返回的, 而该子函数是向下调用打开文件对象的系统服务的. IO系统服务的调用者是等待文件句柄的. 在任何一个给定的时刻, 几个文件对象可以与一个单个的, 共享的文件联系起来, 但是每一个这样的文件都有一个独一无二的句柄, 和一个objcet-specific的当前文件指针的值.

文件对象有时也被叫做"persistent object", 因为这个在所有运行时文件对象集后台的实体在系统启动之后, 就被保存起来了.


驱动对象- Driver Object
是一个代表驱动加载镜像的仅内核态对象, 被IOmanager使用, 用来定位驱动中的某些入口点. 

 

设备对象- Device Object
由IO manager定义的内核态对象, 代表着物理的, 逻辑的, 虚拟的设备. 所有的驱动都调用IoCreateDevice方法来为物理的, 逻辑的, 虚拟的设备创建和初始化一个设备对象, 驱动程序服务于该对象. PnP驱动创建三种设备对象: 总线驱动创建PDO, 功能驱动创建FDO, 过滤驱动创建DO. 设备作为一个命名了的文件对象从而对终端用户是可见的, 通过一个命名的设备接口对用户态的代码可见.(受保护的子系统).

posted on   中道学友  阅读(197)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

< 2009年12月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

技术追求准确,态度积极向上

点击右上角即可分享
微信分享提示