Типы
HKEY = Integer;
PHKEY = ^HKEY;

Функции Реестра


Возвращаемые ошибки

Все функции возвращают код ошибки операции. Для расшифровки ошибки используйте функцию FormatMessage с флагом FORMAT_MESSAGE_FROM_SYSTEM.

Некоторые ошибки из файла Source\RTL\WIN\windows.pas:
ERROR_SUCCESS = 0;
NO_ERROR = 0; Нет ошибки
ERROR_FILE_NOT_FOUND = 2; Указанный файл не найден
ERROR_ACCESS_DENIED = 5; В доступе отказано
ERROR_OUTOFMEMORY = 14; {$E} Недостаточно доступной памяти
ERROR_INVALID_PARAMETER = 87; {$57} Неправильный аргумент
ERROR_MORE_DATA = 234; {$EA} Мал размер буфера для передачи данных
ERROR_NO_MORE_ITEMS = 259; {$103} Ключей или параметров больше нет
ERROR_BADDB = 1009; {$3F1} Реестр испорчен
ERROR_BADKEY = 1010; {$3F2} Неправильный дескриптор ключа
ERROR_CANTOPEN = 1011; {$3F3} Ключ неразрешен на открытие
ERROR_CANTREAD = 1012; {$3F4} Ключ неразрешен на чтение
ERROR_REGISTRY_CORRUPT = 1015; {$3F7} Реестр испорчен
ERROR_REGISTRY_IO_FAILED = 1016; {$3F8} Ошибка чтения или записи файла реестра
ERROR_KEY_DELETED = 1018; {$3FA} Ключ отмечен как стертый

Не используйте числовые значения при написании программ, так как они могут измениться. Используйте имена констант, надежно и понятно.


function RegCloseKey(hKey:HKEY):Longint;

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

hKey дескриптор ключа, который необходимо закрыть.

Возвращает код ошибки.

Попытка закрыть уже закрытый ключ не опасна, просто вернется код ошибки ERROR_BADKEY (1010 $3F2). Ключ не должен находиться в открытом состояний дольше, чем надо. Закрывайте ключ сразу, как появится такая возможность, лучше потом откроете его снова.


function RegFlushKey(hKey:HKEY):Longint;

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

hKey дескриптор ключа, который необходимо закрыть.

Возвращает код ошибки.

Попытка закрыть уже закрытый ключ не опасна, просто вернется код ошибки ERROR_BADKEY (1010 $3F2). Ключ не должен находиться в открытом состояний дольше, чем надо. Закрывайте ключ сразу, как появится такая возможность, лучше потом откроете его снова.


function RegCreateKeyEx(hKey:HKEY; lpSubKey:PChar; Reserved:DWORD; lpClass:PChar; dwOptions:DWORD; samDesired:REGSAM; lpSecurityAttributes:PSecurityAttributes; var phkResult:HKEY; lpdwDisposition:PDWORD):Longint;

Создает новый ключ, если ключ существует, то только открывает его.

hKey дескриптор ключа, от которого указывается путь
lpSubKey указатель на путь к создаваемому ключу
Reserved всегда 0
lpClass указатель на строку, которая определяет класс (тип объекта) этого ключа (пока не знаю nil)
dwOptions одно и значений:

REG_OPTION_NON_VOLATILE энергонезависимый ключ. Сохраняется после перезагрузки системы. По умолчанию.
REG_OPTION_VOLATILE энергозависимый ключ. Не сохраняется после перезагрузки системы. В Windows95 не поддерживается.

samDesired маска доступа ключа. Только WindowsNT. Комбинация из значений:

KEY_CREATE_SUB_KEY разрешено создание подключей
KEY_ENUMERATE_SUB_KEYS разрешена нумерация ключей
KEY_EXECUTE разрешено чтение
KEY_NOTIFY разрешено уведомление об изменениях
KEY_QUERY_VALUE разрешено чтение данных
KEY_SET_VALUE разрешена запись данных
KEY_READ комбинация из KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY
KEY_WRITE комбинация из KEY_SET_VALUE и KEY_CREATE_SUB_KEY
KEY_ALL_ACCESS полный доступ, комбинация из всех.

lpSecurityAttributes указатель на структуру, которая определяет может ли дескриптор быть унаследован дочерними процессами. Если nil дескриптор не может быть унаследован.
phkResult указатель на переменную в которую будет записан дескриптор созданного ключа.
lpdwDisposition указатель на переменную в которую будет записано одно из значений:

REG_CREATED_NEW_KEY ключа не было и он создан
REG_OPENED_EXISTING_KEY ключ существовал и был открыт без изменений

Возвращает код ошибки.


function RegDeleteKey(hKey:HKEY; lpSubKey:PChar):Longint;

Удаляет ключ по указанному пути. Для Windows95 удаляет все входящие подключи. Для WindowsNT каждый подключ надо удалять отдельно.

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

Возвращает код ошибки.


function RegDeleteValue(hKey HKEY; lpValueName:PChar):Longint;

Удаляет параметр с указанным именем (и имя и значение) для указанного ключа.

hKey дескриптор ключа, внутри которого находится удаляемый параметр
lpValueName указатель на строку содержащую имя удаляемого параметра. Если данный параметр равен nil, или указывает на пустую строку, то удаляет параметр по умолчанию.

Возвращает код ошибки.

Ключ должен быть открыт с маской доступа содержащей KEY_SET_VALUE


function RegEnumKeyEx(hKey:HKEY; dwIndex:DWORD; lpName:PChar; var lpcbName:DWORD; lpReserved:Pointer; lpClass:PChar; lpcbClass:PDWORD; lpftLastWriteTime:PFileTime):Longint;

При каждом вызове возвращает информацию об очередном дочернем ключе.

hKey дескриптор ключа, для которого запрашивается информация о дочерних ключах
dwIndex индекс дочернего ключа для поиска. Должен быть равен 0 для первого запроса и увеличиваться для последующих. Так как на самом деле ключи не упорядочены, то добавленный новый ключ в последствии может иметь любой индекс.
lpName указатель на буфер, который принимает имя ключа с терминальным нулем. В буфер копируется только имя дочернего ключа, а не вся иерархия.
lpcbName указатель на переменную содержащую длину буфера. По возвращению содержит количество символов скопированных в буфер, без учета терминального нуля.
lpReserved всегда ноль
lpClass указатель на буфер, который примет имя класса дочернего ключа. Может быть равен nil.
lpcbClass указатель на переменную содержащую длину буфера для приема имени класса. По окончании функции содержит длину строки, без учета терминального нуля, занесенную в буфер. Может быть равен nil, только если lpClass равен nil.
lpftLastWriteTime указатель на переменную, которая примет значение времени последней модификации дочернего ключа или его параметров. В Windows95 не поддерживается всегда 0.

Возвращает код ошибки.

Ключ должен быть открыт с маской доступа содержащей KEY_ENUMERATE_SUB_KEYS.


function RegEnumValue(hKey:HKEY; dwIndex:DWORD; lpValueName:PChar; var lpcbValueName:DWORD; lpReserved:Pointer; lpType:PDWORD; lpData:PByte; lpcbData:PDWORD):Longint;

При каждом вызове возвращает информацию об очередном параметре.

hKey дескриптор ключа, для которого запрашивается информация о параметрах
dwIndex индекс параметра для поиска. Должен быть равен 0 для первого запроса и увеличиваться для последующих. Так как на самом деле параметры не упорядочены, то добавленный новый параметр в последствии может иметь любой индекс.
lpValueName указатель на буфер, который принимает имя параметра с терминальным нулем
lpcbValueName указатель на переменную содержащую длину буфера. По возвращению содержит количество символов скопированных в буфер, без учета терминального нуля.
lpReserved всегда ноль
lpType указатель на переменную, которая примет код типа данных параметра. Будет иметь одно из следующих значений:

Windows Delphi
REG_SZ строка, соответствует rdString
REG_EXPAND_SZ строка, описывающая переменную окружения Windows вроде "%PATH%", соответствует rdExpandString
REG_DWORD 32 бита число, соответствует rdInteger
REG_BINARY двоичные данные в любом виде, соответствует rdBinary
остальные типы в Delphi не поддерживаются и считаются rdUnknown

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

Возвращает код ошибки.

Ключ должен быть открыт с маской доступа содержащей KEY_QUERY_VALUE.


function RegLoadKey(hKey:HKEY; lpSubKey, lpFile:PChar):Longint;

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

hKey дескриптор корневого ключа. Загрузка происходит только в вершину реестра, поэтому в качестве корня могут быть использованы лишь ключи HKEY_USERS, HKEY_LOCAL_MACHINE или дескриптор возвращенный функцией RegConnectRegistry.
lpSubKey имя дочернего ключа, но не путь, т.к. он должен быть создан сразу под корневым
lpFile имя файла. Может содержать путь, если путь отсутствует, то берется корневой каталог Windows.

Возвращает код ошибки.

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

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


