mirror of
https://github.com/derrod/legendary.git
synced 2024-12-22 01:45:28 +00:00
[utils] Add Windows registry helpers
This commit is contained in:
parent
d941b9d61e
commit
a4c1f0e670
82
legendary/utils/windows_helpers.py
Normal file
82
legendary/utils/windows_helpers.py
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
import logging
|
||||||
|
import winreg
|
||||||
|
|
||||||
|
logger = logging.getLogger('WindowsHelpers')
|
||||||
|
|
||||||
|
HKEY_CURRENT_USER = winreg.HKEY_CURRENT_USER
|
||||||
|
HKEY_LOCAL_MACHINE = winreg.HKEY_LOCAL_MACHINE
|
||||||
|
TYPE_STRING = winreg.REG_SZ
|
||||||
|
TYPE_DWORD = winreg.REG_DWORD
|
||||||
|
|
||||||
|
|
||||||
|
def query_registry_value(hive, key, value):
|
||||||
|
ret = None
|
||||||
|
try:
|
||||||
|
k = winreg.OpenKey(hive, key, reserved=0, access=winreg.KEY_READ)
|
||||||
|
except FileNotFoundError:
|
||||||
|
logger.debug(f'Registry key "{key}" not found')
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
ret, _ = winreg.QueryValueEx(k, value)
|
||||||
|
except FileNotFoundError:
|
||||||
|
logger.debug(f'Registry value "{key}":"{value}" not found')
|
||||||
|
winreg.CloseKey(k)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def list_registry_values(hive, key, use_32bit_view=False):
|
||||||
|
ret = []
|
||||||
|
|
||||||
|
access = winreg.KEY_READ
|
||||||
|
if use_32bit_view:
|
||||||
|
access |= winreg.KEY_WOW64_32KEY
|
||||||
|
|
||||||
|
try:
|
||||||
|
k = winreg.OpenKey(hive, key, reserved=0, access=access)
|
||||||
|
except FileNotFoundError:
|
||||||
|
logger.debug(f'Registry key "{key}" not found')
|
||||||
|
else:
|
||||||
|
idx = 0
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
ret.append(winreg.EnumValue(k, idx))
|
||||||
|
except OSError:
|
||||||
|
break
|
||||||
|
idx += 1
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def remove_registry_value(hive, key, value, use_32bit_view=False):
|
||||||
|
access = winreg.KEY_ALL_ACCESS
|
||||||
|
if use_32bit_view:
|
||||||
|
access |= winreg.KEY_WOW64_32KEY
|
||||||
|
|
||||||
|
try:
|
||||||
|
k = winreg.OpenKey(hive, key, reserved=0, access=access)
|
||||||
|
except FileNotFoundError:
|
||||||
|
logger.debug(f'Registry key "{key}" not found')
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
winreg.DeleteValue(k, value)
|
||||||
|
except Exception as e:
|
||||||
|
logger.debug(f'Deleting "{key}":"{value}" failed with {repr(e)}')
|
||||||
|
winreg.CloseKey(k)
|
||||||
|
|
||||||
|
|
||||||
|
def set_registry_value(hive, key, value, data, reg_type=winreg.REG_SZ, use_32bit_view=False):
|
||||||
|
access = winreg.KEY_ALL_ACCESS
|
||||||
|
if use_32bit_view:
|
||||||
|
access |= winreg.KEY_WOW64_32KEY
|
||||||
|
|
||||||
|
try:
|
||||||
|
k = winreg.CreateKeyEx(hive, key, reserved=0, access=access)
|
||||||
|
except Exception as e:
|
||||||
|
logger.debug(f'Failed creating/opening registry key "{key}" with {repr(e)}')
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
winreg.SetValueEx(k, value, 0, reg_type, data)
|
||||||
|
except Exception as e:
|
||||||
|
logger.debug(f'Setting "{key}":"{value}" to "{data}" failed with {repr(e)}')
|
||||||
|
winreg.CloseKey(k)
|
Loading…
Reference in a new issue