文件系统识别器

文件系统识别器是一个标准的NT内核模式驱动程序。它只实现一项功能:检查物理介质设 备,如果它能够识别存储介质的格式便加载相应的文件系统驱动程序。你可能要问:为什么 不把所有的文件系统一起加载呢?因为系统几乎从不需要加载所有文件系统驱动程序,用一 个小驱动可以节约数百K系统内存。实际上,所有标准的NT物理介质文件系统都利用文件系统 识别器。举个例子来说,如果CD-ROM没有被访问,那么CDFS文件系统驱动程序将不会被加载 。

文件系统识别器是怎么样知道磁盘上存在什么类型的文件系统呢?一般说来,检查磁盘上 的标识符就可以了。标识符可能存储在于分区表里,从分区起始处加上一段偏移量就能定位 这个唯一值,这个值可以是序列号或者其他某种标识符。这些标识符必须完全不同,以免加 载了不正确的文件系统驱动程序。

以下是一些常用的文件系统标识:

文件系统名 文件系统标识
HFS 0x4244
NTFS ''NTFS''
FAT 0xe9或0xeb或0x49

表1 常见的文件系统标识符

当一个文件系统程序被加载后,它必须分析磁盘以便确定介质上是否包含了它可以识别的 文件系统。如果介质上是可以识别的文件系统,该文件系统驱动程序将“装配”这个文件系 统。文件系统识别器也分析介质来确认是否有可识别的文件系统。但是文件系统识别器不是 “装配”到卷上,而是加载文件系统驱动程序。文件系统识别器完成任务便可以卸载了。

装配过程

在NT系统中,当一个卷被访问时才被装配。一些卷在系统初始化被装配,用磁盘管理程序 或可移动介质创建的卷会在晚些时候被装配。因此,当你创建新的分区并且为它分配了盘符 ,直到有应用程序访问这个卷时这个卷才会被装配。所以,当你为软驱更换了盘片,直到有 程序访问软盘时卷才被装配。
 

一个WIN32应用程序通过盘符访问卷。盘符只是对象管理器名字空间的一个符号连接。你 可以利用平台SDK里的工具WINOBJ查看。盘符是物理磁盘卷的符号连接而不是文件文件系统驱 动程序创建的设备的符号连接。当IO管理器发现为物理存储设备创建的设备对象有 FILE_DEVICE_DISK, FILE_DEVICE_TAPE, FILE_DEVICE_CD_ROM,或者 FILE_DEVICE_VIRTUAL_DISK标记时,这些设备对象就有卷参数块(Volume Parameter Block )。VPB用于表示卷是否已经被装配了。如果已经装配了,VPB 指向属于文件系统驱动程序的 设备对象。如果没有被装配,IO管理器将尝试装配这个卷。

IO管理器为当前物理介质类型( FILE_DEVICE_DISK_FILE_SYSTEM, FILE_DEVICE_TAPE_FILE_SYSTEM, FILE_DEVICE_CD_ROM _FILE _SYSTEM)的卷调用每一个注 册的文件系统驱动程序。通过调用驱动的IRP_MJ_FILE_SYSTEM_ CONTROL派遣例程,传递给派 遣例程次功能码是IRP_MN_MOUNT_VOLUME便可以实现装配。驱动程序返回给IO管理器该卷是否 可以被装配的信息。调用次序是后注册先调用。所以被装载最频繁的文件系统驱动程序首先 得到装配卷的机会。

实际上第一个注册的是RAW文件系统,它注册另外三种不同的文件系统。当RAW文件系统装 配卷时,它便注册这三种不同的文件系统。属于RAW文件系统的卷只能被“全部访问 ("whole volume" )”操作打开。磁盘管理器需要做这样的操作。

文件系统识别器实际上就是一个只处理装配请求的文件系统驱动程序。因此,它用相应的 文件系统类型创建设备对象,向IO管理器注册为文件系统,然后等待被调用去装配卷。如果 识别器确认了卷属于它的文件系统,它返回错误码STATUS_FS_DRIVER_REQUIRED,而不是接受 这个装配请求。接着IO管理器调用识别器,让它加载整个文件系统驱动程序。具体细节是发 送IRP IRP_MJ _FILE_SYSTEM_CONTROL,次功能码为IRP_MN_LOAD_FILE_SYSTEM。

时间: 2024-11-26 21:10:41

文件系统识别器的相关文章

文件系统驱动编程基础篇之3——Ioctl控制操作

