RegGetValue (advapi32)
Last changed: -67.185.64.116

.
Summary
Retrieves the type and data for the specified registry value

C# Signature:

        /* Retrieves the type and data for the specified registry value. */
        [DllImport("Advapi32.dll", EntryPoint = "RegGetValueW", CharSet = CharSet.Unicode, SetLastError = true)]
        internal static extern LONG RegGetValue(
        SafeRegistryHandle hkey,
        string lpSubKey,
        string lpValue,
        EnumLib.RFlags dwFlags,
        out EnumLib.RType pdwType,
        IntPtr pvData,
        ref DWORD pcbData);

        /* Retrieves the type and data for the specified registry value. */
        [DllImport("Advapi32.dll", EntryPoint = "RegGetValueW", CharSet = CharSet.Unicode, SetLastError = true)]
        internal static extern LONG RegGetValue(
        EnumLib.HKEY hkey,
        string lpSubKey,
        string lpValue,
        EnumLib.RFlags dwFlags,
        out EnumLib.RType pdwType,
        IntPtr pvData,
        ref DWORD pcbData);

VB Signature:

Declare Function RegGetValue Lib "advapi32.dll" (TODO) As TODO

User-Defined Types:

    /// <summary>
    /// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724884(v=vs.85).aspx
    /// </summary>
    internal enum RFlags
    {
        /// <summary>
        /// Any
        /// </summary>
        Any = 65535,

        /// <summary>
        /// No defined value type.
        /// </summary>
        RegNone = 1,

        /// <summary>
        /// ???
        /// </summary>
        Noexpand = 268435456,

        /// <summary>
        /// Bytes
        /// </summary>
        RegBinary = 8,

        /// <summary>
        /// Int32
        /// </summary>
        Dword = 24,

        /// <summary>
        /// Int32
        /// </summary>
        RegDword = 16,

        /// <summary>
        /// Int64
        /// </summary>
        Qword = 72,

        /// <summary>
        /// Int64
        /// </summary>
        RegQword = 64,

        /// <summary>
        /// A null-terminated string.
        /// This will be either a Unicode or an ANSI string,
        /// depending on whether you use the Unicode or ANSI functions.
        /// </summary>
        RegSz = 2,

        /// <summary>
        /// A sequence of null-terminated strings, terminated by an empty string (\0).
        /// The following is an example:
        /// String1\0String2\0String3\0LastString\0\0
        /// The first \0 terminates the first string, the second to the last \0 terminates the last string,
        /// and the final \0 terminates the sequence. Note that the final terminator must be factored into the length of the string.
        /// </summary>
        RegMultiSz = 32,

        /// <summary>
        /// A null-terminated string that contains unexpanded references to environment variables (for example, "%PATH%").
        /// It will be a Unicode or ANSI string depending on whether you use the Unicode or ANSI functions.
        /// To expand the environment variable references, use the ExpandEnvironmentStrings function.
        /// </summary>
        RegExpandSz = 4,

        RrfZeroonfailure = 536870912
    }

    /// <summary>
    /// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724884(v=vs.85).aspx
    /// </summary>
    internal enum RType
    {
        RegNone= 0,

        RegSz = 1,
        RegExpandSz = 2,
        RegMultiSz = 7,

        RegBinary = 3,
        RegDword = 4,
        RegQword = 11,

        RegQwordLittleEndian = 11,
        RegDwordLittleEndian = 4,
        RegDwordBigEndian = 5,

        RegLink = 6,
        RegResourceList = 8,
        RegFullResourceDescriptor = 9,
        RegResourceRequirementsList = 10,
    }

Notes:

Requires Windows Server 2003 SP1

Tips & Tricks:

Please add some!

Sample Code:

        uint pcbData = 0;
        EnumLib.RType type;
        var pvData = IntPtr.Zero;

        Api.advapi32.RegGetValue(
        EnumLib.HKEY.HKEY_CURRENT_USER,
        @"Software\LG Electronics\LG PC Suite IV\1.0", @"DS_URL",
        EnumLib.RFlags.Any,
        out type, pvData, ref pcbData);

        pvData = pvData.Reallocate(pcbData);
        Api.advapi32.RegGetValue(
        EnumLib.HKEY.HKEY_CURRENT_USER,
        @"Software\LG Electronics\LG PC Suite IV\1.0", @"DS_URL",
        type.ToFlag(),
        out type, pvData, ref pcbData);

        if (type == EnumLib.RType.RegSz)
        Console.WriteLine(pvData.ToUnicodeStr());

Alternative Managed API:

Microsoft.Win32.Registry.GetValue()

Documentation
RegGetValue on MSDN