IoSkipCurrentIrpStackLocation的疑问
来源:互联网 发布:js字符串长度length() 编辑:程序博客网 时间:2024/05/29 06:37
http://blog.sina.com.cn/s/blog_62a630640100gahv.html
当驱动被分层以后,他们被注册到一个chain中,IRP会在这个chain中传递,从最上面,到最下面,再回到最上面
为适应这种体制,IRP的结构的大小是不固定的,大体结构如下:
--------------------
| IRP header |
--------------------
|IO_STACK_LOCATION |<-----lowest driver stack location #index1
--------------------
|IO_STACK_LOCATION |<-----next higher stack location #index2
--------------------
|IO_STACK_LOCATION |<-----topmost driver stack location #index3
--------------------
也就是说,chain的最顶层的驱动,对应的IO_STACK_LOCATION是在最下面
IRP头中存放着当前驱动对应的IO_STACK_LOCATION的索引,是从1开始的,不是从0开始
同时,也保存着当前驱动对应的IO_STACK_LOCATION的地址
最上面的驱动处理完这个IRP后,调用IoCallDriver,这会使索引减1,地址也修正为下一个IO_STACK_LOCATION的地址,
然后IRP被交给下一个Driver处理,
而IoSkipCurrentIrpStackLocation宏的作用就是使IO_STACK_LOCATION指针少前进一步
而IoCallDriver函数会使IO_STACK_LOCATION指针向前一步,中和的结果就是IO_STACK_LOCATION2006-11-20指针不变
当下一个驱动程序的派遣例程调用IoGetCurrentIrpStackLocation时,它将收到与我们正使
用的完全相同的IO_STACK_LOCATION指针,因此,它所处理的将是同一个请求(相同的主副功
能代码)以及相同的参数。
当驱动被分层以后,他们被注册到一个chain中,IRP会在这个chain中传递,从最上面,到最下面,再回到最上面
为适应这种体制,IRP的结构的大小是不固定的,大体结构如下:
--------------------
| IRP header |
--------------------
|IO_STACK_LOCATION |<-----lowest driver stack location #index1
--------------------
|IO_STACK_LOCATION |<-----next higher stack location #index2
--------------------
|IO_STACK_LOCATION |<-----topmost driver stack location #index3
--------------------
也就是说,chain的最顶层的驱动,对应的IO_STACK_LOCATION是在最下面
IRP头中存放着当前驱动对应的IO_STACK_LOCATION的索引,是从1开始的,不是从0开始
同时,也保存着当前驱动对应的IO_STACK_LOCATION的地址
最上面的驱动处理完这个IRP后,调用IoCallDriver,这会使索引减1,地址也修正为下一个IO_STACK_LOCATION的地址,
然后IRP被交给下一个Driver处理,
而IoSkipCurrentIrpStackLocation宏的作用就是使IO_STACK_LOCATION指针少前进一步
而IoCallDriver函数会使IO_STACK_LOCATION指针向前一步,中和的结果就是IO_STACK_LOCATION2006-11-20指针不变
当下一个驱动程序的派遣例程调用IoGetCurrentIrpStackLocation时,它将收到与我们正使
用的完全相同的IO_STACK_LOCATION指针,因此,它所处理的将是同一个请求(相同的主副功
能代码)以及相同的参数。
- IoSkipCurrentIrpStackLocation的疑问
- IoSkipCurrentIrpStackLocation .
- IoSkipCurrentIrpStackLocation宏
- 白话IoSkipCurrentIrpStackLocation
- IoSkipCurrentIrpStackLocation macro
- Linux疑问---------文件系统的疑问---?????
- IoSkipCurrentIrpStackLocation与IoCopyCurrentIrpStackLocationToNext区别
- IoGetCurrentIrpStackLocation和IoSkipCurrentIrpStackLocation和IoCopyCurrentIrpStackLocationToNext
- hibernate 的疑问
- 公厕的疑问
- 我的疑问
- 自定义标签的疑问
- webservice的疑问
- strcpy的疑问
- for循环的疑问
- Spring的疑问若干
- C++的疑问
- 我的疑问?
- Android中ImageButton自定义按钮的按下效果的代码实现方法
- log4j简明教程
- 什么是代理服务器
- linux下无法创建文档、写入、保存方法
- JAVA SWT获取图片路径的方法
- IoSkipCurrentIrpStackLocation的疑问
- MFC与SDK的区别
- 装饰模式
- 加时间戳使js,css不缓存
- 七夕,你拿什么拯救你的爱人?
- 转:LDAP概述
- Linux下的vim配置和插件管理
- html基础简单介绍
- 做一个程序员需要哪些基本知识----网上看到的,觉得不错,就复制下来了