I/O 请求数据包

MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/hh439638(v=vs.85).aspx

发送到设备驱动程序的大部分请求都打包在 I/O 请求数据包 (IRP) 中。操作系统组件或驱动程序将 IRP 发送到驱动程序,方法是调用 IoCallDriver,它有两个参数:指向 DEVICE_OBJECT 的指针和指向 IRP 的指针。DEVICE_OBJECT 具有指向关联 DRIVER_OBJECT 的指针。当组件调用 IoCallDriver 时,我们说组件将 IRP 发送到设备对象将 IRP 发送到与设备对象关联的驱动程序。有时,我们使用短语传递 IRP 或转发 IRP 而非发送 IRP

通常,IRP 由在堆栈中排列的多个驱动程序进行处理。堆栈中的每个驱动程序都与一个设备对象关联。有关详细信息,请参阅设备节点和设备堆栈。如果 IRP 由设备堆栈进行处理,则通常首先发送 IRP 至设备堆栈中的顶部设备对象。例如,如果 IRP 由此图中显示的设备堆栈进行处理,则会首先将 IRP 发送至设备堆栈顶部的筛选器设备对象(筛选器 DO)。

沿着设备堆栈向下传递 IRP

假设 I/O 管理器将 IRP 发送至图中的筛选器 DO。与筛选器 DO 关联的驱动程序 AfterThought.sys 处理 IRP,然后将其传递至功能设备对象 (FDO),该对象在设备堆栈中紧挨设备对象之下。当驱动程序将 IRP 传递至设备堆栈中紧挨设备对象之下的对象时,我们说驱动程序沿着设备堆栈向下传递 IRP

某些 IRP 沿着设备堆栈一路向下传递至物理设备对象 (PDO)。其他 IRP 从未到达 PDO,原因是这些 IRP 由 PDO 之上的驱动程序之一完成。

IRP 为自包含型

就 IRP 包含驱动程序处理 I/0 请求所需的全部信息而言,IRP 结构为自包含结构。IRP 结构的某些部分包含堆栈中所有参与驱动程序共同的信息。IRP 的其他部分包含特定于堆栈中特定驱动程序的信息。

时间: 2024-12-25 04:46:46

I/O 请求数据包的相关文章

iOS开发之Socket通信实战--Request请求数据包编码模块

实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncSocket来进行长连接连接和传输数据,该第三方地 址:https://github.com/robbiehanson/CocoaAsyncSocket,读者可以自行google或者baidu搜索 这个库的用法,网上有很多资料,而且用法不难. 在一些对Socket通信使用需求不是很高的应用中,比如需要

JavaWeb_响应和请求数据包

Google浏览器 F12中Network->Header部分 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.ge

Servlet处理Json请求数据包

request.setCharacterEncoding('UTF-8'); response.setContentType('text/html;charset=UTF-8'); String acceptjson = ''; BufferedReader br = new BufferedReader(new InputStreamReader( (ServletInputStream) request.getInputStream(), 'utf-8')); StringBuffer sb

“ping”命令的原理就是向对方主机发送UDP数据包,HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”

Socket  是一套建立在TCP/IP协议上的接口不是一个协议 应用层:  HTTP  FTP  SMTP  Web 传输层:  在两个应用程序之间提供了逻辑而不是物理的通信(TCP  UDP) TCP  可靠的  面向连接的服务 UDP  不可靠的  无连接的服务 只要底层实现TCP IP协议  都可以用socket进行通信 1.TCP和UDP 1.1 TCP连接 TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往

http请求数据的格式

最近看了tinyhttpd的服务器代理,看了看http请求数据包的格式和内容 http请求报包含三个部分: 请求行 + 请求头 + 数据体 请求行包含三个内容 method + request-URI + http-version method 包含有 post , get, head,delete, put, connect, options, patch, propfind, propatch, mkcol, copy, move, lock, unlock, trace, head 方法:

使用Wireshark追踪分析PVS PXE启动数据包

Citrix Provisioning Service使用了PXE技术来启动虚拟机给用户使用. 首先, 虚拟机默认下必须设置为网卡启动,网卡通过PXE bootROM在网络中发送FIND帧,该数据帧包含了自己的MAC网卡地址,DHCP服务器接收到该数据帧后,会向网卡返回数据包,其中包括了DHCP为网卡分配的IP地址.子网掩码.网关等信息,网卡收到服务器的指派的参数后,会通过TFTP向服务器发起连接请求,以便和服务器建立连接,并开始数据通信. 客户端和TFTP服务器建立通讯之后,就会从实现DHCP

openVswitch(OVS)源代码分析之工作流程(数据包处理)

上篇分析到数据包的收发,这篇开始着手分析数据包的处理问题.在openVswitch中数据包的处理是其核心技术,该技术分为三部分来实现:第一.根据skb数据包提取相关信息封装成key值:第二.根据提取到key值和skb数据包进行流表的匹配:第三.根据匹配到的流表做相应的action操作(若没匹配到则调用函数往用户空间传递数据包):其具体的代码实现在 datapath/datapath.c 中的,函数为: void ovs_dp_process_received_packet(struct vpor

SDN Overlay 网络中虚机数据包的转发(2)

在配置了网络虚拟化(Overlay)的网络结构中,处于Overlay网络中的虚机数据包的封装和MAC地址学习和传统物理网络(Underlay)相似又不尽相同.除了我们了解Overlay网络需要借助Underlay网络进行二次封装之外,其MAC地址学习过程也相对要曲折一些.这些MAC地址学习过程取决于多种因素: 虚机是否在同一虚拟子网? 虚机是否在同一虚机网络的不同虚拟子网? 虚机是否运行于同一台物理机? 虚机是否运行在不同的物理机? 不同的场景,虚机之间学习对方的MAC地址,以及在互相学习到对方

http请求/响应包格式

一.什么是http协议? 转载:http://blog.csdn.net/daijin888888/article/details/51025634 由w3c制订的一种网络应用层协议,定义了浏览器与web服务器之间通信的过程以及通信时所使用的数据格式.        1)通信的过程            step1,浏览器建立与web服务器之间的连接            step2,浏览器将请求数据打包(生成请求数据包)并发送给web服务器.            step3,web服务器将处