ReBaseImage功能用于更改Win32映像的加载地址,从而减少DLL所需的加载时间。
BOOL ReBaseImage(
IN LPSTR【CurrentImageName】, | |
IN LPSTR【SymbolPath】, | |
IN BOOL【fReBase】, | |
IN BOOL【fRebaseSysfileOk】, | |
IN BOOL【fGoingDown】, | |
IN DWORD【CheckImageSize】, | |
OUT LPDWORD【OldImageSize】, | |
OUT LPDWORD【OldImageBase】, | |
OUT LPDWORD【NewImageSize】, | |
IN OUT LPDWORD【NewImageBase】, | |
IN DWORD【TimeStamp】 | |
); |
参数
【CurrentImageName】
重新编号的文件名。
【SymbolPath】
找到相应符号文件的路径。
【fReBase】
如果该值为TRUE,则图像被重新标记。
【fRebaseSysfileOk】
只有当该值为TRUE时,系统映像才能重新生成。系统映像是具有0x80000000或更高的首选加载地址的映像。
【fGoingDown】
如果图像应该重新定位在给定基础之下,则此值为TRUE。
【CheckImageSize】
图像可以增长的最大尺寸,如果没有限制,则为零。
【OldImageSize】
rebase操作前的原始图像大小。
【OldImageBase】
原始图像基础在rebase操作之前。
【NewImageSize】
rebase操作后的新图像大小。
【NewImageBase】
rebase操作后的新图像基础。
【TimeStamp】
图像的新时间戳。使用C运行时(CRT)功能时间来检索兼容的时间戳值。该值必须以1970年1月1日午夜(00:00:00)之后所经过的秒数表示,根据系统时钟,通用协调时间。
返回值
如果函数成功,返回值为TRUE。
如果函数失败,则返回值为FALSE。要检索扩展错误信息,请调用GetLastError.
备注
ReBaseImage函数更改Win32映像的所需加载地址。此操作涉及读取整个映像并更新所有修补程序,调试信息,校验和和时间戳【】值。此函数的目的是减少DLL所需的加载时间。如果应用程序可以依赖于在所需加载地址上加载的DLL,则系统加载程序不必重新定位映像。图像被简单地加载到应用程序的虚拟地址空间中,并且调用DLL的初始化例程(如果存在)。
一个行为良好的应用程序使其所有DLL都被重新引导,因此它们都落在虚拟地址空间的唯一范围内。Microsoft发布应用程序应该使用它们的DLL的地址范围。通过使用此地址范围,ReBaseImage函数和应用程序DLL列表,可以为每个DLL分配唯一的基址。此过程可以是构建过程的一部分或应用程序的最终发布过程的一部分。