|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
NSStringNSArrayNSDictionary等这些工具在所有的框架里都会出现iOS大部分类都是继承自NSObject(我还没见过不是继承自NSObject的..)WindowsCE是微软为嵌进式设备打造的操纵体系,而嵌进式设备可谓多种多样,这就请求CE操纵体系必需是可定制的,以是微软将WindowsCE计划为模块化的操纵体系。说复杂点,我们能够把WindowsCE想像成一盒积木,你能够用积木搭建出任何物体,但纷歧定要把一切的积木都用上。WindowsCE界面长得很像一般PC上利用的Windows体系,让人误觉得基于WindowsCE的开辟和一般Windows开辟区分不年夜。很不幸,它们仍是有十分多的区分,由于WindowsCE是针对小型挪动设备,而这类安装是千差万其余。因为微软只供应WindowsCE内核,它其实不间接撑持PC的硬件,因而几近一切内部的硬件驱动都必要用户依据所选择的芯片来写驱动程序,这给开辟者带来了很年夜的贫苦。以是,开辟者必需懂得方针设备和部署使用程序的体例,比方注册表是怎样事情的就是个中之一。
1.甚么是WindowsCE注册表
(1)甚么是WindowsCE注册表
在微软的嵌进式操纵体系WindowsCE中,注册表饰演着十分主要的脚色。与桌面Windows一样,WindowsCE注册表(Registry)也是一个体系数据库,用来保留使用程序、驱动程序、用户的设定和别的一些体系的设置信息,一般还存储着操纵体系运作和挪用程序的形态信息。它的布局与磁盘的逻辑布局类似,是接纳树形布局来办理设置信息。比方,每一个用户的设置文件、安装的使用程序和每一个使用程序能够创立的文档范例、文件夹和使用程序图标的属性表设置、体系上存在哪些硬件和正在利用哪些端口等。
(2)注册表的感化
一样平常来讲,注册表把持一切使用程序和硬件外设的驱动,把持的办法是基于用户和盘算机的,而不依附于使用程序或驱动自己。比方,每一个注册表的参数项把持一个用户的功效大概盘算机功效。在没有注册表的情形下,操纵体系是不克不及取得充足的信息来运转和把持外设、使用程序及准确呼应用户的输出。
关于外设来讲,注册表是一个纪录驱动设置和地位的数据库。当操纵体系必要存取硬件设备时,它就必要利用外设驱动程序。但在WindowsCE中这个外设驱动是自力于操纵体系的,以是操纵体系必要晓得从那里找到它们,比方文件名、版本号、别的设置和信息。因而,注册表上没有此设备的纪录时,它们就不克不及被利用。
关于使用程序来讲,当一个用户筹办运转一个使用程序时,注册表供应使用程序的信息给操纵体系,如许使用程序就能够被找到。由于注册表保留了使用程序的缺省数据和帮助文件的地位信息和别的可选项,一样也保留了别的的安装信息,安装软件的版本号,序列号等。
(3)注册表的根键和函数
WindowsCE注册表和别的Windows操纵体系的注册表观点和布局基础不异。比方WindowsCE的注册表限定有:键名最年夜长度255个字符、数据最年夜4KB、子键深度最年夜值16层。WindowsCE撑持四个根键,形貌以下:HKEY_LOCAL_MACHINE,硬件和驱动设置数据;HKEY_CURRENT_USER,用户设置数据;HKEY_CLASSES_ROOT,OLE和文件范例婚配设置数据;HKEY_USERS,合用于一切用户的数据。
别的,WindowsCE操纵注册表的函数有:翻开RegOpenKeyEx和创立RegCreateKeyEx;读RegQueryValueEx写RegSetValueEx;列举出口或子键RegEnumValue、RegEnumKeyEx;删除出口或子键RegDeleteValue、RegDeleteKey;封闭RegCloseKey等。
2.WindowsCE注册表的完成体例
嵌进式体系的特性是小型化,因而一些嵌进式设备是没有外存的。为此WindowsCE注册表供应了两种完成体例:基于RAM的注册表(RAM-BasedRegistry)和基于Hive的注册表(Hive-BasedRegistry)。在定制内核的时分只能选择个中一种,从实际上讲这两种注册表都可以完成永世保留注册表数据。注册表完成范例关于用户和使用程序来讲是通明的,可是接纳分歧的范例会影响WindowsCE的启动按次和启动速率,还会影响内存的利用量。
(1)基于RAM的注册表
基于RAM的注册表,也叫基于对象存储(ObjectStorage)的注册表。正如其名,基于RAM的注册表把全部注册表作为一个对象存储堆寄存在体系的内存中。这意味着假如对体系举行冷启动大概体系断电,对注册表的一切修改城市丧失。长处是利用基于RAM的注册表,对注册表的读写会见操纵会变得十分高效。因而,基于RAM的注册表对照合用于没有内部存储,并且有电池保留内存数据(battery-backedRAM)的设备,它合适频仍热启动而不冷启动的设备。
假如有外存且常常冷启动的设备接纳基于RAM的注册表,则必要在体系断电的时分对注册表举行保留,等体系再次启动时再对保留的注册表举行复原。为此,WindowsCE供应了两种办法用来断电保留基于RAM的注册表:
①第一种体例是在设备封闭前挪用RegCopyFile函数,将全部注册表数据以文件情势保留到永世存储器上。WindowsCE供应了两个体系API用来保留和复原全部注册表。当要保留和恢复注册表时,先在体系断电的时分挪用RegCopyFile函数将全部注册表保留为外存上的一个文件;当体系从头启动时再挪用RegRestoreFile函数将文件全体读出RAM中,然后再热启动体系,先前保留的注册表就能够失效了。
必要注重的是,这时候必需多一次热启动才干使恢复的注册表无效。由于只要在体系启动的时分才会往检测RegRestoreFile放在RAM里的注册表信息。可是此办法的弱点是必要两次启动,因而效力绝对对照低。
②第二种体例是使用OEM函数。这一种体例能够制止前一种体例必要两次启动的弱点。OEM能够在BSP的OAL层中完成WriteRegistryToOEM和ReadRegistryFromOEM两个函数。WindowsCE会在体系启动和封闭的时分主动挪用这两个函数来保留和恢复注册表。当使用程序挪用RegFlushKey函数时,这个函数会挪用WriteRegistryToOEM函数写注册表数据到永世存储器上。
此种办法固然能够制止两次启动的缺点,但成绩是在内核启动时,挪用ReadRegistryFromOEM之前文件体系驱动程序还没加载,因而没法利用CreateFile,ReadFileAPI来翻开、读取文件,而只能利用一些更底层的操纵来完成。因而,倡议假如要接纳基于RAM的注册表保留机制,并且请求永世保留注册表数据,利用第一种体例对照简单完成。
(2)基于Hive的注册表
基于Hive的注册表是把注册表数据寄存在文件体系的文件上,这类文件被称作蜂箱Hive。这就意味着不再必要在体系断电和启动时举行保留恢复注册表操纵。Hive是注册表中的一组键,包含子键、键值、数据,它是保留大概加载注册表数据的单元。
Hive在文件体系上体现为单个文件,分为:①BootHive,包含HKEY_LOCAL_MACHINE,HKEY_CLASSES_ROOT,HKEY_USERS中的一切数据,一样平常只在启动时利用。②SystemHive,包含OEM的HKEY_LOCAL_MACHINE,HKEY_CLASSES_ROOT,HKEY_USERS的一切数据,是指设备局限内不跟着用户改动而改动的数据。③UserHive,包含HKEY_CURRENT_USER的一切数据,是指用户独有的设置,每一个用户都有一个独自的User.hv。
基于Hive的WindowsCE注册表加载历程可分为两部分:boot.hv和system.hv。前者是启动时的注册表项,后者是体系注册表项。所谓Hive注册表就是先加载boot.hv,把注册表保留地点的存储驱动和文件体系先加载;然后再加载system.hv,也就是从磁盘上往读体系的注册表项。在启动时加载boot.hv的标签是HIVEBOOTSECTION和ENDBOOTSECTION。
基于Hive的注册表合用于有永世存储而且必要常常冷启动的设备。由于基于Hive的注册表把体系数据和用户数据分隔寄存,这就意味着基于Hive的注册表能够供应多用户撑持。比方,为对每一个用户供应分歧的User.hv,当用户登录时加载响应的User.hv,从而到达多用户目标。
3.WindowsCE加载注册表的步骤
WindowsCE接纳新的注册表保留手艺,基于Hive的注册表是让人很镇静的事变。在这之前基于WindowsCE的设备,年夜多半接纳给RAM供电体例来保留注册表数据,固然也能够经由过程RegCopyFile函数永世保留,但究竟启动时还要再热启动一次。有了基于Hive的手艺,启动体系会主动加载数据,免除了热启动的贫苦。并且当内核更新晋级时,不必再忧虑保留在永世存储器上的体系HIVE文件影响新的内核,由于体系会主动判别并删除过期的体系HIVE文件。
实践上,也能够以为只要具有了如许的手艺,基于WindowsCE的产物才算是一个真实的电脑。如今以基于Hive的注册表为例,简述WindowsCE在启动时是怎样加载已保留的注册表数据:
(1)nk.exe实行,启动filesys.exe。filesys.exe起首加载BootHive,此时BootHive位于nk.bin解压以后的文档中。然后,filesys.exe启动device.exe后处于守候形态,守候device.exe将包括SystemHive的文档体系和存储设备的驱动程序加载终了,而这个文档体系和存储设备的驱动程序存在于BootHive中。
(2)device.exe加载上述所说的文档体系驱动和存储设备驱动,使之入手下手事情。以后device.exe处于守候形态。然后,filesys.exe再被叫醒,加载而且安装SystemHive,然后filesys.exe再次处于守候形态。
(3)nk.exe依照SystemHive的信息入手下手实行初始化事情,包含加载驱动和启动一些使用程序。个中加载驱动一样平常由device.exe实行,而启动使用程序由filesys.exe实行。这时候device.exe和filesys.exe都被叫醒。
由于BootHive和SystemHive大概有反复的中央,以是大概反复加载了驱动或反复启动了使用程序。为此,WindowsCE同意在形貌驱动程序的注册表信息中到场避免反复的标记,而使用程序是接纳事务对象来避免反复启动。
有一些像NSCopying的接口(经@李禹龙提醒应该叫协议)不是特别用到开始不用了解NSObject创建对象的时候用+(id)alloc方法创建后需要init方法初始化 |
|