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. python 无头模式 绕过检测_Python chrome 无头模式的问题
  2. CLOCs:3D目标检测多模态融合之Late-Fusion
  3. 并发编程线程通信之管道流
  4. 韩国IT业是怎么走向国际我们须要学习什么
  5. MFC 操作配置文件INI的方法
  6. ajax回调打开新窗体防止浏览器拦截方法
  7. 大一python题库刷题训练_python实现合工大试题库自动刷题
  8. php最常用方法,php 常用方法
  9. 你认识的老罗又回来了!罗永浩:我的创造力才刚刚开始猥琐发育
  10. Linux sites
  11. linux steam安装目录,如何在Ubuntu Linux上下载和安装Steam
  12. 北上广深也不相信口水
  13. 富爸爸系列2—财务自由之路
  14. html如何制作艺术字体,设计华丽金沙艺术字体图片的PS教程
  15. 多客户端访问mysql_解决关于多客户端操作数据库并发问题
  16. 微信小程序及微信生态圈
  17. 经典算法:二叉树的建立
  18. 减盐不减味,乌江榨菜掀起轻盐升级革命
  19. python调用linux命令
  20. (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)

热门文章

  1. 米兰德比百年历史渊源
  2. 企业内部专用,企业培训系统源码
  3. 《国际联网安全保护管理办法》
  4. 使用html仿支付宝首页,iOS 仿支付宝首页样式(二)
  5. iPhone 5又曝光:内置大容量电池+nano-SIM卡
  6. USACO Tractor
  7. LED流水灯切换中断的替代法
  8. 极简主义的远程文件浏览器Mikochi
  9. Fashion MNIST数据集的处理——“...-idx3-ubyte”文件解析
  10. 计算机音乐管弦乐研究现状,【音乐百科】你是否了解管弦乐与管弦乐团的诞生发展脉络?...