[UPDATE 2006/12/12]
联系人拼音查找:
根据我汉化i-mat jasjar 1.90.96WWE的经验,应该是修改outres.dll文件,如果有对应mui文件的话则是修改对应的mui文件,如outres.dll.0409.mui,后面我以outres.dll文件为例,mui的修改是一样的:
dump目录里outres.dll的目录下面有一个outres.dll文件,如果没有的话在命令行进入dump目录,执行recmod outres.dll则可以生成outres.dll文件,recmod在我提供的工具里有
复制outres.dll文件到其他地方,然后删除outres.dll这个文件夹,将outres.dll文件复制回dump,使用资源编辑器,如 exescope,resource hacker之类的,我比较习惯passolo,打开outres.dll,在字符串资源里找
9$#ab$#ab$cde$cde$fgh$fgh$ijk$ijk$lmn$lmn$opq$opq$rst$rst$uvw$uvw$xyz$xyz$x
把它修改成
9$#A$#a$abc$吖八嚓$def$咑妸发$ghj$侅铪丌$klm$咔垃嘸$nop$拏噢妑$qrs$七呥仨$tw$他屲$xyz$夕丫帀
保存,对outres.dll文件进行数字签名
把outres.dll复制到手机的windows文件夹然后重启,或者打包rom刷机
[UPDATE 2006/12/11]
增加中文支持,看到问这个的比较多:
找一个支持中国的wince.nls,cestart之类的里面都有,覆盖原有文件,找一个中文字体,比如sunfon.ac3
修改地区设置为中国
[HKEY_LOCAL_MACHINEnls]
"SystemLCID"=dword:804
"LegacyLocaleMode"=dword:1
"DefaultLCID"=dword:804
增加字体链接
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftFontLinkSystemLink]
"Arial"="Windowssunfon.ac3,SC_Song"
"Courier New"="Windowssunfon.ac3,SC_Song"
"Tahoma"="Windowssunfon.ac3,SC_Song"
"Times New Roman"="Windowssunfon.ac3,SC_Song"
"MS Sans Serif"="Windowssunfon.ac3,SC_Song"
"Kingsoft Phonetic Plain"="Windowssunfon.ac3,SC_Song"
[UPDATE 2006/11/14]
To syn:
集成 A4 输入法
从 CAB 文件中可以看到文件结构,A4 有四个 skin,但是单个的文件名却相同,所以保存的时候要改下文件名,然后在 initflashfiles.dat 中指定路径和文件名,例如
;==========================================================================
; Application bib for ZTA4
;==========================================================================
Directory("Windowsskinblack"):-File("black.png","Windowsblack.png")
Directory("Windowsskinblue"):-File("blue.png","Windowsblue.png")
Directory("Windowsskinorange"):-File("orange.png","Windowsorange.png")
Directory("Windowsskinpink"):-File("pink.png","Windowspink.png")
Directory("Windowsskinblack"):-File("skin.ini","Windowsblackskin.ini")
Directory("Windowsskinblue"):-File("skin.ini","Windowsblueskin.ini")
Directory("Windowsskinorange"):-File("skin.ini","Windowsorangeskin.ini")
Directory("Windowsskinpink"):-File("skin.ini","Windowspinkskin.ini")
Directory("WindowsHelp"):-File("ZTA4.htm","WindowsZTA4.htm")
Directory("Windowsskin"):-File("ZTA4_Skin.ini","WindowsZTA4_Skin.ini")
Directory("WindowsHelp"):-File("ZTA4BackGround.gif","WindowsZTA4BackGround.gif")
Directory("WindowsHelp"):-File("ZTA4Logo.gif","WindowsZTA4Logo.gif")
;==========================================================================
; END Application bib for ZTA4
;==========================================================================
然后把所有文件复制到 dump 目录,同时对 ZTA4.dll 和 ZTA4Srv.dll 做数字签名,注册表也要做相应修改
default.rgu:
[HKEY_LOCAL_MACHINESOFTWAREAppsMicrosoft ZTA4_26]
"InstlDir"="Windows"
"InstallDir"="Windows"
"Instl"=dword:00000001
[HKEY_LOCAL_MACHINESecurityAppInstallMicrosoft ZTA4_26]
"InstallDir"="Windows"
"Role"=dword:00000018
[HKEY_LOCAL_MACHINESecurityAppInstallMicrosoft ZTA4_26ExecutableFiles]
[HKEY_LOCAL_MACHINESystemCurrentControlSetControlLayoutse0010804]
"Ime File"="windowsZTA4.dll"
"Layout Text"="ZTA4"
user.rgu:
[HKEY_CURRENT_USERkeyboard layoutPreload]
@="e0010804"
[HKEY_CURRENT_USERkeyboard layoutPreload1]
@="e0010804"
OK,大功告成
[UPDATE 2006/10/13]
To fdps:
1. 没有试过微软拼音是否可行,不过a4是肯定可以的:
安装a4输入法,然后安装 sipchange,在程序里找到 sipchange,会列出所有输入法,然后选择一个喜欢的手写输入法,我用的是方框的那个,然后重启,这样可以同时用键盘输入拼音或着手写
其实sipchange和坛子里大家用的那个关联的程序是一个原理,只不过不带什么输入法,有个简单的选择界面,个人觉得比较顺手
Sipchange http://blog.waynezhang.com/downloads/sipchange.cab
A4 [url]http://blog.waynezhang.com/downloads/ZTA4_261.PPC2005_DefaultPY.v2.0.1.rar[/url]
2. 在HKCU中有一项 Defaultim,改成其他输入法的 clsid 就可以了
[UPDATE 2006/10/12]
To fdps:
具体的就不是很清楚了,如果仅仅是因为preload的layout,那么所有的中文rom不是都不能用城际通了?826的打了补丁拼音输入法就不能用了么?
正德的输入法没有看过,不过移植mbox的话同时最好将全屏手写一起移过来,他们所依赖的文件还分的不是很清楚,所以就一股脑移过来好了,最好把正德的注册表导出来看看有什么区别,所有hanwang关键字的还有和那几个dll文件相关的项
至于输入法的调用,826和正德都是基于繁体版修改的,如果你仔细比较过的话会发现所有的繁体rom都比英文rom好调用,坛子里有人说是因为wm5系统对输入法的缓存有一定限制,那么只能推测中文输入法占用内存必然高于英文rom,而dopod对于繁体的rom肯定是对输入法的部分有所修改,具体是哪里就不知道了
对于输入法的一点点建议:
设微软拼音为默认输入法,然后安装 a4 输入法,安装 sipchange 关联一个习惯的手写输入法,这样软起后会发现可以直接用手写输入法,同时也可以使用键盘来拼音输入
[UPDATE 2006/10/11]
To shishan:
如果只是输入法的话可以在注册表里禁掉不用的输入法,安装坛子里的拼音包就行了,相信比修改rom来的快,其实大家修改rom的初衷只不过是在英文rom里加入中文支持而已
PS:如果安装想将拼音输入法设为默认就要安装SdkCert.cab,很多地方都下的到,同时对拼音输入法的chsime003.dll, sskim.dll, sskim.192.dll三个dll文件做数字签名
To fdps:
我之前加输入法的都是826的,确实也发现了某些字不能识别的问题,替换正德的是一样的,按照我下面说的就可以了,把正德的rom解开,复制相应的文件和注册表项就行
[UPDATE 2006/10/09]
To Henry:
这个是你的命令不正确,检查一下参数和 default.hv 的路径;目前所有的rom都是这两个文件,不会是其他文件
To Natas:
坛子里我已经写出来那三个输入法的添加方法
[UPDATE 2 2006/09/27]
TO fdps:
输入法大概是:
default.hv:
[HKEY_CLASSES_ROOTCLSID{5AAFAF99-8D99-4466-A66D-95C44B608A84}]
@="全屏手写输入"
[HKEY_CLASSES_ROOTCLSID{5AAFAF99-8D99-4466-A66D-95C44B608A84}IsSIPInputMethod]
@="1"
[HKEY_CLASSES_ROOTCLSID{5AAFAF99-8D99-4466-A66D-95C44B608A84}InprocServer32]
@="HWPenCE.dll"
[HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPTOUCH]
"CalibrationData"="501,496 848,232 849,767 158,769 156,230 "
"DriverName"="hwTouch.dll"
[HKEY_LOCAL_MACHINESOFTWAREHanWang]
[HKEY_LOCAL_MACHINESOFTWAREHanWangHangWang Pen for WinCE]
"Recognizer range"="600E"
"Recognizer delay"="400"
"Ink type"="2"
"Ink color"="0"
"Ink width"="1"
"Ink speed"="10"
"Default input panel"="0"
"Screen segment"="1"
"Sound on"="1"
"Study"="0"
[HKEY_LOCAL_MACHINESOFTWAREHanWang]
[HKEY_LOCAL_MACHINESOFTWAREHanWangHangWang Pen for WinCE]
"Recognizer range"="600E"
"Recognizer delay"="400"
"Ink type"="2"
"Ink color"="0"
"Ink width"="1"
"Ink speed"="10"
"Default input panel"="0"
"Screen segment"="1"
"Sound on"="1"
"Study"="0"
[HKEY_CLASSES_ROOTCLSID{124D7CDC-CF2D-418F-8BB4-4395AD048B79}]
@="手写输入"
"TimeOut"=dword:00000001
[HKEY_CLASSES_ROOTCLSID{124D7CDC-CF2D-418F-8BB4-4395AD048B79}InprocServer32]
@="mboxcht.dll"
[HKEY_CLASSES_ROOTCLSID{124D7CDC-CF2D-418F-8BB4-4395AD048B79}IsSIPInputMethod]
@="1"
[HKEY_CLASSES_ROOTCLSID{124D7CDC-CF2D-418F-8BB4-4395AD048B79}DefaultIcon]
@="mboxcht.dll,0"
[HKEY_CLASSES_ROOTCLSID{F50603D1-CF2F-41d8-A74B-651226633FF0}]
"Default"="拼音输入"
[HKEY_CLASSES_ROOTCLSID{F50603D1-CF2F-41d8-A74B-651226633FF0}DefaultIcon]
"Default"="sskim.dll,0"
[HKEY_CLASSES_ROOTCLSID{F50603D1-CF2F-41d8-A74B-651226633FF0}IsSIPInputMethod]
"Default"="1"
[HKEY_CLASSES_ROOTCLSID{F50603D1-CF2F-41d8-A74B-651226633FF0}InprocServer32]
"Default"="sskim.dll"
[HKEY_LOCAL_MACHINESystemCurrentControlSetControlLayouts]
[HKEY_LOCAL_MACHINESystemCurrentControlSetControlLayoutse0010804]
"Keyboard Layout"="00000409"
"Ime File"="chsime03.dll"
"Layout Text"="Intelligent IME 2003"
user.hv
[HKEY_CURRENT_USERControl PanelInput MethodHot Keys�0000012]
"Ime"=dword:58163972
"KM"=dword:49154
"VK"=dword:190
[HKEY_CURRENT_USERControl PanelInput MethodHot Keys�0000011]
"Ime"=dword:58163972
"KM"=dword:49156
"VK"=dword:32
[HKEY_CURRENT_USERControl PanelInput MethodHot Keys�0000010]
"Ime"=dword:58163972
"KM"=dword:49154
"VK"=dword:32
[HKEY_CURRENT_USERControl PanelInput MethodHot Keys�0000100]
"Ime"=dword:58163972
"KM"=dword:49153
"VK"=dword:112
[HKEY_CURRENT_USERkeyboard layoutPreload]
"Default"="e0010804"
[HKEY_CURRENT_USERkeyboard layoutPreload1]
"Default"="e0010804"
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion]
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionCHSIME03]
"ModeConfig"=dword:1048576
"Learning File 1"="WindowsPUserSx.DAT"
"Learning File 2"="WindowsPUserLx.DAT"
"NoPropertyUI"=dword:1
"PPC"=dword:1
"Vertical"=dword:1
"ShowState"=dword:0
"AutoCandAccel"=dword:1
"SIPDnPinyinType"=dword:1
"SIPUpPinyinType"=dword:2
文件:
拼音:sskim.dll sskim.192.dll chsime03.dll
方框手写:mboxcht.192.dll mboxcht.dll
全屏手写和方框手写联系比较紧,我还不是很清楚具体如何分开
除以上文件外,还需要复制所有hw开头的文件,所有扩展名为2bp, tbl, imd的文件,记得签名
[UPDATE 2006/09/27]
TO HUNDA:
这个取决于你所加的软件,如果软件需要一些必要的注册表项就要加入,同时,如果只是普通的应用程序而你也不介意第一次运行时有什么警告的话你也不需要对它进行数字签名
[UPDATE 2006/09/25]
TO 画神:
很抱歉我从来没有遇到过这个问题,只能建议你检查一下 nk.fat 的路径是否正确,并且保证中间的所有操作没有错误,尤其是make_imgfs 和 prepare_imgfs 时一定要加上 -nosplit 选项
TO leslie3366:
Qtek 1.31.76 在 XDA 上有,Uploads/Universal 下面
TO syh:
如果有空余时间我可以做,但是仍然希望你能自己动手,如果制作过程中有什么疑问可以和我一起讨论
TO hzx197920:
替换英文字体很简单,坛子里有类似的帖子,你可以参考一下,大概就是把字体复制到 dump 文件夹,然后修改注册表,增加 F哦那天Link 下的内容,但一定要保证字体名称和字体的文件名是正确的,尤其是字体名称,这个很容易被人忽略,每一个字体都有自己的名字,定义在字体文件里,例如 simyou.ttf 的幼圆字体名称为 YOUYUAN,而雅黑的默认应该是 Microsoft YaHei,注意空格和大小写,如果实在不确定的话,可以用WinCE CAB Manager打开坛子里的幼圆或者雅黑安装包看一下,替换自己字体的话就一定要知道它的字体名称
AND:
修改字体有很多工具,大家可以去试一下 FontCreator,google 搜一下就可以下到,这个工具可以替换字体里的内容,修改字体名称等等,甚至可以修改类似 STHeiti 这样只在 Mac 和 Linux 下工作的字体为 Windows 所用,不过修改这样的字体比较麻烦并且容易出错,不推荐
Universal Rom Kitchen
一、前言
Universal不用多说了,就是传说中的 Dopod D900, T-Mobile MDA Pro...... 方便起见,地下就称其为900了
900已经上市很久,却迟迟未在大陆销售,所以也一直没有官方的简体rom,所以对广大大陆的机油们,900什么最难得?rom!
用了这么久的900,刷了无数次rom,从最开始的简体测试版到正德beta,2006,然后几乎所有的英文rom。先说说这几个rom吧
简体测试版:1.00.00WWE的,速度很慢,不过还算稳定,中文支持都没有问题,输入法也是标准的微软拼音,方格手写和全屏手写,不过不支持蓝牙立体声,版本比较老,bug可能比较多
正德:正德的rom也算不错,只可惜在我的900上总是有问题,关机后假死,没有声音之类,所以......不好多做评论
8.26:这个版本很不错,是我所见过的最完美的一个简体rom了,基于1.30.108CHT繁体版修改的,各方面都很不错,不过蓝牙立体声的效果就实在是......
英文rom其实都差不太多,o2的据说比较稳定而Qtek的据说比较快,其实Qtek之所以感觉快是因为Qtek的rom附加的软件极少,系统很干净。我也很喜欢Orange的today(很久以前刷的,如果不是orange的,抱歉),很特别,不同于传统的today画面,不过速度实在太慢,所以放弃了。其他的都差不多了,而单论版本的话最新的应该是Qtek的1.31.76,settings里已经有关于GPS的选项了
二、dump your rom
不好意思,前面废话了一通,现在就让我来告诉大家定制rom是多么简单,而你所需要的,只是细心+耐心+时间
1. 必备的工具
HTC Extended ROM Tool
用来把我们的nbf格式的rom解开成fat格式,以及将fat格式的rom编码回nbf格式
imagefs tools
释放我们的fat rom,以及将dump出的文件压缩回fat格式
rgu hv edit
编辑注册表的工具
ultra edit
修改文件,其他的编辑工具也可以,但是一定要支持编码的转换,因为我们所编辑的文件都将是 unicode 编码并且是 dos 换行符的
WinCE CAB Manager
制作和查看cab包,如果你想加入软件的话,必备
Signcode
为文件增加数字签名
2. action
仔细看了上面工具的说明的话,你就应该直到我们的流程了,首先用 htc extended rom tool 解码 rom,然后用 imagefs tools 解开,编辑过后再用 imagefs tools压缩,接着 htc extended rom tool 编码,刷机就 ok 了:
1)准备工作,将我们的工具和rom解压缩到一个文件夹,本文中为 c:temp
2)运行 htc extended rom tool

第一步我们选择 decode,然后找到我们的 nk.nbf 文件
然后点 next

不需要做任何修改,直接点decode,稍等片刻,程序会提示 decode successful,在文件夹下会多出来一个nk.fat和一个nk.prj文件,前者就是我们的主角了
3)这一步开始我们将要在dos下进行操作,选择开始->运行,输入cmd,回车,现在打开了一个 dos 窗口,进入我们的 rom 文件夹
cd temp
解开 rom 文件需要两步,执行 prepare_imgfs nk.fat -nosplit
对于 900 rom,这一步的 nosplit 参数一定要加,否则后面的步骤将无法继续
C:temp>prepare_imgfs.exe nk.fat -nosplit
Searching for IMGFS start... Found at 00640000
Dumping IMGFS ...
Done!
C:temp>
现在在我们的 temp 文件夹下出现了两个新的文件,imgfs_raw_data.bin 和 imgfs_removed_data.bin,我们的数据都在前者,而后面的那个文件试空的,不必去理会它,接着执行 viewimgfs.exe imgfs_raw_data.bin
C:temp>viewimgfs imgfs_raw_data.bin
guidBootSignature: F8 AC 2C 9D E3 D4 2B 4D BD 30 91 6E D8 4F 31 DC
dwFSVersion: 00000001
dwSectorsPerHeaderBlock: 00000001
dwRunsPerFileHeader: 00000001
dwBytesPerHeader: 00000034
dwChunksPerSector: 00000008
......
这一步将我们的rom中的文件全部解出来,存放在dump文件夹下,屏幕输出会比较多,没什么错误就行了,ok,现在看看我们的 c:temp 下已经多了一个 dump 文件夹,所有文件都在里面了,具体的修改和说明我会在后面给出,下面我们看看修改好后如何再把它保存为rom文件
三、编码 rom
还是在 dos 命令行,执行 BuildImgfs.exe
C:temp>BuildImgfs
......
Processing "xls2pxl.dll" as module
Processing "xmeevtsnd.dll" as module
Processing "Zip.lnk" as file
Processing "Zip_(ht).htm" as file
Processing "zlib.dll" as module
Processing "zoom.bmp" as file
Total Sectors: 0000
Used Sectors : 1a920
Free Sectors : fffe56e0
然后执行 make_imgfs.exe nk.fat -nosplit
c:temp>make_imgfs nk.fat -nosplit
Searching for IMGFS start... Found at 00640000
Fixing... Done!
同样,nosplit参数必不可少
现在 nk.fat 已经更新了,用 htc extended rom tool 编码就行 ,运行 htc extendedrom tool,这次我们选择 encode,然后找到我们的 nk.prj 文件,看清楚了哦,是 nk.prj 文件,然后不用做任何修改,选择 encode ,紧接着程序会有两个警告,一个是问是否覆盖已有rom,另一个是 FAT16 is too large, continue at your own risk,不用理会,全部 ok,现在我们已经生成了新的 rom,还等什么,刷机吧
四、文件说明
这一节是大家比较关心的,关于 rom 里的文件(dump文件夹下),老实说我也并不了解每个文件都是做什么的,一般的修改大家只要知道一些必要的东西就可以了。
rom 的很多文件都是隐藏文件,所以我们要先把它们的隐藏,系统和只读属性去掉才可以编辑
rom 里的大多数 dll 文件都是作为 module 存在的,可以看到一个 dll 文件夹下 有一个同名的 dll 文件和 imagebin 以及 s001 之类的文件,这些文件在编码 rom 的时候会做特殊处理。目前据我所知,我们自己是无法建立 module 的,幸运的是,直接把 dll 文件拷贝进去也同样有效
default.hv 注册表文件,包括HKLM和HKCR里的内容,文件是编码过的,需要用 rgu 转换
user.hv 和default.hv一样是注册表文件,保存这 HKCU 下的所以内容
initflashfiles.dat 大家可能已经注意到了,dump文件夹下除了 module 外没有其他的文件夹,那么我们所看到的 windows 下的文件夹呢?答案是它们都被定义在这个文件里,类似一个虚拟文件系统,系统在启动的时候会将指定的文件映射到文件夹下面
下一节我们来讲讲注册表的修改
五、修改注册表
前面提过那两个注册表文件,default.hv 和 user.hv,它们是经过特殊编码的,所以我们需要先将它们转换为我们常见的注册表文件,同样要在 dos 命令行下操作
C:temp>rgucomp -o dumpdefault.hv -nologo > default.rgu
o参数用来指定文件,而nologo参数代表不要输出 microsoft 的版权信息,后面的 > default.rgu 是 dos 的管道重定向,将标准输出流的内容写进 default.rgu 文件,在第一次执行的时候我们可能会遇到一些错误,产生的文件内容只有一句 wmain: (RGUComp) !ERROR the _FLATRELEASEDIR environment variable is not set,这是因为我们没有设置一个必备的环境变量,很简单
C:temp>set _FLATRELEASEDIR=.
C:temp>rgucomp -o dumpdefault.hv -nologo > default.rgu
这时我们生成的文件应该已经包含注册表项了,需要注意的一点是,如果注册表内容含有中文,在输出的文件里会变为空内容,所以修改已有的中文rom会比较麻烦,需要在 900 中导出注册表,然后对照注册表来补全我们的 rgu 文件。这只在 hv 到 rgu 的转换中存在,对于含有中文的 rgu 文件在转换为 hv 文件时则不会有任何问题。
除了上面将的中文的问题,对于 rgu 文件的修改还要注意几个问题:
文件头,这个也不算什么问题,不过困扰了我很久,结果发现......文件头缺少一行 REGEDIT4,用来说明文件内容是注册表文件,要手动加进去
文件的换行符,*nix 的换行仅有一个换行符存在,而 dos 和 windows 的换行则是一个换行符和一个回车符,相对多一个字符,所以在用 ultra editor 打开 rgu 文件时会提示是否转换为 dos 格式,这时要选择 yes
文件的编码,rgu 文件同意采用 unicode 编码,以保证非英文内容的正常存储,所以我们在 ultra editor 中也要做一下相应转换,选择 文件 > 转换 -> ASCII 到 Unicode,这时我们的 ultra editor 的状态栏应显示为 UDOS

