win32 API SearchPath失败

时间:2013-11-12 19:01:42

标签: windows winapi visual-c++ win32-process

win32 API SearchPath API无法找到“telnet.exe”二进制路径,即使它存在于system32中。

但是当我搜索notepad.exe时,使用相同的代码返回文件路径。这里让我感到困惑的是notepad.exe和telnet.exe都在同一个目录中,即C:\ windows \ system32。

这是我写的代码

char path[MAX_PATH] = {0};
LPSTR* ptr = NULL;

DWORD dwRet = SearchPathA(NULL, "telnet.exe",
    NULL, MAX_PATH, (LPSTR)path, ptr);

这将始终返回0并且GetLastError为2(找不到文件)

知道这里发生了什么吗?

我在x64机器上使用Windows 2008 R2企业版

谢谢&问候 苏尼

1 个答案:

答案 0 :(得分:4)

它不起作用,因为你的应用程序是32位并受File System Redirector的影响。您的应用程序没有查看C:\Windows\System32,而是被重定向到C:\Windows\SysWow64

notepad.exe同时存在于System32SysWow64,但telnet.exe仅存在于System32中。因此,当应用程序在搜索路径时找不到它。

您可以通过调用Wow64DisasbleWow64FsRedirection为您的应用程序禁用此行为。但请注意文档链接中的警告,表明只应暂时禁用此警告,然后重新启用。