当前位置:  开发笔记 > 编程语言 > 正文

获取已经加载的DLL的版本(Windows API)

如何解决《获取已经加载的DLL的版本(WindowsAPI)》经验,为你挑选了1个好方法。

好的,在加载之前获取dll的文件版本很容易。即时通讯使用GetFileVersionInfoSize + GetFileVersionInfo + VerQueryValue,它的工作原理就像一个魅力。

但是,如果该dll已经加载怎么办?我知道您可以使用LoadLibrary + IMAGE_DOS_HEADER + IMAGE_NT_HEADERS来检索某些信息,例如函数名称等。我注意到IMAGE_OPTIONAL_HEADER具有不同的版本字段,例如MajorImageVersion和MinorImageVersion等。如果是,则它们与GetFileVersionInfo返回的值不匹配。所以我猜我看错地方了。有任何想法吗?



1> Remy Lebeau..:

加载DLL之后,您可以执行以下操作:

    用于GetModuleHandle()获取DLL的句柄。

    使用该句柄和FindResource()/ LoadResource()/ LockResource()来访问DLL的RT_VERSION资源数据。

    资源数据的副本复制到您分配的内存块中(重要!)。使用SizeofResource()知道有多少字节分配和复制。

    传递该内存块以VerQueryValue()访问其VS_FIXEDFILEINFO结构,该结构包含DLL的版本号。

步骤3很重要,因为VerQueryValue()需要访问可写内存(它依赖于在内存内容中进行的各种修复)。返回的内存指针LockResource()指向只读内存。如果您尝试直接使用资源指针,VerQueryValue()将会崩溃。

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有