zoukankan      html  css  js  c++  java
  • 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中。

     
  • 相关阅读:
    python list间的并集、差集与交集
    kafka常用命令,启动/停止/查看主题列表/消费/生产
    python json
    lrzsz
    HashMap实现原理,源码分析
    Java中try catch finally语句中含有return语句的执行情况
    Maven
    我的面试题
    JSON数据格式
    springMVC2
  • 原文地址:https://www.cnblogs.com/adylee/p/9300084.html
Copyright © 2011-2022 走看看