如何判断返回的是哪个实际的dll(x86vx64)?

2024-06-26 04:36:24 发布

您现在位置:Python中文网/ 问答频道 /正文

让我们关注一个dll: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。在

有什么好的Python魔法能让这一切发生吗?我似乎看不到我可以移植的其他语言。基于我的用例,我提出了一些破解方法,但它们只是这些。希望有人能找到一个简单的解决方案,在这种情况下也能奏效。在


Tags: 文件方法路径进程windows体系结构编程方式
1条回答
网友
1楼 · 发布于 2024-06-26 04:36:24
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字节。如果是8字节,那么可以假设Windows使用的是64位版本的dll。在

相关问题 更多 >