首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何判断返回的是哪个实际的dll (x86与x64)?

如何判断返回的是哪个实际的dll (x86与x64)?
EN

Stack Overflow用户
提问于 2015-09-30 13:24:44
回答 1查看 288关注 0票数 1

让我们关注一个动态链接库: C:\Windows\System32\wbem\wmiutils.dll。为什么?因为我个人在这个文件中发现,Windows根据进程体系结构提供了不同的dll。

有没有办法以编程方式确定文件系统重定向器返回的dll的实际路径?

我知道如果作为x86进程启动,我会得到C:\Windows\SysWOW64\wbem\wmiutils.dll。而且,如果作为x64进程启动,我会得到C:\Windows\System32\wbem\wmiutils.dll。

我需要确定我实际查看的是哪个wmiutils.dll。重定向器使system32\wbem\wmiutils.dll的外观和感觉完全相同,但事实并非如此。如果我使用父路径,我会得到C:\Windows\System32\wbem,即使我可能/可能不在C:\Windows\SysWOW64\wbem。

有没有什么甜蜜的蟒蛇魔法能让这一切发生?我似乎看不到任何来自其他语言的东西可以移植。根据我的用例,我想出了几个技巧,但它们就是这样。希望有人已经找到了像父路径一样简单的解决方案,在这种情况下实际上是可行的。

EN

回答 1

Stack Overflow用户

发布于 2015-09-30 22:04:00

代码语言:javascript
复制
import ctypes, hashlib

k32 = ctypes.windll.kernel32
oldValue = ctypes.c_long(0)
k32.Wow64DisableWow64FsRedirection(ctypes.byref(oldValue)) # Should open 32-bit
with open(r"C:\Windows\System32\wbem\wmiutil.dll", "rb") as f:
    checksum32 = hashlib.md5(f.read()).hexdigest() 

k32.Wow64RevertWow64FsRedirection(oldValue) # Should use what Windows thinks you need
with open(r"C:\Windows\System32\wbem\wmiutil.dll", "rb") as f:
    checksum64 = hashlib.md5(f.read()).hexdigest() 

if (checksum32 != checksum64):
    print("You're running 64bit wmiutil dll")

我没有Windows Python来测试它,但它应该可以根据https://msdn.microsoft.com/en-us/library/windows/desktop/aa365745%28v=vs.85%29.aspx工作。

我认为更简单的方法是做一些测试,比如创建一个结构,看看它是8个字节还是4个字节。然后,您可以假设Windows使用的是64位版本的DLL,如果它是8字节的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32858398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档