Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1811304
  • 博文数量: 272
  • 博客积分: 1272
  • 博客等级: 少尉
  • 技术积分: 1866
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-09 15:51
文章分类

全部博文(272)

文章存档

2016年(16)

2015年(28)

2014年(97)

2013年(59)

2012年(25)

2011年(47)

分类: WINDOWS

2014-03-10 16:32:36

交换方式                                输入缓冲区                                         输出缓冲区

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中。

阅读(2305) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~