Converted all python scripts to LF/UNIX
This commit is contained in:
parent
a33a54c5e6
commit
5ea03da0a4
35 changed files with 6486 additions and 6486 deletions
|
|
@ -1,62 +1,62 @@
|
||||||
# Wizard Kit: Activate Windows using various methods
|
# Wizard Kit: Activate Windows using various methods
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.activation import *
|
from functions.activation import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: Windows Activation Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: Windows Activation Tool'.format(KIT_NAME_FULL))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: Windows Activation Tool\n'.format(KIT_NAME_FULL))
|
print_info('{}: Windows Activation Tool\n'.format(KIT_NAME_FULL))
|
||||||
# Bail early if already activated
|
# Bail early if already activated
|
||||||
if windows_is_activated():
|
if windows_is_activated():
|
||||||
print_info('This system is already activated')
|
print_info('This system is already activated')
|
||||||
sleep(5)
|
sleep(5)
|
||||||
exit_script()
|
exit_script()
|
||||||
other_results = {
|
other_results = {
|
||||||
'Error': {
|
'Error': {
|
||||||
'BIOSKeyNotFoundError': 'BIOS key not found.',
|
'BIOSKeyNotFoundError': 'BIOS key not found.',
|
||||||
}}
|
}}
|
||||||
|
|
||||||
# Determine activation method
|
# Determine activation method
|
||||||
activation_methods = [
|
activation_methods = [
|
||||||
{'Name': 'Activate with BIOS key', 'Function': activate_with_bios},
|
{'Name': 'Activate with BIOS key', 'Function': activate_with_bios},
|
||||||
]
|
]
|
||||||
if global_vars['OS']['Version'] not in ['8', '10']:
|
if global_vars['OS']['Version'] not in ['8', '10']:
|
||||||
activation_methods[0]['Disabled'] = True
|
activation_methods[0]['Disabled'] = True
|
||||||
actions = [
|
actions = [
|
||||||
{'Name': 'Quit', 'Letter': 'Q'},
|
{'Name': 'Quit', 'Letter': 'Q'},
|
||||||
]
|
]
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
selection = menu_select(
|
selection = menu_select(
|
||||||
'{}: Windows Activation Menu'.format(KIT_NAME_FULL),
|
'{}: Windows Activation Menu'.format(KIT_NAME_FULL),
|
||||||
main_entries=activation_methods, action_entries=actions)
|
main_entries=activation_methods, action_entries=actions)
|
||||||
|
|
||||||
if (selection.isnumeric()):
|
if (selection.isnumeric()):
|
||||||
result = try_and_print(
|
result = try_and_print(
|
||||||
message = activation_methods[int(selection)-1]['Name'],
|
message = activation_methods[int(selection)-1]['Name'],
|
||||||
function = activation_methods[int(selection)-1]['Function'],
|
function = activation_methods[int(selection)-1]['Function'],
|
||||||
other_results=other_results)
|
other_results=other_results)
|
||||||
if result['CS']:
|
if result['CS']:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
sleep(2)
|
sleep(2)
|
||||||
elif selection == 'Q':
|
elif selection == 'Q':
|
||||||
exit_script()
|
exit_script()
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_success('\nDone.')
|
print_success('\nDone.')
|
||||||
pause("Press Enter to exit...")
|
pause("Press Enter to exit...")
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,57 +1,57 @@
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Code borrowed from https://github.com/aeruder/get_win8key
|
# Code borrowed from https://github.com/aeruder/get_win8key
|
||||||
|
|
||||||
if sys.platform.startswith('win32'):
|
if sys.platform.startswith('win32'):
|
||||||
import ctypes
|
import ctypes
|
||||||
import ctypes.wintypes
|
import ctypes.wintypes
|
||||||
|
|
||||||
def EnumAcpiTables():
|
def EnumAcpiTables():
|
||||||
#returns a list of the names of the ACPI tables on this system
|
#returns a list of the names of the ACPI tables on this system
|
||||||
FirmwareTableProviderSignature=ctypes.wintypes.DWORD(1094930505)
|
FirmwareTableProviderSignature=ctypes.wintypes.DWORD(1094930505)
|
||||||
pFirmwareTableBuffer=ctypes.create_string_buffer(0)
|
pFirmwareTableBuffer=ctypes.create_string_buffer(0)
|
||||||
BufferSize=ctypes.wintypes.DWORD(0)
|
BufferSize=ctypes.wintypes.DWORD(0)
|
||||||
#http://msdn.microsoft.com/en-us/library/windows/desktop/ms724259
|
#http://msdn.microsoft.com/en-us/library/windows/desktop/ms724259
|
||||||
EnumSystemFirmwareTables=ctypes.WinDLL("Kernel32").EnumSystemFirmwareTables
|
EnumSystemFirmwareTables=ctypes.WinDLL("Kernel32").EnumSystemFirmwareTables
|
||||||
ret=EnumSystemFirmwareTables(FirmwareTableProviderSignature, pFirmwareTableBuffer, BufferSize)
|
ret=EnumSystemFirmwareTables(FirmwareTableProviderSignature, pFirmwareTableBuffer, BufferSize)
|
||||||
pFirmwareTableBuffer=None
|
pFirmwareTableBuffer=None
|
||||||
pFirmwareTableBuffer=ctypes.create_string_buffer(ret)
|
pFirmwareTableBuffer=ctypes.create_string_buffer(ret)
|
||||||
BufferSize.value=ret
|
BufferSize.value=ret
|
||||||
ret2=EnumSystemFirmwareTables(FirmwareTableProviderSignature, pFirmwareTableBuffer, BufferSize)
|
ret2=EnumSystemFirmwareTables(FirmwareTableProviderSignature, pFirmwareTableBuffer, BufferSize)
|
||||||
return [pFirmwareTableBuffer.value[i:i+4] for i in range(0, len(pFirmwareTableBuffer.value), 4)]
|
return [pFirmwareTableBuffer.value[i:i+4] for i in range(0, len(pFirmwareTableBuffer.value), 4)]
|
||||||
|
|
||||||
def GetAcpiTable(table):
|
def GetAcpiTable(table):
|
||||||
#returns raw contents of ACPI table
|
#returns raw contents of ACPI table
|
||||||
#http://msdn.microsoft.com/en-us/library/windows/desktop/ms724379x
|
#http://msdn.microsoft.com/en-us/library/windows/desktop/ms724379x
|
||||||
tableID = 0
|
tableID = 0
|
||||||
for b in reversed(table):
|
for b in reversed(table):
|
||||||
tableID = (tableID << 8) + b
|
tableID = (tableID << 8) + b
|
||||||
GetSystemFirmwareTable=ctypes.WinDLL("Kernel32").GetSystemFirmwareTable
|
GetSystemFirmwareTable=ctypes.WinDLL("Kernel32").GetSystemFirmwareTable
|
||||||
FirmwareTableProviderSignature=ctypes.wintypes.DWORD(1094930505)
|
FirmwareTableProviderSignature=ctypes.wintypes.DWORD(1094930505)
|
||||||
FirmwareTableID=ctypes.wintypes.DWORD(int(tableID))
|
FirmwareTableID=ctypes.wintypes.DWORD(int(tableID))
|
||||||
pFirmwareTableBuffer=ctypes.create_string_buffer(0)
|
pFirmwareTableBuffer=ctypes.create_string_buffer(0)
|
||||||
BufferSize=ctypes.wintypes.DWORD(0)
|
BufferSize=ctypes.wintypes.DWORD(0)
|
||||||
ret = GetSystemFirmwareTable(FirmwareTableProviderSignature, FirmwareTableID, pFirmwareTableBuffer, BufferSize)
|
ret = GetSystemFirmwareTable(FirmwareTableProviderSignature, FirmwareTableID, pFirmwareTableBuffer, BufferSize)
|
||||||
pFirmwareTableBuffer=None
|
pFirmwareTableBuffer=None
|
||||||
pFirmwareTableBuffer=ctypes.create_string_buffer(ret)
|
pFirmwareTableBuffer=ctypes.create_string_buffer(ret)
|
||||||
BufferSize.value=ret
|
BufferSize.value=ret
|
||||||
ret2 = GetSystemFirmwareTable(FirmwareTableProviderSignature, FirmwareTableID, pFirmwareTableBuffer, BufferSize)
|
ret2 = GetSystemFirmwareTable(FirmwareTableProviderSignature, FirmwareTableID, pFirmwareTableBuffer, BufferSize)
|
||||||
return pFirmwareTableBuffer.raw
|
return pFirmwareTableBuffer.raw
|
||||||
elif sys.platform.startswith('linux'):
|
elif sys.platform.startswith('linux'):
|
||||||
import os
|
import os
|
||||||
TABLE_ROOT = b'/sys/firmware/acpi/tables'
|
TABLE_ROOT = b'/sys/firmware/acpi/tables'
|
||||||
def EnumAcpiTables():
|
def EnumAcpiTables():
|
||||||
return os.listdir(TABLE_ROOT)
|
return os.listdir(TABLE_ROOT)
|
||||||
def GetAcpiTable(table):
|
def GetAcpiTable(table):
|
||||||
with open(os.path.join(TABLE_ROOT, table), 'rb') as o:
|
with open(os.path.join(TABLE_ROOT, table), 'rb') as o:
|
||||||
return o.read()
|
return o.read()
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError('acpi support only implemented for linux and win32')
|
raise NotImplementedError('acpi support only implemented for linux and win32')
|
||||||
|
|
||||||
def FindAcpiTable(table):
|
def FindAcpiTable(table):
|
||||||
#checks if specific ACPI table exists and returns True/False
|
#checks if specific ACPI table exists and returns True/False
|
||||||
tables = EnumAcpiTables()
|
tables = EnumAcpiTables()
|
||||||
if table in tables:
|
if table in tables:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,21 @@
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2014 Michael Kropat
|
Copyright (c) 2014 Michael Kropat
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
in the Software without restriction, including without limitation the rights
|
in the Software without restriction, including without limitation the rights
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
furnished to do so, subject to the following conditions:
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
The above copyright notice and this permission notice shall be included in
|
||||||
all copies or substantial portions of the Software.
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
|
|
|
||||||
|
|
@ -1,164 +1,164 @@
|
||||||
import ctypes, sys
|
import ctypes, sys
|
||||||
from ctypes import windll, wintypes
|
from ctypes import windll, wintypes
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
class GUID(ctypes.Structure): # [1]
|
class GUID(ctypes.Structure): # [1]
|
||||||
_fields_ = [
|
_fields_ = [
|
||||||
("Data1", wintypes.DWORD),
|
("Data1", wintypes.DWORD),
|
||||||
("Data2", wintypes.WORD),
|
("Data2", wintypes.WORD),
|
||||||
("Data3", wintypes.WORD),
|
("Data3", wintypes.WORD),
|
||||||
("Data4", wintypes.BYTE * 8)
|
("Data4", wintypes.BYTE * 8)
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, uuid_):
|
def __init__(self, uuid_):
|
||||||
ctypes.Structure.__init__(self)
|
ctypes.Structure.__init__(self)
|
||||||
self.Data1, self.Data2, self.Data3, self.Data4[0], self.Data4[1], rest = uuid_.fields
|
self.Data1, self.Data2, self.Data3, self.Data4[0], self.Data4[1], rest = uuid_.fields
|
||||||
for i in range(2, 8):
|
for i in range(2, 8):
|
||||||
self.Data4[i] = rest>>(8 - i - 1)*8 & 0xff
|
self.Data4[i] = rest>>(8 - i - 1)*8 & 0xff
|
||||||
|
|
||||||
class FOLDERID: # [2]
|
class FOLDERID: # [2]
|
||||||
AccountPictures = UUID('{008ca0b1-55b4-4c56-b8a8-4de4b299d3be}')
|
AccountPictures = UUID('{008ca0b1-55b4-4c56-b8a8-4de4b299d3be}')
|
||||||
AdminTools = UUID('{724EF170-A42D-4FEF-9F26-B60E846FBA4F}')
|
AdminTools = UUID('{724EF170-A42D-4FEF-9F26-B60E846FBA4F}')
|
||||||
ApplicationShortcuts = UUID('{A3918781-E5F2-4890-B3D9-A7E54332328C}')
|
ApplicationShortcuts = UUID('{A3918781-E5F2-4890-B3D9-A7E54332328C}')
|
||||||
CameraRoll = UUID('{AB5FB87B-7CE2-4F83-915D-550846C9537B}')
|
CameraRoll = UUID('{AB5FB87B-7CE2-4F83-915D-550846C9537B}')
|
||||||
CDBurning = UUID('{9E52AB10-F80D-49DF-ACB8-4330F5687855}')
|
CDBurning = UUID('{9E52AB10-F80D-49DF-ACB8-4330F5687855}')
|
||||||
CommonAdminTools = UUID('{D0384E7D-BAC3-4797-8F14-CBA229B392B5}')
|
CommonAdminTools = UUID('{D0384E7D-BAC3-4797-8F14-CBA229B392B5}')
|
||||||
CommonOEMLinks = UUID('{C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D}')
|
CommonOEMLinks = UUID('{C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D}')
|
||||||
CommonPrograms = UUID('{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}')
|
CommonPrograms = UUID('{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}')
|
||||||
CommonStartMenu = UUID('{A4115719-D62E-491D-AA7C-E74B8BE3B067}')
|
CommonStartMenu = UUID('{A4115719-D62E-491D-AA7C-E74B8BE3B067}')
|
||||||
CommonStartup = UUID('{82A5EA35-D9CD-47C5-9629-E15D2F714E6E}')
|
CommonStartup = UUID('{82A5EA35-D9CD-47C5-9629-E15D2F714E6E}')
|
||||||
CommonTemplates = UUID('{B94237E7-57AC-4347-9151-B08C6C32D1F7}')
|
CommonTemplates = UUID('{B94237E7-57AC-4347-9151-B08C6C32D1F7}')
|
||||||
Contacts = UUID('{56784854-C6CB-462b-8169-88E350ACB882}')
|
Contacts = UUID('{56784854-C6CB-462b-8169-88E350ACB882}')
|
||||||
Cookies = UUID('{2B0F765D-C0E9-4171-908E-08A611B84FF6}')
|
Cookies = UUID('{2B0F765D-C0E9-4171-908E-08A611B84FF6}')
|
||||||
Desktop = UUID('{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}')
|
Desktop = UUID('{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}')
|
||||||
DeviceMetadataStore = UUID('{5CE4A5E9-E4EB-479D-B89F-130C02886155}')
|
DeviceMetadataStore = UUID('{5CE4A5E9-E4EB-479D-B89F-130C02886155}')
|
||||||
Documents = UUID('{FDD39AD0-238F-46AF-ADB4-6C85480369C7}')
|
Documents = UUID('{FDD39AD0-238F-46AF-ADB4-6C85480369C7}')
|
||||||
DocumentsLibrary = UUID('{7B0DB17D-9CD2-4A93-9733-46CC89022E7C}')
|
DocumentsLibrary = UUID('{7B0DB17D-9CD2-4A93-9733-46CC89022E7C}')
|
||||||
Downloads = UUID('{374DE290-123F-4565-9164-39C4925E467B}')
|
Downloads = UUID('{374DE290-123F-4565-9164-39C4925E467B}')
|
||||||
Favorites = UUID('{1777F761-68AD-4D8A-87BD-30B759FA33DD}')
|
Favorites = UUID('{1777F761-68AD-4D8A-87BD-30B759FA33DD}')
|
||||||
Fonts = UUID('{FD228CB7-AE11-4AE3-864C-16F3910AB8FE}')
|
Fonts = UUID('{FD228CB7-AE11-4AE3-864C-16F3910AB8FE}')
|
||||||
GameTasks = UUID('{054FAE61-4DD8-4787-80B6-090220C4B700}')
|
GameTasks = UUID('{054FAE61-4DD8-4787-80B6-090220C4B700}')
|
||||||
History = UUID('{D9DC8A3B-B784-432E-A781-5A1130A75963}')
|
History = UUID('{D9DC8A3B-B784-432E-A781-5A1130A75963}')
|
||||||
ImplicitAppShortcuts = UUID('{BCB5256F-79F6-4CEE-B725-DC34E402FD46}')
|
ImplicitAppShortcuts = UUID('{BCB5256F-79F6-4CEE-B725-DC34E402FD46}')
|
||||||
InternetCache = UUID('{352481E8-33BE-4251-BA85-6007CAEDCF9D}')
|
InternetCache = UUID('{352481E8-33BE-4251-BA85-6007CAEDCF9D}')
|
||||||
Libraries = UUID('{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}')
|
Libraries = UUID('{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}')
|
||||||
Links = UUID('{bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968}')
|
Links = UUID('{bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968}')
|
||||||
LocalAppData = UUID('{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}')
|
LocalAppData = UUID('{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}')
|
||||||
LocalAppDataLow = UUID('{A520A1A4-1780-4FF6-BD18-167343C5AF16}')
|
LocalAppDataLow = UUID('{A520A1A4-1780-4FF6-BD18-167343C5AF16}')
|
||||||
LocalizedResourcesDir = UUID('{2A00375E-224C-49DE-B8D1-440DF7EF3DDC}')
|
LocalizedResourcesDir = UUID('{2A00375E-224C-49DE-B8D1-440DF7EF3DDC}')
|
||||||
Music = UUID('{4BD8D571-6D19-48D3-BE97-422220080E43}')
|
Music = UUID('{4BD8D571-6D19-48D3-BE97-422220080E43}')
|
||||||
MusicLibrary = UUID('{2112AB0A-C86A-4FFE-A368-0DE96E47012E}')
|
MusicLibrary = UUID('{2112AB0A-C86A-4FFE-A368-0DE96E47012E}')
|
||||||
NetHood = UUID('{C5ABBF53-E17F-4121-8900-86626FC2C973}')
|
NetHood = UUID('{C5ABBF53-E17F-4121-8900-86626FC2C973}')
|
||||||
OriginalImages = UUID('{2C36C0AA-5812-4b87-BFD0-4CD0DFB19B39}')
|
OriginalImages = UUID('{2C36C0AA-5812-4b87-BFD0-4CD0DFB19B39}')
|
||||||
PhotoAlbums = UUID('{69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C}')
|
PhotoAlbums = UUID('{69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C}')
|
||||||
PicturesLibrary = UUID('{A990AE9F-A03B-4E80-94BC-9912D7504104}')
|
PicturesLibrary = UUID('{A990AE9F-A03B-4E80-94BC-9912D7504104}')
|
||||||
Pictures = UUID('{33E28130-4E1E-4676-835A-98395C3BC3BB}')
|
Pictures = UUID('{33E28130-4E1E-4676-835A-98395C3BC3BB}')
|
||||||
Playlists = UUID('{DE92C1C7-837F-4F69-A3BB-86E631204A23}')
|
Playlists = UUID('{DE92C1C7-837F-4F69-A3BB-86E631204A23}')
|
||||||
PrintHood = UUID('{9274BD8D-CFD1-41C3-B35E-B13F55A758F4}')
|
PrintHood = UUID('{9274BD8D-CFD1-41C3-B35E-B13F55A758F4}')
|
||||||
Profile = UUID('{5E6C858F-0E22-4760-9AFE-EA3317B67173}')
|
Profile = UUID('{5E6C858F-0E22-4760-9AFE-EA3317B67173}')
|
||||||
ProgramData = UUID('{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}')
|
ProgramData = UUID('{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}')
|
||||||
ProgramFiles = UUID('{905e63b6-c1bf-494e-b29c-65b732d3d21a}')
|
ProgramFiles = UUID('{905e63b6-c1bf-494e-b29c-65b732d3d21a}')
|
||||||
ProgramFilesX64 = UUID('{6D809377-6AF0-444b-8957-A3773F02200E}')
|
ProgramFilesX64 = UUID('{6D809377-6AF0-444b-8957-A3773F02200E}')
|
||||||
ProgramFilesX86 = UUID('{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}')
|
ProgramFilesX86 = UUID('{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}')
|
||||||
ProgramFilesCommon = UUID('{F7F1ED05-9F6D-47A2-AAAE-29D317C6F066}')
|
ProgramFilesCommon = UUID('{F7F1ED05-9F6D-47A2-AAAE-29D317C6F066}')
|
||||||
ProgramFilesCommonX64 = UUID('{6365D5A7-0F0D-45E5-87F6-0DA56B6A4F7D}')
|
ProgramFilesCommonX64 = UUID('{6365D5A7-0F0D-45E5-87F6-0DA56B6A4F7D}')
|
||||||
ProgramFilesCommonX86 = UUID('{DE974D24-D9C6-4D3E-BF91-F4455120B917}')
|
ProgramFilesCommonX86 = UUID('{DE974D24-D9C6-4D3E-BF91-F4455120B917}')
|
||||||
Programs = UUID('{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}')
|
Programs = UUID('{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}')
|
||||||
Public = UUID('{DFDF76A2-C82A-4D63-906A-5644AC457385}')
|
Public = UUID('{DFDF76A2-C82A-4D63-906A-5644AC457385}')
|
||||||
PublicDesktop = UUID('{C4AA340D-F20F-4863-AFEF-F87EF2E6BA25}')
|
PublicDesktop = UUID('{C4AA340D-F20F-4863-AFEF-F87EF2E6BA25}')
|
||||||
PublicDocuments = UUID('{ED4824AF-DCE4-45A8-81E2-FC7965083634}')
|
PublicDocuments = UUID('{ED4824AF-DCE4-45A8-81E2-FC7965083634}')
|
||||||
PublicDownloads = UUID('{3D644C9B-1FB8-4f30-9B45-F670235F79C0}')
|
PublicDownloads = UUID('{3D644C9B-1FB8-4f30-9B45-F670235F79C0}')
|
||||||
PublicGameTasks = UUID('{DEBF2536-E1A8-4c59-B6A2-414586476AEA}')
|
PublicGameTasks = UUID('{DEBF2536-E1A8-4c59-B6A2-414586476AEA}')
|
||||||
PublicLibraries = UUID('{48DAF80B-E6CF-4F4E-B800-0E69D84EE384}')
|
PublicLibraries = UUID('{48DAF80B-E6CF-4F4E-B800-0E69D84EE384}')
|
||||||
PublicMusic = UUID('{3214FAB5-9757-4298-BB61-92A9DEAA44FF}')
|
PublicMusic = UUID('{3214FAB5-9757-4298-BB61-92A9DEAA44FF}')
|
||||||
PublicPictures = UUID('{B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5}')
|
PublicPictures = UUID('{B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5}')
|
||||||
PublicRingtones = UUID('{E555AB60-153B-4D17-9F04-A5FE99FC15EC}')
|
PublicRingtones = UUID('{E555AB60-153B-4D17-9F04-A5FE99FC15EC}')
|
||||||
PublicUserTiles = UUID('{0482af6c-08f1-4c34-8c90-e17ec98b1e17}')
|
PublicUserTiles = UUID('{0482af6c-08f1-4c34-8c90-e17ec98b1e17}')
|
||||||
PublicVideos = UUID('{2400183A-6185-49FB-A2D8-4A392A602BA3}')
|
PublicVideos = UUID('{2400183A-6185-49FB-A2D8-4A392A602BA3}')
|
||||||
QuickLaunch = UUID('{52a4f021-7b75-48a9-9f6b-4b87a210bc8f}')
|
QuickLaunch = UUID('{52a4f021-7b75-48a9-9f6b-4b87a210bc8f}')
|
||||||
Recent = UUID('{AE50C081-EBD2-438A-8655-8A092E34987A}')
|
Recent = UUID('{AE50C081-EBD2-438A-8655-8A092E34987A}')
|
||||||
RecordedTVLibrary = UUID('{1A6FDBA2-F42D-4358-A798-B74D745926C5}')
|
RecordedTVLibrary = UUID('{1A6FDBA2-F42D-4358-A798-B74D745926C5}')
|
||||||
ResourceDir = UUID('{8AD10C31-2ADB-4296-A8F7-E4701232C972}')
|
ResourceDir = UUID('{8AD10C31-2ADB-4296-A8F7-E4701232C972}')
|
||||||
Ringtones = UUID('{C870044B-F49E-4126-A9C3-B52A1FF411E8}')
|
Ringtones = UUID('{C870044B-F49E-4126-A9C3-B52A1FF411E8}')
|
||||||
RoamingAppData = UUID('{3EB685DB-65F9-4CF6-A03A-E3EF65729F3D}')
|
RoamingAppData = UUID('{3EB685DB-65F9-4CF6-A03A-E3EF65729F3D}')
|
||||||
RoamedTileImages = UUID('{AAA8D5A5-F1D6-4259-BAA8-78E7EF60835E}')
|
RoamedTileImages = UUID('{AAA8D5A5-F1D6-4259-BAA8-78E7EF60835E}')
|
||||||
RoamingTiles = UUID('{00BCFC5A-ED94-4e48-96A1-3F6217F21990}')
|
RoamingTiles = UUID('{00BCFC5A-ED94-4e48-96A1-3F6217F21990}')
|
||||||
SampleMusic = UUID('{B250C668-F57D-4EE1-A63C-290EE7D1AA1F}')
|
SampleMusic = UUID('{B250C668-F57D-4EE1-A63C-290EE7D1AA1F}')
|
||||||
SamplePictures = UUID('{C4900540-2379-4C75-844B-64E6FAF8716B}')
|
SamplePictures = UUID('{C4900540-2379-4C75-844B-64E6FAF8716B}')
|
||||||
SamplePlaylists = UUID('{15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5}')
|
SamplePlaylists = UUID('{15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5}')
|
||||||
SampleVideos = UUID('{859EAD94-2E85-48AD-A71A-0969CB56A6CD}')
|
SampleVideos = UUID('{859EAD94-2E85-48AD-A71A-0969CB56A6CD}')
|
||||||
SavedGames = UUID('{4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4}')
|
SavedGames = UUID('{4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4}')
|
||||||
SavedSearches = UUID('{7d1d3a04-debb-4115-95cf-2f29da2920da}')
|
SavedSearches = UUID('{7d1d3a04-debb-4115-95cf-2f29da2920da}')
|
||||||
Screenshots = UUID('{b7bede81-df94-4682-a7d8-57a52620b86f}')
|
Screenshots = UUID('{b7bede81-df94-4682-a7d8-57a52620b86f}')
|
||||||
SearchHistory = UUID('{0D4C3DB6-03A3-462F-A0E6-08924C41B5D4}')
|
SearchHistory = UUID('{0D4C3DB6-03A3-462F-A0E6-08924C41B5D4}')
|
||||||
SearchTemplates = UUID('{7E636BFE-DFA9-4D5E-B456-D7B39851D8A9}')
|
SearchTemplates = UUID('{7E636BFE-DFA9-4D5E-B456-D7B39851D8A9}')
|
||||||
SendTo = UUID('{8983036C-27C0-404B-8F08-102D10DCFD74}')
|
SendTo = UUID('{8983036C-27C0-404B-8F08-102D10DCFD74}')
|
||||||
SidebarDefaultParts = UUID('{7B396E54-9EC5-4300-BE0A-2482EBAE1A26}')
|
SidebarDefaultParts = UUID('{7B396E54-9EC5-4300-BE0A-2482EBAE1A26}')
|
||||||
SidebarParts = UUID('{A75D362E-50FC-4fb7-AC2C-A8BEAA314493}')
|
SidebarParts = UUID('{A75D362E-50FC-4fb7-AC2C-A8BEAA314493}')
|
||||||
SkyDrive = UUID('{A52BBA46-E9E1-435f-B3D9-28DAA648C0F6}')
|
SkyDrive = UUID('{A52BBA46-E9E1-435f-B3D9-28DAA648C0F6}')
|
||||||
SkyDriveCameraRoll = UUID('{767E6811-49CB-4273-87C2-20F355E1085B}')
|
SkyDriveCameraRoll = UUID('{767E6811-49CB-4273-87C2-20F355E1085B}')
|
||||||
SkyDriveDocuments = UUID('{24D89E24-2F19-4534-9DDE-6A6671FBB8FE}')
|
SkyDriveDocuments = UUID('{24D89E24-2F19-4534-9DDE-6A6671FBB8FE}')
|
||||||
SkyDrivePictures = UUID('{339719B5-8C47-4894-94C2-D8F77ADD44A6}')
|
SkyDrivePictures = UUID('{339719B5-8C47-4894-94C2-D8F77ADD44A6}')
|
||||||
StartMenu = UUID('{625B53C3-AB48-4EC1-BA1F-A1EF4146FC19}')
|
StartMenu = UUID('{625B53C3-AB48-4EC1-BA1F-A1EF4146FC19}')
|
||||||
Startup = UUID('{B97D20BB-F46A-4C97-BA10-5E3608430854}')
|
Startup = UUID('{B97D20BB-F46A-4C97-BA10-5E3608430854}')
|
||||||
System = UUID('{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}')
|
System = UUID('{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}')
|
||||||
SystemX86 = UUID('{D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27}')
|
SystemX86 = UUID('{D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27}')
|
||||||
Templates = UUID('{A63293E8-664E-48DB-A079-DF759E0509F7}')
|
Templates = UUID('{A63293E8-664E-48DB-A079-DF759E0509F7}')
|
||||||
UserPinned = UUID('{9E3995AB-1F9C-4F13-B827-48B24B6C7174}')
|
UserPinned = UUID('{9E3995AB-1F9C-4F13-B827-48B24B6C7174}')
|
||||||
UserProfiles = UUID('{0762D272-C50A-4BB0-A382-697DCD729B80}')
|
UserProfiles = UUID('{0762D272-C50A-4BB0-A382-697DCD729B80}')
|
||||||
UserProgramFiles = UUID('{5CD7AEE2-2219-4A67-B85D-6C9CE15660CB}')
|
UserProgramFiles = UUID('{5CD7AEE2-2219-4A67-B85D-6C9CE15660CB}')
|
||||||
UserProgramFilesCommon = UUID('{BCBD3057-CA5C-4622-B42D-BC56DB0AE516}')
|
UserProgramFilesCommon = UUID('{BCBD3057-CA5C-4622-B42D-BC56DB0AE516}')
|
||||||
Videos = UUID('{18989B1D-99B5-455B-841C-AB7C74E4DDFC}')
|
Videos = UUID('{18989B1D-99B5-455B-841C-AB7C74E4DDFC}')
|
||||||
VideosLibrary = UUID('{491E922F-5643-4AF4-A7EB-4E7A138D8174}')
|
VideosLibrary = UUID('{491E922F-5643-4AF4-A7EB-4E7A138D8174}')
|
||||||
Windows = UUID('{F38BF404-1D43-42F2-9305-67DE0B28FC23}')
|
Windows = UUID('{F38BF404-1D43-42F2-9305-67DE0B28FC23}')
|
||||||
|
|
||||||
class UserHandle: # [3]
|
class UserHandle: # [3]
|
||||||
current = wintypes.HANDLE(0)
|
current = wintypes.HANDLE(0)
|
||||||
common = wintypes.HANDLE(-1)
|
common = wintypes.HANDLE(-1)
|
||||||
|
|
||||||
_CoTaskMemFree = windll.ole32.CoTaskMemFree # [4]
|
_CoTaskMemFree = windll.ole32.CoTaskMemFree # [4]
|
||||||
_CoTaskMemFree.restype= None
|
_CoTaskMemFree.restype= None
|
||||||
_CoTaskMemFree.argtypes = [ctypes.c_void_p]
|
_CoTaskMemFree.argtypes = [ctypes.c_void_p]
|
||||||
|
|
||||||
_SHGetKnownFolderPath = windll.shell32.SHGetKnownFolderPath # [5] [3]
|
_SHGetKnownFolderPath = windll.shell32.SHGetKnownFolderPath # [5] [3]
|
||||||
_SHGetKnownFolderPath.argtypes = [
|
_SHGetKnownFolderPath.argtypes = [
|
||||||
ctypes.POINTER(GUID), wintypes.DWORD, wintypes.HANDLE, ctypes.POINTER(ctypes.c_wchar_p)
|
ctypes.POINTER(GUID), wintypes.DWORD, wintypes.HANDLE, ctypes.POINTER(ctypes.c_wchar_p)
|
||||||
]
|
]
|
||||||
|
|
||||||
class PathNotFoundException(Exception): pass
|
class PathNotFoundException(Exception): pass
|
||||||
|
|
||||||
def get_path(folderid, user_handle=UserHandle.common):
|
def get_path(folderid, user_handle=UserHandle.common):
|
||||||
fid = GUID(folderid)
|
fid = GUID(folderid)
|
||||||
pPath = ctypes.c_wchar_p()
|
pPath = ctypes.c_wchar_p()
|
||||||
S_OK = 0
|
S_OK = 0
|
||||||
if _SHGetKnownFolderPath(ctypes.byref(fid), 0, user_handle, ctypes.byref(pPath)) != S_OK:
|
if _SHGetKnownFolderPath(ctypes.byref(fid), 0, user_handle, ctypes.byref(pPath)) != S_OK:
|
||||||
raise PathNotFoundException()
|
raise PathNotFoundException()
|
||||||
path = pPath.value
|
path = pPath.value
|
||||||
_CoTaskMemFree(pPath)
|
_CoTaskMemFree(pPath)
|
||||||
return path
|
return path
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
if len(sys.argv) < 2 or sys.argv[1] in ['-?', '/?']:
|
if len(sys.argv) < 2 or sys.argv[1] in ['-?', '/?']:
|
||||||
print('python knownpaths.py FOLDERID {current|common}')
|
print('python knownpaths.py FOLDERID {current|common}')
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
folderid = getattr(FOLDERID, sys.argv[1])
|
folderid = getattr(FOLDERID, sys.argv[1])
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
print('Unknown folder id "%s"' % sys.argv[1], file=sys.stderr)
|
print('Unknown folder id "%s"' % sys.argv[1], file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if len(sys.argv) == 2:
|
if len(sys.argv) == 2:
|
||||||
print(get_path(folderid))
|
print(get_path(folderid))
|
||||||
else:
|
else:
|
||||||
print(get_path(folderid, getattr(UserHandle, sys.argv[2])))
|
print(get_path(folderid, getattr(UserHandle, sys.argv[2])))
|
||||||
except PathNotFoundException:
|
except PathNotFoundException:
|
||||||
print('Folder not found "%s"' % ' '.join(sys.argv[1:]), file=sys.stderr)
|
print('Folder not found "%s"' % ' '.join(sys.argv[1:]), file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# [1] http://msdn.microsoft.com/en-us/library/windows/desktop/aa373931.aspx
|
# [1] http://msdn.microsoft.com/en-us/library/windows/desktop/aa373931.aspx
|
||||||
# [2] http://msdn.microsoft.com/en-us/library/windows/desktop/dd378457.aspx
|
# [2] http://msdn.microsoft.com/en-us/library/windows/desktop/dd378457.aspx
|
||||||
# [3] http://msdn.microsoft.com/en-us/library/windows/desktop/bb762188.aspx
|
# [3] http://msdn.microsoft.com/en-us/library/windows/desktop/bb762188.aspx
|
||||||
# [4] http://msdn.microsoft.com/en-us/library/windows/desktop/ms680722.aspx
|
# [4] http://msdn.microsoft.com/en-us/library/windows/desktop/ms680722.aspx
|
||||||
# [5] http://www.themacaque.com/?p=954
|
# [5] http://www.themacaque.com/?p=954
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,42 @@
|
||||||
# Wizard Kit: Backup CBS Logs and prep CBS temp data for deletion
|
# Wizard Kit: Backup CBS Logs and prep CBS temp data for deletion
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.cleanup import *
|
from functions.cleanup import *
|
||||||
from functions.data import *
|
from functions.data import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: CBS Cleanup'.format(KIT_NAME_FULL))
|
os.system('title {}: CBS Cleanup'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\CBS Cleanup.log'.format(**global_vars)
|
global_vars['LogFile'] = r'{LogDir}\CBS Cleanup.log'.format(**global_vars)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
# Prep
|
# Prep
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
folder_path = r'{}\Backups'.format(KIT_NAME_SHORT)
|
folder_path = r'{}\Backups'.format(KIT_NAME_SHORT)
|
||||||
dest = select_destination(folder_path=folder_path,
|
dest = select_destination(folder_path=folder_path,
|
||||||
prompt='Which disk are we using for temp data and backup?')
|
prompt='Which disk are we using for temp data and backup?')
|
||||||
|
|
||||||
# Show details
|
# Show details
|
||||||
print_info('{}: CBS Cleanup Tool\n'.format(KIT_NAME_FULL))
|
print_info('{}: CBS Cleanup Tool\n'.format(KIT_NAME_FULL))
|
||||||
show_info('Backup / Temp path:', dest)
|
show_info('Backup / Temp path:', dest)
|
||||||
print_standard('\n')
|
print_standard('\n')
|
||||||
if (not ask('Proceed with CBS cleanup?')):
|
if (not ask('Proceed with CBS cleanup?')):
|
||||||
abort()
|
abort()
|
||||||
|
|
||||||
# Run Cleanup
|
# Run Cleanup
|
||||||
try_and_print(message='Running cleanup...', function=cleanup_cbs,
|
try_and_print(message='Running cleanup...', function=cleanup_cbs,
|
||||||
cs='Done', dest_folder=dest)
|
cs='Done', dest_folder=dest)
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
pause("Press Enter to exit...")
|
pause("Press Enter to exit...")
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,56 +1,56 @@
|
||||||
# Wizard Kit: Check or repair the %SYSTEMDRIVE% filesystem via CHKDSK
|
# Wizard Kit: Check or repair the %SYSTEMDRIVE% filesystem via CHKDSK
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.repairs import *
|
from functions.repairs import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: Check Disk Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: Check Disk Tool'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\Check Disk.log'.format(**global_vars)
|
global_vars['LogFile'] = r'{LogDir}\Check Disk.log'.format(**global_vars)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
other_results = {
|
other_results = {
|
||||||
'Error': {
|
'Error': {
|
||||||
'CalledProcessError': 'Unknown Error',
|
'CalledProcessError': 'Unknown Error',
|
||||||
},
|
},
|
||||||
'Warning': {
|
'Warning': {
|
||||||
'GenericRepair': 'Repaired',
|
'GenericRepair': 'Repaired',
|
||||||
'UnsupportedOSError': 'Unsupported OS',
|
'UnsupportedOSError': 'Unsupported OS',
|
||||||
}}
|
}}
|
||||||
options = [
|
options = [
|
||||||
{'Name': 'Run CHKDSK scan (read-only)', 'Repair': False},
|
{'Name': 'Run CHKDSK scan (read-only)', 'Repair': False},
|
||||||
{'Name': 'Schedule CHKDSK scan (offline repair)', 'Repair': True}]
|
{'Name': 'Schedule CHKDSK scan (offline repair)', 'Repair': True}]
|
||||||
actions = [{'Name': 'Quit', 'Letter': 'Q'}]
|
actions = [{'Name': 'Quit', 'Letter': 'Q'}]
|
||||||
selection = menu_select(
|
selection = menu_select(
|
||||||
'{}: Check Disk Menu\n'.format(KIT_NAME_FULL),
|
'{}: Check Disk Menu\n'.format(KIT_NAME_FULL),
|
||||||
main_entries=options,
|
main_entries=options,
|
||||||
action_entries=actions)
|
action_entries=actions)
|
||||||
print_info('{}: Check Disk Menu\n'.format(KIT_NAME_FULL))
|
print_info('{}: Check Disk Menu\n'.format(KIT_NAME_FULL))
|
||||||
if selection == 'Q':
|
if selection == 'Q':
|
||||||
abort()
|
abort()
|
||||||
elif selection.isnumeric():
|
elif selection.isnumeric():
|
||||||
repair = options[int(selection)-1]['Repair']
|
repair = options[int(selection)-1]['Repair']
|
||||||
if repair:
|
if repair:
|
||||||
cs = 'Scheduled'
|
cs = 'Scheduled'
|
||||||
else:
|
else:
|
||||||
cs = 'CS'
|
cs = 'CS'
|
||||||
message = 'CHKDSK ({SYSTEMDRIVE})...'.format(**global_vars['Env'])
|
message = 'CHKDSK ({SYSTEMDRIVE})...'.format(**global_vars['Env'])
|
||||||
try_and_print(message=message, function=run_chkdsk,
|
try_and_print(message=message, function=run_chkdsk,
|
||||||
cs=cs, other_results=other_results, repair=repair)
|
cs=cs, other_results=other_results, repair=repair)
|
||||||
else:
|
else:
|
||||||
abort()
|
abort()
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_success('Done.')
|
print_success('Done.')
|
||||||
pause("Press Enter to exit...")
|
pause("Press Enter to exit...")
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,57 +1,57 @@
|
||||||
# Wizard Kit: Check or repair component store health via DISM
|
# Wizard Kit: Check or repair component store health via DISM
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.repairs import *
|
from functions.repairs import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: DISM helper Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: DISM helper Tool'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\DISM helper tool.log'.format(**global_vars)
|
global_vars['LogFile'] = r'{LogDir}\DISM helper tool.log'.format(**global_vars)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
other_results = {
|
other_results = {
|
||||||
'Error': {
|
'Error': {
|
||||||
'CalledProcessError': 'Unknown Error',
|
'CalledProcessError': 'Unknown Error',
|
||||||
},
|
},
|
||||||
'Warning': {
|
'Warning': {
|
||||||
'GenericRepair': 'Repaired',
|
'GenericRepair': 'Repaired',
|
||||||
'UnsupportedOSError': 'Unsupported OS',
|
'UnsupportedOSError': 'Unsupported OS',
|
||||||
}}
|
}}
|
||||||
disabled = bool(global_vars['OS']['Version'] not in ['8', '10'])
|
disabled = bool(global_vars['OS']['Version'] not in ['8', '10'])
|
||||||
options = [
|
options = [
|
||||||
{'Name': 'Check Health', 'Repair': False, 'Disabled': disabled},
|
{'Name': 'Check Health', 'Repair': False, 'Disabled': disabled},
|
||||||
{'Name': 'Restore Health', 'Repair': True, 'Disabled': disabled}]
|
{'Name': 'Restore Health', 'Repair': True, 'Disabled': disabled}]
|
||||||
actions = [{'Name': 'Quit', 'Letter': 'Q'}]
|
actions = [{'Name': 'Quit', 'Letter': 'Q'}]
|
||||||
selection = menu_select(
|
selection = menu_select(
|
||||||
'{}: DISM Menu\n'.format(KIT_NAME_FULL),
|
'{}: DISM Menu\n'.format(KIT_NAME_FULL),
|
||||||
main_entries=options,
|
main_entries=options,
|
||||||
action_entries=actions)
|
action_entries=actions)
|
||||||
print_info('{}: DISM Menu\n'.format(KIT_NAME_FULL))
|
print_info('{}: DISM Menu\n'.format(KIT_NAME_FULL))
|
||||||
if selection == 'Q':
|
if selection == 'Q':
|
||||||
abort()
|
abort()
|
||||||
elif selection.isnumeric():
|
elif selection.isnumeric():
|
||||||
repair = options[int(selection)-1]['Repair']
|
repair = options[int(selection)-1]['Repair']
|
||||||
if repair:
|
if repair:
|
||||||
message='DISM RestoreHealth...'
|
message='DISM RestoreHealth...'
|
||||||
else:
|
else:
|
||||||
message='DISM ScanHealth...'
|
message='DISM ScanHealth...'
|
||||||
try_and_print(message=message, function=run_dism,
|
try_and_print(message=message, function=run_dism,
|
||||||
cs='No corruption', ns='Corruption detected',
|
cs='No corruption', ns='Corruption detected',
|
||||||
other_results=other_results, repair=repair)
|
other_results=other_results, repair=repair)
|
||||||
else:
|
else:
|
||||||
abort()
|
abort()
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_success('Done.')
|
print_success('Done.')
|
||||||
pause("Press Enter to exit...")
|
pause("Press Enter to exit...")
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,66 +1,66 @@
|
||||||
# Wizard Kit: Functions - Activation
|
# Wizard Kit: Functions - Activation
|
||||||
|
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from borrowed import acpi
|
from borrowed import acpi
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
from os import environ
|
from os import environ
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
SLMGR = r'{}\System32\slmgr.vbs'.format(environ.get('SYSTEMROOT'))
|
SLMGR = r'{}\System32\slmgr.vbs'.format(environ.get('SYSTEMROOT'))
|
||||||
|
|
||||||
def activate_with_bios():
|
def activate_with_bios():
|
||||||
"""Attempt to activate Windows with a key stored in the BIOS."""
|
"""Attempt to activate Windows with a key stored in the BIOS."""
|
||||||
# Code borrowed from https://github.com/aeruder/get_win8key
|
# Code borrowed from https://github.com/aeruder/get_win8key
|
||||||
#####################################################
|
#####################################################
|
||||||
#script to query windows 8.x OEM key from PC firmware
|
#script to query windows 8.x OEM key from PC firmware
|
||||||
#ACPI -> table MSDM -> raw content -> byte offset 56 to end
|
#ACPI -> table MSDM -> raw content -> byte offset 56 to end
|
||||||
#ck, 03-Jan-2014 (christian@korneck.de)
|
#ck, 03-Jan-2014 (christian@korneck.de)
|
||||||
#####################################################
|
#####################################################
|
||||||
bios_key = None
|
bios_key = None
|
||||||
table = b"MSDM"
|
table = b"MSDM"
|
||||||
if acpi.FindAcpiTable(table) is True:
|
if acpi.FindAcpiTable(table) is True:
|
||||||
rawtable = acpi.GetAcpiTable(table)
|
rawtable = acpi.GetAcpiTable(table)
|
||||||
#http://msdn.microsoft.com/library/windows/hardware/hh673514
|
#http://msdn.microsoft.com/library/windows/hardware/hh673514
|
||||||
#byte offset 36 from beginning \
|
#byte offset 36 from beginning \
|
||||||
# = Microsoft 'software licensing data structure' \
|
# = Microsoft 'software licensing data structure' \
|
||||||
# / 36 + 20 bytes offset from beginning = Win Key
|
# / 36 + 20 bytes offset from beginning = Win Key
|
||||||
bios_key = rawtable[56:len(rawtable)].decode("utf-8")
|
bios_key = rawtable[56:len(rawtable)].decode("utf-8")
|
||||||
if bios_key is None:
|
if bios_key is None:
|
||||||
raise BIOSKeyNotFoundError
|
raise BIOSKeyNotFoundError
|
||||||
|
|
||||||
# Install Key
|
# Install Key
|
||||||
cmd = ['cscript', '//nologo', SLMGR, '/ipk', bios_key]
|
cmd = ['cscript', '//nologo', SLMGR, '/ipk', bios_key]
|
||||||
subprocess.run(cmd, check=False)
|
subprocess.run(cmd, check=False)
|
||||||
sleep(5)
|
sleep(5)
|
||||||
|
|
||||||
# Attempt activation
|
# Attempt activation
|
||||||
cmd = ['cscript', '//nologo', SLMGR, '/ato']
|
cmd = ['cscript', '//nologo', SLMGR, '/ato']
|
||||||
subprocess.run(cmd, check=False)
|
subprocess.run(cmd, check=False)
|
||||||
sleep(5)
|
sleep(5)
|
||||||
|
|
||||||
# Check status
|
# Check status
|
||||||
if not windows_is_activated():
|
if not windows_is_activated():
|
||||||
raise Exception('Activation Failed')
|
raise Exception('Activation Failed')
|
||||||
|
|
||||||
def get_activation_string():
|
def get_activation_string():
|
||||||
"""Get activation status, returns str."""
|
"""Get activation status, returns str."""
|
||||||
act_str = subprocess.run(
|
act_str = subprocess.run(
|
||||||
['cscript', '//nologo', SLMGR, '/xpr'], check=False,
|
['cscript', '//nologo', SLMGR, '/xpr'], check=False,
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
act_str = act_str.stdout.decode()
|
act_str = act_str.stdout.decode()
|
||||||
act_str = act_str.splitlines()
|
act_str = act_str.splitlines()
|
||||||
act_str = act_str[1].strip()
|
act_str = act_str[1].strip()
|
||||||
return act_str
|
return act_str
|
||||||
|
|
||||||
def windows_is_activated():
|
def windows_is_activated():
|
||||||
"""Check if Windows is activated via slmgr.vbs and return bool."""
|
"""Check if Windows is activated via slmgr.vbs and return bool."""
|
||||||
activation_string = subprocess.run(
|
activation_string = subprocess.run(
|
||||||
['cscript', '//nologo', SLMGR, '/xpr'], check=False,
|
['cscript', '//nologo', SLMGR, '/xpr'], check=False,
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
activation_string = activation_string.stdout.decode()
|
activation_string = activation_string.stdout.decode()
|
||||||
|
|
||||||
return bool(activation_string and 'permanent' in activation_string)
|
return bool(activation_string and 'permanent' in activation_string)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,446 +1,446 @@
|
||||||
# Wizard Kit: Functions - Browsers
|
# Wizard Kit: Functions - Browsers
|
||||||
|
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
|
|
||||||
# Define other_results for later try_and_print
|
# Define other_results for later try_and_print
|
||||||
browser_data = {}
|
browser_data = {}
|
||||||
other_results = {
|
other_results = {
|
||||||
'Error': {
|
'Error': {
|
||||||
'MultipleInstallationsError': 'Multiple installations detected',
|
'MultipleInstallationsError': 'Multiple installations detected',
|
||||||
},
|
},
|
||||||
'Warning': {
|
'Warning': {
|
||||||
'NotInstalledError': 'Not installed',
|
'NotInstalledError': 'Not installed',
|
||||||
'NoProfilesError': 'No profiles found',
|
'NoProfilesError': 'No profiles found',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Regex
|
# Regex
|
||||||
REGEX_BACKUP = re.compile(
|
REGEX_BACKUP = re.compile(
|
||||||
r'\.\w*bak.*',
|
r'\.\w*bak.*',
|
||||||
re.IGNORECASE)
|
re.IGNORECASE)
|
||||||
REGEX_CHROMIUM_PROFILE = re.compile(
|
REGEX_CHROMIUM_PROFILE = re.compile(
|
||||||
r'^(Default|Profile)',
|
r'^(Default|Profile)',
|
||||||
re.IGNORECASE)
|
re.IGNORECASE)
|
||||||
REGEX_CHROMIUM_ITEMS = re.compile(
|
REGEX_CHROMIUM_ITEMS = re.compile(
|
||||||
r'^(Bookmarks|Cookies|Favicons|Google Profile'
|
r'^(Bookmarks|Cookies|Favicons|Google Profile'
|
||||||
r'|History|Login Data|Top Sites|TransportSecurity'
|
r'|History|Login Data|Top Sites|TransportSecurity'
|
||||||
r'|Visited Links|Web Data)',
|
r'|Visited Links|Web Data)',
|
||||||
re.IGNORECASE)
|
re.IGNORECASE)
|
||||||
REGEX_MOZILLA = re.compile(
|
REGEX_MOZILLA = re.compile(
|
||||||
r'^(bookmarkbackups|(cookies|formhistory|places).sqlite'
|
r'^(bookmarkbackups|(cookies|formhistory|places).sqlite'
|
||||||
r'|key3.db|logins.json|persdict.dat)$',
|
r'|key3.db|logins.json|persdict.dat)$',
|
||||||
re.IGNORECASE)
|
re.IGNORECASE)
|
||||||
|
|
||||||
# STATIC VARIABLES
|
# STATIC VARIABLES
|
||||||
DEFAULT_HOMEPAGE = 'https://www.google.com/'
|
DEFAULT_HOMEPAGE = 'https://www.google.com/'
|
||||||
IE_GALLERY = 'https://www.microsoft.com/en-us/iegallery'
|
IE_GALLERY = 'https://www.microsoft.com/en-us/iegallery'
|
||||||
MOZILLA_PREFS = {
|
MOZILLA_PREFS = {
|
||||||
'browser.search.defaultenginename': '"Google"',
|
'browser.search.defaultenginename': '"Google"',
|
||||||
'browser.search.defaultenginename.US': '"Google"',
|
'browser.search.defaultenginename.US': '"Google"',
|
||||||
'browser.search.geoSpecificDefaults': 'false',
|
'browser.search.geoSpecificDefaults': 'false',
|
||||||
'browser.startup.homepage': '"{}"'.format(DEFAULT_HOMEPAGE),
|
'browser.startup.homepage': '"{}"'.format(DEFAULT_HOMEPAGE),
|
||||||
'extensions.ui.lastCategory': '"addons://list/extension"',
|
'extensions.ui.lastCategory': '"addons://list/extension"',
|
||||||
}
|
}
|
||||||
UBO_CHROME = 'https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm?hl=en'
|
UBO_CHROME = 'https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm?hl=en'
|
||||||
UBO_CHROME_REG = r'Software\Wow6432Node\Google\Chrome\Extensions\cjpalhdlnbpafiamejdnhcphjbkeiagm'
|
UBO_CHROME_REG = r'Software\Wow6432Node\Google\Chrome\Extensions\cjpalhdlnbpafiamejdnhcphjbkeiagm'
|
||||||
UBO_EXTRA_CHROME = 'https://chrome.google.com/webstore/detail/ublock-origin-extra/pgdnlhfefecpicbbihgmbmffkjpaplco?hl=en'
|
UBO_EXTRA_CHROME = 'https://chrome.google.com/webstore/detail/ublock-origin-extra/pgdnlhfefecpicbbihgmbmffkjpaplco?hl=en'
|
||||||
UBO_EXTRA_CHROME_REG = r'Software\Wow6432Node\Google\Chrome\Extensions\pgdnlhfefecpicbbihgmbmffkjpaplco'
|
UBO_EXTRA_CHROME_REG = r'Software\Wow6432Node\Google\Chrome\Extensions\pgdnlhfefecpicbbihgmbmffkjpaplco'
|
||||||
UBO_MOZILLA = 'https://addons.mozilla.org/en-us/firefox/addon/ublock-origin/'
|
UBO_MOZILLA = 'https://addons.mozilla.org/en-us/firefox/addon/ublock-origin/'
|
||||||
UBO_OPERA = 'https://addons.opera.com/en/extensions/details/ublock/?display=en'
|
UBO_OPERA = 'https://addons.opera.com/en/extensions/details/ublock/?display=en'
|
||||||
SUPPORTED_BROWSERS = {
|
SUPPORTED_BROWSERS = {
|
||||||
'Internet Explorer': {
|
'Internet Explorer': {
|
||||||
'base': 'ie',
|
'base': 'ie',
|
||||||
'exe_name': 'iexplore.exe',
|
'exe_name': 'iexplore.exe',
|
||||||
'rel_install_path': 'Internet Explorer',
|
'rel_install_path': 'Internet Explorer',
|
||||||
'user_data_path': r'{USERPROFILE}\Favorites',
|
'user_data_path': r'{USERPROFILE}\Favorites',
|
||||||
},
|
},
|
||||||
'Google Chrome': {
|
'Google Chrome': {
|
||||||
'base': 'chromium',
|
'base': 'chromium',
|
||||||
'exe_name': 'chrome.exe',
|
'exe_name': 'chrome.exe',
|
||||||
'rel_install_path': r'Google\Chrome\Application',
|
'rel_install_path': r'Google\Chrome\Application',
|
||||||
'user_data_path': r'{LOCALAPPDATA}\Google\Chrome\User Data',
|
'user_data_path': r'{LOCALAPPDATA}\Google\Chrome\User Data',
|
||||||
},
|
},
|
||||||
'Google Chrome Canary': {
|
'Google Chrome Canary': {
|
||||||
'base': 'chromium',
|
'base': 'chromium',
|
||||||
'exe_name': 'chrome.exe',
|
'exe_name': 'chrome.exe',
|
||||||
'rel_install_path': r'Google\Chrome SxS\Application',
|
'rel_install_path': r'Google\Chrome SxS\Application',
|
||||||
'user_data_path': r'{LOCALAPPDATA}\Google\Chrome SxS\User Data',
|
'user_data_path': r'{LOCALAPPDATA}\Google\Chrome SxS\User Data',
|
||||||
},
|
},
|
||||||
'Mozilla Firefox': {
|
'Mozilla Firefox': {
|
||||||
'base': 'mozilla',
|
'base': 'mozilla',
|
||||||
'exe_name': 'firefox.exe',
|
'exe_name': 'firefox.exe',
|
||||||
'rel_install_path': 'Mozilla Firefox',
|
'rel_install_path': 'Mozilla Firefox',
|
||||||
'user_data_path': r'{APPDATA}\Mozilla\Firefox\Profiles',
|
'user_data_path': r'{APPDATA}\Mozilla\Firefox\Profiles',
|
||||||
},
|
},
|
||||||
'Mozilla Firefox Dev': {
|
'Mozilla Firefox Dev': {
|
||||||
'base': 'mozilla',
|
'base': 'mozilla',
|
||||||
'exe_name': 'firefox.exe',
|
'exe_name': 'firefox.exe',
|
||||||
'rel_install_path': 'Firefox Developer Edition',
|
'rel_install_path': 'Firefox Developer Edition',
|
||||||
'user_data_path': r'{APPDATA}\Mozilla\Firefox\Profiles',
|
'user_data_path': r'{APPDATA}\Mozilla\Firefox\Profiles',
|
||||||
},
|
},
|
||||||
'Opera': {
|
'Opera': {
|
||||||
'base': 'chromium',
|
'base': 'chromium',
|
||||||
'exe_name': 'launcher.exe',
|
'exe_name': 'launcher.exe',
|
||||||
'rel_install_path': 'Opera',
|
'rel_install_path': 'Opera',
|
||||||
'user_data_path': r'{APPDATA}\Opera Software\Opera Stable',
|
'user_data_path': r'{APPDATA}\Opera Software\Opera Stable',
|
||||||
},
|
},
|
||||||
'Opera Beta': {
|
'Opera Beta': {
|
||||||
'base': 'chromium',
|
'base': 'chromium',
|
||||||
'exe_name': 'launcher.exe',
|
'exe_name': 'launcher.exe',
|
||||||
'rel_install_path': 'Opera beta',
|
'rel_install_path': 'Opera beta',
|
||||||
'user_data_path': r'{APPDATA}\Opera Software\Opera Next',
|
'user_data_path': r'{APPDATA}\Opera Software\Opera Next',
|
||||||
},
|
},
|
||||||
'Opera Dev': {
|
'Opera Dev': {
|
||||||
'base': 'chromium',
|
'base': 'chromium',
|
||||||
'exe_name': 'launcher.exe',
|
'exe_name': 'launcher.exe',
|
||||||
'rel_install_path': 'Opera developer',
|
'rel_install_path': 'Opera developer',
|
||||||
'user_data_path': r'{APPDATA}\Opera Software\Opera Developer',
|
'user_data_path': r'{APPDATA}\Opera Software\Opera Developer',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
def archive_browser(name):
|
def archive_browser(name):
|
||||||
"""Create backup of Browser saved in the BackupDir."""
|
"""Create backup of Browser saved in the BackupDir."""
|
||||||
source = '{}*'.format(browser_data[name]['user_data_path'])
|
source = '{}*'.format(browser_data[name]['user_data_path'])
|
||||||
dest = r'{BackupDir}\Browsers ({USERNAME})'.format(
|
dest = r'{BackupDir}\Browsers ({USERNAME})'.format(
|
||||||
**global_vars, **global_vars['Env'])
|
**global_vars, **global_vars['Env'])
|
||||||
archive = r'{}\{}.7z'.format(dest, name)
|
archive = r'{}\{}.7z'.format(dest, name)
|
||||||
os.makedirs(dest, exist_ok=True)
|
os.makedirs(dest, exist_ok=True)
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['SevenZip'],
|
global_vars['Tools']['SevenZip'],
|
||||||
'a', '-aoa', '-bso0', '-bse0', '-mx=1',
|
'a', '-aoa', '-bso0', '-bse0', '-mx=1',
|
||||||
archive, source]
|
archive, source]
|
||||||
run_program(cmd)
|
run_program(cmd)
|
||||||
|
|
||||||
def backup_browsers():
|
def backup_browsers():
|
||||||
"""Create backup of all detected browser profiles."""
|
"""Create backup of all detected browser profiles."""
|
||||||
for name in [k for k, v in sorted(browser_data.items()) if v['profiles']]:
|
for name in [k for k, v in sorted(browser_data.items()) if v['profiles']]:
|
||||||
try_and_print(message='{}...'.format(name),
|
try_and_print(message='{}...'.format(name),
|
||||||
function=archive_browser, name=name)
|
function=archive_browser, name=name)
|
||||||
|
|
||||||
def clean_chromium_profile(profile):
|
def clean_chromium_profile(profile):
|
||||||
"""Renames profile, creates a new folder, and copies the user data to it."""
|
"""Renames profile, creates a new folder, and copies the user data to it."""
|
||||||
if profile is None:
|
if profile is None:
|
||||||
raise Exception
|
raise Exception
|
||||||
backup_path = '{path}_{Date}.bak'.format(
|
backup_path = '{path}_{Date}.bak'.format(
|
||||||
path=profile['path'], **global_vars)
|
path=profile['path'], **global_vars)
|
||||||
backup_path = non_clobber_rename(backup_path)
|
backup_path = non_clobber_rename(backup_path)
|
||||||
shutil.move(profile['path'], backup_path)
|
shutil.move(profile['path'], backup_path)
|
||||||
os.makedirs(profile['path'], exist_ok=True)
|
os.makedirs(profile['path'], exist_ok=True)
|
||||||
|
|
||||||
# Restore essential files from backup_path
|
# Restore essential files from backup_path
|
||||||
for entry in os.scandir(backup_path):
|
for entry in os.scandir(backup_path):
|
||||||
if REGEX_CHROMIUM_ITEMS.search(entry.name):
|
if REGEX_CHROMIUM_ITEMS.search(entry.name):
|
||||||
shutil.copy(entry.path, r'{}\{}'.format(
|
shutil.copy(entry.path, r'{}\{}'.format(
|
||||||
profile['path'], entry.name))
|
profile['path'], entry.name))
|
||||||
|
|
||||||
def clean_internet_explorer(**kwargs):
|
def clean_internet_explorer(**kwargs):
|
||||||
"""Uses the built-in function to reset IE and sets the homepage.
|
"""Uses the built-in function to reset IE and sets the homepage.
|
||||||
|
|
||||||
NOTE: kwargs set but unused as a workaround."""
|
NOTE: kwargs set but unused as a workaround."""
|
||||||
kill_process('iexplore.exe')
|
kill_process('iexplore.exe')
|
||||||
run_program(['rundll32.exe', 'inetcpl.cpl,ResetIEtoDefaults'], check=False)
|
run_program(['rundll32.exe', 'inetcpl.cpl,ResetIEtoDefaults'], check=False)
|
||||||
key = r'Software\Microsoft\Internet Explorer\Main'
|
key = r'Software\Microsoft\Internet Explorer\Main'
|
||||||
|
|
||||||
# Set homepage
|
# Set homepage
|
||||||
with winreg.OpenKey(HKCU, key, access=winreg.KEY_WRITE) as _key:
|
with winreg.OpenKey(HKCU, key, access=winreg.KEY_WRITE) as _key:
|
||||||
winreg.SetValueEx(_key, 'Start Page', 0,
|
winreg.SetValueEx(_key, 'Start Page', 0,
|
||||||
winreg.REG_SZ, DEFAULT_HOMEPAGE)
|
winreg.REG_SZ, DEFAULT_HOMEPAGE)
|
||||||
try:
|
try:
|
||||||
winreg.DeleteValue(_key, 'Secondary Start Pages')
|
winreg.DeleteValue(_key, 'Secondary Start Pages')
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def clean_mozilla_profile(profile):
|
def clean_mozilla_profile(profile):
|
||||||
"""Renames profile, creates a new folder, and copies the user data to it."""
|
"""Renames profile, creates a new folder, and copies the user data to it."""
|
||||||
if profile is None:
|
if profile is None:
|
||||||
raise Exception
|
raise Exception
|
||||||
backup_path = '{path}_{Date}.bak'.format(
|
backup_path = '{path}_{Date}.bak'.format(
|
||||||
path=profile['path'], **global_vars)
|
path=profile['path'], **global_vars)
|
||||||
backup_path = non_clobber_rename(backup_path)
|
backup_path = non_clobber_rename(backup_path)
|
||||||
shutil.move(profile['path'], backup_path)
|
shutil.move(profile['path'], backup_path)
|
||||||
homepages = []
|
homepages = []
|
||||||
os.makedirs(profile['path'], exist_ok=True)
|
os.makedirs(profile['path'], exist_ok=True)
|
||||||
|
|
||||||
# Restore essential files from backup_path
|
# Restore essential files from backup_path
|
||||||
for entry in os.scandir(backup_path):
|
for entry in os.scandir(backup_path):
|
||||||
if REGEX_MOZILLA.search(entry.name):
|
if REGEX_MOZILLA.search(entry.name):
|
||||||
if entry.is_dir():
|
if entry.is_dir():
|
||||||
shutil.copytree(entry.path, r'{}\{}'.format(
|
shutil.copytree(entry.path, r'{}\{}'.format(
|
||||||
profile['path'], entry.name))
|
profile['path'], entry.name))
|
||||||
else:
|
else:
|
||||||
shutil.copy(entry.path, r'{}\{}'.format(
|
shutil.copy(entry.path, r'{}\{}'.format(
|
||||||
profile['path'], entry.name))
|
profile['path'], entry.name))
|
||||||
|
|
||||||
# Set profile defaults
|
# Set profile defaults
|
||||||
with open(r'{path}\prefs.js'.format(**profile), 'a', encoding='ascii') as f:
|
with open(r'{path}\prefs.js'.format(**profile), 'a', encoding='ascii') as f:
|
||||||
for k, v in MOZILLA_PREFS.items():
|
for k, v in MOZILLA_PREFS.items():
|
||||||
f.write('user_pref("{}", {});\n'.format(k, v))
|
f.write('user_pref("{}", {});\n'.format(k, v))
|
||||||
|
|
||||||
def get_browser_details(name):
|
def get_browser_details(name):
|
||||||
"""Get installation status and profile details for all supported browsers."""
|
"""Get installation status and profile details for all supported browsers."""
|
||||||
browser = SUPPORTED_BROWSERS[name].copy()
|
browser = SUPPORTED_BROWSERS[name].copy()
|
||||||
|
|
||||||
# Update user_data_path
|
# Update user_data_path
|
||||||
browser['user_data_path'] = browser['user_data_path'].format(
|
browser['user_data_path'] = browser['user_data_path'].format(
|
||||||
**global_vars['Env'])
|
**global_vars['Env'])
|
||||||
|
|
||||||
# Find executable (if multiple files are found, the last one is used)
|
# Find executable (if multiple files are found, the last one is used)
|
||||||
exe_path = None
|
exe_path = None
|
||||||
num_installs = 0
|
num_installs = 0
|
||||||
for install_path in ['LOCALAPPDATA', 'PROGRAMFILES(X86)', 'PROGRAMFILES']:
|
for install_path in ['LOCALAPPDATA', 'PROGRAMFILES(X86)', 'PROGRAMFILES']:
|
||||||
test_path = r'{install_path}\{rel_install_path}\{exe_name}'.format(
|
test_path = r'{install_path}\{rel_install_path}\{exe_name}'.format(
|
||||||
install_path = global_vars['Env'].get(install_path, ''),
|
install_path = global_vars['Env'].get(install_path, ''),
|
||||||
**browser)
|
**browser)
|
||||||
if os.path.exists(test_path):
|
if os.path.exists(test_path):
|
||||||
num_installs += 1
|
num_installs += 1
|
||||||
exe_path = test_path
|
exe_path = test_path
|
||||||
|
|
||||||
# Find profile(s)
|
# Find profile(s)
|
||||||
profiles = []
|
profiles = []
|
||||||
if browser['base'] == 'ie':
|
if browser['base'] == 'ie':
|
||||||
profiles.append({'name': 'Default', 'path': None})
|
profiles.append({'name': 'Default', 'path': None})
|
||||||
elif 'Google Chrome' in name:
|
elif 'Google Chrome' in name:
|
||||||
profiles.extend(
|
profiles.extend(
|
||||||
get_chromium_profiles(
|
get_chromium_profiles(
|
||||||
search_path=browser['user_data_path']))
|
search_path=browser['user_data_path']))
|
||||||
elif browser['base'] == 'mozilla':
|
elif browser['base'] == 'mozilla':
|
||||||
dev = 'Dev' in name
|
dev = 'Dev' in name
|
||||||
profiles.extend(
|
profiles.extend(
|
||||||
get_mozilla_profiles(
|
get_mozilla_profiles(
|
||||||
search_path=browser['user_data_path'], dev=dev))
|
search_path=browser['user_data_path'], dev=dev))
|
||||||
if exe_path and not dev and len(profiles) == 0:
|
if exe_path and not dev and len(profiles) == 0:
|
||||||
# e.g. If Firefox is installed but no profiles were found.
|
# e.g. If Firefox is installed but no profiles were found.
|
||||||
## Rename profiles.ini and create a new default profile
|
## Rename profiles.ini and create a new default profile
|
||||||
profiles_ini_path = browser['user_data_path'].replace(
|
profiles_ini_path = browser['user_data_path'].replace(
|
||||||
'Profiles', 'profiles.ini')
|
'Profiles', 'profiles.ini')
|
||||||
if os.path.exists(profiles_ini_path):
|
if os.path.exists(profiles_ini_path):
|
||||||
backup_path = '{path}_{Date}.bak'.format(
|
backup_path = '{path}_{Date}.bak'.format(
|
||||||
path=profiles_ini_path, **global_vars)
|
path=profiles_ini_path, **global_vars)
|
||||||
backup_path = non_clobber_rename(backup_path)
|
backup_path = non_clobber_rename(backup_path)
|
||||||
shutil.move(profiles_ini_path, backup_path)
|
shutil.move(profiles_ini_path, backup_path)
|
||||||
run_program([exe_path, '-createprofile', 'default'], check=False)
|
run_program([exe_path, '-createprofile', 'default'], check=False)
|
||||||
profiles.extend(
|
profiles.extend(
|
||||||
get_mozilla_profiles(
|
get_mozilla_profiles(
|
||||||
search_path=browser['user_data_path'], dev=dev))
|
search_path=browser['user_data_path'], dev=dev))
|
||||||
|
|
||||||
elif 'Opera' in name:
|
elif 'Opera' in name:
|
||||||
if os.path.exists(browser['user_data_path']):
|
if os.path.exists(browser['user_data_path']):
|
||||||
profiles.append(
|
profiles.append(
|
||||||
{'name': 'Default', 'path': browser['user_data_path']})
|
{'name': 'Default', 'path': browser['user_data_path']})
|
||||||
|
|
||||||
# Get homepages
|
# Get homepages
|
||||||
if browser['base'] == 'ie':
|
if browser['base'] == 'ie':
|
||||||
# IE is set to only have one profile above
|
# IE is set to only have one profile above
|
||||||
profiles[0]['homepages'] = get_ie_homepages()
|
profiles[0]['homepages'] = get_ie_homepages()
|
||||||
elif browser['base'] == 'mozilla':
|
elif browser['base'] == 'mozilla':
|
||||||
for profile in profiles:
|
for profile in profiles:
|
||||||
prefs_path = r'{path}\prefs.js'.format(**profile)
|
prefs_path = r'{path}\prefs.js'.format(**profile)
|
||||||
profile['homepages'] = get_mozilla_homepages(prefs_path=prefs_path)
|
profile['homepages'] = get_mozilla_homepages(prefs_path=prefs_path)
|
||||||
|
|
||||||
# Add to browser_data
|
# Add to browser_data
|
||||||
browser_data[name] = browser
|
browser_data[name] = browser
|
||||||
browser_data[name].update({
|
browser_data[name].update({
|
||||||
'exe_path': exe_path,
|
'exe_path': exe_path,
|
||||||
'profiles': profiles,
|
'profiles': profiles,
|
||||||
})
|
})
|
||||||
|
|
||||||
# Raise installation warnings (if any)
|
# Raise installation warnings (if any)
|
||||||
if num_installs == 0:
|
if num_installs == 0:
|
||||||
raise NotInstalledError
|
raise NotInstalledError
|
||||||
elif num_installs > 1 and browser['base'] != 'ie':
|
elif num_installs > 1 and browser['base'] != 'ie':
|
||||||
raise MultipleInstallationsError
|
raise MultipleInstallationsError
|
||||||
|
|
||||||
def get_chromium_profiles(search_path):
|
def get_chromium_profiles(search_path):
|
||||||
"""Find any chromium-style profiles and return as a list of dicts."""
|
"""Find any chromium-style profiles and return as a list of dicts."""
|
||||||
profiles = []
|
profiles = []
|
||||||
try:
|
try:
|
||||||
for entry in os.scandir(search_path):
|
for entry in os.scandir(search_path):
|
||||||
if entry.is_dir() and REGEX_CHROMIUM_PROFILE.search(entry.name):
|
if entry.is_dir() and REGEX_CHROMIUM_PROFILE.search(entry.name):
|
||||||
profiles.append(entry)
|
profiles.append(entry)
|
||||||
REGEX_PROFILE_BACKUP = r'\.\w+bak.*'
|
REGEX_PROFILE_BACKUP = r'\.\w+bak.*'
|
||||||
profiles = [p for p in profiles if not REGEX_BACKUP.search(p.name)]
|
profiles = [p for p in profiles if not REGEX_BACKUP.search(p.name)]
|
||||||
# Convert os.DirEntries to dicts
|
# Convert os.DirEntries to dicts
|
||||||
profiles = [{'name': p.name, 'path': p.path} for p in profiles]
|
profiles = [{'name': p.name, 'path': p.path} for p in profiles]
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return profiles
|
return profiles
|
||||||
|
|
||||||
def get_ie_homepages():
|
def get_ie_homepages():
|
||||||
"""Read homepages from the registry and return as a list."""
|
"""Read homepages from the registry and return as a list."""
|
||||||
homepages = []
|
homepages = []
|
||||||
main_page = ''
|
main_page = ''
|
||||||
extra_pages = []
|
extra_pages = []
|
||||||
key = r'Software\Microsoft\Internet Explorer\Main'
|
key = r'Software\Microsoft\Internet Explorer\Main'
|
||||||
with winreg.OpenKey(HKCU, key) as _key:
|
with winreg.OpenKey(HKCU, key) as _key:
|
||||||
try:
|
try:
|
||||||
main_page = winreg.QueryValueEx(_key, 'Start Page')[0]
|
main_page = winreg.QueryValueEx(_key, 'Start Page')[0]
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
try:
|
try:
|
||||||
extra_pages = winreg.QueryValueEx(_key, 'Secondary Start Pages')[0]
|
extra_pages = winreg.QueryValueEx(_key, 'Secondary Start Pages')[0]
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
if main_page != '':
|
if main_page != '':
|
||||||
homepages.append(main_page)
|
homepages.append(main_page)
|
||||||
if len(extra_pages) > 0:
|
if len(extra_pages) > 0:
|
||||||
homepages.extend(extra_pages)
|
homepages.extend(extra_pages)
|
||||||
return homepages
|
return homepages
|
||||||
|
|
||||||
def get_mozilla_homepages(prefs_path):
|
def get_mozilla_homepages(prefs_path):
|
||||||
"""Read homepages from prefs.js and return as a list."""
|
"""Read homepages from prefs.js and return as a list."""
|
||||||
homepages = []
|
homepages = []
|
||||||
try:
|
try:
|
||||||
with open(prefs_path, 'r') as f:
|
with open(prefs_path, 'r') as f:
|
||||||
search = re.search(
|
search = re.search(
|
||||||
r'browser\.startup\.homepage", "([^"]*)"',
|
r'browser\.startup\.homepage", "([^"]*)"',
|
||||||
f.read(), re.IGNORECASE)
|
f.read(), re.IGNORECASE)
|
||||||
if search:
|
if search:
|
||||||
homepages = search.group(1).split('|')
|
homepages = search.group(1).split('|')
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return homepages
|
return homepages
|
||||||
|
|
||||||
def get_mozilla_profiles(search_path, dev=False):
|
def get_mozilla_profiles(search_path, dev=False):
|
||||||
"""Find any mozilla-style profiles and return as a list of dicts."""
|
"""Find any mozilla-style profiles and return as a list of dicts."""
|
||||||
profiles = []
|
profiles = []
|
||||||
try:
|
try:
|
||||||
for entry in os.scandir(search_path):
|
for entry in os.scandir(search_path):
|
||||||
if entry.is_dir():
|
if entry.is_dir():
|
||||||
if 'dev-edition' in entry.name:
|
if 'dev-edition' in entry.name:
|
||||||
# NOTE: Not always present which can lead
|
# NOTE: Not always present which can lead
|
||||||
# to Dev profiles being marked as non-Dev
|
# to Dev profiles being marked as non-Dev
|
||||||
## NOTE 2: It is possible that a non-Dev profile
|
## NOTE 2: It is possible that a non-Dev profile
|
||||||
## to be created with 'dev-edition' in the name.
|
## to be created with 'dev-edition' in the name.
|
||||||
## (It wouldn't make sense, but possible)
|
## (It wouldn't make sense, but possible)
|
||||||
if dev:
|
if dev:
|
||||||
profiles.append(entry)
|
profiles.append(entry)
|
||||||
elif not dev:
|
elif not dev:
|
||||||
profiles.append(entry)
|
profiles.append(entry)
|
||||||
profiles = [p for p in profiles if not REGEX_BACKUP.search(p.name)]
|
profiles = [p for p in profiles if not REGEX_BACKUP.search(p.name)]
|
||||||
# Convert os.DirEntries to dicts
|
# Convert os.DirEntries to dicts
|
||||||
profiles = [{'name': p.name, 'path': p.path} for p in profiles]
|
profiles = [{'name': p.name, 'path': p.path} for p in profiles]
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return profiles
|
return profiles
|
||||||
|
|
||||||
def install_adblock(indent=8, width=32):
|
def install_adblock(indent=8, width=32):
|
||||||
"""Install adblock for all supported browsers."""
|
"""Install adblock for all supported browsers."""
|
||||||
for browser in sorted(browser_data):
|
for browser in sorted(browser_data):
|
||||||
exe_path = browser_data[browser].get('exe_path', None)
|
exe_path = browser_data[browser].get('exe_path', None)
|
||||||
function=run_program
|
function=run_program
|
||||||
if not exe_path:
|
if not exe_path:
|
||||||
if browser_data[browser]['profiles']:
|
if browser_data[browser]['profiles']:
|
||||||
print_standard(
|
print_standard(
|
||||||
'{indent}{browser:<{width}}'.format(
|
'{indent}{browser:<{width}}'.format(
|
||||||
indent=' '*indent, width=width, browser=browser+'...'),
|
indent=' '*indent, width=width, browser=browser+'...'),
|
||||||
end='', flush=True)
|
end='', flush=True)
|
||||||
print_warning('Profile(s) detected but browser not installed',
|
print_warning('Profile(s) detected but browser not installed',
|
||||||
timestamp=False)
|
timestamp=False)
|
||||||
else:
|
else:
|
||||||
# Only warn if profile(s) are detected.
|
# Only warn if profile(s) are detected.
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
# Set urls to open
|
# Set urls to open
|
||||||
urls = []
|
urls = []
|
||||||
if browser_data[browser]['base'] == 'chromium':
|
if browser_data[browser]['base'] == 'chromium':
|
||||||
if browser == 'Google Chrome':
|
if browser == 'Google Chrome':
|
||||||
# Check for system exensions
|
# Check for system exensions
|
||||||
try:
|
try:
|
||||||
winreg.QueryValue(HKLM, UBO_CHROME_REG)
|
winreg.QueryValue(HKLM, UBO_CHROME_REG)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
urls.append(UBO_CHROME)
|
urls.append(UBO_CHROME)
|
||||||
try:
|
try:
|
||||||
winreg.QueryValue(HKLM, UBO_EXTRA_CHROME_REG)
|
winreg.QueryValue(HKLM, UBO_EXTRA_CHROME_REG)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
urls.append(UBO_EXTRA_CHROME)
|
urls.append(UBO_EXTRA_CHROME)
|
||||||
|
|
||||||
if len(urls) == 0:
|
if len(urls) == 0:
|
||||||
urls = ['chrome://extensions']
|
urls = ['chrome://extensions']
|
||||||
elif 'Opera' in browser:
|
elif 'Opera' in browser:
|
||||||
urls.append(UBO_OPERA)
|
urls.append(UBO_OPERA)
|
||||||
else:
|
else:
|
||||||
urls.append(UBO_CHROME)
|
urls.append(UBO_CHROME)
|
||||||
urls.append(UBO_EXTRA_CHROME)
|
urls.append(UBO_EXTRA_CHROME)
|
||||||
|
|
||||||
elif browser_data[browser]['base'] == 'mozilla':
|
elif browser_data[browser]['base'] == 'mozilla':
|
||||||
# Assume UBO is not installed first and change if it is
|
# Assume UBO is not installed first and change if it is
|
||||||
urls.append(UBO_MOZILLA)
|
urls.append(UBO_MOZILLA)
|
||||||
if browser == 'Mozilla Firefox':
|
if browser == 'Mozilla Firefox':
|
||||||
ubo = browser_data[browser]['exe_path'].replace(
|
ubo = browser_data[browser]['exe_path'].replace(
|
||||||
'firefox.exe',
|
'firefox.exe',
|
||||||
r'distribution\extensions\uBlock0@raymondhill.net')
|
r'distribution\extensions\uBlock0@raymondhill.net')
|
||||||
if os.path.exists(ubo):
|
if os.path.exists(ubo):
|
||||||
urls = ['about:addons']
|
urls = ['about:addons']
|
||||||
|
|
||||||
elif browser_data[browser]['base'] == 'ie':
|
elif browser_data[browser]['base'] == 'ie':
|
||||||
urls.append(IE_GALLERY)
|
urls.append(IE_GALLERY)
|
||||||
function=popen_program
|
function=popen_program
|
||||||
|
|
||||||
# By using check=False we're skipping any return codes so
|
# By using check=False we're skipping any return codes so
|
||||||
# it should only fail if the program can't be run
|
# it should only fail if the program can't be run
|
||||||
# (or can't be found).
|
# (or can't be found).
|
||||||
# In other words, this isn't tracking the addon/extension's
|
# In other words, this isn't tracking the addon/extension's
|
||||||
# installation status.
|
# installation status.
|
||||||
try_and_print(message='{}...'.format(browser),
|
try_and_print(message='{}...'.format(browser),
|
||||||
indent=indent, width=width,
|
indent=indent, width=width,
|
||||||
cs='Done', function=function,
|
cs='Done', function=function,
|
||||||
cmd=[exe_path, *urls], check=False)
|
cmd=[exe_path, *urls], check=False)
|
||||||
|
|
||||||
def list_homepages(indent=8, width=32):
|
def list_homepages(indent=8, width=32):
|
||||||
"""List current homepages for reference."""
|
"""List current homepages for reference."""
|
||||||
|
|
||||||
for browser in [k for k, v in sorted(browser_data.items()) if v['exe_path']]:
|
for browser in [k for k, v in sorted(browser_data.items()) if v['exe_path']]:
|
||||||
# Skip Chromium-based browsers
|
# Skip Chromium-based browsers
|
||||||
if browser_data[browser]['base'] == 'chromium':
|
if browser_data[browser]['base'] == 'chromium':
|
||||||
print_info(
|
print_info(
|
||||||
'{indent}{browser:<{width}}'.format(
|
'{indent}{browser:<{width}}'.format(
|
||||||
indent=' '*indent, width=width, browser=browser+'...'),
|
indent=' '*indent, width=width, browser=browser+'...'),
|
||||||
end='', flush=True)
|
end='', flush=True)
|
||||||
print_warning('Not implemented', timestamp=False)
|
print_warning('Not implemented', timestamp=False)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# All other browsers
|
# All other browsers
|
||||||
print_info('{indent}{browser:<{width}}'.format(
|
print_info('{indent}{browser:<{width}}'.format(
|
||||||
indent=' '*indent, width=width, browser=browser+'...'))
|
indent=' '*indent, width=width, browser=browser+'...'))
|
||||||
for profile in browser_data[browser].get('profiles', []):
|
for profile in browser_data[browser].get('profiles', []):
|
||||||
name = profile.get('name', '?')
|
name = profile.get('name', '?')
|
||||||
homepages = profile.get('homepages', [])
|
homepages = profile.get('homepages', [])
|
||||||
if len(homepages) == 0:
|
if len(homepages) == 0:
|
||||||
print_standard(
|
print_standard(
|
||||||
'{indent}{name:<{width}}'.format(
|
'{indent}{name:<{width}}'.format(
|
||||||
indent=' '*indent, width=width, name=name),
|
indent=' '*indent, width=width, name=name),
|
||||||
end='', flush=True)
|
end='', flush=True)
|
||||||
print_warning('None found', timestamp=False)
|
print_warning('None found', timestamp=False)
|
||||||
else:
|
else:
|
||||||
for page in homepages:
|
for page in homepages:
|
||||||
print_standard('{indent}{name:<{width}}{page}'.format(
|
print_standard('{indent}{name:<{width}}{page}'.format(
|
||||||
indent=' '*indent, width=width, name=name, page=page))
|
indent=' '*indent, width=width, name=name, page=page))
|
||||||
|
|
||||||
def reset_browsers(indent=8, width=32):
|
def reset_browsers(indent=8, width=32):
|
||||||
"""Reset all detected browsers to safe defaults."""
|
"""Reset all detected browsers to safe defaults."""
|
||||||
for browser in [k for k, v in sorted(browser_data.items()) if v['profiles']]:
|
for browser in [k for k, v in sorted(browser_data.items()) if v['profiles']]:
|
||||||
print_info('{indent}{name}'.format(indent=' '*indent, name=browser))
|
print_info('{indent}{name}'.format(indent=' '*indent, name=browser))
|
||||||
for profile in browser_data[browser]['profiles']:
|
for profile in browser_data[browser]['profiles']:
|
||||||
if browser_data[browser]['base'] == 'chromium':
|
if browser_data[browser]['base'] == 'chromium':
|
||||||
function = clean_chromium_profile
|
function = clean_chromium_profile
|
||||||
elif browser_data[browser]['base'] == 'ie':
|
elif browser_data[browser]['base'] == 'ie':
|
||||||
function = clean_internet_explorer
|
function = clean_internet_explorer
|
||||||
elif browser_data[browser]['base'] == 'mozilla':
|
elif browser_data[browser]['base'] == 'mozilla':
|
||||||
function = clean_mozilla_profile
|
function = clean_mozilla_profile
|
||||||
try_and_print(
|
try_and_print(
|
||||||
message='{}...'.format(profile['name']),
|
message='{}...'.format(profile['name']),
|
||||||
indent=indent, width=width, function=function,
|
indent=indent, width=width, function=function,
|
||||||
other_results=other_results, profile=profile)
|
other_results=other_results, profile=profile)
|
||||||
|
|
||||||
def scan_for_browsers():
|
def scan_for_browsers():
|
||||||
"""Scan system for any supported browsers."""
|
"""Scan system for any supported browsers."""
|
||||||
for name in sorted(SUPPORTED_BROWSERS):
|
for name in sorted(SUPPORTED_BROWSERS):
|
||||||
try_and_print(message='{}...'.format(name),
|
try_and_print(message='{}...'.format(name),
|
||||||
function=get_browser_details, cs='Detected',
|
function=get_browser_details, cs='Detected',
|
||||||
other_results=other_results, name=name)
|
other_results=other_results, name=name)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,91 +1,91 @@
|
||||||
# Wizard Kit: Functions - Cleanup
|
# Wizard Kit: Functions - Cleanup
|
||||||
|
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
|
|
||||||
def cleanup_adwcleaner():
|
def cleanup_adwcleaner():
|
||||||
"""Move AdwCleaner folders into the ClientDir."""
|
"""Move AdwCleaner folders into the ClientDir."""
|
||||||
source_path = r'{SYSTEMDRIVE}\AdwCleaner'.format(**global_vars['Env'])
|
source_path = r'{SYSTEMDRIVE}\AdwCleaner'.format(**global_vars['Env'])
|
||||||
source_quarantine = r'{}\Quarantine'.format(source_path)
|
source_quarantine = r'{}\Quarantine'.format(source_path)
|
||||||
|
|
||||||
# Quarantine
|
# Quarantine
|
||||||
if os.path.exists(source_quarantine):
|
if os.path.exists(source_quarantine):
|
||||||
os.makedirs(global_vars['QuarantineDir'], exist_ok=True)
|
os.makedirs(global_vars['QuarantineDir'], exist_ok=True)
|
||||||
dest_name = r'{QuarantineDir}\AdwCleaner_{Date-Time}'.format(
|
dest_name = r'{QuarantineDir}\AdwCleaner_{Date-Time}'.format(
|
||||||
**global_vars)
|
**global_vars)
|
||||||
dest_name = non_clobber_rename(dest_name)
|
dest_name = non_clobber_rename(dest_name)
|
||||||
shutil.move(source_quarantine, dest_name)
|
shutil.move(source_quarantine, dest_name)
|
||||||
|
|
||||||
# Delete source folder if empty
|
# Delete source folder if empty
|
||||||
try:
|
try:
|
||||||
os.rmdir(source_path)
|
os.rmdir(source_path)
|
||||||
except OSError:
|
except OSError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Main folder
|
# Main folder
|
||||||
if os.path.exists(source_path):
|
if os.path.exists(source_path):
|
||||||
os.makedirs(global_vars['ProgBackupDir'], exist_ok=True)
|
os.makedirs(global_vars['ProgBackupDir'], exist_ok=True)
|
||||||
dest_name = r'{ProgBackupDir}\AdwCleaner_{Date-Time}'.format(
|
dest_name = r'{ProgBackupDir}\AdwCleaner_{Date-Time}'.format(
|
||||||
**global_vars)
|
**global_vars)
|
||||||
dest_name = non_clobber_rename(dest_name)
|
dest_name = non_clobber_rename(dest_name)
|
||||||
shutil.move(source_path, dest_name)
|
shutil.move(source_path, dest_name)
|
||||||
|
|
||||||
def cleanup_cbs(dest_folder):
|
def cleanup_cbs(dest_folder):
|
||||||
"""Safely cleanup a known CBS archive bug under Windows 7.
|
"""Safely cleanup a known CBS archive bug under Windows 7.
|
||||||
|
|
||||||
If a CbsPersist file is larger than 2 Gb then the auto archive feature
|
If a CbsPersist file is larger than 2 Gb then the auto archive feature
|
||||||
continually fails and will fill up the system drive with temp files.
|
continually fails and will fill up the system drive with temp files.
|
||||||
|
|
||||||
This function moves the temp files and CbsPersist file to a temp folder,
|
This function moves the temp files and CbsPersist file to a temp folder,
|
||||||
compresses the CbsPersist files with 7-Zip, and then opens the temp folder
|
compresses the CbsPersist files with 7-Zip, and then opens the temp folder
|
||||||
for the user to manually save the backup files and delete the temp files.
|
for the user to manually save the backup files and delete the temp files.
|
||||||
"""
|
"""
|
||||||
backup_folder = r'{dest_folder}\CbsFix'.format(dest_folder=dest_folder)
|
backup_folder = r'{dest_folder}\CbsFix'.format(dest_folder=dest_folder)
|
||||||
temp_folder = r'{backup_folder}\Temp'.format(backup_folder=backup_folder)
|
temp_folder = r'{backup_folder}\Temp'.format(backup_folder=backup_folder)
|
||||||
os.makedirs(backup_folder, exist_ok=True)
|
os.makedirs(backup_folder, exist_ok=True)
|
||||||
os.makedirs(temp_folder, exist_ok=True)
|
os.makedirs(temp_folder, exist_ok=True)
|
||||||
|
|
||||||
# Move files into temp folder
|
# Move files into temp folder
|
||||||
cbs_path = r'{SYSTEMROOT}\Logs\CBS'.format(**global_vars['Env'])
|
cbs_path = r'{SYSTEMROOT}\Logs\CBS'.format(**global_vars['Env'])
|
||||||
for entry in os.scandir(cbs_path):
|
for entry in os.scandir(cbs_path):
|
||||||
# CbsPersist files
|
# CbsPersist files
|
||||||
if entry.name.lower().startswith('cbspersist'):
|
if entry.name.lower().startswith('cbspersist'):
|
||||||
dest_name = r'{}\{}'.format(temp_folder, entry.name)
|
dest_name = r'{}\{}'.format(temp_folder, entry.name)
|
||||||
dest_name = non_clobber_rename(dest_name)
|
dest_name = non_clobber_rename(dest_name)
|
||||||
shutil.move(entry.path, dest_name)
|
shutil.move(entry.path, dest_name)
|
||||||
temp_path = r'{SYSTEMROOT}\Temp'.format(**global_vars['Env'])
|
temp_path = r'{SYSTEMROOT}\Temp'.format(**global_vars['Env'])
|
||||||
for entry in os.scandir(temp_path):
|
for entry in os.scandir(temp_path):
|
||||||
# cab_ files
|
# cab_ files
|
||||||
if entry.name.lower().startswith('cab_'):
|
if entry.name.lower().startswith('cab_'):
|
||||||
dest_name = r'{}\{}'.format(temp_folder, entry.name)
|
dest_name = r'{}\{}'.format(temp_folder, entry.name)
|
||||||
dest_name = non_clobber_rename(dest_name)
|
dest_name = non_clobber_rename(dest_name)
|
||||||
shutil.move(entry.path, dest_name)
|
shutil.move(entry.path, dest_name)
|
||||||
|
|
||||||
# Compress CbsPersist files with 7-Zip
|
# Compress CbsPersist files with 7-Zip
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['SevenZip'],
|
global_vars['Tools']['SevenZip'],
|
||||||
'a', '-t7z', '-mx=3', '-bso0', '-bse0',
|
'a', '-t7z', '-mx=3', '-bso0', '-bse0',
|
||||||
r'{}\CbsPersists.7z'.format(backup_folder),
|
r'{}\CbsPersists.7z'.format(backup_folder),
|
||||||
r'{}\CbsPersist*'.format(temp_folder)]
|
r'{}\CbsPersist*'.format(temp_folder)]
|
||||||
run_program(cmd)
|
run_program(cmd)
|
||||||
|
|
||||||
def cleanup_desktop():
|
def cleanup_desktop():
|
||||||
"""Move known backup files and reports into the ClientDir."""
|
"""Move known backup files and reports into the ClientDir."""
|
||||||
dest_folder = r'{ProgBackupDir}\Desktop_{Date-Time}'.format(**global_vars)
|
dest_folder = r'{ProgBackupDir}\Desktop_{Date-Time}'.format(**global_vars)
|
||||||
os.makedirs(dest_folder, exist_ok=True)
|
os.makedirs(dest_folder, exist_ok=True)
|
||||||
|
|
||||||
desktop_path = r'{USERPROFILE}\Desktop'.format(**global_vars['Env'])
|
desktop_path = r'{USERPROFILE}\Desktop'.format(**global_vars['Env'])
|
||||||
for entry in os.scandir(desktop_path):
|
for entry in os.scandir(desktop_path):
|
||||||
# JRT, RKill, Shortcut cleaner
|
# JRT, RKill, Shortcut cleaner
|
||||||
if re.search(r'^(JRT|RKill|sc-cleaner)', entry.name, re.IGNORECASE):
|
if re.search(r'^(JRT|RKill|sc-cleaner)', entry.name, re.IGNORECASE):
|
||||||
dest_name = r'{}\{}'.format(dest_folder, entry.name)
|
dest_name = r'{}\{}'.format(dest_folder, entry.name)
|
||||||
dest_name = non_clobber_rename(dest_name)
|
dest_name = non_clobber_rename(dest_name)
|
||||||
shutil.move(entry.path, dest_name)
|
shutil.move(entry.path, dest_name)
|
||||||
|
|
||||||
# Remove dir if empty
|
# Remove dir if empty
|
||||||
try:
|
try:
|
||||||
os.rmdir(dest_folder)
|
os.rmdir(dest_folder)
|
||||||
except OSError:
|
except OSError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,114 +1,114 @@
|
||||||
# Wizard Kit: Functions - Diagnostics
|
# Wizard Kit: Functions - Diagnostics
|
||||||
|
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
|
|
||||||
# STATIC VARIABLES
|
# STATIC VARIABLES
|
||||||
AUTORUNS_SETTINGS = {
|
AUTORUNS_SETTINGS = {
|
||||||
r'Software\Sysinternals\AutoRuns': {
|
r'Software\Sysinternals\AutoRuns': {
|
||||||
'checkvirustotal': 1,
|
'checkvirustotal': 1,
|
||||||
'EulaAccepted': 1,
|
'EulaAccepted': 1,
|
||||||
'shownomicrosoft': 1,
|
'shownomicrosoft': 1,
|
||||||
'shownowindows': 1,
|
'shownowindows': 1,
|
||||||
'showonlyvirustotal': 1,
|
'showonlyvirustotal': 1,
|
||||||
'submitvirustotal': 0,
|
'submitvirustotal': 0,
|
||||||
'verifysignatures': 1,
|
'verifysignatures': 1,
|
||||||
},
|
},
|
||||||
r'Software\Sysinternals\AutoRuns\SigCheck': {
|
r'Software\Sysinternals\AutoRuns\SigCheck': {
|
||||||
'EulaAccepted': 1,
|
'EulaAccepted': 1,
|
||||||
},
|
},
|
||||||
r'Software\Sysinternals\AutoRuns\Streams': {
|
r'Software\Sysinternals\AutoRuns\Streams': {
|
||||||
'EulaAccepted': 1,
|
'EulaAccepted': 1,
|
||||||
},
|
},
|
||||||
r'Software\Sysinternals\AutoRuns\VirusTotal': {
|
r'Software\Sysinternals\AutoRuns\VirusTotal': {
|
||||||
'VirusTotalTermsAccepted': 1,
|
'VirusTotalTermsAccepted': 1,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
def check_connection():
|
def check_connection():
|
||||||
"""Check if the system is online and optionally abort the script."""
|
"""Check if the system is online and optionally abort the script."""
|
||||||
while True:
|
while True:
|
||||||
result = try_and_print(message='Ping test...', function=ping, cs='OK')
|
result = try_and_print(message='Ping test...', function=ping, cs='OK')
|
||||||
if result['CS']:
|
if result['CS']:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
if not ask('ERROR: System appears offline, try again?'):
|
if not ask('ERROR: System appears offline, try again?'):
|
||||||
if ask('Continue anyway?'):
|
if ask('Continue anyway?'):
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
abort()
|
abort()
|
||||||
|
|
||||||
def run_autoruns():
|
def run_autoruns():
|
||||||
"""Run AutoRuns in the background with VirusTotal checks enabled."""
|
"""Run AutoRuns in the background with VirusTotal checks enabled."""
|
||||||
extract_item('Autoruns', filter='autoruns*', silent=True)
|
extract_item('Autoruns', filter='autoruns*', silent=True)
|
||||||
# Update AutoRuns settings before running
|
# Update AutoRuns settings before running
|
||||||
for path, settings in AUTORUNS_SETTINGS.items():
|
for path, settings in AUTORUNS_SETTINGS.items():
|
||||||
winreg.CreateKey(HKCU, path)
|
winreg.CreateKey(HKCU, path)
|
||||||
with winreg.OpenKey(HKCU, path, access=winreg.KEY_WRITE) as key:
|
with winreg.OpenKey(HKCU, path, access=winreg.KEY_WRITE) as key:
|
||||||
for name, value in settings.items():
|
for name, value in settings.items():
|
||||||
winreg.SetValueEx(key, name, 0, winreg.REG_DWORD, value)
|
winreg.SetValueEx(key, name, 0, winreg.REG_DWORD, value)
|
||||||
popen_program(global_vars['Tools']['AutoRuns'], minimized=True)
|
popen_program(global_vars['Tools']['AutoRuns'], minimized=True)
|
||||||
|
|
||||||
def run_hwinfo_sensors():
|
def run_hwinfo_sensors():
|
||||||
"""Run HWiNFO sensors."""
|
"""Run HWiNFO sensors."""
|
||||||
path = r'{BinDir}\HWiNFO'.format(**global_vars)
|
path = r'{BinDir}\HWiNFO'.format(**global_vars)
|
||||||
for bit in [32, 64]:
|
for bit in [32, 64]:
|
||||||
# Configure
|
# Configure
|
||||||
source = r'{}\general.ini'.format(path)
|
source = r'{}\general.ini'.format(path)
|
||||||
dest = r'{}\HWiNFO{}.ini'.format(path, bit)
|
dest = r'{}\HWiNFO{}.ini'.format(path, bit)
|
||||||
shutil.copy(source, dest)
|
shutil.copy(source, dest)
|
||||||
with open(dest, 'a') as f:
|
with open(dest, 'a') as f:
|
||||||
f.write('SensorsOnly=1\n')
|
f.write('SensorsOnly=1\n')
|
||||||
f.write('SummaryOnly=0\n')
|
f.write('SummaryOnly=0\n')
|
||||||
popen_program(global_vars['Tools']['HWiNFO'])
|
popen_program(global_vars['Tools']['HWiNFO'])
|
||||||
|
|
||||||
def run_xmplay():
|
def run_xmplay():
|
||||||
"""Run XMPlay to test audio."""
|
"""Run XMPlay to test audio."""
|
||||||
extract_item('XMPlay', silent=True)
|
extract_item('XMPlay', silent=True)
|
||||||
cmd = [global_vars['Tools']['XMPlay'],
|
cmd = [global_vars['Tools']['XMPlay'],
|
||||||
r'{BinDir}\XMPlay\music.7z'.format(**global_vars)]
|
r'{BinDir}\XMPlay\music.7z'.format(**global_vars)]
|
||||||
popen_program(cmd)
|
popen_program(cmd)
|
||||||
|
|
||||||
def run_hitmanpro():
|
def run_hitmanpro():
|
||||||
"""Run HitmanPro in the background."""
|
"""Run HitmanPro in the background."""
|
||||||
extract_item('HitmanPro', silent=True)
|
extract_item('HitmanPro', silent=True)
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['HitmanPro'],
|
global_vars['Tools']['HitmanPro'],
|
||||||
'/quiet', '/noinstall', '/noupload',
|
'/quiet', '/noinstall', '/noupload',
|
||||||
r'/log={LogDir}\hitman.xml'.format(**global_vars)]
|
r'/log={LogDir}\hitman.xml'.format(**global_vars)]
|
||||||
popen_program(cmd)
|
popen_program(cmd)
|
||||||
|
|
||||||
def run_process_killer():
|
def run_process_killer():
|
||||||
"""Kill most running processes skipping those in the whitelist.txt."""
|
"""Kill most running processes skipping those in the whitelist.txt."""
|
||||||
# borrowed from TronScript (reddit.com/r/TronScript)
|
# borrowed from TronScript (reddit.com/r/TronScript)
|
||||||
# credit to /u/cuddlychops06
|
# credit to /u/cuddlychops06
|
||||||
prev_dir = os.getcwd()
|
prev_dir = os.getcwd()
|
||||||
extract_item('ProcessKiller', silent=True)
|
extract_item('ProcessKiller', silent=True)
|
||||||
os.chdir(r'{BinDir}\ProcessKiller'.format(**global_vars))
|
os.chdir(r'{BinDir}\ProcessKiller'.format(**global_vars))
|
||||||
run_program(['ProcessKiller.exe', '/silent'], check=False)
|
run_program(['ProcessKiller.exe', '/silent'], check=False)
|
||||||
os.chdir(prev_dir)
|
os.chdir(prev_dir)
|
||||||
|
|
||||||
def run_rkill():
|
def run_rkill():
|
||||||
"""Run RKill and cleanup afterwards."""
|
"""Run RKill and cleanup afterwards."""
|
||||||
extract_item('RKill', silent=True)
|
extract_item('RKill', silent=True)
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['RKill'],
|
global_vars['Tools']['RKill'],
|
||||||
'-l', r'{LogDir}\RKill.log'.format(**global_vars),
|
'-l', r'{LogDir}\RKill.log'.format(**global_vars),
|
||||||
'-new_console:n', '-new_console:s33V']
|
'-new_console:n', '-new_console:s33V']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
wait_for_process('RKill')
|
wait_for_process('RKill')
|
||||||
kill_process('notepad.exe')
|
kill_process('notepad.exe')
|
||||||
|
|
||||||
# RKill cleanup
|
# RKill cleanup
|
||||||
desktop_path = r'{USERPROFILE}\Desktop'.format(**global_vars['Env'])
|
desktop_path = r'{USERPROFILE}\Desktop'.format(**global_vars['Env'])
|
||||||
if os.path.exists(desktop_path):
|
if os.path.exists(desktop_path):
|
||||||
for item in os.scandir(desktop_path):
|
for item in os.scandir(desktop_path):
|
||||||
if re.search(r'^RKill', item.name, re.IGNORECASE):
|
if re.search(r'^RKill', item.name, re.IGNORECASE):
|
||||||
dest = re.sub(r'^(.*)\.', '\1_{Date-Time}.'.format(
|
dest = re.sub(r'^(.*)\.', '\1_{Date-Time}.'.format(
|
||||||
**global_vars), item.name)
|
**global_vars), item.name)
|
||||||
dest = r'{ClientDir}\Info\{name}'.format(
|
dest = r'{ClientDir}\Info\{name}'.format(
|
||||||
name=dest, **global_vars)
|
name=dest, **global_vars)
|
||||||
dest = non_clobber_rename(dest)
|
dest = non_clobber_rename(dest)
|
||||||
shutil.move(item.path, dest)
|
shutil.move(item.path, dest)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,467 +1,467 @@
|
||||||
# Wizard Kit: Functions - Information
|
# Wizard Kit: Functions - Information
|
||||||
|
|
||||||
from borrowed import knownpaths
|
from borrowed import knownpaths
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
from functions.activation import *
|
from functions.activation import *
|
||||||
|
|
||||||
# Regex
|
# Regex
|
||||||
REGEX_OFFICE = re.compile(
|
REGEX_OFFICE = re.compile(
|
||||||
r'(Microsoft (Office\s+'
|
r'(Microsoft (Office\s+'
|
||||||
r'(365|Enterprise|Home|Pro(\s|fessional)'
|
r'(365|Enterprise|Home|Pro(\s|fessional)'
|
||||||
r'|Single|Small|Standard|Starter|Ultimate|system)'
|
r'|Single|Small|Standard|Starter|Ultimate|system)'
|
||||||
r'|Works[-\s\d]+\d)'
|
r'|Works[-\s\d]+\d)'
|
||||||
r'|(Libre|Open|Star)\s*Office'
|
r'|(Libre|Open|Star)\s*Office'
|
||||||
r'|WordPerfect|Gnumeric|Abiword)',
|
r'|WordPerfect|Gnumeric|Abiword)',
|
||||||
re.IGNORECASE)
|
re.IGNORECASE)
|
||||||
|
|
||||||
# STATIC VARIABLES
|
# STATIC VARIABLES
|
||||||
REG_PROFILE_LIST = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
|
REG_PROFILE_LIST = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
|
||||||
REG_SHELL_FOLDERS = r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders'
|
REG_SHELL_FOLDERS = r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders'
|
||||||
TMP_HIVE_PATH = 'TEMP_HIVE_MOUNT'
|
TMP_HIVE_PATH = 'TEMP_HIVE_MOUNT'
|
||||||
EXTRA_FOLDERS = [
|
EXTRA_FOLDERS = [
|
||||||
'Dropbox',
|
'Dropbox',
|
||||||
'Google Drive',
|
'Google Drive',
|
||||||
'OneDrive',
|
'OneDrive',
|
||||||
'SkyDrive',
|
'SkyDrive',
|
||||||
]
|
]
|
||||||
SHELL_FOLDERS = {
|
SHELL_FOLDERS = {
|
||||||
#GUIDs from: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx
|
#GUIDs from: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx
|
||||||
'Desktop': (
|
'Desktop': (
|
||||||
'{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}',
|
'{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}',
|
||||||
),
|
),
|
||||||
'Documents': (
|
'Documents': (
|
||||||
'Personal',
|
'Personal',
|
||||||
'{FDD39AD0-238F-46AF-ADB4-6C85480369C7}',
|
'{FDD39AD0-238F-46AF-ADB4-6C85480369C7}',
|
||||||
),
|
),
|
||||||
'Downloads': (
|
'Downloads': (
|
||||||
'{374DE290-123F-4565-9164-39C4925E467B}',
|
'{374DE290-123F-4565-9164-39C4925E467B}',
|
||||||
),
|
),
|
||||||
'Favorites': (
|
'Favorites': (
|
||||||
'{1777F761-68AD-4D8A-87BD-30B759FA33DD}',
|
'{1777F761-68AD-4D8A-87BD-30B759FA33DD}',
|
||||||
),
|
),
|
||||||
'Music': (
|
'Music': (
|
||||||
'My Music',
|
'My Music',
|
||||||
'{4BD8D571-6D19-48D3-BE97-422220080E43}',
|
'{4BD8D571-6D19-48D3-BE97-422220080E43}',
|
||||||
),
|
),
|
||||||
'Pictures': (
|
'Pictures': (
|
||||||
'My Pictures',
|
'My Pictures',
|
||||||
'{33E28130-4E1E-4676-835A-98395C3BC3BB}',
|
'{33E28130-4E1E-4676-835A-98395C3BC3BB}',
|
||||||
),
|
),
|
||||||
'Videos': (
|
'Videos': (
|
||||||
'My Video',
|
'My Video',
|
||||||
'{18989B1D-99B5-455B-841C-AB7C74E4DDFC}',
|
'{18989B1D-99B5-455B-841C-AB7C74E4DDFC}',
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
def backup_file_list():
|
def backup_file_list():
|
||||||
"""Export current file listing for the system."""
|
"""Export current file listing for the system."""
|
||||||
extract_item('Everything', silent=True)
|
extract_item('Everything', silent=True)
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['Everything'],
|
global_vars['Tools']['Everything'],
|
||||||
'-nodb',
|
'-nodb',
|
||||||
'-create-filelist',
|
'-create-filelist',
|
||||||
r'{LogDir}\File List.txt'.format(**global_vars),
|
r'{LogDir}\File List.txt'.format(**global_vars),
|
||||||
global_vars['Env']['SYSTEMDRIVE']]
|
global_vars['Env']['SYSTEMDRIVE']]
|
||||||
run_program(cmd)
|
run_program(cmd)
|
||||||
|
|
||||||
def backup_power_plans():
|
def backup_power_plans():
|
||||||
"""Export current power plans."""
|
"""Export current power plans."""
|
||||||
os.makedirs(r'{BackupDir}\Power Plans'.format(**global_vars), exist_ok=True)
|
os.makedirs(r'{BackupDir}\Power Plans'.format(**global_vars), exist_ok=True)
|
||||||
plans = run_program(['powercfg', '/L'])
|
plans = run_program(['powercfg', '/L'])
|
||||||
plans = plans.stdout.decode().splitlines()
|
plans = plans.stdout.decode().splitlines()
|
||||||
plans = [p for p in plans if re.search(r'^Power Scheme', p)]
|
plans = [p for p in plans if re.search(r'^Power Scheme', p)]
|
||||||
for p in plans:
|
for p in plans:
|
||||||
guid = re.sub(r'Power Scheme GUID:\s+([0-9a-f\-]+).*', r'\1', p)
|
guid = re.sub(r'Power Scheme GUID:\s+([0-9a-f\-]+).*', r'\1', p)
|
||||||
name = re.sub(
|
name = re.sub(
|
||||||
r'Power Scheme GUID:\s+[0-9a-f\-]+\s+\(([^\)]+)\).*', r'\1', p)
|
r'Power Scheme GUID:\s+[0-9a-f\-]+\s+\(([^\)]+)\).*', r'\1', p)
|
||||||
out = r'{BackupDir}\Power Plans\{name}.pow'.format(
|
out = r'{BackupDir}\Power Plans\{name}.pow'.format(
|
||||||
name=name, **global_vars)
|
name=name, **global_vars)
|
||||||
if not os.path.exists(out):
|
if not os.path.exists(out):
|
||||||
cmd = ['powercfg', '-export', out, guid]
|
cmd = ['powercfg', '-export', out, guid]
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
def backup_registry():
|
def backup_registry():
|
||||||
"""Backup registry including user hives."""
|
"""Backup registry including user hives."""
|
||||||
extract_item('erunt', silent=True)
|
extract_item('erunt', silent=True)
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['ERUNT'],
|
global_vars['Tools']['ERUNT'],
|
||||||
r'{BackupDir}\Registry'.format(**global_vars),
|
r'{BackupDir}\Registry'.format(**global_vars),
|
||||||
'sysreg',
|
'sysreg',
|
||||||
'curuser',
|
'curuser',
|
||||||
'otherusers',
|
'otherusers',
|
||||||
'/noprogresswindow']
|
'/noprogresswindow']
|
||||||
run_program(cmd)
|
run_program(cmd)
|
||||||
|
|
||||||
def get_folder_size(path):
|
def get_folder_size(path):
|
||||||
"""Get (human-readable) size of folder passed, returns str."""
|
"""Get (human-readable) size of folder passed, returns str."""
|
||||||
size = 'Unknown'
|
size = 'Unknown'
|
||||||
cmd = [global_vars['Tools']['Du'], '-nobanner', '-q', path]
|
cmd = [global_vars['Tools']['Du'], '-nobanner', '-q', path]
|
||||||
try:
|
try:
|
||||||
out = run_program(cmd)
|
out = run_program(cmd)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
# Failed to find folder
|
# Failed to find folder
|
||||||
pass
|
pass
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
# Failed to get folder size
|
# Failed to get folder size
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
size = out.stdout.decode().splitlines()[4]
|
size = out.stdout.decode().splitlines()[4]
|
||||||
size = re.sub(r'Size:\s+([\d,]+)\sbytes$', r'\1', size)
|
size = re.sub(r'Size:\s+([\d,]+)\sbytes$', r'\1', size)
|
||||||
size = size.replace(',', '')
|
size = size.replace(',', '')
|
||||||
size = human_readable_size(size)
|
size = human_readable_size(size)
|
||||||
return size
|
return size
|
||||||
|
|
||||||
def get_installed_office():
|
def get_installed_office():
|
||||||
"""Get list of installed Office programs."""
|
"""Get list of installed Office programs."""
|
||||||
programs = []
|
programs = []
|
||||||
log_file = r'{LogDir}\Installed Program List (AIDA64).txt'.format(
|
log_file = r'{LogDir}\Installed Program List (AIDA64).txt'.format(
|
||||||
**global_vars)
|
**global_vars)
|
||||||
with open (log_file, 'r') as f:
|
with open (log_file, 'r') as f:
|
||||||
for line in sorted(f.readlines()):
|
for line in sorted(f.readlines()):
|
||||||
if REGEX_OFFICE.search(line):
|
if REGEX_OFFICE.search(line):
|
||||||
programs.append(line[4:82].strip())
|
programs.append(line[4:82].strip())
|
||||||
|
|
||||||
if len(programs) == 0:
|
if len(programs) == 0:
|
||||||
programs = ['No programs found']
|
programs = ['No programs found']
|
||||||
return programs
|
return programs
|
||||||
|
|
||||||
def get_shell_path(folder, user='current'):
|
def get_shell_path(folder, user='current'):
|
||||||
"""Get shell path using SHGetKnownFolderPath via knownpaths, returns str.
|
"""Get shell path using SHGetKnownFolderPath via knownpaths, returns str.
|
||||||
|
|
||||||
NOTE: Only works for the current user.
|
NOTE: Only works for the current user.
|
||||||
Code based on https://gist.github.com/mkropat/7550097
|
Code based on https://gist.github.com/mkropat/7550097
|
||||||
"""
|
"""
|
||||||
path = None
|
path = None
|
||||||
folderid = None
|
folderid = None
|
||||||
if user.lower() == 'public':
|
if user.lower() == 'public':
|
||||||
user = 'common'
|
user = 'common'
|
||||||
try:
|
try:
|
||||||
folderid = getattr(knownpaths.FOLDERID, folder)
|
folderid = getattr(knownpaths.FOLDERID, folder)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
# Unknown folder ID, ignore and return None
|
# Unknown folder ID, ignore and return None
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if folderid:
|
if folderid:
|
||||||
try:
|
try:
|
||||||
path = knownpaths.get_path(folderid, getattr(knownpaths.UserHandle, user))
|
path = knownpaths.get_path(folderid, getattr(knownpaths.UserHandle, user))
|
||||||
except PathNotFoundError:
|
except PathNotFoundError:
|
||||||
# Folder not found, ignore and return None
|
# Folder not found, ignore and return None
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return path
|
return path
|
||||||
|
|
||||||
def get_user_data_paths(user):
|
def get_user_data_paths(user):
|
||||||
"""Get user data paths for provided user, returns dict."""
|
"""Get user data paths for provided user, returns dict."""
|
||||||
hive_path = user['SID']
|
hive_path = user['SID']
|
||||||
paths = {
|
paths = {
|
||||||
'Profile': {
|
'Profile': {
|
||||||
'Path': None,
|
'Path': None,
|
||||||
},
|
},
|
||||||
'Shell Folders': {},
|
'Shell Folders': {},
|
||||||
'Extra Folders': {},
|
'Extra Folders': {},
|
||||||
}
|
}
|
||||||
unload_hive = False
|
unload_hive = False
|
||||||
|
|
||||||
if user['Name'] == global_vars['Env']['USERNAME']:
|
if user['Name'] == global_vars['Env']['USERNAME']:
|
||||||
# We can use SHGetKnownFolderPath for the current user
|
# We can use SHGetKnownFolderPath for the current user
|
||||||
paths['Profile']['Path'] = get_shell_path('Profile')
|
paths['Profile']['Path'] = get_shell_path('Profile')
|
||||||
paths['Shell Folders'] = {f: {'Path': get_shell_path(f)}
|
paths['Shell Folders'] = {f: {'Path': get_shell_path(f)}
|
||||||
for f in SHELL_FOLDERS.keys()}
|
for f in SHELL_FOLDERS.keys()}
|
||||||
else:
|
else:
|
||||||
# We have to use the NTUSER.dat hives which isn't recommended by MS
|
# We have to use the NTUSER.dat hives which isn't recommended by MS
|
||||||
try:
|
try:
|
||||||
key_path = r'{}\{}'.format(REG_PROFILE_LIST, user['SID'])
|
key_path = r'{}\{}'.format(REG_PROFILE_LIST, user['SID'])
|
||||||
with winreg.OpenKey(HKLM, key_path) as key:
|
with winreg.OpenKey(HKLM, key_path) as key:
|
||||||
paths['Profile']['Path'] = winreg.QueryValueEx(
|
paths['Profile']['Path'] = winreg.QueryValueEx(
|
||||||
key, 'ProfileImagePath')[0]
|
key, 'ProfileImagePath')[0]
|
||||||
except Exception:
|
except Exception:
|
||||||
# Profile path not found, leaving as None.
|
# Profile path not found, leaving as None.
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Shell folders (Prep)
|
# Shell folders (Prep)
|
||||||
if not reg_path_exists(HKU, hive_path) and paths['Profile']['Path']:
|
if not reg_path_exists(HKU, hive_path) and paths['Profile']['Path']:
|
||||||
# User not logged-in, loading hive
|
# User not logged-in, loading hive
|
||||||
# Also setting unload_hive so it will be unloaded later.
|
# Also setting unload_hive so it will be unloaded later.
|
||||||
hive_path = TMP_HIVE_PATH
|
hive_path = TMP_HIVE_PATH
|
||||||
cmd = ['reg', 'load', r'HKU\{}'.format(TMP_HIVE_PATH),
|
cmd = ['reg', 'load', r'HKU\{}'.format(TMP_HIVE_PATH),
|
||||||
r'{}\NTUSER.DAT'.format(paths['Profile']['Path'])]
|
r'{}\NTUSER.DAT'.format(paths['Profile']['Path'])]
|
||||||
unload_hive = True
|
unload_hive = True
|
||||||
try:
|
try:
|
||||||
run_program(cmd)
|
run_program(cmd)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
# Failed to load user hive
|
# Failed to load user hive
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Shell folders
|
# Shell folders
|
||||||
shell_folders = r'{}\{}'.format(hive_path, REG_SHELL_FOLDERS)
|
shell_folders = r'{}\{}'.format(hive_path, REG_SHELL_FOLDERS)
|
||||||
if (reg_path_exists(HKU, hive_path)
|
if (reg_path_exists(HKU, hive_path)
|
||||||
and reg_path_exists(HKU, shell_folders)):
|
and reg_path_exists(HKU, shell_folders)):
|
||||||
with winreg.OpenKey(HKU, shell_folders) as key:
|
with winreg.OpenKey(HKU, shell_folders) as key:
|
||||||
for folder, values in SHELL_FOLDERS.items():
|
for folder, values in SHELL_FOLDERS.items():
|
||||||
for value in values:
|
for value in values:
|
||||||
try:
|
try:
|
||||||
path = winreg.QueryValueEx(key, value)[0]
|
path = winreg.QueryValueEx(key, value)[0]
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
# Skip missing values
|
# Skip missing values
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
paths['Shell Folders'][folder] = {'Path': path}
|
paths['Shell Folders'][folder] = {'Path': path}
|
||||||
# Stop checking values for this folder
|
# Stop checking values for this folder
|
||||||
break
|
break
|
||||||
|
|
||||||
# Shell folder (extra check)
|
# Shell folder (extra check)
|
||||||
if paths['Profile']['Path']:
|
if paths['Profile']['Path']:
|
||||||
for folder in SHELL_FOLDERS.keys():
|
for folder in SHELL_FOLDERS.keys():
|
||||||
folder_path = r'{Path}\{folder}'.format(
|
folder_path = r'{Path}\{folder}'.format(
|
||||||
folder=folder, **paths['Profile'])
|
folder=folder, **paths['Profile'])
|
||||||
if (folder not in paths['Shell Folders']
|
if (folder not in paths['Shell Folders']
|
||||||
and os.path.exists(folder_path)):
|
and os.path.exists(folder_path)):
|
||||||
paths['Shell Folders'][folder] = {'Path': folder_path}
|
paths['Shell Folders'][folder] = {'Path': folder_path}
|
||||||
|
|
||||||
# Extra folders
|
# Extra folders
|
||||||
if paths['Profile']['Path']:
|
if paths['Profile']['Path']:
|
||||||
for folder in EXTRA_FOLDERS:
|
for folder in EXTRA_FOLDERS:
|
||||||
folder_path = r'{Path}\{folder}'.format(
|
folder_path = r'{Path}\{folder}'.format(
|
||||||
folder=folder, **paths['Profile'])
|
folder=folder, **paths['Profile'])
|
||||||
if os.path.exists(folder_path):
|
if os.path.exists(folder_path):
|
||||||
paths['Extra Folders'][folder] = {'Path': folder_path}
|
paths['Extra Folders'][folder] = {'Path': folder_path}
|
||||||
|
|
||||||
# Shell folders (cleanup)
|
# Shell folders (cleanup)
|
||||||
if unload_hive:
|
if unload_hive:
|
||||||
cmd = ['reg', 'unload', r'HKU\{}'.format(TMP_HIVE_PATH)]
|
cmd = ['reg', 'unload', r'HKU\{}'.format(TMP_HIVE_PATH)]
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
return paths
|
return paths
|
||||||
|
|
||||||
def get_user_folder_sizes(users):
|
def get_user_folder_sizes(users):
|
||||||
"""Update list(users) to include folder paths and sizes."""
|
"""Update list(users) to include folder paths and sizes."""
|
||||||
extract_item('du', filter='du*', silent=True)
|
extract_item('du', filter='du*', silent=True)
|
||||||
# Configure Du
|
# Configure Du
|
||||||
winreg.CreateKey(HKCU, r'Software\Sysinternals\Du')
|
winreg.CreateKey(HKCU, r'Software\Sysinternals\Du')
|
||||||
with winreg.OpenKey(HKCU,
|
with winreg.OpenKey(HKCU,
|
||||||
r'Software\Sysinternals\Du', access=winreg.KEY_WRITE) as key:
|
r'Software\Sysinternals\Du', access=winreg.KEY_WRITE) as key:
|
||||||
winreg.SetValueEx(key, 'EulaAccepted', 0, winreg.REG_DWORD, 1)
|
winreg.SetValueEx(key, 'EulaAccepted', 0, winreg.REG_DWORD, 1)
|
||||||
|
|
||||||
for u in users:
|
for u in users:
|
||||||
u.update(get_user_data_paths(u))
|
u.update(get_user_data_paths(u))
|
||||||
if u['Profile']['Path']:
|
if u['Profile']['Path']:
|
||||||
u['Profile']['Size'] = get_folder_size(u['Profile']['Path'])
|
u['Profile']['Size'] = get_folder_size(u['Profile']['Path'])
|
||||||
for folder in u['Shell Folders'].keys():
|
for folder in u['Shell Folders'].keys():
|
||||||
u['Shell Folders'][folder]['Size'] = get_folder_size(
|
u['Shell Folders'][folder]['Size'] = get_folder_size(
|
||||||
u['Shell Folders'][folder]['Path'])
|
u['Shell Folders'][folder]['Path'])
|
||||||
for folder in u['Extra Folders'].keys():
|
for folder in u['Extra Folders'].keys():
|
||||||
u['Extra Folders'][folder]['Size'] = get_folder_size(
|
u['Extra Folders'][folder]['Size'] = get_folder_size(
|
||||||
u['Extra Folders'][folder]['Path'])
|
u['Extra Folders'][folder]['Path'])
|
||||||
|
|
||||||
def get_user_list():
|
def get_user_list():
|
||||||
"""Get user list via WMIC, returns list of dicts."""
|
"""Get user list via WMIC, returns list of dicts."""
|
||||||
users = []
|
users = []
|
||||||
|
|
||||||
# Get user info from WMI
|
# Get user info from WMI
|
||||||
cmd = ['wmic', 'useraccount', 'get', '/format:csv']
|
cmd = ['wmic', 'useraccount', 'get', '/format:csv']
|
||||||
try:
|
try:
|
||||||
out = run_program(cmd)
|
out = run_program(cmd)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
# Meh, return empty list to avoid a full crash
|
# Meh, return empty list to avoid a full crash
|
||||||
return users
|
return users
|
||||||
|
|
||||||
entries = out.stdout.decode().splitlines()
|
entries = out.stdout.decode().splitlines()
|
||||||
entries = [e.strip().split(',') for e in entries if e.strip()]
|
entries = [e.strip().split(',') for e in entries if e.strip()]
|
||||||
|
|
||||||
# Add user(s) to dict
|
# Add user(s) to dict
|
||||||
keys = entries[0]
|
keys = entries[0]
|
||||||
for e in entries[1:]:
|
for e in entries[1:]:
|
||||||
# Create dict using 1st line (keys)
|
# Create dict using 1st line (keys)
|
||||||
e = dict(zip(keys, e))
|
e = dict(zip(keys, e))
|
||||||
# Set Active status via 'Disabled' TRUE/FALSE str
|
# Set Active status via 'Disabled' TRUE/FALSE str
|
||||||
e['Active'] = bool(e['Disabled'].upper() == 'FALSE')
|
e['Active'] = bool(e['Disabled'].upper() == 'FALSE')
|
||||||
# Assume SIDs ending with 1000+ are "Standard" and others are "System"
|
# Assume SIDs ending with 1000+ are "Standard" and others are "System"
|
||||||
e['Type'] = 'Standard' if re.search(r'-1\d+$', e['SID']) else 'System'
|
e['Type'] = 'Standard' if re.search(r'-1\d+$', e['SID']) else 'System'
|
||||||
users.append(e)
|
users.append(e)
|
||||||
|
|
||||||
# Sort list
|
# Sort list
|
||||||
users.sort(key=itemgetter('Name'))
|
users.sort(key=itemgetter('Name'))
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
return users
|
return users
|
||||||
|
|
||||||
def reg_path_exists(hive, path):
|
def reg_path_exists(hive, path):
|
||||||
"""Test if specified path exists, returns bool."""
|
"""Test if specified path exists, returns bool."""
|
||||||
try:
|
try:
|
||||||
winreg.QueryValue(hive, path)
|
winreg.QueryValue(hive, path)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def run_aida64():
|
def run_aida64():
|
||||||
"""Run AIDA64 to save system reports."""
|
"""Run AIDA64 to save system reports."""
|
||||||
extract_item('AIDA64', silent=True)
|
extract_item('AIDA64', silent=True)
|
||||||
# All system info
|
# All system info
|
||||||
config = r'{BinDir}\AIDA64\full.rpf'.format(**global_vars)
|
config = r'{BinDir}\AIDA64\full.rpf'.format(**global_vars)
|
||||||
report_file = r'{LogDir}\System Information (AIDA64).html'.format(
|
report_file = r'{LogDir}\System Information (AIDA64).html'.format(
|
||||||
**global_vars)
|
**global_vars)
|
||||||
if not os.path.exists(report_file):
|
if not os.path.exists(report_file):
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['AIDA64'],
|
global_vars['Tools']['AIDA64'],
|
||||||
'/R', report_file,
|
'/R', report_file,
|
||||||
'/CUSTOM', config,
|
'/CUSTOM', config,
|
||||||
'/HTML', '/SILENT', '/SAFEST']
|
'/HTML', '/SILENT', '/SAFEST']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
# Installed Programs
|
# Installed Programs
|
||||||
config = r'{BinDir}\AIDA64\installed_programs.rpf'.format(**global_vars)
|
config = r'{BinDir}\AIDA64\installed_programs.rpf'.format(**global_vars)
|
||||||
report_file = r'{LogDir}\Installed Program List (AIDA64).txt'.format(
|
report_file = r'{LogDir}\Installed Program List (AIDA64).txt'.format(
|
||||||
**global_vars)
|
**global_vars)
|
||||||
if not os.path.exists(report_file):
|
if not os.path.exists(report_file):
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['AIDA64'],
|
global_vars['Tools']['AIDA64'],
|
||||||
'/R', report_file,
|
'/R', report_file,
|
||||||
'/CUSTOM', config,
|
'/CUSTOM', config,
|
||||||
'/TEXT', '/SILENT', '/SAFEST']
|
'/TEXT', '/SILENT', '/SAFEST']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
# Product Keys
|
# Product Keys
|
||||||
config = r'{BinDir}\AIDA64\licenses.rpf'.format(**global_vars)
|
config = r'{BinDir}\AIDA64\licenses.rpf'.format(**global_vars)
|
||||||
report_file = r'{LogDir}\Product Keys (AIDA64).txt'.format(**global_vars)
|
report_file = r'{LogDir}\Product Keys (AIDA64).txt'.format(**global_vars)
|
||||||
if not os.path.exists(report_file):
|
if not os.path.exists(report_file):
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['AIDA64'],
|
global_vars['Tools']['AIDA64'],
|
||||||
'/R', report_file,
|
'/R', report_file,
|
||||||
'/CUSTOM', config,
|
'/CUSTOM', config,
|
||||||
'/TEXT', '/SILENT', '/SAFEST']
|
'/TEXT', '/SILENT', '/SAFEST']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
def run_bleachbit():
|
def run_bleachbit():
|
||||||
"""Run BleachBit preview and save log.
|
"""Run BleachBit preview and save log.
|
||||||
|
|
||||||
This is a preview so no files should be deleted."""
|
This is a preview so no files should be deleted."""
|
||||||
if not os.path.exists(global_vars['LogDir']+r'\BleachBit.log'):
|
if not os.path.exists(global_vars['LogDir']+r'\BleachBit.log'):
|
||||||
extract_item('BleachBit', silent=True)
|
extract_item('BleachBit', silent=True)
|
||||||
cmd = [global_vars['Tools']['BleachBit'], '--preview', '--preset']
|
cmd = [global_vars['Tools']['BleachBit'], '--preview', '--preset']
|
||||||
out = run_program(cmd, check=False)
|
out = run_program(cmd, check=False)
|
||||||
# Save stderr
|
# Save stderr
|
||||||
if out.stderr.decode().splitlines():
|
if out.stderr.decode().splitlines():
|
||||||
with open(global_vars['LogDir']+r'\BleachBit.err', 'a',
|
with open(global_vars['LogDir']+r'\BleachBit.err', 'a',
|
||||||
encoding='utf-8') as f:
|
encoding='utf-8') as f:
|
||||||
for line in out.stderr.decode().splitlines():
|
for line in out.stderr.decode().splitlines():
|
||||||
f.write(line.strip() + '\n')
|
f.write(line.strip() + '\n')
|
||||||
# Save stdout
|
# Save stdout
|
||||||
with open(global_vars['LogDir']+r'\BleachBit.log', 'a',
|
with open(global_vars['LogDir']+r'\BleachBit.log', 'a',
|
||||||
encoding='utf-8') as f:
|
encoding='utf-8') as f:
|
||||||
for line in out.stdout.decode().splitlines():
|
for line in out.stdout.decode().splitlines():
|
||||||
f.write(line.strip() + '\n')
|
f.write(line.strip() + '\n')
|
||||||
|
|
||||||
def show_disk_usage(disk):
|
def show_disk_usage(disk):
|
||||||
"""Show free and used space for a specified disk."""
|
"""Show free and used space for a specified disk."""
|
||||||
print_standard('{:5}'.format(disk.device.replace('/', ' ')),
|
print_standard('{:5}'.format(disk.device.replace('/', ' ')),
|
||||||
end='', flush=True, timestamp=False)
|
end='', flush=True, timestamp=False)
|
||||||
try:
|
try:
|
||||||
usage = psutil.disk_usage(disk.device)
|
usage = psutil.disk_usage(disk.device)
|
||||||
display_string = '{percent:>5.2f}% Free ({free} / {total})'.format(
|
display_string = '{percent:>5.2f}% Free ({free} / {total})'.format(
|
||||||
percent = 100 - usage.percent,
|
percent = 100 - usage.percent,
|
||||||
free = human_readable_size(usage.free, 2),
|
free = human_readable_size(usage.free, 2),
|
||||||
total = human_readable_size(usage.total, 2))
|
total = human_readable_size(usage.total, 2))
|
||||||
if usage.percent > 85:
|
if usage.percent > 85:
|
||||||
print_error(display_string, timestamp=False)
|
print_error(display_string, timestamp=False)
|
||||||
elif usage.percent > 75:
|
elif usage.percent > 75:
|
||||||
print_warning(display_string, timestamp=False)
|
print_warning(display_string, timestamp=False)
|
||||||
else:
|
else:
|
||||||
print_standard(display_string, timestamp=False)
|
print_standard(display_string, timestamp=False)
|
||||||
except Exception:
|
except Exception:
|
||||||
print_warning('Unknown', timestamp=False)
|
print_warning('Unknown', timestamp=False)
|
||||||
|
|
||||||
def show_free_space(indent=8, width=32):
|
def show_free_space(indent=8, width=32):
|
||||||
"""Show free space info for all fixed disks."""
|
"""Show free space info for all fixed disks."""
|
||||||
message = 'Free Space:'
|
message = 'Free Space:'
|
||||||
for disk in psutil.disk_partitions():
|
for disk in psutil.disk_partitions():
|
||||||
try:
|
try:
|
||||||
if 'fixed' in disk.opts:
|
if 'fixed' in disk.opts:
|
||||||
try_and_print(message=message, function=show_disk_usage,
|
try_and_print(message=message, function=show_disk_usage,
|
||||||
ns='Unknown', silent_function=False,
|
ns='Unknown', silent_function=False,
|
||||||
indent=indent, width=width, disk=disk)
|
indent=indent, width=width, disk=disk)
|
||||||
message = ''
|
message = ''
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def show_installed_ram():
|
def show_installed_ram():
|
||||||
"""Show installed RAM."""
|
"""Show installed RAM."""
|
||||||
mem = psutil.virtual_memory()
|
mem = psutil.virtual_memory()
|
||||||
if mem.total > 5905580032:
|
if mem.total > 5905580032:
|
||||||
# > 5.5 Gb so 6Gb or greater
|
# > 5.5 Gb so 6Gb or greater
|
||||||
print_standard(human_readable_size(mem.total).strip(), timestamp=False)
|
print_standard(human_readable_size(mem.total).strip(), timestamp=False)
|
||||||
elif mem.total > 3758096384:
|
elif mem.total > 3758096384:
|
||||||
# > 3.5 Gb so 4Gb or greater
|
# > 3.5 Gb so 4Gb or greater
|
||||||
print_warning(human_readable_size(mem.total).strip(), timestamp=False)
|
print_warning(human_readable_size(mem.total).strip(), timestamp=False)
|
||||||
else:
|
else:
|
||||||
print_error(human_readable_size(mem.total).strip(), timestamp=False)
|
print_error(human_readable_size(mem.total).strip(), timestamp=False)
|
||||||
|
|
||||||
def show_os_activation():
|
def show_os_activation():
|
||||||
"""Show OS activation info."""
|
"""Show OS activation info."""
|
||||||
act_str = get_activation_string()
|
act_str = get_activation_string()
|
||||||
if windows_is_activated():
|
if windows_is_activated():
|
||||||
print_standard(act_str, timestamp=False)
|
print_standard(act_str, timestamp=False)
|
||||||
elif re.search(r'unavailable', act_str, re.IGNORECASE):
|
elif re.search(r'unavailable', act_str, re.IGNORECASE):
|
||||||
print_warning(act_str, timestamp=False)
|
print_warning(act_str, timestamp=False)
|
||||||
else:
|
else:
|
||||||
print_error(act_str, timestamp=False)
|
print_error(act_str, timestamp=False)
|
||||||
|
|
||||||
def show_os_name():
|
def show_os_name():
|
||||||
"""Show extended OS name (including warnings)."""
|
"""Show extended OS name (including warnings)."""
|
||||||
os_name = global_vars['OS']['DisplayName']
|
os_name = global_vars['OS']['DisplayName']
|
||||||
if global_vars['OS']['Arch'] == 32:
|
if global_vars['OS']['Arch'] == 32:
|
||||||
# Show all 32-bit installs as an error message
|
# Show all 32-bit installs as an error message
|
||||||
print_error(os_name, timestamp=False)
|
print_error(os_name, timestamp=False)
|
||||||
else:
|
else:
|
||||||
if re.search(r'(unrecognized|very outdated)', os_name, re.IGNORECASE):
|
if re.search(r'(unrecognized|very outdated)', os_name, re.IGNORECASE):
|
||||||
print_error(os_name, timestamp=False)
|
print_error(os_name, timestamp=False)
|
||||||
elif re.search(r'outdated', os_name, re.IGNORECASE):
|
elif re.search(r'outdated', os_name, re.IGNORECASE):
|
||||||
print_warning(os_name, timestamp=False)
|
print_warning(os_name, timestamp=False)
|
||||||
else:
|
else:
|
||||||
print_standard(os_name, timestamp=False)
|
print_standard(os_name, timestamp=False)
|
||||||
|
|
||||||
def show_temp_files_size():
|
def show_temp_files_size():
|
||||||
"""Show total size of temp files identified by BleachBit."""
|
"""Show total size of temp files identified by BleachBit."""
|
||||||
size = None
|
size = None
|
||||||
with open(r'{LogDir}\BleachBit.log'.format(**global_vars), 'r') as f:
|
with open(r'{LogDir}\BleachBit.log'.format(**global_vars), 'r') as f:
|
||||||
for line in f.readlines():
|
for line in f.readlines():
|
||||||
if re.search(r'^disk space to be recovered:', line, re.IGNORECASE):
|
if re.search(r'^disk space to be recovered:', line, re.IGNORECASE):
|
||||||
size = re.sub(r'.*: ', '', line.strip())
|
size = re.sub(r'.*: ', '', line.strip())
|
||||||
size = re.sub(r'(\w)iB$', r' \1b', size)
|
size = re.sub(r'(\w)iB$', r' \1b', size)
|
||||||
if size is None:
|
if size is None:
|
||||||
print_warning(size, timestamp=False)
|
print_warning(size, timestamp=False)
|
||||||
else:
|
else:
|
||||||
print_standard(size, timestamp=False)
|
print_standard(size, timestamp=False)
|
||||||
|
|
||||||
def show_user_data_summary(indent=8, width=32):
|
def show_user_data_summary(indent=8, width=32):
|
||||||
"""Print user data folder sizes for all users."""
|
"""Print user data folder sizes for all users."""
|
||||||
users = get_user_list()
|
users = get_user_list()
|
||||||
users = [u for u in users if u['Active']]
|
users = [u for u in users if u['Active']]
|
||||||
get_user_folder_sizes(users)
|
get_user_folder_sizes(users)
|
||||||
for user in users:
|
for user in users:
|
||||||
print_success('{indent}User: {user}'.format(
|
print_success('{indent}User: {user}'.format(
|
||||||
indent = ' '*int(indent/2),
|
indent = ' '*int(indent/2),
|
||||||
user = user['Name']))
|
user = user['Name']))
|
||||||
for section in ['Profile', None, 'Shell Folders', 'Extra Folders']:
|
for section in ['Profile', None, 'Shell Folders', 'Extra Folders']:
|
||||||
folders = []
|
folders = []
|
||||||
if section is None:
|
if section is None:
|
||||||
# Divider
|
# Divider
|
||||||
print_standard('{}{}'.format(' '*indent, '-'*(width+6)))
|
print_standard('{}{}'.format(' '*indent, '-'*(width+6)))
|
||||||
elif section == 'Profile':
|
elif section == 'Profile':
|
||||||
folders = {'Profile': user['Profile']}
|
folders = {'Profile': user['Profile']}
|
||||||
else:
|
else:
|
||||||
folders = user[section]
|
folders = user[section]
|
||||||
for folder in folders:
|
for folder in folders:
|
||||||
print_standard(
|
print_standard(
|
||||||
'{indent}{folder:<{width}}{size:>6} ({path})'.format(
|
'{indent}{folder:<{width}}{size:>6} ({path})'.format(
|
||||||
indent = ' ' * indent,
|
indent = ' ' * indent,
|
||||||
width = width,
|
width = width,
|
||||||
folder = folder,
|
folder = folder,
|
||||||
size = folders[folder]['Size'],
|
size = folders[folder]['Size'],
|
||||||
path = folders[folder]['Path']))
|
path = folders[folder]['Path']))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,65 +1,65 @@
|
||||||
#!/bin/python3
|
#!/bin/python3
|
||||||
#
|
#
|
||||||
## Wizard Kit: Functions - Network
|
## Wizard Kit: Functions - Network
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
|
|
||||||
# REGEX
|
# REGEX
|
||||||
REGEX_VALID_IP = re.compile(
|
REGEX_VALID_IP = re.compile(
|
||||||
r'(10.\d+.\d+.\d+'
|
r'(10.\d+.\d+.\d+'
|
||||||
r'|172.(1[6-9]|2\d|3[0-1])'
|
r'|172.(1[6-9]|2\d|3[0-1])'
|
||||||
r'|192.168.\d+.\d+)',
|
r'|192.168.\d+.\d+)',
|
||||||
re.IGNORECASE)
|
re.IGNORECASE)
|
||||||
|
|
||||||
def connect_to_network():
|
def connect_to_network():
|
||||||
"""Connect to network if not already connected."""
|
"""Connect to network if not already connected."""
|
||||||
net_ifs = psutil.net_if_addrs()
|
net_ifs = psutil.net_if_addrs()
|
||||||
net_ifs = [i[:2] for i in net_ifs.keys()]
|
net_ifs = [i[:2] for i in net_ifs.keys()]
|
||||||
|
|
||||||
# Bail if currently connected
|
# Bail if currently connected
|
||||||
if is_connected():
|
if is_connected():
|
||||||
return
|
return
|
||||||
|
|
||||||
# LAN
|
# LAN
|
||||||
if 'en' in net_ifs:
|
if 'en' in net_ifs:
|
||||||
# Reload the tg3/broadcom driver (known fix for some Dell systems)
|
# Reload the tg3/broadcom driver (known fix for some Dell systems)
|
||||||
try_and_print(message='Reloading drivers...', function=reload_tg3)
|
try_and_print(message='Reloading drivers...', function=reload_tg3)
|
||||||
|
|
||||||
# WiFi
|
# WiFi
|
||||||
if not is_connected() and 'wl' in net_ifs:
|
if not is_connected() and 'wl' in net_ifs:
|
||||||
cmd = [
|
cmd = [
|
||||||
'nmcli', 'dev', 'wifi',
|
'nmcli', 'dev', 'wifi',
|
||||||
'connect', WIFI_SSID,
|
'connect', WIFI_SSID,
|
||||||
'password', WIFI_PASSWORD]
|
'password', WIFI_PASSWORD]
|
||||||
try_and_print(
|
try_and_print(
|
||||||
message = 'Connecting to {}...'.format(WIFI_SSID),
|
message = 'Connecting to {}...'.format(WIFI_SSID),
|
||||||
function = run_program,
|
function = run_program,
|
||||||
cmd = cmd)
|
cmd = cmd)
|
||||||
|
|
||||||
def is_connected():
|
def is_connected():
|
||||||
"""Check for a valid private IP."""
|
"""Check for a valid private IP."""
|
||||||
devs = psutil.net_if_addrs()
|
devs = psutil.net_if_addrs()
|
||||||
for dev in devs.values():
|
for dev in devs.values():
|
||||||
for family in dev:
|
for family in dev:
|
||||||
if REGEX_VALID_IP.search(family.address):
|
if REGEX_VALID_IP.search(family.address):
|
||||||
# Valid IP found
|
# Valid IP found
|
||||||
return True
|
return True
|
||||||
# Else
|
# Else
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def reload_tg3():
|
def reload_tg3():
|
||||||
"""Reload tg3 module as a workaround for some Dell systems."""
|
"""Reload tg3 module as a workaround for some Dell systems."""
|
||||||
run_program(['sudo', 'modprobe', '-r', 'tg3'])
|
run_program(['sudo', 'modprobe', '-r', 'tg3'])
|
||||||
run_program(['sudo', 'modprobe', 'broadcom'])
|
run_program(['sudo', 'modprobe', 'broadcom'])
|
||||||
run_program(['sudo', 'modprobe', 'tg3'])
|
run_program(['sudo', 'modprobe', 'tg3'])
|
||||||
sleep(5)
|
sleep(5)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,326 +1,326 @@
|
||||||
# Wizard Kit: Functions - PARTITION UIDs
|
# Wizard Kit: Functions - PARTITION UIDs
|
||||||
# sources: https://en.wikipedia.org/wiki/GUID_Partition_Table
|
# sources: https://en.wikipedia.org/wiki/GUID_Partition_Table
|
||||||
# https://en.wikipedia.org/wiki/Partition_type
|
# https://en.wikipedia.org/wiki/Partition_type
|
||||||
# NOTE: Info has been trimmed for brevity. As such, there may be some inaccuracy.
|
# NOTE: Info has been trimmed for brevity. As such, there may be some inaccuracy.
|
||||||
|
|
||||||
PARTITION_UIDS = {
|
PARTITION_UIDS = {
|
||||||
'00': {'OS': 'All','Description': 'Empty partition entry'},
|
'00': {'OS': 'All','Description': 'Empty partition entry'},
|
||||||
'01': {'OS': 'DOS','Description': 'FAT12 as primary partition'},
|
'01': {'OS': 'DOS','Description': 'FAT12 as primary partition'},
|
||||||
'02': {'OS': 'XENIX','Description': 'XENIX root'},
|
'02': {'OS': 'XENIX','Description': 'XENIX root'},
|
||||||
'03': {'OS': 'XENIX','Description': 'XENIX usr'},
|
'03': {'OS': 'XENIX','Description': 'XENIX usr'},
|
||||||
'04': {'OS': 'DOS','Description': 'FAT16 with less than 32 MB'},
|
'04': {'OS': 'DOS','Description': 'FAT16 with less than 32 MB'},
|
||||||
'05': {'OS': 'DOS / SpeedStor','Description': 'Extended partition'},
|
'05': {'OS': 'DOS / SpeedStor','Description': 'Extended partition'},
|
||||||
'06': {'OS': 'DOS1+','Description': 'FAT16B [over 65K sectors]'},
|
'06': {'OS': 'DOS1+','Description': 'FAT16B [over 65K sectors]'},
|
||||||
'07': {'OS': 'Windows / OS/2 / QNX 2','Description': 'NTFS/exFAT/HPFS/IFS/QNX'},
|
'07': {'OS': 'Windows / OS/2 / QNX 2','Description': 'NTFS/exFAT/HPFS/IFS/QNX'},
|
||||||
'08': {'OS': 'CBM / DOS / OS/2 / AIX /QNX','Description': 'FAT12-16/AIX/QNY/SplitDrive'},
|
'08': {'OS': 'CBM / DOS / OS/2 / AIX /QNX','Description': 'FAT12-16/AIX/QNY/SplitDrive'},
|
||||||
'09': {'OS': 'AIX / QNX / Coherent / OS-9','Description': 'AIX/QNZ/Coherent/RBF'},
|
'09': {'OS': 'AIX / QNX / Coherent / OS-9','Description': 'AIX/QNZ/Coherent/RBF'},
|
||||||
'0A': {'OS': 'OS/2 / Coherent','Description': 'Boot Manager / Swap'},
|
'0A': {'OS': 'OS/2 / Coherent','Description': 'Boot Manager / Swap'},
|
||||||
'0B': {'OS': 'DOS','Description': 'FAT32 with CHS addressing'},
|
'0B': {'OS': 'DOS','Description': 'FAT32 with CHS addressing'},
|
||||||
'0C': {'OS': 'DOS','Description': 'FAT32 with LBA'},
|
'0C': {'OS': 'DOS','Description': 'FAT32 with LBA'},
|
||||||
'0D': {'OS': 'Silicon Safe','Description': 'Reserved'},
|
'0D': {'OS': 'Silicon Safe','Description': 'Reserved'},
|
||||||
'0E': {'OS': 'DOS','Description': 'FAT16B with LBA'},
|
'0E': {'OS': 'DOS','Description': 'FAT16B with LBA'},
|
||||||
'0F': {'OS': 'DOS','Description': 'Extended partition with LBA'},
|
'0F': {'OS': 'DOS','Description': 'Extended partition with LBA'},
|
||||||
'10': {'OS': 'OPUS','Description': 'Unknown'},
|
'10': {'OS': 'OPUS','Description': 'Unknown'},
|
||||||
'11': {'OS': 'Leading Edge MS-DOS / OS/2','Description': 'FAT12/FAT16'},
|
'11': {'OS': 'Leading Edge MS-DOS / OS/2','Description': 'FAT12/FAT16'},
|
||||||
'12': {'OS': 'Compaq Contura','Description': 'conf/diag/hiber/rescue/serv'},
|
'12': {'OS': 'Compaq Contura','Description': 'conf/diag/hiber/rescue/serv'},
|
||||||
'14': {'OS': 'AST DOS / OS/2 / MaverickOS','Description': 'FAT12/FAT16/Omega'},
|
'14': {'OS': 'AST DOS / OS/2 / MaverickOS','Description': 'FAT12/FAT16/Omega'},
|
||||||
'15': {'OS': 'OS/2 / Maverick OS','Description': 'Hidden extended / Swap'},
|
'15': {'OS': 'OS/2 / Maverick OS','Description': 'Hidden extended / Swap'},
|
||||||
'16': {'OS': 'OS/2 Boot Manager','Description': 'Hidden FAT16B'},
|
'16': {'OS': 'OS/2 Boot Manager','Description': 'Hidden FAT16B'},
|
||||||
'17': {'OS': 'OS/2 Boot Manager','Description': 'Hidden IFS/HPFS/NTFS/exFAT'},
|
'17': {'OS': 'OS/2 Boot Manager','Description': 'Hidden IFS/HPFS/NTFS/exFAT'},
|
||||||
'18': {'OS': 'AST Windows','Description': '0-Volt Suspend/SmartSleep'},
|
'18': {'OS': 'AST Windows','Description': '0-Volt Suspend/SmartSleep'},
|
||||||
'19': {'OS': 'Willowtech Photon coS','Description': 'Willowtech Photon coS'},
|
'19': {'OS': 'Willowtech Photon coS','Description': 'Willowtech Photon coS'},
|
||||||
'1B': {'OS': 'OS/2 Boot Manager','Description': 'Hidden FAT32'},
|
'1B': {'OS': 'OS/2 Boot Manager','Description': 'Hidden FAT32'},
|
||||||
'1C': {'OS': 'OS/2 Boot Manager','Description': 'Hidden FAT32 with LBA'},
|
'1C': {'OS': 'OS/2 Boot Manager','Description': 'Hidden FAT32 with LBA'},
|
||||||
'1E': {'OS': 'OS/2 Boot Manager','Description': 'Hidden FAT16 with LBA'},
|
'1E': {'OS': 'OS/2 Boot Manager','Description': 'Hidden FAT16 with LBA'},
|
||||||
'1F': {'OS': 'OS/2 Boot Manager','Description': 'Hidden extended with LBA'},
|
'1F': {'OS': 'OS/2 Boot Manager','Description': 'Hidden extended with LBA'},
|
||||||
'20': {'OS': 'Windows Mobile','Description': 'update XIP/Willowsoft OFS1'},
|
'20': {'OS': 'Windows Mobile','Description': 'update XIP/Willowsoft OFS1'},
|
||||||
'21': {'OS': 'Oxygen','Description': 'SpeedStor / FSo2'},
|
'21': {'OS': 'Oxygen','Description': 'SpeedStor / FSo2'},
|
||||||
'22': {'OS': 'Oxygen','Description': 'Oxygen Extended Partition'},
|
'22': {'OS': 'Oxygen','Description': 'Oxygen Extended Partition'},
|
||||||
'23': {'OS': 'Windows Mobile','Description': 'Reserved / boot XIP'},
|
'23': {'OS': 'Windows Mobile','Description': 'Reserved / boot XIP'},
|
||||||
'24': {'OS': 'NEC MS-DOS0','Description': 'Logical FAT12 or FAT16'},
|
'24': {'OS': 'NEC MS-DOS0','Description': 'Logical FAT12 or FAT16'},
|
||||||
'25': {'OS': 'Windows Mobile','Description': 'IMGFS[citation needed]'},
|
'25': {'OS': 'Windows Mobile','Description': 'IMGFS[citation needed]'},
|
||||||
'26': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
'26': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
||||||
'27': {'OS': 'Win/PQserv/MirOS/RooterBOOT','Description': 'WinRE/Rescue/MirOS/RooterBOOT'},
|
'27': {'OS': 'Win/PQserv/MirOS/RooterBOOT','Description': 'WinRE/Rescue/MirOS/RooterBOOT'},
|
||||||
'2A': {'OS': 'AtheOS','Description': 'AthFS/AFS/Reserved'},
|
'2A': {'OS': 'AtheOS','Description': 'AthFS/AFS/Reserved'},
|
||||||
'2B': {'OS': 'SyllableOS','Description': 'SyllableSecure (SylStor)'},
|
'2B': {'OS': 'SyllableOS','Description': 'SyllableSecure (SylStor)'},
|
||||||
'31': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
'31': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
||||||
'32': {'OS': 'NOS','Description': 'Unknown'},
|
'32': {'OS': 'NOS','Description': 'Unknown'},
|
||||||
'33': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
'33': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
||||||
'34': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
'34': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
||||||
'35': {'OS': 'OS/2 Server /eComStation','Description': 'JFS'},
|
'35': {'OS': 'OS/2 Server /eComStation','Description': 'JFS'},
|
||||||
'36': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
'36': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
||||||
'38': {'OS': 'THEOS','Description': 'THEOS version 3.2, 2 GB'},
|
'38': {'OS': 'THEOS','Description': 'THEOS version 3.2, 2 GB'},
|
||||||
'39': {'OS': 'Plan 9 / THEOS','Description': 'Plan 9 edition 3 / THEOS v4'},
|
'39': {'OS': 'Plan 9 / THEOS','Description': 'Plan 9 edition 3 / THEOS v4'},
|
||||||
'3A': {'OS': 'THEOS','Description': 'THEOS v4, 4 GB'},
|
'3A': {'OS': 'THEOS','Description': 'THEOS v4, 4 GB'},
|
||||||
'3B': {'OS': 'THEOS','Description': 'THEOS v4 extended'},
|
'3B': {'OS': 'THEOS','Description': 'THEOS v4 extended'},
|
||||||
'3C': {'OS': 'PartitionMagic','Description': 'PqRP (image in progress)'},
|
'3C': {'OS': 'PartitionMagic','Description': 'PqRP (image in progress)'},
|
||||||
'3D': {'OS': 'PartitionMagic','Description': 'Hidden NetWare'},
|
'3D': {'OS': 'PartitionMagic','Description': 'Hidden NetWare'},
|
||||||
'3F': {'OS': 'OS/32','Description': 'Unknown'},
|
'3F': {'OS': 'OS/32','Description': 'Unknown'},
|
||||||
'40': {'OS': 'PICK / Venix','Description': 'PICK R83 / Venix 80286'},
|
'40': {'OS': 'PICK / Venix','Description': 'PICK R83 / Venix 80286'},
|
||||||
'41': {'OS': 'RISC / Linux / PowerPC','Description': 'Boot / Old Linux/Minix'},
|
'41': {'OS': 'RISC / Linux / PowerPC','Description': 'Boot / Old Linux/Minix'},
|
||||||
'42': {'OS': 'SFS / Linux / Win2K/XP/etc','Description': 'SFS / Old Linux Swap'},
|
'42': {'OS': 'SFS / Linux / Win2K/XP/etc','Description': 'SFS / Old Linux Swap'},
|
||||||
'43': {'OS': 'Linux','Description': 'Old Linux native'},
|
'43': {'OS': 'Linux','Description': 'Old Linux native'},
|
||||||
'44': {'OS': 'GoBack','Description': 'Norton/WildFire/Adaptec/Roxio'},
|
'44': {'OS': 'GoBack','Description': 'Norton/WildFire/Adaptec/Roxio'},
|
||||||
'45': {'OS': 'Boot-US / EUMEL/ELAN','Description': 'Priam/Boot/EUMEL/ELAN (L2)'},
|
'45': {'OS': 'Boot-US / EUMEL/ELAN','Description': 'Priam/Boot/EUMEL/ELAN (L2)'},
|
||||||
'46': {'OS': 'EUMEL/ELAN','Description': 'EUMEL/ELAN (L2)'},
|
'46': {'OS': 'EUMEL/ELAN','Description': 'EUMEL/ELAN (L2)'},
|
||||||
'47': {'OS': 'EUMEL/ELAN','Description': 'EUMEL/ELAN (L2)'},
|
'47': {'OS': 'EUMEL/ELAN','Description': 'EUMEL/ELAN (L2)'},
|
||||||
'48': {'OS': 'EUMEL/ELAN','Description': 'EUMEL/ELAN (L2), ERGOS L3'},
|
'48': {'OS': 'EUMEL/ELAN','Description': 'EUMEL/ELAN (L2), ERGOS L3'},
|
||||||
'4A': {'OS': 'AdaOS / ALFS/THIN','Description': 'Aquila / ALFS/THIN'},
|
'4A': {'OS': 'AdaOS / ALFS/THIN','Description': 'Aquila / ALFS/THIN'},
|
||||||
'4C': {'OS': 'ETH Oberon','Description': 'Aos (A2) file system (76)'},
|
'4C': {'OS': 'ETH Oberon','Description': 'Aos (A2) file system (76)'},
|
||||||
'4D': {'OS': 'QNX Neutrino','Description': 'Primary QNX POSIX volume'},
|
'4D': {'OS': 'QNX Neutrino','Description': 'Primary QNX POSIX volume'},
|
||||||
'4E': {'OS': 'QNX Neutrino','Description': 'Secondary QNX POSIX volume'},
|
'4E': {'OS': 'QNX Neutrino','Description': 'Secondary QNX POSIX volume'},
|
||||||
'4F': {'OS': 'QNX Neutrino / ETH Oberon','Description': '3rd QNX POSIX/Boot/Native'},
|
'4F': {'OS': 'QNX Neutrino / ETH Oberon','Description': '3rd QNX POSIX/Boot/Native'},
|
||||||
'50': {'OS': 'DiskMan4/ETH/LynxOS/Novell','Description': 'Alt FS/Read-only/Lynx RTOS'},
|
'50': {'OS': 'DiskMan4/ETH/LynxOS/Novell','Description': 'Alt FS/Read-only/Lynx RTOS'},
|
||||||
'51': {'OS': 'Disk Manager 4-6','Description': 'R/W partition (Aux 1)'},
|
'51': {'OS': 'Disk Manager 4-6','Description': 'R/W partition (Aux 1)'},
|
||||||
'52': {'OS': 'CP/M-80/ System V/AT, V/386','Description': 'CP/M-80'},
|
'52': {'OS': 'CP/M-80/ System V/AT, V/386','Description': 'CP/M-80'},
|
||||||
'53': {'OS': 'Disk Manager 6','Description': 'Auxiliary 3 (WO)'},
|
'53': {'OS': 'Disk Manager 6','Description': 'Auxiliary 3 (WO)'},
|
||||||
'54': {'OS': 'Disk Manager 6','Description': 'Dynamic Drive Overlay (DDO)'},
|
'54': {'OS': 'Disk Manager 6','Description': 'Dynamic Drive Overlay (DDO)'},
|
||||||
'55': {'OS': 'EZ-Drive','Description': 'Maxtor/MaxBlast/DriveGuide'},
|
'55': {'OS': 'EZ-Drive','Description': 'Maxtor/MaxBlast/DriveGuide'},
|
||||||
'56': {'OS': 'AT&T DOS/EZ-Drive/VFeature','Description': 'FAT12~16/EZ-BIOS/VFeature'},
|
'56': {'OS': 'AT&T DOS/EZ-Drive/VFeature','Description': 'FAT12~16/EZ-BIOS/VFeature'},
|
||||||
'57': {'OS': 'DrivePro','Description': 'VNDI partition'},
|
'57': {'OS': 'DrivePro','Description': 'VNDI partition'},
|
||||||
'5C': {'OS': 'EDISK','Description': 'Priam EDisk Volume'},
|
'5C': {'OS': 'EDISK','Description': 'Priam EDisk Volume'},
|
||||||
'61': {'OS': 'SpeedStor','Description': 'Unknown'},
|
'61': {'OS': 'SpeedStor','Description': 'Unknown'},
|
||||||
'63': {'OS': 'Unix','Description': 'Unix,ISC,SysV,ix,BSD,HURD'},
|
'63': {'OS': 'Unix','Description': 'Unix,ISC,SysV,ix,BSD,HURD'},
|
||||||
'64': {'OS': 'SpeedStor / NetWare','Description': 'NetWare FS 286/2,PC-ARMOUR'},
|
'64': {'OS': 'SpeedStor / NetWare','Description': 'NetWare FS 286/2,PC-ARMOUR'},
|
||||||
'65': {'OS': 'NetWare','Description': 'NetWare File System 386'},
|
'65': {'OS': 'NetWare','Description': 'NetWare File System 386'},
|
||||||
'66': {'OS': 'NetWare / NetWare','Description': 'NetWare FS 386 / SMS'},
|
'66': {'OS': 'NetWare / NetWare','Description': 'NetWare FS 386 / SMS'},
|
||||||
'67': {'OS': 'NetWare','Description': 'Wolf Mountain'},
|
'67': {'OS': 'NetWare','Description': 'Wolf Mountain'},
|
||||||
'68': {'OS': 'NetWare','Description': 'Unknown'},
|
'68': {'OS': 'NetWare','Description': 'Unknown'},
|
||||||
'69': {'OS': 'NetWare 5 / NetWare','Description': 'Novell Storage Services'},
|
'69': {'OS': 'NetWare 5 / NetWare','Description': 'Novell Storage Services'},
|
||||||
'6E': {'Description': 'Unknown'},
|
'6E': {'Description': 'Unknown'},
|
||||||
'70': {'OS': 'DiskSecure','Description': 'DiskSecure multiboot'},
|
'70': {'OS': 'DiskSecure','Description': 'DiskSecure multiboot'},
|
||||||
'71': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
'71': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
||||||
'72': {'OS': 'APTI systems / Unix V7/x86','Description': 'APTI altFAT12 / V7 / x86'},
|
'72': {'OS': 'APTI systems / Unix V7/x86','Description': 'APTI altFAT12 / V7 / x86'},
|
||||||
'73': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
'73': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
||||||
'74': {'OS': 'Microsoft, IBM','Description': 'Reserved / Scramdisk'},
|
'74': {'OS': 'Microsoft, IBM','Description': 'Reserved / Scramdisk'},
|
||||||
'75': {'OS': 'PC/IX','Description': 'Unknown'},
|
'75': {'OS': 'PC/IX','Description': 'Unknown'},
|
||||||
'76': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
'76': {'OS': 'Microsoft, IBM','Description': 'Reserved'},
|
||||||
'77': {'OS': 'Novell','Description': 'VNDI, M2FS, M2CS'},
|
'77': {'OS': 'Novell','Description': 'VNDI, M2FS, M2CS'},
|
||||||
'78': {'OS': 'Geurt Vos','Description': 'XOSL bootloader file system'},
|
'78': {'OS': 'Geurt Vos','Description': 'XOSL bootloader file system'},
|
||||||
'79': {'OS': 'APTI conformant systems','Description': 'APTI altFAT16 (CHS, SFN)'},
|
'79': {'OS': 'APTI conformant systems','Description': 'APTI altFAT16 (CHS, SFN)'},
|
||||||
'7A': {'OS': 'APTI conformant systems','Description': 'APTI altFAT16 (LBA, SFN)'},
|
'7A': {'OS': 'APTI conformant systems','Description': 'APTI altFAT16 (LBA, SFN)'},
|
||||||
'7B': {'OS': 'APTI conformant systems','Description': 'APTI altFAT16B (CHS, SFN)'},
|
'7B': {'OS': 'APTI conformant systems','Description': 'APTI altFAT16B (CHS, SFN)'},
|
||||||
'7C': {'OS': 'APTI conformant systems','Description': 'APTI altFAT32 (LBA, SFN)'},
|
'7C': {'OS': 'APTI conformant systems','Description': 'APTI altFAT32 (LBA, SFN)'},
|
||||||
'7D': {'OS': 'APTI conformant systems','Description': 'APTI altFAT32 (CHS, SFN)'},
|
'7D': {'OS': 'APTI conformant systems','Description': 'APTI altFAT32 (CHS, SFN)'},
|
||||||
'7E': {'OS': 'F.I.X. (claim) / PrimoCache','Description': 'Level 2 cache'},
|
'7E': {'OS': 'F.I.X. (claim) / PrimoCache','Description': 'Level 2 cache'},
|
||||||
'7F': {'OS': 'Varies','Description': 'AltOS DevPartition Standard'},
|
'7F': {'OS': 'Varies','Description': 'AltOS DevPartition Standard'},
|
||||||
'80': {'OS': 'Minix 1.1-1.4a','Description': 'Minix file system (old)'},
|
'80': {'OS': 'Minix 1.1-1.4a','Description': 'Minix file system (old)'},
|
||||||
'81': {'OS': 'Minix 1.4b+ / Linux','Description': 'MINIX FS/Mitac AdvDiskManager'},
|
'81': {'OS': 'Minix 1.4b+ / Linux','Description': 'MINIX FS/Mitac AdvDiskManager'},
|
||||||
'82': {'OS': 'Linux / Sun Microsystems','Description': 'Swap / Solaris x86 / Prime'},
|
'82': {'OS': 'Linux / Sun Microsystems','Description': 'Swap / Solaris x86 / Prime'},
|
||||||
'83': {'OS': 'GNU/Linux','Description': 'Any native Linux FS'},
|
'83': {'OS': 'GNU/Linux','Description': 'Any native Linux FS'},
|
||||||
'84': {'OS': 'OS/2 / Windows 7','Description': 'Hibernat/HiddenC/RapidStart'},
|
'84': {'OS': 'OS/2 / Windows 7','Description': 'Hibernat/HiddenC/RapidStart'},
|
||||||
'85': {'OS': 'GNU/Linux','Description': 'Linux extended'},
|
'85': {'OS': 'GNU/Linux','Description': 'Linux extended'},
|
||||||
'86': {'OS': 'Windows NT 4 Server / Linux','Description': 'FAT16B mirror/LinuxRAID-old'},
|
'86': {'OS': 'Windows NT 4 Server / Linux','Description': 'FAT16B mirror/LinuxRAID-old'},
|
||||||
'87': {'OS': 'Windows NT 4 Server','Description': 'HPFS/NTFS mirrored volume'},
|
'87': {'OS': 'Windows NT 4 Server','Description': 'HPFS/NTFS mirrored volume'},
|
||||||
'88': {'OS': 'GNU/Linux','Description': 'Plaintext partition table'},
|
'88': {'OS': 'GNU/Linux','Description': 'Plaintext partition table'},
|
||||||
'8A': {'OS': 'AiR-BOOT','Description': 'Linux kernel image'},
|
'8A': {'OS': 'AiR-BOOT','Description': 'Linux kernel image'},
|
||||||
'8B': {'OS': 'Windows NT 4 Server','Description': 'FAT32 mirrored volume set'},
|
'8B': {'OS': 'Windows NT 4 Server','Description': 'FAT32 mirrored volume set'},
|
||||||
'8C': {'OS': 'Windows NT 4 Server','Description': 'FAT32 mirrored volume set'},
|
'8C': {'OS': 'Windows NT 4 Server','Description': 'FAT32 mirrored volume set'},
|
||||||
'8D': {'OS': 'Free FDISK','Description': 'Hidden FAT12'},
|
'8D': {'OS': 'Free FDISK','Description': 'Hidden FAT12'},
|
||||||
'8E': {'OS': 'Linux','Description': 'Linux LVM'},
|
'8E': {'OS': 'Linux','Description': 'Linux LVM'},
|
||||||
'90': {'OS': 'Free FDISK','Description': 'Hidden FAT16'},
|
'90': {'OS': 'Free FDISK','Description': 'Hidden FAT16'},
|
||||||
'91': {'OS': 'Free FDISK','Description': 'Hidden extended partition'},
|
'91': {'OS': 'Free FDISK','Description': 'Hidden extended partition'},
|
||||||
'92': {'OS': 'Free FDISK','Description': 'Hidden FAT16B'},
|
'92': {'OS': 'Free FDISK','Description': 'Hidden FAT16B'},
|
||||||
'93': {'OS': 'Amoeba / Linux','Description': 'Amoeba native/Hidden Linux'},
|
'93': {'OS': 'Amoeba / Linux','Description': 'Amoeba native/Hidden Linux'},
|
||||||
'94': {'OS': 'Amoeba','Description': 'Amoeba bad block table'},
|
'94': {'OS': 'Amoeba','Description': 'Amoeba bad block table'},
|
||||||
'95': {'OS': 'EXOPC','Description': 'EXOPC native'},
|
'95': {'OS': 'EXOPC','Description': 'EXOPC native'},
|
||||||
'96': {'OS': 'CHRP','Description': 'ISO-9660 file system'},
|
'96': {'OS': 'CHRP','Description': 'ISO-9660 file system'},
|
||||||
'97': {'OS': 'Free FDISK','Description': 'Hidden FAT32'},
|
'97': {'OS': 'Free FDISK','Description': 'Hidden FAT32'},
|
||||||
'98': {'OS': 'Free FDISK / ROM-DOS','Description': 'Hidden FAT32 / service part'},
|
'98': {'OS': 'Free FDISK / ROM-DOS','Description': 'Hidden FAT32 / service part'},
|
||||||
'99': {'OS': 'early Unix','Description': 'Unknown'},
|
'99': {'OS': 'early Unix','Description': 'Unknown'},
|
||||||
'9A': {'OS': 'Free FDISK','Description': 'Hidden FAT16'},
|
'9A': {'OS': 'Free FDISK','Description': 'Hidden FAT16'},
|
||||||
'9B': {'OS': 'Free FDISK','Description': 'Hidden extended partition'},
|
'9B': {'OS': 'Free FDISK','Description': 'Hidden extended partition'},
|
||||||
'9E': {'OS': 'VSTA / ForthOS','Description': 'ForthOS (eForth port)'},
|
'9E': {'OS': 'VSTA / ForthOS','Description': 'ForthOS (eForth port)'},
|
||||||
'9F': {'OS': 'BSD/OS 3.0+, BSDI','Description': 'Unknown'},
|
'9F': {'OS': 'BSD/OS 3.0+, BSDI','Description': 'Unknown'},
|
||||||
'A0': {'OS': 'HP/Phoenix/IBM/Toshiba/Sony','Description': 'Diagnostic for HP/Hibernate'},
|
'A0': {'OS': 'HP/Phoenix/IBM/Toshiba/Sony','Description': 'Diagnostic for HP/Hibernate'},
|
||||||
'A1': {'OS': 'HP / Phoenix, NEC','Description': 'HP Vol Expansion/Hibernate'},
|
'A1': {'OS': 'HP / Phoenix, NEC','Description': 'HP Vol Expansion/Hibernate'},
|
||||||
'A2': {'OS': 'Cyclone V','Description': 'Hard Processor System (HPS)'},
|
'A2': {'OS': 'Cyclone V','Description': 'Hard Processor System (HPS)'},
|
||||||
'A3': {'OS': 'HP','Description': 'HP Vol Expansion(SpeedStor)'},
|
'A3': {'OS': 'HP','Description': 'HP Vol Expansion(SpeedStor)'},
|
||||||
'A4': {'OS': 'HP','Description': 'HP Vol Expansion(SpeedStor)'},
|
'A4': {'OS': 'HP','Description': 'HP Vol Expansion(SpeedStor)'},
|
||||||
'A5': {'OS': 'BSD','Description': 'BSD slice'},
|
'A5': {'OS': 'BSD','Description': 'BSD slice'},
|
||||||
'A6': {'OS': 'OpenBSD','Description': 'HP Vol Expansion/BSD slice'},
|
'A6': {'OS': 'OpenBSD','Description': 'HP Vol Expansion/BSD slice'},
|
||||||
'A7': {'OS': 'NeXT','Description': 'NeXTSTEP'},
|
'A7': {'OS': 'NeXT','Description': 'NeXTSTEP'},
|
||||||
'A8': {'OS': 'Darwin, Mac OS X','Description': 'Apple Darwin, Mac OS X UFS'},
|
'A8': {'OS': 'Darwin, Mac OS X','Description': 'Apple Darwin, Mac OS X UFS'},
|
||||||
'A9': {'OS': 'NetBSD','Description': 'NetBSD slice'},
|
'A9': {'OS': 'NetBSD','Description': 'NetBSD slice'},
|
||||||
'AA': {'OS': 'MS-DOS','Description': 'Olivetti DOS FAT12(1.44 MB)'},
|
'AA': {'OS': 'MS-DOS','Description': 'Olivetti DOS FAT12(1.44 MB)'},
|
||||||
'AB': {'OS': 'Darwin, Mac OS X / GO! OS','Description': 'Apple Darwin/OS X boot/GO!'},
|
'AB': {'OS': 'Darwin, Mac OS X / GO! OS','Description': 'Apple Darwin/OS X boot/GO!'},
|
||||||
'AD': {'OS': 'RISC OS','Description': 'ADFS / FileCore format'},
|
'AD': {'OS': 'RISC OS','Description': 'ADFS / FileCore format'},
|
||||||
'AE': {'OS': 'ShagOS','Description': 'ShagOS file system'},
|
'AE': {'OS': 'ShagOS','Description': 'ShagOS file system'},
|
||||||
'AF': {'OS': 'ShagOS','Description': 'OS X HFS & HFS+/ShagOS Swap'},
|
'AF': {'OS': 'ShagOS','Description': 'OS X HFS & HFS+/ShagOS Swap'},
|
||||||
'B0': {'OS': 'Boot-Star','Description': 'Boot-Star dummy partition'},
|
'B0': {'OS': 'Boot-Star','Description': 'Boot-Star dummy partition'},
|
||||||
'B1': {'OS': 'QNX 6.x','Description': 'HPVolExpansion/QNX Neutrino'},
|
'B1': {'OS': 'QNX 6.x','Description': 'HPVolExpansion/QNX Neutrino'},
|
||||||
'B2': {'OS': 'QNX 6.x','Description': 'QNX Neutrino power-safe FS'},
|
'B2': {'OS': 'QNX 6.x','Description': 'QNX Neutrino power-safe FS'},
|
||||||
'B3': {'OS': 'QNX 6.x','Description': 'HPVolExpansion/QNX Neutrino'},
|
'B3': {'OS': 'QNX 6.x','Description': 'HPVolExpansion/QNX Neutrino'},
|
||||||
'B4': {'OS': 'HP','Description': 'HP Vol Expansion(SpeedStor)'},
|
'B4': {'OS': 'HP','Description': 'HP Vol Expansion(SpeedStor)'},
|
||||||
'B6': {'OS': 'Windows NT 4 Server','Description': 'HPVolExpansion/FAT16Bmirror'},
|
'B6': {'OS': 'Windows NT 4 Server','Description': 'HPVolExpansion/FAT16Bmirror'},
|
||||||
'B7': {'OS': 'BSDI / Windows NT 4 Server','Description': 'BSDI,Swap,HPFS/NTFS mirror'},
|
'B7': {'OS': 'BSDI / Windows NT 4 Server','Description': 'BSDI,Swap,HPFS/NTFS mirror'},
|
||||||
'B8': {'OS': 'BSDI (before 3.0)','Description': 'BSDI Swap / native FS'},
|
'B8': {'OS': 'BSDI (before 3.0)','Description': 'BSDI Swap / native FS'},
|
||||||
'BB': {'OS': 'Acronis/BootWizard/WinNT 4','Description': 'BootWizard/OEM/FAT32 mirror'},
|
'BB': {'OS': 'Acronis/BootWizard/WinNT 4','Description': 'BootWizard/OEM/FAT32 mirror'},
|
||||||
'BC': {'OS': 'Acronis/WinNT/BackupCapsule','Description': 'FAT32RAID/SecureZone/Backup'},
|
'BC': {'OS': 'Acronis/WinNT/BackupCapsule','Description': 'FAT32RAID/SecureZone/Backup'},
|
||||||
'BD': {'OS': 'BonnyDOS/286','Description': 'Unknown'},
|
'BD': {'OS': 'BonnyDOS/286','Description': 'Unknown'},
|
||||||
'BE': {'OS': 'Solaris 8','Description': 'Solaris 8 boot'},
|
'BE': {'OS': 'Solaris 8','Description': 'Solaris 8 boot'},
|
||||||
'BF': {'OS': 'Solaris','Description': 'Solaris x86'},
|
'BF': {'OS': 'Solaris','Description': 'Solaris x86'},
|
||||||
'C0': {'OS': 'DR-DOS,MultiuserDOS,REAL/32','Description': 'Secured FAT (under 32 MB)'},
|
'C0': {'OS': 'DR-DOS,MultiuserDOS,REAL/32','Description': 'Secured FAT (under 32 MB)'},
|
||||||
'C1': {'OS': 'DR DOS','Description': 'Secured FAT12'},
|
'C1': {'OS': 'DR DOS','Description': 'Secured FAT12'},
|
||||||
'C2': {'OS': 'Power Boot','Description': 'Hidden Linux native FS'},
|
'C2': {'OS': 'Power Boot','Description': 'Hidden Linux native FS'},
|
||||||
'C3': {'OS': 'Power Boot','Description': 'Hidden Linux Swap'},
|
'C3': {'OS': 'Power Boot','Description': 'Hidden Linux Swap'},
|
||||||
'C4': {'OS': 'DR DOS','Description': 'Secured FAT16'},
|
'C4': {'OS': 'DR DOS','Description': 'Secured FAT16'},
|
||||||
'C5': {'OS': 'DR DOS','Description': 'Secured extended partition'},
|
'C5': {'OS': 'DR DOS','Description': 'Secured extended partition'},
|
||||||
'C6': {'OS': 'DR DOS / WinNT 4 Server','Description': 'Secured FAT16B/FAT16Bmirror'},
|
'C6': {'OS': 'DR DOS / WinNT 4 Server','Description': 'Secured FAT16B/FAT16Bmirror'},
|
||||||
'C7': {'OS': 'Syrinx / WinNT 4 Server','Description': 'Syrinx boot/HPFS/NTFSmirror'},
|
'C7': {'OS': 'Syrinx / WinNT 4 Server','Description': 'Syrinx boot/HPFS/NTFSmirror'},
|
||||||
'C8': {'Description': "DR-DOS Reserved (since '97)"},
|
'C8': {'Description': "DR-DOS Reserved (since '97)"},
|
||||||
'C9': {'Description': "DR-DOS Reserved (since '97)"},
|
'C9': {'Description': "DR-DOS Reserved (since '97)"},
|
||||||
'CA': {'Description': "DR-DOS Reserved (since '97)"},
|
'CA': {'Description': "DR-DOS Reserved (since '97)"},
|
||||||
'CB': {'OS': 'DR-DOSx / WinNT 4 Server','Description': 'Secured FAT32/FAT32 mirror'},
|
'CB': {'OS': 'DR-DOSx / WinNT 4 Server','Description': 'Secured FAT32/FAT32 mirror'},
|
||||||
'CC': {'OS': 'DR-DOSx / WinNT 4 Server','Description': 'Secured FAT32/FAT32 mirror'},
|
'CC': {'OS': 'DR-DOSx / WinNT 4 Server','Description': 'Secured FAT32/FAT32 mirror'},
|
||||||
'CD': {'OS': 'CTOS','Description': 'Memory dump'},
|
'CD': {'OS': 'CTOS','Description': 'Memory dump'},
|
||||||
'CE': {'OS': 'DR-DOSx','Description': 'Secured FAT16B'},
|
'CE': {'OS': 'DR-DOSx','Description': 'Secured FAT16B'},
|
||||||
'CF': {'OS': 'DR-DOSx','Description': 'Secured extended partition'},
|
'CF': {'OS': 'DR-DOSx','Description': 'Secured extended partition'},
|
||||||
'D0': {'OS': 'Multiuser DOS, REAL/32','Description': 'Secured FAT (over 32 MB)'},
|
'D0': {'OS': 'Multiuser DOS, REAL/32','Description': 'Secured FAT (over 32 MB)'},
|
||||||
'D1': {'OS': 'Multiuser DOS','Description': 'Secured FAT12'},
|
'D1': {'OS': 'Multiuser DOS','Description': 'Secured FAT12'},
|
||||||
'D4': {'OS': 'Multiuser DOS','Description': 'Secured FAT16'},
|
'D4': {'OS': 'Multiuser DOS','Description': 'Secured FAT16'},
|
||||||
'D5': {'OS': 'Multiuser DOS','Description': 'Secured extended partition'},
|
'D5': {'OS': 'Multiuser DOS','Description': 'Secured extended partition'},
|
||||||
'D6': {'OS': 'Multiuser DOS','Description': 'Secured FAT16B'},
|
'D6': {'OS': 'Multiuser DOS','Description': 'Secured FAT16B'},
|
||||||
'D8': {'OS': 'Digital Research','Description': 'CP/M-86 [citation needed]'},
|
'D8': {'OS': 'Digital Research','Description': 'CP/M-86 [citation needed]'},
|
||||||
'DA': {'OS': 'Powercopy Backup','Description': 'Non-FS data / Shielded disk'},
|
'DA': {'OS': 'Powercopy Backup','Description': 'Non-FS data / Shielded disk'},
|
||||||
'DB': {'OS': 'CP/M-86/CDOS/CTOS/D800/DRMK','Description': 'CP/M-86/ConcDOS/Boot/FAT32'},
|
'DB': {'OS': 'CP/M-86/CDOS/CTOS/D800/DRMK','Description': 'CP/M-86/ConcDOS/Boot/FAT32'},
|
||||||
'DD': {'OS': 'CTOS','Description': 'Hidden memory dump'},
|
'DD': {'OS': 'CTOS','Description': 'Hidden memory dump'},
|
||||||
'DE': {'OS': 'Dell','Description': 'FAT16 utility/diagnostic'},
|
'DE': {'OS': 'Dell','Description': 'FAT16 utility/diagnostic'},
|
||||||
'DF': {'OS': 'DG/UX / BootIt / Aviion','Description': 'DG/UX Virt DiskMan / EMBRM'},
|
'DF': {'OS': 'DG/UX / BootIt / Aviion','Description': 'DG/UX Virt DiskMan / EMBRM'},
|
||||||
'E0': {'OS': 'STMicroelectronics','Description': 'ST AVFS'},
|
'E0': {'OS': 'STMicroelectronics','Description': 'ST AVFS'},
|
||||||
'E1': {'OS': 'SpeedStor','Description': 'ExtendedFAT12 >1023cylinder'},
|
'E1': {'OS': 'SpeedStor','Description': 'ExtendedFAT12 >1023cylinder'},
|
||||||
'E2': {'Description': 'DOS read-only (XFDISK)'},
|
'E2': {'Description': 'DOS read-only (XFDISK)'},
|
||||||
'E3': {'OS': 'SpeedStor','Description': 'DOS read-only'},
|
'E3': {'OS': 'SpeedStor','Description': 'DOS read-only'},
|
||||||
'E4': {'OS': 'SpeedStor','Description': 'ExtendedFAT16 <1024cylinder'},
|
'E4': {'OS': 'SpeedStor','Description': 'ExtendedFAT16 <1024cylinder'},
|
||||||
'E5': {'OS': 'Tandy MS-DOS','Description': 'Logical FAT12 or FAT16'},
|
'E5': {'OS': 'Tandy MS-DOS','Description': 'Logical FAT12 or FAT16'},
|
||||||
'E6': {'OS': 'SpeedStor','Description': 'Unknown'},
|
'E6': {'OS': 'SpeedStor','Description': 'Unknown'},
|
||||||
'E8': {'OS': 'LUKS','Description': 'Linux Unified Key Setup'},
|
'E8': {'OS': 'LUKS','Description': 'Linux Unified Key Setup'},
|
||||||
'EB': {'OS': 'BeOS, Haiku','Description': 'BFS'},
|
'EB': {'OS': 'BeOS, Haiku','Description': 'BFS'},
|
||||||
'EC': {'OS': 'SkyOS','Description': 'SkyFS'},
|
'EC': {'OS': 'SkyOS','Description': 'SkyFS'},
|
||||||
'ED': {'OS': 'Sprytix / EDD 4','Description': 'EDC loader / GPT hybrid MBR'},
|
'ED': {'OS': 'Sprytix / EDD 4','Description': 'EDC loader / GPT hybrid MBR'},
|
||||||
'EE': {'OS': 'EFI','Description': 'GPT protective MBR'},
|
'EE': {'OS': 'EFI','Description': 'GPT protective MBR'},
|
||||||
'EF': {'OS': 'EFI','Description': 'EFI system partition'},
|
'EF': {'OS': 'EFI','Description': 'EFI system partition'},
|
||||||
'F0': {'OS': 'Linux / OS/32','Description': 'PA-RISC Linux boot loader.'},
|
'F0': {'OS': 'Linux / OS/32','Description': 'PA-RISC Linux boot loader.'},
|
||||||
'F1': {'OS': 'SpeedStor','Description': 'Unknown'},
|
'F1': {'OS': 'SpeedStor','Description': 'Unknown'},
|
||||||
'F2': {'OS': 'SperryIT DOS/Unisys DOS','Description': 'Logical FAT12/FAT16'},
|
'F2': {'OS': 'SperryIT DOS/Unisys DOS','Description': 'Logical FAT12/FAT16'},
|
||||||
'F3': {'OS': 'SpeedStor','Description': 'Unknown'},
|
'F3': {'OS': 'SpeedStor','Description': 'Unknown'},
|
||||||
'F4': {'OS': 'SpeedStor / Prologue','Description': '"large"DOS part/NGF/TwinFS'},
|
'F4': {'OS': 'SpeedStor / Prologue','Description': '"large"DOS part/NGF/TwinFS'},
|
||||||
'F5': {'OS': 'Prologue','Description': 'MD0-MD9 part for NGF/TwinFS'},
|
'F5': {'OS': 'Prologue','Description': 'MD0-MD9 part for NGF/TwinFS'},
|
||||||
'F6': {'OS': 'SpeedStor','Description': 'Unknown'},
|
'F6': {'OS': 'SpeedStor','Description': 'Unknown'},
|
||||||
'F7': {'OS': 'O.S.G. / X1','Description': 'EFAT / Solid State FS'},
|
'F7': {'OS': 'O.S.G. / X1','Description': 'EFAT / Solid State FS'},
|
||||||
'F9': {'OS': 'Linux','Description': 'pCache ext2/ext3 cache'},
|
'F9': {'OS': 'Linux','Description': 'pCache ext2/ext3 cache'},
|
||||||
'FA': {'OS': 'Bochs','Description': 'x86 emulator'},
|
'FA': {'OS': 'Bochs','Description': 'x86 emulator'},
|
||||||
'FB': {'OS': 'VMware','Description': 'VMware VMFS partition'},
|
'FB': {'OS': 'VMware','Description': 'VMware VMFS partition'},
|
||||||
'FC': {'OS': 'VMware','Description': 'Swap / VMKCORE kernel dump'},
|
'FC': {'OS': 'VMware','Description': 'Swap / VMKCORE kernel dump'},
|
||||||
'FD': {'OS': 'Linux / FreeDOS','Description': 'LinuxRAID/Reserved4FreeDOS'},
|
'FD': {'OS': 'Linux / FreeDOS','Description': 'LinuxRAID/Reserved4FreeDOS'},
|
||||||
'FE': {'OS': 'SpeedStor/LANstep/NT/Linux','Description': 'PS/2/DiskAdmin/old LinuxLVM'},
|
'FE': {'OS': 'SpeedStor/LANstep/NT/Linux','Description': 'PS/2/DiskAdmin/old LinuxLVM'},
|
||||||
'FF': {'OS': 'XENIX','Description': 'XENIX bad block table'},
|
'FF': {'OS': 'XENIX','Description': 'XENIX bad block table'},
|
||||||
'00000000-0000-0000-0000-000000000000': {'Description': 'Unused entry'},
|
'00000000-0000-0000-0000-000000000000': {'Description': 'Unused entry'},
|
||||||
'024DEE41-33E7-11D3-9D69-0008C781F39F': {'Description': 'MBR partition scheme'},
|
'024DEE41-33E7-11D3-9D69-0008C781F39F': {'Description': 'MBR partition scheme'},
|
||||||
'C12A7328-F81F-11D2-BA4B-00A0C93EC93B': {'Description': 'EFI System partition'},
|
'C12A7328-F81F-11D2-BA4B-00A0C93EC93B': {'Description': 'EFI System partition'},
|
||||||
'21686148-6449-6E6F-744E-656564454649': {'Description': 'BIOS Boot partition'},
|
'21686148-6449-6E6F-744E-656564454649': {'Description': 'BIOS Boot partition'},
|
||||||
'D3BFE2DE-3DAF-11DF-BA40-E3A556D89593': {'Description': 'Intel Fast Flash (iFFS) partition (for Intel Rapid Start technology)'},
|
'D3BFE2DE-3DAF-11DF-BA40-E3A556D89593': {'Description': 'Intel Fast Flash (iFFS) partition (for Intel Rapid Start technology)'},
|
||||||
'F4019732-066E-4E12-8273-346C5641494F': {'Description': 'Sony boot partition'},
|
'F4019732-066E-4E12-8273-346C5641494F': {'Description': 'Sony boot partition'},
|
||||||
'BFBFAFE7-A34F-448A-9A5B-6213EB736C22': {'Description': 'Lenovo boot partition'},
|
'BFBFAFE7-A34F-448A-9A5B-6213EB736C22': {'Description': 'Lenovo boot partition'},
|
||||||
'E3C9E316-0B5C-4DB8-817D-F92DF00215AE': {'OS': 'Windows', 'Description': 'Microsoft Reserved Partition (MSR)'},
|
'E3C9E316-0B5C-4DB8-817D-F92DF00215AE': {'OS': 'Windows', 'Description': 'Microsoft Reserved Partition (MSR)'},
|
||||||
'EBD0A0A2-B9E5-4433-87C0-68B6B72699C7': {'OS': 'Windows', 'Description': 'Basic data partition'},
|
'EBD0A0A2-B9E5-4433-87C0-68B6B72699C7': {'OS': 'Windows', 'Description': 'Basic data partition'},
|
||||||
'5808C8AA-7E8F-42E0-85D2-E1E90434CFB3': {'OS': 'Windows', 'Description': 'Logical Disk Manager (LDM) metadata partition'},
|
'5808C8AA-7E8F-42E0-85D2-E1E90434CFB3': {'OS': 'Windows', 'Description': 'Logical Disk Manager (LDM) metadata partition'},
|
||||||
'AF9B60A0-1431-4F62-BC68-3311714A69AD': {'OS': 'Windows', 'Description': 'Logical Disk Manager data partition'},
|
'AF9B60A0-1431-4F62-BC68-3311714A69AD': {'OS': 'Windows', 'Description': 'Logical Disk Manager data partition'},
|
||||||
'DE94BBA4-06D1-4D40-A16A-BFD50179D6AC': {'OS': 'Windows', 'Description': 'Windows Recovery Environment'},
|
'DE94BBA4-06D1-4D40-A16A-BFD50179D6AC': {'OS': 'Windows', 'Description': 'Windows Recovery Environment'},
|
||||||
'37AFFC90-EF7D-4E96-91C3-2D7AE055B174': {'OS': 'Windows', 'Description': 'IBM General Parallel File System (GPFS) partition'},
|
'37AFFC90-EF7D-4E96-91C3-2D7AE055B174': {'OS': 'Windows', 'Description': 'IBM General Parallel File System (GPFS) partition'},
|
||||||
'E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D': {'OS': 'Windows', 'Description': 'Storage Spaces partition'},
|
'E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D': {'OS': 'Windows', 'Description': 'Storage Spaces partition'},
|
||||||
'75894C1E-3AEB-11D3-B7C1-7B03A0000000': {'OS': 'HP-UX', 'Description': 'Data partition'},
|
'75894C1E-3AEB-11D3-B7C1-7B03A0000000': {'OS': 'HP-UX', 'Description': 'Data partition'},
|
||||||
'E2A1E728-32E3-11D6-A682-7B03A0000000': {'OS': 'HP-UX', 'Description': 'Service Partition'},
|
'E2A1E728-32E3-11D6-A682-7B03A0000000': {'OS': 'HP-UX', 'Description': 'Service Partition'},
|
||||||
'0FC63DAF-8483-4772-8E79-3D69D8477DE4': {'OS': 'Linux', 'Description': 'Linux filesystem data'},
|
'0FC63DAF-8483-4772-8E79-3D69D8477DE4': {'OS': 'Linux', 'Description': 'Linux filesystem data'},
|
||||||
'A19D880F-05FC-4D3B-A006-743F0F84911E': {'OS': 'Linux', 'Description': 'RAID partition'},
|
'A19D880F-05FC-4D3B-A006-743F0F84911E': {'OS': 'Linux', 'Description': 'RAID partition'},
|
||||||
'44479540-F297-41B2-9AF7-D131D5F0458A': {'OS': 'Linux', 'Description': 'Root partition (x86)'},
|
'44479540-F297-41B2-9AF7-D131D5F0458A': {'OS': 'Linux', 'Description': 'Root partition (x86)'},
|
||||||
'4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709': {'OS': 'Linux', 'Description': 'Root partition (x86-64)'},
|
'4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709': {'OS': 'Linux', 'Description': 'Root partition (x86-64)'},
|
||||||
'69DAD710-2CE4-4E3C-B16C-21A1D49ABED3': {'OS': 'Linux', 'Description': 'Root partition (32-bit ARM)'},
|
'69DAD710-2CE4-4E3C-B16C-21A1D49ABED3': {'OS': 'Linux', 'Description': 'Root partition (32-bit ARM)'},
|
||||||
'B921B045-1DF0-41C3-AF44-4C6F280D3FAE': {'OS': 'Linux', 'Description': 'Root partition (64-bit ARM)/AArch64)'},
|
'B921B045-1DF0-41C3-AF44-4C6F280D3FAE': {'OS': 'Linux', 'Description': 'Root partition (64-bit ARM)/AArch64)'},
|
||||||
'0657FD6D-A4AB-43C4-84E5-0933C84B4F4F': {'OS': 'Linux', 'Description': 'Swap partition'},
|
'0657FD6D-A4AB-43C4-84E5-0933C84B4F4F': {'OS': 'Linux', 'Description': 'Swap partition'},
|
||||||
'E6D6D379-F507-44C2-A23C-238F2A3DF928': {'OS': 'Linux', 'Description': 'Logical Volume Manager (LVM) partition'},
|
'E6D6D379-F507-44C2-A23C-238F2A3DF928': {'OS': 'Linux', 'Description': 'Logical Volume Manager (LVM) partition'},
|
||||||
'933AC7E1-2EB4-4F13-B844-0E14E2AEF915': {'OS': 'Linux', 'Description': '/home partition'},
|
'933AC7E1-2EB4-4F13-B844-0E14E2AEF915': {'OS': 'Linux', 'Description': '/home partition'},
|
||||||
'3B8F8425-20E0-4F3B-907F-1A25A76F98E8': {'OS': 'Linux', 'Description': '/srv (server data) partition'},
|
'3B8F8425-20E0-4F3B-907F-1A25A76F98E8': {'OS': 'Linux', 'Description': '/srv (server data) partition'},
|
||||||
'7FFEC5C9-2D00-49B7-8941-3EA10A5586B7': {'OS': 'Linux', 'Description': 'Plain dm-crypt partition'},
|
'7FFEC5C9-2D00-49B7-8941-3EA10A5586B7': {'OS': 'Linux', 'Description': 'Plain dm-crypt partition'},
|
||||||
'CA7D7CCB-63ED-4C53-861C-1742536059CC': {'OS': 'Linux', 'Description': 'LUKS partition'},
|
'CA7D7CCB-63ED-4C53-861C-1742536059CC': {'OS': 'Linux', 'Description': 'LUKS partition'},
|
||||||
'8DA63339-0007-60C0-C436-083AC8230908': {'OS': 'Linux', 'Description': 'Reserved'},
|
'8DA63339-0007-60C0-C436-083AC8230908': {'OS': 'Linux', 'Description': 'Reserved'},
|
||||||
'83BD6B9D-7F41-11DC-BE0B-001560B84F0F': {'OS': 'FreeBSD', 'Description': 'Boot partition'},
|
'83BD6B9D-7F41-11DC-BE0B-001560B84F0F': {'OS': 'FreeBSD', 'Description': 'Boot partition'},
|
||||||
'516E7CB4-6ECF-11D6-8FF8-00022D09712B': {'OS': 'FreeBSD', 'Description': 'Data partition'},
|
'516E7CB4-6ECF-11D6-8FF8-00022D09712B': {'OS': 'FreeBSD', 'Description': 'Data partition'},
|
||||||
'516E7CB5-6ECF-11D6-8FF8-00022D09712B': {'OS': 'FreeBSD', 'Description': 'Swap partition'},
|
'516E7CB5-6ECF-11D6-8FF8-00022D09712B': {'OS': 'FreeBSD', 'Description': 'Swap partition'},
|
||||||
'516E7CB6-6ECF-11D6-8FF8-00022D09712B': {'OS': 'FreeBSD', 'Description': 'Unix File System (UFS) partition'},
|
'516E7CB6-6ECF-11D6-8FF8-00022D09712B': {'OS': 'FreeBSD', 'Description': 'Unix File System (UFS) partition'},
|
||||||
'516E7CB8-6ECF-11D6-8FF8-00022D09712B': {'OS': 'FreeBSD', 'Description': 'Vinum volume manager partition'},
|
'516E7CB8-6ECF-11D6-8FF8-00022D09712B': {'OS': 'FreeBSD', 'Description': 'Vinum volume manager partition'},
|
||||||
'516E7CBA-6ECF-11D6-8FF8-00022D09712B': {'OS': 'FreeBSD', 'Description': 'ZFS partition'},
|
'516E7CBA-6ECF-11D6-8FF8-00022D09712B': {'OS': 'FreeBSD', 'Description': 'ZFS partition'},
|
||||||
'48465300-0000-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Hierarchical File System Plus (HFS+) partition'},
|
'48465300-0000-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Hierarchical File System Plus (HFS+) partition'},
|
||||||
'55465300-0000-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple UFS'},
|
'55465300-0000-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple UFS'},
|
||||||
'6A898CC3-1DD2-11B2-99A6-080020736631': {'OS': 'OS X Darwin', 'Description': 'ZFS'},
|
'6A898CC3-1DD2-11B2-99A6-080020736631': {'OS': 'OS X Darwin', 'Description': 'ZFS'},
|
||||||
'52414944-0000-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple RAID partition'},
|
'52414944-0000-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple RAID partition'},
|
||||||
'52414944-5F4F-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple RAID partition, offline'},
|
'52414944-5F4F-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple RAID partition, offline'},
|
||||||
'426F6F74-0000-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple Boot partition (Recovery HD)'},
|
'426F6F74-0000-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple Boot partition (Recovery HD)'},
|
||||||
'4C616265-6C00-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple Label'},
|
'4C616265-6C00-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple Label'},
|
||||||
'5265636F-7665-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple TV Recovery partition'},
|
'5265636F-7665-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple TV Recovery partition'},
|
||||||
'53746F72-6167-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple Core Storage (i.e. Lion FileVault) partition'},
|
'53746F72-6167-11AA-AA11-00306543ECAC': {'OS': 'OS X Darwin', 'Description': 'Apple Core Storage (i.e. Lion FileVault) partition'},
|
||||||
'6A82CB45-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Boot partition'},
|
'6A82CB45-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Boot partition'},
|
||||||
'6A85CF4D-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Root partition'},
|
'6A85CF4D-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Root partition'},
|
||||||
'6A87C46F-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Swap partition'},
|
'6A87C46F-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Swap partition'},
|
||||||
'6A8B642B-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Backup partition'},
|
'6A8B642B-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Backup partition'},
|
||||||
'6A898CC3-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': '/usr partition'},
|
'6A898CC3-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': '/usr partition'},
|
||||||
'6A8EF2E9-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': '/var partition'},
|
'6A8EF2E9-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': '/var partition'},
|
||||||
'6A90BA39-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': '/home partition'},
|
'6A90BA39-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': '/home partition'},
|
||||||
'6A9283A5-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Alternate sector'},
|
'6A9283A5-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Alternate sector'},
|
||||||
'6A945A3B-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Reserved partition'},
|
'6A945A3B-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos', 'Description': 'Reserved partition'},
|
||||||
'6A9630D1-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos'},
|
'6A9630D1-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos'},
|
||||||
'6A980767-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos'},
|
'6A980767-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos'},
|
||||||
'6A96237F-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos'},
|
'6A96237F-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos'},
|
||||||
'6A8D2AC7-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos'},
|
'6A8D2AC7-1DD2-11B2-99A6-080020736631': {'OS': 'Solaris illumos'},
|
||||||
'49F48D32-B10E-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'Swap partition'},
|
'49F48D32-B10E-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'Swap partition'},
|
||||||
'49F48D5A-B10E-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'FFS partition'},
|
'49F48D5A-B10E-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'FFS partition'},
|
||||||
'49F48D82-B10E-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'LFS partition'},
|
'49F48D82-B10E-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'LFS partition'},
|
||||||
'49F48DAA-B10E-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'RAID partition'},
|
'49F48DAA-B10E-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'RAID partition'},
|
||||||
'2DB519C4-B10F-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'Concatenated partition'},
|
'2DB519C4-B10F-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'Concatenated partition'},
|
||||||
'2DB519EC-B10F-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'Encrypted partition'},
|
'2DB519EC-B10F-11DC-B99B-0019D1879648': {'OS': 'NetBSD', 'Description': 'Encrypted partition'},
|
||||||
'FE3A2A5D-4F32-41A7-B725-ACCC3285A309': {'OS': 'ChromeOS', 'Description': 'ChromeOS kernel'},
|
'FE3A2A5D-4F32-41A7-B725-ACCC3285A309': {'OS': 'ChromeOS', 'Description': 'ChromeOS kernel'},
|
||||||
'3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC': {'OS': 'ChromeOS', 'Description': 'ChromeOS rootfs'},
|
'3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC': {'OS': 'ChromeOS', 'Description': 'ChromeOS rootfs'},
|
||||||
'2E0A753D-9E48-43B0-8337-B15192CB1B5E': {'OS': 'ChromeOS', 'Description': 'ChromeOS future use'},
|
'2E0A753D-9E48-43B0-8337-B15192CB1B5E': {'OS': 'ChromeOS', 'Description': 'ChromeOS future use'},
|
||||||
'42465331-3BA3-10F1-802A-4861696B7521': {'OS': 'Haiku', 'Description': 'Haiku BFS'},
|
'42465331-3BA3-10F1-802A-4861696B7521': {'OS': 'Haiku', 'Description': 'Haiku BFS'},
|
||||||
'85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'Boot partition'},
|
'85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'Boot partition'},
|
||||||
'85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'Data partition'},
|
'85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'Data partition'},
|
||||||
'85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'Swap partition'},
|
'85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'Swap partition'},
|
||||||
'0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'Unix File System (UFS) partition'},
|
'0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'Unix File System (UFS) partition'},
|
||||||
'85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'Vinum volume manager partition'},
|
'85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'Vinum volume manager partition'},
|
||||||
'85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'ZFS partition'},
|
'85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7': {'OS': 'MidnightBSD', 'Description': 'ZFS partition'},
|
||||||
'45B0969E-9B03-4F30-B4C6-B4B80CEFF106': {'OS': 'Ceph', 'Description': 'Ceph Journal'},
|
'45B0969E-9B03-4F30-B4C6-B4B80CEFF106': {'OS': 'Ceph', 'Description': 'Ceph Journal'},
|
||||||
'45B0969E-9B03-4F30-B4C6-5EC00CEFF106': {'OS': 'Ceph', 'Description': 'Ceph dm-crypt Encrypted Journal'},
|
'45B0969E-9B03-4F30-B4C6-5EC00CEFF106': {'OS': 'Ceph', 'Description': 'Ceph dm-crypt Encrypted Journal'},
|
||||||
'4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D': {'OS': 'Ceph', 'Description': 'Ceph OSD'},
|
'4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D': {'OS': 'Ceph', 'Description': 'Ceph OSD'},
|
||||||
'4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D': {'OS': 'Ceph', 'Description': 'Ceph dm-crypt OSD'},
|
'4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D': {'OS': 'Ceph', 'Description': 'Ceph dm-crypt OSD'},
|
||||||
'89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE': {'OS': 'Ceph', 'Description': 'Ceph disk in creation'},
|
'89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE': {'OS': 'Ceph', 'Description': 'Ceph disk in creation'},
|
||||||
'89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE': {'OS': 'Ceph', 'Description': 'Ceph dm-crypt disk in creation'},
|
'89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE': {'OS': 'Ceph', 'Description': 'Ceph dm-crypt disk in creation'},
|
||||||
'824CC7A0-36A8-11E3-890A-952519AD3F61': {'OS': 'OpenBSD', 'Description': 'Data partition'},
|
'824CC7A0-36A8-11E3-890A-952519AD3F61': {'OS': 'OpenBSD', 'Description': 'Data partition'},
|
||||||
'CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1': {'OS': 'QNX', 'Description': 'Power-safe (QNX6) file system'},
|
'CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1': {'OS': 'QNX', 'Description': 'Power-safe (QNX6) file system'},
|
||||||
'C91818F9-8025-47AF-89D2-F030D7000C2C': {'OS': 'Plan 9', 'Description': 'Plan 9 partition'},
|
'C91818F9-8025-47AF-89D2-F030D7000C2C': {'OS': 'Plan 9', 'Description': 'Plan 9 partition'},
|
||||||
'9D275380-40AD-11DB-BF97-000C2911D1B8': {'OS': 'VMware ESX', 'Description': 'vmkcore (coredump partition)'},
|
'9D275380-40AD-11DB-BF97-000C2911D1B8': {'OS': 'VMware ESX', 'Description': 'vmkcore (coredump partition)'},
|
||||||
'AA31E02A-400F-11DB-9590-000C2911D1B8': {'OS': 'VMware ESX', 'Description': 'VMFS filesystem partition'},
|
'AA31E02A-400F-11DB-9590-000C2911D1B8': {'OS': 'VMware ESX', 'Description': 'VMFS filesystem partition'},
|
||||||
'9198EFFC-31C0-11DB-8F78-000C2911D1B8': {'OS': 'VMware ESX', 'Description': 'VMware Reserved'},
|
'9198EFFC-31C0-11DB-8F78-000C2911D1B8': {'OS': 'VMware ESX', 'Description': 'VMware Reserved'},
|
||||||
'2568845D-2332-4675-BC39-8FA5A4748D15': {'OS': 'Android-IA', 'Description': 'Bootloader'},
|
'2568845D-2332-4675-BC39-8FA5A4748D15': {'OS': 'Android-IA', 'Description': 'Bootloader'},
|
||||||
'114EAFFE-1552-4022-B26E-9B053604CF84': {'OS': 'Android-IA', 'Description': 'Bootloader2'},
|
'114EAFFE-1552-4022-B26E-9B053604CF84': {'OS': 'Android-IA', 'Description': 'Bootloader2'},
|
||||||
'49A4D17F-93A3-45C1-A0DE-F50B2EBE2599': {'OS': 'Android-IA', 'Description': 'Boot'},
|
'49A4D17F-93A3-45C1-A0DE-F50B2EBE2599': {'OS': 'Android-IA', 'Description': 'Boot'},
|
||||||
'4177C722-9E92-4AAB-8644-43502BFD5506': {'OS': 'Android-IA', 'Description': 'Recovery'},
|
'4177C722-9E92-4AAB-8644-43502BFD5506': {'OS': 'Android-IA', 'Description': 'Recovery'},
|
||||||
'EF32A33B-A409-486C-9141-9FFB711F6266': {'OS': 'Android-IA', 'Description': 'Misc'},
|
'EF32A33B-A409-486C-9141-9FFB711F6266': {'OS': 'Android-IA', 'Description': 'Misc'},
|
||||||
'20AC26BE-20B7-11E3-84C5-6CFDB94711E9': {'OS': 'Android-IA', 'Description': 'Metadata'},
|
'20AC26BE-20B7-11E3-84C5-6CFDB94711E9': {'OS': 'Android-IA', 'Description': 'Metadata'},
|
||||||
'38F428E6-D326-425D-9140-6E0EA133647C': {'OS': 'Android-IA', 'Description': 'System'},
|
'38F428E6-D326-425D-9140-6E0EA133647C': {'OS': 'Android-IA', 'Description': 'System'},
|
||||||
'A893EF21-E428-470A-9E55-0668FD91A2D9': {'OS': 'Android-IA', 'Description': 'Cache'},
|
'A893EF21-E428-470A-9E55-0668FD91A2D9': {'OS': 'Android-IA', 'Description': 'Cache'},
|
||||||
'DC76DDA9-5AC1-491C-AF42-A82591580C0D': {'OS': 'Android-IA', 'Description': 'Data'},
|
'DC76DDA9-5AC1-491C-AF42-A82591580C0D': {'OS': 'Android-IA', 'Description': 'Data'},
|
||||||
'EBC597D0-2053-4B15-8B64-E0AAC75F4DB1': {'OS': 'Android-IA', 'Description': 'Persistent'},
|
'EBC597D0-2053-4B15-8B64-E0AAC75F4DB1': {'OS': 'Android-IA', 'Description': 'Persistent'},
|
||||||
'8F68CC74-C5E5-48DA-BE91-A0C8C15E9C80': {'OS': 'Android-IA', 'Description': 'Factory'},
|
'8F68CC74-C5E5-48DA-BE91-A0C8C15E9C80': {'OS': 'Android-IA', 'Description': 'Factory'},
|
||||||
'767941D0-2085-11E3-AD3B-6CFDB94711E9': {'OS': 'Android-IA', 'Description': 'Fastboot / Tertiary'},
|
'767941D0-2085-11E3-AD3B-6CFDB94711E9': {'OS': 'Android-IA', 'Description': 'Fastboot / Tertiary'},
|
||||||
'AC6D7924-EB71-4DF8-B48D-E267B27148FF': {'OS': 'Android-IA', 'Description': 'OEM'},
|
'AC6D7924-EB71-4DF8-B48D-E267B27148FF': {'OS': 'Android-IA', 'Description': 'OEM'},
|
||||||
'7412F7D5-A156-4B13-81DC-867174929325': {'OS': 'ONIE', 'Description': 'Boot'},
|
'7412F7D5-A156-4B13-81DC-867174929325': {'OS': 'ONIE', 'Description': 'Boot'},
|
||||||
'D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149': {'OS': 'ONIE', 'Description': 'Config'},
|
'D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149': {'OS': 'ONIE', 'Description': 'Config'},
|
||||||
'9E1A2D38-C612-4316-AA26-8B49521E5A8B': {'OS': 'PowerPC', 'Description': 'PReP boot'},
|
'9E1A2D38-C612-4316-AA26-8B49521E5A8B': {'OS': 'PowerPC', 'Description': 'PReP boot'},
|
||||||
'BC13C2FF-59E6-4262-A352-B275FD6F7172': {'OS': 'Freedesktop', 'Description': 'Extended Boot Partition ($BOOT)'},
|
'BC13C2FF-59E6-4262-A352-B275FD6F7172': {'OS': 'Freedesktop', 'Description': 'Extended Boot Partition ($BOOT)'},
|
||||||
}
|
}
|
||||||
|
|
||||||
def lookup_guid(guid):
|
def lookup_guid(guid):
|
||||||
return PARTITION_UIDS.get(guid.upper(), {})
|
return PARTITION_UIDS.get(guid.upper(), {})
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,111 +1,111 @@
|
||||||
# Wizard Kit: Functions - Product Keys
|
# Wizard Kit: Functions - Product Keys
|
||||||
|
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
|
|
||||||
# Regex
|
# Regex
|
||||||
REGEX_REGISTRY_DIRS = re.compile(
|
REGEX_REGISTRY_DIRS = re.compile(
|
||||||
r'^(config$|RegBack$|System32$|Transfer|Win)',
|
r'^(config$|RegBack$|System32$|Transfer|Win)',
|
||||||
re.IGNORECASE)
|
re.IGNORECASE)
|
||||||
REGEX_SOFTWARE_HIVE = re.compile(r'^Software$', re.IGNORECASE)
|
REGEX_SOFTWARE_HIVE = re.compile(r'^Software$', re.IGNORECASE)
|
||||||
|
|
||||||
def extract_keys():
|
def extract_keys():
|
||||||
"""Extract keys from provided hives and return a dict."""
|
"""Extract keys from provided hives and return a dict."""
|
||||||
keys = {}
|
keys = {}
|
||||||
|
|
||||||
# Extract keys
|
# Extract keys
|
||||||
extract_item('ProduKey', silent=True)
|
extract_item('ProduKey', silent=True)
|
||||||
for hive in find_software_hives():
|
for hive in find_software_hives():
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['ProduKey'],
|
global_vars['Tools']['ProduKey'],
|
||||||
'/IEKeys', '0',
|
'/IEKeys', '0',
|
||||||
'/WindowsKeys', '1',
|
'/WindowsKeys', '1',
|
||||||
'/OfficeKeys', '1',
|
'/OfficeKeys', '1',
|
||||||
'/ExtractEdition', '1',
|
'/ExtractEdition', '1',
|
||||||
'/nosavereg',
|
'/nosavereg',
|
||||||
'/regfile', hive,
|
'/regfile', hive,
|
||||||
'/scomma', '']
|
'/scomma', '']
|
||||||
try:
|
try:
|
||||||
out = run_program(cmd)
|
out = run_program(cmd)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
# Ignore and return empty dict
|
# Ignore and return empty dict
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
for line in out.stdout.decode().splitlines():
|
for line in out.stdout.decode().splitlines():
|
||||||
# Add key to keys under product only if unique
|
# Add key to keys under product only if unique
|
||||||
tmp = line.split(',')
|
tmp = line.split(',')
|
||||||
product = tmp[0]
|
product = tmp[0]
|
||||||
key = tmp[2]
|
key = tmp[2]
|
||||||
if product not in keys:
|
if product not in keys:
|
||||||
keys[product] = []
|
keys[product] = []
|
||||||
if key not in keys[product]:
|
if key not in keys[product]:
|
||||||
keys[product].append(key)
|
keys[product].append(key)
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
return keys
|
return keys
|
||||||
|
|
||||||
def list_clientdir_keys():
|
def list_clientdir_keys():
|
||||||
"""List product keys found in hives inside the ClientDir."""
|
"""List product keys found in hives inside the ClientDir."""
|
||||||
keys = extract_keys()
|
keys = extract_keys()
|
||||||
key_list = []
|
key_list = []
|
||||||
if keys:
|
if keys:
|
||||||
for product in sorted(keys):
|
for product in sorted(keys):
|
||||||
key_list.append(product)
|
key_list.append(product)
|
||||||
for key in sorted(keys[product]):
|
for key in sorted(keys[product]):
|
||||||
key_list.append(' {key}'.format(key=key))
|
key_list.append(' {key}'.format(key=key))
|
||||||
else:
|
else:
|
||||||
key_list.append('No keys found.')
|
key_list.append('No keys found.')
|
||||||
|
|
||||||
return key_list
|
return key_list
|
||||||
|
|
||||||
def find_software_hives():
|
def find_software_hives():
|
||||||
"""Search for transferred SW hives and return a list."""
|
"""Search for transferred SW hives and return a list."""
|
||||||
hives = []
|
hives = []
|
||||||
search_paths = [global_vars['ClientDir']]
|
search_paths = [global_vars['ClientDir']]
|
||||||
|
|
||||||
while len(search_paths) > 0:
|
while len(search_paths) > 0:
|
||||||
for item in os.scandir(search_paths.pop(0)):
|
for item in os.scandir(search_paths.pop(0)):
|
||||||
if item.is_dir() and REGEX_REGISTRY_DIRS.search(item.name):
|
if item.is_dir() and REGEX_REGISTRY_DIRS.search(item.name):
|
||||||
search_paths.append(item.path)
|
search_paths.append(item.path)
|
||||||
if item.is_file() and REGEX_SOFTWARE_HIVE.search(item.name):
|
if item.is_file() and REGEX_SOFTWARE_HIVE.search(item.name):
|
||||||
hives.append(item.path)
|
hives.append(item.path)
|
||||||
|
|
||||||
return hives
|
return hives
|
||||||
|
|
||||||
def get_product_keys():
|
def get_product_keys():
|
||||||
"""List product keys from saved report."""
|
"""List product keys from saved report."""
|
||||||
keys = []
|
keys = []
|
||||||
log_file = r'{LogDir}\Product Keys (ProduKey).txt'.format(**global_vars)
|
log_file = r'{LogDir}\Product Keys (ProduKey).txt'.format(**global_vars)
|
||||||
with open (log_file, 'r') as f:
|
with open (log_file, 'r') as f:
|
||||||
for line in f.readlines():
|
for line in f.readlines():
|
||||||
if re.search(r'^Product Name', line):
|
if re.search(r'^Product Name', line):
|
||||||
line = re.sub(r'^Product Name\s+:\s+(.*)', r'\1', line.strip())
|
line = re.sub(r'^Product Name\s+:\s+(.*)', r'\1', line.strip())
|
||||||
keys.append(line)
|
keys.append(line)
|
||||||
|
|
||||||
if keys:
|
if keys:
|
||||||
return keys
|
return keys
|
||||||
else:
|
else:
|
||||||
return ['No product keys found']
|
return ['No product keys found']
|
||||||
|
|
||||||
def run_produkey():
|
def run_produkey():
|
||||||
"""Run ProduKey and save report in the ClientDir."""
|
"""Run ProduKey and save report in the ClientDir."""
|
||||||
extract_item('ProduKey', silent=True)
|
extract_item('ProduKey', silent=True)
|
||||||
log_file = r'{LogDir}\Product Keys (ProduKey).txt'.format(**global_vars)
|
log_file = r'{LogDir}\Product Keys (ProduKey).txt'.format(**global_vars)
|
||||||
if not os.path.exists(log_file):
|
if not os.path.exists(log_file):
|
||||||
# Clear current configuration
|
# Clear current configuration
|
||||||
for config in ['ProduKey.cfg', 'ProduKey64.cfg']:
|
for config in ['ProduKey.cfg', 'ProduKey64.cfg']:
|
||||||
config = r'{BinDir}\ProduKey\{config}'.format(
|
config = r'{BinDir}\ProduKey\{config}'.format(
|
||||||
config=config, **global_vars)
|
config=config, **global_vars)
|
||||||
try:
|
try:
|
||||||
if os.path.exists(config):
|
if os.path.exists(config):
|
||||||
os.remove(config)
|
os.remove(config)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['ProduKey'],
|
global_vars['Tools']['ProduKey'],
|
||||||
'/nosavereg',
|
'/nosavereg',
|
||||||
'/stext',
|
'/stext',
|
||||||
log_file]
|
log_file]
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,126 +1,126 @@
|
||||||
# Wizard Kit: Functions - Repairs
|
# Wizard Kit: Functions - Repairs
|
||||||
|
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
|
|
||||||
def run_chkdsk(repair=False):
|
def run_chkdsk(repair=False):
|
||||||
"""Run CHKDSK scan or schedule offline repairs."""
|
"""Run CHKDSK scan or schedule offline repairs."""
|
||||||
if repair:
|
if repair:
|
||||||
run_chkdsk_offline()
|
run_chkdsk_offline()
|
||||||
else:
|
else:
|
||||||
run_chkdsk_scan()
|
run_chkdsk_scan()
|
||||||
|
|
||||||
def run_chkdsk_scan():
|
def run_chkdsk_scan():
|
||||||
"""Run CHKDSK in a "split window" and report errors."""
|
"""Run CHKDSK in a "split window" and report errors."""
|
||||||
if global_vars['OS']['Version'] in ['8', '10']:
|
if global_vars['OS']['Version'] in ['8', '10']:
|
||||||
cmd = ['chkdsk', global_vars['Env']['SYSTEMDRIVE'], '/scan', '/perf']
|
cmd = ['chkdsk', global_vars['Env']['SYSTEMDRIVE'], '/scan', '/perf']
|
||||||
else:
|
else:
|
||||||
cmd = ['chkdsk', global_vars['Env']['SYSTEMDRIVE']]
|
cmd = ['chkdsk', global_vars['Env']['SYSTEMDRIVE']]
|
||||||
out = run_program(cmd, check=False)
|
out = run_program(cmd, check=False)
|
||||||
# retcode == 0: no issues
|
# retcode == 0: no issues
|
||||||
# retcode == 1: fixed issues (also happens when chkdsk.exe is killed?)
|
# retcode == 1: fixed issues (also happens when chkdsk.exe is killed?)
|
||||||
# retcode == 2: issues
|
# retcode == 2: issues
|
||||||
if int(out.returncode) > 0:
|
if int(out.returncode) > 0:
|
||||||
# print_error(' ERROR: CHKDSK encountered errors')
|
# print_error(' ERROR: CHKDSK encountered errors')
|
||||||
raise GenericError
|
raise GenericError
|
||||||
|
|
||||||
# Save stderr
|
# Save stderr
|
||||||
with open(r'{LogDir}\CHKDSK.err'.format(**global_vars), 'a') as f:
|
with open(r'{LogDir}\CHKDSK.err'.format(**global_vars), 'a') as f:
|
||||||
for line in out.stderr.decode().splitlines():
|
for line in out.stderr.decode().splitlines():
|
||||||
f.write(line.strip() + '\n')
|
f.write(line.strip() + '\n')
|
||||||
# Save stdout
|
# Save stdout
|
||||||
with open(r'{LogDir}\CHKDSK.log'.format(**global_vars), 'a') as f:
|
with open(r'{LogDir}\CHKDSK.log'.format(**global_vars), 'a') as f:
|
||||||
for line in out.stdout.decode().splitlines():
|
for line in out.stdout.decode().splitlines():
|
||||||
f.write(line.strip() + '\n')
|
f.write(line.strip() + '\n')
|
||||||
|
|
||||||
def run_chkdsk_offline():
|
def run_chkdsk_offline():
|
||||||
"""Set filesystem 'dirty bit' to force a chkdsk during next boot."""
|
"""Set filesystem 'dirty bit' to force a chkdsk during next boot."""
|
||||||
cmd = [
|
cmd = [
|
||||||
'fsutil', 'dirty',
|
'fsutil', 'dirty',
|
||||||
'set',
|
'set',
|
||||||
global_vars['Env']['SYSTEMDRIVE']]
|
global_vars['Env']['SYSTEMDRIVE']]
|
||||||
out = run_program(cmd, check=False)
|
out = run_program(cmd, check=False)
|
||||||
if int(out.returncode) > 0:
|
if int(out.returncode) > 0:
|
||||||
raise GenericError
|
raise GenericError
|
||||||
|
|
||||||
def run_dism(repair=False):
|
def run_dism(repair=False):
|
||||||
"""Run DISM /RestoreHealth, then /CheckHealth, and then report errors."""
|
"""Run DISM /RestoreHealth, then /CheckHealth, and then report errors."""
|
||||||
if global_vars['OS']['Version'] in ['8', '10']:
|
if global_vars['OS']['Version'] in ['8', '10']:
|
||||||
if repair:
|
if repair:
|
||||||
# Restore Health
|
# Restore Health
|
||||||
cmd = [
|
cmd = [
|
||||||
'DISM', '/Online',
|
'DISM', '/Online',
|
||||||
'/Cleanup-Image', '/RestoreHealth',
|
'/Cleanup-Image', '/RestoreHealth',
|
||||||
r'/LogPath:"{LogDir}\DISM_RestoreHealth.log"'.format(
|
r'/LogPath:"{LogDir}\DISM_RestoreHealth.log"'.format(
|
||||||
**global_vars),
|
**global_vars),
|
||||||
'-new_console:n', '-new_console:s33V']
|
'-new_console:n', '-new_console:s33V']
|
||||||
else:
|
else:
|
||||||
# Scan Health
|
# Scan Health
|
||||||
cmd = [
|
cmd = [
|
||||||
'DISM', '/Online',
|
'DISM', '/Online',
|
||||||
'/Cleanup-Image', '/ScanHealth',
|
'/Cleanup-Image', '/ScanHealth',
|
||||||
r'/LogPath:"{LogDir}\DISM_ScanHealth.log"'.format(
|
r'/LogPath:"{LogDir}\DISM_ScanHealth.log"'.format(
|
||||||
**global_vars),
|
**global_vars),
|
||||||
'-new_console:n', '-new_console:s33V']
|
'-new_console:n', '-new_console:s33V']
|
||||||
run_program(cmd, pipe=False, check=False, shell=True)
|
run_program(cmd, pipe=False, check=False, shell=True)
|
||||||
wait_for_process('dism')
|
wait_for_process('dism')
|
||||||
# Now check health
|
# Now check health
|
||||||
cmd = [
|
cmd = [
|
||||||
'DISM', '/Online',
|
'DISM', '/Online',
|
||||||
'/Cleanup-Image', '/CheckHealth',
|
'/Cleanup-Image', '/CheckHealth',
|
||||||
r'/LogPath:"{LogDir}\DISM_CheckHealth.log"'.format(**global_vars)]
|
r'/LogPath:"{LogDir}\DISM_CheckHealth.log"'.format(**global_vars)]
|
||||||
result = run_program(cmd, shell=True).stdout.decode()
|
result = run_program(cmd, shell=True).stdout.decode()
|
||||||
# Check result
|
# Check result
|
||||||
if 'no component store corruption detected' not in result.lower():
|
if 'no component store corruption detected' not in result.lower():
|
||||||
raise GenericError
|
raise GenericError
|
||||||
else:
|
else:
|
||||||
raise UnsupportedOSError
|
raise UnsupportedOSError
|
||||||
|
|
||||||
def run_kvrt():
|
def run_kvrt():
|
||||||
"""Run KVRT."""
|
"""Run KVRT."""
|
||||||
extract_item('KVRT', silent=True)
|
extract_item('KVRT', silent=True)
|
||||||
os.makedirs(global_vars['QuarantineDir'], exist_ok=True)
|
os.makedirs(global_vars['QuarantineDir'], exist_ok=True)
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['KVRT'],
|
global_vars['Tools']['KVRT'],
|
||||||
'-accepteula', '-dontcryptsupportinfo', '-fixednames',
|
'-accepteula', '-dontcryptsupportinfo', '-fixednames',
|
||||||
'-d', global_vars['QuarantineDir'],
|
'-d', global_vars['QuarantineDir'],
|
||||||
'-processlevel', '3']
|
'-processlevel', '3']
|
||||||
popen_program(cmd, pipe=False)
|
popen_program(cmd, pipe=False)
|
||||||
|
|
||||||
def run_sfc_scan():
|
def run_sfc_scan():
|
||||||
"""Run SFC in a "split window" and report errors."""
|
"""Run SFC in a "split window" and report errors."""
|
||||||
cmd = [
|
cmd = [
|
||||||
r'{SYSTEMROOT}\System32\sfc.exe'.format(**global_vars['Env']),
|
r'{SYSTEMROOT}\System32\sfc.exe'.format(**global_vars['Env']),
|
||||||
'/scannow']
|
'/scannow']
|
||||||
out = run_program(cmd, check=False)
|
out = run_program(cmd, check=False)
|
||||||
# Save stderr
|
# Save stderr
|
||||||
with open(r'{LogDir}\SFC.err'.format(**global_vars), 'a') as f:
|
with open(r'{LogDir}\SFC.err'.format(**global_vars), 'a') as f:
|
||||||
for line in out.stderr.decode('utf-8', 'ignore').splitlines():
|
for line in out.stderr.decode('utf-8', 'ignore').splitlines():
|
||||||
f.write(line.strip() + '\n')
|
f.write(line.strip() + '\n')
|
||||||
# Save stdout
|
# Save stdout
|
||||||
with open(r'{LogDir}\SFC.log'.format(**global_vars), 'a') as f:
|
with open(r'{LogDir}\SFC.log'.format(**global_vars), 'a') as f:
|
||||||
for line in out.stdout.decode('utf-8', 'ignore').splitlines():
|
for line in out.stdout.decode('utf-8', 'ignore').splitlines():
|
||||||
f.write(line.strip() + '\n')
|
f.write(line.strip() + '\n')
|
||||||
# Check result
|
# Check result
|
||||||
log_text = out.stdout.decode('utf-8', 'ignore').replace('\0', '')
|
log_text = out.stdout.decode('utf-8', 'ignore').replace('\0', '')
|
||||||
if re.findall(r'did\s+not\s+find\s+any\s+integrity\s+violations', log_text):
|
if re.findall(r'did\s+not\s+find\s+any\s+integrity\s+violations', log_text):
|
||||||
pass
|
pass
|
||||||
elif re.findall(r'successfully\s+repaired\s+them', log_text):
|
elif re.findall(r'successfully\s+repaired\s+them', log_text):
|
||||||
raise GenericRepair
|
raise GenericRepair
|
||||||
else:
|
else:
|
||||||
raise GenericError
|
raise GenericError
|
||||||
|
|
||||||
def run_tdsskiller():
|
def run_tdsskiller():
|
||||||
"""Run TDSSKiller."""
|
"""Run TDSSKiller."""
|
||||||
extract_item('TDSSKiller', silent=True)
|
extract_item('TDSSKiller', silent=True)
|
||||||
os.makedirs(r'{QuarantineDir}\TDSSKiller'.format(
|
os.makedirs(r'{QuarantineDir}\TDSSKiller'.format(
|
||||||
**global_vars), exist_ok=True)
|
**global_vars), exist_ok=True)
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['TDSSKiller'],
|
global_vars['Tools']['TDSSKiller'],
|
||||||
'-l', r'{LogDir}\TDSSKiller.log'.format(**global_vars),
|
'-l', r'{LogDir}\TDSSKiller.log'.format(**global_vars),
|
||||||
'-qpath', r'{QuarantineDir}\TDSSKiller'.format(**global_vars),
|
'-qpath', r'{QuarantineDir}\TDSSKiller'.format(**global_vars),
|
||||||
'-accepteula', '-accepteulaksn',
|
'-accepteula', '-accepteulaksn',
|
||||||
'-dcexact', '-tdlfs']
|
'-dcexact', '-tdlfs']
|
||||||
run_program(cmd, pipe=False)
|
run_program(cmd, pipe=False)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,272 +1,272 @@
|
||||||
# Wizard Kit: Functions - Setup
|
# Wizard Kit: Functions - Setup
|
||||||
|
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
|
|
||||||
# STATIC VARIABLES
|
# STATIC VARIABLES
|
||||||
HKCU = winreg.HKEY_CURRENT_USER
|
HKCU = winreg.HKEY_CURRENT_USER
|
||||||
HKLM = winreg.HKEY_LOCAL_MACHINE
|
HKLM = winreg.HKEY_LOCAL_MACHINE
|
||||||
SETTINGS_CLASSIC_START = {
|
SETTINGS_CLASSIC_START = {
|
||||||
r'Software\IvoSoft\ClassicShell\Settings': {},
|
r'Software\IvoSoft\ClassicShell\Settings': {},
|
||||||
r'Software\IvoSoft\ClassicStartMenu': {
|
r'Software\IvoSoft\ClassicStartMenu': {
|
||||||
'DWORD Items': {'ShowedStyle2': 1},
|
'DWORD Items': {'ShowedStyle2': 1},
|
||||||
},
|
},
|
||||||
r'Software\IvoSoft\ClassicStartMenu\MRU': {},
|
r'Software\IvoSoft\ClassicStartMenu\MRU': {},
|
||||||
r'Software\IvoSoft\ClassicStartMenu\Settings': {
|
r'Software\IvoSoft\ClassicStartMenu\Settings': {
|
||||||
'DWORD Items': {'SkipMetro': 1},
|
'DWORD Items': {'SkipMetro': 1},
|
||||||
'SZ Items': {
|
'SZ Items': {
|
||||||
'MenuStyle': 'Win7',
|
'MenuStyle': 'Win7',
|
||||||
'RecentPrograms': 'Recent',
|
'RecentPrograms': 'Recent',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
SETTINGS_EXPLORER_SYSTEM = {
|
SETTINGS_EXPLORER_SYSTEM = {
|
||||||
# Disable Telemetry
|
# Disable Telemetry
|
||||||
r'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection': {
|
r'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection': {
|
||||||
'DWORD Items': {'AllowTelemetry': 0},
|
'DWORD Items': {'AllowTelemetry': 0},
|
||||||
},
|
},
|
||||||
r'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection': {
|
r'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection': {
|
||||||
'DWORD Items': {'AllowTelemetry': 0},
|
'DWORD Items': {'AllowTelemetry': 0},
|
||||||
'WOW64_32': True,
|
'WOW64_32': True,
|
||||||
},
|
},
|
||||||
r'SOFTWARE\Policies\Microsoft\Windows\DataCollection': {
|
r'SOFTWARE\Policies\Microsoft\Windows\DataCollection': {
|
||||||
'DWORD Items': {'AllowTelemetry': 0},
|
'DWORD Items': {'AllowTelemetry': 0},
|
||||||
},
|
},
|
||||||
# Disable Wi-Fi Sense
|
# Disable Wi-Fi Sense
|
||||||
r'Software\Microsoft\PolicyManager\default\WiFi\AllowWiFiHotSpotReporting': {
|
r'Software\Microsoft\PolicyManager\default\WiFi\AllowWiFiHotSpotReporting': {
|
||||||
'DWORD Items': {'Value': 0},
|
'DWORD Items': {'Value': 0},
|
||||||
},
|
},
|
||||||
r'Software\Microsoft\PolicyManager\default\WiFi\AllowAutoConnectToWiFiSenseHotspots': {
|
r'Software\Microsoft\PolicyManager\default\WiFi\AllowAutoConnectToWiFiSenseHotspots': {
|
||||||
'DWORD Items': {'Value': 0},
|
'DWORD Items': {'Value': 0},
|
||||||
},
|
},
|
||||||
# Disable Location Tracking
|
# Disable Location Tracking
|
||||||
r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Sensor\Overrides\{BFA794E4-F964-4FDB-90F6-51056BFE4B44}': {
|
r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Sensor\Overrides\{BFA794E4-F964-4FDB-90F6-51056BFE4B44}': {
|
||||||
'DWORD Items': {'SensorPermissionState': 0},
|
'DWORD Items': {'SensorPermissionState': 0},
|
||||||
},
|
},
|
||||||
r'System\CurrentControlSet\Services\lfsvc\Service\Configuration': {
|
r'System\CurrentControlSet\Services\lfsvc\Service\Configuration': {
|
||||||
'Status': {'Value': 0},
|
'Status': {'Value': 0},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
SETTINGS_EXPLORER_USER = {
|
SETTINGS_EXPLORER_USER = {
|
||||||
# Disable Cortana
|
# Disable Cortana
|
||||||
r'Software\Microsoft\Personalization\Settings': {
|
r'Software\Microsoft\Personalization\Settings': {
|
||||||
'DWORD Items': {'AcceptedPrivacyPolicy': 0},
|
'DWORD Items': {'AcceptedPrivacyPolicy': 0},
|
||||||
},
|
},
|
||||||
r'Software\Microsoft\InputPersonalization': {
|
r'Software\Microsoft\InputPersonalization': {
|
||||||
'DWORD Items': {
|
'DWORD Items': {
|
||||||
'RestrictImplicitTextCollection': 1,
|
'RestrictImplicitTextCollection': 1,
|
||||||
'RestrictImplicitInkCollection': 1
|
'RestrictImplicitInkCollection': 1
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
r'Software\Microsoft\InputPersonalization\TrainedDataStore': {
|
r'Software\Microsoft\InputPersonalization\TrainedDataStore': {
|
||||||
'DWORD Items': {'HarvestContacts': 1},
|
'DWORD Items': {'HarvestContacts': 1},
|
||||||
},
|
},
|
||||||
# Hide Search button / box
|
# Hide Search button / box
|
||||||
r'Software\Microsoft\Windows\CurrentVersion\Search': {
|
r'Software\Microsoft\Windows\CurrentVersion\Search': {
|
||||||
'DWORD Items': {'SearchboxTaskbarMode': 0},
|
'DWORD Items': {'SearchboxTaskbarMode': 0},
|
||||||
},
|
},
|
||||||
# Change default Explorer view to "Computer"
|
# Change default Explorer view to "Computer"
|
||||||
r'Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced': {
|
r'Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced': {
|
||||||
'DWORD Items': {'LaunchTo': 1},
|
'DWORD Items': {'LaunchTo': 1},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
SETTINGS_GOOGLE_CHROME = {
|
SETTINGS_GOOGLE_CHROME = {
|
||||||
r'Software\Google\Chrome\Extensions': {
|
r'Software\Google\Chrome\Extensions': {
|
||||||
'WOW64_32': True,
|
'WOW64_32': True,
|
||||||
},
|
},
|
||||||
r'Software\Google\Chrome\Extensions\cjpalhdlnbpafiamejdnhcphjbkeiagm': {
|
r'Software\Google\Chrome\Extensions\cjpalhdlnbpafiamejdnhcphjbkeiagm': {
|
||||||
'SZ Items': {
|
'SZ Items': {
|
||||||
'update_url': 'https://clients2.google.com/service/update2/crx'},
|
'update_url': 'https://clients2.google.com/service/update2/crx'},
|
||||||
'WOW64_32': True,
|
'WOW64_32': True,
|
||||||
},
|
},
|
||||||
r'Software\Google\Chrome\Extensions\pgdnlhfefecpicbbihgmbmffkjpaplco': {
|
r'Software\Google\Chrome\Extensions\pgdnlhfefecpicbbihgmbmffkjpaplco': {
|
||||||
'SZ Items': {
|
'SZ Items': {
|
||||||
'update_url': 'https://clients2.google.com/service/update2/crx'},
|
'update_url': 'https://clients2.google.com/service/update2/crx'},
|
||||||
'WOW64_32': True,
|
'WOW64_32': True,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
VCR_REDISTS = [
|
VCR_REDISTS = [
|
||||||
{'Name': 'Visual C++ 2008 SP1 x32...',
|
{'Name': 'Visual C++ 2008 SP1 x32...',
|
||||||
'Cmd': [r'2008sp1\x32\vcredist.exe', '/qb! /norestart']},
|
'Cmd': [r'2008sp1\x32\vcredist.exe', '/qb! /norestart']},
|
||||||
{'Name': 'Visual C++ 2008 SP1 x64...',
|
{'Name': 'Visual C++ 2008 SP1 x64...',
|
||||||
'Cmd': [r'2008sp1\x64\vcredist.exe', '/qb! /norestart']},
|
'Cmd': [r'2008sp1\x64\vcredist.exe', '/qb! /norestart']},
|
||||||
{'Name': 'Visual C++ 2010 x32...',
|
{'Name': 'Visual C++ 2010 x32...',
|
||||||
'Cmd': [r'2010sp1\x32\vcredist.exe', '/passive', '/norestart']},
|
'Cmd': [r'2010sp1\x32\vcredist.exe', '/passive', '/norestart']},
|
||||||
{'Name': 'Visual C++ 2010 x64...',
|
{'Name': 'Visual C++ 2010 x64...',
|
||||||
'Cmd': [r'2010sp1\x64\vcredist.exe', '/passive', '/norestart']},
|
'Cmd': [r'2010sp1\x64\vcredist.exe', '/passive', '/norestart']},
|
||||||
{'Name': 'Visual C++ 2012 Update 4 x32...',
|
{'Name': 'Visual C++ 2012 Update 4 x32...',
|
||||||
'Cmd': [r'2012u4\x32\vcredist.exe', '/passive', '/norestart']},
|
'Cmd': [r'2012u4\x32\vcredist.exe', '/passive', '/norestart']},
|
||||||
{'Name': 'Visual C++ 2012 Update 4 x64...',
|
{'Name': 'Visual C++ 2012 Update 4 x64...',
|
||||||
'Cmd': [r'2012u4\x64\vcredist.exe', '/passive', '/norestart']},
|
'Cmd': [r'2012u4\x64\vcredist.exe', '/passive', '/norestart']},
|
||||||
{'Name': 'Visual C++ 2013 x32...',
|
{'Name': 'Visual C++ 2013 x32...',
|
||||||
'Cmd': [r'2013\x32\vcredist.exe', '/install',
|
'Cmd': [r'2013\x32\vcredist.exe', '/install',
|
||||||
'/passive', '/norestart']},
|
'/passive', '/norestart']},
|
||||||
{'Name': 'Visual C++ 2013 x64...',
|
{'Name': 'Visual C++ 2013 x64...',
|
||||||
'Cmd': [r'2013\x64\vcredist.exe', '/install',
|
'Cmd': [r'2013\x64\vcredist.exe', '/install',
|
||||||
'/passive', '/norestart']},
|
'/passive', '/norestart']},
|
||||||
{'Name': 'Visual C++ 2017 x32...',
|
{'Name': 'Visual C++ 2017 x32...',
|
||||||
'Cmd': [r'2017\x32\vcredist.exe', '/install',
|
'Cmd': [r'2017\x32\vcredist.exe', '/install',
|
||||||
'/passive', '/norestart']},
|
'/passive', '/norestart']},
|
||||||
{'Name': 'Visual C++ 2017 x64...',
|
{'Name': 'Visual C++ 2017 x64...',
|
||||||
'Cmd': [r'2017\x64\vcredist.exe', '/install',
|
'Cmd': [r'2017\x64\vcredist.exe', '/install',
|
||||||
'/passive', '/norestart']},
|
'/passive', '/norestart']},
|
||||||
]
|
]
|
||||||
|
|
||||||
def config_classicstart():
|
def config_classicstart():
|
||||||
"""Configure ClassicStart."""
|
"""Configure ClassicStart."""
|
||||||
# User level, not system level
|
# User level, not system level
|
||||||
cs_exe = r'{PROGRAMFILES}\Classic Shell\ClassicStartMenu.exe'.format(
|
cs_exe = r'{PROGRAMFILES}\Classic Shell\ClassicStartMenu.exe'.format(
|
||||||
**global_vars['Env'])
|
**global_vars['Env'])
|
||||||
skin = r'{PROGRAMFILES}\Classic Shell\Skins\Metro-Win10-Black.skin7'.format(
|
skin = r'{PROGRAMFILES}\Classic Shell\Skins\Metro-Win10-Black.skin7'.format(
|
||||||
**global_vars['Env'])
|
**global_vars['Env'])
|
||||||
extract_item('ClassicStartSkin', silent=True)
|
extract_item('ClassicStartSkin', silent=True)
|
||||||
|
|
||||||
# Stop Classic Start
|
# Stop Classic Start
|
||||||
run_program([cs_exe, '-exit'], check=False)
|
run_program([cs_exe, '-exit'], check=False)
|
||||||
sleep(1)
|
sleep(1)
|
||||||
kill_process('ClassicStartMenu.exe')
|
kill_process('ClassicStartMenu.exe')
|
||||||
|
|
||||||
# Configure
|
# Configure
|
||||||
write_registry_settings(SETTINGS_CLASSIC_START, all_users=False)
|
write_registry_settings(SETTINGS_CLASSIC_START, all_users=False)
|
||||||
if global_vars['OS']['Version'] == '10' and os.path.exists(skin):
|
if global_vars['OS']['Version'] == '10' and os.path.exists(skin):
|
||||||
# Enable Win10 theme if on Win10
|
# Enable Win10 theme if on Win10
|
||||||
key_path = r'Software\IvoSoft\ClassicStartMenu\Settings'
|
key_path = r'Software\IvoSoft\ClassicStartMenu\Settings'
|
||||||
with winreg.OpenKey(HKCU, key_path, access=winreg.KEY_WRITE) as key:
|
with winreg.OpenKey(HKCU, key_path, access=winreg.KEY_WRITE) as key:
|
||||||
winreg.SetValueEx(
|
winreg.SetValueEx(
|
||||||
key, 'SkinW7', 0, winreg.REG_SZ, 'Metro-Win10-Black')
|
key, 'SkinW7', 0, winreg.REG_SZ, 'Metro-Win10-Black')
|
||||||
winreg.SetValueEx(key, 'SkinVariationW7', 0, winreg.REG_SZ, '')
|
winreg.SetValueEx(key, 'SkinVariationW7', 0, winreg.REG_SZ, '')
|
||||||
|
|
||||||
# Pin Browser to Start Menu (Classic)
|
# Pin Browser to Start Menu (Classic)
|
||||||
firefox = r'{PROGRAMDATA}\Start Menu\Programs\Mozilla Firefox.lnk'.format(
|
firefox = r'{PROGRAMDATA}\Start Menu\Programs\Mozilla Firefox.lnk'.format(
|
||||||
**global_vars['Env'])
|
**global_vars['Env'])
|
||||||
chrome = r'{PROGRAMDATA}\Start Menu\Programs\Google Chrome.lnk'.format(
|
chrome = r'{PROGRAMDATA}\Start Menu\Programs\Google Chrome.lnk'.format(
|
||||||
**global_vars['Env'])
|
**global_vars['Env'])
|
||||||
dest_path = r'{APPDATA}\ClassicShell\Pinned'.format(**global_vars['Env'])
|
dest_path = r'{APPDATA}\ClassicShell\Pinned'.format(**global_vars['Env'])
|
||||||
source = None
|
source = None
|
||||||
dest = None
|
dest = None
|
||||||
if os.path.exists(firefox):
|
if os.path.exists(firefox):
|
||||||
source = firefox
|
source = firefox
|
||||||
dest = r'{}\Mozilla Firefox.lnk'.format(dest_path)
|
dest = r'{}\Mozilla Firefox.lnk'.format(dest_path)
|
||||||
elif os.path.exists(chrome):
|
elif os.path.exists(chrome):
|
||||||
source = chrome
|
source = chrome
|
||||||
dest = r'{}\Google Chrome.lnk'.format(dest_path)
|
dest = r'{}\Google Chrome.lnk'.format(dest_path)
|
||||||
if source:
|
if source:
|
||||||
try:
|
try:
|
||||||
os.makedirs(dest_path, exist_ok=True)
|
os.makedirs(dest_path, exist_ok=True)
|
||||||
shutil.copy(source, dest)
|
shutil.copy(source, dest)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass # Meh, it's fine without
|
pass # Meh, it's fine without
|
||||||
|
|
||||||
# (Re)start Classic Start
|
# (Re)start Classic Start
|
||||||
run_program([cs_exe, '-exit'], check=False)
|
run_program([cs_exe, '-exit'], check=False)
|
||||||
sleep(1)
|
sleep(1)
|
||||||
kill_process('ClassicStartMenu.exe')
|
kill_process('ClassicStartMenu.exe')
|
||||||
sleep(1)
|
sleep(1)
|
||||||
popen_program(cs_exe)
|
popen_program(cs_exe)
|
||||||
|
|
||||||
def write_registry_settings(settings, all_users=False):
|
def write_registry_settings(settings, all_users=False):
|
||||||
"""Write registry values from custom dict of dicts."""
|
"""Write registry values from custom dict of dicts."""
|
||||||
hive = HKCU
|
hive = HKCU
|
||||||
if all_users:
|
if all_users:
|
||||||
hive = HKLM
|
hive = HKLM
|
||||||
for k, v in settings.items():
|
for k, v in settings.items():
|
||||||
# CreateKey
|
# CreateKey
|
||||||
access = winreg.KEY_WRITE
|
access = winreg.KEY_WRITE
|
||||||
if 'WOW64_32' in v:
|
if 'WOW64_32' in v:
|
||||||
access = access | winreg.KEY_WOW64_32KEY
|
access = access | winreg.KEY_WOW64_32KEY
|
||||||
winreg.CreateKeyEx(hive, k, 0, access)
|
winreg.CreateKeyEx(hive, k, 0, access)
|
||||||
|
|
||||||
# Create values
|
# Create values
|
||||||
with winreg.OpenKeyEx(hive, k, 0, access) as key:
|
with winreg.OpenKeyEx(hive, k, 0, access) as key:
|
||||||
for name, value in v.get('DWORD Items', {}).items():
|
for name, value in v.get('DWORD Items', {}).items():
|
||||||
winreg.SetValueEx(key, name, 0, winreg.REG_DWORD, value)
|
winreg.SetValueEx(key, name, 0, winreg.REG_DWORD, value)
|
||||||
for name, value in v.get('SZ Items', {}).items():
|
for name, value in v.get('SZ Items', {}).items():
|
||||||
winreg.SetValueEx(key, name, 0, winreg.REG_SZ, value)
|
winreg.SetValueEx(key, name, 0, winreg.REG_SZ, value)
|
||||||
|
|
||||||
def config_explorer_system():
|
def config_explorer_system():
|
||||||
"""Configure Windows Explorer for all users via Registry settings."""
|
"""Configure Windows Explorer for all users via Registry settings."""
|
||||||
write_registry_settings(SETTINGS_EXPLORER_SYSTEM, all_users=True)
|
write_registry_settings(SETTINGS_EXPLORER_SYSTEM, all_users=True)
|
||||||
|
|
||||||
def config_explorer_user():
|
def config_explorer_user():
|
||||||
"""Configure Windows Explorer for current user via Registry settings."""
|
"""Configure Windows Explorer for current user via Registry settings."""
|
||||||
write_registry_settings(SETTINGS_EXPLORER_USER, all_users=False)
|
write_registry_settings(SETTINGS_EXPLORER_USER, all_users=False)
|
||||||
|
|
||||||
def update_clock():
|
def update_clock():
|
||||||
"""Set Timezone and sync clock."""
|
"""Set Timezone and sync clock."""
|
||||||
run_program(['tzutil' ,'/s', TIME_ZONE], check=False)
|
run_program(['tzutil' ,'/s', TIME_ZONE], check=False)
|
||||||
run_program(['net', 'stop', 'w32ime'], check=False)
|
run_program(['net', 'stop', 'w32ime'], check=False)
|
||||||
run_program(
|
run_program(
|
||||||
['w32tm', '/config', '/syncfromflags:manual',
|
['w32tm', '/config', '/syncfromflags:manual',
|
||||||
'/manualpeerlist:"us.pool.ntp.org time.nist.gov time.windows.com"',
|
'/manualpeerlist:"us.pool.ntp.org time.nist.gov time.windows.com"',
|
||||||
],
|
],
|
||||||
check=False)
|
check=False)
|
||||||
run_program(['net', 'start', 'w32ime'], check=False)
|
run_program(['net', 'start', 'w32ime'], check=False)
|
||||||
run_program(['w32tm', '/resync', '/nowait'], check=False)
|
run_program(['w32tm', '/resync', '/nowait'], check=False)
|
||||||
|
|
||||||
# Installations
|
# Installations
|
||||||
def install_adobe_reader():
|
def install_adobe_reader():
|
||||||
"""Install Adobe Reader."""
|
"""Install Adobe Reader."""
|
||||||
cmd = [
|
cmd = [
|
||||||
r'{BaseDir}\Installers\Extras\Office\Adobe Reader DC.exe'.format(
|
r'{BaseDir}\Installers\Extras\Office\Adobe Reader DC.exe'.format(
|
||||||
**global_vars),
|
**global_vars),
|
||||||
'/sAll',
|
'/sAll',
|
||||||
'/msi', '/norestart', '/quiet',
|
'/msi', '/norestart', '/quiet',
|
||||||
'ALLUSERS=1',
|
'ALLUSERS=1',
|
||||||
'EULA_ACCEPT=YES']
|
'EULA_ACCEPT=YES']
|
||||||
try_and_print(message='Adobe Reader DC...', function=run_program, cmd=cmd)
|
try_and_print(message='Adobe Reader DC...', function=run_program, cmd=cmd)
|
||||||
|
|
||||||
def install_chrome_extensions():
|
def install_chrome_extensions():
|
||||||
"""Update registry to 'install' Google Chrome extensions for all users."""
|
"""Update registry to 'install' Google Chrome extensions for all users."""
|
||||||
write_registry_settings(SETTINGS_GOOGLE_CHROME, all_users=True)
|
write_registry_settings(SETTINGS_GOOGLE_CHROME, all_users=True)
|
||||||
|
|
||||||
def install_classicstart_skin():
|
def install_classicstart_skin():
|
||||||
"""Extract ClassicStart skin to installation folder."""
|
"""Extract ClassicStart skin to installation folder."""
|
||||||
if global_vars['OS']['Version'] not in ['8', '10']:
|
if global_vars['OS']['Version'] not in ['8', '10']:
|
||||||
raise UnsupportedOSError
|
raise UnsupportedOSError
|
||||||
extract_item('ClassicStartSkin', silent=True)
|
extract_item('ClassicStartSkin', silent=True)
|
||||||
source = r'{BinDir}\ClassicStartSkin\Metro-Win10-Black.skin7'.format(
|
source = r'{BinDir}\ClassicStartSkin\Metro-Win10-Black.skin7'.format(
|
||||||
**global_vars)
|
**global_vars)
|
||||||
dest_path = r'{PROGRAMFILES}\Classic Shell\Skins'.format(
|
dest_path = r'{PROGRAMFILES}\Classic Shell\Skins'.format(
|
||||||
**global_vars['Env'])
|
**global_vars['Env'])
|
||||||
dest = r'{}\Metro-Win10-Black.skin7'.format(dest_path)
|
dest = r'{}\Metro-Win10-Black.skin7'.format(dest_path)
|
||||||
os.makedirs(dest_path, exist_ok=True)
|
os.makedirs(dest_path, exist_ok=True)
|
||||||
shutil.copy(source, dest)
|
shutil.copy(source, dest)
|
||||||
|
|
||||||
def install_firefox_extensions():
|
def install_firefox_extensions():
|
||||||
"""Extract Firefox extensions to installation folder."""
|
"""Extract Firefox extensions to installation folder."""
|
||||||
dist_path = r'{PROGRAMFILES}\Mozilla Firefox\distribution\extensions'.format(
|
dist_path = r'{PROGRAMFILES}\Mozilla Firefox\distribution\extensions'.format(
|
||||||
**global_vars['Env'])
|
**global_vars['Env'])
|
||||||
# Extract extension(s) to distribution folder
|
# Extract extension(s) to distribution folder
|
||||||
cmd = [
|
cmd = [
|
||||||
global_vars['Tools']['SevenZip'], 'x', '-aos', '-bso0', '-bse0',
|
global_vars['Tools']['SevenZip'], 'x', '-aos', '-bso0', '-bse0',
|
||||||
'-p{ArchivePassword}'.format(**global_vars),
|
'-p{ArchivePassword}'.format(**global_vars),
|
||||||
'-o{dist_path}'.format(dist_path=dist_path),
|
'-o{dist_path}'.format(dist_path=dist_path),
|
||||||
r'{CBinDir}\FirefoxExtensions.7z'.format(**global_vars)]
|
r'{CBinDir}\FirefoxExtensions.7z'.format(**global_vars)]
|
||||||
run_program(cmd)
|
run_program(cmd)
|
||||||
|
|
||||||
def install_ninite_bundle(mse=False):
|
def install_ninite_bundle(mse=False):
|
||||||
"""Run Ninite file(s) based on OS version."""
|
"""Run Ninite file(s) based on OS version."""
|
||||||
if global_vars['OS']['Version'] in ['8', '10']:
|
if global_vars['OS']['Version'] in ['8', '10']:
|
||||||
# Modern selection
|
# Modern selection
|
||||||
popen_program(r'{BaseDir}\Installers\Extras\Bundles\Modern.exe'.format(
|
popen_program(r'{BaseDir}\Installers\Extras\Bundles\Modern.exe'.format(
|
||||||
**global_vars))
|
**global_vars))
|
||||||
else:
|
else:
|
||||||
# Legacy selection
|
# Legacy selection
|
||||||
if mse:
|
if mse:
|
||||||
cmd = r'{BaseDir}\Installers\Extras\Security'.format(**global_vars)
|
cmd = r'{BaseDir}\Installers\Extras\Security'.format(**global_vars)
|
||||||
cmd += r'\Microsoft Security Essentials.exe'
|
cmd += r'\Microsoft Security Essentials.exe'
|
||||||
popen_program(cmd)
|
popen_program(cmd)
|
||||||
popen_program(r'{BaseDir}\Installers\Extras\Bundles\Legacy.exe'.format(
|
popen_program(r'{BaseDir}\Installers\Extras\Bundles\Legacy.exe'.format(
|
||||||
**global_vars))
|
**global_vars))
|
||||||
|
|
||||||
def install_vcredists():
|
def install_vcredists():
|
||||||
"""Install all supported Visual C++ runtimes."""
|
"""Install all supported Visual C++ runtimes."""
|
||||||
extract_item('_vcredists', silent=True)
|
extract_item('_vcredists', silent=True)
|
||||||
prev_dir = os.getcwd()
|
prev_dir = os.getcwd()
|
||||||
os.chdir(r'{BinDir}\_vcredists'.format(**global_vars))
|
os.chdir(r'{BinDir}\_vcredists'.format(**global_vars))
|
||||||
for vcr in VCR_REDISTS:
|
for vcr in VCR_REDISTS:
|
||||||
try_and_print(message=vcr['Name'], function=run_program, cmd=vcr['Cmd'])
|
try_and_print(message=vcr['Name'], function=run_program, cmd=vcr['Cmd'])
|
||||||
|
|
||||||
os.chdir(prev_dir)
|
os.chdir(prev_dir)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,60 +1,60 @@
|
||||||
# Wizard Kit: Install the standard SW bundle based on the OS version
|
# Wizard Kit: Install the standard SW bundle based on the OS version
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.setup import *
|
from functions.setup import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: SW Bundle Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: SW Bundle Tool'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\Install SW Bundle.log'.format(**global_vars)
|
global_vars['LogFile'] = r'{LogDir}\Install SW Bundle.log'.format(**global_vars)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: SW Bundle Tool\n'.format(KIT_NAME_FULL))
|
print_info('{}: SW Bundle Tool\n'.format(KIT_NAME_FULL))
|
||||||
other_results = {
|
other_results = {
|
||||||
'Error': {
|
'Error': {
|
||||||
'CalledProcessError': 'Unknown Error',
|
'CalledProcessError': 'Unknown Error',
|
||||||
},
|
},
|
||||||
'Warning': {
|
'Warning': {
|
||||||
'GenericRepair': 'Repaired',
|
'GenericRepair': 'Repaired',
|
||||||
'UnsupportedOSError': 'Unsupported OS',
|
'UnsupportedOSError': 'Unsupported OS',
|
||||||
}}
|
}}
|
||||||
answer_extensions = ask('Install Extensions?')
|
answer_extensions = ask('Install Extensions?')
|
||||||
answer_adobe_reader = ask('Install Adobe Reader?')
|
answer_adobe_reader = ask('Install Adobe Reader?')
|
||||||
answer_vcr = ask('Install Visual C++ Runtimes?')
|
answer_vcr = ask('Install Visual C++ Runtimes?')
|
||||||
answer_ninite = ask('Install Ninite Bundle?')
|
answer_ninite = ask('Install Ninite Bundle?')
|
||||||
if answer_ninite and global_vars['OS']['Version'] in ['7']:
|
if answer_ninite and global_vars['OS']['Version'] in ['7']:
|
||||||
# Vista is dead, not going to check for it
|
# Vista is dead, not going to check for it
|
||||||
answer_mse = ask('Install MSE?')
|
answer_mse = ask('Install MSE?')
|
||||||
else:
|
else:
|
||||||
answer_mse = False
|
answer_mse = False
|
||||||
|
|
||||||
print_info('Installing Programs')
|
print_info('Installing Programs')
|
||||||
if answer_adobe_reader:
|
if answer_adobe_reader:
|
||||||
install_adobe_reader()
|
install_adobe_reader()
|
||||||
if answer_vcr:
|
if answer_vcr:
|
||||||
install_vcredists()
|
install_vcredists()
|
||||||
if answer_ninite:
|
if answer_ninite:
|
||||||
try_and_print(message='Ninite bundle...',
|
try_and_print(message='Ninite bundle...',
|
||||||
function=install_ninite_bundle, cs='Started', mse=answer_mse)
|
function=install_ninite_bundle, cs='Started', mse=answer_mse)
|
||||||
if answer_extensions:
|
if answer_extensions:
|
||||||
wait_for_process('ninite.exe')
|
wait_for_process('ninite.exe')
|
||||||
print_info('Installing Extensions')
|
print_info('Installing Extensions')
|
||||||
try_and_print(message='Classic Shell skin...',
|
try_and_print(message='Classic Shell skin...',
|
||||||
function=install_classicstart_skin,
|
function=install_classicstart_skin,
|
||||||
other_results=other_results)
|
other_results=other_results)
|
||||||
try_and_print(message='Google Chrome extensions...',
|
try_and_print(message='Google Chrome extensions...',
|
||||||
function=install_chrome_extensions)
|
function=install_chrome_extensions)
|
||||||
try_and_print(message='Mozilla Firefox extensions...',
|
try_and_print(message='Mozilla Firefox extensions...',
|
||||||
function=install_firefox_extensions)
|
function=install_firefox_extensions)
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,34 +1,34 @@
|
||||||
# Wizard Kit: Install Visual C++ Runtimes
|
# Wizard Kit: Install Visual C++ Runtimes
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.setup import *
|
from functions.setup import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: Install Visual C++ Runtimes'.format(KIT_NAME_FULL))
|
os.system('title {}: Install Visual C++ Runtimes'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\Install Visual C++ Runtimes.log'.format(**global_vars)
|
global_vars['LogFile'] = r'{LogDir}\Install Visual C++ Runtimes.log'.format(**global_vars)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: Install Visual C++ Runtimes\n'.format(KIT_NAME_FULL))
|
print_info('{}: Install Visual C++ Runtimes\n'.format(KIT_NAME_FULL))
|
||||||
other_results = {
|
other_results = {
|
||||||
'Error': {
|
'Error': {
|
||||||
'CalledProcessError': 'Unknown Error',
|
'CalledProcessError': 'Unknown Error',
|
||||||
}}
|
}}
|
||||||
|
|
||||||
if ask('Install Visual C++ Runtimes?'):
|
if ask('Install Visual C++ Runtimes?'):
|
||||||
install_vcredists()
|
install_vcredists()
|
||||||
else:
|
else:
|
||||||
abort()
|
abort()
|
||||||
|
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,44 +1,44 @@
|
||||||
# Wizard Kit: Enter SafeMode by editing the BCD
|
# Wizard Kit: Enter SafeMode by editing the BCD
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# STATIC VARIABLES
|
# STATIC VARIABLES
|
||||||
REG_MSISERVER = r'HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\MSIServer'
|
REG_MSISERVER = r'HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\MSIServer'
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: SafeMode Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: SafeMode Tool'.format(KIT_NAME_FULL))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: SafeMode Tool\n'.format(KIT_NAME_FULL))
|
print_info('{}: SafeMode Tool\n'.format(KIT_NAME_FULL))
|
||||||
if not ask('Enable booting to SafeMode (with Networking)?'):
|
if not ask('Enable booting to SafeMode (with Networking)?'):
|
||||||
abort()
|
abort()
|
||||||
|
|
||||||
# Edit BCD to set safeboot as default
|
# Edit BCD to set safeboot as default
|
||||||
cmd = ['bcdedit', '/set', '{default}', 'safeboot', 'network']
|
cmd = ['bcdedit', '/set', '{default}', 'safeboot', 'network']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
# Enable MSI access under safemode
|
# Enable MSI access under safemode
|
||||||
cmd = ['reg', 'add', REG_MSISERVER, '/f']
|
cmd = ['reg', 'add', REG_MSISERVER, '/f']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
cmd = ['reg', 'add', REG_MSISERVER, '/ve',
|
cmd = ['reg', 'add', REG_MSISERVER, '/ve',
|
||||||
'/t', 'REG_SZ', '/d', 'Service', '/f']
|
'/t', 'REG_SZ', '/d', 'Service', '/f']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
## Done ##
|
## Done ##
|
||||||
pause('Press Enter to reboot...')
|
pause('Press Enter to reboot...')
|
||||||
cmd = ['shutdown', '-r', '-t', '3']
|
cmd = ['shutdown', '-r', '-t', '3']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,42 @@
|
||||||
# Wizard Kit: Exit SafeMode by editing the BCD
|
# Wizard Kit: Exit SafeMode by editing the BCD
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# STATIC VARIABLES
|
# STATIC VARIABLES
|
||||||
REG_MSISERVER = r'HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\MSIServer'
|
REG_MSISERVER = r'HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\MSIServer'
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.common import *
|
from functions.common import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: SafeMode Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: SafeMode Tool'.format(KIT_NAME_FULL))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: SafeMode Tool\n'.format(KIT_NAME_FULL))
|
print_info('{}: SafeMode Tool\n'.format(KIT_NAME_FULL))
|
||||||
if not ask('Disable booting to SafeMode?'):
|
if not ask('Disable booting to SafeMode?'):
|
||||||
abort()
|
abort()
|
||||||
|
|
||||||
# Edit BCD to remove safeboot value
|
# Edit BCD to remove safeboot value
|
||||||
for boot in ['{current}', '{default}']:
|
for boot in ['{current}', '{default}']:
|
||||||
cmd = ['bcdedit', '/deletevalue', boot, 'safeboot']
|
cmd = ['bcdedit', '/deletevalue', boot, 'safeboot']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
# Disable MSI access under safemode
|
# Disable MSI access under safemode
|
||||||
cmd = ['reg', 'delete', REG_MSISERVER, '/f']
|
cmd = ['reg', 'delete', REG_MSISERVER, '/f']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
## Done ##
|
## Done ##
|
||||||
pause('Press Enter to reboot...')
|
pause('Press Enter to reboot...')
|
||||||
cmd = ['shutdown', '-r', '-t', '3']
|
cmd = ['shutdown', '-r', '-t', '3']
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,70 +1,70 @@
|
||||||
# Wizard Kit: Settings - Music
|
# Wizard Kit: Settings - Music
|
||||||
|
|
||||||
MUSIC_MOD = [
|
MUSIC_MOD = [
|
||||||
'104208#banana_boat.mod',
|
'104208#banana_boat.mod',
|
||||||
'114971#tilbury_fair.mod',
|
'114971#tilbury_fair.mod',
|
||||||
'132563#ufo_tune.mod',
|
'132563#ufo_tune.mod',
|
||||||
'135906#magnetik_girl.xm',
|
'135906#magnetik_girl.xm',
|
||||||
'140628#autumn_in_budapest.xm',
|
'140628#autumn_in_budapest.xm',
|
||||||
'143198#summer_memories_3.xm',
|
'143198#summer_memories_3.xm',
|
||||||
'144405#hillbilly_billyboy.xm',
|
'144405#hillbilly_billyboy.xm',
|
||||||
'154795#4mat_-_eternity.xm',
|
'154795#4mat_-_eternity.xm',
|
||||||
'155845#bookworm.mo3',
|
'155845#bookworm.mo3',
|
||||||
'155914#battleofsteel.xm',
|
'155914#battleofsteel.xm',
|
||||||
'158975#1_channel_moog.it',
|
'158975#1_channel_moog.it',
|
||||||
'165495#trans.s3m',
|
'165495#trans.s3m',
|
||||||
'168513#necros_-_introspection.s3m',
|
'168513#necros_-_introspection.s3m',
|
||||||
'169628#radix_-_feng_shui_schematics.xm',
|
'169628#radix_-_feng_shui_schematics.xm',
|
||||||
'175238#unknown48_-_twilight.mod',
|
'175238#unknown48_-_twilight.mod',
|
||||||
'33432#ambrozia.xm',
|
'33432#ambrozia.xm',
|
||||||
'33460#amigatre.mod',
|
'33460#amigatre.mod',
|
||||||
'34594#CHARIOT.S3M',
|
'34594#CHARIOT.S3M',
|
||||||
'34596#BUTTERFL.XM',
|
'34596#BUTTERFL.XM',
|
||||||
'34654#CTGOBLIN.S3M',
|
'34654#CTGOBLIN.S3M',
|
||||||
'35151#bananasplit.mod',
|
'35151#bananasplit.mod',
|
||||||
'35280#DEADLOCK.XM',
|
'35280#DEADLOCK.XM',
|
||||||
'38591#compo_liam.xm',
|
'38591#compo_liam.xm',
|
||||||
'39987#crystald.s3m',
|
'39987#crystald.s3m',
|
||||||
'40475#ELYSIUM.MOD',
|
'40475#ELYSIUM.MOD',
|
||||||
'42146#enigma.mod',
|
'42146#enigma.mod',
|
||||||
'42519#GHOST2.MOD',
|
'42519#GHOST2.MOD',
|
||||||
'42560#GSLINGER.MOD',
|
'42560#GSLINGER.MOD',
|
||||||
'42872#existing.xm',
|
'42872#existing.xm',
|
||||||
'50427#nf-stven.xm',
|
'50427#nf-stven.xm',
|
||||||
'51549#overture.mod',
|
'51549#overture.mod',
|
||||||
'54250#SATELL.S3M',
|
'54250#SATELL.S3M',
|
||||||
'54313#realmk.s3m',
|
'54313#realmk.s3m',
|
||||||
'55789#scrambld.mod',
|
'55789#scrambld.mod',
|
||||||
'57934#spacedeb.mod',
|
'57934#spacedeb.mod',
|
||||||
'59344#stardstm.mod',
|
'59344#stardstm.mod',
|
||||||
'60395#2ND_PM.S3M',
|
'60395#2ND_PM.S3M',
|
||||||
'66187#external.xm',
|
'66187#external.xm',
|
||||||
'66343#beek-substitutionology.it',
|
'66343#beek-substitutionology.it',
|
||||||
'67561#radix-unreal_superhero.xm',
|
'67561#radix-unreal_superhero.xm',
|
||||||
'70829#inside_out.s3m',
|
'70829#inside_out.s3m',
|
||||||
'83779#beyond_music.mod',
|
'83779#beyond_music.mod',
|
||||||
]
|
]
|
||||||
|
|
||||||
MUSIC_SNES = [
|
MUSIC_SNES = [
|
||||||
'actr',
|
'actr',
|
||||||
'crock',
|
'crock',
|
||||||
'ct',
|
'ct',
|
||||||
'dkc',
|
'dkc',
|
||||||
'dkq',
|
'dkq',
|
||||||
'ff6',
|
'ff6',
|
||||||
'fz',
|
'fz',
|
||||||
'loz3',
|
'loz3',
|
||||||
'mmx',
|
'mmx',
|
||||||
'ptws',
|
'ptws',
|
||||||
'scv4',
|
'scv4',
|
||||||
'sf',
|
'sf',
|
||||||
'sf2',
|
'sf2',
|
||||||
'sgng',
|
'sgng',
|
||||||
'smk',
|
'smk',
|
||||||
'smw',
|
'smw',
|
||||||
'yi',
|
'yi',
|
||||||
'zamn'
|
'zamn'
|
||||||
]
|
]
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,203 +1,203 @@
|
||||||
# Wizard Kit: Settings - Sources
|
# Wizard Kit: Settings - Sources
|
||||||
|
|
||||||
SOURCE_URLS = {
|
SOURCE_URLS = {
|
||||||
'AIDA64': 'http://download.aida64.com/aida64engineer595.zip',
|
'AIDA64': 'http://download.aida64.com/aida64engineer595.zip',
|
||||||
'Adobe Reader DC': 'http://ardownload.adobe.com/pub/adobe/reader/win/AcrobatDC/1800920044/AcroRdrDC1800920044_en_US.exe',
|
'Adobe Reader DC': 'http://ardownload.adobe.com/pub/adobe/reader/win/AcrobatDC/1800920044/AcroRdrDC1800920044_en_US.exe',
|
||||||
'AdwCleaner': 'https://toolslib.net/downloads/finish/1-adwcleaner/',
|
'AdwCleaner': 'https://toolslib.net/downloads/finish/1-adwcleaner/',
|
||||||
'Autoruns': 'https://download.sysinternals.com/files/Autoruns.zip',
|
'Autoruns': 'https://download.sysinternals.com/files/Autoruns.zip',
|
||||||
'BleachBit': 'https://download.bleachbit.org/beta/1.17/BleachBit-1.17-portable.zip',
|
'BleachBit': 'https://download.bleachbit.org/beta/1.17/BleachBit-1.17-portable.zip',
|
||||||
'BlueScreenView32': 'http://www.nirsoft.net/utils/bluescreenview.zip',
|
'BlueScreenView32': 'http://www.nirsoft.net/utils/bluescreenview.zip',
|
||||||
'BlueScreenView64': 'http://www.nirsoft.net/utils/bluescreenview-x64.zip',
|
'BlueScreenView64': 'http://www.nirsoft.net/utils/bluescreenview-x64.zip',
|
||||||
'Caffeine': 'http://www.zhornsoftware.co.uk/caffeine/caffeine.zip',
|
'Caffeine': 'http://www.zhornsoftware.co.uk/caffeine/caffeine.zip',
|
||||||
'ClassicStartSkin': 'http://www.classicshell.net/forum/download/file.php?id=3001&sid=9a195960d98fd754867dcb63d9315335',
|
'ClassicStartSkin': 'http://www.classicshell.net/forum/download/file.php?id=3001&sid=9a195960d98fd754867dcb63d9315335',
|
||||||
'Du': 'https://download.sysinternals.com/files/DU.zip',
|
'Du': 'https://download.sysinternals.com/files/DU.zip',
|
||||||
'ERUNT': 'http://www.aumha.org/downloads/erunt.zip',
|
'ERUNT': 'http://www.aumha.org/downloads/erunt.zip',
|
||||||
'Everything32': 'https://www.voidtools.com/Everything-1.4.1.877.x86.zip',
|
'Everything32': 'https://www.voidtools.com/Everything-1.4.1.877.x86.zip',
|
||||||
'Everything64': 'https://www.voidtools.com/Everything-1.4.1.877.x64.zip',
|
'Everything64': 'https://www.voidtools.com/Everything-1.4.1.877.x64.zip',
|
||||||
'FastCopy32': 'http://ftp.vector.co.jp/69/28/2323/FastCopy332.zip',
|
'FastCopy32': 'http://ftp.vector.co.jp/69/28/2323/FastCopy332.zip',
|
||||||
'FastCopy64': 'http://ftp.vector.co.jp/69/28/2323/FastCopy332_x64.zip',
|
'FastCopy64': 'http://ftp.vector.co.jp/69/28/2323/FastCopy332_x64.zip',
|
||||||
'Firefox uBO': 'https://addons.mozilla.org/firefox/downloads/file/764482/ublock_origin-1.14.18-an+fx.xpi?src=dp-btn-primary',
|
'Firefox uBO': 'https://addons.mozilla.org/firefox/downloads/file/764482/ublock_origin-1.14.18-an+fx.xpi?src=dp-btn-primary',
|
||||||
'HWiNFO32': 'http://app.oldfoss.com:81/download/HWiNFO/hw32_560.zip',
|
'HWiNFO32': 'http://app.oldfoss.com:81/download/HWiNFO/hw32_560.zip',
|
||||||
'HWiNFO64': 'http://app.oldfoss.com:81/download/HWiNFO/hw64_560.zip',
|
'HWiNFO64': 'http://app.oldfoss.com:81/download/HWiNFO/hw64_560.zip',
|
||||||
'HitmanPro32': 'https://dl.surfright.nl/HitmanPro.exe',
|
'HitmanPro32': 'https://dl.surfright.nl/HitmanPro.exe',
|
||||||
'HitmanPro64': 'https://dl.surfright.nl/HitmanPro_x64.exe',
|
'HitmanPro64': 'https://dl.surfright.nl/HitmanPro_x64.exe',
|
||||||
'IOBit_Uninstaller': 'https://portableapps.com/redirect/?a=IObitUninstallerPortable&t=http%3A%2F%2Fdownloads.portableapps.com%2Fportableapps%2Fiobituninstallerportable%2FIObitUninstallerPortable_7.0.2.49.paf.exe',
|
'IOBit_Uninstaller': 'https://portableapps.com/redirect/?a=IObitUninstallerPortable&t=http%3A%2F%2Fdownloads.portableapps.com%2Fportableapps%2Fiobituninstallerportable%2FIObitUninstallerPortable_7.0.2.49.paf.exe',
|
||||||
'Intel SSD Toolbox': r'https://downloadmirror.intel.com/27330/eng/Intel%20SSD%20Toolbox%20-%20v3.4.9.exe',
|
'Intel SSD Toolbox': r'https://downloadmirror.intel.com/27330/eng/Intel%20SSD%20Toolbox%20-%20v3.4.9.exe',
|
||||||
'KVRT': 'http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe',
|
'KVRT': 'http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe',
|
||||||
'NotepadPlusPlus': 'https://notepad-plus-plus.org/repository/7.x/7.5.2/npp.7.5.2.bin.minimalist.7z',
|
'NotepadPlusPlus': 'https://notepad-plus-plus.org/repository/7.x/7.5.2/npp.7.5.2.bin.minimalist.7z',
|
||||||
'Office Deployment Tool 2013': 'https://download.microsoft.com/download/6/2/3/6230F7A2-D8A9-478B-AC5C-57091B632FCF/officedeploymenttool_x86_4827-1000.exe',
|
'Office Deployment Tool 2013': 'https://download.microsoft.com/download/6/2/3/6230F7A2-D8A9-478B-AC5C-57091B632FCF/officedeploymenttool_x86_4827-1000.exe',
|
||||||
'Office Deployment Tool 2016': 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_8529.3600.exe',
|
'Office Deployment Tool 2016': 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_8529.3600.exe',
|
||||||
'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',
|
||||||
'RKill': 'https://www.bleepingcomputer.com/download/rkill/dl/10/',
|
'RKill': 'https://www.bleepingcomputer.com/download/rkill/dl/10/',
|
||||||
'SDIO Themes': 'http://snappy-driver-installer.org/downloads/SDIO_Themes.zip',
|
'SDIO Themes': 'http://snappy-driver-installer.org/downloads/SDIO_Themes.zip',
|
||||||
'SDIO Torrent': 'http://snappy-driver-installer.org/downloads/SDIO_Update.torrent',
|
'SDIO Torrent': 'http://snappy-driver-installer.org/downloads/SDIO_Update.torrent',
|
||||||
'Samsung Magician': 'http://downloadcenter.samsung.com/content/SW/201710/20171019164455812/Samsung_Magician_Installer.exe',
|
'Samsung Magician': 'http://downloadcenter.samsung.com/content/SW/201710/20171019164455812/Samsung_Magician_Installer.exe',
|
||||||
'TDSSKiller': 'https://media.kaspersky.com/utilities/VirusUtilities/EN/tdsskiller.exe',
|
'TDSSKiller': 'https://media.kaspersky.com/utilities/VirusUtilities/EN/tdsskiller.exe',
|
||||||
'TestDisk': 'https://www.cgsecurity.org/testdisk-7.1-WIP.win.zip',
|
'TestDisk': 'https://www.cgsecurity.org/testdisk-7.1-WIP.win.zip',
|
||||||
'TreeSizeFree': 'https://www.jam-software.com/treesize_free/TreeSizeFree-Portable.zip',
|
'TreeSizeFree': 'https://www.jam-software.com/treesize_free/TreeSizeFree-Portable.zip',
|
||||||
'wimlib32': 'https://wimlib.net/downloads/wimlib-1.12.0-windows-i686-bin.zip',
|
'wimlib32': 'https://wimlib.net/downloads/wimlib-1.12.0-windows-i686-bin.zip',
|
||||||
'wimlib64': 'https://wimlib.net/downloads/wimlib-1.12.0-windows-x86_64-bin.zip',
|
'wimlib64': 'https://wimlib.net/downloads/wimlib-1.12.0-windows-x86_64-bin.zip',
|
||||||
'Winapp2': 'https://github.com/MoscaDotTo/Winapp2/archive/master.zip',
|
'Winapp2': 'https://github.com/MoscaDotTo/Winapp2/archive/master.zip',
|
||||||
'XMPlay 7z': 'http://support.xmplay.com/files/16/xmp-7z.zip?v=800962',
|
'XMPlay 7z': 'http://support.xmplay.com/files/16/xmp-7z.zip?v=800962',
|
||||||
'XMPlay Game': 'http://support.xmplay.com/files/12/xmp-gme.zip?v=515637',
|
'XMPlay Game': 'http://support.xmplay.com/files/12/xmp-gme.zip?v=515637',
|
||||||
'XMPlay RAR': 'http://support.xmplay.com/files/16/xmp-rar.zip?v=409646',
|
'XMPlay RAR': 'http://support.xmplay.com/files/16/xmp-rar.zip?v=409646',
|
||||||
'XMPlay WAModern': 'http://support.xmplay.com/files/10/WAModern.zip?v=207099',
|
'XMPlay WAModern': 'http://support.xmplay.com/files/10/WAModern.zip?v=207099',
|
||||||
'XMPlay': 'http://support.xmplay.com/files/20/xmplay3823.zip?v=115916',
|
'XMPlay': 'http://support.xmplay.com/files/20/xmplay3823.zip?v=115916',
|
||||||
'XYplorerFree': 'https://www.xyplorer.com/download/xyplorer_free_noinstall.zip',
|
'XYplorerFree': 'https://www.xyplorer.com/download/xyplorer_free_noinstall.zip',
|
||||||
'aria2': 'https://github.com/aria2/aria2/releases/download/release-1.33.1/aria2-1.33.1-win-32bit-build1.zip',
|
'aria2': 'https://github.com/aria2/aria2/releases/download/release-1.33.1/aria2-1.33.1-win-32bit-build1.zip',
|
||||||
}
|
}
|
||||||
VCREDIST_SOURCES = {
|
VCREDIST_SOURCES = {
|
||||||
'2008sp1': {
|
'2008sp1': {
|
||||||
'32': 'https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe',
|
'32': 'https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe',
|
||||||
'64': 'https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe',
|
'64': 'https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe',
|
||||||
},
|
},
|
||||||
'2010sp1': {
|
'2010sp1': {
|
||||||
'32': 'https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe',
|
'32': 'https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe',
|
||||||
'64': 'https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe',
|
'64': 'https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe',
|
||||||
},
|
},
|
||||||
'2012u4': {
|
'2012u4': {
|
||||||
'32': 'https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe',
|
'32': 'https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe',
|
||||||
'64': 'https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe',
|
'64': 'https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe',
|
||||||
},
|
},
|
||||||
'2013': {
|
'2013': {
|
||||||
'32': 'https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x86.exe',
|
'32': 'https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x86.exe',
|
||||||
'64': 'https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x64.exe',
|
'64': 'https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x64.exe',
|
||||||
},
|
},
|
||||||
'2017': {
|
'2017': {
|
||||||
'32': 'https://download.visualstudio.microsoft.com/download/pr/11100229/78c1e864d806e36f6035d80a0e80399e/VC_redist.x86.exe',
|
'32': 'https://download.visualstudio.microsoft.com/download/pr/11100229/78c1e864d806e36f6035d80a0e80399e/VC_redist.x86.exe',
|
||||||
'64': 'https://download.visualstudio.microsoft.com/download/pr/11100230/15ccb3f02745c7b206ad10373cbca89b/VC_redist.x64.exe',
|
'64': 'https://download.visualstudio.microsoft.com/download/pr/11100230/15ccb3f02745c7b206ad10373cbca89b/VC_redist.x64.exe',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
NINITE_SOURCES = {
|
NINITE_SOURCES = {
|
||||||
'Bundles': {
|
'Bundles': {
|
||||||
'Runtimes.exe': '.net4.7-air-java8-silverlight',
|
'Runtimes.exe': '.net4.7-air-java8-silverlight',
|
||||||
'Legacy.exe': '.net4.7-7zip-air-chrome-firefox-java8-silverlight-vlc',
|
'Legacy.exe': '.net4.7-7zip-air-chrome-firefox-java8-silverlight-vlc',
|
||||||
'Modern.exe': '.net4.7-7zip-air-chrome-classicstart-firefox-java8-silverlight-vlc',
|
'Modern.exe': '.net4.7-7zip-air-chrome-classicstart-firefox-java8-silverlight-vlc',
|
||||||
},
|
},
|
||||||
'Audio-Video': {
|
'Audio-Video': {
|
||||||
'AIMP.exe': 'aimp',
|
'AIMP.exe': 'aimp',
|
||||||
'Audacity.exe': 'audacity',
|
'Audacity.exe': 'audacity',
|
||||||
'CCCP.exe': 'cccp',
|
'CCCP.exe': 'cccp',
|
||||||
'Foobar2000.exe': 'foobar',
|
'Foobar2000.exe': 'foobar',
|
||||||
'GOM.exe': 'gom',
|
'GOM.exe': 'gom',
|
||||||
'HandBrake.exe': 'handbrake',
|
'HandBrake.exe': 'handbrake',
|
||||||
'iTunes.exe': 'itunes',
|
'iTunes.exe': 'itunes',
|
||||||
'K-Lite Codecs.exe': 'klitecodecs',
|
'K-Lite Codecs.exe': 'klitecodecs',
|
||||||
'MediaMonkey.exe': 'mediamonkey',
|
'MediaMonkey.exe': 'mediamonkey',
|
||||||
'MusicBee.exe': 'musicbee',
|
'MusicBee.exe': 'musicbee',
|
||||||
'Spotify.exe': 'spotify',
|
'Spotify.exe': 'spotify',
|
||||||
'VLC.exe': 'vlc',
|
'VLC.exe': 'vlc',
|
||||||
'Winamp.exe': 'winamp',
|
'Winamp.exe': 'winamp',
|
||||||
},
|
},
|
||||||
'Cloud Storage': {
|
'Cloud Storage': {
|
||||||
'Dropbox.exe': 'dropbox',
|
'Dropbox.exe': 'dropbox',
|
||||||
'Google Backup & Sync.exe': 'googlebackupandsync',
|
'Google Backup & Sync.exe': 'googlebackupandsync',
|
||||||
'Mozy.exe': 'mozy',
|
'Mozy.exe': 'mozy',
|
||||||
'OneDrive.exe': 'onedrive',
|
'OneDrive.exe': 'onedrive',
|
||||||
'SugarSync.exe': 'sugarsync',
|
'SugarSync.exe': 'sugarsync',
|
||||||
},
|
},
|
||||||
'Communication': {
|
'Communication': {
|
||||||
'Pidgin.exe': 'pidgin',
|
'Pidgin.exe': 'pidgin',
|
||||||
'Skype.exe': 'skype',
|
'Skype.exe': 'skype',
|
||||||
'Trillian.exe': 'trillian',
|
'Trillian.exe': 'trillian',
|
||||||
},
|
},
|
||||||
'Compression': {
|
'Compression': {
|
||||||
'7-Zip.exe': '7zip',
|
'7-Zip.exe': '7zip',
|
||||||
'PeaZip.exe': 'peazip',
|
'PeaZip.exe': 'peazip',
|
||||||
'WinRAR.exe': 'winrar',
|
'WinRAR.exe': 'winrar',
|
||||||
},
|
},
|
||||||
'Developer': {
|
'Developer': {
|
||||||
'Eclipse.exe': 'eclipse',
|
'Eclipse.exe': 'eclipse',
|
||||||
'FileZilla.exe': 'filezilla',
|
'FileZilla.exe': 'filezilla',
|
||||||
'JDK 8.exe': 'jdk8',
|
'JDK 8.exe': 'jdk8',
|
||||||
'JDK 8 (x64).exe': 'jdkx8',
|
'JDK 8 (x64).exe': 'jdkx8',
|
||||||
'Notepad++.exe': 'notepadplusplus',
|
'Notepad++.exe': 'notepadplusplus',
|
||||||
'PuTTY.exe': 'putty',
|
'PuTTY.exe': 'putty',
|
||||||
'Python 2.exe': 'python',
|
'Python 2.exe': 'python',
|
||||||
'Visual Studio Code.exe': 'vscode',
|
'Visual Studio Code.exe': 'vscode',
|
||||||
'WinMerge.exe': 'winmerge',
|
'WinMerge.exe': 'winmerge',
|
||||||
'WinSCP.exe': 'winscp',
|
'WinSCP.exe': 'winscp',
|
||||||
},
|
},
|
||||||
'File Sharing': {
|
'File Sharing': {
|
||||||
'qBittorrent.exe': 'qbittorrent',
|
'qBittorrent.exe': 'qbittorrent',
|
||||||
},
|
},
|
||||||
'Image-Photo': {
|
'Image-Photo': {
|
||||||
'Blender.exe': 'blender',
|
'Blender.exe': 'blender',
|
||||||
'FastStone.exe': 'faststone',
|
'FastStone.exe': 'faststone',
|
||||||
'GIMP.exe': 'gimp',
|
'GIMP.exe': 'gimp',
|
||||||
'Greenshot.exe': 'greenshot',
|
'Greenshot.exe': 'greenshot',
|
||||||
'Inkscape.exe': 'inkscape',
|
'Inkscape.exe': 'inkscape',
|
||||||
'IrfanView.exe': 'irfanview',
|
'IrfanView.exe': 'irfanview',
|
||||||
'Krita.exe': 'krita',
|
'Krita.exe': 'krita',
|
||||||
'Paint.NET.exe': 'paint.net',
|
'Paint.NET.exe': 'paint.net',
|
||||||
'ShareX.exe': 'sharex',
|
'ShareX.exe': 'sharex',
|
||||||
'XnView.exe': 'xnview',
|
'XnView.exe': 'xnview',
|
||||||
},
|
},
|
||||||
'Misc': {
|
'Misc': {
|
||||||
'Evernote.exe': 'evernote',
|
'Evernote.exe': 'evernote',
|
||||||
'Everything.exe': 'everything',
|
'Everything.exe': 'everything',
|
||||||
'KeePass 2.exe': 'keepass2',
|
'KeePass 2.exe': 'keepass2',
|
||||||
'Google Earth.exe': 'googleearth',
|
'Google Earth.exe': 'googleearth',
|
||||||
'NV Access.exe': 'nvda',
|
'NV Access.exe': 'nvda',
|
||||||
'Steam.exe': 'steam',
|
'Steam.exe': 'steam',
|
||||||
},
|
},
|
||||||
'Office': {
|
'Office': {
|
||||||
'CutePDF.exe': 'cutepdf',
|
'CutePDF.exe': 'cutepdf',
|
||||||
'Foxit Reader.exe': 'foxit',
|
'Foxit Reader.exe': 'foxit',
|
||||||
'LibreOffice.exe': 'libreoffice',
|
'LibreOffice.exe': 'libreoffice',
|
||||||
'OpenOffice.exe': 'openoffice',
|
'OpenOffice.exe': 'openoffice',
|
||||||
'PDFCreator.exe': 'pdfcreator',
|
'PDFCreator.exe': 'pdfcreator',
|
||||||
'SumatraPDF.exe': 'sumatrapdf',
|
'SumatraPDF.exe': 'sumatrapdf',
|
||||||
'Thunderbird.exe': 'thunderbird',
|
'Thunderbird.exe': 'thunderbird',
|
||||||
},
|
},
|
||||||
'Runtimes': {
|
'Runtimes': {
|
||||||
'Adobe Air.exe': 'air',
|
'Adobe Air.exe': 'air',
|
||||||
'dotNET.exe': '.net4.7',
|
'dotNET.exe': '.net4.7',
|
||||||
'Java 8.exe': 'java8',
|
'Java 8.exe': 'java8',
|
||||||
'Shockwave.exe': 'shockwave',
|
'Shockwave.exe': 'shockwave',
|
||||||
'Silverlight.exe': 'silverlight',
|
'Silverlight.exe': 'silverlight',
|
||||||
},
|
},
|
||||||
'Security': {
|
'Security': {
|
||||||
'Avast.exe': 'avast',
|
'Avast.exe': 'avast',
|
||||||
'AVG.exe': 'avg',
|
'AVG.exe': 'avg',
|
||||||
'Avira.exe': 'avira',
|
'Avira.exe': 'avira',
|
||||||
'Microsoft Security Essentials.exe': 'essentials',
|
'Microsoft Security Essentials.exe': 'essentials',
|
||||||
'Malwarebytes Anti-Malware.exe': 'malwarebytes',
|
'Malwarebytes Anti-Malware.exe': 'malwarebytes',
|
||||||
'Spybot 2.exe': 'spybot2',
|
'Spybot 2.exe': 'spybot2',
|
||||||
'SUPERAntiSpyware.exe': 'super',
|
'SUPERAntiSpyware.exe': 'super',
|
||||||
},
|
},
|
||||||
'Utilities': {
|
'Utilities': {
|
||||||
'CDBurnerXP.exe': 'cdburnerxp',
|
'CDBurnerXP.exe': 'cdburnerxp',
|
||||||
'Classic Start.exe': 'classicstart',
|
'Classic Start.exe': 'classicstart',
|
||||||
'Glary Utilities.exe': 'glary',
|
'Glary Utilities.exe': 'glary',
|
||||||
'ImgBurn.exe': 'imgburn',
|
'ImgBurn.exe': 'imgburn',
|
||||||
'InfraRecorder.exe': 'infrarecorder',
|
'InfraRecorder.exe': 'infrarecorder',
|
||||||
'Launchy.exe': 'launchy',
|
'Launchy.exe': 'launchy',
|
||||||
'RealVNC.exe': 'realvnc',
|
'RealVNC.exe': 'realvnc',
|
||||||
'Revo Uninstaller.exe': 'revo',
|
'Revo Uninstaller.exe': 'revo',
|
||||||
'TeamViewer 12.exe': 'teamviewer12',
|
'TeamViewer 12.exe': 'teamviewer12',
|
||||||
'TeraCopy.exe': 'teracopy',
|
'TeraCopy.exe': 'teracopy',
|
||||||
'WinDirStat.exe': 'windirstat',
|
'WinDirStat.exe': 'windirstat',
|
||||||
},
|
},
|
||||||
'Web Browsers': {
|
'Web Browsers': {
|
||||||
'Google Chrome.exe': 'chrome',
|
'Google Chrome.exe': 'chrome',
|
||||||
'Mozilla Firefox.exe': 'firefox',
|
'Mozilla Firefox.exe': 'firefox',
|
||||||
'Opera Chromium.exe': 'operaChromium',
|
'Opera Chromium.exe': 'operaChromium',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
RST_SOURCES = {
|
RST_SOURCES = {
|
||||||
#SetupRST_12.0.exe : Removed from download center?
|
#SetupRST_12.0.exe : Removed from download center?
|
||||||
#SetupRST_12.5.exe : Removed from download center?
|
#SetupRST_12.5.exe : Removed from download center?
|
||||||
#SetupRST_12.8.exe : Removed from download center?
|
#SetupRST_12.8.exe : Removed from download center?
|
||||||
'SetupRST_12.9.exe': 'https://downloadmirror.intel.com/23496/eng/SetupRST.exe',
|
'SetupRST_12.9.exe': 'https://downloadmirror.intel.com/23496/eng/SetupRST.exe',
|
||||||
#SetupRST_13.x.exe : Broken, doesn't support > .NET 4.5
|
#SetupRST_13.x.exe : Broken, doesn't support > .NET 4.5
|
||||||
'SetupRST_14.0.exe': 'https://downloadmirror.intel.com/25091/eng/SetupRST.exe',
|
'SetupRST_14.0.exe': 'https://downloadmirror.intel.com/25091/eng/SetupRST.exe',
|
||||||
'SetupRST_14.8.exe': 'https://downloadmirror.intel.com/26759/eng/setuprst.exe',
|
'SetupRST_14.8.exe': 'https://downloadmirror.intel.com/26759/eng/setuprst.exe',
|
||||||
'SetupRST_15.8.exe': 'https://downloadmirror.intel.com/27147/eng/SetupRST.exe',
|
'SetupRST_15.8.exe': 'https://downloadmirror.intel.com/27147/eng/SetupRST.exe',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,55 +1,55 @@
|
||||||
# Wizard Kit: Settings - Tools
|
# Wizard Kit: Settings - Tools
|
||||||
|
|
||||||
TOOLS = {
|
TOOLS = {
|
||||||
# NOTE: BinDir will be prepended to these paths at runtime
|
# NOTE: BinDir will be prepended to these paths at runtime
|
||||||
'AIDA64': {
|
'AIDA64': {
|
||||||
'32': r'AIDA64\aida64.exe'},
|
'32': r'AIDA64\aida64.exe'},
|
||||||
'AutoRuns': {
|
'AutoRuns': {
|
||||||
'32': r'Autoruns\autoruns.exe',
|
'32': r'Autoruns\autoruns.exe',
|
||||||
'64': r'Autoruns\autoruns64.exe'},
|
'64': r'Autoruns\autoruns64.exe'},
|
||||||
'BleachBit': {
|
'BleachBit': {
|
||||||
'32': r'BleachBit\bleachbit_console.exe'},
|
'32': r'BleachBit\bleachbit_console.exe'},
|
||||||
'Caffeine': {
|
'Caffeine': {
|
||||||
'32': r'Caffeine\caffeine.exe'},
|
'32': r'Caffeine\caffeine.exe'},
|
||||||
'Du': {
|
'Du': {
|
||||||
'32': r'Du\du.exe',
|
'32': r'Du\du.exe',
|
||||||
'64': r'Du\du64.exe'},
|
'64': r'Du\du64.exe'},
|
||||||
'ERUNT': {
|
'ERUNT': {
|
||||||
'32': r'ERUNT\ERUNT.EXE'},
|
'32': r'ERUNT\ERUNT.EXE'},
|
||||||
'Everything': {
|
'Everything': {
|
||||||
'32': r'Everything\Everything.exe',
|
'32': r'Everything\Everything.exe',
|
||||||
'64': r'Everything\Everything64.exe'},
|
'64': r'Everything\Everything64.exe'},
|
||||||
'FastCopy': {
|
'FastCopy': {
|
||||||
'32': r'FastCopy\FastCopy.exe',
|
'32': r'FastCopy\FastCopy.exe',
|
||||||
'64': r'FastCopy\FastCopy64.exe'},
|
'64': r'FastCopy\FastCopy64.exe'},
|
||||||
'HitmanPro': {
|
'HitmanPro': {
|
||||||
'32': r'HitmanPro\HitmanPro.exe',
|
'32': r'HitmanPro\HitmanPro.exe',
|
||||||
'64': r'HitmanPro\HitmanPro64.exe'},
|
'64': r'HitmanPro\HitmanPro64.exe'},
|
||||||
'HWiNFO': {
|
'HWiNFO': {
|
||||||
'32': r'HWiNFO\HWiNFO.exe',
|
'32': r'HWiNFO\HWiNFO.exe',
|
||||||
'64': r'HWiNFO\HWiNFO64.exe'},
|
'64': r'HWiNFO\HWiNFO64.exe'},
|
||||||
'KVRT': {
|
'KVRT': {
|
||||||
'32': r'KVRT\KVRT.exe'},
|
'32': r'KVRT\KVRT.exe'},
|
||||||
'NotepadPlusPlus': {
|
'NotepadPlusPlus': {
|
||||||
'32': r'NotepadPlusPlus\notepadplusplus.exe'},
|
'32': r'NotepadPlusPlus\notepadplusplus.exe'},
|
||||||
'ProduKey': {
|
'ProduKey': {
|
||||||
'32': r'ProduKey\ProduKey.exe',
|
'32': r'ProduKey\ProduKey.exe',
|
||||||
'64': r'ProduKey\ProduKey64.exe'},
|
'64': r'ProduKey\ProduKey64.exe'},
|
||||||
'PuTTY-PSFTP': {
|
'PuTTY-PSFTP': {
|
||||||
'32': r'PuTTY\PSFTP.EXE'},
|
'32': r'PuTTY\PSFTP.EXE'},
|
||||||
'RKill': {
|
'RKill': {
|
||||||
'32': r'RKill\RKill.exe'},
|
'32': r'RKill\RKill.exe'},
|
||||||
'SevenZip': {
|
'SevenZip': {
|
||||||
'32': r'7-Zip\7za.exe',
|
'32': r'7-Zip\7za.exe',
|
||||||
'64': r'7-Zip\7za64.exe'},
|
'64': r'7-Zip\7za64.exe'},
|
||||||
'TDSSKiller': {
|
'TDSSKiller': {
|
||||||
'32': r'TDSSKiller\TDSSKiller.exe'},
|
'32': r'TDSSKiller\TDSSKiller.exe'},
|
||||||
'wimlib-imagex': {
|
'wimlib-imagex': {
|
||||||
'32': r'wimlib\x32\wimlib-imagex.exe',
|
'32': r'wimlib\x32\wimlib-imagex.exe',
|
||||||
'64': r'wimlib\x64\wimlib-imagex.exe'},
|
'64': r'wimlib\x64\wimlib-imagex.exe'},
|
||||||
'XMPlay': {
|
'XMPlay': {
|
||||||
'32': r'XMPlay\xmplay.exe'},
|
'32': r'XMPlay\xmplay.exe'},
|
||||||
}
|
}
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,39 @@
|
||||||
# Wizard Kit: Check, and possibly repair, system file health via SFC
|
# Wizard Kit: Check, and possibly repair, system file health via SFC
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.repairs import *
|
from functions.repairs import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: SFC Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: SFC Tool'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\SFC Tool.log'.format(**global_vars)
|
global_vars['LogFile'] = r'{LogDir}\SFC Tool.log'.format(**global_vars)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: SFC Tool\n'.format(KIT_NAME_FULL))
|
print_info('{}: SFC Tool\n'.format(KIT_NAME_FULL))
|
||||||
other_results = {
|
other_results = {
|
||||||
'Error': {
|
'Error': {
|
||||||
'CalledProcessError': 'Unknown Error',
|
'CalledProcessError': 'Unknown Error',
|
||||||
},
|
},
|
||||||
'Warning': {
|
'Warning': {
|
||||||
'GenericRepair': 'Repaired',
|
'GenericRepair': 'Repaired',
|
||||||
}}
|
}}
|
||||||
if ask('Run a SFC scan now?'):
|
if ask('Run a SFC scan now?'):
|
||||||
try_and_print(message='SFC scan...',
|
try_and_print(message='SFC scan...',
|
||||||
function=run_sfc_scan, other_results=other_results)
|
function=run_sfc_scan, other_results=other_results)
|
||||||
else:
|
else:
|
||||||
abort()
|
abort()
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
pause('Press Enter to exit...')
|
pause('Press Enter to exit...')
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,107 +1,107 @@
|
||||||
# Wizard Kit: System Checklist
|
# Wizard Kit: System Checklist
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.activation import *
|
from functions.activation import *
|
||||||
from functions.cleanup import *
|
from functions.cleanup import *
|
||||||
from functions.diags import *
|
from functions.diags import *
|
||||||
from functions.info import *
|
from functions.info import *
|
||||||
from functions.product_keys import *
|
from functions.product_keys import *
|
||||||
from functions.setup import *
|
from functions.setup import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: System Checklist Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: System Checklist Tool'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\System Checklist.log'.format(**global_vars)
|
global_vars['LogFile'] = r'{LogDir}\System Checklist.log'.format(**global_vars)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: System Checklist Tool\n'.format(KIT_NAME_FULL))
|
print_info('{}: System Checklist Tool\n'.format(KIT_NAME_FULL))
|
||||||
ticket_number = get_ticket_number()
|
ticket_number = get_ticket_number()
|
||||||
other_results = {
|
other_results = {
|
||||||
'Error': {
|
'Error': {
|
||||||
'CalledProcessError': 'Unknown Error',
|
'CalledProcessError': 'Unknown Error',
|
||||||
'BIOSKeyNotFoundError': 'BIOS key not found',
|
'BIOSKeyNotFoundError': 'BIOS key not found',
|
||||||
},
|
},
|
||||||
'Warning': {}}
|
'Warning': {}}
|
||||||
print_info('Starting System Checklist for Ticket #{}\n'.format(
|
print_info('Starting System Checklist for Ticket #{}\n'.format(
|
||||||
ticket_number))
|
ticket_number))
|
||||||
|
|
||||||
# Configure
|
# Configure
|
||||||
print_info('Configure')
|
print_info('Configure')
|
||||||
if global_vars['OS']['Version'] == '10':
|
if global_vars['OS']['Version'] == '10':
|
||||||
try_and_print(message='Explorer...',
|
try_and_print(message='Explorer...',
|
||||||
function=config_explorer_system, cs='Done')
|
function=config_explorer_system, cs='Done')
|
||||||
try_and_print(message='Updating Clock...',
|
try_and_print(message='Updating Clock...',
|
||||||
function=update_clock, cs='Done')
|
function=update_clock, cs='Done')
|
||||||
|
|
||||||
# Cleanup
|
# Cleanup
|
||||||
print_info('Cleanup')
|
print_info('Cleanup')
|
||||||
try_and_print(message='Desktop...',
|
try_and_print(message='Desktop...',
|
||||||
function=cleanup_desktop, cs='Done')
|
function=cleanup_desktop, cs='Done')
|
||||||
try_and_print(message='AdwCleaner...',
|
try_and_print(message='AdwCleaner...',
|
||||||
function=cleanup_adwcleaner, cs='Done')
|
function=cleanup_adwcleaner, cs='Done')
|
||||||
|
|
||||||
# Export system info
|
# Export system info
|
||||||
print_info('Backup System Information')
|
print_info('Backup System Information')
|
||||||
try_and_print(message='AIDA64 reports...',
|
try_and_print(message='AIDA64 reports...',
|
||||||
function=run_aida64, cs='Done')
|
function=run_aida64, cs='Done')
|
||||||
try_and_print(message='File listing...',
|
try_and_print(message='File listing...',
|
||||||
function=backup_file_list, cs='Done')
|
function=backup_file_list, cs='Done')
|
||||||
try_and_print(message='Power plans...',
|
try_and_print(message='Power plans...',
|
||||||
function=backup_power_plans, cs='Done')
|
function=backup_power_plans, cs='Done')
|
||||||
try_and_print(message='Product Keys...',
|
try_and_print(message='Product Keys...',
|
||||||
function=run_produkey, cs='Done')
|
function=run_produkey, cs='Done')
|
||||||
try_and_print(message='Registry...',
|
try_and_print(message='Registry...',
|
||||||
function=backup_registry, cs='Done')
|
function=backup_registry, cs='Done')
|
||||||
|
|
||||||
# User data
|
# User data
|
||||||
print_info('User Data')
|
print_info('User Data')
|
||||||
show_user_data_summary()
|
show_user_data_summary()
|
||||||
|
|
||||||
# Summary
|
# Summary
|
||||||
print_info('Summary')
|
print_info('Summary')
|
||||||
try_and_print(message='Operating System:',
|
try_and_print(message='Operating System:',
|
||||||
function=show_os_name, ns='Unknown', silent_function=False)
|
function=show_os_name, ns='Unknown', silent_function=False)
|
||||||
try_and_print(message='Activation:',
|
try_and_print(message='Activation:',
|
||||||
function=show_os_activation, ns='Unknown', silent_function=False)
|
function=show_os_activation, ns='Unknown', silent_function=False)
|
||||||
if (not windows_is_activated()
|
if (not windows_is_activated()
|
||||||
and global_vars['OS']['Version'] in ('8', '10')):
|
and global_vars['OS']['Version'] in ('8', '10')):
|
||||||
try_and_print(message='BIOS Activation:',
|
try_and_print(message='BIOS Activation:',
|
||||||
function=activate_with_bios,
|
function=activate_with_bios,
|
||||||
other_results=other_results)
|
other_results=other_results)
|
||||||
try_and_print(message='Installed Office:',
|
try_and_print(message='Installed Office:',
|
||||||
function=get_installed_office, ns='Unknown', print_return=True)
|
function=get_installed_office, ns='Unknown', print_return=True)
|
||||||
show_free_space()
|
show_free_space()
|
||||||
try_and_print(message='Installed RAM:',
|
try_and_print(message='Installed RAM:',
|
||||||
function=show_installed_ram, ns='Unknown', silent_function=False)
|
function=show_installed_ram, ns='Unknown', silent_function=False)
|
||||||
|
|
||||||
# Upload info
|
# Upload info
|
||||||
if ENABLED_UPLOAD_DATA:
|
if ENABLED_UPLOAD_DATA:
|
||||||
print_info('Finalizing')
|
print_info('Finalizing')
|
||||||
try_and_print(message='Compressing Info...',
|
try_and_print(message='Compressing Info...',
|
||||||
function=compress_info, cs='Done')
|
function=compress_info, cs='Done')
|
||||||
try_and_print(message='Uploading to NAS...',
|
try_and_print(message='Uploading to NAS...',
|
||||||
function=upload_info, cs='Done')
|
function=upload_info, cs='Done')
|
||||||
|
|
||||||
# Play audio, show devices, open Windows updates, and open Activation
|
# Play audio, show devices, open Windows updates, and open Activation
|
||||||
popen_program(['mmc', 'devmgmt.msc'])
|
popen_program(['mmc', 'devmgmt.msc'])
|
||||||
run_hwinfo_sensors()
|
run_hwinfo_sensors()
|
||||||
popen_program(['control', '/name', 'Microsoft.WindowsUpdate'])
|
popen_program(['control', '/name', 'Microsoft.WindowsUpdate'])
|
||||||
if not windows_is_activated():
|
if not windows_is_activated():
|
||||||
popen_program('slui')
|
popen_program('slui')
|
||||||
sleep(3)
|
sleep(3)
|
||||||
run_xmplay()
|
run_xmplay()
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
pause('Press Enter exit...')
|
pause('Press Enter exit...')
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,124 +1,124 @@
|
||||||
# Wizard Kit: System Diagnostics
|
# Wizard Kit: System Diagnostics
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.browsers import *
|
from functions.browsers import *
|
||||||
from functions.diags import *
|
from functions.diags import *
|
||||||
from functions.info import *
|
from functions.info import *
|
||||||
from functions.product_keys import *
|
from functions.product_keys import *
|
||||||
from functions.repairs import *
|
from functions.repairs import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: System Diagnostics Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: System Diagnostics Tool'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\System Diagnostics.log'.format(
|
global_vars['LogFile'] = r'{LogDir}\System Diagnostics.log'.format(
|
||||||
**global_vars)
|
**global_vars)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: System Diagnostics Tool\n'.format(KIT_NAME_FULL))
|
print_info('{}: System Diagnostics Tool\n'.format(KIT_NAME_FULL))
|
||||||
ticket_number = get_ticket_number()
|
ticket_number = get_ticket_number()
|
||||||
other_results = {
|
other_results = {
|
||||||
'Error': {
|
'Error': {
|
||||||
'CalledProcessError': 'Unknown Error',
|
'CalledProcessError': 'Unknown Error',
|
||||||
},
|
},
|
||||||
'Warning': {
|
'Warning': {
|
||||||
'GenericRepair': 'Repaired',
|
'GenericRepair': 'Repaired',
|
||||||
'UnsupportedOSError': 'Unsupported OS',
|
'UnsupportedOSError': 'Unsupported OS',
|
||||||
}}
|
}}
|
||||||
print_info('Starting System Diagnostics for Ticket #{}\n'.format(
|
print_info('Starting System Diagnostics for Ticket #{}\n'.format(
|
||||||
ticket_number))
|
ticket_number))
|
||||||
|
|
||||||
# Sanitize Environment
|
# Sanitize Environment
|
||||||
print_info('Sanitizing Environment')
|
print_info('Sanitizing Environment')
|
||||||
# try_and_print(message='Killing processes...',
|
# try_and_print(message='Killing processes...',
|
||||||
# function=run_process_killer, cs='Done')
|
# function=run_process_killer, cs='Done')
|
||||||
try_and_print(message='Running RKill...',
|
try_and_print(message='Running RKill...',
|
||||||
function=run_rkill, cs='Done')
|
function=run_rkill, cs='Done')
|
||||||
try_and_print(message='Running TDSSKiller...',
|
try_and_print(message='Running TDSSKiller...',
|
||||||
function=run_tdsskiller, cs='Done')
|
function=run_tdsskiller, cs='Done')
|
||||||
|
|
||||||
# Re-run if earlier process was stopped.
|
# Re-run if earlier process was stopped.
|
||||||
stay_awake()
|
stay_awake()
|
||||||
|
|
||||||
# Start diags
|
# Start diags
|
||||||
print_info('Starting Background Scans')
|
print_info('Starting Background Scans')
|
||||||
check_connection()
|
check_connection()
|
||||||
try_and_print(message='Running HitmanPro...',
|
try_and_print(message='Running HitmanPro...',
|
||||||
function=run_hitmanpro, cs='Started')
|
function=run_hitmanpro, cs='Started')
|
||||||
try_and_print(message='Running Autoruns...',
|
try_and_print(message='Running Autoruns...',
|
||||||
function=run_autoruns, cs='Started')
|
function=run_autoruns, cs='Started')
|
||||||
|
|
||||||
# OS Health Checks
|
# OS Health Checks
|
||||||
print_info('OS Health Checks')
|
print_info('OS Health Checks')
|
||||||
try_and_print(
|
try_and_print(
|
||||||
message='CHKDSK ({SYSTEMDRIVE})...'.format(**global_vars['Env']),
|
message='CHKDSK ({SYSTEMDRIVE})...'.format(**global_vars['Env']),
|
||||||
function=run_chkdsk, other_results=other_results)
|
function=run_chkdsk, other_results=other_results)
|
||||||
try_and_print(message='SFC scan...',
|
try_and_print(message='SFC scan...',
|
||||||
function=run_sfc_scan, other_results=other_results)
|
function=run_sfc_scan, other_results=other_results)
|
||||||
try_and_print(message='DISM CheckHealth...',
|
try_and_print(message='DISM CheckHealth...',
|
||||||
function=run_dism, other_results=other_results, repair=False)
|
function=run_dism, other_results=other_results, repair=False)
|
||||||
|
|
||||||
# Scan for supported browsers
|
# Scan for supported browsers
|
||||||
print_info('Scanning for browsers')
|
print_info('Scanning for browsers')
|
||||||
scan_for_browsers()
|
scan_for_browsers()
|
||||||
|
|
||||||
# Export system info
|
# Export system info
|
||||||
print_info('Backup System Information')
|
print_info('Backup System Information')
|
||||||
try_and_print(message='AIDA64 reports...',
|
try_and_print(message='AIDA64 reports...',
|
||||||
function=run_aida64, cs='Done')
|
function=run_aida64, cs='Done')
|
||||||
try_and_print(message='BleachBit report...',
|
try_and_print(message='BleachBit report...',
|
||||||
function=run_bleachbit, cs='Done')
|
function=run_bleachbit, cs='Done')
|
||||||
backup_browsers()
|
backup_browsers()
|
||||||
try_and_print(message='File listing...',
|
try_and_print(message='File listing...',
|
||||||
function=backup_file_list, cs='Done')
|
function=backup_file_list, cs='Done')
|
||||||
try_and_print(message='Power plans...',
|
try_and_print(message='Power plans...',
|
||||||
function=backup_power_plans, cs='Done')
|
function=backup_power_plans, cs='Done')
|
||||||
try_and_print(message='Product Keys...',
|
try_and_print(message='Product Keys...',
|
||||||
function=run_produkey, cs='Done')
|
function=run_produkey, cs='Done')
|
||||||
try_and_print(message='Registry...',
|
try_and_print(message='Registry...',
|
||||||
function=backup_registry, cs='Done')
|
function=backup_registry, cs='Done')
|
||||||
|
|
||||||
# Summary
|
# Summary
|
||||||
print_info('Summary')
|
print_info('Summary')
|
||||||
try_and_print(message='Temp Size:',
|
try_and_print(message='Temp Size:',
|
||||||
function=show_temp_files_size, silent_function=False)
|
function=show_temp_files_size, silent_function=False)
|
||||||
show_free_space()
|
show_free_space()
|
||||||
try_and_print(message='Installed RAM:',
|
try_and_print(message='Installed RAM:',
|
||||||
function=show_installed_ram, ns='Unknown', silent_function=False)
|
function=show_installed_ram, ns='Unknown', silent_function=False)
|
||||||
try_and_print(message='Installed Office:',
|
try_and_print(message='Installed Office:',
|
||||||
function=get_installed_office, ns='Unknown', print_return=True)
|
function=get_installed_office, ns='Unknown', print_return=True)
|
||||||
try_and_print(message='Product Keys:',
|
try_and_print(message='Product Keys:',
|
||||||
function=get_product_keys, ns='Unknown', print_return=True)
|
function=get_product_keys, ns='Unknown', print_return=True)
|
||||||
try_and_print(message='Operating System:',
|
try_and_print(message='Operating System:',
|
||||||
function=show_os_name, ns='Unknown', silent_function=False)
|
function=show_os_name, ns='Unknown', silent_function=False)
|
||||||
try_and_print(message='',
|
try_and_print(message='',
|
||||||
function=show_os_activation, ns='Unknown', silent_function=False)
|
function=show_os_activation, ns='Unknown', silent_function=False)
|
||||||
|
|
||||||
# User data
|
# User data
|
||||||
print_info('User Data')
|
print_info('User Data')
|
||||||
try:
|
try:
|
||||||
show_user_data_summary()
|
show_user_data_summary()
|
||||||
except Exception:
|
except Exception:
|
||||||
print_error(' Unknown error.')
|
print_error(' Unknown error.')
|
||||||
|
|
||||||
# Upload info
|
# Upload info
|
||||||
if ENABLED_UPLOAD_DATA:
|
if ENABLED_UPLOAD_DATA:
|
||||||
print_info('Finalizing')
|
print_info('Finalizing')
|
||||||
try_and_print(message='Compressing Info...',
|
try_and_print(message='Compressing Info...',
|
||||||
function=compress_info, cs='Done')
|
function=compress_info, cs='Done')
|
||||||
try_and_print(message='Uploading to NAS...',
|
try_and_print(message='Uploading to NAS...',
|
||||||
function=upload_info, cs='Done')
|
function=upload_info, cs='Done')
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
pause('Press Enter to exit...')
|
pause('Press Enter to exit...')
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,28 @@
|
||||||
# Wizard Kit: Search for product keys in the transfer folder
|
# Wizard Kit: Search for product keys in the transfer folder
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.product_keys import *
|
from functions.product_keys import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: Transferred Key Finder'.format(KIT_NAME_FULL))
|
os.system('title {}: Transferred Key Finder'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\Transferred Keys.log'.format(**global_vars)
|
global_vars['LogFile'] = r'{LogDir}\Transferred Keys.log'.format(**global_vars)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: Transferred Key Finder\n'.format(KIT_NAME_FULL))
|
print_info('{}: Transferred Key Finder\n'.format(KIT_NAME_FULL))
|
||||||
try_and_print(message='Searching for keys...',
|
try_and_print(message='Searching for keys...',
|
||||||
function=list_clientdir_keys, print_return=True)
|
function=list_clientdir_keys, print_return=True)
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,143 +1,143 @@
|
||||||
# Wizard Kit: Download the latest versions of the programs in the kit
|
# Wizard Kit: Download the latest versions of the programs in the kit
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.update import *
|
from functions.update import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: Kit Update Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: Kit Update Tool'.format(KIT_NAME_FULL))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: Kit Update Tool\n'.format(KIT_NAME_FULL))
|
print_info('{}: Kit Update Tool\n'.format(KIT_NAME_FULL))
|
||||||
other_results = {
|
other_results = {
|
||||||
'Error': {
|
'Error': {
|
||||||
'CalledProcessError': 'Unknown Error',
|
'CalledProcessError': 'Unknown Error',
|
||||||
}}
|
}}
|
||||||
|
|
||||||
## Prep ##
|
## Prep ##
|
||||||
update_sdio = ask('Update SDI Origin?')
|
update_sdio = ask('Update SDI Origin?')
|
||||||
|
|
||||||
## Download ##
|
## Download ##
|
||||||
print_success('Downloading tools')
|
print_success('Downloading tools')
|
||||||
|
|
||||||
# Data Recovery
|
# Data Recovery
|
||||||
print_info(' Data Recovery')
|
print_info(' Data Recovery')
|
||||||
try_and_print(message='TestDisk / PhotoRec...', function=update_testdisk, other_results=other_results, width=40)
|
try_and_print(message='TestDisk / PhotoRec...', function=update_testdisk, other_results=other_results, width=40)
|
||||||
|
|
||||||
# Data Transfers
|
# Data Transfers
|
||||||
print_info(' Data Transfers')
|
print_info(' Data Transfers')
|
||||||
try_and_print(message='FastCopy...', function=update_fastcopy, other_results=other_results, width=40)
|
try_and_print(message='FastCopy...', function=update_fastcopy, other_results=other_results, width=40)
|
||||||
try_and_print(message='wimlib...', function=update_wimlib, other_results=other_results, width=40)
|
try_and_print(message='wimlib...', function=update_wimlib, other_results=other_results, width=40)
|
||||||
try_and_print(message='XYplorer...', function=update_xyplorer, other_results=other_results, width=40)
|
try_and_print(message='XYplorer...', function=update_xyplorer, other_results=other_results, width=40)
|
||||||
|
|
||||||
# Diagnostics
|
# Diagnostics
|
||||||
print_info(' Diagnostics')
|
print_info(' Diagnostics')
|
||||||
try_and_print(message='AIDA64...', function=update_aida64, other_results=other_results, width=40)
|
try_and_print(message='AIDA64...', function=update_aida64, other_results=other_results, width=40)
|
||||||
try_and_print(message='Autoruns...', function=update_autoruns, other_results=other_results, width=40)
|
try_and_print(message='Autoruns...', function=update_autoruns, other_results=other_results, width=40)
|
||||||
try_and_print(message='BleachBit...', function=update_bleachbit, other_results=other_results, width=40)
|
try_and_print(message='BleachBit...', function=update_bleachbit, other_results=other_results, width=40)
|
||||||
try_and_print(message='BlueScreenView...', function=update_bluescreenview, other_results=other_results, width=40)
|
try_and_print(message='BlueScreenView...', function=update_bluescreenview, other_results=other_results, width=40)
|
||||||
try_and_print(message='ERUNT...', function=update_erunt, other_results=other_results, width=40)
|
try_and_print(message='ERUNT...', function=update_erunt, other_results=other_results, width=40)
|
||||||
try_and_print(message='HitmanPro...', function=update_hitmanpro, other_results=other_results, width=40)
|
try_and_print(message='HitmanPro...', function=update_hitmanpro, other_results=other_results, width=40)
|
||||||
try_and_print(message='HWiNFO...', function=update_hwinfo, other_results=other_results, width=40)
|
try_and_print(message='HWiNFO...', function=update_hwinfo, other_results=other_results, width=40)
|
||||||
try_and_print(message='ProduKey...', function=update_produkey, other_results=other_results, width=40)
|
try_and_print(message='ProduKey...', function=update_produkey, other_results=other_results, width=40)
|
||||||
|
|
||||||
# Drivers
|
# Drivers
|
||||||
print_info(' Drivers')
|
print_info(' Drivers')
|
||||||
try_and_print(message='Intel RST...', function=update_intel_rst, other_results=other_results, width=40)
|
try_and_print(message='Intel RST...', function=update_intel_rst, other_results=other_results, width=40)
|
||||||
try_and_print(message='Intel SSD Toolbox...', function=update_intel_ssd_toolbox, other_results=other_results, width=40)
|
try_and_print(message='Intel SSD Toolbox...', function=update_intel_ssd_toolbox, other_results=other_results, width=40)
|
||||||
try_and_print(message='Samsing Magician...', function=update_samsung_magician, other_results=other_results, width=40)
|
try_and_print(message='Samsing Magician...', function=update_samsung_magician, other_results=other_results, width=40)
|
||||||
if update_sdio:
|
if update_sdio:
|
||||||
try_and_print(message='Snappy Driver Installer Origin...', function=update_sdi_origin, other_results=other_results, width=40)
|
try_and_print(message='Snappy Driver Installer Origin...', function=update_sdi_origin, other_results=other_results, width=40)
|
||||||
|
|
||||||
# Installers
|
# Installers
|
||||||
print_info(' Installers')
|
print_info(' Installers')
|
||||||
try_and_print(message='Adobe Reader DC...', function=update_adobe_reader_dc, other_results=other_results, width=40)
|
try_and_print(message='Adobe Reader DC...', function=update_adobe_reader_dc, other_results=other_results, width=40)
|
||||||
try_and_print(message='MS Office...', function=update_office, other_results=other_results, width=40)
|
try_and_print(message='MS Office...', function=update_office, other_results=other_results, width=40)
|
||||||
try_and_print(message='Visual C++ Runtimes...', function=update_vcredists, other_results=other_results, width=40)
|
try_and_print(message='Visual C++ Runtimes...', function=update_vcredists, other_results=other_results, width=40)
|
||||||
update_all_ninite(other_results=other_results, width=40)
|
update_all_ninite(other_results=other_results, width=40)
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
print_info(' Misc')
|
print_info(' Misc')
|
||||||
try_and_print(message='Caffeine...', function=update_caffeine, other_results=other_results, width=40)
|
try_and_print(message='Caffeine...', function=update_caffeine, other_results=other_results, width=40)
|
||||||
try_and_print(message='Classic Start Skin...', function=update_classic_start_skin, other_results=other_results, width=40)
|
try_and_print(message='Classic Start Skin...', function=update_classic_start_skin, other_results=other_results, width=40)
|
||||||
try_and_print(message='Du...', function=update_du, other_results=other_results, width=40)
|
try_and_print(message='Du...', function=update_du, other_results=other_results, width=40)
|
||||||
try_and_print(message='Everything...', function=update_everything, other_results=other_results, width=40)
|
try_and_print(message='Everything...', function=update_everything, other_results=other_results, width=40)
|
||||||
try_and_print(message='FirefoxExtensions...', function=update_firefox_ublock_origin, other_results=other_results, width=40)
|
try_and_print(message='FirefoxExtensions...', function=update_firefox_ublock_origin, other_results=other_results, width=40)
|
||||||
try_and_print(message='PuTTY...', function=update_putty, other_results=other_results, width=40)
|
try_and_print(message='PuTTY...', function=update_putty, other_results=other_results, width=40)
|
||||||
try_and_print(message='Notepad++...', function=update_notepadplusplus, other_results=other_results, width=40)
|
try_and_print(message='Notepad++...', function=update_notepadplusplus, other_results=other_results, width=40)
|
||||||
try_and_print(message='TreeSizeFree...', function=update_treesizefree, other_results=other_results, width=40)
|
try_and_print(message='TreeSizeFree...', function=update_treesizefree, other_results=other_results, width=40)
|
||||||
try_and_print(message='XMPlay...', function=update_xmplay, other_results=other_results, width=40)
|
try_and_print(message='XMPlay...', function=update_xmplay, other_results=other_results, width=40)
|
||||||
|
|
||||||
# Repairs
|
# Repairs
|
||||||
print_info(' Repairs')
|
print_info(' Repairs')
|
||||||
try_and_print(message='AdwCleaner...', function=update_adwcleaner, other_results=other_results, width=40)
|
try_and_print(message='AdwCleaner...', function=update_adwcleaner, other_results=other_results, width=40)
|
||||||
try_and_print(message='KVRT...', function=update_kvrt, other_results=other_results, width=40)
|
try_and_print(message='KVRT...', function=update_kvrt, other_results=other_results, width=40)
|
||||||
try_and_print(message='RKill...', function=update_rkill, other_results=other_results, width=40)
|
try_and_print(message='RKill...', function=update_rkill, other_results=other_results, width=40)
|
||||||
try_and_print(message='TDSSKiller...', function=update_tdsskiller, other_results=other_results, width=40)
|
try_and_print(message='TDSSKiller...', function=update_tdsskiller, other_results=other_results, width=40)
|
||||||
|
|
||||||
# Uninstallers
|
# Uninstallers
|
||||||
print_info(' Uninstallers')
|
print_info(' Uninstallers')
|
||||||
try_and_print(message='IObit Uninstaller...', function=update_iobit_uninstaller, other_results=other_results, width=40)
|
try_and_print(message='IObit Uninstaller...', function=update_iobit_uninstaller, other_results=other_results, width=40)
|
||||||
|
|
||||||
## Review ##
|
## Review ##
|
||||||
print_standard('Please review the results and download/extract any missing items to .cbin')
|
print_standard('Please review the results and download/extract any missing items to .cbin')
|
||||||
pause('Press Enter to compress the .cbin items')
|
pause('Press Enter to compress the .cbin items')
|
||||||
|
|
||||||
## Compress ##
|
## Compress ##
|
||||||
print_success('Compressing tools')
|
print_success('Compressing tools')
|
||||||
print_info(' _Drivers')
|
print_info(' _Drivers')
|
||||||
for item in os.scandir(r'{}\_Drivers'.format(global_vars['CBinDir'])):
|
for item in os.scandir(r'{}\_Drivers'.format(global_vars['CBinDir'])):
|
||||||
if not re.search(r'^(_Drivers|.*7z)$', item.name, re.IGNORECASE):
|
if not re.search(r'^(_Drivers|.*7z)$', item.name, re.IGNORECASE):
|
||||||
try_and_print(
|
try_and_print(
|
||||||
message='{}...'.format(item.name),
|
message='{}...'.format(item.name),
|
||||||
function=compress_and_remove_item,
|
function=compress_and_remove_item,
|
||||||
other_results = other_results,
|
other_results = other_results,
|
||||||
width=40,
|
width=40,
|
||||||
item = item)
|
item = item)
|
||||||
print_info(' .cbin')
|
print_info(' .cbin')
|
||||||
for item in os.scandir(global_vars['CBinDir']):
|
for item in os.scandir(global_vars['CBinDir']):
|
||||||
if not re.search(r'^(_Drivers|_include|.*7z)$', item.name, re.IGNORECASE):
|
if not re.search(r'^(_Drivers|_include|.*7z)$', item.name, re.IGNORECASE):
|
||||||
try_and_print(
|
try_and_print(
|
||||||
message='{}...'.format(item.name),
|
message='{}...'.format(item.name),
|
||||||
function=compress_and_remove_item,
|
function=compress_and_remove_item,
|
||||||
other_results = other_results,
|
other_results = other_results,
|
||||||
width=40,
|
width=40,
|
||||||
item = item)
|
item = item)
|
||||||
|
|
||||||
## Search for network Office/QuickBooks installers & add to LAUNCHERS
|
## Search for network Office/QuickBooks installers & add to LAUNCHERS
|
||||||
print_success('Scanning for network installers')
|
print_success('Scanning for network installers')
|
||||||
scan_for_net_installers(OFFICE_SERVER, 'Office', min_year=2010)
|
scan_for_net_installers(OFFICE_SERVER, 'Office', min_year=2010)
|
||||||
scan_for_net_installers(QUICKBOOKS_SERVER, 'QuickBooks', min_year=2015)
|
scan_for_net_installers(QUICKBOOKS_SERVER, 'QuickBooks', min_year=2015)
|
||||||
|
|
||||||
## Generate Launchers
|
## Generate Launchers
|
||||||
print_success('Generating launchers')
|
print_success('Generating launchers')
|
||||||
for section in sorted(LAUNCHERS.keys()):
|
for section in sorted(LAUNCHERS.keys()):
|
||||||
print_info(' {}'.format(section))
|
print_info(' {}'.format(section))
|
||||||
for name, options in sorted(LAUNCHERS[section].items()):
|
for name, options in sorted(LAUNCHERS[section].items()):
|
||||||
try_and_print(message=name, function=generate_launcher,
|
try_and_print(message=name, function=generate_launcher,
|
||||||
section=section, name=name, options=options,
|
section=section, name=name, options=options,
|
||||||
other_results=other_results, width=40)
|
other_results=other_results, width=40)
|
||||||
|
|
||||||
# Rename "Copy WizardKit.cmd" (if necessary)
|
# Rename "Copy WizardKit.cmd" (if necessary)
|
||||||
source = r'{}\Scripts\Copy WizardKit.cmd'.format(global_vars['BinDir'])
|
source = r'{}\Scripts\Copy WizardKit.cmd'.format(global_vars['BinDir'])
|
||||||
dest = r'{}\Copy {}.cmd'.format(global_vars['BaseDir'], KIT_NAME_FULL)
|
dest = r'{}\Copy {}.cmd'.format(global_vars['BaseDir'], KIT_NAME_FULL)
|
||||||
if os.path.exists(source):
|
if os.path.exists(source):
|
||||||
try:
|
try:
|
||||||
shutil.move(source, dest)
|
shutil.move(source, dest)
|
||||||
except Exception:
|
except Exception:
|
||||||
print_error(' Failed to rename "{}.cmd" to "{}.cmd"'.format(
|
print_error(' Failed to rename "{}.cmd" to "{}.cmd"'.format(
|
||||||
'Copy WizardKit', KIT_NAME_FULL))
|
'Copy WizardKit', KIT_NAME_FULL))
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
pause("Press Enter to exit...")
|
pause("Press Enter to exit...")
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,83 +1,83 @@
|
||||||
# Wizard Kit: User Checklist
|
# Wizard Kit: User Checklist
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.browsers import *
|
from functions.browsers import *
|
||||||
from functions.cleanup import *
|
from functions.cleanup import *
|
||||||
from functions.setup import *
|
from functions.setup import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: User Checklist Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: User Checklist Tool'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\User Checklist ({USERNAME}).log'.format(
|
global_vars['LogFile'] = r'{LogDir}\User Checklist ({USERNAME}).log'.format(
|
||||||
**global_vars, **global_vars['Env'])
|
**global_vars, **global_vars['Env'])
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: User Checklist\n'.format(KIT_NAME_FULL))
|
print_info('{}: User Checklist\n'.format(KIT_NAME_FULL))
|
||||||
other_results = {
|
other_results = {
|
||||||
'Warning': {
|
'Warning': {
|
||||||
'NotInstalledError': 'Not installed',
|
'NotInstalledError': 'Not installed',
|
||||||
'NoProfilesError': 'No profiles found',
|
'NoProfilesError': 'No profiles found',
|
||||||
}}
|
}}
|
||||||
answer_config_browsers = ask('Install adblock?')
|
answer_config_browsers = ask('Install adblock?')
|
||||||
if answer_config_browsers:
|
if answer_config_browsers:
|
||||||
answer_reset_browsers = ask(
|
answer_reset_browsers = ask(
|
||||||
'Reset browsers to safe defaults first?')
|
'Reset browsers to safe defaults first?')
|
||||||
if global_vars['OS']['Version'] == '10':
|
if global_vars['OS']['Version'] == '10':
|
||||||
answer_config_classicshell = ask('Configure ClassicShell?')
|
answer_config_classicshell = ask('Configure ClassicShell?')
|
||||||
answer_config_explorer_user = ask('Configure Explorer?')
|
answer_config_explorer_user = ask('Configure Explorer?')
|
||||||
|
|
||||||
# Cleanup
|
# Cleanup
|
||||||
print_info('Cleanup')
|
print_info('Cleanup')
|
||||||
try_and_print(message='Desktop...',
|
try_and_print(message='Desktop...',
|
||||||
function=cleanup_desktop, cs='Done')
|
function=cleanup_desktop, cs='Done')
|
||||||
|
|
||||||
# Scan for supported browsers
|
# Scan for supported browsers
|
||||||
print_info('Scanning for browsers')
|
print_info('Scanning for browsers')
|
||||||
scan_for_browsers()
|
scan_for_browsers()
|
||||||
|
|
||||||
# Homepages
|
# Homepages
|
||||||
print_info('Current homepages')
|
print_info('Current homepages')
|
||||||
list_homepages()
|
list_homepages()
|
||||||
|
|
||||||
# Backup
|
# Backup
|
||||||
print_info('Backing up browsers')
|
print_info('Backing up browsers')
|
||||||
backup_browsers()
|
backup_browsers()
|
||||||
|
|
||||||
# Reset
|
# Reset
|
||||||
if answer_config_browsers and answer_reset_browsers:
|
if answer_config_browsers and answer_reset_browsers:
|
||||||
print_info('Resetting browsers')
|
print_info('Resetting browsers')
|
||||||
reset_browsers()
|
reset_browsers()
|
||||||
|
|
||||||
# Configure
|
# Configure
|
||||||
print_info('Configuring programs')
|
print_info('Configuring programs')
|
||||||
if answer_config_browsers:
|
if answer_config_browsers:
|
||||||
install_adblock()
|
install_adblock()
|
||||||
if global_vars['OS']['Version'] == '10':
|
if global_vars['OS']['Version'] == '10':
|
||||||
if answer_config_classicshell:
|
if answer_config_classicshell:
|
||||||
try_and_print(message='ClassicStart...',
|
try_and_print(message='ClassicStart...',
|
||||||
function=config_classicstart, cs='Done')
|
function=config_classicstart, cs='Done')
|
||||||
if answer_config_explorer_user:
|
if answer_config_explorer_user:
|
||||||
try_and_print(message='Explorer...',
|
try_and_print(message='Explorer...',
|
||||||
function=config_explorer_user, cs='Done')
|
function=config_explorer_user, cs='Done')
|
||||||
if (not answer_config_browsers
|
if (not answer_config_browsers
|
||||||
and not answer_config_classicshell
|
and not answer_config_classicshell
|
||||||
and not answer_config_explorer_user):
|
and not answer_config_explorer_user):
|
||||||
print_warning(' Skipped')
|
print_warning(' Skipped')
|
||||||
else:
|
else:
|
||||||
if not answer_config_browsers:
|
if not answer_config_browsers:
|
||||||
print_warning(' Skipped')
|
print_warning(' Skipped')
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
pause('Press Enter to exit...')
|
pause('Press Enter to exit...')
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
|
|
@ -1,53 +1,53 @@
|
||||||
# Wizard Kit: Copy user data to the system from a local or network source
|
# Wizard Kit: Copy user data to the system from a local or network source
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Init
|
# Init
|
||||||
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
sys.path.append(os.getcwd())
|
sys.path.append(os.getcwd())
|
||||||
from functions.data import *
|
from functions.data import *
|
||||||
from functions.repairs import *
|
from functions.repairs import *
|
||||||
init_global_vars()
|
init_global_vars()
|
||||||
os.system('title {}: User Data Transfer Tool'.format(KIT_NAME_FULL))
|
os.system('title {}: User Data Transfer Tool'.format(KIT_NAME_FULL))
|
||||||
global_vars['LogFile'] = r'{LogDir}\User Data Transfer.log'.format(**global_vars)
|
global_vars['LogFile'] = r'{LogDir}\User Data Transfer.log'.format(**global_vars)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
# Prep
|
# Prep
|
||||||
stay_awake()
|
stay_awake()
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('{}: User Data Transfer Tool\n'.format(KIT_NAME_FULL))
|
print_info('{}: User Data Transfer Tool\n'.format(KIT_NAME_FULL))
|
||||||
ticket_number = get_ticket_number()
|
ticket_number = get_ticket_number()
|
||||||
folder_path = r'{}\Transfer'.format(KIT_NAME_SHORT)
|
folder_path = r'{}\Transfer'.format(KIT_NAME_SHORT)
|
||||||
dest = select_destination(folder_path=folder_path,
|
dest = select_destination(folder_path=folder_path,
|
||||||
prompt='Which disk are we transferring to?')
|
prompt='Which disk are we transferring to?')
|
||||||
source = select_source(ticket_number)
|
source = select_source(ticket_number)
|
||||||
items = scan_source(source, dest)
|
items = scan_source(source, dest)
|
||||||
|
|
||||||
# Transfer
|
# Transfer
|
||||||
clear_screen()
|
clear_screen()
|
||||||
print_info('Transfer Details:\n')
|
print_info('Transfer Details:\n')
|
||||||
show_info('Ticket:', ticket_number)
|
show_info('Ticket:', ticket_number)
|
||||||
show_info('Source:', source.path)
|
show_info('Source:', source.path)
|
||||||
show_info('Destination:', dest)
|
show_info('Destination:', dest)
|
||||||
|
|
||||||
if (not ask('Proceed with transfer?')):
|
if (not ask('Proceed with transfer?')):
|
||||||
umount_backup_shares()
|
umount_backup_shares()
|
||||||
abort()
|
abort()
|
||||||
|
|
||||||
print_info('Transferring Data')
|
print_info('Transferring Data')
|
||||||
transfer_source(source, dest, items)
|
transfer_source(source, dest, items)
|
||||||
try_and_print(message='Removing extra files...',
|
try_and_print(message='Removing extra files...',
|
||||||
function=cleanup_transfer, cs='Done', dest_path=dest)
|
function=cleanup_transfer, cs='Done', dest_path=dest)
|
||||||
umount_backup_shares()
|
umount_backup_shares()
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
run_kvrt()
|
run_kvrt()
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
pause("Press Enter to exit...")
|
pause("Press Enter to exit...")
|
||||||
exit_script()
|
exit_script()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
major_exception()
|
major_exception()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue