是否可以通过创建DLL并将其放在应用程序旁边来修补kernel32.dll函数?

时间:2017-10-27 10:30:48

标签: windows delphi dll

我正在检查旧软​​件的旧补丁: http://cc.embarcadero.com/item/21475

补丁的完整描述如下:

  

针对BDE的补丁“磁盘空间不足”问题。 (4Gb倍数术语:   无特殊条款名称:Reinaldo Yanez电子邮件:ryaayr@yahoo.com网址:   无摘要:修补程序BDE'磁盘空间不足' - 错误可以   当磁盘可用空间接近多个时,在使用BDE时发生   4Gb。说明:此单元是着名的4Gb BDE Bug的补丁。   它是用于修复可能发生的“磁盘空间不足”的错误   当磁盘可用空间接近4Gb的倍数时使用BDE。   有关详细信息,请参阅质量中心的BDE报告#7089。

     

BDE中出错的原因显然是idapi32.dll中的一个错误   同时计算可用磁盘空间。 Idapi32.dll正在使用api功能   称为由kernel32.dll导出的GetDiskFreeSpaceA。

     

解决方法是在kernel32.dll中“修补”GetDiskFreeSpaceA   当前进程,每次调用此函数都会重定向到新的   例程(NewGetDiskFreeSpaceA)。

     

包含补丁的源代码。如果你使用另一个   编程语言(即不是Delphi),一种预编译的DLL   (FIX4GBug.dll)也包括在内。 (如果你可以编译包含的   单位,那么你不需要分发DLL)

     

产品:Delphi(4-7)修正比赛:无上传:25-Feb-04 10:03:08   上次更新时间为22-Mar-04 6:44:49 PM

我想知道:如果MyApplication.exe或BDE idapi32.dll正在调用kernel32.dll函数GetDiskFreeSpaceA,那么只需将FIX4GBug.dll放在旁边,就可以将调用重定向到kernerl32.dll / GetDiskFreeSpaceA到FIX4GBug.dll / GetDiskFreeSpaceA MyApplication.exe或idapi32.dll旁边?

即。 dll的简单放置,包含相同的功能(相同的名称和相同的签名),除了应用程序推送此应用程序使用本地DLL中的函数而不是位于Windows系统目录中的kernel32.dll?

1 个答案:

答案 0 :(得分:1)

  

除了应用程序之外,包含相同功能(相同名称和相同签名)的dll的简单放置是否会推动此应用程序使用本地dll中的函数而不是位于Windows系统目录中的kernel32.dll?

不,这还不够。您的可执行文件没有理由加载该DLL。

您需要在流程中挂钩GetDiskFreeSpaceA API函数。提供的源代码将执行此操作。或者,如果您通过调用LoadLibrary将其加载到进程中,我怀疑提供的DLL也会这样做。