SHLoadIndirectString (shlwapi)
Last changed: -85.167.57.34

.
Summary
Extracts the string from the specified resource when given an indirect string (a string beginning with the @ symbol). All other strings copy to the output buffer unaltered.

C# Signature:

    [DllImport("shlwapi.dll", BestFitMapping = false, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false, ThrowOnUnmappableChar = true)]
    public static extern int SHLoadIndirectString(string pszSource, StringBuilder pszOutBuf, int cchOutBuf, IntPtr ppvReserved);

VB.NET Signature:

    Public Declare Auto Function SHLoadIndirectString Lib "shlwapi.dll" (ByVal pszSource As String, ByVal pszOutBuf As String, ByVal cchOutBuf As UInteger, ByVal ppvReserved As IntPtr) As UInteger

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Call Environment.ExpandEnvironmentVariables(path) first if you have a string that contains environment variables.

Sample Code:

string resourcePath = "\System32\shell32.dll,-4123";

resourcePath = Environment.ExpandEnvironmentVariables(resourcePath);

StringBuilder outBuff = new StringBuilder();

int result = SHLoadIndirectString(resourcePath, outBuff, -1, IntPtr.Zero);

//SHLoadIndirectString returns S_OK (0) if successful

if(result == 0)

    Console.WriteLine(outBuff.ToString());

Sample Code2:

string sWin8ManifestString = "{C:\Program Files\WindowsApps\Microsoft.Video_6.2.8158.0_x86__8wekyb3d8bbwe\resources.pri?ms-resource://Microsoft.Video/resources/manifestVideoDisplayName}";

StringBuilder outBuff = new StringBuilder(1024);

int result = SHLoadIndirectString(sWin8ManifestString, outBuff, outBuff.Capacity, IntPtr.Zero);

Documentation