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



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

补丁的完整描述如下:

BDE"磁盘空间不足"问题的修补程序。(4Gb倍数术语:无特殊条款名称:Reinaldo Yanez电子邮件:ryaayr@yahoo.com网址:无摘要:BDE"磁盘空间不足"的修补程序-错误可能当磁盘可用空间接近倍数时,在使用BDE时发生4Gb。描述:这个单元是著名的4GbBDE Bug的补丁。它的生成是为了修复"磁盘空间不足"这一可能发生的错误而当磁盘可用空间接近4Gb的倍数时使用BDE。欲了解更多信息,请参阅BDE关于质量中心的7089号报告。

BDE中出现错误的原因可能是idapi32.dll中的错误同时计算可用磁盘空间。Idapi32.dll正在使用api函数名为GetDiskFreeSpaceA,由kernel32.dll导出。

解决方案是在kernel32.dll中为当前进程,对该函数的每次调用都会重定向到一个新的例程(NewGetDiskFreeSpaceA)。

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

产品:Delphi(4-7)修复比赛:无上传时间:2004年2月25日10:03:08AM最后更新时间:2004年3月22日下午6:44:49

我想知道:如果MyApplication.exe或BDE idapi32.dll正在调用kernel32.dll函数GetDiskFreeSpaceA,那么如何通过简单地将FIX4GBG.dll放在MyApplication.exe旁边或idapi32.dll旁边来将对kernerl32.dll/GetDiskFreeSpaceA的调用重定向到FIX4GBg.dll/GetDisk FreeSpaceA?

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

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

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

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

最新更新