首页
社区
课程
招聘
[翻译]WDK-Handling IRPs
发表于: 2014-11-22 12:58 8245

[翻译]WDK-Handling IRPs

2014-11-22 12:58
8245

最近在看东辉主防和A盾代码,有一些手动下发IRP的代码,不是很懂,就翻开WDK看了下处理IRP的相关章节,顺便做了翻译。
翻译的应该还是比较通顺的,但我也是内核新手,有些地方不是很明白。对于有可能翻译错误的地方,译文后都备有原文,这些地方推荐读原文,以免被误导了。另外,我把翻译过程中的疑问整理如下,希望有大牛可以解答,然后我会更新一下文档。
Handling IRPs
  The Life of an I/O Request
    Example I/O Request - The Details
      原句:If they are, the driver usually calls I/O support routines to tell the I/O manager that a device operation is pending on the IRP 
        疑问:"a device operation is pending on the IRP",这句该如何翻译?
      原句:Each driver-created device object represents a physical, logical, or virtual device for which a particular driver carries out I/O requests.
        疑问:“for which a particular driver carries out I/O requests”,这句该如何翻译?
  Completing IRPs
    Using IoCompletion Routines
      Implementing an IoCompletion Routine
        原句:When the IoCompletion routine has processed and freed the driver-allocated IRP, the routine must return control with STATUS_MORE_PROCESSING_REQUIRED. 
          疑问:“return control”,是把控制权返回给谁了?是指通过设置事件,然后返回STATUS_MORE_PROCESSING_REQUIRED,把控制权返回给派遣例程?
  Using I/O Control Codes
    Creating IOCTL Requests in Drivers
      原句:With the exception of certain SCSI requests, the buffers at Irp->AssociatedIrp.SystemBuffer, at Irp->MdlAddress, and at Parameters.DeviceIoControl.Type3InputBuffer in a driver's I/O stack location do not contain pointers to other data buffers, nor do they contain structures that contain pointers, for system-defined I/O control codes
        疑问:"do not contain pointers to other data buffers",原意是不包含指向其他数据缓冲区的指针。但是,上面列举的几个属性,不都是(直接或间接)指向数据缓冲区的指针么?还是说“其他数据缓冲区”有什么具体的含义?
    Defining I/O Control Codes
      原句:Note that the vendor-assigned values set the Common bit. / Note that the vendor-assigned values set the Custom bit.
        疑问:是指,根据是系统定义的,还是供应商提供的,来设置Common/Custom位为0或者1吗?
  IRP Processing Examples
    Processing IRPs in an Intermediate-Level Driver
      原句:because the IRP is not associated with a thread, its completion processing should end with the driver that created it.
        疑问:"completion processing should end with the driver that created it",completion processing,是IO管理器来做的吧?这句是啥意思?

因为时间精力有限,没有翻译所有的章节。具体翻译目录如下:
Windows I/O模型综述
终端用户的I/O请求与文件对象
I/O请求的生命周期
  示例IO请求——概述
  示例IO请求——详情
  驱动的线程上下文
  关于用户 I/O 请求考虑要点
I/O栈
I/O状态块
将IRP在IRP栈中下发
为下层驱动创建IRP
IRP的入队与出队(没翻译)
完成IRP
  什么时候完成IRP
  在派遣例程中完成IRP
    如何在派遣例程中完成IRP
    何时在派遣例程中完成IRP
  使用IO完成例程
    注册IO完成例程
    实现IO完成例程
取消IRP(没翻译)
重用IRP
设备类型相关的I/O请求
使用I/O控制码
  IO控制码介绍
  驱动中创建IOCTL请求
  定义IO控制码
  IO控制码的数据缓冲区
  IO控制码的安全问题
使用IRP Priority Hints
IRP处理示例
  最底层驱动处理IRP
  中间层驱动处理IRP

以上!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 3
支持
分享
最新回复 (13)
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
一激动,打错标题了。。
2014-11-22 12:59
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
B棒B棒哒~
2014-11-22 14:27
0
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
前辈,还有几个疑问呐,帮忙看看呗~~
2014-11-22 14:42
0
雪    币: 2325
活跃值: (2215)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
5
翻的挺好的,辛苦了。
2014-11-27 09:38
0
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
多谢前辈鼓励!我会继续努力的!

2014-11-27 12:15
0
雪    币: 253
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢楼主
2014-11-27 12:31
0
雪    币: 1392
活跃值: (5202)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
8
十分谢谢楼主。有个问题想问楼主。
有没有一种情况,我的DeviceObject的设备栈stacksize为2 这个IRP到我的派遣例程里面的时候irp->currentlocation为1的情况。
我Device附加到了别的device上。我再次调用iocalldriver时候由于currentlocation为1.直接BSOD了,这个问题一直没有搞懂。http://bbs.pediy.com/showthread.php?t=194895
2014-11-27 12:46
0
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
我在xp虚拟机做的测试,干净的啥都没装的。倒是出现了一次Irp->CurrentLocation==3,而DeviceObject->StackSize==2的情况。至于你说的那种,是上层有什么不规矩的驱动?
(我猜的)
2014-11-27 19:27
0
雪    币: 1392
活跃值: (5202)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
10
哎,就是有问题。有deviceobject->stacksize==1 的状况发生。暂时还没有发现有其他的问题驱动。我也跟踪了好久,就是搞不懂哪里有问题。看样子还需要慢慢学习IRP。
2014-11-27 19:48
0
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
不对吧,如果你的device attach到其他的device上,那你的deviceObject->StackSize不可能为1。只有最底层的设备的StackSize才可能为1吧。
2014-11-27 19:54
0
雪    币: 1392
活跃值: (5202)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
12
...不然我怎么会问这个问题呢,我也觉得奇怪,帖子里面我也跟踪了一下,发现就是那样的
2014-11-27 20:37
0
雪    币: 0
活跃值: (756)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
赶紧Mark 有空学习!
2014-11-27 20:47
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
必须支持!
2014-12-5 12:48
0
游客
登录 | 注册 方可回帖
返回
//