15 сент. 2010 г.

RegEnumValue


Функция RegEnumValue перечисляет значения в указанном открытом ключе реестра. Функция копирует одно имя значения и блок данных по индексу при каждом вызове.
LONG RegEnumValue(
    HKEY hKey,  // дескриптор запрашиваемого ключа 
    DWORD dwIndex,  // индекс запрашиваемого значения 
    LPTSTR lpValueName, // адрес буфера для имени значения 
    LPDWORD lpcbValueName, // адрес переменной с  размером буфера для имени значения
    LPDWORD lpReserved, // зарезервировано
    LPDWORD lpType,  // адрес переменной с типом данных 
    LPBYTE lpData,  // адрес буфера для данных значения 
    LPDWORD lpcbData  // адрес переменной с  размером буфера для данных
   );
Параметры:
hKeyИдентифицирует открытый в текущий момент ключ или один из следующих предопределенных значений дескрипторов:

HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG
dwIndexУказывает индекс затребованного значения. Его значение должно быть нулевым для первого вызова функции RegEnumValue и инкрементироваться для последующих вызовов.

Поскольку значения не упорядочены, любой новое значение будет иметь произвольный индекс. Это означает, что функция может возвращать значения в любом порядке.
lpValueNameАдрес буфера, в который возвращается имя значения, включая и завершающий нулевой символ.
lpcbValueNameУказывает размер, в символах, буфера на который адресуется параметр lpValueName. Этот размер должен учитывать и нулевой символ – признак завершения строки.

Когда функция возвращается, переменная, на которую указывает lpcbValueName, содержит количество символов, записанных в буфер. Возвращенное число не учитывает нулевой символ завершения строки.
lpReservedЗарезервировано. Должно быть NULL.
lpTypeАдрес переменной, в которую возвращается код типа значения. Этот код может быть одним из следующих значний:

Значение:
Описание:
REG_BINARYДвоичные данные в любой форме.
REG_DWORD32-ух битное число.
REG_DWORD_LITTLE_ENDIAN32-ух битное число в формате little-endian (такое как и REG_DWORD). В формате little-endian, наиболее важный байт слова – это байт старешего порядка.
REG_DWORD_BIG_ENDIAN32-ух битное число в формате big-endian. В формате big-endian, наиболее важный байт слова – это байт младшего порядка.
REG_EXPAND_SZНульзаканчивающаяся строка, которая содержит непредвиденные символы для переменных окружения (например, "%PATH%"). Это может быть строка в виде Unicode или ANSI, в зависимости от того, используете вы функции Unicode или функции ANSI.
REG_LINKСимволическая ссылка в Unicode.
REG_MULTI_SZМассив нульзаканчивающихся строк, заканчивающийся двумя нулевыми символами.
REG_NONEНеопределенный тип значения.
REG_RESOURCE_LISTСписок ресурса драйвера устройства.
REG_SZНульзаканчивающаяся строка. Это может быть строка в виде Unicode или ANSI, в зависимости от того, используете вы функции Unicode или функции ANSI.


Параметр lpType может быть NULL, если тип значения не требуется.
lpDataАдрес буфера, в который возвращаются данные значения. Этот параметр может быть NULL, если данные значения не требуется.
lpcbDataАдрес переменной, которая задает размер, в байтах, буфера, на который ссылается параметр lpData. Когда функция возвращается, переменная, на которую ссылается lpcbData, содержит количество байт, записанных в буфер. Этот параметр может быть NULL только тогда, если и lpData равно NULL.

Возвращаемые значения:
Если функция успешна, возвращается значение ERROR_SUCCESS.

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

Приложение может, также, установить индекс на последнее значение при первом вызове функции и затем декрементировать индекс до значения с индексом 0. Для получения индекса последнего значения, используйте RegQueryInfoKey.

Пока приложение использует функцию RegEnumValue, оно не должно вызывать любые другие функции реестра, которые могут изменить запрашиваемые значения.

Ключ, указанный в параметре hKey, должен быть открытым с доступом KEY_QUERY_VALUE. Для открытия ключа используйте функцию RegCreateKeyEx или RegOpenKeyEx.

Для определения максимального размера имени и буферров данных, используйте функцию RegQueryInfoKey.
Смотрите также: