Consider the following registry export:

```none
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"

```

The intention here appears to be for someone to load the DLL in question, and use some form of API retrieve the actual name. But I don't know what that API is :/

I'd like to avoid loading the DLL into my address space (and thus call `DLL_PROCESS_ATTACH`) if at all possible; can't really trust third party DLLs to be trustworthy.
['https://Stackoverflow.com/questions/9324563', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/82320/']
[`RegLoadMUIString`](http://msdn.microsoft.com/en-us/library/windows/desktop/ms724890.aspx) will do the necessary for you. Note however, that it was introduced in Vista so won't help if you need to support XP.

If you want to avoid code in the DLL running whilst you extract resources, use [`LoadLibraryEx`](http://msdn.microsoft.com/en-us/library/windows/desktop/ms684179.aspx) passing `LOAD_LIBRARY_AS_IMAGE_RESOURCE | LOAD_LIBRARY_AS_DATAFILE`, or possibly `LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE`. Once you have done that, you can call [`LoadString`](http://msdn.microsoft.com/en-us/library/windows/desktop/ms647486.aspx) to extract the MUI value.
This is going to help:

```
HMODULE hModule = LoadLibrary(_T("wshtcpip.dll")); // LoadLibraryEx is even better
TCHAR pszValue[1024] = { 0 };
INT nResult = LoadString(hModule, 60100, pszValue, _countof(pszValue));

```

`LoadString` will take care of downloading resource from MUI, if needed. LoadString uses thread locale, which you might want to override prior to the call.

Also: [Loading Language Resources](http://msdn.microsoft.com/en-us/library/windows/desktop/dd318708%28v=vs.85%29.aspx) on MSDN.