Hive主要功能是实现注册表的掉电保存,它是如何实现的呢?首先把注册表分为两部分:boot.hv第一部分、system.hv和user.hv算第二部分。我们想永久保存注册表就需要把它存到flash等存储器中,那这些保存的文件如何获得?还是需要的注册表的帮忙的啊!这就是boot.hv的作用,在其中就包含了要获得system.hv和user.hv所需的存储器驱动(如flash驱动)和文件系统驱动(如FAT)等等,并且这些设置一般无需保存。我们所要保存的注册表在system.hv和user.hv中。

还有一点就是我们的注册表改动都是在内存中,如果不及时把它写入所保存的文件中,掉电还是会消失的。有两种方法:一种是调用FlushRegister,另一种就设置一个flag让 WinCE在每次改动注册表后自动Flush。当冷启动后系统会先检查flash等存储器中的hv文件是否和内存中的一致,否则就加载存储器中的注册表设置。

再就是,系统镜像文件分为两部分:XIPNK.bin和NK.bin。其中,XIPNK.bin是由bootloader拷到RAM中,然后跳转到其入口点执行,进行一些初始化的工作。然后OS从注册表中读取binfs的相关项,使得flash binfs分区中的NK.bin对OS可用,进而完成系统启动。(注:由于device.exe在NK.bin中,可能是与binfs驱动加载顺序的问题吧,系统一直起不来,错误如下:

Data Abort: Thread=8bfc6000 Proc=8a4307b0 'filesys.exe' AKY=00000003 PC=03f9ea48(coredll.dll+0x0002ea48) RA=03f9ea20(coredll.dll+0x0002ea20) BVA=04000000 FSR=00000007

后来,把device.exe加到XIPNK.bin中,加载一下又死了!binfs驱动和FAT驱动都加载完了啊!结果就在我走投无路时猛然发现PB5的帮助文档里的一段话:

Set the MountFlags registry value equal toDWORD:2.

Set this value on the Storage Manager profile of the file system driver for the medium that contains the registry.This indicates that the file system contains the following registry key.

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\<ProfileName>\<FileSystemName>]

"MountFlags"=dword:2

#define MOUNTFLAGS_TYPE_HIDDEN        AFS_FLAG_HIDDEN    // 1  - Hidden file system
#define MOUNTFLAGS_TYPE_BOOTABLE    AFS_FLAG_BOOTABLE   // 2  - May contain system registry
#define MOUNTFLAGS_TYPE_ROOTFS        AFS_FLAG_ROOTFS     // 4  - Mount as root of file system, "/"
#define MOUNTFLAGS_TYPE_HIDEROM        AFS_FLAG_HIDEROM    // 8  - Hide ROM when mounting FS root; use with FLAG_ROOTFS
#define MOUNTFLAGS_TYPE_MOUNTROM    AFS_FLAG_MOUNTROM   // 16 - Mount the new filesystem as an additional ROM filesystem
// The upper 16bits of MountFlags are used by StorageManager
#define MOUNTFLAGS_TYPE_NODISMOUNT    0x00010000            //  Do not allow dismount of this partition

注册表需要保存到NAND FLASH里面,需要在boot.hv里就加载FAT文件系统来访问

存储在第一个盘里面的system.hv,user.hv. 所以要在注册表中把加载第一部分
FAT的项目放在
“; HIVE BOOT SECTION”
  ;items to load
“; END HIVE BOOT SECTION”

1. 必须加入HIVE based regiters这个组件到OS(在PB右边的文件系统选项里)

