Windows Registry – Mysterious @ Character Explained

special characterswindowswindows-registry

When I navigate to "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WMP.PlayCD\Shell\Play" in The Windows Registry, I find one REG_EXPAND_SE named MUIVerb on my Windows 7 system. However in its contents it's carrying "@%windir%\system32\wmploc.dll,-6503"

Now my question is: What does this @ character mean or do? I am an MS-DOS grown up and I haven't seen such a notation before. Should I interprete it as the @ like in an e-mail address? What is the final result. Does it become "C:\%windir%\system32\wmploc.dll,-6503" eventually ?

Best Answer

The registry itself is just a hierarchical data store; notations and meanings depend on the program using the data.

In this case, the MUIVerb value is where Explorer keeps textual descriptions of file actions. For a while they used to be kept in the registry directly, but when various Windows "language packs" were introduced the translatable text was moved to file resources, and descriptions starting with a "@" are interpreted by Explorer as "the text is stored at the following location (numbered 'STRING' resource of a EXE/DLL file)". (It is possible to have several versions of the same resource for different languages. You can use Resource Explorer or similar tools to browse DLL and EXE files.)

One exception to the "registry as data store" rule above. Note that the data type is REG_EXPAND_SZ, not REG_SZ. This means that when Explorer reads the value, it will have certain environment variables expanded in it – Explorer will receive "@C:\WINDOWS\system32\wmploc.dll,-6503" (with the %windir% expanded). That's the only "special" thing that Registry values and data can have.

The rest depends entirely on Explorer – the initial "@" means that Explorer needs to load a library C:\WINDOWS\system32\wmploc.dll, find a string resource -6503 in it, and use its contents as the final text to show to the user.

Related Question