Системный реестр. Архитектура системного реестра, страница 6

Рисунок 19.7

Пример применения функции RegEnumEx.нет данный ключ, после чего загрузятся подключи расширенного ключа. Результаты выполнения данного примера показаны на рис. 19.7.См. \local-sources\chapl9\19-02.txt

IpcdwName

LPDWORD: Указатель на значение типа DWORD, которое содержит размер буфера IpszName. Система пытается скопировать в этот буфер указанное число символов в имени подключа. В это число должен быть включен 1 байт для нулевого символа, завершающего строку с именем подключа. После вызова содержимое по указанному адресу заменяется числом символов, фактически скопированных в строку IpszName. Следует заметить, что нулевой символ, завершающий данную строку, при этом не учитывается.

IpdwReserved

LPDWORD: Зарезервировано для последующего применения. Для этого параметра должно быть установлено значение NULL.

Ipsz ClassName

LPTSTR: Указатель на буфер, в который поступает имя класса подключа. Количество символов, скопированных в этот буфер, хранится в параметре IpcdwClassName. Если имя класса не запрашивается, тогда значение параметра может быть установлено в NULL.

Ipcdw ClassNamt

? LPDWORD: Указатель на значение типа DWORD, которое содержит длину буфера IpcdwClassName с именем класса подключа. Система пытается скопировать в этот буфер указанное число символов имени класса подключа. В это число должен быть включен 1 байт для нулевого символа, завершающего строку с именем класса подключа. После вызова содержимое по указанному адресу заменяется числом символов, фактически скопированных в строку IpcdwClassName. Следует заметить, что при этом не учитывается пустой символ, завершающий данную строку. Для рассматриваемого параметра может быть установлено значение NULL, если установлено значение NULL параметра IpcdwClassName.

pftLastQaugtd

PFILETIME: Указатель на переменную типа FILETIME, которой присваивается дата и время последней операции записи в данный подключ. Структура типа  FILETIME содержит 64-разрядное значение, которое представляет собой число тактов через каждые 100 не, начиная с 1 января 1601 г.

Возвращаемое значение

LONG: Если следующий подключ найден, тогда возвращается значение ERROR_SUCCESS. А если перечисление окажется неудачным, тогда возвращает код ошибки. Если же возвращается значение ERROR_NO_MORE_ITEMS, это значит, что подключен у данного ключа больше нет.

Включаемыйфайл

winreg.h

См. также

RegEnumValue, RegOpenKeyEx.

Пример

В приведенном ниже примере создается окно с элементом управления древовидным представлением. Когда пользователь выбирает пункт меню Test!, содержимое дерева ключа HKEY_LOCAL_MACHINE в системном реестре перечисляется и размещается в корректном иерархическом порядке в рамках древовидного представления. При этом становится доступной также нить, в которой ожидаются любые изменения в ключе HKEY_LOCAL_MACHINE. Если подобные изменения обнаружены, тогда содержимое древовидного представления обновляется для отражения произошедших изменений. Ради упрощения данного примера все дерево загружается в элемент управления древовидным представлением. В более подходящей реализации рассматриваемого примера обычно перечисляются лишь ключи верхнего уровня до тех пор, пока пользователь не развер-

RegEnumValue                         Windows 98   • Windows 2000

Описание

Функция RegEnumValue перечисляет значения указанного ключа, открытого в системном реестре. Эта функция при каждом вызове копирует наименование одного индексированного значения, а также блок данных для ключа. Для выборки первого значения функция RegEnumValue вызывается из приложения с установленным значением 0 параметра dwValue Index. При последующих вызовах данной функции в приложении осуществляется приращение на 1 значения параметра dwValuelndex. Перечисление завершается в том случае, когда возвращается значение ERROR_NO_MORE_ITEMS.

Синтаксис

LONG RegEnumValue(HKEY hKey, DWORD dwValuelndex, LPTSTR IpszValue, LPDWORD IpcdwValue, LPDWORD IpdwReserved, LPDWORD IpdwType, LPBYTE IpDataBuffer, LPDWORD IpcdwDataBuffer)

Параметрй

hKey

HKEY: Открытый ключ, значения которого перечисляются. Это может быть открытый ключ либо один из предопределенных ключей, приведенных в табл. 19.1.

dwValuelndex

DWORD: Индекс перечисляемого значения. Для перечисления всех значений следует установить значение 0 параметра dwValuelndex перед первым вызовом рассматриваемой функции. Затем потребуется выполнить приращение индекса перед каждым последующим вызовом данной функции.

IpszValue

LPTSTR Указатель на буфер, в который поступает имя указанного выше значения.

Ipcdw Value

LPDWORD: Указатель на значение типа DWORD, определяющее количество запрашиваемых байтов (включая и завершающий строку символ), сохраняемых после возврата из рассматриваемой функции в буфере, на который указывает параметр IpcdwValue. После вызова данной функции этот параметр определяет число фактически сохраненных байтов (кроме завершающего строку символа).

IpdwReserved

LPDWORD: Зарезервировано. Для этого параметра следует установить значение NULL.

IpdwType

LPDWORD: Указатель на значение типа DWORD, которое принимает тип данных, присущий перечисляемому значению. Типы данных, поддерживаемых в Win32, сведены в табл. 19.5. Если тип данных не требуется, тогда в данном поле можно установить значение NULL.

IpDataBuffer

LPBYTE: Указатель на буфер, в который поступает содержимое перечисляемого значения.

IpcdwDataBuffer

LPDWORD: Указатель на значение типа DWORD, которое содержит число байтов в буфере IpDataBuffer. Это может быть пустое значение NULL, если значение параметра IpDataBuffer также равно NULL.

Возвращаемое значение

LONG: Если выполнение функции оказывается успешным, возвращается значение ERROR_SUCCESS. В противном случае возвращается код ошибки. А значение ERROR_NO_MORE_VALUES возвращается в том случае, если значений для данного подключа больше нет.

Включаемыйфайл

winreg.h

См. также Пример

RegEnumKeyEx, RegSetValueEx, RegQueryValue.См. пример применения функции RegEnumKeyEx.

Таблица 19.5 Типы данных системного реестра

Тип данных системного реестра

Описание

REG_BINARY

Двоичные данные в любой форме

REG_DWORD

32-разрядное число в собственном формате данной системы

REG_DWORD_BIG_ENDIAN

32-разрядное число в формате с расположением байтов в обратном порядке. В этом формате старший байт слова следует по порядку после младшего байта.

REG_DWORDJJTTLE_ENDIAN

32-разрядное число в формате с расположением байтов в прямом порядке. В этом формате старший байт слова следует по порядку перед младшим байтом.

REG_EXPAND_SZ

Строка, завершающаяся пустым символом и содержащая нерасширяемые ссылки на переменные окружения (например, %РАТН%). В Windows 95 допускается сохранение подобных строк, однако они автоматически не расширяются

REG_FULL_RESOURCE_DESCRIPTOR

Описание аппаратных средств, содержащихся в списке имеющихся ресурсов

REGJ.INK

Символическая связь с другим ключом

REG_MULTI_SZ

Список незавершенных строк, которые завершаются дополнительным пустым символом

REG_NONE

Неопределенный тип

REG_QWORD

64-разрядное число

REG_aWORDJJTTLE_ENDIAN

64-разрядное число в формате с расположением байтов в прямом порядке. То же, что и REG_QWORD

REG_RESOURCE_LIST

Список ресурсов с драйверами устройств

REG_RESOURCE_REQUIREMENT_LIST

Список требований к ресурсам

REG_SZ

Строка, завершающаяся пустым символом

ReqFlushKey                             Windows 98   • Windows 2000

Описание

Функция RegFlushKey дает системе команду на немедленное выполнение записи на диск указанного ключа, а также всех его подключен и значений. Необходимость в вызове этой операции возникает только в том случае, если в приложении требуется немедленная запись произведенных обновлений. По умолчанию система будет сбрасывать на диск содержимое системного реестра после закрытия каждого ключа и перед собственным закрытием, однако в структуре системного реестра используются оптимизированные буферы, поэтому внесенные изменения могут быть и не записаны немедленно. Тем не менее, чрезмерное использование рассматриваемой функции может оказать отрицательное влияние на производительность системы.

Синтаксис

LONG RegFlushKey(HKEY hKey)

Параметры

hKey

HKEY: Ключ, содержимое которого должно быть сброшено на диск. Это может быть дескриптор открытого ключа либо одного из предопределенных ключей HKEY CLASSES ROOT, HKEY CURRENT USER, HKEYJJSERS или HKEY_LOCAL_MACHINE

Возвращаемое значение

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

Включаемый файл

winreg.h

См. также

RegCloseKey.

Пример

Когда пользователь выбирает в приведенном ниже примере опцию Test!, создается ключ и отображается окно сообщения. После выбора пользователем кнопки ОК в окне сообщения, содержимое нового ключа сбрасывается на диск за счет вызова функции RegFlushKey.

