Add Microsoft Defender sections

This commit is contained in:
2Shirt 2021-05-01 19:14:32 -06:00
parent 03000662fe
commit 04b2c1c9d9
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C
2 changed files with 50 additions and 1 deletions

View file

@ -77,7 +77,7 @@ BASE_MENUS = {
MenuEntry('BleachBit', 'auto_bleachbit'),
MenuEntry('HitmanPro', 'auto_hitmanpro'),
MenuEntry('KVRT', 'auto_kvrt'),
MenuEntry('Windows Defender', placeholder_function),
MenuEntry('Windows Defender', 'auto_microsoft_defender'),
MenuEntry('Reboot', 'auto_reboot'),
),
'Manual Steps': (

View file

@ -634,6 +634,14 @@ def auto_kvrt(group, name):
save_settings(group, name, result=result)
def auto_microsoft_defender(group, name):
"""Run Microsoft Defender scan."""
result = TRY_PRINT.run(
'Microsoft Defender...', run_microsoft_defender, msg_good='DONE',
)
save_settings(group, name, result=result)
def auto_reboot(group, name):
"""Reboot the system."""
save_settings(group, name, done=True, failed=False, message='DONE')
@ -797,6 +805,47 @@ def run_kvrt():
log_path.write_text(proc.stdout)
def run_microsoft_defender(full=True):
"""Run Microsoft Defender scan."""
reg_key = r'Software\Microsoft\Windows Defender'
def _get_defender_path():
install_path = reg_read_value('HKLM', reg_key, 'InstallLocation')
return fr'{install_path}\MpCmdRun.exe'
log_path = format_log_path(
log_name='Microsoft Defender', timestamp=True, tool=True,
)
log_path.parent.mkdir(parents=True, exist_ok=True)
# Get MS Defender status
## NOTE: disabled may be set to an int instead of bool
## This is fine because we're just checking if it's enabled.
disabled = bool(reg_read_value('HKLM', reg_key, 'DisableAntiSpyware'))
disabled = disabled or reg_read_value('HKLM', reg_key, 'DisableAntiVirus')
passive_mode = reg_read_value('HKLM', reg_key, 'PassiveMode') == 2
if disabled and not passive_mode:
raise GenericError('Defender is disabled.')
# Update signatures
defender_path = _get_defender_path()
cmd = (defender_path, '-SignatureUpdate')
proc = run_program(cmd, check=False)
sleep(2)
if proc.returncode > 0:
LOG.warning('Failed to update Defender signatures')
# Update defender path in case it changed after the update
defender_path = _get_defender_path()
# Run scan
cmd = (defender_path, '-Scan', '-ScanType', '2' if full else '1')
proc = run_program(cmd, check=False)
log_path.write_text(proc.stdout)
if proc.returncode > 0:
raise GenericError('Failed to run scan or clean items.')
def run_rkill():
"""Run RKill scan."""
log_path = format_log_path(log_name='RKill', timestamp=True, tool=True)