[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的概念来帮助大家理解。
第一段代码是说明“硬盘”驱动是那个DLL。Profile键值说明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文件系统格式化,tfat比fat更加的强壮。CheckForFormat键值是可选的,加上之后,这个分区在每次重启是系统都会用
IOCTL_HAL_QUERY_FORMAT_PARTITION 的ioctl来检查是否需要格式话。如果没有这个键值,文件系统就不会调用这个ioctl。
"MountAsBootable"=dword:1
"MountAsRoot"=dword:1
这两个键值一般都一起用,就是指明是该分区是root file system。
好了,到此就基本说完了。如果有什么问题可以mail我。
没有评论:
发表评论