Add remaining Windows Repairs functions
This commit is contained in:
parent
e17c96d465
commit
7f40a52444
3 changed files with 123 additions and 16 deletions
|
|
@ -63,24 +63,22 @@ BASE_MENUS = {
|
||||||
'Windows Repairs': (
|
'Windows Repairs': (
|
||||||
MenuEntry('Disable Windows Updates', 'auto_windows_updates_disable'),
|
MenuEntry('Disable Windows Updates', 'auto_windows_updates_disable'),
|
||||||
MenuEntry('Reset Windows Updates', 'auto_windows_updates_reset'),
|
MenuEntry('Reset Windows Updates', 'auto_windows_updates_reset'),
|
||||||
MenuEntry('Reboot', placeholder_reboot),
|
MenuEntry('Reboot', 'auto_reboot'),
|
||||||
MenuEntry('CHKDSK', 'auto_chkdsk'),
|
MenuEntry('CHKDSK', 'auto_chkdsk'),
|
||||||
MenuEntry('DISM RestoreHealth', 'auto_dism'),
|
MenuEntry('DISM RestoreHealth', 'auto_dism'),
|
||||||
MenuEntry('SFC Scan', placeholder_function),
|
MenuEntry('SFC Scan', 'auto_sfc'),
|
||||||
MenuEntry('Fix File Associations', placeholder_function),
|
MenuEntry('Clear Proxy Settings', 'auto_reset_proxy'),
|
||||||
MenuEntry('Clear Proxy Settings', placeholder_function),
|
MenuEntry('Disable Pending Renames', 'auto_disable_pending_renames'),
|
||||||
MenuEntry('Disable Pending Renames', placeholder_function),
|
MenuEntry('Registry Repairs', 'auto_repair_registry'),
|
||||||
MenuEntry('Registry Repairs', placeholder_function),
|
MenuEntry('Reset UAC', 'auto_restore_uac_defaults'),
|
||||||
MenuEntry('Repair Safe Mode', placeholder_function),
|
MenuEntry('Reset Windows Policies', 'auto_reset_windows_policies'),
|
||||||
MenuEntry('Reset UAC', placeholder_function),
|
|
||||||
MenuEntry('Reset Windows Policies', placeholder_function),
|
|
||||||
),
|
),
|
||||||
'Malware Cleanup': (
|
'Malware Cleanup': (
|
||||||
MenuEntry('BleachBit', placeholder_function),
|
MenuEntry('BleachBit', placeholder_function),
|
||||||
MenuEntry('HitmanPro', placeholder_function),
|
MenuEntry('HitmanPro', placeholder_function),
|
||||||
MenuEntry('KVRT', placeholder_function),
|
MenuEntry('KVRT', placeholder_function),
|
||||||
MenuEntry('Windows Defender', placeholder_function),
|
MenuEntry('Windows Defender', placeholder_function),
|
||||||
MenuEntry('Reboot', placeholder_reboot),
|
MenuEntry('Reboot', 'auto_reboot'),
|
||||||
),
|
),
|
||||||
'Manual Steps': (
|
'Manual Steps': (
|
||||||
MenuEntry('AdwCleaner', placeholder_function),
|
MenuEntry('AdwCleaner', placeholder_function),
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ SOURCES = {
|
||||||
'ProduKey32': 'http://www.nirsoft.net/utils/produkey.zip',
|
'ProduKey32': 'http://www.nirsoft.net/utils/produkey.zip',
|
||||||
'ProduKey64': 'http://www.nirsoft.net/utils/produkey-x64.zip',
|
'ProduKey64': 'http://www.nirsoft.net/utils/produkey-x64.zip',
|
||||||
'PuTTY': 'https://the.earth.li/~sgtatham/putty/latest/w32/putty.zip',
|
'PuTTY': 'https://the.earth.li/~sgtatham/putty/latest/w32/putty.zip',
|
||||||
|
'RegDelNull': 'https://download.sysinternals.com/files/Regdelnull.zip',
|
||||||
'RKill': 'https://download.bleepingcomputer.com/grinler/rkill.exe',
|
'RKill': 'https://download.bleepingcomputer.com/grinler/rkill.exe',
|
||||||
'Samsung Magician': 'https://s3.ap-northeast-2.amazonaws.com/global.semi.static/SAMSUNG_SSD_v5_3_0_181121/CD0C7CC1BE00525FAC4675B9E502899B41D5C3909ECE3AA2FB6B74A766B2A1EA/Samsung_Magician_Installer.zip',
|
'Samsung Magician': 'https://s3.ap-northeast-2.amazonaws.com/global.semi.static/SAMSUNG_SSD_v5_3_0_181121/CD0C7CC1BE00525FAC4675B9E502899B41D5C3909ECE3AA2FB6B74A766B2A1EA/Samsung_Magician_Installer.zip',
|
||||||
'SDIO Themes': 'http://snappy-driver-installer.org/downloads/SDIO_Themes.zip',
|
'SDIO Themes': 'http://snappy-driver-installer.org/downloads/SDIO_Themes.zip',
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ from wk.os.win import (
|
||||||
reg_delete_value,
|
reg_delete_value,
|
||||||
reg_read_value,
|
reg_read_value,
|
||||||
reg_set_value,
|
reg_set_value,
|
||||||
|
reg_write_settings,
|
||||||
disable_service,
|
disable_service,
|
||||||
enable_service,
|
enable_service,
|
||||||
stop_service,
|
stop_service,
|
||||||
|
|
@ -48,9 +49,22 @@ LOG = logging.getLogger(__name__)
|
||||||
AUTO_REPAIR_DELAY_IN_SECONDS = 30
|
AUTO_REPAIR_DELAY_IN_SECONDS = 30
|
||||||
AUTO_REPAIR_KEY = fr'Software\{KIT_NAME_FULL}\Auto Repairs'
|
AUTO_REPAIR_KEY = fr'Software\{KIT_NAME_FULL}\Auto Repairs'
|
||||||
CONEMU = 'ConEmuPID' in os.environ
|
CONEMU = 'ConEmuPID' in os.environ
|
||||||
|
GPUPDATE_SUCCESS_STRINGS = (
|
||||||
|
'Computer Policy update has completed successfully.',
|
||||||
|
'User Policy update has completed successfully.',
|
||||||
|
)
|
||||||
OS_VERSION = float(platform.win32_ver()[0])
|
OS_VERSION = float(platform.win32_ver()[0])
|
||||||
WIDTH = 50
|
REG_UAC_DEFAULT_SETTINGS = {
|
||||||
|
'HKLM': {
|
||||||
|
r'Software\Microsoft\Windows\CurrentVersion\Policies\System': (
|
||||||
|
('ConsentPromptBehaviorAdmin', 5, 'DWORD'),
|
||||||
|
('ConsentPromptBehaviorUser', 3, 'DWORD'),
|
||||||
|
('EnableLUA', 1, 'DWORD'),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}
|
||||||
SYSTEMDRIVE = os.environ.get('SYSTEMDRIVE')
|
SYSTEMDRIVE = os.environ.get('SYSTEMDRIVE')
|
||||||
|
WIDTH = 50
|
||||||
TRY_PRINT = TryAndPrint()
|
TRY_PRINT = TryAndPrint()
|
||||||
TRY_PRINT.width = WIDTH
|
TRY_PRINT.width = WIDTH
|
||||||
TRY_PRINT.verbose = True
|
TRY_PRINT.verbose = True
|
||||||
|
|
@ -290,6 +304,9 @@ def run_auto_repairs(base_menus):
|
||||||
|
|
||||||
# Run repairs
|
# Run repairs
|
||||||
clear_screen()
|
clear_screen()
|
||||||
|
print_standard(title)
|
||||||
|
print('')
|
||||||
|
print_info('Running repairs')
|
||||||
for group, menu in menus.items():
|
for group, menu in menus.items():
|
||||||
if group in ('Main', 'Options'):
|
if group in ('Main', 'Options'):
|
||||||
continue
|
continue
|
||||||
|
|
@ -485,6 +502,14 @@ def auto_chkdsk(group, name):
|
||||||
reboot()
|
reboot()
|
||||||
|
|
||||||
|
|
||||||
|
def auto_disable_pending_renames(group, name):
|
||||||
|
"""Disable pending renames."""
|
||||||
|
result = TRY_PRINT.run(
|
||||||
|
'Disabling pending renames...', disable_pending_renames,
|
||||||
|
)
|
||||||
|
save_settings(group, name, result=result)
|
||||||
|
|
||||||
|
|
||||||
def auto_dism(group, name):
|
def auto_dism(group, name):
|
||||||
"""Run DISM repairs."""
|
"""Run DISM repairs."""
|
||||||
needs_reboot = False
|
needs_reboot = False
|
||||||
|
|
@ -520,6 +545,47 @@ def auto_enable_regback(group, name):
|
||||||
save_settings(group, name, result=result)
|
save_settings(group, name, result=result)
|
||||||
|
|
||||||
|
|
||||||
|
def auto_reboot(group, name):
|
||||||
|
"""Reboot the system."""
|
||||||
|
save_settings(group, name, done=True, failed=False, message='DONE')
|
||||||
|
print('')
|
||||||
|
reboot(30)
|
||||||
|
|
||||||
|
|
||||||
|
def auto_repair_registry(group, name):
|
||||||
|
"""Delete registry keys with embedded null characters."""
|
||||||
|
result = TRY_PRINT.run(
|
||||||
|
'Running Registry repairs...', delete_registry_null_keys,
|
||||||
|
)
|
||||||
|
save_settings(group, name, result=result)
|
||||||
|
|
||||||
|
|
||||||
|
def auto_reset_proxy(group, name):
|
||||||
|
"""Reset proxy settings."""
|
||||||
|
result = TRY_PRINT.run('Clearing proxy settings...', reset_proxy)
|
||||||
|
save_settings(group, name, result=result)
|
||||||
|
|
||||||
|
|
||||||
|
def auto_reset_windows_policies(group, name):
|
||||||
|
"""Reset Windows policies to defaults."""
|
||||||
|
result = TRY_PRINT.run(
|
||||||
|
'Resetting Windows policies...', reset_windows_policies,
|
||||||
|
)
|
||||||
|
save_settings(group, name, result=result)
|
||||||
|
|
||||||
|
|
||||||
|
def auto_restore_uac_defaults(group, name):
|
||||||
|
"""Restore UAC default settings."""
|
||||||
|
result = TRY_PRINT.run('Restoring UAC defaults...', restore_uac_defaults)
|
||||||
|
save_settings(group, name, result=result)
|
||||||
|
|
||||||
|
|
||||||
|
def auto_sfc(group, name):
|
||||||
|
"""Run SFC repairs."""
|
||||||
|
result = TRY_PRINT.run('SFC Scan...', run_sfc_scan)
|
||||||
|
save_settings(group, name, result=result)
|
||||||
|
|
||||||
|
|
||||||
def auto_system_restore_create(group, name):
|
def auto_system_restore_create(group, name):
|
||||||
"""Create a System Restore point."""
|
"""Create a System Restore point."""
|
||||||
result = TRY_PRINT.run(
|
result = TRY_PRINT.run(
|
||||||
|
|
@ -585,6 +651,11 @@ def backup_registry():
|
||||||
run_tool('Erunt', 'ERUNT', backup_path, 'sysreg', 'curuser', 'otherusers')
|
run_tool('Erunt', 'ERUNT', backup_path, 'sysreg', 'curuser', 'otherusers')
|
||||||
|
|
||||||
|
|
||||||
|
def delete_registry_null_keys():
|
||||||
|
"""Delete registry keys with embedded null characters."""
|
||||||
|
run_tool('RegDelNull', 'RegDelNull', '-s', '-y', cbin=True)
|
||||||
|
|
||||||
|
|
||||||
# OS Built-in Functions
|
# OS Built-in Functions
|
||||||
def create_system_restore_point():
|
def create_system_restore_point():
|
||||||
"""Create System Restore point."""
|
"""Create System Restore point."""
|
||||||
|
|
@ -601,6 +672,14 @@ def create_system_restore_point():
|
||||||
raise GenericWarning('Skipped, a restore point was created too recently')
|
raise GenericWarning('Skipped, a restore point was created too recently')
|
||||||
|
|
||||||
|
|
||||||
|
def disable_pending_renames():
|
||||||
|
"""Disable pending renames."""
|
||||||
|
reg_set_value(
|
||||||
|
'HKLM', r'SYSTEM\CurrentControlSet\Control\Session Manager',
|
||||||
|
'PendingFileRenameOperations', [], 'MULTI_SZ',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def disable_windows_updates():
|
def disable_windows_updates():
|
||||||
"""Disable and stop Windows Updates."""
|
"""Disable and stop Windows Updates."""
|
||||||
disable_service('wuauserv')
|
disable_service('wuauserv')
|
||||||
|
|
@ -653,14 +732,43 @@ def reboot(timeout=10):
|
||||||
raise SystemExit
|
raise SystemExit
|
||||||
|
|
||||||
|
|
||||||
|
def reset_proxy():
|
||||||
|
"""Reset WinHTTP proxy settings."""
|
||||||
|
cmd = ['netsh', 'winhttp', 'reset', 'proxy']
|
||||||
|
proc = run_program(cmd, check=False)
|
||||||
|
|
||||||
|
# Check result
|
||||||
|
if 'Direct access (no proxy server)' not in proc.stdout:
|
||||||
|
raise GenericError('Failed to reset proxy settings.')
|
||||||
|
|
||||||
|
|
||||||
|
def reset_windows_policies():
|
||||||
|
"""Reset Windows policies to defaults."""
|
||||||
|
cmd = ['gpupdate', '/force']
|
||||||
|
proc = run_program(cmd, check=False)
|
||||||
|
|
||||||
|
# Check result
|
||||||
|
if not all(_s in proc.stdout for _s in GPUPDATE_SUCCESS_STRINGS):
|
||||||
|
raise GenericError('Failed to reset one or more policies.')
|
||||||
|
|
||||||
|
|
||||||
def reset_windows_updates():
|
def reset_windows_updates():
|
||||||
"""Reset Windows Updates."""
|
"""Reset Windows Updates."""
|
||||||
system_root = os.environ.get('SYSTEMROOT', 'C:/Windows')
|
system_root = os.environ.get('SYSTEMROOT', 'C:/Windows')
|
||||||
rename_item(
|
try:
|
||||||
f'{system_root}/SoftwareDistribution',
|
rename_item(
|
||||||
f'{system_root}/SoftwareDistribution.old',
|
f'{system_root}/SoftwareDistribution',
|
||||||
)
|
f'{system_root}/SoftwareDistribution.old',
|
||||||
delete_folder(f'{system_root}/SoftwareDistribution.old', force=True)
|
)
|
||||||
|
delete_folder(f'{system_root}/SoftwareDistribution.old', force=True)
|
||||||
|
except FileNotFoundError:
|
||||||
|
# Ignore
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def restore_uac_defaults():
|
||||||
|
"""Restore UAC default settings."""
|
||||||
|
reg_write_settings(REG_UAC_DEFAULT_SETTINGS)
|
||||||
|
|
||||||
|
|
||||||
def run_chkdsk_offline():
|
def run_chkdsk_offline():
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue