如何从注册表中读取本地化名称
How does one read a localized name from the registry?
考虑以下注册表导出:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesWinSock2ParametersProtocol_Catalog9Catalog_Entries 00000000001]
;...
"ProtocolName"="@%SystemRoot%\System32\wshtcpip.dll,-60100"
这里的意图似乎是让某人加载有问题的DLL,并使用某种形式的API检索实际名称。但我不知道API是什么:/
如果可能的话,我希望避免将DLL加载到我的地址空间(从而调用DLL_PROCESS_ATTACH
);不能真正相信第三方DLL是值得信赖的。
RegLoadMUIString
将为您做必要的工作。但是,请注意,它是在Vista中引入的,因此如果您需要支持XP,它不会有帮助。
如果希望在提取资源时避免DLL中的代码运行,请使用传递LOAD_LIBRARY_AS_IMAGE_RESOURCE | LOAD_LIBRARY_AS_DATAFILE
的LoadLibraryEx
,或者可能使用LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE
。完成后,可以调用LoadString
来提取MUI值。
这将有所帮助:
HMODULE hModule = LoadLibrary(_T("wshtcpip.dll")); // LoadLibraryEx is even better
TCHAR pszValue[1024] = { 0 };
INT nResult = LoadString(hModule, 60100, pszValue, _countof(pszValue));
如果需要,LoadString
将负责从MUI下载资源。LoadString使用线程区域设置,您可能希望在调用之前覆盖该区域设置。
另外:在MSDN上加载语言资源。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 正在读取二进制文件(is_open)
- 如何在c++中从文本文件中逐行读取整数
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 独立读取-修改-写入顺序
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如何从注册表中读取本地化名称