См.    \local-sources\chapl9\19-03 . txt

ReqLoadKey                            Windows 98   • Windows 2000

Описание

Функция    RegLoadKey создает  подключ,   располагаемый   ниже  ключа HKEY_USER или HKEY_LOCAL_MACHINE, содержимое которого загружается из указанного файла раздела в данный подключ. Раздел системного реестра представляет собой совокупность ключей, подключей и значений, сохраняемых в едином файле, а также в файле журнала регистрации с расширением .log. Для создания разделов следует использовать функцию RegSaveKey.

Синтаксис

LONG RegLoadKey (HKEY hKey, LPCTSTR IpszSubKey, LPCTSTR IpszHle)

Параметры

hKey

HKEY: Родительский ключ загружаемого раздела. Это может быть ключ HKEY_USER или HKEY_LOCAL_MACHINE либо значение, возвращаемое функцией RegConnectRegistry (т.е. узел системного реестра, находящегося на другой машине).

IpszSubKey

LPCTSTR: Указатель на строку, которая завершается пустым символом и содержит имя подключа.

IpszFile

LPCTSTR: Указатель на строку, которая завершается нулевым символом и содержит имя файла раздела с данными системного реестра для нового подключа. Следует заметить, что в файловой системе FAT в имени файла может отсутствовать расширение.

Возвращаемое значение

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

Включаемый файл

winreg.h

См. также

RegSaveKey, RegUnLoadKey, RegRestoreKey, RegDeleteKey.

Пример

В приведенном ниже примере создается меню, состоящее из следующих четырех пунктов: Save, Load, Unload и Restore. При выборе пункта Save создаются элементы ключа, которые затем сохраняются в виде раздела. В результате выбора пункта Load раздел загружается из файла. При выборе пункта Unload ключ удаляется, а в результате выбора пункта Restore восстанавливается предыдущее содержимое ключа. (Примечание: функция RegRestoreKey в Windows 9.x не поддерживается.)

См.    \local-sources\chapl9\19-04.txt

RegNotifyChanqeKevValue             Windows 98   ф Windows 2000

Описание

Функция RegNotifyChangeKeyValue указывает момент изменения ключа системного реестра и любых его подключей. Функция RegNotifyChangeKeyValue действует в синхронном либо в асинхронном режиме в зависимости от значения параметра bAsynchronous.

Синтаксис

LONG RegNotifyChangeKeyVaIue(HKEY HKey, BOOL bWatchSubtree, DWORD dwNotifyFilter, HANDLE hE vent, BOOL bAsynchronous)

Параметры

НКеу

HKEY: Текущий открытый ключ либо любое из значений дескрипторов предопределенных ключей, приведенных в табл. 19.1.

bWatchSubtree

BOOL: Для отслеживания за изменениями в ключе или в любых его под-ключах потребуется установить значение TRUE данного параметра, а для сообщения об изменениях в ключе — значение FALSE.

dwNotifyFilter

DWORD: Совокупность признаков, которые управляют порядком выдачи сообщения о конкретных изменениях. При этом может быть указано определенное сочетание значений, перечисленных в табл. 19.6.

h Event

HANDLE: Дескриптор события, которое сигнализирует о том, когда в ключе происходят изменения. Если установлено значение FALSE параметра bAsynchronous, рассматриваемый параметр игнорируется.

BAsynchronous

BOOL: Для выполнения рассматриваемой функции в асинхронном режиме и немедленного возврата из нее для данного параметра следует установить значение TRUE. Когда изменения в ключе происходят в указанном режиме, о них сигнализирует дескриптор события, хранящийся в параметре hEvent. Если же установлено значение FALSE данного параметра, тогда рассматриваемая функция выполняется в синхронном режиме и возврат из нее не происходит до тех пор, пока в системном реестре не произойдет изменение.

Возвращаемое значение

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

Включаемый файл

winreg.h

См. также

RegDeleteKey, RegCreateKey.

Пример

См. пример применения функции RegEnumKeyEx.

Таблица 19.6 Значения параметра dwNotifyFilter функции RegNotifyChangeKeyValue

Значение

Что означает

REG_NOTIFY_CHANGE_ATTRIBUTES

Изменения любых атрибутов, которые происходят в ключе либо в его подключах

REG_NOTIFY_CHANGE_LAST_SET

Изменения, которые произошли после выполнения последней операции записи в ключе либо его подключах

REG_NOTIFY_CHANGE_NAME

Любые изменения, которые произошли в именах ключей, а также в результате создания или удаления наименований ключей

REG_NOTIFY_CHANGE_SECURITY

Изменения в дескрипторе защиты ключа или его подключей

RegOpenCurrentUser                   Windows 98   • Windows 2000

Описание

Функция RegOpenCurrentUser осуществляет выборку дескриптора ключа HKEY_CURRENT_USER для пользователя, права которого заимствует текущая нить. При этом ключ HKEY_CURRENT_USER буферизуется для всех нитей, участвующих в данном процессе. Если процесс заимствует права нескольких пользователей, тогда функция RegOpenCurrentUser разрешает нити доступ к соответствующему ключу.

Синтаксис

LONG RegOpenCurrentUser(REGSAM samDesired, PHKEY phkResult)

Параметры

samDesired

REGSAM: Маска доступа, которая определяет требуемые параметры доступа к ключу. При этом можно использовать определенное сочетание значений из табл. 19.4.

phkResult

PHKEY: Указатель на переменную HKEY, которой присваивается дескриптор открытого ключа. Когда дескриптор окажется уже ненужным, для его закрытия потребуется вызвать функцию RegCloseKey.

Возвращаемое значение

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

Включаемый файл

winreg.h

См. также

RegCloseKey.

RegOpenKeyEx                         Windows 98   • Windows 2000

Описание

Функция RegOpenKeyEx открывает подключ системного реестра с требуемым типом доступа. В отличие от функции RegCreateKeyEx, функция RegOpenKeyEx не создает ключ, если он не существует. Вместо этого она возвращает код ошибки. По завершении работы с данным ключом системного реестра в приложении для его закрытия следует использовать функцию RegCloseKey.

Синтаксис

LONG RegOpenKeyEx(HKEY hKey, LPCTSTR IpszSubKey, DWORD dwReserved, REGSAM samDesired, PHKEY phkResult)

Параметры

hKey

HKEY: Указатель на ключ, который яштяется родительским ключом открываемого подключа. Это может быть любой открытый ключ либо один из предопределенных подключей, перечисленных в табл. 19.1.

IpszSubKey

LPCTSTR: Указатель на строку, завершающуюся пустым символом и содержащую имя открытого подключа.

dwReserved

DWORD: Зарезервировано. Для этого параметра следует установить значение 0.

samDesired

REGSAM: Маска доступа с требуемым уровнем защиты (см. табл. 19.4).

phkResultВозвращаемое значение

PHKEY: Указатель на место хранения дескриптора данного ключа. LONG: Если выполнение функции оказывается успешным, тогда возвращается значение ERROR_SUCCESS. В противном случае возвращается код ошибки.

Включаемый файл

winreg.h

См. также

RegCloseKey.

Пример

См. пример применения функции RegCreateKeyEx

RegOverridePredefKey                 Windows 98   • Windows 2000

Описание

Функция RegOverridePredefKey переопределяет предопределенный ключ системного реестра в соответствии с указанным ключом системного реестра. Эту функцию полезно использовать в программах установки, в которых возникает потребность в переназначении элементов системного реестра, формируемых при регистрации элементов управления ActiveX в другом месте. Это дает программе установки возможность определить, какие именно элементы системного реестра создавались при регистрации элемента управления ActiveX.

Синтаксис

LONG RegOverridePredefKey(HKEY hKey, HKEY hNewKey,)

Параметры

hKey

HKEY: Указатель на один из предопределенных ключей, перечисленных в табл. 19.1.

hNewKey

HKEY: Указатель на предопределенный или открытый в данный момент ключ. При этом ключ hKey переопределяется в соответствии с ключом hNewKey. Переназначение применяется только по отношению к текущему процессу. Если данный параметр принимает значение NULL, рассматриваемая функция восстанавливает используемое по умолчанию назначение ключей.

Возвращаемое значение

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

Включаемый файл

winreg.h

RegQuerylnfoKey                Windows 98   • Windows 2000

Описание

Функция RegQuerylnfoKey возвращает информацию, которая описывает данный ключ системного реестра. Для этого необходимо иметь доступ типа KEY_QUERY_VALUE, который указывается в дескрипторе данного ключа.

Синтаксис

LONG RegQueryInfoKey(HKEY hKey, LPTSTR IpClass, LPDWORD IpdwClass, LPDWORD IpdwReserved, LPDWORD IpdwSubKeys, LPDWORD IpdwMaxSubKey, LPDWORD IpdwMaxClass, LPDWORD IpdwValues, LPDWORD IpdwMaxValueName, LPDWORD IpdwMaxValueData, LPDWORD IpdwSecurityDesc, PFILETIME IpftLastWriteTime)

