明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

讓自己編寫的DLL加載到Slot1

[摘要]將自己編寫的DLL包含到內(nèi)核當(dāng)中并不是難事,但是這并不意味著你的DLL能夠加載到Slot 1。可能細(xì)心的你已經(jīng)發(fā)現(xiàn),當(dāng)你用應(yīng)用程序加載你自己手工包含到內(nèi)核中的DLL時(shí),這個(gè)DLL一定是加載到調(diào)用進(jìn)程的地址空間中,而不是系統(tǒng)DLL的特有的地址空間Slot1,即使你在project.bib文件中加了文...
  將自己編寫的DLL包含到內(nèi)核當(dāng)中并不是難事,但是這并不意味著你的DLL能夠加載到Slot 1。可能細(xì)心的你已經(jīng)發(fā)現(xiàn),當(dāng)你用應(yīng)用程序加載你自己手工包含到內(nèi)核中的DLL時(shí),這個(gè)DLL一定是加載到調(diào)用進(jìn)程的地址空間中,而不是系統(tǒng)DLL的特有的地址空間Slot1,即使你在project.bib文件中加了文件屬性NK或者S。也許你不會(huì)介意,認(rèn)為只要能運(yùn)行就OK。但是如果DLL加載到Slot 1,那么可用的進(jìn)程地址空間就節(jié)省了。這對(duì)于本來(lái)就擁擠的進(jìn)程地址空間來(lái)說(shuō)是個(gè)好事。我早就注意這個(gè)問(wèn)題了,可是最近才在MSDN的Knowledge Base中發(fā)現(xiàn)一篇文章,介紹如何將DLL加載到Slot 1。

  只要符合下面兩個(gè)條件,DLL就可以加載到Slot 1:

  1、這個(gè)DLL包含在*.bib文件的MODULES中,且不能具有壓縮屬性。

  2、在內(nèi)核編譯期間,一定要存在一個(gè)和DLL同名的.rel文件,且處于同一個(gè)目錄下。

  對(duì)于第一個(gè)條件,很容易實(shí)現(xiàn),在PB中包含的模塊默認(rèn)就是不壓縮的。如果你不會(huì)加入DLL到.bib中,可以參考我以前寫的文章。對(duì)于第二個(gè)條件,也容易實(shí)現(xiàn),只要在編譯前在鏈接選項(xiàng)中加入一個(gè)選項(xiàng)和修改一個(gè)選項(xiàng)即可。如果是EVC,在“l(fā)ink”-“project options”中找到“/incremental”,改為“/incremental:no”,如果原來(lái)是就不用改了。接著添加一個(gè)選項(xiàng)“/savebaserelocations:filename.rel”,其中filename指的是你編譯的DLL的主文件名。比如我要編譯的DLL為abc.dll,那么在此添加“/savebaserelocations:abc.rel”。編譯后就能找到這個(gè)文件。記住一定要把這個(gè)文件和DLL放在同一個(gè)目錄下,這樣PB才能找到這個(gè)DLL對(duì)應(yīng)的.rel文件。至于.rel文件的內(nèi)容,用記事本就能查看,也能看的懂。

  到此這篇文章的內(nèi)容就講完了。另外我遇到一個(gè)問(wèn)題,想麻煩所有正從事CE開發(fā)的網(wǎng)友,問(wèn)題如下:

  Windows CE允許PB開發(fā)者創(chuàng)建一個(gè)可信任的環(huán)境。其中有一種機(jī)制:在定制的內(nèi)核啟動(dòng)后,只允許加密過(guò)的EXE、DLL運(yùn)行,而非加密的EXE、DLL運(yùn)行會(huì)失敗。簡(jiǎn)略的說(shuō)明這種機(jī)制原理,就是利用內(nèi)核在加載EXE、DLL之前,先運(yùn)行驗(yàn)證函數(shù)來(lái)驗(yàn)證EXE、DLL是否具有數(shù)字簽名,并且簽名是否合法。如果合法就可以運(yùn)行了,不合法就不加載執(zhí)行。驗(yàn)證函數(shù)能夠訪問(wèn)一個(gè)全局Public Key,在EXE、DLL中包含Private Key。其中PB工具“signfile.exe”用于將數(shù)字簽名附加到符合PE格式的EXE、DLL上。

  這種機(jī)制正是我需要的,我想它也是很多PB開發(fā)者非常感興趣的?墒俏也榭戳藥椭臋n,卡在了最后一個(gè)環(huán)節(jié)“signfile.exe”上。需要了解加密的基本知識(shí),而幫助文檔在加密方面講的不細(xì)致,我又不了解,所以在此請(qǐng)了解這方面的網(wǎng)友指教,大家可以在CE的幫助文檔中搜索標(biāo)題為“signfile.exe”的文章,如果您了解,希望能夠發(fā)郵件賜教,本人不勝感激。