Windows CE .NET 文件系统是一种灵活的模块化设计,它允许自定义文件系统、筛选器和多种不同的块设备类型。文件系统和所有与文件相关的 API 都是通过 FileSys.exe 进程来管理的。这个模块实现了对象存储和存储管理器(我们将稍微讨论一下对象存储),并将所有文件系统统一到一个根“\”下面的单个系统中。在 Windows CE .NET 中,所有文件和文件系统都存在于从“\”作为根开始的单个命名空间中。所有文件均以在层次结构树中从根开始的唯一路径进行标识。这类似于桌面计算机版本的 Windows,只是没有驱动器号。在 Windows CE 中,驱动器作为文件夹装入根的下面。因此,添加到系统中的新存储卡将装入树的根中,其路径类似于“\Storage Card”。 FileSys.exe 由下列几个组件组成:
1 ROM 文件系统
2 存储管理器
3 对象存储
对象存储是一个内存堆,由 FileSys.exe 控制。对象存储包含 RAM 系统注册表、RAM 文件系统和属性数据库。它们都是 FileSys.exe 模块的可选组件。RAM 文件系统和属性数据库是完全可选的,并且在某些系统中可以根本不存在。对每个 Windows CE 设备来说,以某些形式存在的注册表是必需的。直到 Windows CE 的 4.0 版本,它总是驻留在对象存储中。使用 Windows CE .NET,它可以作为文件存在于外部装入的文件系统(例如磁盘)中。随后,我们将了解注册表和文件系统是如何产生联系的。
2 分区驱动程序。它们为单个存储设备上的多个分区提供管理。Windows CE .NET 允许物理磁盘包含多个分区,并且每个分区可以格式化为不同的文件系统。分区驱动程序实际上是存储驱动程序的转换器。它公开与存储驱动程序相同的接口,并将分区的块地址转换为存储设备块的真实地址。然后,它将调用传递给存储驱动程序。
3 文件系统驱动程序。这些驱动程序将存储设备上的数据组织为文件和文件夹。Windows CE .NET 附带了几个不同的系统,包括用于 CD 和 DVD 的 UDFS,以及 FATFS(包括 FAT32 支持)。在 4.2 版本中,有一个新的系统,称为事务安全 FAT 文件系统 (TFAT)。(我们可能在以后的文章中讨论它;同样,如果您对此有兴趣,请告诉我们。)
正如谚语所说,百闻不如一见,下图说明了文件系统的各个组件之间的关系。 图 1. Windows CE 文件系统概述
有关该结构,一个要注意到的重要事情是文件系统筛选器工作于存储管理器的下面,并且无法应用于对象存储中的 ROM 文件系统或 RAM 文件系统。此时,Microsoft 没有为筛选对这些系统的访问提供机制。因此,在本文中我们将重点讨论上图右侧的内容。为了让您看得更清楚,下图放大了这片区域。 图 2. 存储管理器和相关组件
在上图中可以看见,并非所有文件系统驱动程序都使用了物理设备,即使使用,也可能没有使用分区驱动程序。这就提供了巨大的灵活性。例如,负责提供网络共享访问的网络重定向器使用 WinSock 通过网络与远程服务器通信,并且它在 Windows CE 设备上没有物理磁盘。
既然我们可以看见大多数项目是什么,以及它们是如何相互关联的,下面我们将讨论系统如何加载所有各项。操作系统启动时,NK.exe 将直接从 ROM 文件系统加载 FileSys.exe。然后,FileSys.exe 从 ROM 文件系统内的默认注册表对注册表进行初始化。(这里,在使用配置单元注册表时有一个类似“先有鸡还是先有蛋”的问题,这是因为注册表在磁盘上的文件中,而文件系统还没有装入。在随后的文章介绍配置单元注册表时,我们将介绍操作系统是如何解决这个问题的。)