看到了么?在行列号边上的那个,rgu 文件修改完成后,我们需要把它转换为 hv 文件,这个过程中程序只认 boot.rgu 文件,所以我们要先把文件复制一份名为 boot.rgu 的文件,然后转换,同样,生成的文件叫做 boot.hv ,我们在复制的时候也要指定文件名
C:temp>copy default.rgu boot.rgu
C:temp>rgucomp -b
Microsoft ® RGUComp Version 1.0.000
Registry file processor and hive builder.
Copyright © 2004 Microsoft Corporation All Rights Reserved.
built: Nov 19 2004 15:17:13
importing registry file ".boot.rgu"...
(RGUComp) done!
C:temp>copy boot.hv dumpdefault.hv
注意,默认情况下我们的很多文件属性会设为隐藏或只读或系统,所以我们的复制可能不会成功,需要先改变它们的属性,在我的电脑里可以搞定,或者
C:temp>attrib -s -r -h dumpdefault.hv
现在可以用新的文件覆盖它了
对于 user.hv 的修改也同样
五、加入你的第一个软件
加入软件的步骤其实很简单,把软件的文件拷贝到dump文件夹下,修改注册表,必要的话修改文件夹映射,有朋友希望能加入梅花p51,那么我就以梅花p51来做个例子吧。在这之前,还要说一下数字签名
1)数字签名
我们在安装应用的时候系统会有安装程序未签名的警告,在第一次启动某个应用软件的时候也会有类似的警告,这是因为Windows Mobile 5 采用了证书签名的机制来保护系统不被恶意程序所破坏。Windows Mobile 5会将一些经过官方确认的证书保存在一个信任列表里,经过这些证书签名的程序才具有访问系统内部资源的权利。而一个没有经过信任列表里的证书签名的应用程序则不具备这种权利,尽管我们选择了让系统相信这个应用并执行它,它仍然被挡在系统资源之外。在访问系统资源的时候它也仍然是被禁止的。看到这里你也许已经明白了,我们把海鹰或者梅花又或者是微软拼音设置为默认输入法的时候,启动机器会出现白屏的真正原因?对了,就是因为它们没有经过可靠的证书签名,明白了这个原因你可能又会想,找个可靠的证书签名不就好了么?不幸的是这些可靠的证书我们是拿不到的,它只能在microsoft或者dopod或者t-mobile之类的公司内部存在,而其他的个人是不可能轻易拿到的。不过,还有个好消息就是,我们可以有其他的证书来替代这些证书。Microsoft对开发者提供了一个用作开发测试的证书,由于是用作开发测试的,所以这个证书对于系统资源有全部的访问权,这个包我们可以在Microsoft的SDK里找到。
明白了这些道理,大家可能已经想到了解决方案,就是在PPC上安装SDK的证书,然后用这个证书来签名我们的梅花输入法,这样就可以把它设置为默认输入法了,没错,实践证明这个确实是可行的
关于这个SDK的证书,其实大家可能都用过了,在PPC端的安装包叫做SDKCert.cab,眼熟?没错,就是ozVGA,MRTrueVGA之类应用所带的。这时你应该明白了,ozVGA必须有可靠的数字签名才能够正确的替换系统资源,否则启动的时候一样会白屏。现在又有了新的问题,如果我们在 rom 里面把梅花设为默认输入法,那么我们必须在 rom 里同样插入我们的证书,否则系统根本无法启动,也就没有其他任何机会让你来安装这个证书了。那么,我们必须先知道这个cab包到底对系统做了些什么,我不想只告诉大家结果,因为过程更加重要。
其实除了证书之外,注册表里还存放这关于这些安全机制的策略:
[HKEY_LOCAL_MACHINESecurityPoliciesPolicies]
"00001027"=dword:1
"00001025"=dword:1
"00001024"=dword:1
"00001023"=dword:1
"00001021"=dword:c00
"00001020"=dword:1
"0000101f"=dword:1
"0000101e"=dword:1
"0000101d"=dword:1
"0000101b"=dword:1
"0000101a"=dword:0
"00001019"=dword:8c
"00001018"=dword:10
"00001017"=dword:80
"00001011"=dword:1
"0000100f"=dword:e90
"0000100e"=dword:40
"0000100d"=dword:c00
"0000100c"=dword:800
"0000100b"=dword:c80
"00001009"=dword:3
"00001008"=dword:1
"00001007"=dword:40
"00001006"=dword:1
"00001005"=dword:10
"00001001"=dword:2
"00001000"=dword:8
理论上讲修改这个策略也可以达到我们的目的----让没有签名的程序访问系统的全部资源,不过我并不推荐这么做,这样因为这样做会完全破坏系统的安全机制,导致其他的恶意应用破坏我们的系统。
再看看我们的证书,系统将证书全部存放在 [HKEY_LOCAL_MACHINECommSecuritySystemCertificates] 里,而对于那些绝对信任的证书存放在 [HKEY_LOCAL_MACHINECommSecuritySystemCertificatesPrivileged Execution Trust Authorities] 里,我们只要将 SDKCert 的证书放在这里就行了
要看到 SDKCert.cab 的内容,大家可能想到用WinCE CAB Manager,这个软件是用来制作 ppc 的 cab 安装包的,当然也可以看到 cab 的内容了,包括文件、注册表、快捷方式等等。不过很失望的是,用这个软件打开的 SDKCert 居然是空的,文件和注册表的内容全部都没有定义,可是它确确实实是对系统有所改动,那么在哪里呢?我们试试直接看它的文件吧,用WinRAR打开,我们会发现它不同于其他的 cab 包,一般的 cab 包只有有几个以001、002之类做扩展名的二进制文件,而这个包则有所不同,它只有一个 _setup.xml 文件,这个文件用来定义一些按照某种对注册表修改的行为,看看它的内容吧:
<?xml version="1.0" encoding="utf-8" ?>
<wap-provisioningdoc>
<!--
=========================================================
Privileged Certificates
=========================================================
-->
<characteristic type="CertificateStore">
<characteristic type="Privileged Execution Trust Authorities">
<!--
SDK Failsafe Priv Root -->
<characteristic type="1c28a327d2dc579d241f2f83e98c1ef8ffbf1e82">
<parm name="EncodedCertificate" value="..." />
</characteristic>
<!--
SDK Priv App Root -->
<characteristic type="d4fb8924cfba6c9c67360e7d6512ffde99d2d283">
<parm name="EncodedCertificate" value="..."/>
</characteristic>
</characteristic>
</characteristic>
<!--
Microsoft Visual Studio Signing Authority -->
<characteristic type="CertificateStore">
<characteristic type="Privileged Execution Trust Authorities">
<characteristic type="884B8CDDB6FF1A3D2FF4BC09EC45E2AE2CCB244C">
<parm name="EncodedCertificate" value="..."/>
</characteristic>
</characteristic>
</characteristic>
<!--
=========================================================
Unprivileged Certificates
=========================================================
-->
<characteristic type="CertificateStore">
<characteristic type="Unprivileged Execution Trust Authorities">
<!--
SDK Unpriv App Root -->
<characteristic type="472a80336e261f2f420f8f78b5121383559ad4e3">
<parm name="EncodedCertificate" value="..."/>
</characteristic>
</characteristic>
</characteristic>
<!-- Microsoft Visual Studio Signing Authority unprivileged cert -->
<characteristic type="CertificateStore">
<characteristic type="Unprivileged Execution Trust Authorities">
<characteristic type="11489FB3827BE46623CA7329C0BA85AB1F810A19">
<parm name="EncodedCertificate" value="..."/>
</characteristic>
</characteristic>
</characteristic>
<!--
=========================================================
SPC Store
=========================================================
-->
<characteristic type="CertificateStore">
<characteristic type="SPC">
<!--
All PRIV Certs must have role = 222 -->
<!--
SDK Failsafe Priv Root -->
<characteristic type="1c28a327d2dc579d241f2f83e98c1ef8ffbf1e82">
<parm name="EncodedCertificate" value="..." />
<parm name="Role" value="222" />
</characteristic>
<!--
SDK Priv App Root -->
<characteristic type="d4fb8924cfba6c9c67360e7d6512ffde99d2d283">
<parm name="EncodedCertificate" value="..."/>
<parm name="Role" value="222" />
</characteristic>
<!--
All UNPRIV Certs must have role = 16 -->
<!--
SDK Unpriv App Root -->
<characteristic type="472a80336e261f2f420f8f78b5121383559ad4e3">
<parm name="EncodedCertificate" value="..."/>
<parm name="Role" value="16" />
</characteristic>
</characteristic>
</characteristic>
</wap-provisioningdoc>
我们所关心的只有 Privileged Execution Trust Authorities 里的内容,对比一下我们会发现在注册表里存放的证书都是 blob=hex:..... 之类,它们的值都是一些16进制值,而这里所存放的值则是一些莫名奇妙的文本,其实它们是经过 MIME 编码的,没错,就是我们 email 的那种编码,而 type 的值则是我们的项目名,这样就很简单了,先在 ppc 端安装 SDKCert,然后用注册表编辑器吧 [HKEY_LOCAL_MACHINECommSecuritySystemCertificatesPrivileged Execution Trust Authorities] 下面对应我们的 type 值的内容导出来就可以了,下面是我导出的结果:
[HKEY_LOCAL_MACHINECommSecuritySystemCertificatesPrivileged Execution Trust AuthoritiesCertificates1C28A327D2DC579D241F2F83E98C1EF8FFBF1E82]
"Blob"=hex:03,00,00,00,01,00,00,00,14,00,00,00,1c,28,a3,27,d2,dc,57,9d,24,1f,2f,83,e9,8c,1e,f8,ff,bf,1e,82,20,00,00,00,01,00,00,00,83,04,00,00,30,82,04,7f,30,82,03,6b,a0,03,02,01,02,02,10,4d,00,b4,e3,45,00,de,92,45,e0,66,55,99,62,e4,6f,30,09,06,05,2b,0e,03,02,1d,05,00,30,81,90,31,81,8d,30,81,8a,06,03,55,04,03,1e,81,82,00,54,00,45,00,53,00,54,00,20,00,55,00,53,00,45,00,20,00,4f,00,4e,00,4c,00,59,00,20,20,13,00,46,00,61,00,69,00,6c,00,73,00,61,00,66,00,65,00,20,00,43,00,6f,00,6e,00,66,00,69,00,67,00,75,00,72,00,61,00,74,00,69,00,6f,00,6e,00,20,00,52,00,6f,00,6f,00,74,00,20,00,66,00,6f,00,72,00,20,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,4d,00,6f,00,62,00,69,00,6c,00,65,00,20,00,53,00,44,00,4b,30,1e,17,0d,30,34,31,31,30,38,32,33,30,30,35,33,5a,17,0d,30,39,31,32,33,31,30,38,30,30,30,30,5a,30,81,90,31,81,8d,30,81,8a,06,03,55,04,03,1e,81,82,00,54,00,45,00,53,00,54,00,20,00,55,00,53,00,45,00,20,00,4f,00,4e,00,4c,00,59,00,20,20,13,00,46,00,61,00,69,00,6c,00,73,00,61,00,66,00,65,00,20,00,43,00,6f,00,6e,00,66,00,69,00,67,00,75,00,72,00,61,00,74,00,69,00,6f,00,6e,00,20,00,52,00,6f,00,6f,00,74,00,20,00,66,00,6f,00,72,00,20,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,4d,00,6f,00,62,00,69,00,6c,00,65,00,20,00,53,00,44,00,4b,30,82,01,22,30,0d,06,09,2a,86,48,86,f7,0d,01,01,01,05,00,03,82,01,0f,00,30,82,01,0a,02,82,01,01,00,ca,fa,5c,04,f6,63,ae,3e,38,41,0a,66,e0,90,a4,e6,fd,ba,96,f2,cb,74,10,9b,98,95,ed,f0,2d,17,d9,29,0f,23,af,6a,14,e5,dc,60,d4,20,19,85,38,57,75,96,4b,14,52,07,c1,ff,0a,bd,a4,03,46,cc,78,39,c3,04,77,c0,99,17,5b,4a,00,cb,be,c9,ed,e2,ae,c1,21,cf,02,bc,aa,41,da,58,cd,92,31,22,3c,63,2b,ae,0a,53,99,30,1c,d0,38,07,b6,67,d9,e2,2b,2b,b0,cc,d9,99,db,81,23,8f,12,cc,b0,02,77,1f,fa,c5,01,54,c8,54,b0,0b,c5,fd,f8,bd,5e,3c,e7,9b,d7,73,37,5e,06,be,a9,bf,53,02,5e,2d,20,59,79,c1,ac,5b,7b,e1,1f,03,58,46,46,b6,b8,fc,d2,7a,c5,5f,71,29,06,58,15,9b,de,24,f1,d8,a0,eb,54,b9,0b,e9,d6,87,df,85,de,90,a9,49,85,84,f3,27,34,01,5c,82,01,6b,68,c0,36,bb,4a,0e,10,db,dd,99,c1,30,b6,70,c4,56,93,4d,b9,2c,0c,9e,99,e8,11,00,e3,cd,dd,36,aa,c2,15,bd,cb,5e,33,98,e8,4a,d0,91,a9,66,ae,eb,24,88,40,f3,c7,49,02,03,01,00,01,a3,81,da,30,81,d7,30,0d,06,03,55,1d,0a,04,06,30,04,03,02,07,80,30,81,c5,06,03,55,1d,01,04,81,bd,30,81,ba,80,10,c8,c1,71,1f,6d,77,76,3d,cb,72,9d,67,fe,d8,49,ac,a1,81,93,30,81,90,31,81,8d,30,81,8a,06,03,55,04,03,1e,81,82,00,54,00,45,00,53,00,54,00,20,00,55,00,53,00,45,00,20,00,4f,00,4e,00,4c,00,59,00,20,20,13,00,46,00,61,00,69,00,6c,00,73,00,61,00,66,00,65,00,20,00,43,00,6f,00,6e,00,66,00,69,00,67,00,75,00,72,00,61,00,74,00,69,00,6f,00,6e,00,20,00,52,00,6f,00,6f,00,74,00,20,00,66,00,6f,00,72,00,20,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,4d,00,6f,00,62,00,69,00,6c,00,65,00,20,00,53,00,44,00,4b,82,10,4d,00,b4,e3,45,00,de,92,45,e0,66,55,99,62,e4,6f,30,09,06,05,2b,0e,03,02,1d,05,00,03,82,01,01,00,b3,6c,de,4c,64,69,f1,e1,04,75,32,7a,f4,00,42,3d,0d,8b,41,b5,51,ac,7a,ba,60,8f,c9,ca,f6,35,72,91,2c,fc,78,82,2d,f4,57,36,b7,18,9e,00,68,7b,a5,90,3d,5f,cc,a8,46,5c,ce,e7,40,0a,4a,bc,71,1c,1d,91,9d,df,cf,6d,41,0c,b6,61,cd,34,56,23,d2,e3,f6,2e,07,58,2d,77,9d,f0,d3,73,5b,85,55,e8,38,d0,e8,77,43,7e,a2,c0,d8,3a,e9,ed,09,e2,63,0e,93,30,8c,40,aa,db,53,c8,44,f1,97,42,cf,e6,60,30,47,19,37,a4,0c,89,d4,16,ed,8a,6d,52,94,32,52,59,ed,40,c6,45,e7,3a,dd,67,13,38,ee,e9,9d,fb,0a,77,db,6b,4e,97,b5,ca,35,2a,26,81,f0,b9,2e,d1,d5,54,ad,57,80,f9,18,a2,29,a6,bf,74,96,4e,5a,3c,0e,9a,00,63,28,81,db,df,da,94,f4,5d,8f,ba,60,87,e0,f7,7f,21,55,91,52,fc,e0,55,de,1c,2d,bd,ab,f2,52,77,8d,79,ee,1a,cf,5d,29,21,67,9a,80,18,a1,14,5c,c4,b9,b1,ba,93,9a,53,9a,5e,63,91,8c,6b,a2,bf,04,02,68,46,de,21
[HKEY_LOCAL_MACHINECommSecuritySystemCertificatesPrivileged Execution Trust AuthoritiesCertificatesD4FB8924CFBA6C9C67360E7D6512FFDE99D2D283]
"Blob"=hex:19,00,00,00,01,00,00,00,10,00,00,00,8b,aa,6b,8c,39,c0,e4,b0,c1,96,6b,0d,22,b7,0b,85,04,00,00,00,01,00,00,00,10,00,00,00,95,1c,44,fc,10,9a,b0,6a,eb,bb,35,37,fe,d6,8b,06,03,00,00,00,01,00,00,00,14,00,00,00,d4,fb,89,24,cf,ba,6c,9c,67,36,0e,7d,65,12,ff,de,99,d2,d2,83,14,00,00,00,01,00,00,00,14,00,00,00,af,3e,7b,8b,dd,22,ef,28,87,be,e8,3e,67,b2,29,1e,64,62,76,77,20,00,00,00,01,00,00,00,a4,03,00,00,30,82,03,a0,30,82,02,8c,a0,03,02,01,02,02,10,f2,0c,b6,e5,5c,93,35,ac,4a,4d,8f,81,90,80,17,b1,30,09,06,05,2b,0e,03,02,1d,05,00,30,48,31,46,30,44,06,03,55,04,03,13,3d,54,45,53,54,20,55,53,45,20,4f,4e,4c,59,20,2d,20,53,61,6d,70,6c,65,20,50,72,69,76,69,6c,65,67,65,64,20,52,6f,6f,74,20,66,6f,72,20,57,69,6e,64,6f,77,73,20,4d,6f,62,69,6c,65,20,53,44,4b,30,1e,17,0d,30,34,31,31,30,35,30,30,30,36,34,32,5a,17,0d,30,39,31,32,33,31,30,38,30,30,30,30,5a,30,48,31,46,30,44,06,03,55,04,03,13,3d,54,45,53,54,20,55,53,45,20,4f,4e,4c,59,20,2d,20,53,61,6d,70,6c,65,20,50,72,69,76,69,6c,65,67,65,64,20,52,6f,6f,74,20,66,6f,72,20,57,69,6e,64,6f,77,73,20,4d,6f,62,69,6c,65,20,53,44,4b,30,82,01,22,30,0d,06,09,2a,86,48,86,f7,0d,01,01,01,05,00,03,82,01,0f,00,30,82,01,0a,02,82,01,01,00,c9,34,4f,83,0d,c3,07,0c,ed,46,5b,44,b0,cc,0f,39,b2,51,23,f3,4c,c1,cc,ff,ed,fd,35,1e,5b,87,a5,0c,7e,2d,ca,91,d7,47,4b,66,fc,0e,5f,75,06,a6,b3,99,7a,86,d2,45,89,3d,f4,e6,b4,c6,21,6e,5d,75,5f,f9,70,28,13,27,1d,6f,58,63,b8,53,bf,2f,ba,36,7b,fc,5f,a9,7e,85,2c,10,95,b6,5e,fd,7a,45,d4,6e,3f,b0,c8,42,99,64,10,5f,b0,55,28,41,f4,23,d1,08,3b,b1,e4,a9,0f,e6,16,8d,02,7b,70,ba,cc,2f,23,0d,64,7a,c1,60,45,ff,27,cf,aa,3d,1e,4f,09,3e,f3,3b,4a,a5,7e,63,a3,bf,20,42,75,bd,71,dc,5c,42,65,9a,d2,54,dd,53,24,37,66,db,ee,a0,50,31,1f,f7,d9,d9,1c,4f,f5,e4,0d,6e,3b,05,96,45,bd,7a,f8,c9,f6,06,4f,20,bd,e9,fc,95,f9,50,d6,87,1c,fb,f0,17,85,37,e3,2a,a3,71,02,97,fc,30,f1,12,8e,47,1f,e7,e4,4a,64,b9,67,63,1d,2c,81,39,91,ec,ec,fb,64,f3,b8,a3,1e,e2,83,36,8f,27,ad,d0,7e,19,6e,7c,d8,4c,78,6d,a9,c5,02,03,01,00,01,a3,81,8d,30,81,8a,30,0d,06,03,55,1d,0a,04,06,30,04,03,02,07,80,30,79,06,03,55,1d,01,04,72,30,70,80,10,55,cd,f5,d5,f3,4e,94,62,60,d1,6d,ac,be,32,fb,98,a1,4a,30,48,31,46,30,44,06,03,55,04,03,13,3d,54,45,53,54,20,55,53,45,20,4f,4e,4c,59,20,2d,20,53,61,6d,70,6c,65,20,50,72,69,76,69,6c,65,67,65,64,20,52,6f,6f,74,20,66,6f,72,20,57,69,6e,64,6f,77,73,20,4d,6f,62,69,6c,65,20,53,44,4b,82,10,f2,0c,b6,e5,5c,93,35,ac,4a,4d,8f,81,90,80,17,b1,30,09,06,05,2b,0e,03,02,1d,05,00,03,82,01,01,00,2e,77,ab,dc,56,01,d9,5b,c8,84,2c,00,92,b9,3a,b3,2a,32,67,b5,70,0d,c4,1f,e0,33,61,8f,c4,d1,2e,c1,2b,cb,16,73,9a,d1,4a,8b,4e,72,32,10,3f,eb,8a,ee,93,13,bc,1c,c2,a6,1a,29,a8,9b,85,e4,dd,91,27,c6,43,9b,a0,e4,20,71,f8,81,6b,66,08,82,98,80,b6,14,28,8a,23,15,e3,5c,1e,e7,16,0a,b8,6c,53,aa,8b,6f,f7,8e,8e,0d,bf,32,71,8f,c5,ab,30,9a,fc,e5,ac,ab,6c,c8,3b,66,51,e7,01,fc,fe,c5,c7,62,9a,f7,e1,7c,c2,a8,c0,e9,87,94,9d,7d,3f,43,16,6c,5b,21,e4,af,02,a6,3a,c3,b6,1f,fd,b4,15,2d,8c,cc,ce,1f,64,8c,94,3a,be,9e,31,ab,e3,83,70,d7,ef,42,56,24,b8,34,0a,44,03,f2,39,c7,c6,27,92,85,d3,85,da,87,86,85,bc,e8,06,34,37,1f,80,b6,b2,df,d4,80,08,7f,40,dd,77,fa,95,81,01,e3,b5,76,6b,dd,fa,bc,de,2e,02,35,bf,a4,cf,37,26,a6,de,77,4a,25,fb,53,00,fd,5f,c4,d1,5f,0d,f3,71,1b,a5,b3,98,23,fb,bc,0d,12,50,b1
当时偷懒就只导出了这两个,好像已经够用了,呵呵
在我们的 default.rgu 里加入这两段,然后编译成 hv 文件覆盖已有的 default.hv,这样我们的证书就加好了
2)签名并加入文件
加好数字证书,我们剩下的工作就非常简单了,以梅花p51为例:
首先用 WinCE CAB Manager 打开梅花p51的 cab 安装包,查看注册表项目,我们发现梅花对注册表的修改只有 HKCR 下面的内容,选定 HKCR,在文件菜单中选择导出,然后把导出文件的内容复制到我们的 default.rgu 里(上面提到过HKCR 和 HKLM 存放在 default.hv 而 HKCU 存放在 user.hv),注意检查一下新添加的内容,因为有的程序注册表信息会引用的某些文件,而这些文件的路径会在注册表中指定,例如梅花p51中 InprocServer32 会指定文件在 %CE2%PlumSIP4PlumSIP.dll,其中的%CE2%是无法被系统所识别的,它在安装的时候会被替换为系统所在的文件夹,即 Windows,所以这里我们必须修改为 %CWindowsPlumSIP4PlumSIP.dll,在注册表里的文件路径中 都必须被 来代替,ok,现在重新编译成 hv 文件,覆盖default.hv。

