您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > WINCE文件系统和注册表简介
WINCE6.0文件系统及存储管理器*******************************LoongEmbedded********************************作者:LoongEmbedded时间:2010.12.03类别:WINCE嵌入式系统********************************LoongEmbedded********************************Filesys.dll由对象存储,ROM文件系统和存储管理器组成,其中:对象存储:包含RAM注册表,数据库和RAM文件系统。存储管理器:其功能由系统中的fsdmgr.dll模块来实现,它由块设备驱动程序管理器(blockdrivermanager)、分区管理器(partitionmanagerr)和文件系统驱动程序管理器(filesystemdrivermanager,也叫FSDmanager),见下图图11.对象存储对象存储实质是一个内存堆,由filesys.dll控制,只要后备电源有电,则对象存储中的信息就能够得到保持,RAM存储芯片构成了对象存储的物理基础,这里的RAM芯片是指SDRAM。对象存储最多可达256MB的RAM,WINCE6.0为对象存储中的每一个对象都分配了一个唯一的对象标识符(windowsCEobjectidentifier,CEOID)该标识符的作用就是用于访问对象存储中的对象,那么什么是对象呢?下面这些都是对象:***注册表中的一个键***注册表中的一个值***一个文件***文件数据中大小为4-KB的一部分***数据库中的一条记录,做多可保存4KB数据***数据库中的一条记录的扩展信息,也可保存4KB数据***一个数据库1.1RAM注册表WINCE6.0的注册表是用来保存应用程序,驱动程序和用户的设定以及其他一些配置信息的,WINCE6.0支持基于RAM的注册表(RAM-BasedRegistry)和基于Hive的注册表(Hive-BasedRegistry),其中基于RAM的注册表把整个注册表作为一个对象存储堆存放在系统的内存中。基于RAM的注册表,其所有的数据保存在对象存储中(也即保存在内存堆中,更直观来说是保存在SDRAM中),这样,只要SDRAM保存不停地刷新,那么RAM注册表中的数据就会一直保持。但如果SDRAM断电,数据就会丢失。所以基于RAM的注册表用在经常热启动(warmboot)的系统中比较有效率,而如果用在经常冷启动(coldeboot)的系统的效率就较低。其中有电池作为后备电源为SDRAM供电的单用户设备是最适合使用基于RAM的注册表的。1.2RAM文件系统WINCE6.0提供3中文件系统,分别是RAM文件系统、ROM文件系统和可安装文件系统。WINCE6.0中使用的文件系统,其根目录为“\”,所有的文件系统都被mount到根目录“\”下面,ROM文件系统通常直接挂载到\Windows目录,RAM文件系统通常直接挂载到根目录下,也就是说,根目录下除了挂载的外存目录和\Windows目录之外的所有文件都位于RAM文件系统中,见下图图2RAM文件系统由FSD(filesystemdriver)Manager管理,WINCE6.0文件系统的配置,由注册表实现,一般在[HKLM\System\StorageManager]中,比如:[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH\FATFS]Flags=dword:14Folder=ResidentFlashFormatExfat=dword:1CheckForFormat=dword:1EnableWriteBack=dword:1IFIMGHIVEREGMountAsBootable=dword:1ENDIF;IMGHIVEREG在定制WinCE操作系统时,我们可以选择ROM-only的文件系统或RAMandROM的文件系统。当选择RAMandROM的文件系统时,根目录文件系统在内存当中,掉电即丢失。为了实现根文件系统和注册表的保存,即在冷启动时不丢失,我们需要选择ROMandRAMfilesystem的文件系统和HIVE-Based注册表,以将存储空间Mount成根目录,并配置注册表使其支持HIVE-Based注册表。1.3属性数据库WINCE6.0提供CEDB(WINCEDatabase)和EDB(EmbeddedDatabase)这两种数据库,其中CEDB在字节流的基础上,对文件进行进一步的抽象,提供了与关系型数据库类似的数据结构化存储和访问。2.ROM文件系统WINCE6.0的内部文件系统控制对ROM的访问,也提供了对位于RAM的对象存储的文件存储,WINCE6.0支持两种可用的文件系统:RAMandROM文件系统和ROM文件系统。RAMandROM文件系统提供了对象存储里的文件存储以及对ROM的访问,而ROM文件系统不允许应用程序将文件存储在对象存储里,通过根目录下的windows目录可以访问ROM中的数据。ROM文件系统连接到统一文件系统中的“\Windows”文件夹,这意味着ROM中的所有文件均可作为“\Windows”文件夹中的只读文件来访问。3.存储管理器(storagemanager)存储管理器负责管理系统中所有的外围存储设备,包括管理它们所有的文件系统和块驱动。所有的文件、数据和容量都是通过存储管理器来操作的,存储管理器的功能由系统中的fsdmgr.dll模块实现,由下面三部分组成:⑴文件系统驱动程序管理器(FileSystemDriverManager,FSDManager)。⑵分区管理器(PartitionManager)。⑶块设备驱动程序管理器(BlockDriverManager)存储管理器的体系结构如下图所示:图3从上图可以知道存储管理器是一个分层结构,由文件系统过滤器(Filesystemfilters)、文件系统驱动程序(Filesystemdirver)、分区驱动程序(Partitiondriver)和存储驱动程序(Blockdriver)组成。下面是common.reg总关于存储管理器的注册表信息;ThistellsFilesystoloadFSDMGR[HKEY_LOCAL_MACHINE\System\StorageManager]Dll=fsdmgr.dllPNPUnloadDelay=dword:1000fsdmgr.dll是存储管理器的表现形式,PNPUnloadDelay是指存储管理器在接收到即插即用设备的卸载通知后的延时时间,具体存储管理器需要管理的存储设备的注册表信息在HKEY_LOCAL_MACHINE\System\StorageManager\Profiles下。3.1文件系统过滤器文件系统过滤器是一个导出文件系统入口的DLL,这些入口映射到标准的文件系统函数,比如CreateFile函数和CreateDriectory函数。文件系统过滤器用于处理对文件系统的调用,此后文件系统才能获得这些调用,也就是说存储管理器在调用文件系统API之前先调用文件系统过滤器的过滤函数,这样就允许对文件访问进行某些特殊的处理,因为文件系统过滤器拦截对文件系统的调用,所以可以对文件数据的加密、解密、压缩甚至扫描文件是否存在病毒等。文件系统过滤器是轻量级(lightweight)的文件系统驱动(FSDs),它导出钩子函数(hookfunctions)是FSD_HookVolume()和FSD_UnhookVolume(),而不是磁盘挂载函数FSD_MountDisk()和FSD_UnmountDisk(),下面介绍介绍这个几个函数:⑴FSD_HookVolume():在存储管理器加载文件系统过滤器的时候会调用这个入口函数,此函数是由文件系统的导出函数,并且被文件系统磁盘管理器(filesystemdiskmanager,FSDMGR)直接调用。⑵FSD_UnhookVolume():在存储管理器卸载文件系统过滤器的时候会调用这个入口函数,此函数是由文件系统的导出函数,并且被文件系统磁盘管理器(filesystemdiskmanager,FSDMGR)直接调用。⑶FSD_MountDisk():设备管理器调用这个函数来挂载包含具体文件类型的指定磁盘,比如可以在根目录下挂载ResidentFlash盘符,这个盘符是基于FATFS文件系统来操作nandflash。⑷FSD_UnmountDisk():设备管理器调用这个函数来卸载指定的盘符。还有很重要的一点是文件系统驱动管理器(FSDManager)加载文件系统驱动(FSDs,filessystemdrivers)和文件系统过滤器。3.1.1文件系统过滤器的注册表路径HKEY_LOCAL_MACHINE\System\StorageManager\Filters表示文件系统过滤器对所有的文件类型都有效,也就是说没有筛选。HKEY_LOCAL_MACHINE\System\StorageManager\MyFileSystem\FiltersMyFileSystem是指具体的文件系统,如FATFS、EXFAT、CD/UDFS等文件系统,这个路径指文件系统过滤器对指定的文件系统有效。HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\MyFileSystem\Filters表示文件系统过滤器对自动加载的指定的文件系统有效,这里的自动加载是指由存储管理器来直接加载存储设备的驱动(blockdriver)。HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MyProfileName\MyFileSystem\FiltersMyProfileName是指Profile的名字,这个路径指文件系统过滤器对指定存储硬件的文件系统有效,比如我们项目的Platform.reg下相关内容如下:[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NANDFLASH]Prefix=DSKDll=smflash.dllIndex=dword:1Order=dword:0Profile=NANDFLASHIClass={A4E7EDDA-E575-4252-9D6B-4195D48BB865}IFIMGHIVEREGFlags=dword:00001000ENDIF;IMGHIVEREG…………………….[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH\FATFS\Filters\CacheFilt]Dll=cachefilt.dllLockIOBuffers=dword:1这里的MyProfileName是NANDFLASH,MyFileSystem是FATFS,表示文件过滤器(在此为cache的过滤器cachefilt.dll,不知是否该这样理解?)对加载在NANDFLASH上的文件系统有效,也就是如果要读写NANDFLASH上的数据,只有以FATFS文件系统格式才能访问,否则被文件过滤器过滤掉,这样就无法读写NANDFLASH上的数据。3.1.2文件系统过滤器注册表值用任何有效的注册表键值来,比如添加过滤器的名字,过滤DLL的值和过滤器的order的值,通过这些操作可以建立文件系统过滤器,比如[HKEY_LOCAL_MACHINE\System\StorageManager\...\Filters\FilterName]dll=filter.dllOrder=dword:x堆栈上过滤器的order是由高到低,最高order(0)的过滤器被首先加载,更低order的过滤器后面接着加载。如果order的值没有指定,那么order的值默认被设置为0xFFFFFFFF,但如果多于一个的过滤
本文标题:WINCE文件系统和注册表简介
链接地址:https://www.777doc.com/doc-3912145 .html