Функция SHRegGetValueA (shlwapi.h)
[SHRegGetValue может быть изменено или недоступно в последующих версиях операционной системы или продукта. Вместо нее используйте RegGetValue .]
Извлекает значение реестра.
Синтаксис
LSTATUS SHRegGetValueA(
[in] HKEY hkey,
[in] LPCSTR pszSubKey,
[in] LPCSTR pszValue,
[in] SRRF srrfFlags,
[in, out] DWORD *pdwType,
[out] void *pvData,
[in, out] DWORD *pcbData
);
Параметры
[in] hkey
Тип: HKEY
Дескриптор открытого ключа или любое из следующих предопределенных значений.
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_PERFORMANCE_DATA
HKEY_USERS
[in] pszSubKey
Тип: LPCTSTR
Указатель на строку, завершающуюся null, которая указывает относительный путь от hkey к подразделу, из которого извлекается значение. Этот параметр может иметь значение NULL или пустую строку. В этом случае данные извлекаются из расположения hkey .
[in] pszValue
Тип: LPCTSTR
Указатель на строку, завершающуюся значением NULL, которая содержит имя значения. Этот параметр может иметь значение NULL или пустую строку. В этом случае данные извлекаются из значения по умолчанию.
[in] srrfFlags
Тип: SRRF
Один или несколько флагов SRRF , ограничивающих извлечение данных. Необходимо указать по крайней мере одно значение ограничения типа (SRRF_RT).
[in, out] pdwType
Тип: LPDWORD
Указатель на DWORD , который получает тип данных, хранящихся в полученном значении. При использовании значений по умолчанию входной pdwType является типом значения по умолчанию. Возможные значения см. в разделе Типы данных реестра. Если флаг SRRF_NOEXPAND не задан, REG_EXPAND_SZ типы автоматически разворачиваются и возвращаются как REG_SZ. Если сведения о типе не требуются, этот параметр может иметь значение NULL.
[out] pvData
Тип: LPVOID
Указатель на буфер, который получает данные значения. Этот параметр может иметь значение NULL , если данные не требуются. Например, если вы проверяли только существование значения, данные конкретного значения были бы лишними.
[in, out] pcbData
Тип: LPDWORD
Указатель на DWORD , который в записи содержит размер буфера данных назначения pvData в байтах. Это значение может иметь значение NULL , только если pvData имеет значение NULL. При выходе pcbData указывает на одно из этих значений.
pvData | Возвращаемое значение | pcbData |
---|---|---|
NULL | ERROR_SUCCESS | Размер в байтах, достаточный для хранения данных реестра. Обратите внимание, что это не гарантируется точный размер, а только достаточный размер. |
Отличное от NULL | ERROR_SUCCESS | Точное число байтов, записанных в pvData. |
Отличное от NULL | ERROR_MORE_DATA | Размер в байтах, необходимый для хранения всех данных. Обратите внимание, что это не гарантируется точный размер, а только достаточный размер. |
Возвращаемое значение
Тип: LSTATUS
Возвращает ERROR_SUCCESS в случае успешного выполнения, или ненулевой код ошибки, определенный в Winerror.h, в противном случае. Чтобы получить общее описание ошибки, можно использовать функцию FormatMessage с флагом FORMAT_MESSAGE_FROM_SYSTEM .
Комментарии
SHRegGetValue обеспечивает проверку типов данных, проверку режима загрузки, автоматическое расширение данных REG_EXPAND_SZ и гарантированное завершение REG_SZ, REG_EXPAND_SZ и REG_MULTI_SZ данных с пустым значением.
Ключ, определяемый ключом hkey , должен быть открыт с KEY_QUERY_VALUE доступа по безопасности. Если pszSubKey не имеет значение NULL или пустую строку, этот ключ также должен быть открыт с KEY_QUERY_VALUE доступа по безопасности в текущем контексте вызова.
Если тип данных является REG_SZ, REG_EXPAND_SZ или REG_MULTI_SZ, то все возвращаемые данные включают или учитывают завершение строки со значением NULL. Например, если pvData не равно NULL, данные, возвращаемые в этом буфере, завершаются null. Если pcbData не равно NULL, размер буфера, на который он указывает, включает байты, необходимые для хранения завершающего символа NULL .
Если флаг SRRF_NOEXPAND не установлен, строковые данные типа REG_EXPAND_SZ автоматически разворачиваются перед возвратом. Тип развернутой строки указывается в pdwType как REG_SZ, параметр pcbData указывает на количество байтов, записанных для развернутой строки, а буфер, на который указывает pvData , содержит расширенную версию строки.
Заметки о производительности
Если pszSubKey не имеет значение NULL или пустая строка, этот ключ открывается и закрывается этой функцией при каждом обращении к ней. Если приложение должно получить ряд значений из того же подраздела, вы увидите лучшую производительность, открыв ключ с помощью RegOpenKeyEx перед вызовом SHRegGetValue. Используйте ключ, возвращенный в параметре phkResultregOpenKeyEx , в качестве параметра hkey в этой функции, а для параметра pszSubKey задано значение NULL.Возможность дополнительного вызова реестра для чтения или повторного чтения данных существует, если тип данных REG_EXPAND_SZ и флаг SRRF_NOEXPAND не задан. Следующие условия приводят к такому дополнительному вызову.
- pvData имеет значение NULL, pcbData — не NULL. Хотя данные не извлекаются, реестр должен быть прочитан, чтобы получить строку, и эта строка развернута, чтобы определить необходимый размер буфера данных.
- Значение pvData не равно NULL, но слишком мало для хранения данных. Данные повторно считываются, чтобы получить полную строку, строка разворачивается и определяется общий необходимый размер.
Примечание
Заголовок shlwapi.h определяет SHRegGetValue в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP с пакетом обновления 2 (SP2) [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | shlwapi.h |
Библиотека | Shlwapi.lib |
DLL | Shlwapi.dll (версия 6.0 или более поздняя) |