第六章 文件管理

25
第第第 第第第第

description

第六章 文件管理. 概 述. Windows 文件系统概述 文件系统驱动 NTFS 的组织结构 文件系统的系统调用. Windows 文件系统概述. CDFS , UDF: 主要用于光盘,其中 UDF 应用更广 FAT = File Allocate Table 包括 FAT12 , FAT16 , FAT32 。目前应用最多的是 FAT32 ,兼容的系统有 Windows 9x , 2000 , 2003 , XP 等 NTFS = New Technology File System 主要针对 Windows NT 系列 - PowerPoint PPT Presentation

Transcript of 第六章 文件管理

Page 1: 第六章 文件管理

第六章 文件管理

Page 2: 第六章 文件管理

Windows文件系统概述 文件系统驱动 NTFS的组织结构 文件系统的系统调用

概 述

Page 3: 第六章 文件管理

Windows 文件系统概述 CDFS , UDF: 主要用于光盘,其中 UDF 应用更广 FAT = File Allocate Table

包括 FAT12 , FAT16 , FAT32 。目前应用最多的是 FAT32 ,兼容的系统有 Windows 9x , 2000 , 2003 ,XP 等

NTFS = New Technology File System主要针对 Windows NT 系列支持安全性,磁盘配额,基于日志的数据恢复,多数据

流,稀疏文件压缩等一系列新特性

Page 4: 第六章 文件管理

文件系统驱动 文件系统驱动( File System Driver ,即 FSD )隶属于 I/O

驱动的一部分,是将上层传来的抽象命令和参数转化为具体的命令和参数,等待下层处理完成后将操作的结果或状态返回给上层。

相对底层硬件驱动而言, FSD 是高层内核模式驱动程序,用于扩展底层驱动的功能,进而实现特定的文件系统。

分为本地 FSD 和远程 FSD 本地 FSD ,直接管理本地主机的文件卷上的数据; 远程 FSD ,允许用户连接到远程主机并存取数据。

Page 5: 第六章 文件管理

文件系统驱动

本地 FSD

应用 应用用户模式

内核模式

本地FSD

I/O管理

存储设备驱动逻辑卷(分区)

Page 6: 第六章 文件管理

文件系统驱动

远程 FSD

客户端

应用程序

I/O管理器

远程FSD(重定向)

用户模式

内核模式

服务器端

用户模式

内核模式

远程FSD(服务器)

本地FSD

存储设备驱动

磁盘

Page 7: 第六章 文件管理

NTFS 的组织结构 NTFS 磁盘结构 MFT 表 NTFS 文件组织

Page 8: 第六章 文件管理

NTFS 磁盘结构 卷:代表了一个逻辑分区,是在磁盘被格式化为 NTFS 格式

的时候创建的,也可以用多个磁盘创建 RAID 卷。 扇区:将磁道划分成的大小相同的区域。 簇:由若干个扇区组成。 LCN :对整个卷中所有的簇进行的编号。 VCN :针对某一特定文件内的编号。

Page 9: 第六章 文件管理

NTFS 的磁盘结构 NTFS 磁盘结构

扇区:将磁道划分成的大小相同的区域。 簇:由若干个扇区组成。

簇的大小又称簇因子,会因磁盘大小不同而不同簇因子对文件的存取效率有一定影响,使用大的簇因

子可以加快分配速度,当然为之付出的代价是一小部分空间会被浪费掉

Page 10: 第六章 文件管理

MFT 表 MFT=Master File Table ,即主文件表,由一系列的文件记

录组成,每个记录大小固定为 1KB 。卷上的每个文件,包括 MFT 本身,在 MFT 中都有一行记录。前 16 个记录被称为元数据,是系统保留的,包含系统启动及正常运行必须的信息。

每个 MFT 记录都对应着不同的文件,如果一个文件有很多的属性就可能需要多个文件记录

Page 11: 第六章 文件管理

NTFS 文件组织 NTFS 中将文件作为属性和值的集合来处理,文件的内容被

看作是未命名数据属性( Unnamed Data Attribute ),其他一些常用的文件属性包括文件名,文件拥有者,时间戳等。每个文件属性都由单独的流( Stream ,即简单的字节序列)组成。

常驻属性 :属性值能后直接存放在 MFT 中时,该属性就被称作是常驻属性。有些属性总是常驻的,这样 NTFS 才能通过他们找到其他的非常驻属性 。

