16 сент. 2010 г.

RegQueryMultipleValues

Функция RegQueryMultipleValues получает тип и данные для списка имен значений, ассоциированных с открытым ключом реестра.
LONG RegQueryMultipleValues(
    HKEY hKey,  // дескриптор ключа
    PVALENT val_list, // адрес массива со структурами значений
    DWORD num_vals, // размер массива со структурами значений
    LPTSTR lpValueBuf, // адрес буфера для информации значений
    LPDWORD ldwTotsize // адрес размера буфера для информации значений
);
Параметры:

hKey Идентифицирует открытый в текущий момент ключ или один из следующих предопределенных значений дескрипторов:

HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG
val_list Адрес массива из структур VALENT, который описывает один или более вхождений значения. На выходе, член ve_valuename каждой структуры должен содержать адрес имени значения для его получения. Функция завершается с ошибкой, если любой из указанных значений не существует в указанном ключе. При успехе функции, каждый элемент массива содержит информацию для указанного ключа.
num_vals Определяет количество элементов в массиве val_list.
lpValueBuf Адрес буфера. Если функция успешна, буфер содержит данные для каждого значения. Если lpValueBuf равен NULL, функция возвращается с удачей, и ldwTotsize будет содержать требуемый размер буфера в байтах.
ldwTotsize Адрес переменной, которая определяет размер в байтах буфера, на который указывает параметр lpValueBuf. Если функция успешна, ldwTotsize будет содержать количество байт, скопированных в буфер. Если функция завершится с ошибкой, значит буфер слишком мал, и ldwTotsize будет содержать требуемый размер в байтах.
Возвращаемые значения:
Если функция успешна, возвращается значение ERROR_SUCCESS.

Если произошла ошибка, возвращается один из следующих кодов ошибки:

Значение:

Назначение:

ERROR_CANTREAD  

RegQueryMultipleValues не может инициализировать или получить доступ к предоставителю (провайдеру) динамического ключа.

ERROR_MORE_DATA  

Буфер, на который указывает lpValueBuf, был слишком мал. В этом случае, в ldwTotsize возвращается требуемый размер буфера.

ERROR_TRANSFER_TOO_LONG  

Общая длина запрашиваемых данных (размер массива val_list + ldwTotSize) больше, чем лимит системы в один мегабайт.
Возвращаемые значения:
Если функция успешно, возвращается значение ERROR_SUCCESS.

При ошибке, возвращаемое значение – это код ошибки, объявленный в WINERROR.H. Вы можете использовать функцию FormatMessage с флагом FORMAT_MESSAGE_FROM_SYSTEM для получения общего описания ошибки.
Замечания:
Функция RegQueryMultipleValues позволяет приложению получить одно или более значений статического или динамического ключа. Если это статический ключ, система предоставляет все значения в стиле атома. Для предотвращения чрезмерной сериализации, совокупность возвращенных функцией данных не может превышать один мегабайт.

Если целевой ключ – это динамический ключ, предоставитель (провайдер) должен предоставить все значения в стиле атома. Это означает, что провайдер может заполнить буфер синхронно, предоставляя согласующийся вид всех значений в буфер, пока избегается чрезмерная сериализация. Провайдер может предоставить более одного мегабайта данных в течении вызовов этой функции.

RegQueryMultipleValues поддерживает удаленность; тогда параметр hKey, передаваемый функции, может ссылаться на удаленный компьютер.