Converted all python scripts to LF/UNIX

This commit is contained in:
2Shirt 2017-12-18 00:47:47 -07:00
parent a33a54c5e6
commit 5ea03da0a4
35 changed files with 6486 additions and 6486 deletions

View file

@ -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()

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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()

View file

@ -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()

View file

@ -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()

View file

@ -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.")

View file

@ -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.")

View file

@ -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

View file

@ -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.")

View file

@ -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.")

View file

@ -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.")

View file

@ -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.")

View file

@ -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.")

View file

@ -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.")

View file

@ -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

View file

@ -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()

View file

@ -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()

View file

@ -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()

View file

@ -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

View file

@ -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.")

View file

@ -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.")

View file

@ -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.")

View file

@ -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()

View file

@ -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()

View file

@ -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()

View file

@ -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()

View file

@ -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()

View file

@ -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()

View file

@ -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()