注册表修改好了就该加入文件了,把文件项目里的所有文件提取到 dump 文件夹下,按照前面将的,如果要将梅花设置成默认输入法则必须对它进行数字签名,我们的签名对象是 dll 和 exe 文件,对于梅花来讲,只有 PlumSIP.dll:
运行 signcode,第一步选择我们的目标文件 PlumSIP.dll,然后下一步,第二步选择签名方式,选择 Custom,第三步选择数字证书,单击 Select from file,找到我们的 SDKSamplePrivDeveloper.spc 文件,然后是选择 Private Key,单击 Browse,找到我们的 SDKSamplePrivDeveloper.pvk 文件,一直点下一步,直到提示签名成功。
ok,现在已经完成大半了,不过有的程序可能会限制安装的目录,比如梅花p51就限定在windows下的plumsip4这样的文件夹下,并且程序本身也有一定的文件夹结构,这个从 WinCE CAB Manager 可以看到,选中文件后,在右侧会有文件的路径等信息,前面讲过,%CE2%即 Windows,整理一下:
ch.ini WindowsPlumSIP4
ch.plum WindowsPlumSIP4
index.ini WindowsPlumSIP4user
PlumSIP.dll WindowsPlumSIP4
PlumSIPhelp.htm Windows
sp.ini WindowsPlumSIP4
记得前面讲的么?系统的文件夹结构都是指定在 initflashfiles.dat 文件中,用 ultra editor 打开 initflashfiles.dat,这是一个隐藏的系统文件,所以修改之前要去掉系统、只读、隐藏三个属性,同时注意,它和 default.rgu 一样,必须是 unicode 并且是 dos 换行符的,它的内容很简单,稍微看一下就直到它的写法了,按照上面整理的路径,加入如下几行:
Directory("WindowsPlumSIP4"):-File("ch.ini","Windowsch.ini")
Directory("WindowsPlumSIP4"):-File("ch.plum","Windowsch.plum")
Directory("WindowsPlumSIP4user"):-File("index.ini","Windowsindex.ini")
Directory("WindowsPlumSIP4"):-File("PlumSIP.dll","WindowsPlumSIP.dll")
Directory("WindowsPlumSIP4"):-File("sp.ini","Windowssp.ini")
Directory用来指定文件夹,而file所对应的是文件名以及文件存在的真是路径,plumsiphelp.htm存放在windows下,所以不需要指定。
OK,现在梅花p51已经加入我们的系统了,重建我们的rom,然后刷机看看结果吧
六、后
大概就是这么多了,时间比较仓促,可能整理的比较混乱,有什么不清楚的地方还请大家多多包含,有什么问题的话尽可以找我讨论,联系我可以加我 MSN:linghua.zhang@msn.com ,不过回复最快的是在我的 blog 里留言 http://blog.waynezhang.com
忘了工具的下载地址:romkitchen.rar
wayne zhang
2006.9.24
http://www.waynezhang.com
请问怎么替换字体?比如英文字体!
我倒出注册表,为什么只有这几句话,没有所有注册表文件.
是不是default.hv 不是注册表文件,会不会是另外一个文件.
usage: RGUComp.exe [-b | -o ] [-nologo]
no paramaters: build default.hv and user.hv
-b : generate boot.hv
-o : output hive file contents to stdout
-nologo : do not display copyright information
请问如何将微软拼音输入法完整地从中文版rom提取出来呢?
我讨厌外挂的输入法。。。
To Henry:
这个是你的命令不正确,检查一下参数和 default.hv 的路径;目前所有的rom都是这两个文件,不会是其他文件
To Natas:
坛子里我已经写出来那三个输入法的添加方法
希望能用上正德的输入法,老大再出手一次吧,制作一个所有人都要使用的标准rom吧,支持中文,加正德的输入法。完美了
请帮我提出正德的输入法文件,只相信你
不必了,正德的手写是mboxchs而已
不能载入呀?,mboxchs.dll的简体手写
我加完微软拼音输入发,在屏幕里头输入发有这个输入发,当我调出来后,虚拟屏幕上也都有键盘,但是输入文字全是英文,这是为什么,会不是跟注册表没设好.
屏幕上可能要选一下,默认有时候是英文,选到拼音,如果还不行就有可能是注册表的问题,也有可能是文件缺失
学完了,谢一声,工具放一个合集在BLOG里就好了
学完了,受益非浅
也跟着试作了一遍, 对ROM解码编码什么的都没有什么问题
只是在修改注册表的时候,操作到将rgu文件转换回hv文件时老是出错
大致是这个样子:
C:XXXX>rgucomp -b
Microsoft (R) RGUComp Version 1.0.000
Registry file processor and hive builder.
Copyright (C) 2004 Microsoft Corporation All Rights Reserved.
built: Nov 19 2004 15:17:13
importing registry file \".boot.rgu\"...
Failed to parse HKEY_CLASSES_ROOTwmlcfile!!!
InitRegistry FAILED in file \".boot.rgu\" within a few lines of line 363.
BuildBootHive: (RGUComp) !ERROR failed importing \".boot.rgu\"
wmain: (RGUComp) !ERROR failed building BOOT hive
试过很多次,也换过不同的ROM版本中的注册表
错误位置不完全相同,但形式基本上一样
为了测试,我只将原始文件转换成RGU文件后,手工加入REGEDIT4文件头,格式转换为U-DOS
另存后再转回去也老是出错
想请教一下这是什么原因引起的?
谢谢!
这个是你的rgu文件语法问题,仔细检查以下363行左右的内容,看看有没有引号不成对之类的问题,rgucomp对含有中文的hv文件转换时中文内容会丢失,造成这种问题,要手工修正
謝謝你的教學,
我有些問題想請教一下 , 我改了 D900 的 WM6 Rom ,可惜刷回後只停在首個 splash screen , 很快便自動關機了 ..
我改 rom 的過程 :
1. HTC64 Extended ROM Tool , decode rom
2. prepare_imgfs.exe nk.fat -nosplit
3. viewimgfs imgfs_raw_data.bin
4. BuildImgfs
5. set _FLATRELEASEDIR=.
6. rgucomp -o dumpdefault.hv -nologo > default.rgu
7. rgucomp -o dumpuser.hv -nologo > user.hv
之後, 我加入了 wince.nls 及字體到 dump/
及用ultraedit加入了 regkey 到default.rgu , user.hv , 已加入 \"REGEDIT4\" 在第一行 , 再加入Shortcut到initflashfiles.dat.
之後到 Repack :
1. copy default.rgu boot.rgu
2. set _FLATRELEASEDIR=.
3. rgucomp -b
4. attrib -s -r -h dumpdefault.hv
5. copy boot.hv dumpdefault.hv
6. attrib -s -r -h dumpuser.hv
7. copy user.hv dumpuser.hv
8. BuildImgfs
9. make_imgfs nk.fat -nosplit
10. use HTC64 Extended ROM Tool encode again . and flash .
請問我的步驟有出錯嗎 ? 謝謝 !!!!
修改注册表的问题已经解决!
谢谢!
再多问一句,在原ROM中加入文件后,怎么判断ROM容量是不是已经超出?
我试过几次,刷机后重启动时都是白屏,怀疑是加入的文件太多太大?
加入太多文件的话在build的时候就会报错
你的步骤基本没什么大问题,user.hv你没有改动是把,看看每一步的提示,如果没有出错的话是没什么问题的
至于死在开机画面就有很多原因了,比如启动的文件没有数字签名,默认输入法没有签名或者调用不成功等等,都会down掉
已经成功了,谢谢!
謝謝回復 , 我有改動過user.hv
基本上我只加入了 wince.nls 及 fonts 及一個 Shortcut ..
謝謝..
成功了 , user.hv 問題 , 沒有 rgucomp -b , 謝謝提醒 !
請問一下 , 如果檔案太大 , 有沒有方法可以解決 ? 我看過有些 rom, 輸入法加雅黑字體也可以做到, 可是我只用 cestar 加 unifonts (9mb) 都好像超出了 , 我發現當BuildImgfs 時, 成功做好的話最後會有些句子 , 不成功時都沒有 .
請問有沒有方法呢 ? 謝謝 !!!
成不成功当然要看程序的输出结果了
至于别人加入雅黑的同时当然为了空间删除了一些文件,也可以用upx之类的软件对可执行的exe文件做压缩,这样可以节省出一些空间来放入你想要的东西
wayne你好!
还得请教你一些问题,望不吝赐教:
我正在基于一款英文版的WM5 (AKU 3.5) 在做简体中文的汉化,目前已经完成了中文核心及大部分MUI界面的汉化,原英文版中的一些无用的输入法及小软件等也已经删除干净,也集成进去了一些软件,如CELEDIAL等,目前生成的系统基本还算稳定
现在在作进一步修正时遇到了问题,是关于数字签名的,我想把汉王笔(07年1月版)和梅花5输入法集成到系统中,在网上能够找到的教程中就您的这篇关于数字签名的内容讲得比较详细,但按步骤操作到对EXE和DLL文件作数字签名时,刚指定要签名的文件后,总是弹出"不能数字签名指定的文件"的警告框,我检查了,文件的只读属性已经取消,不知道这种情况应该怎么办?我这里基本上每个文件都遇到这样的问题,您估计是怎么回事?
另外,集成CELEDIAL是我从别人其他版本ROM中提取的已签名文件,所以可以正常进行
但也有例外,从正式简体中文版ROM中提取的手写输入法等文件,我检查了肯定是经过数字签名的,但我集成到系统中后重启白屏,这种情况我需要对该文件重新进行签名吗?
多谢指教!
一般情况下原始的dll和exe文件都是可以数字签名的,仔细检查一下操作步骤吧
输入法数字签名你可以点右键选择属性看下,不放心的话自己再签名一下也无妨
启动白屏也不一定是数字签名的问题,确认你的输入法注册表完整并且文件没有缺失,可以正常调用,再次,不是所有的输入法都可以设置成默认输入法,即使在签名之后,例如海鹰
希望对你有点用处
hi, wayne!
我在buildimgfs之后,发现imgfs_raw_data.bin的时间没有变化。程序已经正常结束了。不知道你这里是不是也是同样的情况。
时间没变化,说明文件没有被重建,我按照步骤一直执行到刷完机器,发现果然刷的是没有被修改的ROM。非常想请教你,我遇到的问题是怎么回事?
谢谢!
To jamflying:
imgfs_raw_data.bin的时间在正常操作的情况下也是不会变的,至于rom没有经过修改可能是其他原因引起的,建议你再检查一下 :)
WAYNE大大,如果想把英文rom汉化成中文的,怎么才能把开始菜单由start menu指向\"开始\"菜单 呢?
修改mui或者dll的资源,具体那个文件不记得了
Hello Wayne,
I dont see replacing a module with a file is working, not normally
We have no way to creat a module
Do you have any idea how to relocate a module instead of replacing it by a file?
Regards
Jessie
[quote comment=\"986\"]Hello Wayne,
I dont see replacing a module with a file is working, not normally
We have no way to creat a module
Do you have any idea how to relocate a module instead of replacing it by a file?
Regards
Jessie[/quote]
I\'m sorry to say that I do not know any way to create a module...
高手你好,我想请问下关于gwes.exe文件的数字签名问题,我用recmod把gwes.exe模块弄成了文件,并在文件加入了数字签名,但开机还是白屏,是不是注册表还要加相应的签名啊?怎么加啊?请指教,谢谢!