Compare commits

...

18 commits
dev-pe ... dev

Author SHA1 Message Date
875166b683
Replace WMIC sections
Addresses issue #227
2024-11-23 15:27:17 -08:00
179748c469
Add Windows 11 24H2 to version list 2024-11-22 07:27:44 -08:00
ffcee1156a
Remove stale docopt files 2024-09-30 01:52:07 -07:00
edd944a325
Hide extra partitions when building UFDs
Addresses issue #226
2024-09-28 23:22:31 -07:00
75119c15ad
Fix bug in ddrescue-tui argument parsing 2024-09-11 18:11:12 -07:00
e6db63c8b0
Fix typo 2024-09-09 21:43:28 -07:00
e388b77639
Add OSFMount 2024-09-09 21:40:19 -07:00
bbdef56df2
Add OSFMount 2024-09-09 21:05:36 -07:00
6a5a944ea0
Refactor notepad replacement in WinPE
The registry method has proved problematic.  This DOSKEY method seems
less error prone since it's evaluated at runtime.
2024-09-09 20:12:54 -07:00
3621914312
Remove temporary WinPE WIM file 2024-09-08 13:28:31 -07:00
0ef9412995
Switch back to ConEmu in WinPE 2024-09-08 03:53:48 -07:00
0335797a5d
Update WinPE sections 2024-09-08 03:04:33 -07:00
2a07aebff3
Move macOS icons into a tar archive 2024-09-08 00:13:47 -07:00
244d917c73
Drop remaining docopt references 2024-09-04 01:14:34 -07:00
13b8dc8696
Replace remaining docopt sections 2024-09-04 00:53:42 -07:00
58576cbdb4
Use FAT32 for all UFD partitions
This breaks macOS images but those are deprecated at this point.
2024-09-04 00:24:03 -07:00
a3a7b25512
Fix case_insensitive_search 2024-09-04 00:16:54 -07:00
50033f42f6
Move to argparse for ddrescue-tui and hw-diags 2024-09-03 01:12:00 -07:00
44 changed files with 2834 additions and 3722 deletions

13
scripts/check_av.ps1 Normal file
View file

@ -0,0 +1,13 @@
# WizardKit: Check Antivirus
#Requires -Version 3.0
if (Test-Path Env:\DEBUG) {
Set-PSDebug -Trace 1
}
$Host.UI.RawUI.WindowTitle = "WizardKit: Check Antivirus"
$Host.UI.RawUI.BackgroundColor = "black"
$Host.UI.RawUI.ForegroundColor = "white"
$ProgressPreference = "SilentlyContinue"
# Main
Get-CimInstance -Namespace "root\SecurityCenter2" -ClassName AntivirusProduct | select displayName,productState | ConvertTo-Json

View file

@ -0,0 +1,13 @@
# WizardKit: Check Partition Alignment
#Requires -Version 3.0
if (Test-Path Env:\DEBUG) {
Set-PSDebug -Trace 1
}
$Host.UI.RawUI.WindowTitle = "WizardKit: Check Partition Alignment"
$Host.UI.RawUI.BackgroundColor = "black"
$Host.UI.RawUI.ForegroundColor = "white"
$ProgressPreference = "SilentlyContinue"
# Main
Get-CimInstance -Query "Select * from Win32_DiskPartition" | select Name,Size,StartingOffset | ConvertTo-Json

View file

@ -2,19 +2,10 @@
"""WizardKit: ddrescue TUI"""
# vim: sts=2 sw=2 ts=2
from docopt import docopt
import wk
if __name__ == '__main__':
try:
docopt(wk.clone.ddrescue.DOCSTRING)
except SystemExit:
print('')
wk.ui.cli.pause('Press Enter to exit...')
raise
try:
wk.clone.ddrescue.main()
except SystemExit:

View file

@ -0,0 +1,13 @@
# WizardKit: Disable Password Expiration (Local Accounts)
#Requires -Version 3.0
if (Test-Path Env:\DEBUG) {
Set-PSDebug -Trace 1
}
$Host.UI.RawUI.WindowTitle = "Disable Password Expiration"
$Host.UI.RawUI.BackgroundColor = "black"
$Host.UI.RawUI.ForegroundColor = "white"
$ProgressPreference = "SilentlyContinue"
# Main
Get-LocalUser | Set-LocalUser -PasswordNeverExpires $true

View file

@ -2,19 +2,10 @@
"""WizardKit: Hardware Diagnostics"""
# vim: sts=2 sw=2 ts=2
from docopt import docopt
import wk
if __name__ == '__main__':
try:
docopt(wk.hw.diags.DOCSTRING)
except SystemExit:
print('')
wk.ui.cli.pause('Press Enter to exit...')
raise
try:
wk.hw.diags.main()
except SystemExit:

View file

