发表于:2008/5/21 14:52:00
#0楼
不是所有文件系统驱动程序都使用了物理设备,即使使用,也可能没有使用分区驱动程序。这就提供了巨大的灵活性。
操作系统启动时,NK.exe 将直接从 ROM 文件系统加载 FileSys.exe。然后,FileSys.exe 从 ROM 文件系统内的默认注册表对注册表进行初始化。
之后,FileSys.exe 将读取注册表项,以便启动各种应用程序。设备管理器从 HKEY_LOCAL_MACHINE\Driver\BuiltIn 项加载驱动程序。
内置到 FileSys.exe 中的存储管理器向设备管理器通知系统注册,以便接收有关块驱动程序加载和卸载的通知。
然后,存储管理器打开块驱动程序,并向它查询配置文件名称。每个块设备类型都有一个与它相关的配置文件。存储管理器读取有关设备的分区驱动程序的信息,并加载适当的驱动程序。
因为文件系统将不需要知道数据是否来自磁盘上的分区、或者直接来自磁盘,所以,FSDMGR 对文件系统驱动程序进行包装,以便为驱动程序的高端或低端提供接口。
存储管理器调用文件系统驱动程序 (FSD),而 FSD 使用 FSDMGR_ API 从设备检索数据。如果是 CD(没有分区),则设备通过 FSDMGR 与块驱动程序通信。如果它是有多个分区的硬盘,那么它以同样方式使用 FSDMGR_ API。但这之后 FSDMGR 会将工作转交给适当的分区驱动程序。
我们已经讨论了存储管理器、FSDMGR、FSD、分区驱动程序和块驱动程序如何交互和互操作。让我们回过来详细讨论它们是如何加载的,并考查注册表中的配置文件的细节。前面已经提到过,配置文件只是一组注册表值,用于定义有关块设备和应当如何在系统中使用它的信息。配置文件位于以下项的下面:HKEY_LOCAL_MACHINE\System\StorageManager\Profiles
每个配置文件都是位于基本配置文件项的下面,以此配置文件名称标识的项。例如,如果 Windows CE .NET 设备上有一个硬盘,并且它确实使用硬盘配置文件,则配置文件位于
HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\Hard Disk 下面。所有配置文件信息都包含在该配置文件项下面的命名值中。下表列出了各种值及其目的。
值 类型 说明
Folder REG_SZ 在 Windows 资源管理器中显示给用户的文件夹名称。对于多个实例,将自动追加整数。(例如,Storage Card、Storage Card2 等等。)
FileSystem REG_SZ 用作磁盘的默认文件系统的名称。(如果使用了分区驱动程序,则通常不使用它。)
PartitionDriver REG_SZ 列出如果默认驱动程序不合适时要使用的分区驱动程序。如果该字符串为空,则不加载任何分区驱动程序。如果该值不出现,则使用默认分区驱动程序。
AutoFormat REG_DWORD 如果磁盘没有格式化,则自动执行格式化
AutoPart REG_DWORD 如果磁盘没有分区,则自动将它分区,并且其中一个分区占据最大数量的可用磁盘空间。
AutoMount REG_DWORD 当存储设备驱动程序加载时,自动装入文件系统。
Name REG_SZ 显示在控制面板 UI 中的配置文件名称。
MountFlags REG_DWORD 用于确定如何装入文件系统的标志。
将文件系统标记为隐藏可以防止它被任何标准的文件和文件夹枚举发现。
存储管理器独立完成该操作,以便设备驱动程序和应用程序可以检测到是否特定系统正在使用存储管理器。
MountFlags 的下一位指示文件系统是否可包含基于配置单元的注册表。
作为根标志的装入文件系统允许通过将外部存储作为根进行连接来避免这个问题,因为这样一来,文件 \MyDataFile.TXT 将驻留在外部存储设备的根中。隐藏 ROM 文件系统将隐藏 ROM 文件系统数据文件(但不执行适当的 EXE 和 DLL),允许更新 ROM 中的所有文件。
Windows CE 文件系统体系结构是灵活的和可扩展的,并且支持:
• 多个块设备。
• 每个块设备支持多个分区。
• 每个分区支持不同文件系统。
• 将外部设备文件系统作为根系统装入。
注册表是让加载和运行文件系统的过程具有正确的(或期望的)行为的关键。