首页
社区
课程
招聘
[讨论]Ntfs的小疑问,各位牛牛进来看看
发表于: 2010-1-16 13:17 6681

[讨论]Ntfs的小疑问,各位牛牛进来看看

2010-1-16 13:17
6681
最近学习ntfs,看来 盟主和大米的帖子后, 遇到了一个问题

我现在的理解是文件系统驱动结构如下(不是设备栈啊):

ntfs.sys(fastfat.sys)-------------------- ----------------------设备对象\\ntfs  或 \\fat
|
|
ftdisk.sys(卷管理器)----------------------- ----------------\\device\\hardiskN\\volumeN
|
|
partmgr.sys(分区管理器驱动)------------------- ??
|
|
disk.sys(磁盘驱动 classpnp.sys)-----------------\\device\\HarddiskN\\DR0(整个磁盘),每个分区都有一个设备对象
|
|
atapi.sys(端口驱动  scsiport.sys)-------无设备对象
|
|
at1504x.sys(小端口驱动)--------------------------------------------------------\\at1504s

有如下几个疑问:
1. ntfs  是只创建一个设备对象,还是针对每个ntfs卷都创建一个设备对象?

2. 看reactos 的代码,中 知道在磁盘设备对象中存在一个vpb,是连接文件系统和磁盘设备的纽带,其中Vpb的RealDevice指向 磁盘设备对象(\\device\\HarddiskN\\DR0),那么在文件系统中调用 IocallDriver(--->vpb-->RealDevice, irp )时,岂不直接跨越了 卷管理器驱动和分区管理器驱动啊 ?

请高手指教下

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 178
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
第一个是每个卷都创建。DeviceTree能看到ntfs这个创建了N个设备啊。
第二个RealDevice不是指向DR0吧……
2010-1-16 13:59
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
3
你可以用DeviceTree看看就知道了,是这样,
每个文件系统的入口里会生成一个设备对象,挂入系统某个队列。这个对象貌似专门用来挂队列的。
每个卷设备对象都在挂载的时候会在注册的文件系统里挨个调出来确认。
一旦成功,文件系统会再专门生成一个设备对象和卷设备对象绑定。
而且特殊的是这个文件系统的设备对象的指针后面还附加了一大段数据。
对于ntfs,这个是PVOLUME_DEVICE_OBJECT。
里面包含的数据结构是文件系统用来操作文件的真正结构。
甚至VPB在ntfs中的create中都很少用到,一般都用PVOLUME_DEVICE_OBJECT里保存的。
而VPB专门在IopParseDevice时查找卷设备对象对应的文件系统。
而符号解析,也就是对象管理器这层得到的是卷设备对象。
文件系统负责文件路径->卷上某个扇区的解析,
卷管理器负责卷上某个扇区->具体扇区的解析,
磁盘系统负责具体扇区的读写。再往下就根据各种硬件而不同了,这个比较麻烦。
另外RealDevice这个应该指向的是卷设备对象(FtDisk),
不信你用windbg看看它的驱动对象的名字就知道。
说了这么多可能有不少错误,以前搞的现在快忘光了……欢迎大家指正补充
(下面是windbg查看的数据)
lkd> dt _vpb 0x89d928d8
ntdll!_VPB
   +0x000 Type             : 10
   +0x002 Size             : 88
   +0x004 Flags            : 1
   +0x006 VolumeLabelLength : 0
   +0x008 DeviceObject     : 0x89a8d2b0 _DEVICE_OBJECT
   +0x00c RealDevice       : 0x89d95900 _DEVICE_OBJECT
   +0x010 SerialNumber     : 0xe45ed38f
   +0x014 ReferenceCount   : 0x5af
   +0x018 VolumeLabel      : [32] 0
lkd> dt _DEVICE_OBJECT 0x89d95900
ntdll!_DEVICE_OBJECT
   +0x000 Type             : 3
   +0x002 Size             : 0x1a0
   +0x004 ReferenceCount   : 1455
   +0x008 DriverObject     : 0x89d5dc98 _DRIVER_OBJECT
   +0x00c NextDevice       : 0x89e21cf8 _DEVICE_OBJECT
   +0x010 AttachedDevice   : 0x89da2ae0 _DEVICE_OBJECT
   +0x014 CurrentIrp       : (null)
   +0x018 Timer            : (null)
   +0x01c Flags            : 0x1050
   +0x020 Characteristics  : 0
   +0x024 Vpb              : 0x89d928d8 _VPB
   +0x028 DeviceExtension  : 0x89d959b8
   +0x02c DeviceType       : 7
   +0x030 StackSize        : 5 ''
   +0x034 Queue            : __unnamed
   +0x05c AlignmentRequirement : 1
   +0x060 DeviceQueue      : _KDEVICE_QUEUE
   +0x074 Dpc              : _KDPC
   +0x094 ActiveThreadCount : 0
   +0x098 SecurityDescriptor : 0xe101d1b8
   +0x09c DeviceLock       : _KEVENT
   +0x0ac SectorSize       : 0x200
   +0x0ae Spare1           : 1
   +0x0b0 DeviceObjectExtension : 0x89d95aa0 _DEVOBJ_EXTENSION
   +0x0b4 Reserved         : (null)
lkd> dt _DRIVER_OBJECT 0x89d5dc98
ntdll!_DRIVER_OBJECT
   +0x000 Type             : 4
   +0x002 Size             : 168
   +0x004 DeviceObject     : 0x89d94900 _DEVICE_OBJECT
   +0x008 Flags            : 0x12
   +0x00c DriverStart      : 0xba749000
   +0x010 DriverSize       : 0x1e880
   +0x014 DriverSection    : 0x89e2aeb8
   +0x018 DriverExtension  : 0x89d5dd40 _DRIVER_EXTENSION
   +0x01c DriverName       : _UNICODE_STRING "\Driver\Ftdisk"
   +0x024 HardwareDatabase : 0x8067c260 _UNICODE_STRING "\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM"
   +0x028 FastIoDispatch   : (null)
   +0x02c DriverInit       : 0xba7644e2     long  ftdisk!DriverEntry+0
   +0x030 DriverStartIo    : (null)
   +0x034 DriverUnload     : 0xba7523b6     void  ftdisk!FtDiskUnload+0
   +0x038 MajorFunction    : [28] 0xba749636     long  ftdisk!FtDiskCreate+0
2010-1-16 14:06
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2 楼 3 楼...... 好强大的SESSION
2010-1-16 14:14
0
雪    币: 535
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
貌似2#是3#的马甲
2010-1-22 10:13
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mark一下, 现在搜索别人要钱
2010-1-23 18:31
0
游客
登录 | 注册 方可回帖
返回
//