2. 注册表添加,必须将一下部分加入你的注册表中实现hive
  ;HIVE BOOT SECTION
  [HKEY_LOCAL_MACHINE\init\BootVars]
  "SYSTEMHIVE"="Documents and Settings\\system.hv" ;system.hv会保存到\HDD\Documents and Settings\system.hv
  ;"PROFILEDIR"="Documents and Settings" ;user.hv会保存到\HDD\Documents and Settings\default\user.hv
  "Start DevMgr"=dword:1 ;这个说是启动device.exe,但是wince 5.0好像不用这个
  "DefaultUser"="default" ;咱们只有一个用户default,基本上就是决定user.hv的路径了
  "Flags"=dword:3 ;这个应该是wince 5.0下决定在哪个阶段启动device.exe的表项
  "RegistryFlags"=dword:1 ;这个就是设置注册表每次改动后自动flush到system.hv
  ;###########################################################################
  ;这个部分是binfs的注册表项,如果你不是用的binfs那么不用将它们拉到boot.hv中
  [HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\SMFlash]
  "DriverPath"="Drivers\\BlockDevice\\SMFlash"
  "LoadFlags"=dword:1
  "MountFlags"=dword:11
  "BootPhase"=dword:0
  "Flags"=dword:1000
  [HKEY_LOCAL_MACHINE\Drivers\BlockDevice\SMFlash]
  "Prefix"="DSK"
  "Dll"="BIBDrv.dll"
  "Order"=dword:0
  "Ioctl"=dword:4
  "Profile"="SMFlash"
  "FriendlyName"="Samsung Flash Driver"
  "MountFlags"=dword:11
  "BootPhase"=dword:0
  "Flags"=dword:1000
  ; Bind BINFS to the block driver
  [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFlash]
  "DefaultFileSystem"="BINFS" ;binfs的路径为/BINFS
  "PartitionDriver"="mspart.dll"
  "AutoMount"=dword:1
  "AutoPart"=dword:1
  "MountFlags"=dword:11
  "Folder"="ResidentFlash"
  "Name"="Samsung Flash Disk"
  "BootPhase"=dword:0
  "Flags"=dword:1000
  "MountHidden"=dword:0
  ;###########################################################################
  ;###########################################################################
  [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PocketStore]
  "Prefix"="DSK"
  "Dll"="ONDisk.dll"
  "Order"=dword:1
  "Profile"="PocketStore"
  "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
  "BmlVolumeId"=dword:0 ; BML volume ID = 0
  "BmlPartitionId"=dword:8 ; BML parition ID = PARTITION_ID_FILESYSTEM
  "Index"=dword:2
  "Flags"=dword:1000 ;这个flag指定这个驱动只在boot.hv中加载一次
  [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\PocketStore]
  "DefaultFileSystem"="FATFS"
  "PartitionDriver"="mspart.dll"
  "AutoMount"=dword:1
  "AutoPart"=dword:1
  "AutoFormat"=dword:1
  "MountAsBootable"=dword:1 ;这个是wince 5.0下指定这个分区保存system.hv的关键
  "Folder"="HDD"
  "Name"="NAND Drive"
  "Ioctl"=dword:4
  [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\PocketStore\FATFS]
  "EnableCacheWarm"=dword:0
  
  ENDIF
  ;###########################################################################
  ;END HIVE BOOT SECTION
  ; HIVE BOOT SECTION
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ; Support BINFS Section
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;
  ; Add BinFS to partition table
  [HKEY_LOCAL_MACHINE\System\StorageManager\PartitionTable]
  "21"="BINFS"
  [HKEY_LOCAL_MACHINE\System\StorageManager\BINFS]
  "Folder"="BINFS"
  "FriendlyName"="Bin FileSystem"
  "Dll"="binfs.dll"
  ; MountFlags:
  ; 0x10 specifies that this file system is to be mounted as an external
  ; ROM filesystem shadowing the \windows directory
  ; 0x1 specifies that the mountpoint \BINFS is to be hidden
  ;
  "MountFlags"=dword:10
  "BootPhase"=dword:0
  ; END HIVE BOOT SECTION
  
3. config.bib文件修改
  MEMORY
  pdwXIPLoc 00000000 803FF000 FIXUPVAR
  XIPKERNEL 80200000 001FF000 RAMIMAGE
  CHAIN 803FF000 00001000 RESERVED
  NK 80400000 01E00000 NANDIMAGE
  RAM 80400000 07C00000 RAM
  FLASH 92000000 00100000 RESERVED
  
  CONFIG
  AUTOSIZE=ON
  COMPRESSION=ON
  DLLADDR_AUTOSIZE=ON
  KERNELFIXUPS=ON
  PROFILE=OFF
  RAM_AUTOSIZE=OFF
  ROMFLAGS=0
  ;ROMSIZE=01E00000
  ;ROMSTART=800B8000
  ;ROMWIDTH=32
  ROM_AUTOSIZE=OFF
  XIPSCHAIN=803FF000
4. 必须将下列文件加入到XIPKERNEL里
  "nk.exe",
  "coredll.dll",
  "filesys.exe",
  "fatfsd.dll",
  "diskcache.dll",
  "fatutil.dll",
  "binfs.dll",
  "fsdmgr.dll",
  "mspart.dll",
  "smflash.dll",
  "boot.hv",
  加入方法如下:
  nk.exe $(_FLATRELEASEDIR)\kern.exe XIPKERNEL SH
  其他项类似方法添加.

