首页
社区
课程
招聘
[原创]简单说点对文件系统、分层驱动、文件读写的理解
发表于: 2009-4-3 22:30 16946

[原创]简单说点对文件系统、分层驱动、文件读写的理解

2009-4-3 22:30
16946
收藏
免费 7
支持
分享
最新回复 (18)
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
2
沙发自己做,哈哈~
2009-4-3 22:41
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
3
IdePortDispatch 有源的,在nt4src里面. 它内部调用了IoStartPacket.而 IoStartPacket函数又会调用该dev对应的driver的DriverStartIo例程. eg:

ntdll!_DRIVER_OBJECT
   +0x000 Type             : 4
   +0x002 Size             : 168
   +0x004 DeviceObject     : 0x817dab58 _DEVICE_OBJECT
   +0x008 Flags            : 0x12
   +0x00c DriverStart      : 0xf97ff000
   +0x010 DriverSize       : 0x17480
   +0x014 DriverSection    : 0x817f1c28
   +0x018 DriverExtension  : 0x817c7dc8 _DRIVER_EXTENSION
   +0x01c DriverName       : _UNICODE_STRING "\Driver\atapi"
   +0x024 HardwareDatabase : 0x8066f9d8 _UNICODE_STRING "\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM"
   +0x028 FastIoDispatch   : (null)
   +0x02c DriverInit       : 0xf98145f7     long  atapi!GsDriverEntry+0
   +0x030 DriverStartIo    : 0xf98067c6     void  atapi!IdePortStartIo+0

IdePortStartIo内部跟进去,会调用PCIINDEX内部函数,再往里走就进入HAL.DLL模块了,然后就是IO 操作了. 比如:

kd> kv
ChildEBP RetAddr  Args to Child              
f9dff348 f9c1cddb 817e8190 817e1508 f9dffac8 hal!HalGetScatterGatherList (FPO: [Non-Fpo])
f9dff37c f98068b1 817e15c0 00000000 00000200 PCIIDEX!BmSetup+0x5f (FPO: [Non-Fpo])
f9dff3b4 804efe19 81786030 815ce528 817c75a0 atapi!IdePortStartIo+0xeb (FPO: [Non-Fpo])
f9dff3d4 f9c9703e 81786030 815ce528 00000000 nt!IoStartPacket+0x7d (FPO: [Non-Fpo])
f9dff3f8 f9805c9a 81786030 815ce528 00000000 Main!fake_IoStartPacket+0xbe (FPO: [Non-Fpo]) (CONV: stdcall) [d:\program\r0\coding\逆向sysnap_注册表还原\code\main\patchmodule.c @ 307]
f9dff424 804eedf9 81786030 005ce528 815ce6c0 atapi!IdePortDispatch+0x4e6 (FPO: [Non-Fpo])
f9dff434 f99dd061 00000000 815b7af0 815ce6c0 nt!IopfCallDriver+0x31 (FPO: [0,0,0])
f9dff448 f99dcd58 815ce6c0 81783588 815b7ba8 CLASSPNP!SubmitTransferPacket+0x82 (FPO: [Non-Fpo])
f9dff478 f99dce49 00004000 00004000 815b7af0 CLASSPNP!ServiceTransferRequest+0xe4 (FPO: [Non-Fpo])
f9dff49c 804eedf9 817834d0 00000000 81778208 CLASSPNP!ClassReadWrite+0xff (FPO: [Non-Fpo])
f9dff4ac f9c2436c 817d90e8 815b7bcc f9dff4e8 nt!IopfCallDriver+0x31 (FPO: [0,0,0])
f9dff4bc 804eedf9 817832a8 815b7af0 815b7bf0 PartMgr!PmReadWrite+0x93 (FPO: [Non-Fpo])
f9dff4cc f983e1c6 815b7c0c 817e0b78 815b7af0 nt!IopfCallDriver+0x31 (FPO: [0,0,0])
f9dff4e8 804eedf9 817d9030 815b7af0 815b7c30 ftdisk!FtDiskReadWrite+0x194 (FPO: [Non-Fpo])
f9dff4f8 f99bcaa7 815b7a00 81723100 817c7030 nt!IopfCallDriver+0x31 (FPO: [0,0,0])
f9dff50c 804eedf9 817d9750 815b7af0 815b7af0 VolSnap!VolSnapWrite+0xbb (FPO: [Non-Fpo])
f9dff51c f9725243 f9dff918 815b7af0 f9dff70c nt!IopfCallDriver+0x31 (FPO: [0,0,0])
f9dff52c f9724da6 f9dff918 817d9698 493d4000 Ntfs!NtfsSingleAsync+0x6d (FPO: [Non-Fpo])
f9dff70c f9725ae9 f9dff918 815b7af0 e1480990 Ntfs!NtfsNonCachedIo+0x2f8 (FPO: [Non-Fpo])
f9dff908 f9725c97 f9dff918 815b7af0 0110070a Ntfs!NtfsCommonWrite+0x1949 (FPO: [Non-Fpo])

呵呵,算是大致明白了. weolar同学钻研的很细致~,赞一个!
2009-4-3 22:45
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
4
其中 过滤层Volsnap , ftdisk, PartMgr等基本只是稍微处理下IRP包,然后向下转发.
2009-4-3 22:47
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
5
哈,是啊!还有几个地方不是很懂,呆会再调试调试~
IdePortDispatch  的在哪个文件????
2009-4-3 22:52
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
6
还是想诱惑大咪出来。。。。。
2009-4-3 22:56
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
7
- -
在nt4src的 _nt4_src\private\ntos\dd\scsiport\internal.cScsiPortDispatch
2009-4-3 23:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那必须得顶阿
2009-4-3 23:14
0
雪    币: 306
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9

    非顶下盟主不可 ,顺带学习下 -.-
2009-4-3 23:17
0
雪    币: 166
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
呵呵,Main!fake_IoStartPacket....原来挂了这个阿
2009-4-3 23:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
呵呵,写的很详细,好文章!
2009-4-3 23:36
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
深入解析里描述的windows存储栈很详细
2009-4-4 00:00
0
雪    币: 8185
活跃值: (2681)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
以我的水平,只有学习,无法模仿!
2009-4-4 09:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
找本NT文件系统内幕一看就清楚了
2009-4-4 14:25
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
15
我已经买了~~写的确实很详细
2009-4-4 16:28
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
16
无法学习,只能赞叹
2009-4-4 18:19
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
17
好文,支持加精。
2009-4-4 23:38
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
18
再补充一句,我觉得IoCopyCurrentIrpStackLocationToNext和IoSkipCurrentIrpStackLocation两个函数最大的区别其实只是一个用来设置完成例程,一个不可设置
2009-4-25 17:19
0
雪    币: 268
活跃值: (40)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
19
楼主所说的书是哪本书
2009-4-25 19:03
0
游客
登录 | 注册 方可回帖
返回
//