Параметры

hKey

HKEY: Указатель на ключ, который является родительским ключом открываемого подключа. Это может быть любой открытый ключ либо один из предопределенных ключей, перечисленных в табл. 19.1.

IpClass

LPTSTR: Указатель на буфер, в который поступает имя класса данного ключа.

Ipdw Class

LPDWORD: Указатель на значение типа DWORD, определяющее размер буфера, на который указывает параметр IpClass до вызова данной функции. В этот размер входит и завершающий строку нулевой символ. При возврате из функции значение параметра IpdwClass хранит количество байтов, скопированных в буфер IpClass, При этом завершающий строку нулевой символ в возвращаемое число байтов не входит. Если в буфере оказывается недостаточное количество символов, генерируется ошибка типа ERROR_MORE_DATA, а содержимое параметра   IpdwClass указывает, сколько байтов при этом требуется.

Ipdw Reserved

LPDWORD: Зарезервировано. Для этого параметра следует установить значение NULL.

IpdwSubKeys

LPDWORD: Указатель на значение типа DWORD, которое принимает число подключей для указанного ключа hKey.

IpdwMaxSubKey

LPDWORD: Указатель на значение типа DWORD, которое принимает длину самого длинного имени любого из подключей указанного ключа. В эту длину не входит завершающий строку нулевой символ.

IpdwMaxClass

LPDWORD: Указатель на значение типа DWORD, которое принимает длину самого длинного имени класса любого из подключей указанного ключа. В эту длину не входит завершающий строку нулевой символ.

IpdwValues

LPDWORD: Указатель на значение типа DWORD, которое принимает определенное число значений для указанного ключа.

IpdwMax ValueNameLPDWORD: Указатель на значение типа DWORD, которое принимает количество символов в самом длинном имени любого из значений. В эту длину не входит завершающий строку нулевой символ.

IpdwMax ValueData LPDWORD: Указатель на значение типа DWORD, которое принимает число символов в самом длинном компоненте данных любого значения ключа.

LpdwSecurityDesc LPDWORD: Указатель на значение типа DWORD, которое принимает количество байтов дескриптора защиты ключа.

IpftLast WriteTime PFILETIME: Указатель на структуру FILETIME, которая хранит время последнего видоизменения ключа или любого из его значений. Структу-,             pa FILETIME содержит 64-разрядное значение, которое представляет собой число временных интервалов в 100 не между указанным временем и датой 1 января 1601 г. Определение структуры PFILETIME приведено в описании функции CompareFileTime, рассмотренной в главе 17.

Возвращаемое значение

LONG: Если выполнение функции оказывается успешным, возвращается значение   ERROR_SUCCESS. В противном случае возвращается код ошибки. Если же возвращается значение ERROR_MORE_DATA, необходимо увеличить размер буфера IpClass.

Включаемый файл

winreg.h

См. также

RegEnumKeyEx, RegEnumValue.

Пример

См. пример применения функции RegEnumKeyEx.

RegQueryMultipleValues               Windows 98   • Windows 2000

Описание

Функция RegQueryMultipleValues осуществляет выборку типа данных для списка имен значений, связанных с открытым ключом системного реестра. Эта функция дает приложению возможность осуществить запрос одного или более значений ключа с использованием единственного вызова данной функции. Если ключ является статическим, тогда система предоставляет все его значения. Во избежание чрезмерной сериализации объем возвращаемых данной функцией совокупных данных не должен превышать 1 Мб. Если же целевой ключ является динамическим, тогда источником данных должны быть предоставлены все его значения. Это означает, что источник данных должен заполнять буфер результатов синхронно, обеспечивая при этом согласованное представление всех значений в буфере и тем самым исключая чрезмерную сериализацию. Во время вызова рассматриваемой функции источник данных может предоставить в лучшем случае не более 1 Мб выходных данных. Эта функция поддерживается и в удаленном режиме, а следовательно, требуемый ключ может находиться на удаленном компьютере.

Синтаксис

LONG RegQueryMultipleValues(HKEY hKey, PVALENT val list, DWORD num_vals, LPSTR IpValueBuf, LPDWORD IpdwTotSize)

Параметры

hKey

HKEY: Открытый в настоящий момент ключ или значения дескрипторов любого из предопределенных зарезервированных ключей: HKEY CLASSES ROOT, HKEY CURRENT USER, HKEY_LOCAL_MACHINE или HKEY_USERS.

