Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 是否可以通过创建dll并将其放在应用程序旁边来修补kernel32.dll函数?_Windows_Delphi_Dll - Fatal编程技术网

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

Windows 是否可以通过创建dll并将其放在应用程序旁边来修补kernel32.dll函数?,windows,delphi,dll,Windows,Delphi,Dll,我正在检查旧软件的旧修补程序: 补丁的完整描述如下所示: BDE“磁盘空间不足”问题的修补程序。4Gb倍数术语: 无特殊条款名称:Reinaldo Yanez电子邮件:ryaayr@yahoo.com网址: 无摘要:BDE的修补程序“磁盘空间不足”-错误可能导致 当磁盘可用空间接近多个磁盘空间时,在使用BDE时发生 4Gb。描述:这个单元是著名的4Gb BDE错误的补丁。 它是为修复“磁盘空间不足”而构建的—可能发生的错误 当磁盘可用空间接近4Gb的倍数时,使用BDE。 有关更多信息,请参见B

我正在检查旧软件的旧修补程序:

补丁的完整描述如下所示:

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

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

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

包括补丁的源代码。如果你用另一个 编程语言,即非Delphi,预编译DLL 还包括FIX4GBug.dll。如果你能编译包含的 单位,则不需要分发DLL

产品:Delphi 4-7修复比赛:无上传:25-Feb-04 10:03:08 上午最后更新日期2004年3月22日下午6:44:49

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

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

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

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


您需要从进程内钩住getDiskFreeSpaceAPI函数。提供的源代码将实现这一点。或者,如果通过调用LoadLibrary将其加载到进程中,我怀疑提供的DLL也会这样做

也就是说,我应该更新我的应用程序exe文件吗?但是,为什么补丁的作者提供这个dll作为补丁exe文件的替代品,并为不是用Delphi编写的应用程序提供这个dll呢?很难100%确定。它不导出任何函数。我们只能想象,当您将它加载到进程中时,它会安装API钩子。当加载到其DllEntryPoint函数中时,Fix4GBug.dll会修补kernel32.GetDiskFreeSpaceA,这是正确的。仅仅部署DLL是不够的,应用程序必须在运行时将Fix4GBug.DLL加载到内存中。FixBDE4GbBug.pas用于Delphi应用程序,不需要FIX4GBug.dll。FIX4GBug.dll是为不能使用FixBDE4GbBug.pas的非Delphi应用程序提供的