Я пытаюсь открыть ключ реестра
(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render)
в python с winreg для чтения и записи, но я продолжаю сталкиваться с
«PermissionError: [WinError 5] доступ запрещен»
Сначала я вручную изменил разрешения в regedit (как описано в этом руководстве) для необходимых мне ключей.это работает, но это неудобно.я также заметил, что установка обновлений, например, для видеокарт, может удалить старые ключи и создать новые, поэтому вам всегда придется настраивать разрешения после установки обновления, что непрактично.Запуск от имени администратора также не помогает.
import winreg
reg_hive = winreg.HKEY_LOCAL_MACHINE
main_key = r"SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render"
with winreg.ConnectRegistry(None, reg_hive) as Hive:
with winreg.OpenKey(
Hive, main_key, 0, winreg.KEY_ALL_ACCESS) as RenderKey:
get_subkey_tuple = winreg.QueryInfoKey(RenderKey)
# this tuple counts sub_key starting with 1
# we subtract -1 so we get the correct index for range()
subkey_indices = get_subkey_tuple[0] - 1
for i in range(0, subkey_indices):
sub_key = winreg.EnumKey(RenderKey, i)
final_key_string = main_key + "\\" + sub_key
print(final_key_string)
with winreg.OpenKey(Hive, final_key_string, 0, winreg.KEY_ALL_ACCESS) as local_key:
pass
строки "winreg.OpenKey" вызывают Permissionerror (те, которые я не изменял разрешения вручную в regedit).я хотел бы открывать / читать / записывать ключи реестра без необходимости вручную настраивать разрешения.
--- edit --- параметр "reserved" имеет какое-либо отношение к нему?документация по этому вопросу довольно скудная.
упоминает об этом только двумя предложениями: «зарезервированное является зарезервированным целым числом и должно быть равно нулю. По умолчанию это ноль».и «зарезервировано может быть что угодно - ноль всегда передается в API».последний предназначен только для winreg.SetValueEX ().