valjist

PVALENT: Адрес массива структур типа VALENT, в которых описывается один или более элементов выбираемых значений. Во время ввода член ve_valuename каждой структуры должен содержать указатель на имя выбираемого значения. Рассматриваемая функция не может быть выполнена, если любое из указанных значении отсутствует в данном ключе. А при успешном ее выполнении каждый элемент массива содержит информацию об указанном значении. См. также приведенное ниже определение структуры типа VALENT.

num_vals

DWORD: Количество элементов массива val_list.

IpValueBuf

LPSTR: Указатель на буфер, в который поступают данные для каждого значения. Если значение данного параметра установлено в NULL, выполнение рассматриваемой функции завершается успешно и при этом возвращается требуемый размер буфера в байтах, определяемый параметром IpdwTotSize.

IpdwTolSize

LPDWORD: Указатель на значение DWORD, которое определяет размер в байтах буфера, заданного параметром IpValueBuf. Если значение параметра Ip ValueBuf равно NULL, возвращается размер буфера в байтах, который требуется для выборки данных.

Возвращаемое значение

LONG: Если выполнение функции оказывается успешным, тогда возвращается значение ERROR_SUCCESS. В противном случае возвращается значение   ERROR_CANTREAD, если источник данных динамического ключа оказывается недоступным. Если же буфер оказывается слишком мал, тогда возвращается значение ERROR_MORE_DATA В этом случае параметр IpdwTotSize принимает значение требуемого размера либо значение ERROR_TRANSFER_TOO_LONG, если объем запрашиваемых данных  (т.е.  размер,   определяемый  суммой  двух   параметров val_list + IpdwTotSize) превышает предел в 1 Мб.

Включаемый файл

winreg.h

См. также

ReQueryValueEx.

Определение структуры VALENT

typedef struct value_ent {

LPTSTR ve valuename;

DWORD    ve valuelen;

DWORD    ve valueptr;

DWORD    ve type; } VALENT;

Члены структуры

ve_valuename

LPSTR Указатель на строку, завершающуюся нулевым символом и содержащую имя выбираемого значения.

ve_yaluelen

DWORD: Размер  в  байтах данных,   на которые  указывает  параметр ve_valueptr.

ve_valueptr

DWORD: Указатель на данные элемента выбираемого значения. Это указатель на данные значения, возвращаемые в буфере IpValueBuf, заполняемом с помощью функции RegQueryMultipleValues.

ve_type

DWORD: Тип элемента выбираемого значения. Это может быть одно из значений, перечисленных в табл. 19.5.

Пример

В приведенном ниже примере выполняется запрос из системного реестра первых десяти элементов, отмеченных в Windows Explorer. Затем эти элементы размещаются в элементе управления списочным представлением, как только пользователь выбирает пункт меню Test! Все элементы сформированного списка запрашиваются при помощи единственного вызова функции RegQueryMultipleValues.

См.    \local-sources\chapl9\19-05.txt

RegQueryValueEx                      Windows 98   • Windows 2000

Описание

Функция RegQueryValueEx возвращает тип и данные для указанного имени значения, связанного с открытым ключом системного реестра.

Синтаксис

LONG RegQueryValueEx(HKEY hKey, LPSTR IpszValueName, LPDWORD IpdwReserved, LPDWORD IpdwType, LPBYTE IpData, LPDWORD IpdwData)

Параметры

hKey

HKEY: Открытый ключ, который содержит запрашиваемое значение. Это может быть любой открытый ключ либо один из предопределенных ключей, перечисленных в табл. 19.1.

IpszValueName

LPSTR: Указатель на строку, завершающуюся нулевым символом и содержащую имя считываемого значения.

IpdwReserved

LPDWORD: Зарезервировано. Для этого параметра следует установить значение NULL.

IpdwType

LPDWORD: Тип данных, сохраняемых в виде значения. Типы данных, которые могут быть сохранены в виде значений, перечислены в табл. 19.5.

IpData

LPBYTE: Указатель на буфер, в который поступают данные, сохраняемые в виде значения.

IpdwData

LPDWORD: Указатель на переменную типа DWORD, которая содержит количество байтов в буфере IpData. После вызова рассматриваемой функции система устанавливает в этой переменной фактическое количество скопированных байтов.

Возвращаемое значение

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

Включаемый файл

winreg.li

См. также

RegQuerylnfoKey, RegSetValueEx.

Пример