每个属性都是以一个标准头(也称属性头部)开始的,其中包含了该属性的信息和 NTFS 用来管理该属性的信息。标准头总是常驻的,并且记录着属性值是否为常驻。对于常驻属性,头中还包含了属性值的偏移量和属性值长度

Page 12: 第六章 文件管理

文件系统的系统调用

用户态文件系统调用

检查参数转入内核态

I/O 管理

内存管理

缓存管理

调用其他模块结合完成具体功能

文件系统调用的一般过程

Page 13: 第六章 文件管理

实 验 创建文件 查询文件

Page 14: 第六章 文件管理

创建文件 实验目的:验证Win32 API函数 CreateFile() 对内核函数

的调用过程。 Win32 API函数 CreateFile() 实际上先调用 NtCreateFile() ,再调用 IopCreateFile() ,由 IopCreateFile()完成具体的操作。

实验内容:实验用 Visual Studio 2005 编写一个创建文件的程序 CreateFile ,并用 Windbg 对该程序进行调试,验证创建文件的执行过程。同时在 WRK源代码总中加入一些调试打印语句,在 WinDbg调试窗口中显示函数内部的调用过程。

Page 15: 第六章 文件管理

创建文件 实验过程:

1. 在 VS 中创建工程 CreateFile ,同时设置生成符号文件 在工程属性中: Configuration->Linker->Debugging ,在右侧的窗口中将 Generate Debug Info 的值设为 Yes ;

Configuration->C/C++->General ,将 Debug Information Format的值设为 Program Database for Edit & Continue(/ZI)

Configuration->C/C++->Optimization ,将 Optimization 的值设置为 Disabled (/Od)

2. 加入程序源代码 3. 编译并生成 EXE 文件

Page 16: 第六章 文件管理

创建文件 实验过程:

4. 在 WinDbg 的 File选项中选择 Open Executable ,打开 CreateFile.exe 文件

5. 用 x 命令查看函数在内存中的地址,用 bp 命令设置断点

6. 用 g 命令使程序继续运行,遇到断点停止后再用 k 命令查看调用堆栈

7. 在 WRK 代码中加入 DbgPrint()语句,让函数在执行相应模块时打印出信息。

注意加入打印控制信息,控制打印时间和位置。

Page 17: 第六章 文件管理
Page 18: 第六章 文件管理
Page 19: 第六章 文件管理

查询文件 实验目的:通过修改查询函数的判定条件,实现对我们指

定文件的特殊操作。修改完成后需要重新编译内核执行,并可以结合 DbgPrint()函数将一些调试信息发送到 WinDbg 中,进一步了解内核的执行过程。

实验内容:在 NtQueryInformationFile ()函数使用输入的文件句柄获得文件对象,从文件对象的 FileName 属性可以得到包含完整路径的文件名。得到文件名之后,对其内容进行检查,如果其中包含某特定字符串(以“ crash” 为例),则拒绝本次操作,返回 STATUS_ACCESS_DENIED 的信息。上层应用程序得到该信息后便给用户返回相应的报错信息。

Page 20: 第六章 文件管理

查询文件 实验过程:

为了通过文件名对文件进行操作,我们首先需要得到的就是文件名。而文件对象中的 FileName 是包含完整路径的。需要用 wcsstr ()函数进行处理,判断该其中是否包含指定的字符。注意 wcsstr () 的参数都是 Uicode 字符。

文件对象中的 FileName 是 UNICODE_STRING类型的,该结构体的成员包括 Length , MaximumLength , Buffer 分别是该字符串的长度,最大长度和指向字符串的指针。因此需要用语句 fileObject->FileName.Buffer 取得文件名。

Page 21: 第六章 文件管理

查询文件 实验过程:

为了便于更直观的查看 FileName 的内容,在检查文件名之前先调用 DbgPrint()函数打印得到的文件名。在这里需要注意的一点是得到的字符串是 Unicode 的,因此打印时候的控制符要用 %ls ,而不是我们常用的 %s 。

Page 22: 第六章 文件管理

查询文件 实验过程:

在获得文件对象后加入下列语句 DbgPrint("NtQueryInformationFile() has queried file: \"%ls\"!\n"); if (wcsstr(fileObject->FileName.Buffer,CrashName.Buffer) >0 ){

return STATUS_ACCESS_DENIED;

}

Page 23: 第六章 文件管理

系统启动时查询的文件

Page 24: 第六章 文件管理

重命名文件被拒绝

Page 25: 第六章 文件管理

打开文件被拒绝