分享
 
 
 

Platform Builder之旅(五)

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

Platform Builder之旅(五)

作者:付林林

随着CE的发展,对象存储(Object

Store)的作用越来越小,而大容量的永久存储设备被越来越多地采用,这一章将针对CE的文件系统阐述相关的知识,让PB开发者除了能够加入对永久存储设备的支持,还能做一些优化。记得在以前讲过的文章中提到了如何在PB中向定制的内核加入对硬盘、光驱的支持(包括ATA设备驱动和各种文件系统),在这里就不再重复了。

CE提供了三种文件系统,基于ROM的文件系统、基于RAM的文件系统、FAT文件系统。FAT文件系统使用的范围最广,能够应用在ATA设备、Flash存储设备、SRAM存储设备上,另外CE还允许开发者自己编写并注册一套文件系统,只要接口符合Win32文件系统API即可。

CD/UDFS 文件系统

这两种文件系统被用于读取CD、DVD等。除了通过在PB的“catalog”中加入这个文件系统外,还可以在PB中添加SYSGEN_UDFS环境变量来实现。CDFS和UDFS在注册表中的注册信息如下:

; Default values for udfs. These can be overridden per profile.

[HKEY_LOCAL_MACHINE\System\StorageManager\UDFS]

"FriendlyName"="CDFS/UDFS FileSystem"

"Dll"="udfs.dll"

"Paging"=dword:1

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\CDProfile]

"Name"="IDE CDROM/DVD Drive"

"Folder"="CDROM Drive"

"DefaultFileSystem"="UDFS"

"PartitionDriver"=""

上面注册表信息在文件common.reg中。注册表数据是从上至下有效,也就是说下面的数据可以覆盖上面的数据。从注册表数据可以看出udfs.dll包含了UDFS文件系统的驱动程序,CDROM的驱动器名为”CDROM

Drive”,采用的文件系统为UDFS,没有分区驱动程序。如果我们要访问CDROM的目录或者文件就要在名字前加”\CDROM

Driver\”。注意,可能你的common.reg文件中的数据在”Flolder”处不同于上面,比如为"Folder"=LOC_STORE_CD_FOLDER,那么你可以直接按照上面数据更改,或者在*.str文件中查找LOC_STORE_CD_FOLDER,找到这个ID对应的字符串再更改(查找到的文件可能很多,应查找以本国家码为目录名的目录)。

FAT文件系统

除了安全性外,FAT文件系统是一个很优秀的文件系统,很适合在嵌入式设备中使用。CE也把FAT作为外部存储设备的通用文件系统。添加FAT文件系统的环境变量为SYSGEN_FATFS。随便列出CE提供的操作FAT文件系统的函数:

DefragVolume 碎块整理,在碎块整理前先进行磁盘扫描。

DefragVolumeUI 同上,但是包含一个选项对话框。

FormatVolume 按要求格式化分区。

FormatVolumeUI 同上,但是包含一个操作对话框。

ScanVolume 扫描一个分区的FAT和目录。

ScanVolumeUI 同上,但是包含一个操作对话框。

FAT文件系统在注册表中的注册信息如下:

; Default values for fatfs. These can be overridden per profile

[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]

"FriendlyName"="FAT FileSystem"

"Dll"="fatfsd.dll"

"Flags"=dword:00000024

"Paging"=dword:1

"CacheSize"=dword:0

从注册表数据可以看出fatfsd.dll包含了FAT文件系统的驱动程序。对”Flags”值的描述如下:

标志

描述

FATFS_UPDATE_ACCESS

0x00000001

更新访问时间

FATFS_DISABLE_AUTOSCAN

0x00000004

不能自动调用ScanVolume

FATFS_VERIFY_WRITES

0x00000008

检验所有写操作

FATFS_ENABLE_BACKUP_FAT

0x00000010

备份FAT表

FATFS_FORCE_WRITETHROUGH

0x00000020

让系统可以直接将任何缓冲区中的数据写到磁盘上,这样系统将加快写数据到磁盘的速度

FATFS_DISABLE_AUTOFORMAT

0x00000040

禁止自动格式化未格式化的分区

