330 likes | 458 Views
Non-Volatile Object Store And Hive Based Registry Design For Windows CE . 刘由顺 软件架构师 北京 华夏互动 文化传播有限公司. History. RAM Registry SYSGEN_FSREGRAM Most Common Implementation in PDAs Content Loss on boot Save And Restore Methods require difficult code pReadRegistryFromOEM pWriteRegistryToOEM
E N D
Non-Volatile Object Store And Hive Based Registry Design For Windows CE 刘由顺 软件架构师 北京华夏互动文化传播有限公司
History • RAM Registry • SYSGEN_FSREGRAM • Most Common Implementation in PDAs • Content Loss on boot • Save And Restore Methods require difficult code • pReadRegistryFromOEM • pWriteRegistryToOEM • RAM Object store • SYSGEN_FSRAMROM • most common denominator for application development • Object Store Volume is always mounted • Object Store is the Root of the file system • Content Loss on cold boot • Object Store and Executable Memory Tradeoff • FSRAMPERCENT • SetSystemMemoryDivision() • RAM Object store limited to 256 MB
Persistence Benefits • Simplifies Cold Boot System startup • Data and Configuration is permanent • Install applications once • Reduce Data Backup/Restore Requirement • Eliminate Redundant Data storage Requirement • Reduce Cold Boot Times • No Limit On Object Store Size
Persistence Benefits • Better Power Management • Reduce/Remove Backup Battery needs • Increase Battery run time • Lower RAM requirements = Lower Power • Easy to Implement • Largely Transparent to current Apps • Mainly Simple Registry Setup Required • Lower Cost systems • Flash is cheaper than RAM for Data Store
Boot Phase Definitions • 0 = Prior to init of locale (wince.nls) • 1 = After locale init (wince.nls) but before registry is functional • 2 = After registry is functional
File System Fundamentals • Autoload file systems • HKLM\System\StorageManager\AutoLoad • Do not need block drivers • Don’t require Device.exe • Loaded by Storage Manager • Can Start in BootPhase 0 or 1 • Can Load Synchronously or Asynchronously [HKLM\System\StorageManager\Autoload\<your file system>] “BootPhase” = dword:0 “LoadFlags” = dword:0 ;Async (default) ;Sync = 1
File System Fundamentals • Block Driver Based File Systems • Loaded By Device.exe • IClass indicates its managed by storage manager {A4E7EDDA-E575-4252-9D6B-4195D48BB865} • Specifies partition and File system drivers • Must Start in Bootphase 1 HKLM\Drivers\Builtin\<your block device> “BootPhase” = dword:1
Hive Fundamentals • Hives are registry files stored on persistent file systems • Boot Hive • Changes made during boot are copied to system hive • Default Hive / System Hive • System Data (HKLM, HKCR, HKU) • User Hive • User Data (HKCU) • Allows settings for different users at logon • Only Deltas are stored
Hive Fundamentals • The kernel starts Filesys.exe • Filesys loads the Boot Hive from the ROM Image • Filesys may start Device.exe to gain access to system hive • Device.exe starts block drivers based on the boot registry • The boot file system is initialized based on registry keys • Filesys loads and mounts system registry • The Kernel initializes using the system registry • The Kernel signals Filesys • Filesys.exe starts applications (Launch Keys) • Device.exe is loaded if not already loaded • Filesys.exe signals BootPhase2 event • Device.exe then re-enumerates, starting drivers
Hive Fundamentals [HKLM\init\BootVars] "SystemHive"="<system hive path>” "Start DevMgr"=dword:<your value> ; 0 = don’t start ; 1 = Start “Default User”=“<username>” “ProfileDir”= <path> “Flags” = dword:3 ;Bit 0 = start storage manager ;Bit 1 = start device manager “RegistryFlags”=dword:<your value> ;1 = enables aggressive flushing ;0 = default behavior
Hive Implementation • Select Catalog Components • Hive Based Registry support • (SYSGEN_FSREGHIVE) • Storage Manager Components • SYSGEN_STOREMGR • FAT (SYSGEN_FATFS) ? • TFAT (SYSGEN_TFAT) ? • Partition Driver (SYSGEN_MSPART) ? • Components required depends on boot device • See Examples
Hive Implementation • Define Registry Hive Boot Sections • Define the drivers and other system components required to start the system and access the boot media. • Wrap all boot hive registry entries in the following comments ;Hive Boot Section <registry settings> ;End Hive Boot Section • Common.reg has default definitions
Hive Implementation • Prevent device.exe from loading drivers twice [HKLM\Builtin\drivers\...] “Flags”=dword:1000 • Analyze the File system components required to load the device used to store the hives • Does it need partitioning or format? • Beware of drivers that use IsAPIReady() • Enable Additional Debug Zones [HKCU\Pegasus\Zones] "FileSys" = dword:20
Hive Implementation • Indicate System Registry Location [HKLM\System\StorageManager\Profiles\<ProfileName>\<FileSystemName>] "MountFlags"=dword:2 or “MountAsBootable”=dword:1
Hive Implementation • Implement Registry Flushing • Suspend/Resume/PowerDown Flushing is automatic if power aware (more later) • Do one or more of the following • Enable Aggressive Flushing [HKLM\init\BootVars] “RegistryFlags"=dword:1 • RegFlushKey() during power down • Enable Lazy Flushing Environment Variable at build time • PRJ_ENABLE_REGFLUSH_THREAD
Persistent Object Store • Select the Catalog Components • Select ROM-Only File System from Catalog (SYSGEN_FSROMONLY) • Select Storage Manager Components from Catalog • SYSGEN_STOREMGR • FAT (SYSGEN_FATFS) ? • FAT (SYSGEN_TFAT) ? • Partition Driver (SYSGEN_MSPART) ?
Persistent Object Store • Mount Root File System [HKLM\System\StorageManager\Profiles\<Your File System>] “MountAsRoot” = dword:1
Persistent Object Store • Update FSRAMPERCENT in Config.bib • Defaults to 0x80808080 if not set • Set FSRAMPERCENT to >= 32KB • Still need some RAM for Object Store Operations • Recycle Bin • Copy Operations • Manage Stack and Memory Heap • Compress and Expand Files • *pOEMCalcFSPages()
iPSM Example ; This registry setting indicates the PSM contains the registry and sets PSM ; to load in the first boot phase with the boot registry. [HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\PSM] "Dll"="PSMFSD.dll" "Paging"=dword:1 "LoadFlags"=dword:1 "MountFlags"=dword:2 "Flags"=dword:1000 "MountAsRoot"=dword:1 ;makes psm the root of the file system "MountAsBootable"=dword:1 ;specifies the drive contains the system hive. "BootPhase"=dword:1 ;NLS support needed ; The following key loads the PSMLock dll to support power management issue with PSM [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PSMLock] "Prefix"="PSL" "Dll"="PSMLock.Dll" "IClass"=multi_sz:"{8DD679CE-8AB4-43c8-A14A-EA4963FAA715}"
iPSM Example ; This registry key specifies the name of the PSM folder. [HKEY_LOCAL_MACHINE\Drivers\Builtin\FlshDrv] "FolderName"="Flash File Store“ [HKEY_LOCAL_MACHINE\System\StorageManager] "Dll"="fsdmgr.dll“ ; This flag tells the device manager to load fsdmgr in the first boot phase ; with the boot registry, and not to load it a second time in the second ; boot phase with the system registry "Flags"=dword:1000 [HKEY_LOCAL_MACHINE\System\Platform] "RegPath" = "\\Flash File Store" [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\PSM] "MountAsRoot"=dword:1 ;makes PSM the root of the file system "MountAsBootable"=dword:1 ;specifies PSM contains the system hive. "BootPhase"=dword:1 ; NLS support is required
DOC Example [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\TrueFFS] "Index"=dword:1 "Dll"="TrueFFS.dll" "Prefix"="DSK" "Order"=dword:1 "Ioctl"=dword:4 "AutoFormat"=dword:1 ; test for format to boot "DocAccessType"=dword:10 "WindowBase"=dword:0c000000 "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}“ "Flags"=dword:1000 ;avoid loading the driver twice "BootPhase"=dword:1 ;NLS support required
DOC Example [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\TRUEFFS_DOC] "Name"="DiskOnChip M-Systems" "Folder"="DiskOnChip" "AutoFormat"=dword:1 ;auto format if needed "AutoPart"=dword:1 ;auto partition if needed [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\TRUEFFS_DOC] "DefaultFileSystem"="FATFS" "AutoMount"=dword:1 ;mount any partition automatically "MountAsRoot"=dword:1 ;makes trueffs the root of the file system "MountAsBootable"=dword:1 ;specifies that Trueffs contains the system hive. "BootPhase"=dword:1 ;NLS required [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\TRUEFFS_DOC\FATFS] “MountAsBootable"=dword:1 ;FATFS is mounted as bootable "MountAsRoot"=dword:1 ;FATFS contains the system hive
Power Management Considerations • Use SetSystemPowerState() • allow power manager to properly flush file system on suspend/resume cycles • Implement Graceful Shutdowns • Software enabled cold and warm boots • IClass {8DD679CE-8AB4-43c8-A14A-EA4963FAA715} indicates Power Managed Block Device • Provide methods to protect against file system corruption • TFAT • Other software methods • Hardware methods • System recovery tools (ScanVolume())
Performance Considerations • Performance will be slower than RAM based Object Store • Consider the System Data Use • NOR Flash Memory • Fast Read • Slower Write than NAND • NAND Flash Memory • Slower Read than Nor • Faster Write than Nor • RamDrive can be used to boost application performance • Implement Proper File System Caching • HKLM\SYSTEM\StorageManager\FATFS • “EnableCache” = dword:1 • “CacheSize” = dword:? • FATFS_VERIFY_WRITES Flag ? • FATSF_WRITETHROUGH Flag ? • Implement Proper System Data Caching • Tune File System Drivers for Performance
Application Considerations • Rogue Applications can prevent boot • Implement Clean/Safe Boot • Format Media • IOCTL_HAL_QUERY_FORMAT_PARTITON • Restore Default (ROM) Hive • IOCTL_HAL_GET_HIVE_CLEAN_FLAG • Old Registry is deleted • New Registry is created • Reverts system to Factory Defaults • Provide tools for diagnosis of failure • Read Media from Bootstrap • Diagnose Registry • Diagnose File System
Application Considerations • Registry Save and Restore functions exist RegSaveKey(HKEY_LOCAL_MACHINE,…) RegReplaceKey(HKEY_LOCAL_MACHINE,…) RegSaveKey(HKEY_CURRENT_USER,…) SetCurrentUser(NULL,…) CopyFile(CurrentUser,….) • Use Persisted Keys for determining when to backup registry [HKEY_LOCAL_MACHINE] "RegPersisted"=dword:1 [HKEY_CURRENT_USER] “RegPersisted”=dword:1
Tools & Resources Build Develop Websites msdn.microsoft.com/embedded msdn.microsoft.com/mobility Newsgroups microsoft.public.pocketpc.developer smartphone.developer dotnet.framework.compactframework microsoft.public.windowsxp.embedded windowsce.platbuilder windowsce.embedded.vc Blogs blogs.msdn.com/mikehall blogs.msdn.com/windowsmobilevsdteamnetcfteam Tools Windows CE 5.0 Eval KitWindows XP Embedded Eval Kit Windows Mobile 5.0 Eval Kit
大会注意事项 请在课程结束后填写课程培训反馈表,参加抽奖。 请填写资料袋内的蓝色大会满意度反馈表,到大会接待台领取 《Windows Mobile手机应用开发》工具书。 您还可以: 参加Windows Mobile动手实验室; 参观微软及合作伙伴展区; 体验基于 Windows Mobile平台开发的最新硬件产品及解决方案。