function RegOpenKeyEx(hKey:HKEY; lpSubKey:PChar; ulOptions:DWORD; samDesired:REGSAM; var phkResult:HKEY):Longint;

Открывает указанный ключ и возвращает его дескриптор. В отличии от RegCreateKeyEx не создает ключ в случае его отсутствия.

hKey дескриптор ключа, от которого указывается путь
lpSubKey указатель на путь к открываемому ключу
ulOptions всегда 0
samDesired маска доступа ключа. Только WindowsNT. Комбинация из значений:

KEY_CREATE_SUB_KEY разрешено создание подключей
KEY_ENUMERATE_SUB_KEYS разрешена нумерация ключей
KEY_EXECUTE разрешено чтение
KEY_NOTIFY разрешено уведомление об изменениях
KEY_QUERY_VALUE разрешено чтение данных
KEY_SET_VALUE разрешена запись данных
KEY_READ комбинация из KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY
KEY_WRITE комбинация из KEY_SET_VALUE и KEY_CREATE_SUB_KEY
KEY_ALL_ACCESS полный доступ, комбинация из всех

phkResult указатель на переменную в которую будет записан дескриптор открытого ключа

Возвращает код ошибки.


function RegQueryInfoKey(hKey:HKEY; lpClass:PChar; lpcbClass:PDWORD; lpReserved:Pointer; lpcSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen, lpcbSecurityDescriptor:PDWORD; lpftLastWriteTime:PFileTime):Longint;

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

hKey дескриптор ключа, для которого запрашивается информация
lpClass указатель на буфер, который примет имя класса ключа
lpcbClass указатель на переменную содержащую длину буфера для приема имени класса. По окончании функции содержит длину строки, без учета терминального нуля, занесенную в буфер.
lpReserved всегда ноль
lpcSubKeys указатель на переменную, которая примет значение количества дочерних ключей
lpcbMaxSubKeyLen указатель на переменную, которая примет значение максимальной длины (в символах) имени дочернего ключа. В Windows95 с учетом терминального нуля, а в WindowsNT без.
lpcbMaxClassLen указатель на переменную, которая примет значение максимальной длины (в символах) имени класса для дочерних ключей. Не содержит терминального нуля.
lpcValues указатель на переменную, которая примет значение количества параметров ключа
lpcbMaxValueNameLen указатель на переменную, которая примет значение максимальной длины (в символах) имени параметра ключа
lpcbMaxValueLen указатель на переменную, которая примет значение максимальной длины значения параметра ключа
lpcbSecurityDescriptor указатель на переменную, которая примет значение максимальной длины дескриптора защиты ключа
lpftLastWriteTime указатель на переменную, которая примет значение времени последней модификации ключа или его параметров. В Windows95 не поддерживается всегда 0.

Возвращает код ошибки.

Любой из параметров может быть равен nil. Ключ должен быть открыт с маской доступа содержащей KEY_QUERY_VALUE.


function RegQueryValueEx(hKey:HKEY; lpValueName:PChar; lpReserved:Pointer; lpType:PDWORD; lpData:PByte; lpcbData:PDWORD):Longint;

Дает тип и значение параметра по имени для указанного ключа.

hKey дескриптор ключа, внутри которого находится параметр
lpValueName указатель на строку содержащую имя параметра. Если данный параметр равен nil, или указывает на пустую строку, то имеется в виду, так называемый, параметр по умолчанию. Для Windows95 значение параметра по умолчанию всегда только типа строка. Для Windows98 первоначально тоже типа строка, но с помощью функции RegSetValueEx в последствии можно установить любой тип. Для WindowsNT не имеет первоначального типа и может быть любым.
lpReserved всегда ноль
lpType указатель на переменную, которая примет тип значения параметра. Одно из следующих:

Windows Delphi
REG_SZ строка, соответствует rdString
REG_EXPAND_SZ строка, описывающая переменную окружения Windows вроде "%PATH%", соответствует rdExpandString
REG_DWORD 32 бита число, соответствует rdInteger
REG_BINARY двоичные данные в любом виде, соответствует rdBinary
остальные типы в Delphi не поддерживаются и считаются rdUnknown

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

Возвращает код ошибки.

Ключ должен быть открыт с маской доступа содержащей KEY_QUERY_VALUE.

Если данная функция вызвана как ANSI версия (или явно RegQueryValueExA или без определения UNICODE при трансляции), то она автоматически преобразует строковые значения в ANSI перед копированием в буфер.


function RegReplaceKey(hKey:HKEY; lpSubKey:PChar; lpNewFile:PChar; lpOldFile:PChar):Longint;

