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

Bil*_*eal 2 c++ registry winapi localization visual-c++

考虑以下注册表导出:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries\000000000001]
;...
"ProtocolName"="@%SystemRoot%\\System32\\wshtcpip.dll,-60100"
Run Code Online (Sandbox Code Playgroud)

这里的意图似乎是有人加载有问题的DLL,并使用某种形式的API检索实际名称.但我不知道API是什么:/

我想避免将DLL加载到我的地址空间(并因此调用DLL_PROCESS_ATTACH),如果可能的话; 不能真正信任第三方DLL是值得信赖的.

Dav*_*nan 5

RegLoadMUIString会为你做必要的.但请注意,它是在Vista中引入的,因此如果您需要支持XP则无济于事.

如果要在提取资源时避免运行DLL中的代码,请使用LoadLibraryEx传递LOAD_LIBRARY_AS_IMAGE_RESOURCE | LOAD_LIBRARY_AS_DATAFILE或可能LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE.完成后,您可以调用LoadString提取MUI值.