winreg — доступ к реестру Windows
Эти функции предоставляют Python доступ к API реестра Windows. Вместо целого числа в качестве дескриптора реестра используется объект-дескриптор, чтобы обеспечить правильное закрытие дескрипторов, даже если программист забудет явно их закрыть.
Изменено в версии 3.3: Раньше несколько функций этого модуля возбуждали исключение WindowsError, которое теперь является псевдонимом OSError.
Функции
Этот модуль предоставляет следующие функции:
-
winreg.CloseKey(hkey) -
Закрывает ранее открытый ключ реестра. Аргумент hkey задаёт ранее открытый ключ.
Примечание
Если hkey не закрыт с помощью этого метода (или через
hkey.Close()), он будет закрыт при уничтожении объекта hkey в Python.
-
winreg.ConnectRegistry(computer_name, key) -
Устанавливает соединение с предопределённым дескриптором реестра на другом компьютере и возвращает объект-дескриптор.
computer_name — имя удалённого компьютера в формате
r"\\computername". ЕслиNone, используется локальный компьютер.key — предопределённый дескриптор, с которым нужно установить соединение.
Возвращаемое значение — дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение
OSError.Вызывает событие аудита
winreg.ConnectRegistryс аргументамиcomputer_name,key.Изменено в версии 3.3: См. выше.
-
winreg.CreateKey(key, sub_key) -
Создаёт или открывает указанный ключ и возвращает объект-дескриптор.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
sub_key — строка с именем ключа, который открывает или создаёт этот метод.
Если key — один из предопределённых ключей, значение sub_key может быть
None. В этом случае возвращается тот же дескриптор ключа, который был передан функции.Если ключ уже существует, функция открывает существующий ключ.
Возвращаемое значение — дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение
OSError.Вызывает событие аудита
winreg.CreateKeyс аргументамиkey,sub_key,access.Вызывает событие аудита
winreg.OpenKey/resultс аргументомkey.Изменено в версии 3.3: См. выше.
-
winreg.CreateKeyEx(key, sub_key, reserved=0, access=KEY_WRITE) -
Создаёт или открывает указанный ключ и возвращает объект-дескриптор.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
sub_key — строка с именем ключа, который открывает или создаёт этот метод.
reserved — зарезервированное целое число, которое должно быть равно нулю. Значение по умолчанию — ноль.
access — целое число, задающее маску доступа, описывающую желаемый уровень доступа к ключу с точки зрения безопасности. Значение по умолчанию —
KEY_WRITE. Другие допустимые значения см. в разделе Права доступа.Если key — один из предопределённых ключей, значение sub_key может быть
None. В этом случае возвращается тот же дескриптор ключа, который был передан функции.Если ключ уже существует, функция открывает существующий ключ.
Возвращаемое значение — дескриптор открытого ключа. Если функция завершается ошибкой, возбуждается исключение
OSError.Вызывает событие аудита
winreg.CreateKeyс аргументамиkey,sub_key,access.Вызывает событие аудита
winreg.OpenKey/resultс аргументомkey.Добавлено в версии 3.2.
Изменено в версии 3.3: См. выше.
-
winreg.DeleteKey(key, sub_key) -
Удаляет указанный ключ.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
sub_key — строка, которая должна обозначать подраздел ключа, указанного параметром key. Это значение не должно быть
None, а у ключа не должно быть подразделов.Этот метод не может удалять ключи, у которых есть подразделы.
Если метод выполняется успешно, весь ключ вместе со всеми его значениями удаляется. Если метод завершается ошибкой, возбуждается исключение
OSError.Вызывает событие аудита
winreg.DeleteKeyс аргументамиkey,sub_key,access.Изменено в версии 3.3: См. выше.
-
winreg.DeleteKeyEx(key, sub_key, access=KEY_WOW64_64KEY, reserved=0) -
Удаляет указанный ключ.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
sub_key — строка, которая должна обозначать подраздел ключа, указанного параметром key. Это значение не должно быть
None, а у ключа не должно быть подразделов.reserved — зарезервированное целое число, которое должно быть равно нулю. Значение по умолчанию — ноль.
access — целое число, задающее маску доступа, описывающую желаемый уровень доступа к ключу с точки зрения безопасности. Значение по умолчанию —
KEY_WOW64_64KEY. В 32-разрядной Windows константы WOW64 игнорируются. Другие допустимые значения см. в разделе Права доступа.Этот метод не может удалять ключи, у которых есть подразделы.
Если метод выполняется успешно, весь ключ вместе со всеми его значениями удаляется. Если метод завершается ошибкой, возбуждается исключение
OSError.В неподдерживаемых версиях Windows возбуждается исключение
NotImplementedError.Вызывает событие аудита
winreg.DeleteKeyс аргументамиkey,sub_key,access.Добавлено в версии 3.2.
Изменено в версии 3.3: См. выше.
-
winreg.DeleteValue(key, value) -
Удаляет именованное значение из ключа реестра.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
value — строка, указывающая удаляемое значение.
Вызывает событие аудита
winreg.DeleteValueс аргументамиkey,value.
-
winreg.EnumKey(key, index) -
Перечисляет подразделы открытого ключа реестра и возвращает строку.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
index — целое число, указывающее индекс извлекаемого ключа.
При каждом вызове функция извлекает имя одного подраздела. Обычно её вызывают многократно, пока не будет возбуждено исключение
OSError, указывающее на отсутствие других значений.Вызывает событие аудита
winreg.EnumKeyс аргументамиkey,index.Изменено в версии 3.3: См. выше.
-
winreg.EnumValue(key, index) -
Перечисляет значения открытого ключа реестра и возвращает кортеж.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
index — целое число, указывающее индекс извлекаемого значения.
При каждом вызове функция извлекает имя одного подраздела. Обычно её вызывают многократно, пока не будет возбуждено исключение
OSError, указывающее на отсутствие других значений.Результат — кортеж из 3 элементов:
Индекс
Значение
0Строка, указывающая имя значения
1Объект, содержащий данные значения; его тип зависит от соответствующего типа в реестре
2Целое число, указывающее тип данных значения (см. таблицу в документации для
SetValueEx())Вызывает событие аудита
winreg.EnumValueс аргументамиkey,index.Изменено в версии 3.3: См. выше.
-
winreg.ExpandEnvironmentStrings(str) -
Подставляет значения переменных среды вместо заполнителей
%NAME%в строках, напримерREG_EXPAND_SZ:>>> ExpandEnvironmentStrings('%windir%') 'C:\\Windows'Вызывает событие аудита
winreg.ExpandEnvironmentStringsс аргументомstr.
-
winreg.FlushKey(key) -
Записывает все атрибуты ключа в реестр.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
Для изменения ключа вызывать
FlushKey()не требуется. Изменения реестра записываются на диск самим реестром с помощью механизма отложенной записи. Изменения реестра также записываются на диск при завершении работы системы. В отличие отCloseKey(), методFlushKey()возвращает управление только после записи всех данных в реестр. Приложению следует вызыватьFlushKey(), только если необходимо быть абсолютно уверенным, что изменения реестра записаны на диск.Примечание
Если вы не знаете, нужен ли вызов
FlushKey(), скорее всего, он не нужен.
-
winreg.LoadKey(key, sub_key, file_name) -
Создаёт подраздел указанного ключа и сохраняет в нём сведения реестра из указанного файла.
key — дескриптор, возвращённый
ConnectRegistry(), либо одна из константHKEY_USERSилиHKEY_LOCAL_MACHINE.sub_key — строка, указывающая загружаемый подраздел.
file_name — имя файла, из которого загружаются данные реестра. Этот файл должен быть создан функцией
SaveKey(). В файловой системе FAT имя файла может не иметь расширения.Вызов
LoadKey()завершится ошибкой, если у вызывающего процесса нет привилегииSE_RESTORE_PRIVILEGE. Обратите внимание: привилегии отличаются от разрешений. Подробнее см. в документации RegLoadKey.Если key — дескриптор, возвращённый
ConnectRegistry(), путь, указанный в file_name, считается относительным к удалённому компьютеру.Вызывает событие аудита
winreg.LoadKeyс аргументамиkey,sub_key,file_name.
-
winreg.OpenKey(key, sub_key, reserved=0, access=KEY_READ) -
winreg.OpenKeyEx(key, sub_key, reserved=0, access=KEY_READ) -
Открывает указанный ключ и возвращает объект-дескриптор.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
sub_key — строка, указывающая открываемый подраздел.
reserved — зарезервированное целое число, которое должно быть равно нулю. Значение по умолчанию — ноль.
access — целое число, задающее маску доступа, описывающую желаемый уровень доступа к ключу с точки зрения безопасности. Значение по умолчанию —
KEY_READ. Другие допустимые значения см. в разделе Права доступа.Результат — новый дескриптор указанного ключа.
Если функция завершается ошибкой, возбуждается исключение
OSError.Вызывает событие аудита
winreg.OpenKeyс аргументамиkey,sub_key,access.Вызывает событие аудита
winreg.OpenKey/resultс аргументомkey.Изменено в версии 3.2: Добавлена возможность использовать именованные аргументы.
Изменено в версии 3.3: См. выше.
-
winreg.QueryInfoKey(key) -
Возвращает сведения о ключе в виде кортежа.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
Результат — кортеж из 3 элементов:
Индекс
Значение
0Целое число, указывающее количество подразделов этого ключа.
1Целое число, указывающее количество значений этого ключа.
2Целое число, указывающее время последнего изменения ключа (если доступно), в сотнях наносекунд с 1 января 1601 года.
Вызывает событие аудита
winreg.QueryInfoKeyс аргументомkey.
-
winreg.QueryValue(key, sub_key) -
Извлекает неименованное значение ключа в виде строки.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
sub_key — строка с именем подраздела, с которым связано значение. Если этот параметр равен
Noneили пуст, функция извлекает значение, заданное методомSetValue()для ключа, указанного параметром key.Значения в реестре состоят из имени, типа и данных. Этот метод извлекает данные первого значения ключа с именем
NULL. Однако нижележащий вызов API не возвращает тип, поэтому по возможности всегда используйтеQueryValueEx().Вызывает событие аудита
winreg.QueryValueс аргументамиkey,sub_key,value_name.
-
winreg.QueryValueEx(key, value_name) -
Извлекает тип и данные указанного значения, связанного с открытым ключом реестра.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
value_name — строка с именем запрашиваемого значения.
Результат — кортеж из 2 элементов:
Индекс
Значение
0Значение элемента реестра.
1Целое число, указывающее тип реестра для этого значения (см. таблицу в документации для
SetValueEx())Вызывает событие аудита
winreg.QueryValueс аргументамиkey,sub_key,value_name.
-
winreg.SaveKey(key, file_name) -
Сохраняет указанный ключ и все его подразделы в указанный файл.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
file_name — имя файла, в который сохраняются данные реестра. Этот файл не должен уже существовать. Если в имени файла есть расширение, метод
LoadKey()не сможет использовать его в файловых системах FAT.Если key представляет ключ на удалённом компьютере, путь, заданный параметром file_name, считается относительным к удалённому компьютеру. Вызывающий этот метод должен обладать привилегией безопасности SeBackupPrivilege. Обратите внимание: привилегии отличаются от разрешений. Подробнее см. в документации о конфликтах между правами пользователей и разрешениями.
Эта функция передаёт в API значение
NULLдля параметра security_attributes.Вызывает событие аудита
winreg.SaveKeyс аргументамиkey,file_name.
-
winreg.SetValue(key, sub_key, type, value) -
Связывает значение с указанным ключом.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
sub_key — строка с именем подраздела, с которым связано значение.
type — целое число, указывающее тип данных. Сейчас оно должно быть равно
REG_SZ, то есть поддерживаются только строки. Для поддержки других типов данных используйте функциюSetValueEx().value — строка, задающая новое значение.
Если ключ, указанный параметром sub_key, не существует, функция SetValue создаёт его.
Длина значений ограничена доступной памятью. Длинные значения (более 2048 байт) следует хранить в файлах, записывая имена файлов в реестр конфигурации. Это помогает повысить производительность реестра.
Ключ, указанный параметром key, должен быть открыт с правом доступа
KEY_SET_VALUE.Вызывает событие аудита
winreg.SetValueс аргументамиkey,sub_key,type,value.
-
winreg.SetValueEx(key, value_name, reserved, type, value) -
Сохраняет данные в поле значения открытого ключа реестра.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
value_name — строка с именем подраздела, с которым связано значение.
reserved может иметь любое значение — в API всегда передаётся ноль.
type — целое число, указывающее тип данных. Доступные типы см. в разделе Типы значений.
value — строка, задающая новое значение.
Этот метод также может задавать для указанного ключа дополнительные сведения о значении и его типе. Ключ, указанный параметром key, должен быть открыт с правом доступа
KEY_SET_VALUE.Чтобы открыть ключ, используйте методы
CreateKey()илиOpenKey().Длина значений ограничена доступной памятью. Длинные значения (более 2048 байт) следует хранить в файлах, записывая имена файлов в реестр конфигурации. Это помогает повысить производительность реестра.
Вызывает событие аудита
winreg.SetValueс аргументамиkey,sub_key,type,value.
-
winreg.DisableReflectionKey(key) -
Отключает отражение реестра для 32-разрядных процессов, работающих в 64-разрядной операционной системе.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
При выполнении в 32-разрядной операционной системе обычно возбуждается исключение
NotImplementedError.Если ключ отсутствует в списке отражения, функция завершается успешно, но не оказывает никакого эффекта. Отключение отражения для ключа не влияет на отражение его подразделов.
Вызывает событие аудита
winreg.DisableReflectionKeyс аргументомkey.
-
winreg.EnableReflectionKey(key) -
Восстанавливает отражение реестра для указанного ключа, в котором оно было отключено.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
При выполнении в 32-разрядной операционной системе обычно возбуждается исключение
NotImplementedError.Восстановление отражения для ключа не влияет на отражение его подразделов.
Вызывает событие аудита
winreg.EnableReflectionKeyс аргументомkey.
-
winreg.QueryReflectionKey(key) -
Определяет состояние отражения указанного ключа.
key — уже открытый ключ или одна из предопределённых констант HKEY_*.
Возвращает
True, если отражение отключено.При выполнении в 32-разрядной операционной системе обычно возбуждается исключение
NotImplementedError.Вызывает событие аудита
winreg.QueryReflectionKeyс аргументомkey.
Константы
Следующие константы определены для использования во многих функциях winreg.
Константы HKEY_*
-
winreg.HKEY_CLASSES_ROOT -
Записи реестра, подчинённые этому ключу, определяют типы (или классы) документов и свойства, связанные с этими типами. Приложения Shell и COM используют информацию, хранящуюся в этом ключе.
-
winreg.HKEY_CURRENT_USER -
Записи реестра, подчинённые этому ключу, определяют настройки текущего пользователя. Эти настройки включают значения переменных среды, данные о программных группах, цветах, принтерах, сетевых подключениях и параметрах приложений.
-
winreg.HKEY_LOCAL_MACHINE -
Записи реестра, подчинённые этому ключу, определяют физическое состояние компьютера, включая данные о типе шины, системной памяти, установленном оборудовании и программном обеспечении.
-
winreg.HKEY_USERS -
Записи реестра, подчинённые этому ключу, определяют конфигурацию пользователя по умолчанию для новых пользователей локального компьютера, а также конфигурацию текущего пользователя.
-
winreg.HKEY_PERFORMANCE_DATA -
Записи реестра, подчинённые этому ключу, предоставляют доступ к данным о производительности. Эти данные фактически не хранятся в реестре; функции реестра заставляют систему собирать данные из их источника.
-
winreg.HKEY_CURRENT_CONFIG -
Содержит сведения о текущем аппаратном профиле локальной компьютерной системы.
-
winreg.HKEY_DYN_DATA -
Этот ключ не используется в версиях Windows новее 98.
Права доступа
Дополнительные сведения см. в разделе Безопасность и доступ к разделам реестра.
-
winreg.KEY_ALL_ACCESS -
Объединяет права доступа STANDARD_RIGHTS_REQUIRED,
KEY_QUERY_VALUE,KEY_SET_VALUE,KEY_CREATE_SUB_KEY,KEY_ENUMERATE_SUB_KEYS,KEY_NOTIFYиKEY_CREATE_LINK.
-
winreg.KEY_WRITE -
Объединяет права доступа STANDARD_RIGHTS_WRITE,
KEY_SET_VALUEиKEY_CREATE_SUB_KEY.
-
winreg.KEY_READ -
Объединяет значения STANDARD_RIGHTS_READ,
KEY_QUERY_VALUE,KEY_ENUMERATE_SUB_KEYSиKEY_NOTIFY.
-
winreg.KEY_EXECUTE -
Эквивалентно
KEY_READ.
-
winreg.KEY_QUERY_VALUE -
Необходимо для получения значений ключа реестра.
-
winreg.KEY_SET_VALUE -
Необходимо для создания, удаления или задания значения реестра.
-
winreg.KEY_CREATE_SUB_KEY -
Необходимо для создания подраздела ключа реестра.
-
winreg.KEY_ENUMERATE_SUB_KEYS -
Необходимо для перечисления подразделов ключа реестра.
-
winreg.KEY_NOTIFY -
Необходимо для запроса уведомлений об изменениях ключа реестра или его подразделов.
-
winreg.KEY_CREATE_LINK -
Зарезервировано для использования системой.
Только для 64-разрядных систем
Дополнительные сведения см. в разделе Доступ к альтернативному представлению реестра.
-
winreg.KEY_WOW64_64KEY -
Указывает, что приложение в 64-разрядной Windows должно работать с 64-разрядным представлением реестра. В 32-разрядной Windows эта константа игнорируется.
-
winreg.KEY_WOW64_32KEY -
Указывает, что приложение в 64-разрядной Windows должно работать с 32-разрядным представлением реестра. В 32-разрядной Windows эта константа игнорируется.
Типы значений
Дополнительные сведения см. в разделе Типы значений реестра.
-
winreg.REG_BINARY -
Двоичные данные в любом виде.
-
winreg.REG_DWORD -
32-разрядное число.
-
winreg.REG_DWORD_LITTLE_ENDIAN -
32-разрядное число в формате с порядком байтов от младшего к старшему. Эквивалентно
REG_DWORD.
-
winreg.REG_DWORD_BIG_ENDIAN -
32-разрядное число в формате с порядком байтов от старшего к младшему.
-
winreg.REG_EXPAND_SZ -
Строка с завершающим нулевым символом, содержащая ссылки на переменные среды (
%PATH%).
-
winreg.REG_LINK -
Символическая ссылка в формате Unicode.
-
winreg.REG_MULTI_SZ -
Последовательность строк с завершающим нулевым символом, завершающаяся двумя нулевыми символами. (Python обрабатывает это завершение автоматически.)
-
winreg.REG_NONE -
Тип значения не определён.
-
winreg.REG_QWORD -
64-разрядное число.
Добавлено в версии 3.6.
-
winreg.REG_QWORD_LITTLE_ENDIAN -
64-разрядное число в формате с порядком байтов от младшего к старшему. Эквивалентно
REG_QWORD.Добавлено в версии 3.6.
-
winreg.REG_RESOURCE_LIST -
Список ресурсов драйвера устройства.
-
winreg.REG_FULL_RESOURCE_DESCRIPTOR -
Настройка оборудования.
-
winreg.REG_RESOURCE_REQUIREMENTS_LIST -
Список аппаратных ресурсов.
-
winreg.REG_SZ -
Строка с завершающим нулевым символом.
Объекты дескрипторов реестра
Этот объект оборачивает объект Windows HKEY и автоматически закрывает его при уничтожении объекта. Чтобы гарантировать очистку, можно вызвать метод Close() объекта или функцию CloseKey().
Все функции реестра в этом модуле возвращают один из таких объектов.
Все функции реестра в этом модуле, принимающие объект дескриптора, также принимают целое число, однако рекомендуется использовать объект дескриптора.
Для объектов дескрипторов определена семантика __bool__() — поэтому
if handle:
print("Yes")
выведет Yes, если дескриптор в данный момент действителен (не закрыт и не отсоединён).
Для объектов также определена семантика сравнения: объекты дескрипторов будут считаться равными, если оба ссылаются на одно и то же базовое значение дескриптора Windows.
Объекты дескрипторов можно преобразовать в целое число (например, с помощью встроенной функции int()); в этом случае возвращается базовое значение дескриптора Windows. Также можно использовать метод Detach(), чтобы получить целочисленный дескриптор и отсоединить дескриптор Windows от объекта дескриптора.
-
PyHKEY.Close() -
Закрывает базовый дескриптор Windows.
Если дескриптор уже закрыт, ошибка не возникает.
-
PyHKEY.Detach() -
Отсоединяет дескриптор Windows от объекта дескриптора.
Результатом является целое число, содержащее значение дескриптора до отсоединения. Если дескриптор уже отсоединён или закрыт, возвращается ноль.
После вызова этой функции дескриптор фактически становится недействительным, но не закрывается. Эту функцию следует вызывать, если необходимо, чтобы базовый дескриптор Win32 существовал дольше объекта дескриптора.
Вызывает событие аудита
winreg.PyHKEY.Detachс аргументомkey.
-
PyHKEY.__enter__() -
PyHKEY.__exit__(*exc_info) -
Объект HKEY реализует
__enter__()и__exit__(), а значит, поддерживает протокол управления контекстом для инструкцииwith:with OpenKey(HKEY_LOCAL_MACHINE, "foo") as key: ... # work with keyавтоматически закроет key при выходе управления из блока
with.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/winreg.html