zoukankan      html  css  js  c++  java
  • 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. 设备作为一个命名了的文件对象从而对终端用户是可见的, 通过一个命名的设备接口对用户态的代码可见.(受保护的子系统).

  • 相关阅读:
    手写redux
    require.context
    webpack cdn加速
    spy-debugger安装、调试步骤
    MAC设置应用在127.0.0.1:80
    javascript数据结构——栈
    Immutable.js了解一下?
    自己搭建服务器.并返回结果
    vue-cli2与vue-cli3在一台电脑共存
    JavaScript点击事件-一个按钮触发另一个按钮
  • 原文地址:https://www.cnblogs.com/awpatp/p/1614781.html
Copyright © 2011-2022 走看看