能力值:
( LV12,RANK:450 )
|
-
-
2 楼
沙发自己做,哈哈~
|
能力值:
( 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同学钻研的很细致~,赞一个!
|
能力值:
( LV12,RANK:1010 )
|
-
-
4 楼
其中 过滤层Volsnap , ftdisk, PartMgr等基本只是稍微处理下IRP包,然后向下转发.
|
能力值:
( LV12,RANK:450 )
|
-
-
5 楼
哈,是啊!还有几个地方不是很懂,呆会再调试调试~
IdePortDispatch 的在哪个文件????
|
能力值:
( LV15,RANK:670 )
|
-
-
6 楼
还是想诱惑大咪出来。。。。。
|
能力值:
( LV12,RANK:1010 )
|
-
-
7 楼
- -
在nt4src的 _nt4_src\private\ntos\dd\scsiport\internal.c 中ScsiPortDispatch
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
那必须得顶阿
|
能力值:
( LV5,RANK:60 )
|
-
-
9 楼
非顶下盟主不可 ,顺带学习下 -.-
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
呵呵,Main!fake_IoStartPacket....原来挂了这个阿
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
呵呵,写的很详细,好文章!
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
深入解析里描述的windows存储栈很详细
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
以我的水平,只有学习,无法模仿!
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
找本NT文件系统内幕一看就清楚了
|
能力值:
( LV12,RANK:450 )
|
-
-
15 楼
我已经买了~~写的确实很详细
|
能力值:
( LV9,RANK:170 )
|
-
-
16 楼
无法学习,只能赞叹
|
能力值:
( LV13,RANK:290 )
|
-
-
17 楼
好文,支持加精。
|
能力值:
( LV12,RANK:450 )
|
-
-
18 楼
再补充一句,我觉得IoCopyCurrentIrpStackLocationToNext和IoSkipCurrentIrpStackLocation两个函数最大的区别其实只是一个用来设置完成例程,一个不可设置
|
能力值:
( LV10,RANK:170 )
|
-
-
19 楼
楼主所说的书是哪本书
|
|
|