C++ Win2003R2 x64和Win7 x64上文件系统重定向程序的不同行为

C++ Win2003R2 x64和Win7 x64上文件系统重定向程序的不同行为,c++,windows,winapi,64-bit,wow64,C++,Windows,Winapi,64 Bit,Wow64,我有以下使用x86配置编译的最小应用程序来说明我的问题: int _tmain(int argc, _TCHAR* argv[]) { LPVOID oldValue = NULL; BOOL result = ::Wow64DisableWow64FsRedirection(&oldValue); _ASSERTE(result); HMODULE moduleHandle = ::LoadLibrary(L".\\mymodule.dll");

我有以下使用x86配置编译的最小应用程序来说明我的问题:

int _tmain(int argc, _TCHAR* argv[])
{
    LPVOID oldValue = NULL;
    BOOL result = ::Wow64DisableWow64FsRedirection(&oldValue);
    _ASSERTE(result);

    HMODULE moduleHandle = ::LoadLibrary(L".\\mymodule.dll");
    if (moduleHandle != NULL)
    {
        std::wcout << L"Succeeded";
    }
    else
    {
        DWORD errorCode = ::GetLastError();
        std::wcout << L"Failed with error code = " << errorCode;
    }

    return 0;
}
int-tmain(int-argc,_-TCHAR*argv[]
{
LPVOID oldValue=NULL;
BOOL result=::Wow64DisableWow64FsRedirection(&oldValue);
_资产(结果);
hmodulemodulehandle=::LoadLibrary(L“\\mymodule.dll”);
if(moduleHandle!=NULL)
{

std::wcout我猜在Win7上,在调用
Wow64DisableWow64FsRedirection()
之前,iphlapi.dll已经加载到应用程序的内存中。在调用
Wow64DisableWow64FsRedirection()之前,可以调用
GetModuleHandle()
进行检查。雷米的评论听起来很有道理。这是一个很好的例子,说明了为什么不应该调用
Wow64DisableWow64FsRedirection
Wow64DisableWow64FsRedirection
的文档告诉您,DLL加载失败是调用该函数的结果。请注意,上面的代码是一个完整的程序如果这个程序在默认情况下依赖于像iphlpapi.dll这样的特定模块,那会很奇怪,不是吗?我调用了GetModuleHandle,它返回NULL,GetLastError=ERROR\u MOD\u NOT\u FOUND。此外,这个问题来自调试现有软件和好奇心,所以我不能“不调用Wow64DisableWow64FsRedirection”。您是否验证了(不是通过
\u ASSERTE()
而是通过查看实际返回值)Wow64DisableWow64FsRedirection()
在Win7下是否真的成功?将实际结果输出到
std::wcout
。或者Win7比Win2K3更聪明,并且知道在将DLL从系统文件夹加载到32位进程时忽略System32文件夹,这样就可以避免加载64位DLL,这是一个必然的失败。谁知道呢。