2008年(909)
分类:
2008-05-06 22:16:27
将自己编写的DLL包含到内核当中并不是难事,但是这并不意味着你的DLL能够加载到Slot
1。可能细心的你已经发现,当你用应用程序加载你自己手工包含到内核中的DLL时,这个DLL一定是加载到调用进程的地址空间中,而不是系统DLL的特有的地址空间Slot
1,即使你在project.bib文件中加了文件属性NK或者S。也许你不会介意,认为只要能运行就OK。但是如果DLL加载到Slot
1,那么可用的进程地址空间就节省了。这对于本来就拥挤的进程地址空间来说是个好事。我早就注意这个问题了,可是最近才在MSDN的Knowledge
Base中发现一篇文章,介绍如何将DLL加载到Slot 1。
只要符合下面两个条件,DLL就可以加载到Slot 1:
对于第一个条件,很容易实现,在PB中包含的模块默认就是不压缩的。如果你不会加入DLL到.bib中,可以参考我以前写的文章。对于第二个条件,也容易实现,只要在编译前在链接选项中加入一个选项和修改一个选项即可。如果是EVC,在"link"-"project
options"中找到"/incremental",改为"/incremental:no",如果原来是就不用改了。接着添加一个选项"/savebaserelocations:filename.rel",其中filename指的是你编译的DLL的主文件名。比如我要编译的DLL为abc.dll,那么在此添加"/savebaserelocations:abc.rel"。编译后就能找到这个文件。记住一定要把这个文件和DLL放在同一个目录下,这样PB才能找到这个DLL对应的.rel文件。至于.rel文件的内容,用记事本就能查看,也能看的懂。
到此这篇文章的内容就讲完了。另外我遇到一个问题,想麻烦所有正从事CE开发的网友,问题如下:
Windows CE允许PB开发者创建一个可信任的环境。其中有一种机制:在定制的内核启动后,只允许加密过的EXE、DLL运行,而非加密的EXE、DLL运行会失败。简略的说明这种机制原理,就是利用内核在加载EXE、DLL之前,先运行验证函数来验证EXE、DLL是否具有数字签名,并且签名是否合法。如果合法就可以运行了,不合法就不加载执行。验证函数能够访问一个全局Public
Key,在EXE、DLL中包含Private Key。其中PB工具"signfile.exe"用于将数字签名附加到符合PE格式的EXE、DLL上。
这种机制正是我需要的,我想它也是很多PB开发者非常感兴趣的。可是我查看了帮助文档,卡在了最后一个环节"signfile.exe"上。需要了解加密的基本知识,而帮助文档在加密方面讲的不细致,我又不了解,所以在此请了解这方面的网友指教,大家可以在CE的帮助文档中搜索标题为"signfile.exe"的文章,如果您了解,希望能够发邮件赐教,本人不胜感激。
写作时间:2004-10-28
未经本文作者同意,不准擅自转载本篇文章。联系作者请邮至windowsce@tom.com或fllsoft@sina.com