# Function Reference

# _WinAPI_RegQueryMultipleValues

Retrieves the type and data for a list of value names associated with an open registry key

#include <WinAPIReg.au3>
_WinAPI_RegQueryMultipleValues ( $hKey, ByRef $aValent, ByRef $pBuffer [, $iStart = 0 [, $iEnd = -1]] )

## Parameters

$hKey | Handle to an open registry key. The key must have been opened with the KEY_QUERY_VALUE access right. This handle is returned by the _WinAPI_RegCreateKey() or _WinAPI_RegOpenKey() function. It can also be one of the following predefined keys : $HKEY_CLASSES_ROOT $HKEY_CURRENT_CONFIG $HKEY_CURRENT_USER $HKEY_LOCAL_MACHINE $HKEY_PERFORMANCE_DATA $HKEY_USERS
$aValent | The 2D array ([valuename1, *, *, *], ... [valuenameN, *, *, *]) that contains a value names to be retrieved. On input, 1, 2, and 3 array elements are not used, but array dimensions should be [n][4], otherwise the function fails. Also, this function fails if any of the specified values do not exist in the specified registry key.
$pBuffer | A pointer to a memory buffer that contains a registry data. Typically, you should not use this buffer directly (see remarks).
$iStart | [optional] The index of array to start querying at.
$iEnd | [optional] The index of array to stop querying at.

## Return Value

Success: | The number of bytes copied to the buffer. The $aValent array will contain the following data: [n][0] - The name of the value (remain unchanged). [n][1] - The size of the data, in bytes. [n][2] - The pointer to the data in buffer pointed to by the $pBuffer parameter. [n][3] - The type of data ($REG_*).
Failure: | Sets the @error flag to non-zero, @extended flag may contain the system error code.

## Remarks

To prevent excessive serialization, the aggregate data returned by the function cannot exceed one megabyte.
When a returned registry data are no longer needed, you must free the allocated memory pointed to by the $pBuffer parameter by calling the _WinAPI_FreeMemory() function.

## Related

_WinAPI_RegCreateKey, _WinAPI_RegOpenKey

## See Also

Search RegQueryMultipleValues in MSDN Library.

## Example

    #include <Debug.au3>
    #include <WinAPIError.au3>
    #include <WinAPIMem.au3>
    #include <WinAPIReg.au3>

    Example()

    Func Example()
        Local $aValent[19][4]

        ; Note that if at least one of the following value names is not found in the specified registry key, the function fails!

        ; HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

        $aValent[0][0] = 'AppData'
        $aValent[1][0] = 'Cache'
        $aValent[2][0] = 'Cookies'
        $aValent[3][0] = 'Desktop'
        $aValent[4][0] = 'Favorites'
        $aValent[5][0] = 'History'
        $aValent[6][0] = 'Local AppData'
        $aValent[7][0] = 'My Music'
        $aValent[8][0] = 'My Pictures'
        $aValent[9][0] = 'My Video'
        $aValent[10][0] = 'NetHood'
        $aValent[11][0] = 'Personal'
        $aValent[12][0] = 'PrintHood'
        $aValent[13][0] = 'Programs'
        $aValent[14][0] = 'Recent'
        $aValent[15][0] = 'SendTo'
        $aValent[16][0] = 'Start Menu'
        $aValent[17][0] = 'Startup'
        $aValent[18][0] = 'Templates'

        _DebugArrayDisplay($aValent, '_WinAPI_RegQueryMultipleValues')

        Local $hKey = _WinAPI_RegOpenKey($HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders', $KEY_QUERY_VALUE)
        If @error Then
            _DebugSetup(Default, True)
            _DebugReport("! RegOpenKey @error =" & @error & @CRLF & @TAB & _WinAPI_GetErrorMessage(@extended) & @CRLF)
            Exit
        EndIf

        Local $pBuffer
        _WinAPI_RegQueryMultipleValues($hKey, $aValent, $pBuffer)
        If @error Then
            _DebugSetup(Default, True)
            _DebugReport("! RegQueryMultipleValues @error =" & @error & @CRLF & @TAB & _WinAPI_GetErrorMessage(@extended) & @CRLF)
            Exit
        EndIf

        _WinAPI_RegCloseKey($hKey)

        _DebugArrayDisplay($aValent, '_WinAPI_RegQueryMultipleValues')

        For $i = 0 To UBound($aValent) - 1
            $aValent[$i][2] = DllStructGetData(DllStructCreate('wchar[' & $aValent[$i][1] & ']', $aValent[$i][2]), 1)
        Next

        _WinAPI_FreeMemory($pBuffer)

        _DebugArrayDisplay($aValent, '_WinAPI_RegQueryMultipleValues')

    EndFunc   ;==>Example