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

     
  • 相关阅读:
    Git基操
    阿里云Centos7安装mysql5.7
    Centos安装jdk8
    BD-rate/BD-BitRate/BDBR/BD-PSNR
    应用统计作业(1)——概率统计知识求解以定积分的近似值
    标量对向量、标量对矩阵、向量对向量、矩阵对矩阵的求导和微分计算
    JM8.6(H.264编码器)源码注释——码率控制部分主要推导
    二、全国大学生电子设计竞赛测控(无人机)方向___赛题分析
    C#-WebForm-Request、Response、QueryString
    webform 页面传值的方法总结
  • 原文地址:https://www.cnblogs.com/adylee/p/9300084.html
Copyright © 2020-2023  润新知