Когда пользователь выбирает в примере опцию Test!, выполняется запрос имени пиктограммы, используемой по умолчанию для отображения файлов формата RTF, из системного реестра и отображение этого имени в окне сообщения.

Си.    \local~sourcas\chapl9\19~06.txt

RegReplaceKey                         Windows 98   • Windows 2000

Описание

Функция RegReplaceKey заменяет файл, в котором хранится ключ и все его подключи, на другой файл, благодаря чему при последующем запуске системы ключ и его подключи получат значения из нового файла. В

Windows 2000 у вызывающего эту функцию процесса должны быть привилегии типа SE'_RESTORE_NAME.

Синтаксис

LONG RegReplaceKey(HKEY hKey, LPCTSTR IpSubKey, LPCTSTR IpNewFile, LPCTSTR IpOldFile)

Параметры

hKey

HKEY: Обозначает открытый в настоящий момент ключ. Это может быть любой открытый ключ либо один из предопределенных ключей, перечисленных в табл. 19.1.

IpSubKey

LPCTSTR Указатель на строку, завершающуюся нулевым символом и содержащую имя ключа, подключи и значения которого заменяются с помощью рассматриваемой функции. Данный ключ должен быть подключом ключа, определяемого параметром hKey. Для данного параметра можно установить значение NULL.

IpNewFile

LPCTSTR Указатель на строку, завершающуюся нулевым символом и содержащую имя файла с зарегистрированной в системном реестре информацией. Как правило, подобный файл создается с помощью функции RegSaveKey. При использовании файловой системы FAT в имени файла может отсутствовать расширение.

IpOMFile

LPCTSTR: Указатель на строку, завершающуюся нулевым символом и содержащую имя файла, в который поступает резервная копия заменяемой информации из системного реестра. При использовании файловой системы FAT в имени файла может отсутствовать расширение.

Возвращаемое значение

LONG: Если выполнение функции оказывается успешным, возвращается значение ERROR_SUCCESS. В противном случае возвращается ненулевой код ошибки, определенный в файле WINERROR.H. Для получения обобщенного описания данного типа ошибки следует воспользоваться функцией FormatMessage с установленным признаком FORMAT_MESSAGE_FROM_SYSTEM.

Включаемый файл

winreg.h

См. также

RegConnectRegistry, RegDeleteKey, RegLoadKey, RegRestoreKey.

RegRestoreKey                          Windows 98   •  Windows 2000

Описание

Функция RegRestoreKey восстанавливает из файла значения ключа и его подключей. Восстановленные значения полностью заменяют в памяти содержимое ключа (в том числе и всех его подключей). Такая замена носит разрушительный характер, в результате чего из всех данных о ключе сохраняется только его имя. Удалению подлежат только те подключи и значения, которые существовали в восстанавливаемом узле, а не в копии соответствующего файла. Эта операция не сможет быть выполнена, если окажется открытым любой подключ данного ключа.

Синтаксис

LONG RegRestoreKey(HKEY hKey, LPCTSTR IpszFile, DWORD dwFlags)

Параметры

hKey

HKEY: Любой открытый ключ либо один из предопределенных ключей, перечисленных в табл. 19.1.

IpszFile

LPCTSTR Указатель на строку, завершающуюся нулевым символом и содержащую имя файла раздела, в котором находятся данные системного

реестра для нового ключа. Указанный файл раздела создается с использованием функции RegSaveKey. Следует заметить, что при использовании файловой системы FAT в имени файла может отсутствовать расширение.

dwflags

DWORD: для этого параметра следует установить одно из значений, перечисленных в табл. 19.7.

Возвращаемое значение

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

Включаемый файл

winreg.h

См. также

RegLoadKey, RegUnLoadKey, RegDeleteKey, RegSaveKey.

Пример

См. пример применения функции RegLoadKey.

Таблица 19.7 Значения параметра dwFlags функции RegRestoreKey

Значение

Что обозначает

REG_FORCE_RESTORE

Операция восстановления выполняется даже в том случае, если дескрипторы открытых ключей существуют на уровне или ниже того места в иерархии системного реестра, на которое указывает параметр hKey

REG_NO_LAZY_FLUSH

Содержимое ключа или раздела, на который указывает параметр hKey, не будет сбрасываться на диск в отложенном или автоматическом режиме через регулярные промежутки времени

REG_REFRESH_HIVE

Местоположение раздела, на который указывает параметр hKey, будет восстановлено сразу же после выполнения последней операции сброса его содержимого на диск. При этом содержимое раздела не должно сбрасываться на диск в отложенном режиме

