是否有API调用会显示给定系统上主机文件的位置?

时间:2015-11-06 09:37:05

标签: windows winapi hosts

我的意思是实际使用运行该程序的用户的文件。

或者我必须手动检查可能的路径,如下表所示:https://en.wikipedia.org/wiki/Hosts_%28file%29#Location_in_the_file_system

2 个答案:

答案 0 :(得分:1)

  

是否有API调用会显示给定系统上主机文件的位置?

不,没有这样的API调用。如果要访问它,您需要知道文件的位置。

答案 1 :(得分:1)

您无法使用Windows API调用来查找 hosts 文件所在的目录。但是,如问题中Wikipedia article中所述,该文件位于%SystemRoot%目录的固定子目录中。

您可以检索%SystemRoot%的完全限定路径名(与%WinDir% for NT-based systems相同),通过SHGetKnownFolderPath 调用FOLDERID_Windows KNOWNFOLDERID

以下代码在所有受支持的Windows版本上返回hosts文件的完全限定路径名:

#include <comdef.h>
#include <ShlObj.h>
#include <string>

std::wstring GetHostsPathName() {
    wchar_t* systemRoot;
    _com_util::CheckError( ::SHGetKnownFolderPath( FOLDERID_Windows,
                                                   0x0,
                                                   nullptr,
                                                   &systemRoot ) );
    std::wstring hostsPathName( systemRoot );
    ::CoTaskMemFree( systemRoot );
    systemRoot = nullptr;
    hostsPathName.append( L"\\System32\\drivers\\etc\\hosts" );
    return hostsPathName;
}