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

     
  • 相关阅读:
    runAllManagedModulesForAllRequests 和 invalid url
    zip file 压缩文件
    asp.net framework identity 学习笔记
    angular2 学习笔记 (Typescript)
    angular2 学习笔记 ( DI 依赖注入 )
    angular2 学习笔记 ( rxjs 流 )
    Visual Studio and Visual Studio Code (vscode)
    FluentValidation
    想提高面试通过率?回答好这10个问题征服面试官
    【拿来就用】20款婚礼婚庆网站模板, 轻松打造幸福满满的网站设计
  • 原文地址:https://www.cnblogs.com/adylee/p/9300084.html
Copyright © 2011-2022 走看看