如何从注册表中读取本地化名称

How does one read a localized name from the registry?

本文关键字:本地化 读取 注册表      更新时间:2023-10-16

考虑以下注册表导出:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesWinSock2ParametersProtocol_Catalog9Catalog_Entries00000000001]
;...
"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_DATAFILELoadLibraryEx,或者可能使用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上加载语言资源。