wince在CF卡上实现冷启动自动保存注册表(Windows CE5.0)

来源:互联网 发布:dnf暗帝技能优化补丁 编辑:程序博客网 时间:2024/05/16 01:09
倒腾了几天,在CE5.0上实现了CF卡通过Hive-based registry断电保存注册表,我采用的是FAT文件系统.
     开门见山,先给出我的步骤:
     (1)在PB的Catalog中将HIVE-based Registry加入到OS中.
       (2)在platform.reg中添加如下注册表字段:
           ; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE/init/BootVars]
       "SYSTEMHIVE"="Documents and Settings//system.hv"
       "PROFILEDIR"="Documents and Settings"     
       "Start DevMgr"=dword:1
       "Registryflags"=dword:1
    [HKEY_LOCAL_MACHINE/init/BootVars]
        "DefaultUser"="default"
[HKEY_LOCAL_MACHINE/System/StorageManager/FATFS]
    "FriendlyName"="FAT FileSystem"
    "Dll"="fatfsd.dll"
    "Flags"=dword:00000064
    "Paging"=dword:1
    "EnableCache"=dword:1
    "CacheSize"=dword:0
    "Util"="fatutil.dll"
    "CacheDll"="diskcache.dll"

[HKEY_LOCAL_MACHINE/Drivers/PCMCIA/ATADisk]
    "Dll"="ATADISK.DLL"
    "Prefix"="DSK"
    "Ioctl"=dword:4
    "Profile"="PCMCIA"
    ; Indicate we are a power manageable interface and a storage driver
    "IClass"=multi_sz:"{8DD679CE-8AB4-43c8-A14A-EA4963FAA715}","{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"

[HKEY_LOCAL_MACHINE/Drivers/PCMCIA/Detect/50]
   "Dll"="ATADISK.DLL"
   "Entry"="DetectATADisk"


[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile]
    "MountAsRoot"=dword:1
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile]
    "MountAsBootable"=dword:1

[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile]
    "Name"="IDE Hard Disk Drive"
    "Folder"="hard disk"

[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile/FATFS]
    "EnableCacheWarm"=dword:0
; END HIVE BOOT SECTION
        
          接下来分析一下其中的原理.wince下的注册表分为两部分:boot.hv和system.hv.前者是启动时的注册表项,后者是系统注册表项.所谓的HIVE注册表就是先加载boot.hv,把注册表保存所在的存储驱动和文件系统先加载;然后再加载system.hv,也就是从磁盘上去读系统的注册表项.在启动时加载boot.hv的标签就是;HIVE BOOT SECTION 和;END BOOT SECTION.
  在[HKEY_LOCAL_MACHINE/init/BootVars]中"SYSTEMHIVE"是指保存system.hv的路径,"Registryflags"=dword:1是为了在修改了注册表后自动刷新从而保存.因为HIVE注册表也是在内存中运行的,不同的是启动的时候会从磁盘上去读改动的表项,所以你做的的注册表改动也是在内存中做的,这个时候如果你不去将内存中的数值保存到磁盘上,那么这些改动还是会丢失的.当然也可以编程实现(调用RegflushKey).在实现HIVE过程中,要实现两部分:存储HIVE介质的驱动以及文件系统的相应项.由于我的保存是在CF卡(相当于硬盘)上实现的,所以把platform.reg里的ATADisk驱动和存储管理中StorageManager/Profiles/HDProfile相关项都加进去,接着把System/StorageManager/FATFS加入,完成加载FAT文件系统.
  收获的几点:1.实现HIVE配置文件改动包括三部分:(1)bootvars表项,作用是保存的位置,多用户以及自动刷新机制.(2)存储介质的驱动,在我的情况下也就是硬盘的驱动项;(3)文件系统的加载(FATFS).
  2.看到一些文章在存储驱动中添加"flags"=dword:1000,作用是只加载一次.
  3. "MountAsBootable"=dword:1   这句等价于4.2下的mountflag=dword:2
    这句话用来指明注册表保存在该磁盘驱动系统下.我验证了wince5.0下mountflag=dword:2仍然有效.