我在上一篇中说明CTL_CODE的时候,其中CTL_CODE定义中有一个Method域,该域的功能意义是定义用于与在驱动程序中获取应用程序数据缓冲区的地址方式。如果你看了我前边的文章,你可以看到在DeviceIoControl的使用说明中对DeviceIoControl参数进行描述中关于lpInBuffer 和lpOutBuffer 的描述。简单的说,Method域就是定义了lpInBuffer 和lpOutBuffer 缓冲区在驱动程序中对这两个缓冲区地址的获取和数据的操作方式。我们分别进行描述:

  • METHOD_BUFFERED

    系统分配一个缓冲区用于输入和输出,该缓冲区的字节数应该为应用程序的输入和输出缓冲区中较大的字节数。驱动程序中通过KIrp::IoctlBuffer获得缓冲区的地址。对于输出,驱动程序必须将输出字节数返回给I.Information(),然后由I/O管理器将数据从系统缓冲区复制到应用程序的缓冲区中。

  • METHOD_IN_DIRECT
  • METHOD_OUT_DIRECT

    在这两种方式下,输入缓冲区数据被复制到一个系统缓冲区中,驱动程序可以用KIrp::IoctlBuffer访问这个缓冲区。输出缓冲区被类KMemory对象映射,驱动程序可以通过KIrp::Mdl来访问这个缓冲区。

  • METHOD_NEITHER

    这个比较特殊,一般不使用。

CTL_CODE定义中Method的说明相关推荐

  1. python函数定义中参数列表里的参数是_详解Python函数中参数带星号是什么意思

    函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...

  2. #与##在宏定义中的--宏展开

    #与##在宏定义中的--宏展开 #include <stdio.h> #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int m ...

  3. define宏定义中的#,##,@#及\符号

    define宏定义中的#,##,@#及\符号 在#define中,标准只定义了#和##两种操作.#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串. 1.# (string ...

  4. 宏定义中#号和##号的使用

    在技术群中有人提了一个问题:如何定义一个宏,打印传递过来的参数的地址.这很简单,像下面这样 [objc] view plaincopy #define pl(param)  NSLog(@" ...

  5. do {...} while (0) 在宏定义中的作用

    有篇文章解释很清楚:do {...} while (0) in macros 然后,一位女程序媛把它翻译了一遍,排版清晰,想省力的看这边.do {...} while (0) 在宏定义中的作用

  6. #define宏定义中的#,##,@#,\ 这些符号的神奇用法

    C/C++ 宏命令的神奇用法. 先看下面三条语句: #define Conn(x,y) x##y #define ToChar(x) #@x #define ToString(x) #x 1 2 3 ...

  7. C宏定义中的##,#,#@用法介绍

    关于字符串化和符号粘贴 2011-08-02 16:52:46.0      来源:博客园         作者:佚名 关键词:  字符串     C++   在C语言开发中,宏定义是一个非常有用的工 ...

  8. #define宏定义中的#,##,@#,\

    先看下面三条语句: ? 1 2 3 (1)#define Conn(x,y) x##y (2)#define ToChar(x) #@x (3)#define ToString(x) #x (1)## ...

  9. C++宏定义中#与##的妙用

    在C++开发当中经常用到宏的定义当中使用"#"或者"##",以下是对着两种符号使用方法的简单描述: define中的#就是把#后面的参数当做一个符号来使用,简单 ...

最新文章

  1. php取当前是pc还是手机号,利用PHP判断是手机移动端还是PC端访问的函数示例
  2. MySQL—01—MySQL介绍和安装
  3. python管道符_Python实现处理管道的方法
  4. 推荐算法实现java_利用Java写开源库 覆盖70多种推荐算法
  5. mysql内存态_MySQL · 社区动态 · MySQL内存分配支持NUMA
  6. java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理
  7. PL/SQL学习笔记(二)
  8. Python连接MySQL的实例代码
  9. 我来谈谈为啥企业QQ下线
  10. python爬虫——中文编码
  11. c语言 如何筛选小数点,怎样在表格里筛选有出整数与有小数点的数值
  12. 广工Libero SoC安装教程
  13. virt-manager 管理KVM虚拟机
  14. 微信小程序下拉加载更多 带后台 解决加载的内容 是新加载的view中最后一个view
  15. 《MySQL必知必会》的读后感
  16. 80+的AI音频工具你值得拥有
  17. 你知道如何使用Java将DWG / DXF CAD文件转换为图像格式吗?
  18. Redis 之 subscribe 订阅模式封装
  19. 软件架构与设计(四)-----数据流架构
  20. MetaQ消息中间件研究

热门文章

  1. n个数里找出前m个数(或者 从10亿个浮点数中找出最大的1万个)
  2. jQuery 实现Ajax
  3. Timer组件的使用
  4. 数据仓库和数据集市 专业术语解释
  5. 面向对象思想 常说的OOP五大原则就是指1、单一职责原则; 2、开放闭合原则; 3、里氏替换原则; 4、依赖倒置原则; 5、接口隔离原则。...
  6. Tcl 语言改写Java题目-1
  7. 18.QT-QPlainEdit 信号与槽
  8. oracle12 pl/sql
  9. sklearn、theano、TensorFlow 以及 theras 的理解
  10. JavaScript模式读书笔记 第3章 字面量和构造函数