WinCE6.0HIVE注册表相关推荐

  1. WINCE基于hive注册表的实现

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  2. C#中如何获取注册表信息

    实现方式:利用Microsoft.win32类提供的注册表类访问系统注册表获取ODBC数据服务列表. 具体实现: Microsoft.win32提供了RegistryKey类,用来访问系统的注册表. ...

  3. Windows 2000/XP 注册表终极修改(转载)

    Microsoft Windows 2000/XP 是一个强大的操作系统,为我们提供了以往Windows 9x从未有过的安全性能,可是你是否感觉某些地方的设置还不够呢,这里就对Windows 2000 ...

  4. 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现2

    上一篇博文中主要介绍了Reactos中大部分函数的思路和HKEY和HANDLE之间的关系,本文将介绍一些Reactos中有意思的函数和存在bug的函数.(转载请指明出处) CreateNestedKe ...

  5. 一种注册表沙箱的思路、实现——注册表的一些基础知识

    要做注册表沙箱,就必须要了解部分注册表知识.而注册表的知识很多,本文主要讲述如何在win32系统是上识别注册表映射的.(转载请指明出处) 在我的xp 32bit系统上,Win+R regedit之后打 ...

  6. 一种注册表沙箱的思路、实现

    从今年4月份开始,我接触到一个沙箱项目.该项目的需求要求我们的沙箱具有良好的安全性和兼容性.当时我们研究了SandBoxIE和360的沙箱,基本确定通过"重定向"思路来实现这款沙箱 ...

  7. docker注册表回传失败 群晖6.2_Glances实时监视群晖运行状况

    安装 在 docker 注册表中搜索 glances ,选择第一个 nicolargo/glances,版本 latest. 端口 环境 运行 发现问题 在浏览器中输入 http://群晖IP:612 ...

  8. VISTA中注册表项LEGACY_****的删除

    在VISTA中如果你错误安装了某个驱动软件,而如果这个驱动安装软件考虑不周,无法卸载,那么你就麻烦了! 比如我的U盘以前一直使用优易U盘加密软件1.2来做一个隐蔽的U盘. 某天我在VISTA上运行了这 ...

  9. 注册表----修改Win7登录界面

    在进行操作前,需要准备好背景图片.对背景图片的要求有三点: (1)图片必须是JPG格式: (2)必须将图片命名为backgroundDefault; (3)图片的体积必须小于256KB. 按下[Win ...

最新文章

  1. 5G NGC — NSSF 网络切片选择功能
  2. 郑州网络推广浅谈网站首页在优化时都需要注意哪些细节呢?
  3. CrateDB——全文搜索使用的是lucene,尚不知其底层实现
  4. mysql存储过程详解[转]
  5. java css网页布局实例_java代码例子
  6. 我的世界基岩版json_(1.8.0.13+)我的世界Minecraft【BE】基岩版 /function 使用教程
  7. LintCode: Median of two Sorted Arrays
  8. Bootstrap源代码多行代码
  9. 【JDK源码分析】StringBuilder、StringBuilder、String、AbstractStringBuilder源码解析
  10. 买基金你们都亏了多少钱?
  11. SQL优化之存储过程强制编译
  12. 顶会 Best paper award 获得者分享发顶会技巧
  13. Tomcat内存溢出,解决方法
  14. OpenKG祝大家端午安康
  15. NFT头像屡拍天价,如何从理性角度分析其市场价值?
  16. 《死亡邮件》评怀疑这是QQ邮箱的推广电影
  17. 一个近乎完美的Unity全平台原生c#热更方案
  18. Python实现桌面壁纸设置
  19. JS 对象直接量方法创建对象
  20. 今天不发技术文,发点粉丝福利

热门文章

  1. 我爱南开站 -- EmpriseNovel精华区
  2. 实体对齐(Entity Alignment)相关论文与数据集整理
  3. 神秘九芒星——九型人格
  4. 微信小程序向左向右滑动事件
  5. 30分钟!一键部署Oracle 19C单机CDB+PDB
  6. 喝香槟 品科学——香槟的六大秘密
  7. DIR染料标记外泌体鼠体实验
  8. 不搞笑不给力——年会小品《山寨新闻联播》
  9. 解决mac的的789 uio jkl m,.不能用的问题
  10. 刘馨文:关键词优化排名如何优化网站