REG_WHOLE_HIVE_VOLATILE

В этом случае создается информация, временно выделенная из системного реестра или раздела. При этом ключ, обозначаемый параметром  hKey, должен иметь значение HKEY_USERS или HKEY_LOCAL_MACHINE

RegSaveKey                             Windows 98   • Windows 2000

Описание

Функция RegSaveKey сохраняет содержимое системного реестра в файле раздела, который можно загрузить с использованием функций RegLoadKey и RegRestoreKey.

Синтаксис

LONG RegSaveKey(HKEY hKey, LPCTSTR IpszFile, LPSECURITY_ATTRIBUTES IpsaSecurity)

Параметры

hKey

HKEY: Любой открытый в настоящий момент ключ либо дескриптор одного из предопределенных зарезервированных ключей, перечисленных в табл. 19.1.

LpszFile

LPCTSTR: Указатель на строку, завершающуюся нулевым символом и содержащую имя файла, в котором находятся данные системного много реестра для нового ключа. Следует заметить, что при использовании файловой системы FAT в имени файла может отсутствовать расширение либо его нельзя использовать в функциях RegLoadKey и RegRestoreKey.

IpsaSecurity-

LPSECUR1TY_ATTRIBUTES: Атрибуты защиты нового файла. Если для данного параметра установлено значение NULL, тогда в указанный файл будут поступать используемые по умолчанию атрибуты защиты, не подлежащие наследованию.

Возвращаемое значение

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

Включаемыйфайл

winreg.h

См. также

RegLoadKey, RegUnLoadKey, RegRestoreKey и RegDeleteKey.

Пример

См. пример применения функции RegLoadKey.

RegSetValueEx                         * Windows 98   * Windows 2000

Описание

Функция RegSetValueEx устанавливает именованное значение любого под-ключа системного реестра. В Windows 2000 и Windows 98 у данного под-ключа может быть множество именованных значений.

Синтаксис

LONG RegSetValueEx(HKEY hKey, LPCTSTR IpszValueName, DWORD dwReserved, DWORD dwDataType, CONST BYTE* IpData, DWORD dwBytes)

Параметры

hKey

HKEY: Родительский ключ подключа, значение которого устанавливается. Это может быть любой открытый ключ либо один из предопределенных ключей, перечисленных в табл. 19.1.

IpszValueName

LPCTSTR Указатель на строку, завершающуюся нулевым символом и содержащую имя значения, которое подлежит установке. Если установлено значение NULL данного параметра, а тип данных, определяемых параметром dwDataType, соответствует типу REG_SZ, тогда содержимое данного значения записывается в неименованном или устанавливаемом по умолчанию значении.

dwReserved

DWORD: Зарезервировано. Для этого параметра следует установить значение NULL.

dw Data Type

DWORD: Тип сохраняемых данных. Доступные типы данных перечислены в табл. 19.5.

LpData

CONST BYTE*: Указатель на данные, которые будут сохраняться в выбранном значении. Объем данных, сохраняемых в системном реестре, ограничивается используемым объемом памяти. Поэтому большие значения должны храниться в файлах, а имена этих файлов следует хранить в системном реестре.

dwBytes

DWORD: Длина сохраняемой строки данных за исключением завершающего строку нулевого символа.

Возвращаемое значение

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

Включаемый файл

winreg.h

См. также

RegQueryValueEx, RegQuerylnfoKey, RegQueryValueEx.

Пример

См. пример применения функции RegCreateEx.

ReqUnLoadKtWindows 98   • Windows 2000

Описание

Функция RegUnLoadKey удаляет из системного реестра ключ улья и все его подключи.

Синтаксис

LONG RegUnLoadKey(HKEY hKey, LPCTSTR IpszSubKey)

Параметры

НКеу

HKEY: Удаляемый ключ. Это может быть ключ HKEY_USER, HKEY_LOCAL_MACHINE или значение, возвращаемое функцией Reg-ConnectRegistry и представляющее собой узел системного реестра, находящегося на другой машине.

IpszSubKey

LPCTSTR: Указатель на строку, завершающуюся нулевым символом и содержащую имя удаляемого ключа. При этом удаляются также все подключи и значения данного ключа. Этот ключ должен создаваться с помощью функции RegLoadKey.

Возвращаемое значение

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

Включаемый файл

winreg.h

См. также

RegSaveKey, RegRestoreKey, RegDeleteKey.

Пример

См. пример применения функции ReeLoadKev.