2007年6月13日星期三

Windows Mobile文件系统相关注册表设置

在工作过程中,很多同事都会问起文件系统注册表的设定。今天我就总结一下贴在这里。下面是一个典型的注册表的设置:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SMFLASH]

"Prefix"="DSK"

"Dll"="ONDisk.dll"

"Index"=dword:1

"Order"=dword:10

"Profile"="SMFLASH"

"IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"

"BmlVolumeId"=dword:0

"BmlPartitionId"=dword:3

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH]

"DefaultFileSystem"="IMGFS"

"PartitionDriver"="mspart.dll"

"AutoMount"=dword:1

"AutoPart"=dword:1

"AutoFormat"=dword:1

"Name"="Microsoft Flash Disk"

"Folder"="Storage"

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\IMGFS]

"MountHidden"=dword:1

"MountAsROM"=dword:1

"XIP"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\FATFS]

"Flags"=dword:10

"FormatTfat"=dword:1

"CheckForFormat"=dword:1

"EnableWriteBack"=dword:1

"MountAsBootable"=dword:1

"MountAsRoot"=dword:1

红色的是经常被质疑的部分,他们虽然在微软的document上可以找到相关解释,可是还是有很多歧义,让我们一起仔细看看。下面我会用到很多PC的概念来帮助大家理解。

第一段代码是说明“硬盘”驱动是那个DLLProfile键值说明profile的名字,也就是【HKEY_LOCAL_MACHINE\System\StorageManager\Profiles】之后跟着的名字,这个名字你随便取,只要不超过7个字符都可以。其实profile可以理解为在“硬盘”驱动之上的软件层,属于文件系统这个领域的概念。而第一段是驱动程序领域的概念。

第二段是这个profile的总体的信息,他一定会有分区的概念,所以我们需要mspart.dll来识别分区信息。

"AutoMount"=dword:1

"AutoPart"=dword:1

"AutoFormat"=dword:1

这几个你就一起用,没关系的。我知道你担心什么。那就是担心分区的内容会不会每次重启都会重建,分区内容会丢失。实际上不会的。Autoformat是当发现分区的文件系统没有格式化时,才回去format,反之,如果已经formated,那么就不会有任何动作。Autopart是在你的profile没有分区时,系统自动帮你分区,不过他没有那么智能,只能将整个profile分成一个区,从头到尾。当然同上,如果你已经有分区信息,系统不会做任何动作。Automount是如果分区没有安装,就会自动安装。这3个键值,你就一起把他们加上,肯定没问题。

第三段定义了profile之上的特定分区imgfs分区,这是一定要有的分区。MountHidden是将这个分区安装为不可见。这样你在资源管理器里就不会看见这个目录。MountAsROM是以只读方式安装,这样分区的文件是不可写的。

第四段代码是真正的用户空间,是fat文件系统。FORMATTFAT是强制以tfat文件系统格式化,tfatfat更加的强壮。CheckForFormat键值是可选的,加上之后,这个分区在每次重启是系统都会用

IOCTL_HAL_QUERY_FORMAT_PARTITION ioctl来检查是否需要格式话。如果没有这个键值,文件系统就不会调用这个ioctl

"MountAsBootable"=dword:1

"MountAsRoot"=dword:1

这两个键值一般都一起用,就是指明是该分区是root file system

好了,到此就基本说完了。如果有什么问题可以mail我。

没有评论: