我正在查看旧修补程序中的旧软件:http://cc.embarcadero.com/item/21475
对该修补程序的完整描述如下:
BDE“磁盘空间不足”问题的修补程序。(4Gb倍数术语:无特殊术语名称: Reinaldo电子邮件: ryaayr@yahoo.com网址:无摘要: BDE的修补程序“磁盘空间不足”)--当磁盘空闲空间接近4Gb时,使用BDE时可能发生错误。描述:此单元为著名的4Gb BDE Bug补丁。它的构建是为了修复“磁盘空间不足”--当磁盘空闲空间接近4Gb的倍数时,使用BDE时可能会出现错误。有关更多信息,请参见质量中心的BDE report# 7089。 BDE错误的原因显然是idapi32.dll在计算空闲磁盘空间时的错误。the使用由kernel32.dll导出的名为GetDiskFreeSpaceA的api函数。 解决方案是在kernel32.dll中为当前进程“修补”GetDiskFreeSpaceA,对该函数的每次调用都被重定向到一个新例程(NewGetDiskFreeSpaceA)。 该修补程序的源代码包括在内。如果使用另一种编程语言(即不使用Delphi),则还包括预编译DLL (FIX4GBug.dll)。(如果可以编译包含的单元,则不需要分发DLL) 产品:德尔福(4-7)修复比赛:无上传: 25-Feb-04 10:03:08 AM最后更新22-3月-04 6:44:49下午
我想知道:如果MyApplication.exe或bdeidpi32.dll调用kernel32.dll函数GetDiskFreeSpaceA,那么如何将调用重定向到kernerl32.dll/GetDiskFreeSpaceA到FIX4GBug.dll/GetDiskFreeSpaceA,只需将FIX4GBug.dll放在MyApplication.exe旁边或idapi32.dll旁边?
也就是说,除了应用程序将包含相同功能(同名和相同签名)的dll简单地放置到本地dll中,而不是位于Windows系统目录中的内核32.dll之外,应用程序是否将该应用程序推送到使用函数?
发布于 2017-10-27 10:51:07
除了应用程序将包含相同函数(相同名称和相同签名)的dll简单地放置在本地dll中,而不是位于Windows系统目录中的内核32.dll之外,应用程序是否将该应用程序推送到使用函数?
不,这还不够。您的可执行文件没有理由加载该DLL。
您需要将GetDiskFreeSpaceA API函数从您的流程中挂起。所提供的源代码就能做到这一点。或者,如果您通过调用LoadLibrary将DLL加载到进程中,则我怀疑所提供的DLL也会这样做。
https://stackoverflow.com/questions/46973001
复制相似问题