二.对象管理与命名空间(Namespace) 内核空间中不同类型的对象都通过对象管理器统一管理,并通过命名空间这一逻辑上的概念来组织各个对象,类似于资源管理器.Device目录存放着通过IoCreateDevice创建的各种设备对象,包括文件系统驱动下创建的卷对象.FileSystem目录存放着文件系统驱动对象和文件系统识别器设备对象(这些内容将在进阶篇叙述).更具体的描述请参看资料2. 到目前为止,我们还未讨论过用户模式下的应用程序如何与驱动程序发生交互,请暂时忘记"中断门".&qu

转 从内核文件系统看文件读写过程

系统调用 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境,但是计算机系统的各种硬件资源是有限的,因此为了保证每一个进程都能安全的执行.处理器设有两种模式:"用户模式"与"内核模式".一些容易发生安全问题的操作都被限制在只有内核模式下才可以执行,例如I/O操作,修改基址寄存器内容等.而连接用户模式和内核模式的接口称之为系统调用. 应用程序代码运行在用户模式下,当应用程序需要实现内核模式下的指令时,先向操作系统发送调用请求.操作系统收到请求后,执行

Hi3531用SPI FLASH启动 使用Nand做文件系统

1.编译内核(可选) make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- menuconfig make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- uImage cp arch/arm/boot/uImage ...   2.烧写uboot,内核,擦除SPI FALSH的剩余部分 sf erase 500000 b00000   2.写文件系统到NAND mw.b 82000000 ff 2000000 tf

NIO.2 入门,第 2 部分: 文件系统 API

简介: 本文是介绍 More New I/O APIs for the Java Platform(NIO.2)的两部分系列文章的第二部分, 本文涵盖了在新的 java.nio.file 包及其子包中的大部分重要的类与功能. 正如在第一部分 中对 NI0.2 异步通道 API 的讨论,在本文中,作者利用大量的代码示例来论证相关的概念. 本文是介绍 Java 7 中的 More New I/O APIs for Java (NIO.2) 的两部分文章的第二部分. 正如在 第一部分 中探索的异通道

文件系统扫描的工具类

文件系统扫描的工具类   说明 递归扫描文件夹系统,并以树形结构组织起来 支持沙盒.bundle扫描 支持扫描深度设置 用File对象表示一个扫描出来的文件,File对象包含了一个文件或者文件夹的基本文件信息(如文件名字,是否隐藏,文件扩展名,文件url地址等等),便于后续操作 源码 https://github.com/YouXianMing/iOS-Utilities // // ViewController.m // FileManager // // Created by YouXian

关于linux下的嵌入式文件系统以及flash文件系统选择

嵌入式linux下常见的文件系统 • RomFS:只读文件系统,可以放在ROM空间,也 可以在系统的RAM中,嵌入式linux中常用来作 根文件系统 • RamFS:利用VFS自身结构而形成的内存文件系 统,使用系统的RAM空间• JFFS/JFFS2:为Flash设计的日志文件系统 • Yaffs:专门为Nand Flash设计 • proc:为内核和内核模块将信息发送给进程提 供一种机制,可以查看系统模块装载的信息 • devFS:设备文件系统 Linux上的Ext2fs • 支持4 TB

Linux的文件系统以及df和du命令

Ext2文件系统 Linux的正规文件系统为Ext2(Linux second extended file system),它主要由以下三个部分组成 : 1)super block:记录此文件系统的整体信息,包括inode/block的总量.使用量.剩余量,以及文件 系统的格式与相关信息等. 2)inode:记录文件的属性和权限(元数据metadata),一个文件占用一个inode,同时记录文件数据 所在的block号 3)block:存放实际数据的地方 由于Ext2是索引式文件系统,基本上不太

PHP开发文件系统实例讲解

  PHP中有许多与文件系统有关的函数,这些函数不仅可以打开文件,还可以显示目录中的内容.移动文件和其他一些功能,许多人甚至用PHP开发基于互联网的文件资源管理器. 下面的脚本样例可以显示一个目录清单,注释已经包含在代码中: $dir_name = "/home/me/"; / 创建一个句柄,其值是打开一个给定目录的结果/ $dir = opendir($dir_name); / 建立一个文字块,用以放置列表元素(文件名字)/ $file_list = " "

存储那些事儿(二): 下一代Linux文件系统BTRFS简介

    BTRFS,通常念成 Butter FS,Better FS 或B-tree FS.下一代的Linux文件系统.     它基于写时拷贝(copy-on-write),支持高效的snapshot和clone.它使用b-tree作为存储的数据结构.在BTRFS项目主页上对自己是这么描述的:"一个新的针对Linux的写时复制文件系统,致力于实施高级的功能,同时关注容错.修复和管理方便性."    它有哪些高级功能呢?下面的feature来自BTRFS的项目主页:http://btr