Как прочитать локализованное имя из реестра? - PullRequest
2 голосов
/ 17 февраля 2012

Рассмотрим следующий экспорт реестра:

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"

Намерение здесь заключается в том, чтобы кто-то загрузил DLL, о которой идет речь, и использовал некоторую форму API для получения действительного имени.Но я не знаю, что это за API: /

Я бы хотел избежать загрузки DLL в мое адресное пространство (и, таким образом, вызвать DLL_PROCESS_ATTACH), если это возможно;не могу доверять сторонним DLL, чтобы быть заслуживающими доверия.

Ответы [ 2 ]

5 голосов
/ 17 февраля 2012

RegLoadMUIString сделает необходимое за вас. Однако обратите внимание, что он был представлен в Vista, поэтому он не поможет, если вам потребуется поддержка XP.

Если вы хотите избежать запуска кода в DLL во время извлечения ресурсов, используйте LoadLibraryEx, передавая LOAD_LIBRARY_AS_IMAGE_RESOURCE | LOAD_LIBRARY_AS_DATAFILE или, возможно, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE. После того, как вы это сделали, вы можете позвонить LoadString, чтобы извлечь значение MUI.

1 голос
/ 17 февраля 2012

Это поможет:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...