高中信息技术教学论文探索NTFS.pdf
《高中信息技术教学论文探索NTFS.pdf》由会员分享,可在线阅读,更多相关《高中信息技术教学论文探索NTFS.pdf(10页珍藏版)》请在三一文库上搜索。
1、用心爱心专心1 探索 NTFS NTFS是 Windows NT 引入的新型文件系统,它具有许多新特性。本文旨在探索NTFS的底 层结构,所叙述的也仅是文件在NTFS卷上的分布。 NTFS中,卷中所有存放的数据均在一个 叫$MFT的文件中,叫主文件表(Master File Table)。而 $MFT则由文件记录 (File Record) 数组构成。 File Record的大小一般是固定的,通常情况下均为1KB ,这个概念相当于Linu x 中的 inode 。File Record在$MFT文件中物理上是连续的,且从0 开始编号。 $MFT仅供 F ile System本身组织、架构文件
2、系统使用,这在NTFS中称为元数据 (Metadata)。以下列出 Windows 2000 Release出的 NTFS的元数据文件 ( 我将要给出的示例代码的部分输出结果) 。 File Record(inode) FileName - - 0 $MFT 1 $MFTMirr 2 $LogFile 3 $Volume 4 $AttrDef 5 . 6 $Bitmap 7 $Boot 8 $BadClus 9 $Secure 10 $UpCase 11 $Extend Windows 2000中不能使用dir 命令 ( 甚至加上 /ah 参数 ) 像普通文件一样列出这些元数据 文件。实际上F
3、ile System Driver(ntfs.sys)维护了一个系统变量NtfsProtectSystemFil es 用于隐藏这些元数据。默认情况下,这个变量被设为TRUE ,所以使用dir /ah将得不到 任何文件。知道这个行为后使用i386kd 修改 NtfsProtectSystemFiles后即可以列出元数据 文件: kd x ntfs!NtfsProtect* fe213498 Ntfs!NtfsProtectSystemFiles fe21349c Ntfs!NtfsProtectSystemAttributes kd dd ntfs!NtfsProtectSystemFiles
4、 l 2 fe213498 00000001 00000001 kd ed ntfs!NtfsProtectSystemFiles 0 kd dd ntfs!NtfsProtectSystemFiles l 2 fe213498 00000000 00000001 kd D:ver 用心爱心专心2 Microsoft Windows 2000 Version 5.00.2195 D:dir /ah $* 驱动器 D 中的卷是 W2KNTFS 卷的序列号是 E831-9D04 D: 的目录 2000-04-27 19:31 36,000 $AttrDef 2000-04-27 19:31 0 $
5、BadClus 2000-04-27 19:31 67,336 $Bitmap 2000-04-27 19:31 8,192 $Boot 2000-04-27 19:31 $Extend 2000-04-27 19:31 13,139,968 $LogFile 2000-04-27 19:31 27,575,296 $MFT 2000-04-27 19:31 4,096 $MFTMirr 2000-04-27 19:31 131,072 $UpCase 2000-04-27 19:31 0 $Volume 9 个文件 40,961,960 字节 1 个目录 51,863,552 可用字节 需要
6、指出的是ntfs.sys将元数据文件以一种特殊的方式打开,所以在打开NtfsProtec tSystemFiles后,如果使用ReadFile 等产生 IRP_MJ_READ 等 IRP 包时将会导致Page Faul t( 详见 Gary Nebbett的 Windows NT/2000 Native API Reference) 。 以上的讨论均是基于$MFT 文件而讨论的, 即基于 $MFT中的 File Record(inode)讨论的。 为更好的继续以下的讨论,这儿我列出File Record Header的结构: typedef struct ULONG Type; USHORT
7、UsaOffset; USHORT UsaCount; USN Usn; NTFS_RECORD_HEADER, *PNTFS_RECORD_HEADER; typedef struct NTFS_RECORD_HEADER Ntfs; USHORT SequenceNumber; USHORT LinkCount; USHORT AttributesOffset; USHORT Flags; / 0x0001 = InUse, 0x0002 = Directory 用心爱心专心3 ULONG BytesInUse; ULONG BytesAllocated; ULONGLONG BaseFi
8、leRecord; USHORT NextAttributeNumber; FILE_RECORD_HEADER, *PFILE_RECORD_HEADER; 下面我将讨论如何定位$MFT 。稍微有点操作系统知识的人都会知道引导扇区(Boot Sec tor) ,其物理位置为卷中的第一个扇区。以下由dskprobe.exe(Windows 2000 Resource Ki t 中的一个小工具) 分析的第一个扇区(当然也可以使用WinHex等其他应用程序) : File: d:Sector00.bin Size: 0x00000200 (512) Address | 00 01 02 03-04
9、 05 06 07 : 08 09 0A 0B-0C 0D 0E 0F | 0123456789AB CDEF -|-:-|- - 00000000 | EB 52 90 4E-54 46 53 20 : 20 20 20 00-02 08 00 00 | ?R?NTF S . 00000010 | 00 00 00 00-00 F8 00 00 : 3F 00 F0 00-3F 00 00 00 | .?. e.?. 00000020 | 00 00 00 00-80 00 80 00 : 90 C0 41 00-00 00 00 00 | ?.?.惱 A. 00000030 | 04 00
10、 00 00-00 00 00 00 : 09 1C 04 00-00 00 00 0 0 | 00000040 | F6 00 00 00-01 00 00 00 : 04 9D 31 E8-BB 31 E8 94 | ?.?杌 1 钄 . . . . . . 000001F0 | 00 00 00 00-00 00 00 00 : 83 A0 B3 C9-00 00 55 AA | 儬 成U? 这 512字节为如下的格式: ( 摘自 Gary Nebbett书中, 本文许多代码均来自或参考此书。) #pragma pack(push, 1) typedef struct UCHAR Jum
11、p3; 用心爱心专心4 UCHAR Format8; USHORT BytesPerSector; UCHAR SectorsPerCluster; USHORT BootSectors; UCHAR Mbz1; USHORT Mbz2; USHORT Reserved1; UCHAR MediaType; USHORT Mbz3; USHORT SectorsPerTrack; USHORT NumberOfHeads; ULONG PartitionOffset; ULONG Reserved22; ULONGLONG TotalSectors; ULONGLONG MftStartLcn
12、; ULONGLONG Mft2StartLcn; ULONG ClustersPerFileRecord; ULONG ClustersPerIndexBlock; ULONGLONG VolumeSerialNumber; UCHAR Code0x1AE; USHORT BootSignature; BOOT_BLOCK, *PBOOT_BLOCK; #pragma pack(pop) 各个字段的详细意义从字段名中即可大致清楚。在 linux-ntfs的 GNU 工程 (http:/sf. net/projects/linux-ntfs)中也有详细的文档,限于篇幅我不将其列出。可以使用如下
13、代码 读出卷中的第一个扇区: hVolume = CreateFile(drive, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRIT E, 0, OPEN_EXISTING, 0, 0); ReadFile(hVolume, bootb是一个 BOOT_BLOCK结构,在我的卷中如下格式( 请对应 Sector00.bin分析 ) : Dump BootBlock at below: BytesPerSector:200 SectorsPerCluster:8 BootSectors:0 用心爱心专心5 SectorsPerTrack:3F Nu
14、mberOfHeads:F0 PartitionOffset:3F TotalSectors:41C090 MftStartLcn:4 Mft2StartLcn:41C09 ClustersPerFileRecord:F6 ClustersPerIndexBlock:1 VolumeSerialNumber:E8319D04 BootSignature:AA55 以上的 MftStartLcn其实是 $MFT在卷中的簇 (Cluster)号。簇是NTFS的基本单位,最 小单位。一个只有1Byte 的文件也要占用一簇的空间。NTFS使用 LCN(Logical Cluster Nu mber)来
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高中 信息技术 教学 论文 探索 NTFS
链接地址:https://www.31doc.com/p-5114642.html