@ -29,6 +29,14 @@ REG_CHROME_UBLOCK_ORIGIN = {
)
},
}
REG_WINDOWS_BSOD_MINIDUMPS = {
'HKLM': {
# Enable small memory dumps
r'SYSTEM\CurrentControlSet\Control\CrashControl': (
('CrashDumpEnabled', 3, 'DWORD'),
)
}
}
REG_WINDOWS_EXPLORER = {
'HKLM': {
# Allow password sign-in for MS accounts

View file

@ -39,4 +39,5 @@ WINDOWS_BUILDS = {
'10.0.22000': '21H2',
'10.0.22621': '22H2',
'10.0.22631': '23H2',
'10.0.26100': '24H2',
}

View file

@ -1,6 +1,7 @@
"""WizardKit: ddrescue TUI"""
# vim: sts=2 sw=2 ts=2
import argparse
import atexit
import datetime
import logging
@ -12,8 +13,6 @@ from random import randint
import pytz
from docopt import docopt
from wk import cfg, exe, io, log, std
from wk.cfg.ddrescue import DDRESCUE_SPECIFIC_PASS_SETTINGS
from wk.clone import menus
@ -29,19 +28,6 @@ from wk.ui import ansi, cli
# STATIC VARIABLES
LOG = logging.getLogger(__name__)
DOCSTRING = f'''{cfg.main.KIT_NAME_FULL}: ddrescue TUI
Usage:
ddrescue-tui
ddrescue-tui [options] (clone|image) [<source> [<destination>]]
ddrescue-tui (-h | --help)
Options:
-h --help Show this page
-s --dry-run Print commands to be used instead of running them
--force-local-map Skip mounting shares and save map to local drive
--start-fresh Ignore previous runs and start new recovery
'''
DETECT_DRIVES_NOTICE = '''
This option will force the drive controllers to rescan for devices.
The method used is not 100% reliable and may cause issues. If you see
@ -55,6 +41,42 @@ TIMEZONE = pytz.timezone(cfg.main.LINUX_TIME_ZONE)
# Functions
def argparse_helper() -> dict[str, None|bool|str]:
"""Helper function to setup and return args, returns dict.
NOTE: A dict is used to match the legacy code.
"""
parser = argparse.ArgumentParser(
prog='ddrescue-tui',
description=f'{cfg.main.KIT_NAME_FULL}: ddrescue TUI',
)
parser.add_argument('mode', choices=('clone', 'image'), nargs='?')
parser.add_argument('source', nargs='?')
parser.add_argument('destination', nargs='?')
parser.add_argument(
'-s', '--dry-run', action='store_true',
help='Print commands to be used instead of running them',
)
parser.add_argument(
'--force-local-map', action='store_true',
help='Skip mounting shares and save map to local drive',
)
parser.add_argument(
'--start-fresh', action='store_true',
help='Ignore previous runs and start new recovery',
)
args = parser.parse_args()
legacy_args = {
'clone': args.mode == 'clone',
'image': args.mode == 'image',
'<source>': args.source,
'<destination>': args.destination,
'--dry-run': args.dry_run,
'--force-local-map': args.force_local_map,
'--start-fresh': args.start_fresh,
}
return legacy_args
def build_ddrescue_cmd(block_pair, pass_name, settings_menu) -> list[str]:
"""Build ddrescue cmd using passed details, returns list."""
cmd = ['sudo', 'ddrescue']
@ -273,7 +295,12 @@ def is_missing_source_or_destination(state) -> bool:
def main() -> None:
"""Main function for ddrescue TUI."""
args = docopt(DOCSTRING)
try:
args = argparse_helper()
except SystemExit:
print('')
cli.pause('Press Enter to exit...')
raise
# Log setup
log_path = log.format_log_path(log_name='main', sub_dir='ddrescue-TUI')

View file

@ -316,7 +316,7 @@ class State():
"""Get total size of all block_pairs in bytes, returns int."""
return sum(pair.size for pair in self.block_pairs)
def init_recovery(self, docopt_args: dict[str, Any]) -> None:
def init_recovery(self, cli_args: dict[str, Any]) -> None:
"""Select source/dest and set env."""
cli.clear_screen()
disk_menu = menus.disks()
@ -324,10 +324,10 @@ class State():
self.ui.set_progress_file(str(self.progress_out))
# Set mode
self.mode = set_mode(docopt_args)
self.mode = set_mode(cli_args)
# Select source
self.source = select_disk_obj('source', disk_menu, docopt_args['<source>'])
self.source = select_disk_obj('source', disk_menu, cli_args['<source>'])
self.update_top_panes()
if self.source.trim:
cli.print_warning('Source device supports TRIM')
@ -340,12 +340,12 @@ class State():
self.destination = select_disk_obj(
'destination',
disk_menu,
docopt_args['<destination>'],
cli_args['<destination>'],
)
self.ui.add_title_pane('Destination', self.destination.name)
elif self.mode == 'Image':
if docopt_args['<destination>']:
self.destination = pathlib.Path(docopt_args['<destination>']).resolve()
if cli_args['<destination>']:
self.destination = pathlib.Path(cli_args['<destination>']).resolve()
else:
self.destination = menus.select_path('Destination')
self.destination.mkdir(parents=True, exist_ok=True)
@ -370,11 +370,11 @@ class State():
self.working_dir = get_working_dir(
self.mode,
self.destination,
force_local=docopt_args['--force-local-map'],
force_local=cli_args['--force-local-map'],
)
# Start fresh if requested
if docopt_args['--start-fresh']:
if cli_args['--start-fresh']:
clean_working_dir(self.working_dir)
# Add block pairs
@ -412,10 +412,10 @@ class State():
# Prep destination
if self.mode == 'Clone':
prep_destination(self, source_parts, dry_run=docopt_args['--dry-run'])
prep_destination(self, source_parts, dry_run=cli_args['--dry-run'])
# Safety Checks #2
if not docopt_args['--dry-run']:
if not cli_args['--dry-run']:
for pair in self.block_pairs:
pair.safety_check()
@ -1051,12 +1051,12 @@ def select_disk_obj(label:str, disk_menu: cli.Menu, disk_path: str) -> hw_disk.D
raise std.GenericAbort()
def set_mode(docopt_args) -> str:
"""Set mode from docopt_args or user selection, returns str."""
if docopt_args['clone']:
def set_mode(cli_args) -> str:
"""Set mode from cli_args or user selection, returns str."""
if cli_args['clone']:
return 'Clone'
if docopt_args['image']:
if cli_args['image']:
return 'Image'
# Ask user if necessary

View file

@ -1,14 +1,13 @@
"""WizardKit: Hardware diagnostics"""
# vim: sts=2 sw=2 ts=2
import argparse
import atexit
import logging
import os
import pathlib
import subprocess
from docopt import docopt
from wk import cfg, debug, exe, log, std
from wk.cfg.hw import STATUS_COLORS
from wk.hw import benchmark as hw_benchmark
@ -28,18 +27,6 @@ from wk.ui import ansi, cli, tui
# STATIC VARIABLES
DOCSTRING = f'''{cfg.main.KIT_NAME_FULL}: Hardware Diagnostics
Usage:
hw-diags [options]
hw-diags (-h | --help)
Options:
-c --cli Force CLI mode
-h --help Show this page
-q --quick Skip menu and perform a quick check
-t --test-mode Run diags in test mode
'''
LOG = logging.getLogger(__name__)
TEST_GROUPS = {
# Also used to build the menu options
@ -264,6 +251,36 @@ class State():
# Functions
def argparse_helper() -> dict[str, bool]:
"""Helper function to setup and return args, returns dict.
NOTE: A dict is used to match the legacy code.
"""
parser = argparse.ArgumentParser(
prog='hw-diags',
description=f'{cfg.main.KIT_NAME_FULL}: Hardware Diagnostics',
)
parser.add_argument(
'-c', '--cli', action='store_true',
help='Force CLI mode',
)
parser.add_argument(
'-q', '--quick', action='store_true',
help='Skip menu and perform a quick check',
)
parser.add_argument(
'-t', '--test-mode', action='store_true',
help='Run diags in test mode',
)
args = parser.parse_args()
legacy_args = {
'--cli': args.cli,
'--quick': args.quick,
'--test-mode': args.test_mode,
}
return legacy_args
def build_menu(cli_mode=False, quick_mode=False) -> cli.Menu:
"""Build main menu, returns wk.ui.cli.Menu."""
menu = cli.Menu(title='')
@ -748,7 +765,12 @@ def disk_surface_scan(state: State, test_objects, test_mode=False) -> None:
def main() -> None:
"""Main function for hardware diagnostics."""
args = docopt(DOCSTRING)
try:
args = argparse_helper()
except SystemExit:
print('')
cli.pause('Press Enter to exit...')
raise
log.update_log_path(dest_name='Hardware-Diagnostics', timestamp=True)
# Safety check

View file

@ -43,7 +43,7 @@ def case_insensitive_search(
path = pathlib.Path(path).resolve()
given_path = path.joinpath(item)
real_path = None
regex = fr'^{item}'
regex = fr'^{item}$'
# Quick check
if given_path.exists():

View file

@ -1,6 +1,7 @@
"""WizardKit: UFD Functions"""
# vim: sts=2 sw=2 ts=2
import argparse
import logging
import math
import os
@ -9,8 +10,6 @@ import re
import shutil
from subprocess import CalledProcessError
from docopt import docopt
from wk import io, log
from wk.cfg.main import KIT_NAME_FULL, KIT_NAME_SHORT
from wk.cfg.ufd import (
@ -29,30 +28,6 @@ from wk.ui import cli as ui
# STATIC VARIABLES
DOCSTRING = '''WizardKit: Build UFD
Usage:
build-ufd [options] --ufd-device PATH
[--linux PATH]
[--main-kit PATH]
[--winpe PATH]
[--extra-dir PATH]
[EXTRA_IMAGES...]
build-ufd (-h | --help)
Options:
-e PATH, --extra-dir PATH
-k PATH, --main-kit PATH
-l PATH, --linux PATH
-u PATH, --ufd-device PATH
-w PATH, --winpe PATH
-d --debug Enable debug mode
-h --help Show this page
-M --use-mbr Use real MBR instead of GPT w/ Protective MBR
-F --force Bypass all confirmation messages. USE WITH EXTREME CAUTION!
-U --update Don't format device, just update
'''
LOG = logging.getLogger(__name__)
EXTRA_IMAGES_LIST = '/mnt/UFD/arch/extra_images.list'
MIB = 1024 ** 2
@ -61,6 +36,54 @@ UFD_LABEL = f'{KIT_NAME_SHORT}_UFD'
# Functions
def argparse_helper() -> dict[str, None|bool|str]:
"""Helper function to setup and return args, returns dict.
NOTE: A dict is used to match the legacy code.
"""
parser = argparse.ArgumentParser(
prog='build-ufd',
description=f'{KIT_NAME_FULL}: Build UFD',
)
parser.add_argument('-u', '--ufd-device', required=True)
parser.add_argument('-l', '--linux', required=False)
parser.add_argument('-e', '--extra-dir', required=False)
parser.add_argument('-k', '--main-kit', required=False)
parser.add_argument('-w', '--winpe', required=False)
parser.add_argument(
'-d', '--debug', action='store_true',
help='Enable debug mode',
)
parser.add_argument(
'-M', '--use-mbr', action='store_true',
help='Use real MBR instead of GPT w/ Protective MBR',
)
parser.add_argument(
'-F', '--force', action='store_true',
help='Bypass all confirmation messages. USE WITH EXTREME CAUTION!',
)
parser.add_argument(
'-U', '--update', action='store_true',
help="Don't format device, just update",
)
parser.add_argument(
'EXTRA_IMAGES', nargs='*',
)
args = parser.parse_args()
legacy_args = {
'--debug': args.debug,
'--extra-dir': args.extra_dir,
'--force': args.force,
'--linux': args.linux,
'--main-kit': args.main_kit,
'--ufd-device': args.ufd_device,
'--update': args.update,
'--use-mbr': args.use_mbr,
'--winpe': args.winpe,
'EXTRA_IMAGES': args.EXTRA_IMAGES,
}
return legacy_args
def apply_image(part_path, image_path, hide_macos_boot=True) -> None:
"""Apply raw image to dev_path using dd."""
cmd = [
@ -93,7 +116,12 @@ def apply_image(part_path, image_path, hide_macos_boot=True) -> None:
def build_ufd() -> None:
"""Build UFD using selected sources."""
args = docopt(DOCSTRING)
try:
args = argparse_helper()
except SystemExit:
print('')
ui.pause('Press Enter to exit...')
raise
if args['--debug']:
log.enable_debug_mode()
if args['--update'] and args['EXTRA_IMAGES']:
@ -147,6 +175,13 @@ def build_ufd() -> None:
dev_path=ufd_dev,
label=UFD_LABEL,
)
try_print.run(
message='Hiding extra partition(s)...',
function=hide_extra_partitions,
dev_path=ufd_dev,
num_parts=len(extra_images),
use_mbr=args['--use-mbr'],
)
ufd_dev_first_partition = find_first_partition(ufd_dev)
# Mount UFD
@ -350,7 +385,7 @@ def create_table(dev_path, use_mbr=False, images=None) -> None:
for part, real in zip(part_sizes, images):
end = start + real
cmd.append(
f'mkpart primary {"fat32" if start==MIB else "hfs+"} {start}B {end-1}B',
f'mkpart primary "fat32" {start}B {end-1}B',
)
start += part
@ -436,6 +471,17 @@ def hide_items(ufd_dev_first_partition, items) -> None:
run_program(cmd, shell=True, check=False)
def hide_extra_partitions(dev_path, num_parts, use_mbr) -> None:
if use_mbr:
# Bail early
return
for part_id in range(num_parts):
part_id += 2 # Extra partitions start at 2
cmd = ['sfdisk', '--part-attrs', dev_path, str(part_id), 'RequiredPartition,62,63']
run_program(cmd, check=False)
def install_syslinux_to_dev(ufd_dev, use_mbr) -> None:
"""Install Syslinux to UFD (dev)."""
cmd = [

View file

@ -6,7 +6,6 @@ import logging
import os
import pathlib
import platform
import re
from contextlib import suppress
from typing import Any
@ -74,9 +73,6 @@ KNOWN_HIVE_NAMES = {
RAM_OK = 5.5 * 1024**3 # ~6 GiB assuming a bit of shared memory
RAM_WARNING = 3.5 * 1024**3 # ~4 GiB assuming a bit of shared memory
REG_MSISERVER = r'HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\MSIServer'
REGEX_4K_ALIGNMENT = re.compile(
r'^(?P<description>.*?)\s+(?P<size>\d+)\s+(?P<offset>\d+)',
)
SLMGR = pathlib.Path(f'{os.environ.get("SYSTEMROOT")}/System32/slmgr.vbs')
SYSTEMDRIVE = os.environ.get('SYSTEMDRIVE')
@ -169,29 +165,23 @@ def set_timezone(zone) -> None:
# Info Functions
def check_4k_alignment(show_alert=False) -> list[str]:
"""Check if all partitions are 4K aligned, returns list."""
cmd = ['WMIC', 'partition', 'get', 'Caption,Size,StartingOffset']
script_path = find_kit_dir('Scripts').joinpath('check_partition_alignment.ps1')
cmd = ['PowerShell', '-ExecutionPolicy', 'Bypass', '-File', script_path]
json_data = get_json_from_command(cmd)
report = []
show_alert = False
# Check offsets
proc = run_program(cmd)
for line in proc.stdout.splitlines():
line = line.strip()
if not line or not line.startswith('Disk'):
continue
match = REGEX_4K_ALIGNMENT.match(line)
if not match:
LOG.error('Failed to parse partition info for: %s', line)
continue
if int(match.group('offset')) % 4096 != 0:
report.append(
ansi.color_string(
f'{match.group("description")}'
f' ({bytes_to_string(match.group("size"), decimals=1)})'
,
'RED'
)
)
for part in json_data:
if part['StartingOffset'] % 4096 != 0:
report.append(
ansi.color_string(
f'{part["Name"]}'
f' ({bytes_to_string(part["Size"], decimals=1)})'
,
'RED'
)
)
# Show alert
if show_alert:
@ -203,6 +193,7 @@ def check_4k_alignment(show_alert=False) -> list[str]:
0,
ansi.color_string('One or more partitions not 4K aligned', 'YELLOW'),
)
report.sort()
return report
@ -224,45 +215,52 @@ def export_bitlocker_info() -> None:
_f.write(f'{proc.stdout}\n\n')
def get_installed_antivirus() -> list[str]:
"""Get list of installed antivirus programs, returns list."""
cmd = [
'WMIC', r'/namespace:\\root\SecurityCenter2',
'path', 'AntivirusProduct',
'get', 'displayName', '/value',
]
products = []
report = []
def get_installed_antivirus() -> dict[str, dict]:
"""Get installed antivirus products and their status, returns dict."""
script_path = find_kit_dir('Scripts').joinpath('check_av.ps1')
cmd = ['PowerShell', '-ExecutionPolicy', 'Bypass', '-File', script_path]
json_data = get_json_from_command(cmd)
products = {}
# Get list of products
proc = run_program(cmd)
for line in proc.stdout.splitlines():
line = line.strip()
if '=' in line:
products.append(line.split('=')[1])
# Check state and build dict
for p in json_data:
name = p['displayName']
state = p['productState']
enabled = ((state>>8) & 0x11) in (0x10, 0x11) # middle two hex digits
outdated = (state & 0x11) != 0x00 # last two hex digits
products[name] = {
'Enabled': enabled,
'Outdated': outdated,
'State': state,
}
return products
def list_installed_antivirus() -> list[str]:
"""Get list of installed antivirus programs, returns list."""
products = get_installed_antivirus()
products_active = []
products_inactive = []
# Check product(s) status
for product in sorted(products):
cmd = [
'WMIC', r'/namespace:\\root\SecurityCenter2',
'path', 'AntivirusProduct',
'where', f'displayName="{product}"',
'get', 'productState', '/value',
]
proc = run_program(cmd)
state = proc.stdout.split('=')[1]
state = hex(int(state))
if str(state)[3:5] not in ['10', '11']:
report.append(ansi.color_string(f'[Disabled] {product}', 'YELLOW'))
for name, details in products.items():
if details['Enabled']:
if details['Outdated']:
products_active.append(ansi.color_string(f'{name} [OUTDATED]', 'YELLOW'))
else:
products_active.append(name)
else:
report.append(product)
# Disabled
products_inactive.append(ansi.color_string(f'[Disabled] {name}', 'YELLOW'))
# Final check
if not report:
report.append(ansi.color_string('No products detected', 'RED'))
if not (products_active or products_inactive):
products_inactive.append(ansi.color_string('No products detected', 'RED'))
# Done
return report
products_active.sort()
products_inactive.sort()
return products_active + products_inactive
def get_installed_ram(as_list=False, raise_exceptions=False) -> list | str:

View file

@ -19,6 +19,7 @@ from wk.cfg.setup import (
REG_WINDOWS_EXPLORER,
REG_OPEN_SHELL_SETTINGS,
REG_OPEN_SHELL_LOW_POWER_IDLE,
REG_WINDOWS_BSOD_MINIDUMPS,
UBLOCK_ORIGIN_URLS,
)
from wk.exe import kill_procs, run_program, popen_program
@ -36,7 +37,6 @@ from wk.os.win import (
OS_VERSION,
activate_with_bios,
check_4k_alignment,
get_installed_antivirus,
get_installed_ram,
get_os_activation,
get_os_name,
@ -45,6 +45,7 @@ from wk.os.win import (
get_volume_usage,
is_activated,
is_secure_boot_enabled,
list_installed_antivirus,
reg_set_value,
reg_write_settings,
stop_service,
@ -520,7 +521,7 @@ def auto_show_4k_alignment_check() -> None:
def auto_show_installed_antivirus() -> None:
"""Display installed antivirus."""
TRY_PRINT.run('Virus Protection...', get_installed_antivirus)
TRY_PRINT.run('Virus Protection...', list_installed_antivirus)
def auto_show_installed_ram() -> None:
@ -629,14 +630,14 @@ def disable_chrome_notifications() -> None:
def disable_password_expiration() -> None:
"""Disable password expiration for all users."""
cmd = ['wmic', 'UserAccount', 'set', 'PasswordExpires=False']
script_path = find_kit_dir('Scripts').joinpath('disable_password_expiration.ps1')
cmd = ['PowerShell', '-ExecutionPolicy', 'Bypass', '-File', script_path]
run_program(cmd)
def enable_bsod_minidumps() -> None:
"""Enable saving minidumps during BSoDs."""
cmd = ['wmic', 'RECOVEROS', 'set', 'DebugInfoType', '=', '3']
run_program(cmd)
reg_write_settings(REG_WINDOWS_BSOD_MINIDUMPS)
def enable_ublock_origin() -> None:

View file

@ -81,7 +81,8 @@ function copy_live_env() {
rsync -aI "$ROOT_DIR/scripts/" "$PROFILE_DIR/airootfs/usr/local/bin/"
echo "Copying WizardKit UFD files..."
rsync -aI "$ROOT_DIR/setup/ufd/" "$PROFILE_DIR/airootfs/usr/share/WizardKit/"
rsync -aI --exclude="macOS-boot-icon.tar" "$ROOT_DIR/setup/ufd/" "$PROFILE_DIR/airootfs/usr/share/WizardKit/"
tar xaf "$ROOT_DIR/setup/ufd/macOS-boot-icon.tar" -C "$PROFILE_DIR/airootfs/usr/share/WizardKit"
cp "$ROOT_DIR/images/rEFInd.png" "$PROFILE_DIR/airootfs/usr/share/WizardKit/EFI/Boot/rEFInd.png"
cp "$ROOT_DIR/images/Syslinux.png" "$PROFILE_DIR/airootfs/usr/share/WizardKit/syslinux/syslinux.png"

View file

@ -6,10 +6,6 @@
setlocal EnableDelayedExpansion
title WizardKit: Build Tool
call :CheckFlags %*
rem TODO: Remove warning
echo "Windows PE build is currently under development"
echo " Proceeding will likely result in errors so be warned"
pause
call :CheckElevation || goto Exit
call :FindKitsRoot || goto ErrorKitNotFound
@ -19,14 +15,8 @@ set "dandi_set_env=%adk_root%\Deployment Tools\DandISetEnv.bat"
if not exist "%dandi_set_env%" (goto ErrorKitNotFound)
call "%dandi_set_env%" || goto ErrorUnknown
:EnsureCRLF
rem Rewrite main.py using PowerShell to have CRLF/`r`n lineendings
set "script=%~dp0\.bin\Scripts\borrowed\set-eol.ps1"
set "main=%~dp0\.bin\Scripts\settings\main.py"
powershell -executionpolicy bypass -noprofile -file %script% -lineEnding win -file %main% || goto ErrorUnknown
:Launch
set "script=%~dp0\.bin\Scripts\build_pe.ps1"
set "script=%~dp0\pe\build_pe.ps1"
powershell -executionpolicy bypass -noprofile -file %script% || goto ErrorUnknown
goto Exit

View file

@ -112,7 +112,6 @@ picom
pipes.sh
pv
python
python-docopt
python-prompt_toolkit
python-psutil
python-pytz

View file

@ -101,7 +101,7 @@ elif [[ "${OS_VERSION:0:5}" == "10.15" ]]; then
fi
# Python3 Packages
pip3 install docopt mysql-connector NumPy psutil pylint pytz requests
pip3 install mysql-connector NumPy psutil pylint pytz requests
git clone https://github.com/yuyichao/gnuplot-py gnuplot-py
cd gnuplot-py

View file

@ -1,3 +1,3 @@
# WizardKit: WinPE #
_Under construction_
Requires ADK for Windows 10, version 2004

View file

@ -1,6 +0,0 @@
[LaunchApp]
[LaunchApps]
wpeinit
wpeutil updatebootinfo
cd /d "%SystemDrive%\.bin"
"%SystemDrive%\.bin\ConEmu\ConEmu.exe", /cmd cmd /k cd "%SystemDrive%\.bin" & python "%SystemDrive%\.bin\Scripts\winpe_root_menu.py"

View file

@ -1,2 +0,0 @@
@echo off
python "%SystemDrive%\.bin\Scripts\winpe_root_menu.py"

View file

@ -1,56 +1,56 @@
<?xml version="1.0" encoding="Windows-1252" ?>
<NotepadPlus>
<FindHistory nbMaxFindHistoryPath="10" nbMaxFindHistoryFilter="10" nbMaxFindHistoryFind="10" nbMaxFindHistoryReplace="10" matchWord="no" matchCase="no" wrap="yes" directionDown="yes" fifRecuisive="yes" fifInHiddenFolder="no" dlgAlwaysVisible="no" fifFilterFollowsDoc="no" fifFolderFollowsDoc="no" searchMode="0" transparencyMode="1" transparency="150" dotMatchesNewline="no" />
<History nbMaxFile="10" inSubMenu="no" customLength="-1" />
<GUIConfigs>
<GUIConfig name="ToolBar" visible="no">standard</GUIConfig>
<GUIConfig name="StatusBar">hide</GUIConfig>
<GUIConfig name="TabBar" dragAndDrop="yes" drawTopBar="yes" drawInactiveTab="yes" reduce="yes" closeButton="yes" doubleClick2Close="no" vertical="no" multiLine="no" hide="no" quitOnEmpty="no" />
<GUIConfig name="ScintillaViewsSplitter">vertical</GUIConfig>
<GUIConfig name="UserDefineDlg" position="undocked">hide</GUIConfig>
<GUIConfig name="TabSetting" replaceBySpace="yes" size="4" />
<GUIConfig name="noUpdate" intervalDays="15" nextUpdateDate="20080426">no</GUIConfig>
<GUIConfig name="Auto-detection">yes</GUIConfig>
<GUIConfig name="CheckHistoryFiles">no</GUIConfig>
<GUIConfig name="TrayIcon">no</GUIConfig>
<GUIConfig name="MaitainIndent">yes</GUIConfig>
<GUIConfig name="TagsMatchHighLight" TagAttrHighLight="yes" HighLightNonHtmlZone="no">yes</GUIConfig>
<GUIConfig name="RememberLastSession">no</GUIConfig>
<GUIConfig name="DetectEncoding">yes</GUIConfig>
<GUIConfig name="NewDocDefaultSettings" format="0" encoding="4" lang="0" codepage="-1" openAnsiAsUTF8="yes" />
<GUIConfig name="langsExcluded" gr0="0" gr1="0" gr2="0" gr3="0" gr4="0" gr5="0" gr6="0" gr7="0" langMenuCompact="yes" />
<GUIConfig name="Print" lineNumber="yes" printOption="3" headerLeft="" headerMiddle="" headerRight="" footerLeft="" footerMiddle="" footerRight="" headerFontName="" headerFontStyle="0" headerFontSize="0" footerFontName="" footerFontStyle="0" footerFontSize="0" margeLeft="0" margeRight="0" margeTop="0" margeBottom="0" />
<GUIConfig name="Backup" action="0" useCustumDir="no" dir="" isSnapshotMode="no" snapshotBackupTiming="7000" />
<GUIConfig name="TaskList">yes</GUIConfig>
<GUIConfig name="MRU">yes</GUIConfig>
<GUIConfig name="URL">2</GUIConfig>
<GUIConfig name="globalOverride" fg="no" bg="no" font="yes" fontSize="no" bold="no" italic="no" underline="no" />
<GUIConfig name="auto-completion" autoCAction="3" triggerFromNbChar="1" autoCIgnoreNumbers="yes" funcParams="yes" />
<GUIConfig name="auto-insert" parentheses="no" brackets="no" curlyBrackets="no" quotes="no" doubleQuotes="no" htmlXmlTag="no" />
<GUIConfig name="sessionExt"></GUIConfig>
<GUIConfig name="workspaceExt"></GUIConfig>
<GUIConfig name="MenuBar">hide</GUIConfig>
<GUIConfig name="Caret" width="1" blinkRate="600" />
<GUIConfig name="ScintillaGlobalSettings" enableMultiSelection="no" />
<GUIConfig name="openSaveDir" value="0" defaultDirPath="" />
<GUIConfig name="titleBar" short="no" />
<GUIConfig name="wordCharList" useDefault="yes" charsAdded="" />
<GUIConfig name="delimiterSelection" leftmostDelimiter="40" rightmostDelimiter="41" delimiterSelectionOnEntireDocument="no" />
<GUIConfig name="multiInst" setting="0" />
<GUIConfig name="MISC" fileSwitcherWithoutExtColumn="no" backSlashIsEscapeCharacterForSql="yes" newStyleSaveDlg="no" isFolderDroppedOpenFiles="no" />
<GUIConfig name="searchEngine" searchEngineChoice="1" searchEngineCustom="" />
<GUIConfig name="SmartHighLight" matchCase="no" wholeWordOnly="no" useFindSettings="no" onAnotherView="no">yes</GUIConfig>
<GUIConfig name="ScintillaPrimaryView" lineNumberMargin="show" bookMarkMargin="show" indentGuideLine="show" folderMarkStyle="box" lineWrapMethod="aligned" currentLineHilitingShow="show" scrollBeyondLastLine="no" disableAdvancedScrolling="no" wrapSymbolShow="hide" Wrap="no" borderEdge="yes" edge="no" edgeNbColumn="80" zoom="0" zoom2="0" whiteSpaceShow="hide" eolShow="hide" borderWidth="2" smoothFont="no" />
<GUIConfig name="DockingManager" leftWidth="200" rightWidth="200" topHeight="200" bottomHeight="200">
<ActiveTabs cont="0" activeTab="-1" />
<ActiveTabs cont="1" activeTab="-1" />
<ActiveTabs cont="2" activeTab="-1" />
<ActiveTabs cont="3" activeTab="-1" />
</GUIConfig>
</GUIConfigs>
<ProjectPanels>
<ProjectPanel id="0" workSpaceFile="" />
<ProjectPanel id="1" workSpaceFile="" />
<ProjectPanel id="2" workSpaceFile="" />
</ProjectPanels>
</NotepadPlus>
<?xml version="1.0" encoding="Windows-1252" ?>
<NotepadPlus>
<FindHistory nbMaxFindHistoryPath="10" nbMaxFindHistoryFilter="10" nbMaxFindHistoryFind="10" nbMaxFindHistoryReplace="10" matchWord="no" matchCase="no" wrap="yes" directionDown="yes" fifRecuisive="yes" fifInHiddenFolder="no" dlgAlwaysVisible="no" fifFilterFollowsDoc="no" fifFolderFollowsDoc="no" searchMode="0" transparencyMode="1" transparency="150" dotMatchesNewline="no" />
<History nbMaxFile="10" inSubMenu="no" customLength="-1" />
<GUIConfigs>
<GUIConfig name="ToolBar" visible="no">standard</GUIConfig>
<GUIConfig name="StatusBar">hide</GUIConfig>
<GUIConfig name="TabBar" dragAndDrop="yes" drawTopBar="yes" drawInactiveTab="yes" reduce="yes" closeButton="yes" doubleClick2Close="no" vertical="no" multiLine="no" hide="no" quitOnEmpty="no" />
<GUIConfig name="ScintillaViewsSplitter">vertical</GUIConfig>
<GUIConfig name="UserDefineDlg" position="undocked">hide</GUIConfig>
<GUIConfig name="TabSetting" replaceBySpace="yes" size="4" />
<GUIConfig name="noUpdate" intervalDays="15" nextUpdateDate="20080426">no</GUIConfig>
<GUIConfig name="Auto-detection">yes</GUIConfig>
<GUIConfig name="CheckHistoryFiles">no</GUIConfig>
<GUIConfig name="TrayIcon">no</GUIConfig>
<GUIConfig name="MaitainIndent">yes</GUIConfig>
<GUIConfig name="TagsMatchHighLight" TagAttrHighLight="yes" HighLightNonHtmlZone="no">yes</GUIConfig>
<GUIConfig name="RememberLastSession">no</GUIConfig>
<GUIConfig name="DetectEncoding">yes</GUIConfig>
<GUIConfig name="NewDocDefaultSettings" format="0" encoding="4" lang="0" codepage="-1" openAnsiAsUTF8="yes" />
<GUIConfig name="langsExcluded" gr0="0" gr1="0" gr2="0" gr3="0" gr4="0" gr5="0" gr6="0" gr7="0" langMenuCompact="yes" />
<GUIConfig name="Print" lineNumber="yes" printOption="3" headerLeft="" headerMiddle="" headerRight="" footerLeft="" footerMiddle="" footerRight="" headerFontName="" headerFontStyle="0" headerFontSize="0" footerFontName="" footerFontStyle="0" footerFontSize="0" margeLeft="0" margeRight="0" margeTop="0" margeBottom="0" />
<GUIConfig name="Backup" action="0" useCustumDir="no" dir="" isSnapshotMode="no" snapshotBackupTiming="7000" />
<GUIConfig name="TaskList">yes</GUIConfig>
<GUIConfig name="MRU">yes</GUIConfig>
<GUIConfig name="URL">2</GUIConfig>
<GUIConfig name="globalOverride" fg="no" bg="no" font="yes" fontSize="no" bold="no" italic="no" underline="no" />
<GUIConfig name="auto-completion" autoCAction="3" triggerFromNbChar="1" autoCIgnoreNumbers="yes" funcParams="yes" />
<GUIConfig name="auto-insert" parentheses="no" brackets="no" curlyBrackets="no" quotes="no" doubleQuotes="no" htmlXmlTag="no" />
<GUIConfig name="sessionExt"></GUIConfig>
<GUIConfig name="workspaceExt"></GUIConfig>
<GUIConfig name="MenuBar">hide</GUIConfig>
<GUIConfig name="Caret" width="1" blinkRate="600" />
<GUIConfig name="ScintillaGlobalSettings" enableMultiSelection="no" />
<GUIConfig name="openSaveDir" value="0" defaultDirPath="" />
<GUIConfig name="titleBar" short="no" />
<GUIConfig name="wordCharList" useDefault="yes" charsAdded="" />
<GUIConfig name="delimiterSelection" leftmostDelimiter="40" rightmostDelimiter="41" delimiterSelectionOnEntireDocument="no" />
<GUIConfig name="multiInst" setting="0" />
<GUIConfig name="MISC" fileSwitcherWithoutExtColumn="no" backSlashIsEscapeCharacterForSql="yes" newStyleSaveDlg="no" isFolderDroppedOpenFiles="no" />
<GUIConfig name="searchEngine" searchEngineChoice="1" searchEngineCustom="" />
<GUIConfig name="SmartHighLight" matchCase="no" wholeWordOnly="no" useFindSettings="no" onAnotherView="no">yes</GUIConfig>
<GUIConfig name="ScintillaPrimaryView" lineNumberMargin="show" bookMarkMargin="show" indentGuideLine="show" folderMarkStyle="box" lineWrapMethod="aligned" currentLineHilitingShow="show" scrollBeyondLastLine="no" disableAdvancedScrolling="no" wrapSymbolShow="hide" Wrap="no" borderEdge="yes" edge="no" edgeNbColumn="80" zoom="0" zoom2="0" whiteSpaceShow="hide" eolShow="hide" borderWidth="2" smoothFont="no" />
<GUIConfig name="DockingManager" leftWidth="200" rightWidth="200" topHeight="200" bottomHeight="200">
<ActiveTabs cont="0" activeTab="-1" />
<ActiveTabs cont="1" activeTab="-1" />
<ActiveTabs cont="2" activeTab="-1" />
<ActiveTabs cont="3" activeTab="-1" />
</GUIConfig>
</GUIConfigs>
<ProjectPanels>
<ProjectPanel id="0" workSpaceFile="" />
<ProjectPanel id="1" workSpaceFile="" />
<ProjectPanel id="2" workSpaceFile="" />
</ProjectPanels>
</NotepadPlus>

View file

@ -0,0 +1,6 @@
[LaunchApp]
[LaunchApps]
wpeinit
wpeutil InitializeNetwork
wpeutil UpdateBootInfo
"%SystemDrive%\Program Files\ConEmu\ConEmu64.exe", /cmd cmd

View file

@ -0,0 +1,5 @@
notepad="%ProgramFiles%\NotepadPlusPlus\notepad++.exe" $*
poweroff=wpeutil shutdown
reboot=wpeutil reboot
restart=wpeutil reboot
shutdown=wpeutil shutdown

View file

@ -1,20 +0,0 @@
[CPU-Z]
VERSION=1.7.7.0
TextFontName=
TextFontSize=14
TextFontColor=000080
LabelFontName=
LabelFontSize=14
ACPI=1
PCI=1
MaxPCIBus=256
DMI=1
Sensor=1
SMBus=1
Display=1
UseDisplayAPI=1
BusClock=1
Chipset=1
SPD=1
XOC=0
CheckUpdates=0

View file

@ -1,671 +0,0 @@
[Benchmark_CPU]
Intel Pentium-100=707
Intel Pentium-120/Notebook=835
Intel Pentium-166/QDI=1380
Cyrix 6x86MX-PR300=1411
AMD-K6-166/QDI=1482
Intel Pentium MMX-200=1484
Cyrix MII-PR333=1518
Intel Mobile Pentium MMX-233=1642
Intel Pentium Pro-166 Dual CPU=1679
AMD-K6-200/DTK=1777
AMD-K6-200/QDI=1778
Intel Pentium Pro-200=1944
AMD-K6-233/DTK=2067
Intel P2-233/Siemens=2350
VIA Cyrix III 533/133=2362
Intel Celeron-266/BXmaster=2586
Intel P2-266/Siemens=2603
AMD-K6-2-300/PCChips M577=2655
Intel Celeron 300=2883
Intel Celeron-300/PCChips=2922
AMD-K6-2-350/FIC=3092
AMD-K6-III-400=3524
AMD-K6-III-400/FIC VA-503A=3557
Intel Celeron-366/BXmaster=3718
Intel P2-400/Siemens=3886
Intel Celeron-400/BXmaster=3890
AMD-K6-2-450/FIC=3964
AMD-K6-III-448/FIC VA-503A=3975
AMD-K6-III-450=3978
Intel Mobile P2-400/Scenic=4047
Intel Celeron-413/BXmaster=4175
Intel Celeron-433=4219
Intel P3-450/CC820=4363
Intel P3-450/Siemens=4372
Intel Celeron-450=4555
Intel Celeron-300A@467=4686
Intel Celeron-466/BXmaster=4789
Intel P3-500/GA-6BXDS=5021
Intel Pentium III Xeon-550=5299
Intel Celeron-525/BXmaster=5314
Intel P3-550/Siemens=5543
Intel Celeron-550/BXmaster=5579
Intel Celeron-575/BXmaster=5845
Intel Celeron-616/BXmaster=5999
Intel P3-617/GA-BX2000=6241
AMD Athlon-600/AMD-750=6303
AMD Duron-600/KT133=6436
Intel P3-650/BX=6497
AMD Athlon-650/KX133=6749
AMD Duron-650/KT133=6971
Intel P3-700/BX=7013
AMD Athlon-700/KX133=7185
AMD Duron-700/KT133=7507
Intel Celeron-815/BXmaster=7985
AMD Athlon-750/KT133=8085
AMD Athlon-800/AMD-750=8286
AMD Duron-800/KT133=8580
Intel P3-650@870/BX=8675
AMD Duron-850/KT133=9120
Intel P3-650@917/BX=9175
AMD Duron-900/KT133=9654
AMD Duron-928 (9x103)=9952
Intel Celeron-566@1010=10115
VIA Antaur-1000=6108
VIA C3-1333=7601
AMD Duron-950/KT133=10190
AMD Athlon-1000/KT133=10734
AMD Athlon-1200/KT133=12949
AMD Athlon XP 1500+/KT133=14297
AMD Athlon XP 2000+/KT133A=17691
AMD Athlon XP 2200+/KT133A=19490
AMD Athlon XP-M 2500+/KM400=19590
AMD Athlon XP-M 3000+/SiS748=23391
Intel P3-1000/i815=10381
Intel P4-1600=6636
Intel P4-1800=7445
Intel P4-2000=8272
Intel P4-2500=11051
Intel Pentium-M ULV-1000=10515
Intel Pentium-M-1300=13590
Intel Pentium-M-1600=16856
Intel Pentium-M 735=16958
Intel Pentium-M 755=20008
Intel Pentium-M 770=21163
Intel P4-2800(noHT)/i875P=12399
Intel P4-3066(noHT)/i845PE=13479
Intel P4-3000E(noHT)/i915P=22136
Intel P4-3000 530 (HT)=34013
Intel P4-3200E(noHT)/i875P=23446
Intel P4-3600E(noHT)/i925X=26424
Intel Xeon-3800(HT)=55028
AMD Athlon64 3200+=23814
AMD Athlon64 3800+=28731
AMD Athlon64 FX-53=28727
AMD Opteron 248=25920
AMD Turion64 ML-34+=18520
AMD Turion64 X2 TL-60=47697
AMD Athlon 64 X2 4400+=52867
Intel Core Duo T2600 (1core)=20293
Intel Core Duo T2600 (2core)=40849
Intel Core 2 Duo E6700=51765
Intel Core 2 Duo T7400=53238
Transmeta Crusoe TM5800-1000=6382
2xIntel Xeon 5150/5000P=131832
4xIntel Xeon MP 7040=180052
Intel Core 2 Extreme QX6700=129908
AMD Phenom 9500=103687
Intel Atom 230=15438
Intel Core i5-520M=94834
Intel Core i7-860=180329
Intel Core i7-820QM=123279
Intel Core i7-980X=347501
Intel Core i5-2520M=111448
Intel Core i7-3820=265424
[Benchmark_FPU]
Intel Pentium-100=1109
VIA Cyrix III 533/133=1327
Intel Pentium 120/Notebook=1350
Intel Pentium Pro-166 Dual CPU=1663
Intel Pentium Pro-200=1934
Cyrix 6x86MX-PR300=2304
Intel P2-233/Siemens=2323
AMD-K6-166/QDI=2533
Cyrix MII-PR333=2585
Intel Celeron-266/BXmaster=2630
Intel Mobile Pentium MMX-233=2647
Intel P2-266/Siemens=2662
Intel Celeron-300=2862
AMD-K6-200/DTK=2999
AMD-K6-200/QDI=3041
AMD-K6-233/DTK=3492
Intel Celeron-366/BXmaster=3650
Intel P2-400/Siemens=3968
Intel Celeron-400/BXmaster=3972
Intel Mobile P2-400/Scenic=3973
Intel Celeron-413/BXmaster=4097
Intel Celeron-433=4304
Intel P3-450/CC820=4444
Intel P3-450/Siemens=4452
Intel Celeron-450=4472
Intel Celeron-300A@467=4599
AMD-K6-2-300/PCChips M577=4605
Intel Celeron-466/BXmaster=4628
Intel P3-500/GA-6BXDS=4958
Intel Celeron-525/BXmaster=5215
AMD-K6-2-350/FIC=5368
Intel Pentium III Xeon-550=5417
Intel P3-550/Siemens=5440
Intel Celeron-550/BXmaster=5477
Intel Celeron-575/BXmaster=5738
Intel Celeron-616/BXmaster=5897
Intel P3-617/GA-BX2000=6114
AMD-K6-III-400/FIC VA-503A=6166
AMD-K6-III-400=6169
Intel P3-650/BX=6446
AMD-K6-2-450/FIC=6876
AMD-K6-III-448/FIC VA-503A=6893
AMD-K6-III-450=6895
Intel P3-700/BX=6942
Intel Celeron-815/BXmaster=7799
Intel P3-650@870/BX=8614
Intel P3-650@917/BX=9080
VIA C3-1333=3160
AMD Duron-600/KT133=9132
AMD Athlon-600/AMD-750=9231
AMD Athlon-650/KX133=9888
Intel Celeron-566@1010=9977
AMD Athlon-700/KX133=10527
AMD Athlon-750/KT133=11457
AMD Athlon-800/AMD-750=12149
AMD Duron-850/KT133=12954
AMD Duron-900/KT133=13712
AMD Duron-928 (9x103)=14150
AMD Duron-950/KT133=14479
AMD Athlon-1000/KT133=15252
AMD Athlon-1200/KT133=18378
AMD Athlon XP 1500+/KT133=20757
AMD Athlon XP 1800+=23375
AMD Athlon XP 2000+/KT133A=25693
AMD Athlon XP 2200+/KT133A=28296
AMD Athlon XP-M 2500+/KM400=28877
AMD Athlon XP-M 3000+/SiS748=34104
Intel P3-1000/i815=9813
Intel P4-1600=3282
Intel P4-1800=3833
Intel P4-2000=4256
Intel P4-2500=6020
Intel Pentium-M ULV-1000=8547
Intel Pentium-M-1300=11089
Intel Pentium-M-1600=13614
Intel Pentium-M 735=14211
Intel Pentium-M 755=16772
Intel Pentium-M 770=17807
Intel P4-2800(noHT)/i875P=6799
Intel P4-3066(noHT)/i845PE=7396
Intel P4-3000 530 (HT)=9220
Intel P4-3200E(noHT)/i875P=6578
Intel P4-3600E(noHT)/i925X=8163
Intel Xeon-3800(HT)=17241
AMD Athlon64 3200+=31194
AMD Athlon64 3800+=37379
AMD Athlon64 FX-53=37426
AMD Opteron 248=34115
AMD Turion64 ML-34+=28056
AMD Turion64 X2 TL-60=62143
AMD Athlon 64 X2 4400+=68974
Intel Core Duo T2600 (1core)=16967
Intel Core Duo T2600 (2core)=34039
Intel Core 2 Duo E6600=36031
Intel Core 2 Duo E6700=40075
Intel Core 2 Duo T7400=32659
Transmeta Crusoe TM5800-1000=4251
2xIntel Xeon 5150/5000P=80725
4xIntel Xeon MP 7040=54379
Intel Core 2 Extreme QX6700=80338
AMD Phenom 9500=133430
Intel Atom 230=10769
Intel Core i5-520M=60634
Intel Core i7-860=131820
Intel Core i7-820QM=90751
Intel Core i7-980X=215620
Intel Core i5-2520M=55354
Intel Core i7-3820=130252
[Benchmark_MMX]
AMD-K6-166/QDI=909
AMD-K6-200/QDI=1070
Intel P2-266/440LX=1339
VIA Cyrix III 533/133=1815
Intel Pentium MMX-200=2041
Intel Mobile Pentium MMX-233=2363
Intel P2-233/440BX=2390
Intel Celeron-300=2931
Intel Celeron-366=3742
Intel Celeron-450=4602
Intel Celeron-300A@467=4737
Intel P3-500/GA-6BXDS=5009
AMD Duron-600/KT133=5454
Intel P3-550/Siemens=5513
AMD Athlon-650/KX133=5906
AMD Athlon-700/Abit KA7=6356
Intel P3-650/BX=6490
AMD Duron-750/KT133=6823
AMD Athlon-750/KT133=6846
Intel P3-700/BX=7025
AMD Duron-800/KT133=7277
AMD Duron-850/KT133=7738
AMD Duron-900/KT133=8192
AMD Duron-928 (9x103)=8448
AMD Duron-950/KT133=8645
Intel P3-650@870/BX=8706
AMD Athlon-1000/KT133=9110
Intel P3-650@917/BX=9173
Intel Celeron-566@1010=10080
VIA C3-1333=6063
AMD Athlon-1200/KT133=10998
AMD Athlon XP 1500+/KT133=12125
AMD Athlon XP 1800+=13642
AMD Athlon XP 2000+/KT133A=15013
AMD Athlon XP 2200+/KT133A=16516
AMD Athlon XP-M 2500+/KM400=16858
AMD Athlon XP-M 3000+/SiS748=20040
Intel P3-1000=9903
Intel P4-1600=14468
Intel P4-1800=16319
Intel P4-2000=18140
Intel P4-2500=22681
Intel Pentium-M ULV-1000=9937
Intel Pentium-M-1300=12865
Intel Pentium-M-1600=15835
Intel Pentium-M 735=16839
Intel Pentium-M 755=19869
Intel Pentium-M 770=21149
Intel P4-2800(noHT)/i875P=24478
Intel P4-3066(noHT)/i845PE=26437
Intel P4-3000 530 (HT)=27352
Intel P4-3200E(noHT)/i875P=22592
Intel P4-3600E(noHT)/i925X=25314
Intel Xeon-3800(HT)=53268
AMD Athlon64 3200+=18228
AMD Athlon64 3800+=21859
AMD Athlon64 FX-53=21856
AMD Opteron 248=19926
AMD Turion64 ML-34+=16403
AMD Turion64 X2 TL-60=36363
AMD Athlon 64 X2 4400+=40282
Intel Core Duo T2600 (1core)=21423
Intel Core Duo T2600 (2core)=42912
Intel Core 2 Duo E6600=74154
Intel Core 2 Duo E6700=82312
Intel Core 2 Duo T7400=67321
Transmeta Crusoe TM5800-1000=5272
2xIntel Xeon 5150/5000P=51186
4xIntel Xeon MP 7040=83086
Intel Core 2 Extreme QX6700=165067
AMD Phenom 9500=80202
Intel Atom 230=14545
Intel Core i5-520M=80822
Intel Core i7-860=171336
Intel Core i7-820QM=115063
Intel Core i7-980X=261051
Intel Core i5-2520M=81444
Intel Core i7-3820=160178
[Benchmark_Memory]
Intel Pentium-100/FPM=69
Intel Pentium Pro-166 Dual CPU=78
AMD-K6-166/QDI/EDO=85
Intel Pentium MMX-200/EDO=92
AMD-K6-200/QDI/EDO=93
Intel Pentium MMX-233/PC66=101
Intel P2-233/440BX/PC66=111
VIA Cyrix III 533/133=114
Intel P2-266/440BX/PC66=117
AMD-K6-III-400=135
Intel Celeron-366/PC66=163
AMD Duron-600/KT133=173
AMD Athlon-700/KX133/PC133=202
AMD Athlon-650/KX133=205
Intel P3-500/GA-6BXDS/PC100=209
Intel P3-550/Siemens/PC100=215
Intel Celeron-300A@467/PC66=209
Intel Celeron-300/PC66=146
Intel P3-650/BX/PC100=238
Intel P3-700/BX/PC100=211
AMD Athlon-750/KT133/PC133=214
AMD Duron-750/KT133=263
Intel Celeron-566@1010=273
VIA C3-1333/CN400=223
AMD Duron-950/KT133=275
AMD Duron-928 (9x103)/KT133=292
AMD Duron-1100/SiS745/DDR333=477
AMD Athlon XP-M 2500+/DDR333=548
Intel P3-650@917/FSB140=310
Intel P3-1000/PC133=218
Intel P4-1600/i850=1115
Intel P4-2000/i850/PC800=1245
Intel P4-1800/i845G/DDR266=867
Intel P4-2500/i845/DDR266=757
Intel Pentium-M-1600/DDR266=830
Intel Pentium-M 735/855PM/DDR400=971
Intel P4-3066/i845PE/DDR266=1028
Intel P4-2800/i875P/2Ch/DDR400=2056
Intel P4-3200E/i875P/2Ch/DDR400=2342
Intel P4-3600E/i915P/DDR2-533=2556
Intel P4-3600E/i925X/DDR2-533=2844
Intel Xeon-3800/E7525/DDR2-400=1635
AMD Athlon64 3200+/1Ch/DDR400=1266
AMD Athlon64 3800+/2Ch/DDR400=2375
AMD Athlon64 FX-53/2Ch/DDR400=2166
AMD Opteron 248/DDR266=947
AMD Turion64 ML-34+=1071
Intel Core 2 Duo E6700/DDR2-800=2894
Transmeta Crusoe TM5800-1000=337
2xIntel Xeon 5150/5000P/DDR2-667F=2919
4xIntel Xeon MP 7040=1721
AMD Phenom 9500=1795
Intel Atom 230/945/DDR2-800=1682
Intel Core i5-520M=5235
Intel Core i7-860/DDR3-667/2CH=6506
Intel Core i7-820QM=5424
Intel Core i7-980X=9343
Intel Core i7-3820/DDR3-1600/4CH=13366
[Benchmark_Disk_ReadBurst]
Fujitsu MPB3043ATU E/PIO=4.03
Seagate ST38410A/PIO=4.33
Maxtor 91021U2/PIO=4.61
Maxtor 92041U4/PIO=4.82
Quantum Fireball_TM2110S300X=6.83
SEAGATE ST51080N=7.92
Seagate ST31277A=8,37
IBM DCAS-32160 S65A=8.65
QUANTUM FIREBALL ST3.2A/PIO=14.74
Seagate ST39102LW Cheetah=30.05
IBM DJNA-370910/UDMA66=15.27
Seagate ST34321A/UDMA33=21.03
Seagate ST38421A=23.82
Seagate ST34310A=23.88
QUANTUM FIREBALL SE2.1A=26.43
Maxtor 91021U2/UDMA33=29.13
Maxtor 54098U8/UDMA33=29.5
IBM DTTA-350430=29.7
IBM-DPTA-371360=29.86
Seagate ST320420A=47.3
IBM-DJNA-371350=27.87
IBM-DTLA-307030/ATA100=82.22
SEAGATE Cheetah X15/RAID=137.08
IBM Deskstar 60GXP/ATA100=81.98
MAXTOR 4K020H1/ATA100=84.58
Seagate ST317221A/UDMA66=42.03
Maxtor 6E040L0=79.36
Seagate ST380021A/ATA100=73.11
HITACHI DK23EA-40=80.04
WDC WD800JB/ATA100=85.71
TOSHIBA MK4019GAX=83.60
Maxtor MaxLine III SATA+NCQ=119.96
ST312002 6AS=106.61
Maxtor Atlas 10K5 73SCA=145.86
WDC WD3200YS-01PGB0=167.33
Hitachi HTE726040M9AT00=84.61
Seagate ST3160827AS=120.88
WDC WD5000AADS-00S9B0=122.87
Hitachi HTS545032B9A=161.10
Seagate ST1000DM003-9YN1=282.43
[Benchmark_Disk_ReadRandom]
Hitachi HTE726040M9AT00=22.82
Maxtor Atlas 10K5 73SCA=31.61
Seagate ST3160827AS=32.26
FUJITSU MHV2080BH=17.79
TOSHIBA MK8034GSX=18.12
ST916082 1AS=22.27
WDC WD5000AADS-00S9B0=24.58
Hitachi HTS545032B9A=24.72
Seagate ST1000DM003-9YN1=37.09
[Benchmark_Disk_RandomAccess]
SEAGATE ST51080N=20.96
Quantum Fireball_TM2110S300X=20.74
Seagate ST34321A/UDMA33=17.21
Seagate ST38410A/PIO=17.17
Seagate ST31277A=16.75
Fujitsu MPB3043ATU E=16.18
IBM DTTA-350430=16.5
IBM DCAS-32160 S65A=15.95
Maxtor 92041U4/PIO=15.81
Seagate ST34310A=15.56
Maxtor 91021U2/PIO=15.66
Seagate ST38421A=15.71
QUANTUM FIREBALL ST3.2A=15.50
QUANTUM FIREBALL SE2.1A=14.94
Maxtor 54098U8/UDMA33=13.77
Seagate ST320420A=12.57
IBM DJNA-370910/UDMA66=12.10
Seagate ST39102LW Cheetah=8.78
IBM-DPTA-371360=13.37
IBM-DJNA-371350=13.38
IBM-DTLA-307030/ATA100=12.44
IBM-DTLA-307030/ATA100+AAM=22.34
SEAGATE Cheetah X15/RAID=5.65
IBM Deskstar 60GXP=12.70
MAXTOR 4K020H1/ATA100=19.12
Seagate ST317221A/UDMA66=16.60
Maxtor 6E040L0=14.52
Seagate ST380021A/ATA100=14.58
HITACHI DK23EA-40=19.40
WDC WD800JB/ATA100=13.61
TOSHIBA MK4019GAX=18.61
Maxtor MaxLine III SATA+NCQ=15.82
ST312002 6AS=12.51
Maxtor Atlas 10K5 73SCA=10.16
WDC WD3200YS-01PGB0=13.16
Hitachi HTE726040M9AT00=12.90
Seagate ST3160827AS=11.65
Seagate ST380215A=14.82
WDC WD5000AADS-00S9B0=17.37
Hitachi HTS545032B9A=22.16
Seagate ST1000DM003-9YN1=15.53
[LogfileSettings]
COMP=1
COMP_SP=1
COMP_Name=1
COMP_Os=1
COMP_User=0
CPU=1
CPU_Name=1
CPU_ID=1
CPU_Vendor=1
CPU_Stepping=1
CPU_Type=1
CPU_BrandID=1
CPU_PN=1
CPU_Clock=1
CPU_MaxFreq=1
CPU_CacheL1=1
CPU_CacheL2=1
CPU_TLB_I=1
CPU_TLB_D=1
CPU_Features=1
CPU_PIROM=1
MEM=1
MEM_TotalSize=1
MEM_Timing=1
MEM_Row=1
MEM_Row_Size=1
MEM_Row_Type=1
MEM_Row_Speed=1
MEM_Row_Model=1
MEM_Row_ECC=1
MEM_Row_Date=1
MEM_Row_SN=1
MEM_Row_Cfg=1
MEM_Row_Latency=1
MEM_Row_Features=1
MEM_Row_iFeatures=1
BUS=1
BUS_PCI=1
BUS_PCI_DevName=1
BUS_PCI_DevNumber=1
BUS_PCI_Resources=1
BUS_PCI_Features=1
BUS_PCI_DevSpecific=1
BUS_PCIX_Features=1
BUS_PCIe_Features=1
BUS_PCI_DRV_INFO=1
BUS_EISA=1
DMI=1
DMI_0=1
DMI_1=1
DMI_2=1
DMI_3=1
DMI_4=1
DMI_5=1
DMI_6=1
DMI_7=1
DMI_8=1
DMI_9=1
DMI_10=1
DMI_11=1
DMI_12=1
DMI_13=1
DMI_14=1
DMI_15=1
DMI_16=1
DMI_17=1
DMI_18=1
DMI_19=1
DMI_20=1
DMI_21=1
DMI_22=1
DMI_23=1
DMI_24=1
DMI_25=1
DMI_26=1
DMI_27=1
DMI_28=1
DMI_29=1
DMI_30=1
DMI_31=1
DMI_32=1
DMI_33=1
DMI_34=1
DMI_35=1
DMI_36=1
DMI_37=1
DMI_38=1
DMI_39=1
DMI_129=1
DMI_130=1
DMI_131=1
VIDEO=1
VIDEO_Chipset=1
VIDEO_Memory=1
VIDEO_Card=1
VIDEO_Bus=1
VIDEO_RAMDAC=1
VIDEO_BIOSver=1
VIDEO_Clock=1
VIDEO_HWID=1
VIDEO_DRV_INFO=1
VIDEO_DirectX=1
MON=1
MON_Name=1
MON_SN=1
MON_Date=1
MON_Dimensions=1
MON_DisplayType=1
MON_InputSignal=1
MON_Gamma=1
MON_DPMSinput=1
MON_DPMSmodes=1
MOBO=1
MOBO_Model=1
MOBO_Chipset=1
MOBO_CompName=1
MOBO_MachineType=1
MOBO_Slots=1
MOBO_BIOS_Manuf=1
MOBO_BIOS_Date=1
MOBO_PNP_Devs=1
MOBO_PNP_Nodes=1
MOBO_ACPI_Devs=1
MOBO_ACPI_Enum=1
DRIVE=1
DRIVE_IDE=1
DRIVE_IDE_Ctrller=1
DRIVE_IDE_Channel=1
DRIVE_IDE_Model=1
DRIVE_IDE_Rev=1
DRIVE_IDE_SN=1
DRIVE_IDE_Capacity=1
DRIVE_IDE_Geometry=1
DRIVE_IDE_Cache=1
DRIVE_IDE_Xfer=1
DRIVE_IDE_BasicCapab=1
DRIVE_IDE_ATA2Capab=1
DRIVE_IDE_SMART=1
DRIVE_SCSI=1
DRIVE_SCSI_ID=1
DRIVE_SCSI_Desc=1
DRIVE_SCSI_Class=1
DRIVE_Floppy=1
NETWORK=1
NETWORK_HWID=1
NETWORK_DRV_INFO=1
AUDIO=1
AUDIO_DRV_INFO=1
AUDIO_HWID=1
PORTS=1
BUS_USB=1
BUS_USB_DRV_INFO=1
BATTERY=1
SENSORS=1
[Settings]
HighestIdeAddress=0
AcpiEnum=0
SWSMI=1
DebugMode=0
SMBus=1
TempScale=C
AC97CodecID=1
SkipProblematicPciDev=0
GPUI2C=1
LPC=1
DefReportType=5
TPM=0
PCIdirect=1
OpenSystemSummary=0
RememberPreferences=1
LargeFonts=0
OpenSensors=0
MinimalizeMainWnd=0
MinimalizeSensors=0
PersistentDriver=0
UseHPET=1
AutoUpdate=0
GPUI2CNVAPI=1
GPUI2CADL=0
SensorsOnly=0
AcpiEval=1
CpuClkFromBusClk=1
BusClkPolling=1
SMBusAdrExclude=11111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000
GPUI2CBusExclude=00000000
SensorsSM=1
IoctlKernel=0
SummaryOnly=0
WakeGPUs=1
KeepTheme=0
FlushBuffers=1
iMEsupport=1
GPUI2Ccaching=1
CSMI_SAS_Support=1
DebugDirect=1
MinimalizeSensorsClose=0
WakeGPUsExt=0
PollSleepingGPUs=0
ShowWelcomeAndProgress=1
EnablePchTherm=0
ReorderGPUs=1
NvmlSupport=1
DecimalSeparator=.
ThousandsSeparator=,
CsvSeparator=,
MinimizeGraphs=1
TextButtons=0

View file

@ -1,3 +0,0 @@
@echo off
start "" %SystemDrive%\.bin\NotepadPlusPlus\notepadplusplus.exe %2 %3 %4 %5 %6 %7 %8 %9

View file

@ -1,68 +0,0 @@
[Start]
m_lang_id=1
QDir_Id=0
useColorStart=1
Als=12
designe_mode=2
showCmd=3
StartCrash=0
default_tab=
Max=1
show_ext_in_type=1
title_info=1
adresbar_style=1
useTreeColor=1
useColor=1
[Favoriten]
Ordner=.\Favoriten\
[Q]
Link=.\Favoriten\Quick-Link\
[Q-Dir]
Lizenz=1
[Vorschau]
Filter=*.avi;*.bmp;*.gif;*.ico;*.jpeg;*.jpg;*.mp*;*.pdf;*.png;*.wm*;
[Filter2]
0=#Hidden=1=-1=1=1=-1=0
1=*.zip;*.rar;*.gz;*.7z;=1=00AA00=-1=1=-1=0
2=*.mp*;*.avi;*.wma;=1=DD0058=-1=1=-1=0
3=#DIR=1=008800=-1=1=-1=0
4=*.jpg;*.jpeg;*.png,*.gif;*.bmp;*.ico=1=BB00BB=-1=1=-1=0
5=*.html;*.htm;*.url=1=456789=-1=1=-1=0
6=*.pl;*.cgi;*.php;*.pdf;*.doc;*.rtf;*.xls=1=BB8844=-1=1=-1=0
7=*.cpp;*.hpp;*.h=1=DD0058=-1=1=-1=0
8=*.exe;*.dll;*.bat=1=FF0000=-1=1=-1=0
9=*=1=0000BB=-1=1=-1=0
10=#BG=1=-1=-1=1=-1=0
11=#BG-A=1=-1=-1=1=-1=0
[Ordner]
Filter=
[Column_OS_6.1_Ploder1]
Spatlen_::{20D04FE0-3AEA-1069-A2D8-08002B30309D}=%1C%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%F1%F1%F1%F1%14%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%D0%02%00%00%CC%02%00%00%31%53%50%53%05%D5%CD%D5%9C%2E%1B%10%93%97%08%00%2B%2C%F9%AE%83%00%00%00%22%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%4B%00%65%00%79%00%3A%00%46%00%4D%00%54%00%49%00%44%00%00%00%08%00%00%00%4E%00%00%00%7B%00%42%00%37%00%32%00%35%00%46%00%31%00%33%00%30%00%2D%00%34%00%37%00%45%00%46%00%2D%00%31%00%30%00%31%00%41%00%2D%00%41%00%35%00%46%00%31%00%2D%00%30%00%32%00%36%00%30%00%38%00%43%00%39%00%45%00%45%00%42%00%41%00%43%00%7D%00%00%00%00%00%33%00%00%00%22%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%44%00%69%00%72%00%65%00%63%00%74%00%69%00%6F%00%6E%00%00%00%13%00%00%00%01%00%00%00%5B%00%00%00%0A%00%00%00%00%53%00%6F%00%72%00%74%00%00%00%42%00%00%00%1E%00%00%00%70%00%72%00%6F%00%70%00%34%00%32%00%39%00%34%00%39%00%36%00%37%00%32%00%39%00%35%00%00%00%00%00%1C%00%00%00%01%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0A%00%00%00%01%00%00%00%25%00%00%00%14%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%56%00%69%00%65%00%77%00%00%00%0B%00%00%00%FF%FF%00%00%1B%00%00%00%0A%00%00%00%00%4D%00%6F%00%64%00%65%00%00%00%13%00%00%00%04%00%00%00%23%00%00%00%12%00%00%00%00%49%00%63%00%6F%00%6E%00%53%00%69%00%7A%00%65%00%00%00%13%00%00%00%10%00%00%00%BD%00%00%00%10%00%00%00%00%43%00%6F%00%6C%00%49%00%6E%00%66%00%6F%00%00%00%42%00%00%00%1E%00%00%00%70%00%72%00%6F%00%70%00%34%00%32%00%39%00%34%00%39%00%36%00%37%00%32%00%39%00%35%00%00%00%00%00%78%00%00%00%FD%DF%DF%FD%10%00%00%00%00%00%00%00%00%00%00%00%04%00%00%00%18%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0A%00%00%00%8C%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%04%00%00%00%AF%00%00%00%35%4B%17%9B%FF%40%D2%11%A2%7E%00%C0%4F%C3%08%71%03%00%00%00%70%00%00%00%35%4B%17%9B%FF%40%D2%11%A2%7E%00%C0%4F%C3%08%71%02%00%00%00%70%00%00%00%2F%00%00%00%1E%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%4B%00%65%00%79%00%3A%00%50%00%49%00%44%00%00%00%13%00%00%00%04%00%00%00%1F%00%00%00%0E%00%00%00%00%46%00%46%00%6C%00%61%00%67%00%73%00%00%00%13%00%00%00%05%00%20%40%31%00%00%00%20%00%00%00%00%4C%00%6F%00%67%00%69%00%63%00%61%00%6C%00%56%00%69%00%65%00%77%00%4D%00%6F%00%64%00%65%00%00%00%13%00%00%00%01%00%00%00%00%00%00%00%00%00%00%00|CODEMODE1|-1905896973|772
Spatlen_291=%1C%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%F1%F1%F1%F1%14%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%D0%02%00%00%CC%02%00%00%31%53%50%53%05%D5%CD%D5%9C%2E%1B%10%93%97%08%00%2B%2C%F9%AE%83%00%00%00%22%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%4B%00%65%00%79%00%3A%00%46%00%4D%00%54%00%49%00%44%00%00%00%08%00%00%00%4E%00%00%00%7B%00%30%00%30%00%30%00%30%00%30%00%30%00%30%00%30%00%2D%00%30%00%30%00%30%00%30%00%2D%00%30%00%30%00%30%00%30%00%2D%00%30%00%30%00%30%00%30%00%2D%00%30%00%30%00%30%00%30%00%30%00%30%00%30%00%30%00%30%00%30%00%30%00%30%00%7D%00%00%00%00%00%33%00%00%00%22%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%44%00%69%00%72%00%65%00%63%00%74%00%69%00%6F%00%6E%00%00%00%13%00%00%00%01%00%00%00%5B%00%00%00%0A%00%00%00%00%53%00%6F%00%72%00%74%00%00%00%42%00%00%00%1E%00%00%00%70%00%72%00%6F%00%70%00%34%00%32%00%39%00%34%00%39%00%36%00%37%00%32%00%39%00%35%00%00%00%00%00%1C%00%00%00%01%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0A%00%00%00%01%00%00%00%25%00%00%00%14%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%56%00%69%00%65%00%77%00%00%00%0B%00%00%00%00%00%00%00%1B%00%00%00%0A%00%00%00%00%4D%00%6F%00%64%00%65%00%00%00%13%00%00%00%04%00%00%00%23%00%00%00%12%00%00%00%00%49%00%63%00%6F%00%6E%00%53%00%69%00%7A%00%65%00%00%00%13%00%00%00%10%00%00%00%BD%00%00%00%10%00%00%00%00%43%00%6F%00%6C%00%49%00%6E%00%66%00%6F%00%00%00%42%00%00%00%1E%00%00%00%70%00%72%00%6F%00%70%00%34%00%32%00%39%00%34%00%39%00%36%00%37%00%32%00%39%00%35%00%00%00%00%00%78%00%00%00%FD%DF%DF%FD%10%00%00%00%00%00%00%00%00%00%00%00%04%00%00%00%18%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0A%00%00%00%EE%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0E%00%00%00%69%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%04%00%00%00%91%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0C%00%00%00%46%00%00%00%2F%00%00%00%1E%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%4B%00%65%00%79%00%3A%00%50%00%49%00%44%00%00%00%13%00%00%00%00%00%00%00%1F%00%00%00%0E%00%00%00%00%46%00%46%00%6C%00%61%00%67%00%73%00%00%00%13%00%00%00%05%00%20%40%31%00%00%00%20%00%00%00%00%4C%00%6F%00%67%00%69%00%63%00%61%00%6C%00%56%00%69%00%65%00%77%00%4D%00%6F%00%64%00%65%00%00%00%13%00%00%00%01%00%00%00%00%00%00%00%00%00%00%00|CODEMODE1|-563719693|772
[Column_OS_6.1_Ploder2]
Spatlen_::{20D04FE0-3AEA-1069-A2D8-08002B30309D}=%1C%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%F1%F1%F1%F1%14%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%D0%02%00%00%CC%02%00%00%31%53%50%53%05%D5%CD%D5%9C%2E%1B%10%93%97%08%00%2B%2C%F9%AE%83%00%00%00%22%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%4B%00%65%00%79%00%3A%00%46%00%4D%00%54%00%49%00%44%00%00%00%08%00%00%00%4E%00%00%00%7B%00%42%00%37%00%32%00%35%00%46%00%31%00%33%00%30%00%2D%00%34%00%37%00%45%00%46%00%2D%00%31%00%30%00%31%00%41%00%2D%00%41%00%35%00%46%00%31%00%2D%00%30%00%32%00%36%00%30%00%38%00%43%00%39%00%45%00%45%00%42%00%41%00%43%00%7D%00%00%00%00%00%33%00%00%00%22%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%44%00%69%00%72%00%65%00%63%00%74%00%69%00%6F%00%6E%00%00%00%13%00%00%00%01%00%00%00%5B%00%00%00%0A%00%00%00%00%53%00%6F%00%72%00%74%00%00%00%42%00%00%00%1E%00%00%00%70%00%72%00%6F%00%70%00%34%00%32%00%39%00%34%00%39%00%36%00%37%00%32%00%39%00%35%00%00%00%00%00%1C%00%00%00%01%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0A%00%00%00%01%00%00%00%25%00%00%00%14%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%56%00%69%00%65%00%77%00%00%00%0B%00%00%00%FF%FF%00%00%1B%00%00%00%0A%00%00%00%00%4D%00%6F%00%64%00%65%00%00%00%13%00%00%00%04%00%00%00%23%00%00%00%12%00%00%00%00%49%00%63%00%6F%00%6E%00%53%00%69%00%7A%00%65%00%00%00%13%00%00%00%10%00%00%00%BD%00%00%00%10%00%00%00%00%43%00%6F%00%6C%00%49%00%6E%00%66%00%6F%00%00%00%42%00%00%00%1E%00%00%00%70%00%72%00%6F%00%70%00%34%00%32%00%39%00%34%00%39%00%36%00%37%00%32%00%39%00%35%00%00%00%00%00%78%00%00%00%FD%DF%DF%FD%10%00%00%00%00%00%00%00%00%00%00%00%04%00%00%00%18%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0A%00%00%00%8C%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%04%00%00%00%AF%00%00%00%35%4B%17%9B%FF%40%D2%11%A2%7E%00%C0%4F%C3%08%71%03%00%00%00%70%00%00%00%35%4B%17%9B%FF%40%D2%11%A2%7E%00%C0%4F%C3%08%71%02%00%00%00%70%00%00%00%2F%00%00%00%1E%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%4B%00%65%00%79%00%3A%00%50%00%49%00%44%00%00%00%13%00%00%00%04%00%00%00%1F%00%00%00%0E%00%00%00%00%46%00%46%00%6C%00%61%00%67%00%73%00%00%00%13%00%00%00%05%00%20%40%31%00%00%00%20%00%00%00%00%4C%00%6F%00%67%00%69%00%63%00%61%00%6C%00%56%00%69%00%65%00%77%00%4D%00%6F%00%64%00%65%00%00%00%13%00%00%00%01%00%00%00%00%00%00%00%00%00%00%00|CODEMODE1|-1905896973|772
[Column_OS_6.1_Ploder3]
Spatlen_::{20D04FE0-3AEA-1069-A2D8-08002B30309D}=%1C%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%F1%F1%F1%F1%14%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%D0%02%00%00%CC%02%00%00%31%53%50%53%05%D5%CD%D5%9C%2E%1B%10%93%97%08%00%2B%2C%F9%AE%83%00%00%00%22%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%4B%00%65%00%79%00%3A%00%46%00%4D%00%54%00%49%00%44%00%00%00%08%00%00%00%4E%00%00%00%7B%00%42%00%37%00%32%00%35%00%46%00%31%00%33%00%30%00%2D%00%34%00%37%00%45%00%46%00%2D%00%31%00%30%00%31%00%41%00%2D%00%41%00%35%00%46%00%31%00%2D%00%30%00%32%00%36%00%30%00%38%00%43%00%39%00%45%00%45%00%42%00%41%00%43%00%7D%00%00%00%00%00%33%00%00%00%22%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%44%00%69%00%72%00%65%00%63%00%74%00%69%00%6F%00%6E%00%00%00%13%00%00%00%01%00%00%00%5B%00%00%00%0A%00%00%00%00%53%00%6F%00%72%00%74%00%00%00%42%00%00%00%1E%00%00%00%70%00%72%00%6F%00%70%00%34%00%32%00%39%00%34%00%39%00%36%00%37%00%32%00%39%00%35%00%00%00%00%00%1C%00%00%00%01%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0A%00%00%00%01%00%00%00%25%00%00%00%14%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%56%00%69%00%65%00%77%00%00%00%0B%00%00%00%FF%FF%00%00%1B%00%00%00%0A%00%00%00%00%4D%00%6F%00%64%00%65%00%00%00%13%00%00%00%04%00%00%00%23%00%00%00%12%00%00%00%00%49%00%63%00%6F%00%6E%00%53%00%69%00%7A%00%65%00%00%00%13%00%00%00%10%00%00%00%BD%00%00%00%10%00%00%00%00%43%00%6F%00%6C%00%49%00%6E%00%66%00%6F%00%00%00%42%00%00%00%1E%00%00%00%70%00%72%00%6F%00%70%00%34%00%32%00%39%00%34%00%39%00%36%00%37%00%32%00%39%00%35%00%00%00%00%00%78%00%00%00%FD%DF%DF%FD%10%00%00%00%00%00%00%00%00%00%00%00%04%00%00%00%18%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0A%00%00%00%8C%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%04%00%00%00%AF%00%00%00%35%4B%17%9B%FF%40%D2%11%A2%7E%00%C0%4F%C3%08%71%03%00%00%00%70%00%00%00%35%4B%17%9B%FF%40%D2%11%A2%7E%00%C0%4F%C3%08%71%02%00%00%00%70%00%00%00%2F%00%00%00%1E%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%4B%00%65%00%79%00%3A%00%50%00%49%00%44%00%00%00%13%00%00%00%04%00%00%00%1F%00%00%00%0E%00%00%00%00%46%00%46%00%6C%00%61%00%67%00%73%00%00%00%13%00%00%00%05%00%20%40%31%00%00%00%20%00%00%00%00%4C%00%6F%00%67%00%69%00%63%00%61%00%6C%00%56%00%69%00%65%00%77%00%4D%00%6F%00%64%00%65%00%00%00%13%00%00%00%01%00%00%00%00%00%00%00%00%00%00%00|CODEMODE1|-1905896973|772
[Column_OS_6.1_Ploder4]
Spatlen_::{20D04FE0-3AEA-1069-A2D8-08002B30309D}=%1C%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%F1%F1%F1%F1%14%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%D0%02%00%00%CC%02%00%00%31%53%50%53%05%D5%CD%D5%9C%2E%1B%10%93%97%08%00%2B%2C%F9%AE%83%00%00%00%22%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%4B%00%65%00%79%00%3A%00%46%00%4D%00%54%00%49%00%44%00%00%00%08%00%00%00%4E%00%00%00%7B%00%42%00%37%00%32%00%35%00%46%00%31%00%33%00%30%00%2D%00%34%00%37%00%45%00%46%00%2D%00%31%00%30%00%31%00%41%00%2D%00%41%00%35%00%46%00%31%00%2D%00%30%00%32%00%36%00%30%00%38%00%43%00%39%00%45%00%45%00%42%00%41%00%43%00%7D%00%00%00%00%00%33%00%00%00%22%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%44%00%69%00%72%00%65%00%63%00%74%00%69%00%6F%00%6E%00%00%00%13%00%00%00%01%00%00%00%5B%00%00%00%0A%00%00%00%00%53%00%6F%00%72%00%74%00%00%00%42%00%00%00%1E%00%00%00%70%00%72%00%6F%00%70%00%34%00%32%00%39%00%34%00%39%00%36%00%37%00%32%00%39%00%35%00%00%00%00%00%1C%00%00%00%01%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0A%00%00%00%01%00%00%00%25%00%00%00%14%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%56%00%69%00%65%00%77%00%00%00%0B%00%00%00%FF%FF%00%00%1B%00%00%00%0A%00%00%00%00%4D%00%6F%00%64%00%65%00%00%00%13%00%00%00%04%00%00%00%23%00%00%00%12%00%00%00%00%49%00%63%00%6F%00%6E%00%53%00%69%00%7A%00%65%00%00%00%13%00%00%00%10%00%00%00%BD%00%00%00%10%00%00%00%00%43%00%6F%00%6C%00%49%00%6E%00%66%00%6F%00%00%00%42%00%00%00%1E%00%00%00%70%00%72%00%6F%00%70%00%34%00%32%00%39%00%34%00%39%00%36%00%37%00%32%00%39%00%35%00%00%00%00%00%78%00%00%00%FD%DF%DF%FD%10%00%00%00%00%00%00%00%00%00%00%00%04%00%00%00%18%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%0A%00%00%00%8C%00%00%00%30%F1%25%B7%EF%47%1A%10%A5%F1%02%60%8C%9E%EB%AC%04%00%00%00%AF%00%00%00%35%4B%17%9B%FF%40%D2%11%A2%7E%00%C0%4F%C3%08%71%03%00%00%00%70%00%00%00%35%4B%17%9B%FF%40%D2%11%A2%7E%00%C0%4F%C3%08%71%02%00%00%00%70%00%00%00%2F%00%00%00%1E%00%00%00%00%47%00%72%00%6F%00%75%00%70%00%42%00%79%00%4B%00%65%00%79%00%3A%00%50%00%49%00%44%00%00%00%13%00%00%00%04%00%00%00%1F%00%00%00%0E%00%00%00%00%46%00%46%00%6C%00%61%00%67%00%73%00%00%00%13%00%00%00%05%00%20%40%31%00%00%00%20%00%00%00%00%4C%00%6F%00%67%00%69%00%63%00%61%00%6C%00%56%00%69%00%65%00%77%00%4D%00%6F%00%64%00%65%00%00%00%13%00%00%00%01%00%00%00%00%00%00%00%00%00%00%00|CODEMODE1|-1905896973|772
[Programs_State]
Disable=0
[Quick-Links]
WK=%systemdrive%/WK
[Options]
Start=7
[X-Size]
mode=1
dig=0
fld_size=1
ths_sep=1
type=0
precent=1
ff_cnt=1
block_no_focus=1
nosort_fld_size=1

View file

@ -6,23 +6,44 @@
if (Test-Path Env:\DEBUG) {
Set-PSDebug -Trace 1
}
$Host.UI.RawUI.WindowTitle = "Wizard Kit: Windows PE Build Tool"
$WD = $(Split-Path $MyInvocation.MyCommand.Path)
$Bin = (Get-Item $WD -Force).Parent.FullName
$Root = (Get-Item $Bin -Force).Parent.FullName
$Build = "$Root\BUILD_PE"
$LogDir = "$Build\Logs"
$Temp = "$Build\Temp"
try {
Import-Module -Name $Env:DISMRoot -ErrorAction "stop"
}
catch {
Write-Host -ForegroundColor "Red" "ERROR: Failed to load DISM CmdLet"
Abort
}
# Dirs
$WorkingDir = $(Split-Path $MyInvocation.MyCommand.Path)
$SetupDir = (Get-Item $WorkingDir -Force).Parent.FullName
$RootDir = (Get-Item $SetupDir -Force).Parent.FullName
$BuildDir = "$SetupDir\BUILD_PE"
$OutDir = "$SetupDir\OUT_PE"
$TempDir = "$BuildDir\temp"
$MountDir = "$BuildDir\mount"
$TargetDir = "$BuildDir\pe_files"
# Misc
$Arch = "amd64"
$Date = Get-Date -UFormat "%Y-%m-%d"
$Host.UI.RawUI.BackgroundColor = "Black"
$Host.UI.RawUI.ForegroundColor = "White"
$DISM = "{0}\DISM.exe" -f $Env:DISMRoot
$HostSystem32 = "{0}\System32" -f $Env:SystemRoot
$HostSysWOW64 = "{0}\SysWOW64" -f $Env:SystemRoot
$DISM = "{0}\DISM.exe" -f $Env:DISMRoot
#Enable TLS 1.2
$KitNameFull = (Get-Content "$RootDir\scripts\wk\cfg\main.py" | Where-Object {$_ -imatch '^KIT_NAME_FULL'}) -ireplace '.*=.(.*).$', '$1'
$KitNameShort = (Get-Content "$RootDir\scripts\wk\cfg\main.py" | Where-Object {$_ -imatch '^KIT_NAME_SHORT'}) -ireplace '.*=.(.*).$', '$1'
# Set up UI
$Host.UI.RawUI.WindowTitle = "${KitNameFull}: Windows PE Build Tool"
$Host.UI.RawUI.BackgroundColor = "Black"
$Host.UI.RawUI.ForegroundColor = "White"
# Enable TLS 1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
## Functions ##
function Abort {
Write-Host -ForegroundColor "Red" "`nAborted."
WKPause "Press Enter to exit... "
exit
}
function Ask-User ($text = "Kotaero") {
$text += " [Y/N]"
while ($true) {
@ -37,33 +58,36 @@ function Ask-User ($text = "Kotaero") {
}
$answer
}
function Abort {
Write-Host -ForegroundColor "Red" "`nAborted."
WKPause "Press Enter to exit... "
exit
}
function MakeClean {
function Clean-BuildDir {
$Folders = @(
"$Build\Mount",
"$Build\PEFiles")
$Clean = $false
"$BuildDir\additions",
"$BuildDir\mount",
"$BuildDir\pe_files",
"$BuildDir\temp")
# WIM cleanup
if (Test-Path "$MountDir") {
try {
Dismount-WindowsImage -Path "$MountDir" -Discard
}
catch {
# Ignore
}
Start-Process -FilePath $DISM -ArgumentList @("/Cleanup-Mountpoints") -NoNewWindow -Wait
}
# Folders
foreach ($f in $Folders) {
if (Test-Path $f) {
Write-Host -ForegroundColor "Yellow" ("Found: {0}" -f $f)
$Clean = $true
}
}
if (($Clean) -and (Ask-User "Delete the above folder(s)?")) {
foreach ($f in $Folders) {
if (Test-Path $f) {
Remove-Item -Path $f -Recurse -Force
}
Write-Host -ForegroundColor "Yellow" ("Removing: {0}" -f $f)
Remove-Item -Path $f -Recurse -Force
}
}
}
function DownloadFile ($Path, $Name, $Url) {
$OutFile = "{0}\{1}" -f $Path, $Name
function Download-File ($Path, $Name, $Url) {
$OutFile = "{0}\{1}" -f $Path, $Name
Write-Host ("Downloading: $Name")
New-Item -Type Directory $Path 2>&1 | Out-Null
try {
@ -71,10 +95,128 @@ function DownloadFile ($Path, $Name, $Url) {
}
catch {
Write-Host (" ERROR: Failed to download file." ) -ForegroundColor "Red"
$global:DownloadErrors += 1
Abort
}
}
function FindDynamicUrl ($SourcePage, $RegEx) {
function Download-SourceFiles {
$Sources = Get-Content -Path "$WorkingDir\sources.json" | ConvertFrom-JSON
foreach ($s in $Sources) {
$Dest = "$BuildDir\downloads\{0}" -f $s.Name
if (Test-Path -PathType Leaf -Path "$Dest") {
if (Test-Hash -File $Dest -Hash $s.Hash) {
continue
}
# Hash didn't match
Remove-Item $Dest -Force
}
# File needs downloaded (again)
Download-File -Path "$BuildDir\downloads" -Name $s.Name -Url $s.Url
# Verify download
if ( -Not (Test-Hash -File $Dest -Hash $s.Hash)) {
Write-Host (" ERROR: Download failed hash check." ) -ForegroundColor "Red"
Abort
}
}
}
function Extract-SourceFiles {
$ProgramFilesPE = "$BuildDir\additions\Program Files"
New-Item -Type Directory $ProgramFilesPE -Force
# 7-Zip
Write-Host "Extracting: 7-Zip"
try {
$ArgumentList = @("/a", "$BuildDir\downloads\7z.msi", "TARGETDIR=$TempDir\7zi", "/qn")
Start-Process -FilePath "$HostSystem32\msiexec.exe" -ArgumentList $ArgumentList -Wait
New-Item -Type Directory "$ProgramFilesPE\7-Zip" 2>&1 | Out-Null
Move-Item "$TempDir\7zi\Files\7-Zip\7z.dll" "$ProgramFilesPE\7-Zip\7z.dll"
Move-Item "$TempDir\7zi\Files\7-Zip\7z.exe" "$ProgramFilesPE\7-Zip\7z.exe"
Move-Item "$TempDir\7zi\Files\7-Zip\License.txt" "$ProgramFilesPE\7-Zip\License.txt"
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
$SevenZip = "$ProgramFilesPE\7-Zip\7z.exe"
# ConEmu
Write-Host "Extracting: ConEmu"
try {
$ArgumentList = @(
"x", "$BuildDir\downloads\ConEmu.7z", "-o`"$ProgramFilesPE`"\ConEmu",
"-aoa", "-bso0", "-bse0", "-bsp0",
"ConEmu.exe",
"ConEmu.map",
"ConEmu64.exe",
"ConEmu64.map",
"ConEmu\CmdInit.cmd",
"ConEmu\ConEmuC.exe",
"ConEmu\ConEmuC64.exe",
"ConEmu\ConEmuCD.dll",
"ConEmu\ConEmuCD64.dll",
"ConEmu\ConEmuHk.dll",
"ConEmu\ConEmuHk64.dll"
)
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# Notepad++
Write-Host "Extracting: Notepad++"
try {
$ArgumentList = @(
"x", "$BuildDir\downloads\npp.7z", "-o`"$ProgramFilesPE`"\NotepadPlusPlus",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# NTPWEdit
Write-Host "Extracting: NTPWEdit"
try {
$ArgumentList = @(
"e", "$BuildDir\downloads\ntpwedit.zip", "-o`"$ProgramFilesPE`"\NTPWEdit",
"-aoa", "-bso0", "-bse0", "-bsp0",
"COPYING.txt", "GPL.txt", "ntpwedit64.exe")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
Move-Item "$ProgramFilesPE\NTPWEdit\ntpwedit64.exe" "$ProgramFilesPE\NTPWEdit\ntpwedit.exe"
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# OSFMount
Write-Host "Extracting: OSFMount"
try {
$ArgumentList = @(
"x", "$BuildDir\downloads\osfmount.7z", "-o`"$ProgramFilesPE`"\OSFMount",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# wimlib
Write-Host "Extracting: wimlib"
try {
$ArgumentList = @(
"x", "$BuildDir\downloads\wimlib.zip", "-o`"$ProgramFilesPE`"\wimlib",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
}
function Find-DynamicUrl ($SourcePage, $RegEx) {
# Get source page
Invoke-Webrequest -Uri $SourcePage -OutFile "tmp_page"
@ -88,11 +230,25 @@ function FindDynamicUrl ($SourcePage, $RegEx) {
$Url | Select-Object -First 1
}
function Test-Hash ($File, $Hash) {
Write-Host -BackgroundColor Black -ForegroundColor Cyan "Verifying ${File}..."
$FileHash = (Get-FileHash -Path $File -Algorithm SHA256 -ErrorAction Stop).Hash
return ($FileHash.ToLower() -eq $Hash)
}
function WKPause ($Message = "Press Enter to continue... ") {
Write-Host $Message -NoNewLine
Read-Host
}
## Safety Check ##
if ($PSVersionTable.PSVersion.Major -eq 6 -and $PSVersionTable.OS -imatch "Windows 6.1") {
Write-Host "`nThis script doesn't support PowerShell 6.0 on Windows 7."
Write-Host "Press Enter to exit... " -NoNewLine
Abort
}
## PowerShell equivalent of Python's "if __name__ == '__main__'"
# Code based on StackOverflow comments
# Question: https://stackoverflow.com/q/4693947
@ -100,558 +256,140 @@ function WKPause ($Message = "Press Enter to continue... ") {
# Asked by: https://stackoverflow.com/users/65164/mark-mascolino
# Answer by: https://stackoverflow.com/users/696808/bacon-bits
if ($MyInvocation.InvocationName -ne ".") {
Clear-Host
Write-Host "Wizard Kit: Windows PE Build Tool`n`n`n`n`n"
Push-Location "$WorkingDir"
New-Item -Type Directory $BuildDir 2>&1 | Out-Null
Clean-BuildDir
Copy-Item -Path "$SetupDir\pe\additions" -Destination "$BuildDir\additions" -Recurse -Force
## Prep ##
try {
Import-Module -Name $Env:DISMRoot -ErrorAction "stop"
}
catch {
Write-Host -ForegroundColor "Red" "ERROR: Failed to load DISM CmdLet"
Abort
}
Push-Location "$WD"
MakeClean
New-Item -Type Directory $Build 2>&1 | Out-Null
New-Item -Type Directory $LogDir 2>&1 | Out-Null
## main.py ##
if (!(Test-Path "$Build\main.py") -or (Ask-User "Replace existing main.py?")) {
Copy-Item -Path "$Bin\Scripts\settings\main.py" -Destination "$Build\main.py" -Force
}
WKPause "Press Enter to open settings..."
Start-Process "$HostSystem32\notepad.exe" -ArgumentList @("$Build\main.py") -Wait
$KitNameFull = (Get-Content "$Build\main.py" | Where-Object {$_ -match 'FULL'}) -replace ".*'(.*)'$", '$1'
$KitNameShort = (Get-Content "$Build\main.py" | Where-Object {$_ -match 'SHORT'}) -replace ".*'(.*)'$", '$1'
if (Ask-User "Update Tools?") {
$DownloadErrors = 0
## Download Tools ##
$ToolSources = @(
# 7-Zip
@("7z-installer.msi", "https://www.7-zip.org/a/7z1900.msi"),
@("7z-extra.7z", "https://www.7-zip.org/a/7z1900-extra.7z"),
# Blue Screen View
@("bluescreenview32.zip", "http://www.nirsoft.net/utils/bluescreenview.zip"),
@("bluescreenview64.zip", "http://www.nirsoft.net/utils/bluescreenview-x64.zip"),
# ConEmu
@("ConEmuPack.7z", "https://github.com/Maximus5/ConEmu/releases/download/v19.03.10/ConEmuPack.190310.7z"),
# Fast Copy
@("fastcopy.zip", "http://ftp.vector.co.jp/71/31/2323/FastCopy363_installer.exe"),
# HWiNFO
@("hwinfo.zip", "http://files2.majorgeeks.com/377527622c5325acc1cb937fb149d0de922320c0/systeminfo/hwi_602.zip"),
# Killer Network Drivers
@(
"killerinf.zip",
("https://www.killernetworking.com"+(FindDynamicUrl "https://www.killernetworking.com/killersupport/category/other-downloads" "Download Killer-Ethernet").replace('&amp;', '&'))
),
# Notepad++
@("npp_x86.7z", "https://notepad-plus-plus.org/repository/7.x/7.6.4/npp.7.6.4.bin.minimalist.7z"),
@("npp_amd64.7z", "https://notepad-plus-plus.org/repository/7.x/7.6.4/npp.7.6.4.bin.minimalist.x64.7z"),
# NT Password Editor
@("ntpwed.zip", "http://cdslow.org.ru/files/ntpwedit/ntpwed07.zip"),
# Prime95
@("prime95_32.zip", "http://www.mersenne.org/ftp_root/gimps/p95v294b7.win32.zip"),
@("prime95_64.zip", "http://www.mersenne.org/ftp_root/gimps/p95v294b8.win64.zip"),
# ProduKey
@("produkey32.zip", "http://www.nirsoft.net/utils/produkey.zip"),
@("produkey64.zip", "http://www.nirsoft.net/utils/produkey-x64.zip"),
# Python
@("python32.zip", "https://www.python.org/ftp/python/3.7.2/python-3.7.2.post1-embed-win32.zip"),
@("python64.zip", "https://www.python.org/ftp/python/3.7.2/python-3.7.2.post1-embed-amd64.zip"),
# Python: psutil
@(
"psutil64.whl",
(FindDynamicUrl "https://pypi.org/project/psutil/" "href=.*-cp37-cp37m-win_amd64.whl")
),
@(
"psutil32.whl",
(FindDynamicUrl "https://pypi.org/project/psutil/" "href=.*-cp37-cp37m-win32.whl")
),
# Q-Dir
@("qdir32.zip", "https://www.softwareok.com/Download/Q-Dir_Portable.zip"),
@("qdir64.zip", "https://www.softwareok.com/Download/Q-Dir_Portable_x64.zip"),
# TestDisk / PhotoRec
@("testdisk32.zip", "https://www.cgsecurity.org/testdisk-7.1-WIP.win.zip"),
@("testdisk64.zip", "https://www.cgsecurity.org/testdisk-7.1-WIP.win64.zip"),
# VirtIO drivers
@("virtio-win.iso", "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso"),
# Visual C++ Runtimes
@("vcredist_x86.exe", "https://aka.ms/vs/15/release/vc_redist.x86.exe"),
@("vcredist_x64.exe", "https://aka.ms/vs/15/release/vc_redist.x64.exe"),
# wimlib-imagex
@("wimlib32.zip", "https://wimlib.net/downloads/wimlib-1.13.0-windows-i686-bin.zip"),
@("wimlib64.zip", "https://wimlib.net/downloads/wimlib-1.13.0-windows-x86_64-bin.zip")
)
foreach ($Tool in $ToolSources) {
DownloadFile -Path $Temp -Name $Tool[0] -Url $Tool[1]
}
## Bail ##
# If errors were encountered during downloads
if ($DownloadErrors -gt 0) {
Abort
}
## Install ##
# Visual C++ Runtimes
Write-Host "Installing: Visual C++ Runtimes"
$ArgumentList = @("/install", "/passive", "/norestart")
Start-Process -FilePath "$Temp\vcredist_x86.exe" -ArgumentList $ArgumentList -Wait
Start-Process -FilePath "$Temp\vcredist_x64.exe" -ArgumentList $ArgumentList -Wait
## Extract ##
# 7-Zip
Write-Host "Extracting: 7-Zip"
try {
$ArgumentList = @("/a", "$Temp\7z-installer.msi", "TARGETDIR=$Temp\7zi", "/qn")
Start-Process -FilePath "$HostSystem32\msiexec.exe" -ArgumentList $ArgumentList -Wait
$SevenZip = "$Temp\7zi\Files\7-Zip\7z.exe"
$ArgumentList = @(
"e", "$Temp\7z-extra.7z", "-o$Build\bin\amd64\7-Zip",
"-aoa", "-bso0", "-bse0", "-bsp0",
"x64\7za.exe", "*.txt")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"e", "$Temp\7z-extra.7z", "-o$Build\bin\x86\7-Zip",
"-aoa", "-bso0", "-bse0", "-bsp0",
"7za.exe", "*.txt")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# Blue Screen View
Write-Host "Extracting: BlueScreenView"
try {
$ArgumentList = @(
"x", "$Temp\bluescreenview64.zip", "-o$Build\bin\amd64\BlueScreenView",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"x", "$Temp\bluescreenview32.zip", "-o$Build\bin\x86\BlueScreenView",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# ConEmu
Write-Host "Extracting: ConEmu"
try {
$ArgumentList = @(
"x", "$Temp\ConEmuPack.7z", "-o$Build\bin\amd64\ConEmu",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
Remove-Item "$Build\bin\amd64\ConEmu\ConEmu.exe"
Remove-Item "$Build\bin\amd64\ConEmu\ConEmu.map"
Move-Item "$Build\bin\amd64\ConEmu\ConEmu64.exe" "$Build\bin\amd64\ConEmu\ConEmu.exe" -Force
Move-Item "$Build\bin\amd64\ConEmu\ConEmu64.map" "$Build\bin\amd64\ConEmu\ConEmu.map" -Force
$ArgumentList = @(
"x", "$Temp\ConEmuPack.7z", "-o$Build\bin\x86\ConEmu",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
Remove-Item "$Build\bin\x86\ConEmu\ConEmu64.exe"
Remove-Item "$Build\bin\x86\ConEmu\ConEmu64.map"
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# Fast Copy
Write-Host "Extracting: FastCopy"
try {
# Extract Installer
$ArgumentList = @(
"e", "$Temp\fastcopy.zip", "-o$Temp",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
# Extract 64-bit
$ArgumentList = @(
"/NOSUBDIR", "/DIR=$Build\bin\amd64\FastCopy",
"/EXTRACT64")
Start-Process -FilePath "$TEMP\FastCopy354_installer.exe" -ArgumentList $ArgumentList -NoNewWindow -Wait
Remove-Item "$Build\bin\amd64\FastCopy\setup.exe" -Force
# Extract 32-bit
$ArgumentList = @(
"/NOSUBDIR", "/DIR=$Build\bin\x86\FastCopy",
"/EXTRACT32")
Start-Process -FilePath "$TEMP\FastCopy354_installer.exe" -ArgumentList $ArgumentList -NoNewWindow -Wait
Remove-Item "$Build\bin\x86\FastCopy\setup.exe" -Force
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# Killer Network Driver
Write-Host "Extracting: Killer Network Driver"
try {
$ArgumentList = @(
"e", "$Temp\killerinf.zip", "-o$Build\Drivers\amd64\Killer",
"-aoa", "-bso0", "-bse0", "-bsp0",
"Production\Windows10-x64\Eth\*")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"e", "$Temp\killerinf.zip", "-o$Build\Drivers\x86\Killer",
"-aoa", "-bso0", "-bse0", "-bsp0",
"Production\Windows10-x86\Eth\*")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# HWiNFO
Write-Host "Extracting: HWiNFO"
try {
$ArgumentList = @(
"e", "$Temp\hwinfo.zip", "-o$Build\bin\amd64\HWiNFO",
"-aoa", "-bso0", "-bse0", "-bsp0", "HWiNFO64.exe")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"e", "$Temp\hwinfo.zip", "-o$Build\bin\x86\HWiNFO",
"-aoa", "-bso0", "-bse0", "-bsp0", "HWiNFO32.exe")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
Move-Item "$Build\bin\amd64\HWiNFO\HWiNFO64.exe" "$Build\bin\amd64\HWiNFO\HWiNFO.exe" -Force
Move-Item "$Build\bin\x86\HWiNFO\HWiNFO32.exe" "$Build\bin\x86\HWiNFO\HWiNFO.exe" -Force
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# Notepad++
Write-Host "Extracting: Notepad++"
try {
$ArgumentList = @(
"x", "$Temp\npp_amd64.7z", "-o$Build\bin\amd64\NotepadPlusPlus",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"x", "$Temp\npp_x86.7z", "-o$Build\bin\x86\NotepadPlusPlus",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
Move-Item "$Build\bin\amd64\NotepadPlusPlus\notepad++.exe" "$Build\bin\amd64\NotepadPlusPlus\notepadplusplus.exe" -Force
Move-Item "$Build\bin\x86\NotepadPlusPlus\notepad++.exe" "$Build\bin\x86\NotepadPlusPlus\notepadplusplus.exe" -Force
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# NT Password Editor
Write-Host "Extracting: NT Password Editor"
try {
$ArgumentList = @(
"e", "$Temp\ntpwed.zip", ('-o"{0}\bin\amd64\NT Password Editor"' -f $Build),
"-aoa", "-bso0", "-bse0", "-bsp0",
"ntpwedit64.exe", "*.txt")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
Move-Item "$Build\bin\amd64\NT Password Editor\ntpwedit64.exe" "$Build\bin\amd64\NT Password Editor\ntpwedit.exe" -Force
$ArgumentList = @(
"e", "$Temp\ntpwed.zip", ('-o"{0}\bin\x86\NT Password Editor"' -f $Build),
"-aoa", "-bso0", "-bse0", "-bsp0",
"ntpwedit.exe", "*.txt")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# PhotoRec / TestDisk
Write-Host "Extracting: PhotoRec / TestDisk"
try {
$ArgumentList = @(
"x", "$Temp\testdisk64.zip", "-o$Build\bin\amd64\TestDisk",
"-aoa", "-bso0", "-bse0", "-bsp0")
# Remove destination since Move-Item -Force can't handle this recursive merge
Remove-Item "$Build\bin\amd64\TestDisk" -Recurse -Force 2>&1 | Out-Null
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
Move-Item "$Build\bin\amd64\TestDisk\testdisk-7.1-WIP\*" "$Build\bin\amd64\TestDisk" -Force
Remove-Item "$Build\bin\amd64\TestDisk\testdisk-7.1-WIP" -Recurse -Force
$ArgumentList = @(
"x", "$Temp\testdisk32.zip", "-o$Build\bin\x86\TestDisk",
"-aoa", "-bso0", "-bse0", "-bsp0")
# Remove destination since Move-Item -Force can't handle this recursive merge
Remove-Item "$Build\bin\x86\TestDisk" -Recurse -Force 2>&1 | Out-Null
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
Move-Item "$Build\bin\x86\TestDisk\testdisk-7.1-WIP\*" "$Build\bin\x86\TestDisk" -Force
Remove-Item "$Build\bin\x86\TestDisk\testdisk-7.1-WIP" -Recurse -Force
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# Prime95
Write-Host "Extracting: Prime95"
try {
$ArgumentList = @(
"x", "$Temp\prime95_64.zip", "-o$Build\bin\amd64\Prime95",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"x", "$Temp\prime95_32.zip", "-o$Build\bin\x86\Prime95",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# ProduKey
try {
$ArgumentList = @(
"x", "$Temp\produkey64.zip", "-o$Build\bin\amd64\ProduKey",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"x", "$Temp\produkey32.zip", "-o$Build\bin\x86\ProduKey",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# Python (x64)
Write-Host "Extracting: Python (x64)"
try {
$ArgumentList = @(
"x", "$Temp\python64.zip", "-o$Build\bin\amd64\python",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"x", "$Temp\psutil64.whl", "-o$Build\bin\amd64\python",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
try {
Copy-Item -Path "$HostSystem32\vcruntime140.dll" -Destination "$Build\bin\amd64\python\vcruntime140.dll" -Force
}
catch {
Write-Host (" ERROR: Failed to copy Visual C++ Runtime DLL." ) -ForegroundColor "Red"
}
# Python (x32)
Write-Host "Extracting: Python (x32)"
try {
$ArgumentList = @(
"x", "$Temp\python32.zip", "-o$Build\bin\x86\python",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"x", "$Temp\psutil32.whl", "-o$Build\bin\x86\python",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
try {
Copy-Item -Path "$HostSysWOW64\vcruntime140.dll" -Destination "$Build\bin\x86\python\vcruntime140.dll" -Force
}
catch {
Write-Host (" ERROR: Failed to copy Visual C++ Runtime DLL." ) -ForegroundColor "Red"
}
# Q-Dir
Write-Host "Extracting: Q-Dir"
try {
$ArgumentList = @(
"x", "$Temp\qdir64.zip", "-o$Build\bin\amd64",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
Move-Item "$Build\bin\amd64\Q-Dir\Q-Dir_x64.exe" "$Build\bin\amd64\Q-Dir\Q-Dir.exe" -Force
$ArgumentList = @(
"x", "$Temp\qdir32.zip", "-o$Build\bin\x86",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# VirtIO Drivers
Write-Host "Extracting: VirtIO Drivers"
try {
$ArgumentList = @(
"e", "$Temp\virtio-win.iso", "-o$Build\Drivers\amd64\VirtIO",
"-aoa", "-bso0", "-bse0", "-bsp0",
"*\w10\amd64\*")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"e", "$Temp\virtio-win.iso", "-o$Build\Drivers\x86\VirtIO",
"-aoa", "-bso0", "-bse0", "-bsp0",
"*\w10\x86\*")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
# wimlib-imagex
try {
$ArgumentList = @(
"x", "$Temp\wimlib64.zip", "-o$Build\bin\amd64\wimlib",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @(
"x", "$Temp\wimlib32.zip", "-o$Build\bin\x86\wimlib",
"-aoa", "-bso0", "-bse0", "-bsp0")
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
}
catch {
Write-Host (" ERROR: Failed to extract files." ) -ForegroundColor "Red"
}
## Cleanup ##
if (Ask-User "Delete temp files?") {
Remove-Item "$Temp" -Recurse
}
}
## Download Sources ##
Download-SourceFiles
Extract-SourceFiles
## Build ##
foreach ($Arch in @("amd64", "x86")) {
$Drivers = "$Build\Drivers\$Arch"
$Mount = "$Build\Mount"
$PEFiles = "$Build\PEFiles\$Arch"
# Copy WinPE files
Write-Host "Copying files..."
$Cmd = ("{0}\copype.cmd" -f $Env:WinPERoot)
Start-Process -FilePath $Cmd -ArgumentList @($Arch, $PEFiles) -NoNewWindow -Wait
# Copy WinPE files
Write-Host "Copying files..."
$Cmd = ("{0}\copype.cmd" -f $Env:WinPERoot)
Start-Process -FilePath $Cmd -ArgumentList @($Arch, $TargetDir) -NoNewWindow -Wait
# Remove unwanted items
foreach ($SubDir in @("media", "media\Boot", "media\EFI\Microsoft\Boot")) {
foreach ($Item in Get-ChildItem "$PEFiles\$SubDir") {
if ($Item.Name -inotmatch "^(boot|efi|en-us|sources|fonts|resources|bcd|memtest)") {
Remove-Item -Path $Item.FullName -Recurse -Force
}
# Remove unwanted items
foreach ($SubDir in @("media", "media\Boot", "media\EFI\Microsoft\Boot")) {
foreach ($Item in Get-ChildItem "$TargetDir\$SubDir") {
if ($Item.Name -inotmatch "^(boot|efi|en-us|sources|fonts|resources|bcd|memtest)") {
Remove-Item -Path $Item.FullName -Recurse -Force
}
}
# Mount image
Write-Host "Mounting image..."
New-Item -Path $Mount -ItemType "directory" -Force | Out-Null
Mount-WindowsImage -Path $Mount -ImagePath "$PEFiles\media\sources\boot.wim" -Index 1 -LogPath "$LogDir\DISM.log"
# Add drivers
Add-WindowsDriver -Path $Mount -Driver $Drivers -Recurse -LogPath "$LogDir\DISM.log"
# Add packages
Write-Host "Adding packages:"
$WinPEPackages = @(
"WinPE-EnhancedStorage",
"WinPE-FMAPI",
"WinPE-WMI",
"WinPE-SecureStartup"
)
foreach ($Package in $WinPEPackages) {
$PackagePath = ("{0}\{1}\WinPE_OCs\{2}.cab" -f $Env:WinPERoot, $Arch, $Package)
Write-Host " $Package..."
Add-WindowsPackage PackagePath $PackagePath Path $Mount -LogPath "$LogDir\DISM.log"
$LangPackagePath = ("{0}\{1}\WinPE_OCs\en-us\{2}_en-us.cab" -f $Env:WinPERoot, $Arch, $Package)
if (Test-Path $LangPackagePath) {
Add-WindowsPackage PackagePath $LangPackagePath Path $Mount -LogPath "$LogDir\DISM.log"
}
}
# Set RamDisk size
$ArgumentList = @(
('/Image:"{0}"' -f $Mount),
"/Set-ScratchSpace:512",
('/LogPath:"{0}\DISM.log"' -f $LogDir)
)
Start-Process -FilePath $DISM -ArgumentList $ArgumentList -NoNewWindow -Wait
# Add tools
Write-Host "Copying tools..."
Copy-Item -Path "$Build\bin\$Arch" -Destination "$Mount\.bin" -Recurse -Force
Copy-Item -Path "$Root\.pe_items\_include\*" -Destination "$Mount\.bin" -Recurse -Force
if ($Arch -eq "amd64") {
$DestIni = "$Mount\.bin\HWiNFO\HWiNFO64.INI"
} else {
$DestIni = "$Mount\.bin\HWiNFO\HWiNFO32.INI"
}
Move-Item -Path "$Mount\.bin\HWiNFO\HWiNFO.INI" -Destination $DestIni -Force
Copy-Item -Path "$Root\Images\WinPE.jpg" -Destination "$Mount\.bin\ConEmu\ConEmu.jpg" -Recurse -Force
Copy-Item -Path "$Bin\Scripts" -Destination "$Mount\.bin\Scripts" -Recurse -Force
Copy-Item -Path "$Build\main.py" -Destination "$Mount\.bin\Scripts\settings\main.py" -Force
# Add System32 items
$HostSystem32 = "{0}\System32" -f $Env:SystemRoot
Copy-Item -Path "$Root\.pe_items\System32\*" -Destination "$Mount\Windows\System32" -Recurse -Force
$ArgumentList = @("/f", "$Mount\Windows\System32\winpe.jpg", "/a")
Start-Process -FilePath "$HostSystem32\takeown.exe" -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @("$Mount\Windows\System32\winpe.jpg", "/grant", "Administrators:F")
Start-Process -FilePath "$HostSystem32\icacls.exe" -ArgumentList $ArgumentList -NoNewWindow -Wait
Copy-Item -Path "$Root\Images\WinPE.jpg" -Destination "$Mount\Windows\System32\winpe.jpg" -Recurse -Force
# Load registry hives
Write-Host "Updating Registry..."
$Reg = "$HostSystem32\reg.exe"
$ArgumentList = @("load", "HKLM\WinPE-SW", "$Mount\Windows\System32\config\SOFTWARE")
Start-Process -FilePath $Reg -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @("load", "HKLM\WinPE-SYS", "$Mount\Windows\System32\config\SYSTEM")
Start-Process -FilePath $Reg -ArgumentList $ArgumentList -NoNewWindow -Wait
# Add tools to path
## .NET code to properly handle REG_EXPAND_SZ values
## Credit: https://www.sepago.com/blog/2013/08/22/reading-and-writing-regexpandsz-data-with-powershell
## By: Marius Gawenda
$Hive = [Microsoft.Win32.Registry]::LocalMachine
$RegPath = "WinPE-SYS\ControlSet001\Control\Session Manager\Environment"
$RegKey = $Hive.OpenSubKey($RegPath)
$CurValue = $RegKey.GetValue(
"Path", $false, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
$NewValue = "$CurValue;%SystemDrive%\.bin\7-Zip;%SystemDrive%\.bin\python;%SystemDrive%\.bin\wimlib"
Set-ItemProperty -Path "HKLM:\$RegPath" -Name "Path" -Value $NewValue -Force | Out-Null
$Hive.close()
$RegKey.close()
# Replace Notepad
$RegPath = "HKLM:\WinPE-SW\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe"
$NewValue = 'cmd /c "%SystemDrive%\.bin\NotepadPlusPlus\npp.cmd"'
New-Item -Path $RegPath -Force | Out-Null
New-ItemProperty -Path $RegPath -Name "Debugger" -Value $NewValue -Force | Out-Null
# Run garbage collection to release potential stale handles
## Credit: https://jrich523.wordpress.com/2012/03/06/powershell-loading-and-unloading-registry-hives/
Start-Sleep -Seconds 2
[gc]::collect()
# Unload registry hives
Start-Sleep -Seconds 2
Start-Process -FilePath $Reg -ArgumentList @("unload", "HKLM\WinPE-SW") -NoNewWindow -Wait
Start-Process -FilePath $Reg -ArgumentList @("unload", "HKLM\WinPE-SYS") -NoNewWindow -Wait
# Unmount image
Write-Host "Dismounting image..."
Dismount-WindowsImage -Path $Mount -Save -LogPath "$LogDir\DISM.log"
# Create ISO
New-Item -Type Directory "$Root\OUT_PE" 2>&1 | Out-Null
$ArgumentList = @("/iso", $PEFiles, "$Root\OUT_PE\$KitNameShort-WinPE-$Date-$Arch.iso")
$Cmd = "{0}\MakeWinPEMedia.cmd" -f $Env:WinPERoot
Start-Process -FilePath $Cmd -ArgumentList $ArgumentList -NoNewWindow -Wait
}
# Mount image
Write-Host "Mounting image..."
New-Item -Path $MountDir -ItemType "directory" -Force | Out-Null
Mount-WindowsImage -Path $MountDir -ImagePath "$TargetDir\media\sources\boot.wim" -Index 1
# Add drivers
Write-Host "Adding drivers..."
Add-WindowsDriver -Path $MountDir -Driver "$SetupDir\pe\drivers" -ForceUnsigned -Recurse
# Add packages
Write-Host "Adding packages..."
$WinPEPackages = @(
"WinPE-EnhancedStorage",
"WinPE-FMAPI",
"WinPE-WMI",
"WinPE-SecureStartup"
)
foreach ($Package in $WinPEPackages) {
$PackagePath = ("{0}\{1}\WinPE_OCs\{2}.cab" -f $Env:WinPERoot, $Arch, $Package)
Write-Host " $Package..."
Add-WindowsPackage PackagePath $PackagePath Path $MountDir
$LangPackagePath = ("{0}\{1}\WinPE_OCs\en-us\{2}_en-us.cab" -f $Env:WinPERoot, $Arch, $Package)
if (Test-Path $LangPackagePath) {
Add-WindowsPackage PackagePath $LangPackagePath Path $MountDir
}
}
# Set RamDisk size
$ArgumentList = @(
('/Image:"{0}"' -f $MountDir),
"/Set-ScratchSpace:512"
)
Start-Process -FilePath $DISM -ArgumentList $ArgumentList -NoNewWindow -Wait
# Add tools
Write-Host "Copying tools..."
Copy-Item -Path "$BuildDir\additions\*" -Destination $MountDir -Recurse -Force
Copy-Item -Path "$RootDir\Images\WinPE.jpg" -Destination "$MountDir\Program Files\ConEmu\ConEmu.jpg" -Recurse -Force
# Add System32 items
$ArgumentList = @("/f", "$MountDir\Windows\System32\winpe.jpg", "/a")
Start-Process -FilePath "$HostSystem32\takeown.exe" -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @("$MountDir\Windows\System32\winpe.jpg", "/grant", "Administrators:F")
Start-Process -FilePath "$HostSystem32\icacls.exe" -ArgumentList $ArgumentList -NoNewWindow -Wait
Copy-Item -Path "$RootDir\Images\WinPE.jpg" -Destination "$MountDir\Windows\System32\winpe.jpg" -Force
# Load registry hives
Write-Host "Updating Registry..."
$Reg = "$HostSystem32\reg.exe"
$ArgumentList = @("load", "HKLM\WinPE-SW", "$MountDir\Windows\System32\config\SOFTWARE")
Start-Process -FilePath $Reg -ArgumentList $ArgumentList -NoNewWindow -Wait
$ArgumentList = @("load", "HKLM\WinPE-SYS", "$MountDir\Windows\System32\config\SYSTEM")
Start-Process -FilePath $Reg -ArgumentList $ArgumentList -NoNewWindow -Wait
# Configure CMD (command aliases "DOSKEY Macros" and tab completion)
$RegPath = "HKLM:\WinPE-SW\Microsoft\Command Processor"
$NewValue = "doskey /macrofile=X:\Windows\System32\custom.doskey"
New-Item -Path $RegPath -Force | Out-Null
New-ItemProperty -Path $RegPath -Name "AutoRun" -Value $NewValue -Force | Out-Null
New-ItemProperty -Path $RegPath -Name "CompletionChar" -Value 9 -Type DWord -Force | Out-Null
New-ItemProperty -Path $RegPath -Name "PathCompletionChar" -Value 9 -Type DWord -Force | Out-Null
# Add tools to path
## .NET code to properly handle REG_EXPAND_SZ values
## Credit: https://www.sepago.com/blog/2013/08/22/reading-and-writing-regexpandsz-data-with-powershell
## By: Marius Gawenda
$Hive = [Microsoft.Win32.Registry]::LocalMachine
$RegPath = "WinPE-SYS\ControlSet001\Control\Session Manager\Environment"
$RegKey = $Hive.OpenSubKey($RegPath)
$CurValue = $RegKey.GetValue(
"Path", $false, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
$NewValue = "$CurValue;%ProgramFiles%\7-Zip;%ProgramFiles%\OSFMount;%ProgramFiles%\wimlib"
Set-ItemProperty -Path "HKLM:\$RegPath" -Name "Path" -Value $NewValue -Force | Out-Null
$Hive.close()
$RegKey.close()
# Run garbage collection to release potential stale handles
## Credit: https://jrich523.wordpress.com/2012/03/06/powershell-loading-and-unloading-registry-hives/
Start-Sleep -Seconds 2
[gc]::collect()
# Unload registry hives
Start-Sleep -Seconds 2
Start-Process -FilePath $Reg -ArgumentList @("unload", "HKLM\WinPE-SW") -NoNewWindow -Wait
Start-Process -FilePath $Reg -ArgumentList @("unload", "HKLM\WinPE-SYS") -NoNewWindow -Wait
# Unmount image
Write-Host "Dismounting image..."
Dismount-WindowsImage -Path $MountDir -Save
# Rebuild image
Write-Host "Recompressing image..."
Move-Item "$TargetDir\media\sources\boot.wim" "$TargetDir\media\sources\boot-edited.wim"
Export-WindowsImage -DestinationImagePath "$TargetDir\media\sources\boot.wim" -SourceImagePath "$TargetDir\media\sources\boot-edited.wim" -SourceIndex 1 -CompressionType Max
Remove-Item "$TargetDir\media\sources\boot-edited.wim" -Force
# Create ISO
New-Item -Type Directory "$SetupDir\OUT_PE" 2>&1 | Out-Null
$ArgumentList = @("/iso", $TargetDir, "$SetupDir\OUT_PE\$KitNameShort-WinPE-$Date-$Arch.iso", "/f")
$Cmd = "{0}\MakeWinPEMedia.cmd" -f $Env:WinPERoot
Start-Process -FilePath $Cmd -ArgumentList $ArgumentList -NoNewWindow -Wait
## Cleanup ##
Remove-Item -Path "$Build\Mount" -Recurse -Force
Remove-Item -Path "$Build\PEFiles" -Recurse -Force
Remove-Item -Path "$MountDir" -Recurse -Force
## Done ##
Pop-Location
Write-Host "`nDone."
WKPause "Press Enter to exit... "
}

View file

@ -0,0 +1,4 @@
# WizardKit: WinPE - Drivers #
All drivers added to this folder will be injected into the WinPE image (recursively)

38
setup/pe/sources.json Normal file
View file

@ -0,0 +1,38 @@
[
{
"Item": "7-Zip",
"Hash": "eb94db7341e59f1871a4d4f60165563f1881e33aef093b7d8427651c2a0f4b6f",
"Name": "7z.msi",
"Url": "https://www.7-zip.org/a/7z2407-x64.msi"
},
{
"Item": "ConEmu",
"Hash": "2a9b98ebecaede62665ef427b05b3a5ccdac7bd3202414fc0f4c10825b4f4ea2",
"Name": "ConEmu.7z",
"Url": "https://github.com/Maximus5/ConEmu/releases/download/v23.07.24/ConEmuPack.230724.7z"
},
{
"Item": "Notepad++",
"Hash": "ef9b63b1f5f06ffa3d5fbed698f57c4dfb2f2ac88c340f0fd1dbad0c3ef8a524",
"Name": "npp.7z",
"Url": "https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.6.7/npp.8.6.7.portable.minimalist.x64.7z"
},
{
"Item": "NTPWEdit",
"Hash": "ca832bd62d8eb38541db1108054d1b4b52869837470ee770c39c2a5bea973e31",
"Name": "ntpwedit.zip",
"Url": "http://cdslow.org.ru/files/ntpwedit/ntpwed07.zip"
},
{
"Item": "OSFMount",
"Hash": "059B3F45902DF6FD6A7473ECDDAC3B16A73B49817F1FC85F118E6701F2493AC8",
"Name": "osfmount.7z",
"Url": "https://nextcloud.2shirt.work/s/2jA74iK2TdQKnSe/download/OSFMount.7z"
},
{
"Item": "wimlib",
"Hash": "6d99e242bfbc6d36fc987d433d63772180551b7f2d8de43e9561535a3e2c16d8",
"Name": "wimlib.zip",
"Url": "https://wimlib.net/downloads/wimlib-1.14.4-windows-x86_64-bin.zip"
}
]

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -95,9 +95,6 @@ if ($MyInvocation.InvocationName -ne ".") {
DownloadFile -Path $Temp -Name "python32.zip" -Url $Sources.'Python x32'
DownloadFile -Path $Temp -Name "python64.zip" -Url $Sources.'Python x64'
# Python: docopt
Copy-Item -Path "$WD\docopt\docopt-0.6.2-py2.py3-none-any.whl" -Destination "$Temp\docopt.whl"
# Python: psutil
$DownloadPage = "https://pypi.org/project/psutil/"
$RegEx = "href=.*-abi3-win32.whl"
@ -159,7 +156,6 @@ if ($MyInvocation.InvocationName -ne ".") {
"Pygments.whl",
"certifi.whl",
"chardet.whl",
"docopt.whl",
"idna.whl",
"prompt_toolkit.whl",
"psutil$Arch.whl",

View file

@ -1,19 +0,0 @@
Copyright (c) 2012 Vladimir Keleshev, <vladimir@keleshev.com>
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
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 THE
SOFTWARE.