DeviceIoControl函数对应的四种数据交换方式
交换方式 输入缓冲区 输出缓冲区
METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer
METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl
METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl
METHOD_NEITHER KIrp::IoctlType3IputBuffer KIrp::UserBuffer
ReadFile的处理主要是输出数据。用户提供输出缓冲及其长度。你写入数据,并说明你写入的长度。在IrpStack->Parameters.Read.Length中得到输出缓冲长度。数据写入Irp->AssociatedIrp.SystemBuffer中。实际输出数据长度请写到Irp->IoStatus.Information中即可。
WriteFile的处理与ReadFile类似。不用的是Irp->AssociatedIrp.SystemBuffer成了输入缓冲,而长度在IrpStack->Parameters.Write.Length中。
DeviceIoControl的情况稍微复杂,一般先要得到一个功能码,用户程序一般要输入数据(在输入缓冲中),同时要获得输出(请你写入输出缓冲中),并指明了这些缓冲区的长度。你还必须指明你输出数据的真实长度。
功能码在IrpStack->Parameters.DeviceIoControl.IoControlCode;
缓冲模式,输入缓冲长度为IrpStack->Parameters.DeviceIoControl.InputBufferLength;
缓冲模式,输出缓冲长度为IrpStack->Parameters.DeviceIoControl.OutputBufferLength;
共用缓冲区为Irp->AssociatedIrp.SystemBuffer;
实际输出数据长度请写到Irp->IoStatus.Information中。
DeviceIoControl函数对应的四种数据交换方式的更多相关文章
- NetFlow是一种数据交换方式,提供网络流量的会话级视图,记录下每个TCP/IP事务的信息
NetFlow是一种数据交换方式,提供网络流量的会话级视图,记录下每个TCP/IP事务的信息.也许它不能象tcpdump那样提供网络流量的完整记录,但是当汇集起来时,它更加易于管理和易读.Netflo ...
- 四种数据持久化方式(下) :SQLite3 和 Core Data
在上文,我们介绍了iOS开发中的其中2种数据持久化方式:属性列表.归档解档. 本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文 ...
- IOS的四种数据存储方式及优劣
IOS有四种经常使用数据存储方式: 第一种方法:用NSUserDefaults存储配置信息 NSUserDefaults被设计用来存储设备和应用的配置信息.它通过一个工厂方法返回默认的.也是最经常使用 ...
- 【hive】——Hive四种数据导入方式
Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3).从别的表中查询出相应的数据并导入到Hive表中:(4).在 ...
- Hive四种数据导入方式介绍
问题导读 1.从本地文件系统中通过什么命令可导入数据到Hive表? 2.什么是动态分区插入? 3.该如何实现动态分区插入? 扩展: 这里可以和Hive中的三种不同的数据导出方式介绍进行对比? Hive ...
- 013-HQL中级3-Hive四种数据导入方式介绍
Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3).从别的表中查询出相应的数据并导入到Hive表中:(4).在 ...
- Android四种数据存储方式
一.SharedPreference数据存储篇 1.作用范围 (1).它是一种轻型的数据存储方式 (2).本质是基于XML文件存储key-value键值对数据 (3).通常用来存储一些简单的配置方式 ...
- Hive总结(七)Hive四种数据导入方式
- p40_数据交换方式
一.为什么要数据交换 数据链路发展史: 二.数据交换方式 电路交换 报文交换 分组交换[数据报方式,虚电路方式] 三.电路交换 eg:电话网络(特点:**独占资源,**即使两个人不说话,链接也不会被别 ...
随机推荐
- php发送邮件(TP5)
先百度搜索phpmailer 下载phpmailer函数包 放到/vendor/下,这是tp5扩展类库目录 然后你需要一个已经开启了SMTP服务的邮箱,作为发送者邮箱,QQ邮箱163邮箱是需要自己开 ...
- chrome插件 - Manifest文件中的 background
在Manifest中指定background域可以使扩展常驻后台. background可以包含三种属性,分别是scripts.page和persistent. 如果指定了scripts属性,则Chr ...
- 2017 乌鲁木齐赛区网络赛 J Our Journey of Dalian Ends 费用流
题目描述: Life is a journey, and the road we travel has twists and turns, which sometimes lead us to une ...
- 创建一个版本库,把文件夹用Git管理起来
创建一个文件夹,把这个文件夹用Git管理起来,那么这个文件夹的改变都可以被Git跟踪到,当然也可以将Git中的文件还原到某一个时刻. 首先创建一个空的目录,然后将空的目录由Git来管理 1.建立一个文 ...
- Unity3D 重写下拉菜单/Dropdown组件、开启每个按钮可用
Override Dropdown Component 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) ...
- lvm创建 及 扩空 等相关
1.先对磁盘进行LVM 设置 2.pvcreate 物理卷的创建 pvcreate /dev/### 3.vgcreate 物理卷组的创建 vgcreate vg_name /dev/### ...
- 无用之flask
Oldboy s4 Flask Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收 ...
- How to generate a new dictionary file of mmseg
How to generate a new dictionary file of mmseg 0.Usage about mmseg-node memtioned in github : var mm ...
- EXtJS Ext.data.Model
(一).首先我们介绍一下Model类中比较常用的几个属性,如果我们想构建一个Model类,最主要的属性就是(Fields)属性,这个属性接受一个数组.用来设置Model中所包含的字段.定义的格式如下: ...
- Tanks!Tutorial 学习
using UnityEngine; namespace Complete { public class CameraControl : MonoBehaviour { /// <summary ...