FATFS_DISABLE_COMPCHECK

0x00000080

禁止自动检测压缩分区

“Paging”用于指定是否能够分页,值为1可以分页,0不能分页。“CacheSize”用于指定FAT文件系统缓冲区大小。具体的值是用16进制数表示的扇区数量。假如”CacheSize”的值为400,那么用于FAT缓冲的字节数为1024

* 512 = 512KB。

存储管理器默认的文件系统是FAT文件系统,所以硬盘、USB、PCMCIA等存储设备的注册表信息默认都没有指定文件系统。

文件系统过滤器

文件系统过滤器是一个DLL。存储管理器在调用文件系统API之前先调用文件系统过滤器的过滤函数,通过过滤函数能够实现对文件数据的加密、解密、压缩甚至扫描文件是否存在病毒。实现文件系统过滤器的步骤是先编写DLL,CE提供了例子程序,位于%_WINCEROOT%\Public\Common\OAK\Drivers\FSD下。添加代码之后再修改注册表数据。注册表位置如下:

HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\ProfileName\FileSystem\Filters

HKEY_LOCAL_MACHINE\System\StorageManager\FileSystem\Filters

HKEY_LOCAL_MACHINE\System\StorageManager\Filters

注册表键及其键值例子如下:

"Dll" := "fsdspy.dll" ////DLL名称

Order = 0 ////顺序

这里ProfileName是指Profile的名称,比如HDProfile。FileSystem是指具体的文件系统,如FATFS,

UDFS, RELFSD。数字1指出的文件系统过滤器对指定存储硬件的文件系统有效;数字2指出的文件系统过滤器对指定的文件系统有效;数字3为所有文件系统多有效。

存储管理器

存储管理器 (Storage Manager) 是 Windows CE .NET 的新功能,主要管理存储设备驱动程序、文件系统驱动程序、分区驱动程序、文件系统过滤器。存储管理器根据注册表数据来加载需要的模块。具体注册表数据如下:

[HKEY_LOCAL_MACHINE\System\StorageManager]

"Dll"="fsdmgr.dll"

"PNPUnloadDelay"=dword:1000

fsdmgr.dll包含存储管理器的代码。”PNPUnloadDelay”是指存储管理器在接收到即插即用设备的卸载通知后的延时时间。具体存储管理器需要管理的存储设备的注册表信息在HKEY_LOCAL_MACHINE\System\StorageManager\Profiles下。例如硬盘的注册表信息如下:

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\HDProfile]

"Name"="IDE Hard Disk Drive"

"Folder"="Hard Disk"

"AutoMount"=dword:1

"AutoPart"=dword:0

"AutoFormat"=dword:0

"MountFlags"=dword:0

"FileSystem"="fatfsd.dll"

"PartitionDriver"="mspart.dll"

“Name”指名称;”Folder”指目录名,可以在此更改目录名称;”AutoMount”指如果检测到分区后就自动安装文件系统;”AutoPart”指如果没有分区则自动将最大可用空间划分成一个分区;”AutoFormat”指如果没有格式化则自动格式化;”FileSystem”指定这个存储设备采用的文件系统,如果不指定就采用默认的文件系统;”PartitionDriver”指定分区驱动程序;”MountFlags”指文件系统如何被安装。值为1指定一个隐藏文件系统,如果文件系统被隐藏,那么这个文件系统将不会被查找文件的API发现,但是如果指定文件的绝对路径,还是可以访问的。值为2指定当前文件系统能够包含系统注册表。一个存储设备第一个分区将包含基于HIVE的系统注册表(关于基于HIVE的注册表见以前讲过的文章)。值为4指定这个文件系统作为整个文件系统的根(\),这里要说明一下,CE默认对象存储作为整个文件系统的根(\),当在根下放置一个文件时,例如\a.dat,这个文件实际存放在对象存储中。如果指定其它文件系统作为根,那么文件将存放在这个文件系统所在的存储设备中。值为8指定当指定值为4时隐藏ROM。

写作时间:2004-10-20

未经本文作者同意,不准擅自转载本篇文章。联系作者请邮至 windowsce@tom.com 或 fllsoft@sina.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有