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中。
- java中两数据交换四种方式
- 四种交换数据的方式
- 四种常见的 POST 提交数据方式对应的content-type取值
- 四种常见的 POST 提交数据方式对应的content-type取值
- hive的四种数据导入方式
- 9.2.利用函数swap用函数编程实现两个数组中对应元素值的交换。
- 四种常见的 POST 提交数据方式
- 在 Linux 下用户空间和内核空间数据交换的方式
- application/json 四种常见的 POST 提交数据方式
- anddroid数据四种存储方式
- 解决存储过程中数据安全问题的四种方式
- 详解IOS四种保存数据的方式
- 通过交换分区的方式将数据以累加的形式添加到分区表中
- Android数据的四种存储方式 ContentProvider
- Android数据的四种存储方式
- Android数据的四种存储方式
- 用户空间与内核空间数据交换的方式(3)------seq_file
- Linux环境下用户空间与内核空间数据的交换方式
- 四种常见的 POST 提交数据方式
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider