Windows Win32 32位进程加载64位内核32.dll

Windows Win32 32位进程加载64位内核32.dll,windows,winapi,dll,32bit-64bit,Windows,Winapi,Dll,32bit 64bit,我发现32位Win32控制台应用程序正在一台运行Windows Server 2012 R2标准的特定计算机上加载64位版本的kernel32.dll 与一个简单的HelloWorld应用程序一起使用,如下所示: 它在其他机器上正确加载32位内核32 PATH的值似乎不相同,因此至少在不同的机器上以完全相同的顺序包含相关路径 根据Microsoft提供的信息,DLL的搜索顺序为: 当前进程的可执行模块所在的目录 当前目录 Windows系统目录。GetSystemDirectory函数检索此

我发现32位Win32控制台应用程序正在一台运行Windows Server 2012 R2标准的特定计算机上加载64位版本的kernel32.dll

与一个简单的HelloWorld应用程序一起使用,如下所示:

它在其他机器上正确加载32位内核32

PATH
的值似乎不相同,因此至少在不同的机器上以完全相同的顺序包含相关路径

根据Microsoft提供的信息,DLL的搜索顺序为:

  • 当前进程的可执行模块所在的目录
  • 当前目录
  • Windows系统目录。
    GetSystemDirectory
    函数检索此目录的路径
  • Windows目录。
    GetWindowsDirectory
    函数检索此目录的路径
  • PATH
    环境变量中列出的目录
  • 我猜想在这台特定的机器上,
    GetSystemDirectory
    返回到
    Windows/system32
    的路径,而不是
    Windows/SysWOW64
    ,或者32位进程从
    system32
    SysWOW64
    的映射工作不正常,但这些只是合格的猜测


    知道是什么导致了这种行为吗?

    依赖项Walker错误地报告了依赖项。它的静态分析有时会混淆32位和64位模块。通常,当您针对32位目标可执行文件运行64位版本的Dependency Walker时,会出现这种情况,反之亦然


    请放心,您的32位程序正在加载32位版本的kernel32。

    这是Dependency Walker唯一的错误,仅此而已。32位应用程序从不通过静态导入加载64位版本的kernel32.dll。路径/GetSystemDirectory-在这里根本不相关,因为始终存在
    \KnownDlls32\kernel32.dll
    节。它将被用于依赖项Walker上次可靠工作的时间是在Windows Vista上。准备好在任何以Windows 7开始的操作系统上看到Dependency Walker提供的混淆/误导性信息。诊断DLL问题的一个更好的方法是。尴尬。你说得对。:-)我会尽快接受答案。