Сохраняет указанный ключ, его дочерние ключи и параметры в резервном файле OldFile и заменяет содержание ключа содержимым файла NewFile, который предварительно должен быть создан с помощью функции RegSaveKey. Замена вступает в силу после перезагрузки системы.

hKey дескриптор корневого ключа. При этом если корневые ключи не HKEY_USERS или не HKEY_LOCAL_MACHINE имя дочернего ключа должно быть nil.
lpSubKey имя дочернего ключа (но не путь), если корневой ключ HKEY_USERS или HKEY_LOCAL_MACHINE. Иначе nil.
lpNewFile имя файла содержащего улей (часть реестра) для загрузки. Может содержать путь, если путь отсутствует, то берется корневой каталог Windows.
lpOldFile имя резервного файла, в котором будет сохранено старое содержание ключа (улей - часть реестра). Может содержать путь, если путь отсутствует, то берется корневой каталог Windows.

Возвращает код ошибки.


function RegRestoreKey(hKey:HKEY; lpFile:PChar; dwFlags:DWORD):Longint;

Загружает в указанный ключ улей (часть реестра) находящийся в отдельном файле, который предварительно должен быть создан с помощью функции RegSaveKey. Только WindowsNT.

hKey дескриптор корневого ключа. При этом если корневые ключи не HKEY_USERS или не HKEY_LOCAL_MACHINE имя дочернего ключа должно быть nil.
lpSubKey имя дочернего ключа (но не путь), если корневой ключ HKEY_USERS или HKEY_LOCAL_MACHINE. Иначе nil.
lpFile имя файла содержащего улей (часть реестра) для загрузки.
dwFlags флаг, указывающий энергозависимость ключа:

REG_OPTION_NON_VOLATILE энергонезависимый ключ. Сохраняется после перезагрузки системы. По умолчанию.
REG_OPTION_VOLATILE энергозависимый ключ. Не сохраняется после перезагрузки системы. В Windows95 не поддерживается.

Возвращает код ошибки.


function RegSaveKey(hKey:HKEY; lpFile:PChar; lpSecurityAttributes:PSecurityAttributes):Longint;

Сохраняет указанный ключ, его дочерние ключи и параметры в отдельном файле.

hKey дескриптор ключа содержание, которого необходимо сохранить.
lpFile имя файла, в котором будет сохранено содержание ключа (улей - часть реестра). Может содержать путь, если путь отсутствует, то берется корневой каталог Windows. В Windows95 не поддерживаются длинные имена. Сохраняйте с короткими именами, а потом переименовывайте в длинные имена.
lpSecurityAttributes указатель на структуру содержащей атрибут секретности для создаваемого файла, если nil файлу устанавливается атрибут по умолчанию. Только WindowsNT.

Возвращает код ошибки.


function RegSetValueEx(hKey:HKEY; lpValueName:PChar; Reserved:DWORD; dwType:DWORD; lpData:Pointer; cbData:DWORD):Longint;

Устанавливает значение и тип указанного параметра.

hKey дескриптор ключа, для которого устанавливаются значение и тип параметра
lpValueName указатель на строку содержащую имя параметра с терминальным нулем. Если данный параметр равен nil, или указывает на пустую строку, то имеется в виду, так называемый, параметр по умолчанию. Для Windows95 значение параметра по умолчанию всегда только типа строка. Для Windows98 первоначально тоже типа строка, но с помощью функции RegSetValueEx в последствии можно установить любой тип. Для WindowsNT не имеет первоначального типа и может быть любым.
Reserved всегда ноль
dwType код типа данных параметра. Имеет одно из следующих значений:

Windows Delphi
REG_SZ строка, соответствует rdString
REG_EXPAND_SZ строка, описывающая переменную окружения Windows вроде "%PATH%", соответствует rdExpandString
REG_DWORD 32 бита число, соответствует rdInteger
REG_BINARY двоичные данные в любом виде, соответствует rdBinary
остальные типы в Delphi не поддерживаются и считаются rdUnknown

lpData указатель на буфер, который содержит значение параметра
cbData размер буфера, в байтах. Для типа строка включает терминальный ноль.

Возвращает код ошибки.

Ключ должен быть открыт с маской доступа содержащей KEY_SET_VALUE.


function RegUnLoadKey(hKey:HKEY; lpSubKey:PChar):Longint;

Удаляет (выгружает) ключ, предварительно загруженный функцией RegLoadKey.

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

Возвращает код ошибки.


Конец страницы Функции

Используются технологии uCoz