返回

Windows 64 位中 System32 和 SysWOW64 的区别:DLL 分布有玄机?

windows

Windows 64 位中的 System32 和 SysWOW64:DLL 的逻辑分布

简介

在 Windows 64 位操作系统中,System32 和 SysWOW64 文件夹存放着不同的动态链接库 (DLL)。起初,这种文件归属似乎令人费解,因为 32 位 DLL 被放置在 SysWOW64 中,而 64 位 DLL 却位于 System32 中。让我们深入探讨一下这种安排背后的原因。

历史渊源

SysWOW64 文件夹的诞生可以追溯到 Windows XP 64 位版本,其目的是保持向后兼容性。在早期 64 位操作系统中,32 位应用程序在 64 位环境下运行时可能会遇到兼容性问题。为了解决这个问题,微软创建了 SysWOW64,作为一个 32 位程序的虚拟化环境。

文件重定向

为了在 64 位系统上平滑运行 32 位应用程序,Windows 使用了一种称为文件重定向的技术。当 32 位应用程序试图访问 System32 中的文件时,系统会将其重定向到 SysWOW64 中的对应文件。这样一来,32 位程序就能在不受 64 位架构影响的情况下正常运行。

dllhost.exe 的作用

dllhost.exe 是一个托管进程,负责加载和运行 32 位 DLL。当 32 位程序需要使用 DLL 时,dllhost.exe 会被启动并加载所需的 DLL。这确保了 32 位应用程序可以在 SysWOW64 环境中平稳运行。

路径优先级

在文件搜索路径中,SysWOW64 优先级高于 System32。这意味着,当系统需要加载 DLL 时,它首先会在 SysWOW64 中查找,然后再到 System32 中寻找。这就是为什么 32 位 DLL 被放置在 SysWOW64 中的原因。

面向 64 位的 System32

System32 文件夹主要用于存储 64 位 DLL 和应用程序。它只会被 64 位应用程序直接访问,不受文件重定向的影响。这是 64 位 DLL 被放置在 System32 中的原因。

结论

System32 和 SysWOW64 文件夹中的 DLL 归属并非混乱无序,而是基于历史渊源、文件重定向和路径优先级等因素精心设计的。这种安排确保了 32 位和 64 位应用程序在 64 位 Windows 系统中都能平稳运行,保持了向后兼容性。

常见问题解答

  1. 为什么 32 位 DLL 放在 SysWOW64 中?
    为了在 64 位系统上保持向后兼容性,SysWOW64 作为 32 位程序的虚拟化环境。32 位 DLL 被放置在 SysWOW64 中,以使 32 位程序不受 64 位架构影响而正常运行。

  2. dllhost.exe 是什么?
    dllhost.exe 是一个托管进程,负责加载和运行 32 位 DLL。当 32 位程序需要使用 DLL 时,dllhost.exe 会被启动并加载所需的 DLL。

  3. SysWOW64 和 System32 的路径优先级是怎么样的?
    在文件搜索路径中,SysWOW64 的优先级高于 System32。这意味着,当系统需要加载 DLL 时,它首先会在 SysWOW64 中查找,然后再到 System32 中寻找。

  4. 为什么 System32 主要用于存储 64 位 DLL 和应用程序?
    System32 文件夹只会被 64 位应用程序直接访问,不受文件重定向的影响。因此,System32 主要用于存储 64 位 DLL 和应用程序。

  5. 这种 DLL 分布安排有什么好处?
    这种 DLL 分布安排的好处在于,它确保了 32 位和 64 位应用程序在 64 位 Windows 系统中都能平稳运行,保持了向后兼容性。