From 1e41954f623e9e322ae434da8fb29f34703973d8 Mon Sep 17 00:00:00 2001 From: Alan Mason <1923621+2Shirt@users.noreply.github.com> Date: Sun, 26 Nov 2017 14:15:09 -0800 Subject: [PATCH 1/8] Added Build PE.cmd launch script * Checks for elevation and relaunches script if necessary * Checks for WADK installation and loads DandISetEnv.bat * This sets the proper variables * Runs PowerShell in the same window to preserve DandI vars --- .bin/Scripts/build_pe.ps1 | 71 ++++++++++++++++++++++++ .gitignore | 8 ++- Build PE.cmd | 113 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 .bin/Scripts/build_pe.ps1 create mode 100644 Build PE.cmd diff --git a/.bin/Scripts/build_pe.ps1 b/.bin/Scripts/build_pe.ps1 new file mode 100644 index 00000000..1c819ecb --- /dev/null +++ b/.bin/Scripts/build_pe.ps1 @@ -0,0 +1,71 @@ +# Wizard Kit: Windows PE Build Tool + +## Init ## +#Requires -Version 3.0 +#Requires -RunAsAdministrator +clear +$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 +$tmp = "{0}\tmp" -f $bin +$errors = 0 +pushd "$wd" +$host.UI.RawUI.BackgroundColor = "black" +$host.UI.RawUI.ForegroundColor = "white" +$progressPreference = 'silentlyContinue' +# clear +foreach ($v in @('SystemDrive', 'USERPROFILE', 'DISMRoot', 'BCDBootRoot', 'ImagingRoot', 'OSCDImgRoot', 'WdsmcastRoot')) { + write-host ('{0}: {1}' -f $v, (gci env:$v).value) +} +write-host "" +write-host ("wd: {0}" -f $wd) +write-host ("bin: {0}" -f $bin) +write-host ("root: {0}" -f $root) +write-host ("tmp: {0}" -f $tmp) +read-host "Bananas?" +exit + +## Functions ## +function download-file { + param ([String]$path, [String]$name, [String]$url) + $outfile = "{0}\{1}" -f $path, $name + + Write-Host ("Downloading: {0}" -f $name) + New-Item -Type Directory $path 2>&1 | Out-Null + try { + invoke-webrequest -uri $url -outfile $outfile + } + catch { + Write-Host (" ERROR: Failed to download file." ) -foregroundcolor "Red" + $errors += 1 + } +} +function find-dynamic-url { + param ([String]$source_page, [String]$regex) + $d_url = "" + + # Get source page + invoke-webrequest -uri $source_page -outfile "tmp_page" + + # Search for real url + $d_url = Get-Content "tmp_page" | Where-Object {$_ -imatch $regex} + $d_url = $d_url -ireplace '.*(a |)href="([^"]+)".*', '$2' + $d_url = $d_url -ireplace ".*(a |)href='([^']+)'.*", '$2' + + # Remove tmp_page + Remove-Item "tmp_page" + + return $d_url +} +function wk_pause { + param([string]$message = "Press Enter to continue... ") + Write-Host $message + $x = read-host +} + +## Build ## +# TODO # + +## Done ## +popd diff --git a/.gitignore b/.gitignore index 8d6f5fbe..28435552 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,9 @@ -*iso +*.bak +*.iso +.bin/Scripts/__pycache__ +.bin/tmp +Drivers +Logs Scripts/__pycache__ -dism* mount pe_files \ No newline at end of file diff --git a/Build PE.cmd b/Build PE.cmd new file mode 100644 index 00000000..49b04d4a --- /dev/null +++ b/Build PE.cmd @@ -0,0 +1,113 @@ +:: Wizard Kit: Windows PE Build Tool Launcher :: + +@echo off + +:Init +setlocal EnableDelayedExpansion +title Wizard Kit: Windows PE Build Tool +call :CheckFlags %* +call :CheckElevation || goto Exit +call :FindKitsRoot || goto ErrorKitNotFound +set "dandi_set_env=%adk_root%\Deployment Tools\DandISetEnv.bat" +set "ps_script=%~dp0\.bin\Scripts\build_pe.ps1" + +:LaunchPrep +rem Verify scripts exists +if not exist "%dandi_set_env%" (goto ErrorKitNotFound) +if not exist "%ps_script%" (goto ErrorPSScriptMissing) +call "%dandi_set_env%" || goto ErrorUnknown + +:Launch +PowerShell -ExecutionPolicy bypass -File %ps_script%" +goto Exit + +:: Functions :: +:CheckElevation +rem Code based on StackOverflow comments +rem Question: https://stackoverflow.com/q/4051883 +rem Using answer: https://stackoverflow.com/a/21295806 +rem Asked by: https://stackoverflow.com/users/272237/flacs +rem Edited by: https://stackoverflow.com/users/330315/a-horse-with-no-name +rem Answer by: https://stackoverflow.com/users/3198799/and31415 +fsutil dirty query %systemdrive% >nul +if %errorlevel% neq 0 ( + call :RequestElevation + rem reset errorlevel to 1 to abort the current non-elevated script + color 00 +) +@exit /b %errorlevel% + +:CheckFlags +rem Loops through all arguments to check for accepted flags +set DEBUG= +for %%f in (%*) do ( + if /i "%%f" == "/DEBUG" (@echo on & set "DEBUG=/DEBUG") +) +@exit /b 0 + +:FindKitsRoot +set "adk_root=" +set "found=" +set "r_vname=KitsRoot10" + +rem Check registry for WADK +set "r_path=HKLM\Software\Wow6432Node\Microsoft\Windows Kits\Installed Roots" +reg query "%r_path%" /v %r_vname% >nul 2>&1 && set "found=True" +if not defined found ( + rem 32-bit systems? + set "r_path=HKLM\Software\Microsoft\Windows Kits\Installed Roots" + reg query "!r_path!" /v %r_vname% >nul 2>&1 && set "found=True" +) +for /f "skip=2 tokens=2*" %%i in ('reg query "%r_path%" /v %r_vname%') do ( + set adk_root=%%j\Assessment and Deployment Kit +) +rem Set errorlevel if necessary +if not defined adk_root color 00 +if not defined found color 00 +@exit /b %errorlevel% + +:RequestElevation +set "cscript=%systemroot%\system32\cscript.exe" +set "vb_script=.bin\tmp\Elevate.vbs" +mkdir ".bin\tmp" 2>nul + +rem Create VB script +echo Set UAC = CreateObject^("Shell.Application"^) > "%vb_script%" +echo UAC.ShellExecute "%~s0", "", "", "runas", 3 >> "%vb_script%" + +rem Run +"%cscript%" //nologo "%vb_script%" || goto ErrorUnknown +del "%vb_script%" +@exit /b 0 + +:: Errors :: +:ErrorKitNotFound +echo. +echo ERROR: Windows ADK installation not found. +goto Abort + +:ErrorPSScriptMissing +echo. +echo ERROR: build_pe.ps1 script not found. +goto Abort + +:ErrorUnknown +echo. +echo ERROR: Encountered an unknown error. +goto Abort + +:Abort +color 4e +echo Aborted. +echo. +echo Press any key to exit... +pause>nul +color +rem Set errorlevel to 1 by calling color incorrectly +color 00 +goto Exit + +:: Cleanup and exit :: +:Exit +endlocal +exit /b %errorlevel% From 87ac27b5cca080dbaee2d5d79d770f72d2155caa Mon Sep 17 00:00:00 2001 From: Alan Mason <1923621+2Shirt@users.noreply.github.com> Date: Sun, 26 Nov 2017 14:42:27 -0800 Subject: [PATCH 2/8] Moving to a new style guide for PowerShell scripts Using this: https://poshcode.gitbooks.io/powershell-practice-and-style/ --- .bin/Scripts/build_pe.ps1 | 82 +++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/.bin/Scripts/build_pe.ps1 b/.bin/Scripts/build_pe.ps1 index 1c819ecb..de687894 100644 --- a/.bin/Scripts/build_pe.ps1 +++ b/.bin/Scripts/build_pe.ps1 @@ -3,69 +3,69 @@ ## Init ## #Requires -Version 3.0 #Requires -RunAsAdministrator -clear -$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 -$tmp = "{0}\tmp" -f $bin -$errors = 0 -pushd "$wd" -$host.UI.RawUI.BackgroundColor = "black" -$host.UI.RawUI.ForegroundColor = "white" -$progressPreference = 'silentlyContinue' -# clear -foreach ($v in @('SystemDrive', 'USERPROFILE', 'DISMRoot', 'BCDBootRoot', 'ImagingRoot', 'OSCDImgRoot', 'WdsmcastRoot')) { - write-host ('{0}: {1}' -f $v, (gci env:$v).value) +Clear-Host +$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 +$Temp = "{0}\tmp" -f $Bin +$Errors = 0 +Push-Location "$WD" +$Host.UI.RawUI.BackgroundColor = "black" +$Host.UI.RawUI.ForegroundColor = "white" +$ProgressPreference = 'silentlyContinue' +# Clear-Host +foreach ($Var in @('SystemDrive', 'USERPROFILE', 'DISMRoot', 'BCDBootRoot', 'ImagingRoot', 'OSCDImgRoot', 'WdsmcastRoot')) { + Write-Host ('{0}: {1}' -f $Var, (Get-ChildItem Env:$Var).Value) } -write-host "" -write-host ("wd: {0}" -f $wd) -write-host ("bin: {0}" -f $bin) -write-host ("root: {0}" -f $root) -write-host ("tmp: {0}" -f $tmp) -read-host "Bananas?" +Write-Host "" +Write-Host ("wd: {0}" -f $WD) +Write-Host ("bin: {0}" -f $Bin) +Write-Host ("root: {0}" -f $Root) +Write-Host ("tmp: {0}" -f $Temp) +Read-Host "Bananas?" exit ## Functions ## -function download-file { - param ([String]$path, [String]$name, [String]$url) - $outfile = "{0}\{1}" -f $path, $name +function Download-File { + param ([String]$Path, [String]$Name, [String]$Url) + $OutFile = "{0}\{1}" -f $Path, $Name - Write-Host ("Downloading: {0}" -f $name) - New-Item -Type Directory $path 2>&1 | Out-Null + Write-Host ("Downloading: {0}" -f $Name) + New-Item -Type Directory $Path 2>&1 | Out-Null try { - invoke-webrequest -uri $url -outfile $outfile + Invoke-Webrequest -Uri $Url -OutFile $OutFile } catch { - Write-Host (" ERROR: Failed to download file." ) -foregroundcolor "Red" - $errors += 1 + Write-Host (" ERROR: Failed to download file." ) -ForegroundColor "Red" + $Errors += 1 } } -function find-dynamic-url { - param ([String]$source_page, [String]$regex) - $d_url = "" +function Find-DynamicUrl { + param ([String]$SourcePage, [String]$RegEx) + $Url = "" # Get source page - invoke-webrequest -uri $source_page -outfile "tmp_page" + Invoke-Webrequest -Uri $SourcePage -OutFile "tmp_page" # Search for real url - $d_url = Get-Content "tmp_page" | Where-Object {$_ -imatch $regex} - $d_url = $d_url -ireplace '.*(a |)href="([^"]+)".*', '$2' - $d_url = $d_url -ireplace ".*(a |)href='([^']+)'.*", '$2' + $Url = Get-Content "tmp_page" | Where-Object {$_ -imatch $RegEx} + $Url = $Url -ireplace '.*(a |)href="([^"]+)".*', '$2' + $Url = $Url -ireplace ".*(a |)href='([^']+)'.*", '$2' # Remove tmp_page Remove-Item "tmp_page" - return $d_url + return $Url } -function wk_pause { - param([string]$message = "Press Enter to continue... ") - Write-Host $message - $x = read-host +function WK-Pause { + param([string]$Message = "Press Enter to continue... ") + Write-Host $Message + Read-Host } ## Build ## # TODO # ## Done ## -popd +Pop-Location From 7b12a8ca91c6060a45598b4091e18ef4b3e5cc28 Mon Sep 17 00:00:00 2001 From: Alan Mason <1923621+2Shirt@users.noreply.github.com> Date: Mon, 27 Nov 2017 16:03:51 -0800 Subject: [PATCH 3/8] Merged tool settings Extra files for the tools are now stored in WK\_include and copied into place during the build. --- WK/{amd64 => _include}/CPU-Z/cpuz.ini | 0 WK/{amd64 => _include}/ConEmu/ConEmu.xml | 0 .../HWiNFO/HWiNFO.INI} | 0 .../NotepadPlusPlus/config.xml | 0 WK/_include/NotepadPlusPlus/npp.vbs | 33 + WK/{x86 => _include}/Q-Dir/Q-Dir.ini | 1 - WK/amd64/HWiNFO/HWiNFO64.INI | 209 ----- WK/amd64/Q-Dir/Q-Dir.ini | 69 -- WK/x86/CPU-Z/cpuz.ini | 20 - WK/x86/ConEmu/ConEmu.xml | 765 ------------------ WK/x86/NotepadPlusPlus/config.xml | 56 -- 11 files changed, 33 insertions(+), 1120 deletions(-) rename WK/{amd64 => _include}/CPU-Z/cpuz.ini (100%) rename WK/{amd64 => _include}/ConEmu/ConEmu.xml (100%) rename WK/{x86/HWiNFO/HWiNFO32.INI => _include/HWiNFO/HWiNFO.INI} (100%) rename WK/{amd64 => _include}/NotepadPlusPlus/config.xml (100%) create mode 100644 WK/_include/NotepadPlusPlus/npp.vbs rename WK/{x86 => _include}/Q-Dir/Q-Dir.ini (99%) delete mode 100644 WK/amd64/HWiNFO/HWiNFO64.INI delete mode 100644 WK/amd64/Q-Dir/Q-Dir.ini delete mode 100644 WK/x86/CPU-Z/cpuz.ini delete mode 100644 WK/x86/ConEmu/ConEmu.xml delete mode 100644 WK/x86/NotepadPlusPlus/config.xml diff --git a/WK/amd64/CPU-Z/cpuz.ini b/WK/_include/CPU-Z/cpuz.ini similarity index 100% rename from WK/amd64/CPU-Z/cpuz.ini rename to WK/_include/CPU-Z/cpuz.ini diff --git a/WK/amd64/ConEmu/ConEmu.xml b/WK/_include/ConEmu/ConEmu.xml similarity index 100% rename from WK/amd64/ConEmu/ConEmu.xml rename to WK/_include/ConEmu/ConEmu.xml diff --git a/WK/x86/HWiNFO/HWiNFO32.INI b/WK/_include/HWiNFO/HWiNFO.INI similarity index 100% rename from WK/x86/HWiNFO/HWiNFO32.INI rename to WK/_include/HWiNFO/HWiNFO.INI diff --git a/WK/amd64/NotepadPlusPlus/config.xml b/WK/_include/NotepadPlusPlus/config.xml similarity index 100% rename from WK/amd64/NotepadPlusPlus/config.xml rename to WK/_include/NotepadPlusPlus/config.xml diff --git a/WK/_include/NotepadPlusPlus/npp.vbs b/WK/_include/NotepadPlusPlus/npp.vbs new file mode 100644 index 00000000..3fb12a41 --- /dev/null +++ b/WK/_include/NotepadPlusPlus/npp.vbs @@ -0,0 +1,33 @@ +'// DISCLAIMER +'// THIS COMES WITH NO WARRANTY, IMPLIED OR OTHERWISE. USE AT YOUR OWN RISK +'// IF YOU ARE NOT COMFORTABLE EDITING THE REGISTRY THEN DO NOT USE THIS SCRIPT +'// +'// NOTES: +'// This affects all users. +'// This will prevent ANY executable named notepad.exe from running located anywhere on this computer!! +'// +'// Save this text to your notepad++ folder as a text file named npp.vbs (some AV don't like vbs, get a different AV :-P ) +'// +'// USAGE +'// 1) +'// Navigate to registry key HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ +'// +' // 2) +'// Add new subkey called notepad.exe +'// This step is what tells windows to use the notepad++ exe, to undo simply delete this key +'// +'// 3) +'// Create new Sting Value called Debugger +'// +'// 4) +'// Modify value and enter wscript.exe "path to npp.vbs" e.g. wscript.exe "C:\Program Files\Notepad++\npp.vbs" + +Option Explicit +Dim sCmd, x +sCmd = """" & LeftB(WScript.ScriptFullName, LenB(WScript.ScriptFullName) - LenB(WScript.ScriptName)) & "notepad++.exe" & """ """ +For x = 1 To WScript.Arguments.Count - 1 + sCmd = sCmd & WScript.Arguments(x) & " " +Next +sCmd = sCmd & """" +CreateObject("WScript.Shell").Run sCmd, 1, True +WScript.Quit \ No newline at end of file diff --git a/WK/x86/Q-Dir/Q-Dir.ini b/WK/_include/Q-Dir/Q-Dir.ini similarity index 99% rename from WK/x86/Q-Dir/Q-Dir.ini rename to WK/_include/Q-Dir/Q-Dir.ini index 18f44d38..ac926a8c 100644 --- a/WK/x86/Q-Dir/Q-Dir.ini +++ b/WK/_include/Q-Dir/Q-Dir.ini @@ -4,7 +4,6 @@ QDir_Id=0 useColorStart=1 Als=12 designe_mode=2 -WinRC=8;15;968;689 showCmd=3 StartCrash=0 default_tab= diff --git a/WK/amd64/HWiNFO/HWiNFO64.INI b/WK/amd64/HWiNFO/HWiNFO64.INI deleted file mode 100644 index 23133936..00000000 --- a/WK/amd64/HWiNFO/HWiNFO64.INI +++ /dev/null @@ -1,209 +0,0 @@ -[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 diff --git a/WK/amd64/Q-Dir/Q-Dir.ini b/WK/amd64/Q-Dir/Q-Dir.ini deleted file mode 100644 index f6532f37..00000000 --- a/WK/amd64/Q-Dir/Q-Dir.ini +++ /dev/null @@ -1,69 +0,0 @@ -[Start] -m_lang_id=1 -QDir_Id=0 -useColorStart=1 -Als=12 -designe_mode=2 -WinRC=66;87;1026;761 -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 diff --git a/WK/x86/CPU-Z/cpuz.ini b/WK/x86/CPU-Z/cpuz.ini deleted file mode 100644 index e10ce749..00000000 --- a/WK/x86/CPU-Z/cpuz.ini +++ /dev/null @@ -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 diff --git a/WK/x86/ConEmu/ConEmu.xml b/WK/x86/ConEmu/ConEmu.xml deleted file mode 100644 index 8a2049b9..00000000 --- a/WK/x86/ConEmu/ConEmu.xml +++ /dev/null @@ -1,765 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/WK/x86/NotepadPlusPlus/config.xml b/WK/x86/NotepadPlusPlus/config.xml deleted file mode 100644 index 3a88a83e..00000000 --- a/WK/x86/NotepadPlusPlus/config.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - standard - hide - - vertical - hide - - no - yes - no - no - yes - yes - no - yes - - - - - yes - yes - 2 - - - - - - hide - - - - - - - - - - yes - - - - - - - - - - - - - - From 44514b2fefc843a91ca04ef47675db7e963aad92 Mon Sep 17 00:00:00 2001 From: Alan Mason <1923621+2Shirt@users.noreply.github.com> Date: Mon, 27 Nov 2017 16:05:44 -0800 Subject: [PATCH 4/8] Initial PowerShell rewrite done. --- .bin/Scripts/build_pe.ps1 | 229 +++++++++++++++++++++++++++++++++----- .gitignore | 2 +- 2 files changed, 201 insertions(+), 30 deletions(-) diff --git a/.bin/Scripts/build_pe.ps1 b/.bin/Scripts/build_pe.ps1 index de687894..4d1570b8 100644 --- a/.bin/Scripts/build_pe.ps1 +++ b/.bin/Scripts/build_pe.ps1 @@ -2,33 +2,87 @@ ## Init ## #Requires -Version 3.0 -#Requires -RunAsAdministrator -Clear-Host +#Requires -RunAsAdministrator $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 $Temp = "{0}\tmp" -f $Bin -$Errors = 0 -Push-Location "$WD" -$Host.UI.RawUI.BackgroundColor = "black" -$Host.UI.RawUI.ForegroundColor = "white" +$Host.UI.RawUI.BackgroundColor = "Black" +$Host.UI.RawUI.ForegroundColor = "White" $ProgressPreference = 'silentlyContinue' -# Clear-Host -foreach ($Var in @('SystemDrive', 'USERPROFILE', 'DISMRoot', 'BCDBootRoot', 'ImagingRoot', 'OSCDImgRoot', 'WdsmcastRoot')) { - Write-Host ('{0}: {1}' -f $Var, (Get-ChildItem Env:$Var).Value) -} -Write-Host "" -Write-Host ("wd: {0}" -f $WD) -Write-Host ("bin: {0}" -f $Bin) -Write-Host ("root: {0}" -f $Root) -Write-Host ("tmp: {0}" -f $Temp) -Read-Host "Bananas?" -exit +$SplitWindow = @() +$DISM = "{0}\DISM.exe" -f $Env:DISMRoot +$WinPEPackages = @( + "WinPE-EnhancedStorage.cab", + "WinPE-FMAPI.cab", + "WinPE-WMI.cab", + "WinPE-EnhancedStorage_en-us.cab", + "WinPE-WMI_en-us.cab" +) + # Install WinPE-WMI before you install WinPE-NetFX. + # "WinPE-NetFx.cab", + # "WinPE-NetFx_en-us.cab", + + # Install WinPE-WMI and WinPE-NetFX before you install WinPE-Scripting. + # "WinPE-Scripting.cab", + # "WinPE-Scripting_en-us.cab", + + # Install WinPE-WMI, WinPE-NetFX, and WinPE-Scripting before you install WinPE-PowerShell. + # "WinPE-PowerShell.cab", + # "WinPE-PowerShell_en-us.cab", + + # Install WinPE-WMI, WinPE-NetFX, WinPE-Scripting, and WinPE-PowerShell before you install WinPE-DismCmdlets. + # "WinPE-DismCmdlets.cab", + # "WinPE-DismCmdlets_en-us.cab", + + # Install WinPE-WMI, WinPE-NetFX, WinPE-Scripting, and WinPE-PowerShell before you install WinPE-SecureBootCmdlets. + # "WinPE-SecureBootCmdlets.cab", + + # Install WinPE-WMI, WinPE-NetFX, WinPE-Scripting, and WinPE-PowerShell before you install WinPE-StorageWMI. + # "WinPE-StorageWMI.cab", + # "WinPE-StorageWMI_en-us.cab", ## Functions ## -function Download-File { - param ([String]$Path, [String]$Name, [String]$Url) +function Ask-User ($text = "Kotaero") { + $text += " [Y/N]" + while ($true) { + $answer = read-host $text + if ($answer -imatch '^(y|yes)$') { + $answer = $true + break + } elseif ($answer -imatch '^(n|no|nope)$') { + $answer = $false + break + } + } + $answer +} +function Abort { + Write-Host -ForegroundColor "Red" "`nAborted." + WKPause "Press Enter to exit... " + exit +} +function MakeClean { + $Folders = @( + "$Root\Mount", + "$Root\PEFiles") + $Clean = $false + 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 + } + } + } +} +function DownloadFile ($Path, $Name, $Url) { $OutFile = "{0}\{1}" -f $Path, $Name Write-Host ("Downloading: {0}" -f $Name) @@ -38,11 +92,9 @@ function Download-File { } catch { Write-Host (" ERROR: Failed to download file." ) -ForegroundColor "Red" - $Errors += 1 } } -function Find-DynamicUrl { - param ([String]$SourcePage, [String]$RegEx) +function FindDynamicUrl ($SourcePage, $RegEx) { $Url = "" # Get source page @@ -58,14 +110,133 @@ function Find-DynamicUrl { return $Url } -function WK-Pause { - param([string]$Message = "Press Enter to continue... ") - Write-Host $Message +function WKPause ($Message = "Press Enter to continue... ") { + Write-Host $Message -NoNewLine Read-Host } +function WKRun ($Cmd, $ArgumentList, [switch]$SplitWindow=$false) { + if (Test-Path Env:\ConEmuBuild) { + $ArgumentList += "-new_console:ns33V" + } + Start-Process $Cmd -ArgumentList $ArgumentList -NoNewWindow -Wait +} -## Build ## -# TODO # +## PowerShell equivalent of Python's "if __name__ == '__main__'" +# Code based on StackOverflow comments +# Question: https://stackoverflow.com/q/4693947 +# Using answer: https://stackoverflow.com/a/5582692 +# 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" + + ## Prep ## + Push-Location "$WD" + $Date = Get-Date -UFormat "%Y-%m-%d" + MakeClean + + ## Build ## + foreach ($Arch in @("amd64", "x86")) { + $Drivers = "$Root\Drivers\%arch" + $Mount = "$Root\Mount" + $PEFiles = "$Root\PEFiles\$arch" + + # Copy WinPE files + Write-Host "Copying files..." + $Cmd = ("{0}\copype.cmd" -f $Env:WinPERoot) + WKRun -Cmd $Cmd -ArgumentList @($Arch, $PEFiles) -SplitWindow + + # 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 + } + } + } + + # Mount image + Write-Host "Mounting image..." + $ArgumentList = @( + "/Mount-Image", + "/ImageFile:'$PEFiles\media\sources\boot.wim'", + "/Index:1", + "/MountDir:'$Mount'" + ) + WKRun -Cmd $DISM -ArgumentList $ArgumentList -SplitWindow + + # Add packages + Write-Host "Adding packages..." + foreach ($Package in $WinPEPackages) { + $PackagePath = "{0}\{1}\WinPE_OCs" -f $Env:WinPERoot, $Arch + $ArgumentList = @( + "/Add-Package", + "/Image:'$Mount'", + "/PackagePath:'$PackagePath'" + ) + WKRun -Cmd $DISM -ArgumentList $ArgumentList -SplitWindow + } + + # Set RamDisk size + $ArgumentList = @("/Image:'$Mount'", "/Set-ScratchSpace:512") + WKRun -Cmd $DISM -ArgumentList $ArgumentList + + # Add WK tools + Write-Host "Copying tools..." + Copy-Item -Path "$Root\WK\$Arch" -Destination "$Mount\WK" -Recurse -Force + Copy-Item -Path "$Root\WK\_include\*" -Destination "$Mount\WK" -Recurse -Force + if ($Arch -eq "amd64") { + $DestIni = "$Mount\WK\HWiNFO\HWiNFO64.INI" + } else { + $DestIni = "$Mount\WK\HWiNFO\HWiNFO32.INI" + } + Move-Item -Path "$Root\WK\HWiNFO\HWiNFO.INI" -Destination $DestIni -Force + Copy-Item -Path "$Root\WinPE.jpg" -Destination "$Mount\WK\ConEmu\ConEmu.jpg" -Recurse -Force + Copy-Item -Path "$Root\Scripts" -Destination "$Mount\WK\Scripts" -Recurse -Force + + # Add System32 items + Copy-Item -Path "$Root\System32" -Destination "$Mount\Windows\System32" -Recurse -Force + $ArgumentList = @("/f", "$Mount\Windows\System32\winpe.jpg", "/a") + WKRun -Cmd "C:\Windows\System32\takeown.exe" -ArgumentList $ArgumentList + $ArgumentList = @("$Mount\Windows\System32\winpe.jpg", "/grant", "Administrators:F") + WKRun -Cmd "C:\Windows\System32\icacls.exe" -ArgumentList $ArgumentList + Copy-Item -Path "$Root\WinPE.jpg" -Destination "$Mount\Windows\System32\winpe.jpg" -Recurse -Force + + # Update registry + Write-Host "Updating Registry..." + $Reg = "C:\Windows\System32\reg.exe" + WKRun -Cmd $Reg -ArgumentList @("load", "HKLM\WinPE-SW", "$Mount\Windows\System32\config\SOFTWARE") + WKRun -Cmd $Reg -ArgumentList @("load", "HKLM\WinPE-SYS", "$Mount\Windows\System32\config\SYSTEM") + + # Add 7-Zip and Python to path + $RegPath = "HKLM:\WinPE-SYS\ControlSet001\Control\Session Manager\Environment" + $RegKey = Get-ItemProperty -Path $RegPath + $NewValue = "{0};%SystemDrive%\WK\7-Zip;%SystemDrive%\WK\python;%SystemDrive%\WK\wimlib" -f $RegKey.Path + Set-ItemProperty -Path $RegPath -Name "Path" -Value $NewValue -Force + + # Replace Notepad + $RegPath = "HKLM:\WinPE-SW\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" + $NewValue = 'wscript "X:\WK\NotepadPlusPlus\npp.vbs"' + New-Item -Path $RegPath -Force + New-ItemProperty -Path $RegPath -Name "Debugger" -Value $NewValue -Force -## Done ## -Pop-Location + # Unload registry hives + Start-Sleep -Seconds 1 + WKRun -Cmd $Reg -ArgumentList @("unload", "HKLM\WinPE-SW") + WKRun -Cmd $Reg -ArgumentList @("unload", "HKLM\WinPE-SYS") + + # Unmount image + Write-Host "Dismounting image..." + $ArgumentList = @("/Unmount-Image", "/MountDir:'$Mount'", "/Commit") + WKRun -Cmd $DISM -ArgumentList $ArgumentList -SplitWindow + + # Create ISO + $ArgumentList = @("/iso", $PEFiles, "wk-winpe-$Date-$Arch.iso") + $Cmd = "{0}\MakeWinPEMedia.cmd" -f $Env:WinPERoot + WKRun -Cmd $Cmd -ArgumentList $ArgumentList -SplitWindow + } + + ## Done ## + Pop-Location +} diff --git a/.gitignore b/.gitignore index 28435552..c9141162 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,6 @@ .bin/tmp Drivers Logs +PEFiles/ Scripts/__pycache__ mount -pe_files \ No newline at end of file From 23b7dc89ca09900c898b04d6a1e1a339257a4474 Mon Sep 17 00:00:00 2001 From: Alan Mason <1923621+2Shirt@users.noreply.github.com> Date: Mon, 27 Nov 2017 18:09:30 -0800 Subject: [PATCH 5/8] Updated build_pe.ps1 --- .bin/Scripts/build_pe.ps1 | 58 ++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/.bin/Scripts/build_pe.ps1 b/.bin/Scripts/build_pe.ps1 index 4d1570b8..fff02e3d 100644 --- a/.bin/Scripts/build_pe.ps1 +++ b/.bin/Scripts/build_pe.ps1 @@ -3,6 +3,9 @@ ## Init ## #Requires -Version 3.0 #Requires -RunAsAdministrator +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 @@ -10,7 +13,7 @@ $Root = (Get-Item $Bin -Force).Parent.FullName $Temp = "{0}\tmp" -f $Bin $Host.UI.RawUI.BackgroundColor = "Black" $Host.UI.RawUI.ForegroundColor = "White" -$ProgressPreference = 'silentlyContinue' +$ProgressPreference = "silentlyContinue" $SplitWindow = @() $DISM = "{0}\DISM.exe" -f $Env:DISMRoot $WinPEPackages = @( @@ -48,10 +51,10 @@ function Ask-User ($text = "Kotaero") { $text += " [Y/N]" while ($true) { $answer = read-host $text - if ($answer -imatch '^(y|yes)$') { + if ($answer -imatch "^(y|yes)$") { $answer = $true break - } elseif ($answer -imatch '^(n|no|nope)$') { + } elseif ($answer -imatch "^(n|no|nope)$") { $answer = $false break } @@ -102,8 +105,8 @@ function FindDynamicUrl ($SourcePage, $RegEx) { # Search for real url $Url = Get-Content "tmp_page" | Where-Object {$_ -imatch $RegEx} - $Url = $Url -ireplace '.*(a |)href="([^"]+)".*', '$2' - $Url = $Url -ireplace ".*(a |)href='([^']+)'.*", '$2' + $Url = $Url -ireplace '.*(a |)href="([^"]+)".*', "$2" + $Url = $Url -ireplace ".*(a |)href='([^']+)'.*", "$2" # Remove tmp_page Remove-Item "tmp_page" @@ -114,11 +117,15 @@ function WKPause ($Message = "Press Enter to continue... ") { Write-Host $Message -NoNewLine Read-Host } -function WKRun ($Cmd, $ArgumentList, [switch]$SplitWindow=$false) { - if (Test-Path Env:\ConEmuBuild) { - $ArgumentList += "-new_console:ns33V" - } +function WKRun ($Cmd, $ArgumentList) { Start-Process $Cmd -ArgumentList $ArgumentList -NoNewWindow -Wait + # Write-Host ("Cmd: == {0} ==" -f $Cmd) + # Write-Host ("ArgumentList:") + # foreach ($a in $ArgumentList) { + # Write-Host ("`t == {0} ==" -f $a) + # } + # Write-Host ("Check: == {0} ==" -f $Check) + # Write-Host ("SplitWindow: == {0} ==" -f $SplitWindow) } ## PowerShell equivalent of Python's "if __name__ == '__main__'" @@ -127,7 +134,7 @@ function WKRun ($Cmd, $ArgumentList, [switch]$SplitWindow=$false) { # Using answer: https://stackoverflow.com/a/5582692 # Asked by: https://stackoverflow.com/users/65164/mark-mascolino # Answer by: https://stackoverflow.com/users/696808/bacon-bits -if ($MyInvocation.InvocationName -ne '.') { +if ($MyInvocation.InvocationName -ne ".") { Clear-Host Write-Host "Wizard Kit: Windows PE Build Tool`n" @@ -145,12 +152,12 @@ if ($MyInvocation.InvocationName -ne '.') { # Copy WinPE files Write-Host "Copying files..." $Cmd = ("{0}\copype.cmd" -f $Env:WinPERoot) - WKRun -Cmd $Cmd -ArgumentList @($Arch, $PEFiles) -SplitWindow + WKRun -Cmd $Cmd -ArgumentList @($Arch, $PEFiles) # 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)') { + if ($Item.Name -inotmatch "^(boot|efi|en-us|sources|fonts|resources|bcd|memtest)") { Remove-Item -Path $Item.FullName -Recurse -Force } } @@ -158,13 +165,14 @@ if ($MyInvocation.InvocationName -ne '.') { # Mount image Write-Host "Mounting image..." + New-Item -Path $Mount -ItemType "directory" -Force | Out-Null $ArgumentList = @( "/Mount-Image", - "/ImageFile:'$PEFiles\media\sources\boot.wim'", + ('/ImageFile:"{0}\media\sources\boot.wim"' -f $PEFiles), "/Index:1", - "/MountDir:'$Mount'" + ('/MountDir:"{0}"' -f $Mount) ) - WKRun -Cmd $DISM -ArgumentList $ArgumentList -SplitWindow + WKRun -Cmd $DISM -ArgumentList $ArgumentList # Add packages Write-Host "Adding packages..." @@ -172,14 +180,17 @@ if ($MyInvocation.InvocationName -ne '.') { $PackagePath = "{0}\{1}\WinPE_OCs" -f $Env:WinPERoot, $Arch $ArgumentList = @( "/Add-Package", - "/Image:'$Mount'", - "/PackagePath:'$PackagePath'" + ('/Image:"{0}"' -f $Mount), + ('/PackagePath:"{0}"' -f $PackagePath) ) - WKRun -Cmd $DISM -ArgumentList $ArgumentList -SplitWindow + WKRun -Cmd $DISM -ArgumentList $ArgumentList } # Set RamDisk size - $ArgumentList = @("/Image:'$Mount'", "/Set-ScratchSpace:512") + $ArgumentList = @( + ('/Image:"{0}"' -f $Mount), + "/Set-ScratchSpace:512" + ) WKRun -Cmd $DISM -ArgumentList $ArgumentList # Add WK tools @@ -228,13 +239,16 @@ if ($MyInvocation.InvocationName -ne '.') { # Unmount image Write-Host "Dismounting image..." - $ArgumentList = @("/Unmount-Image", "/MountDir:'$Mount'", "/Commit") - WKRun -Cmd $DISM -ArgumentList $ArgumentList -SplitWindow + $ArgumentList = @( + "/Unmount-Image", + ('/MountDir:"{0}"' -f $Mount), + "/Commit") + WKRun -Cmd $DISM -ArgumentList $ArgumentList # Create ISO $ArgumentList = @("/iso", $PEFiles, "wk-winpe-$Date-$Arch.iso") $Cmd = "{0}\MakeWinPEMedia.cmd" -f $Env:WinPERoot - WKRun -Cmd $Cmd -ArgumentList $ArgumentList -SplitWindow + WKRun -Cmd $Cmd -ArgumentList $ArgumentList } ## Done ## From 613f4eee376b1b1f42ba02041e33a16b401aa28c Mon Sep 17 00:00:00 2001 From: Alan Mason <1923621+2Shirt@users.noreply.github.com> Date: Mon, 27 Nov 2017 20:24:04 -0800 Subject: [PATCH 6/8] build_pe.ps1 updated and working --- .bin/Scripts/build_pe.ps1 | 120 ++++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 57 deletions(-) diff --git a/.bin/Scripts/build_pe.ps1 b/.bin/Scripts/build_pe.ps1 index fff02e3d..621097f2 100644 --- a/.bin/Scripts/build_pe.ps1 +++ b/.bin/Scripts/build_pe.ps1 @@ -1,4 +1,4 @@ -# Wizard Kit: Windows PE Build Tool +# Wizard Kit: Windows PE Build Tool ## Init ## #Requires -Version 3.0 @@ -13,38 +13,55 @@ $Root = (Get-Item $Bin -Force).Parent.FullName $Temp = "{0}\tmp" -f $Bin $Host.UI.RawUI.BackgroundColor = "Black" $Host.UI.RawUI.ForegroundColor = "White" -$ProgressPreference = "silentlyContinue" +# $ProgressPreference = "silentlyContinue" $SplitWindow = @() -$DISM = "{0}\DISM.exe" -f $Env:DISMRoot $WinPEPackages = @( "WinPE-EnhancedStorage.cab", + "en-us\WinPE-EnhancedStorage_en-us.cab", "WinPE-FMAPI.cab", "WinPE-WMI.cab", - "WinPE-EnhancedStorage_en-us.cab", - "WinPE-WMI_en-us.cab" + "en-us\WinPE-WMI_en-us.cab" ) # Install WinPE-WMI before you install WinPE-NetFX. # "WinPE-NetFx.cab", - # "WinPE-NetFx_en-us.cab", + # "en-us\WinPE-NetFx_en-us.cab", # Install WinPE-WMI and WinPE-NetFX before you install WinPE-Scripting. # "WinPE-Scripting.cab", - # "WinPE-Scripting_en-us.cab", + # "en-us\WinPE-Scripting_en-us.cab", # Install WinPE-WMI, WinPE-NetFX, and WinPE-Scripting before you install WinPE-PowerShell. # "WinPE-PowerShell.cab", - # "WinPE-PowerShell_en-us.cab", + # "en-us\WinPE-PowerShell_en-us.cab", # Install WinPE-WMI, WinPE-NetFX, WinPE-Scripting, and WinPE-PowerShell before you install WinPE-DismCmdlets. # "WinPE-DismCmdlets.cab", - # "WinPE-DismCmdlets_en-us.cab", + # "en-us\WinPE-DismCmdlets_en-us.cab", # Install WinPE-WMI, WinPE-NetFX, WinPE-Scripting, and WinPE-PowerShell before you install WinPE-SecureBootCmdlets. # "WinPE-SecureBootCmdlets.cab", # Install WinPE-WMI, WinPE-NetFX, WinPE-Scripting, and WinPE-PowerShell before you install WinPE-StorageWMI. # "WinPE-StorageWMI.cab", - # "WinPE-StorageWMI_en-us.cab", + # "en-us\WinPE-StorageWMI_en-us.cab", + +## Fake DandISetEnv.bat ## +# $DVars = @( + # @("DISMRoot", "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\DISM"), + # @("BCDBootRoot", "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\BCDBoot"), + # @("OSCDImgRoot", "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\Oscdimg"), + # @("WdsmcastRoot", "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\Wdsmcast"), + # @("HelpIndexerRoot", "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\HelpIndexer"), + # @("WSIMRoot", "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\WSIM"), + # @("WinPERoot", "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment") +# ) +# foreach ($d in $DVars) { + # $varName = $d[0] + # $varValue = $d[1] + # Set-Item -Path Env:$varName -Value $varValue + # Set-Item -Path Env:PATH -Value ($Env:PATH + ";$varValue") +# } +$DISM = "{0}\DISM.exe" -f $Env:DISMRoot ## Functions ## function Ask-User ($text = "Kotaero") { @@ -117,16 +134,6 @@ function WKPause ($Message = "Press Enter to continue... ") { Write-Host $Message -NoNewLine Read-Host } -function WKRun ($Cmd, $ArgumentList) { - Start-Process $Cmd -ArgumentList $ArgumentList -NoNewWindow -Wait - # Write-Host ("Cmd: == {0} ==" -f $Cmd) - # Write-Host ("ArgumentList:") - # foreach ($a in $ArgumentList) { - # Write-Host ("`t == {0} ==" -f $a) - # } - # Write-Host ("Check: == {0} ==" -f $Check) - # Write-Host ("SplitWindow: == {0} ==" -f $SplitWindow) -} ## PowerShell equivalent of Python's "if __name__ == '__main__'" # Code based on StackOverflow comments @@ -135,10 +142,17 @@ function WKRun ($Cmd, $ArgumentList) { # Asked by: https://stackoverflow.com/users/65164/mark-mascolino # Answer by: https://stackoverflow.com/users/696808/bacon-bits if ($MyInvocation.InvocationName -ne ".") { - Clear-Host + # Clear-Host Write-Host "Wizard Kit: Windows PE Build Tool`n" ## Prep ## + try { + Import-Module -Name $Env:DISMRoot -ErrorAction "stop" + } + catch { + Write-Host -ForegroundColor "Red" "ERROR: Failed to load DISM CmdLet" + Abort + } Push-Location "$WD" $Date = Get-Date -UFormat "%Y-%m-%d" MakeClean @@ -152,7 +166,7 @@ if ($MyInvocation.InvocationName -ne ".") { # Copy WinPE files Write-Host "Copying files..." $Cmd = ("{0}\copype.cmd" -f $Env:WinPERoot) - WKRun -Cmd $Cmd -ArgumentList @($Arch, $PEFiles) + Start-Process $Cmd -ArgumentList @($Arch, $PEFiles) -NoNewWindow -Wait # Remove unwanted items foreach ($SubDir in @("media", "media\Boot", "media\EFI\Microsoft\Boot")) { @@ -166,24 +180,14 @@ if ($MyInvocation.InvocationName -ne ".") { # Mount image Write-Host "Mounting image..." New-Item -Path $Mount -ItemType "directory" -Force | Out-Null - $ArgumentList = @( - "/Mount-Image", - ('/ImageFile:"{0}\media\sources\boot.wim"' -f $PEFiles), - "/Index:1", - ('/MountDir:"{0}"' -f $Mount) - ) - WKRun -Cmd $DISM -ArgumentList $ArgumentList + Mount-WindowsImage -Path $Mount -ImagePath "$PEFiles\media\sources\boot.wim" -Index 1 | Out-Null # Add packages - Write-Host "Adding packages..." + Write-Host "Adding packages:" foreach ($Package in $WinPEPackages) { - $PackagePath = "{0}\{1}\WinPE_OCs" -f $Env:WinPERoot, $Arch - $ArgumentList = @( - "/Add-Package", - ('/Image:"{0}"' -f $Mount), - ('/PackagePath:"{0}"' -f $PackagePath) - ) - WKRun -Cmd $DISM -ArgumentList $ArgumentList + $PackagePath = ("{0}\{1}\WinPE_OCs\{2}" -f $Env:WinPERoot, $Arch, $Package) + Write-Host " $Package..." + Add-WindowsPackage –PackagePath $PackagePath –Path $Mount | Out-Null } # Set RamDisk size @@ -191,7 +195,7 @@ if ($MyInvocation.InvocationName -ne ".") { ('/Image:"{0}"' -f $Mount), "/Set-ScratchSpace:512" ) - WKRun -Cmd $DISM -ArgumentList $ArgumentList + Start-Process $DISM -ArgumentList $ArgumentList -NoNewWindow -Wait # Add WK tools Write-Host "Copying tools..." @@ -202,55 +206,57 @@ if ($MyInvocation.InvocationName -ne ".") { } else { $DestIni = "$Mount\WK\HWiNFO\HWiNFO32.INI" } - Move-Item -Path "$Root\WK\HWiNFO\HWiNFO.INI" -Destination $DestIni -Force + Move-Item -Path "$Mount\WK\HWiNFO\HWiNFO.INI" -Destination $DestIni -Force Copy-Item -Path "$Root\WinPE.jpg" -Destination "$Mount\WK\ConEmu\ConEmu.jpg" -Recurse -Force Copy-Item -Path "$Root\Scripts" -Destination "$Mount\WK\Scripts" -Recurse -Force # Add System32 items - Copy-Item -Path "$Root\System32" -Destination "$Mount\Windows\System32" -Recurse -Force + Copy-Item -Path "$Root\System32\*" -Destination "$Mount\Windows\System32" -Recurse -Force $ArgumentList = @("/f", "$Mount\Windows\System32\winpe.jpg", "/a") - WKRun -Cmd "C:\Windows\System32\takeown.exe" -ArgumentList $ArgumentList + Start-Process "C:\Windows\System32\takeown.exe" -ArgumentList $ArgumentList -NoNewWindow -Wait $ArgumentList = @("$Mount\Windows\System32\winpe.jpg", "/grant", "Administrators:F") - WKRun -Cmd "C:\Windows\System32\icacls.exe" -ArgumentList $ArgumentList + Start-Process "C:\Windows\System32\icacls.exe" -ArgumentList $ArgumentList -NoNewWindow -Wait Copy-Item -Path "$Root\WinPE.jpg" -Destination "$Mount\Windows\System32\winpe.jpg" -Recurse -Force # Update registry Write-Host "Updating Registry..." $Reg = "C:\Windows\System32\reg.exe" - WKRun -Cmd $Reg -ArgumentList @("load", "HKLM\WinPE-SW", "$Mount\Windows\System32\config\SOFTWARE") - WKRun -Cmd $Reg -ArgumentList @("load", "HKLM\WinPE-SYS", "$Mount\Windows\System32\config\SYSTEM") + Start-Process $Reg -ArgumentList @("load", "HKLM\WinPE-SW", "$Mount\Windows\System32\config\SOFTWARE") -NoNewWindow -Wait + Start-Process $Reg -ArgumentList @("load", "HKLM\WinPE-SYS", "$Mount\Windows\System32\config\SYSTEM") -NoNewWindow -Wait # Add 7-Zip and Python to path $RegPath = "HKLM:\WinPE-SYS\ControlSet001\Control\Session Manager\Environment" $RegKey = Get-ItemProperty -Path $RegPath $NewValue = "{0};%SystemDrive%\WK\7-Zip;%SystemDrive%\WK\python;%SystemDrive%\WK\wimlib" -f $RegKey.Path - Set-ItemProperty -Path $RegPath -Name "Path" -Value $NewValue -Force + Set-ItemProperty -Path $RegPath -Name "Path" -Value $NewValue -Force | Out-Null # Replace Notepad $RegPath = "HKLM:\WinPE-SW\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" $NewValue = 'wscript "X:\WK\NotepadPlusPlus\npp.vbs"' - New-Item -Path $RegPath -Force - New-ItemProperty -Path $RegPath -Name "Debugger" -Value $NewValue -Force + 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 1 - WKRun -Cmd $Reg -ArgumentList @("unload", "HKLM\WinPE-SW") - WKRun -Cmd $Reg -ArgumentList @("unload", "HKLM\WinPE-SYS") + Start-Sleep -Seconds 2 + Start-Process $Reg -ArgumentList @("unload", "HKLM\WinPE-SW") -NoNewWindow -Wait + Start-Process $Reg -ArgumentList @("unload", "HKLM\WinPE-SYS") -NoNewWindow -Wait # Unmount image Write-Host "Dismounting image..." - $ArgumentList = @( - "/Unmount-Image", - ('/MountDir:"{0}"' -f $Mount), - "/Commit") - WKRun -Cmd $DISM -ArgumentList $ArgumentList + Dismount-WindowsImage -Path $Mount -Save # Create ISO - $ArgumentList = @("/iso", $PEFiles, "wk-winpe-$Date-$Arch.iso") + $ArgumentList = @("/iso", $PEFiles, "$Root\wk-winpe-$Date-$Arch.iso") $Cmd = "{0}\MakeWinPEMedia.cmd" -f $Env:WinPERoot - WKRun -Cmd $Cmd -ArgumentList $ArgumentList + Start-Process $Cmd -ArgumentList $ArgumentList -NoNewWindow -Wait } ## Done ## Pop-Location + WKPause "Press Enter to exit... " } From 3ca0ab2079c1fa7bc75dbeb858bfc09123e5f292 Mon Sep 17 00:00:00 2001 From: Alan Mason <1923621+2Shirt@users.noreply.github.com> Date: Mon, 27 Nov 2017 20:24:17 -0800 Subject: [PATCH 7/8] Added WinPE.jpg --- WinPE.jpg | Bin 0 -> 171809 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 WinPE.jpg diff --git a/WinPE.jpg b/WinPE.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51eeb3c8a48ae80018235a8f2f058ed3fe2fc183 GIT binary patch literal 171809 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%0AJSE%1!n5d`N%E`&!@1p$J7euxYy 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�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

Nv&N+`nd&>6MFAWg_6e4sF44AjAU0%? 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 Date: Mon, 27 Nov 2017 20:41:53 -0800 Subject: [PATCH 8/8] Removed make.cmd --- .bin/Scripts/build_pe.ps1 | 2 +- make.cmd | 177 -------------------------------------- 2 files changed, 1 insertion(+), 178 deletions(-) delete mode 100644 make.cmd diff --git a/.bin/Scripts/build_pe.ps1 b/.bin/Scripts/build_pe.ps1 index 621097f2..4a08a1b4 100644 --- a/.bin/Scripts/build_pe.ps1 +++ b/.bin/Scripts/build_pe.ps1 @@ -11,6 +11,7 @@ $WD = $(Split-Path $MyInvocation.MyCommand.Path) $Bin = (Get-Item $WD -Force).Parent.FullName $Root = (Get-Item $Bin -Force).Parent.FullName $Temp = "{0}\tmp" -f $Bin +$Date = Get-Date -UFormat "%Y-%m-%d" $Host.UI.RawUI.BackgroundColor = "Black" $Host.UI.RawUI.ForegroundColor = "White" # $ProgressPreference = "silentlyContinue" @@ -154,7 +155,6 @@ if ($MyInvocation.InvocationName -ne ".") { Abort } Push-Location "$WD" - $Date = Get-Date -UFormat "%Y-%m-%d" MakeClean ## Build ## diff --git a/make.cmd b/make.cmd deleted file mode 100644 index 1e47ff46..00000000 --- a/make.cmd +++ /dev/null @@ -1,177 +0,0 @@ -@echo off - -:Init -setlocal EnableDelayedExpansion -title WK-WinPE creation tool -color 1b -pushd %~dp0 - -:Flags -for %%f in (%*) do ( - if /i "%%f" == "/DEBUG" (@echo on) -) - -:GetDate -:: Credit to SS64.com Code taken from http://ss64.com/nt/syntax-getdate.html -:: Use WMIC to retrieve date and time in ISO 8601 format. -FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO ( -IF "%%~L"=="" goto s_done - Set _yyyy=%%L - Set _mm=00%%J - Set _dd=00%%G - Set _hour=00%%H - SET _minute=00%%I -) -:s_done -:: Pad digits with leading zeros -Set _mm=%_mm:~-2% -Set _dd=%_dd:~-2% -Set _hour=%_hour:~-2% -Set _minute=%_minute:~-2% -Set iso_date=%_yyyy%-%_mm%-%_dd% - -:Variables -set "wd=%cd%" -set "winpe_ocs=%programfiles(x86)%\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment" -set "pe_out=!wd!\pe_out" - -:CheckForCleanup -echo Scanning for old build folders... -set "found_old=" -if exist "!wd!\mount" ( - echo. Found: "!wd!\mount" - set "found_old=true" -) -if exist "!wd!\pe_files" ( - echo. Found: "!wd!\pe_files" - set "found_old=true" -) -if defined found_old ( - goto Cleanup -) else ( - echo. No build folders found. -) -goto :BuildBoth - -:Cleanup -echo. -choice /t 30 /c YN /d N /m "Delete the above folders?" -if %errorlevel% neq 1 goto Abort -rmdir /s /q "!wd!\mount" -rmdir /s /q "!wd!\pe_files" - -:BuildBoth -for %%a in (amd64 x86) do ( - rem set vars - set "arch=%%a" - set "drivers=!wd!\Drivers\!arch!" - set "mount=!wd!\mount\!arch!" - set "pe_files=!wd!\pe_files\!arch!" - set "winpe_ocs=%programfiles(x86)%\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\!arch!\WinPE_OCs" - - rem Copy main files - call copype.cmd !arch! "!pe_files!" - for %%t in (bg-bg cs-cz da-dk de-de el-gr en-gb es-es es-mx et-ee fi-fi fr-ca fr-fr hr-hr hu-hu it-it ja-jp ko-kr lt-lt lv-lv nb-no nl-nl pl-pl pt-br pt-pt ro-ro ru-ru sk-sk sl-si sr-latn-cs sr-latn-rs sv-se tr-tr uk-ua zh-cn zh-hk zh-tw) do ( - rmdir /s /q "!pe_files!\media\%%t" - rmdir /s /q "!pe_files!\media\Boot\%%t" - rmdir /s /q "!pe_files!\media\EFI\Microsoft\Boot\%%t" - ) - - rem Mount Image - mkdir "!mount!" - dism /mount-image /imagefile:"!pe_files!\media\sources\boot.wim" /index:1 /mountdir:"!mount!" /logpath:"dism.log" - - rem Add Packages - More info: https://msdn.microsoft.com/en-us/library/windows/hardware/dn938382.aspx - dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\WinPE-EnhancedStorage.cab" /logpath:"dism.log" - dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\WinPE-FMAPI.cab" /logpath:"dism.log" - dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\WinPE-WMI.cab" /logpath:"dism.log" - dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\en-us\WinPE-EnhancedStorage_en-us.cab" /logpath:"dism.log" - dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\en-us\WinPE-WMI_en-us.cab" /logpath:"dism.log" - - rem rem Install WinPE-WMI before you install WinPE-NetFX. - rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\WinPE-NetFx.cab" /logpath:"dism.log" - rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\en-us\WinPE-NetFx_en-us.cab" /logpath:"dism.log" - - rem rem Install WinPE-WMI and WinPE-NetFX before you install WinPE-Scripting. - rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\WinPE-Scripting.cab" /logpath:"dism.log" - rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\en-us\WinPE-Scripting_en-us.cab" /logpath:"dism.log" - - rem rem Install WinPE-WMI, WinPE-NetFX, and WinPE-Scripting before you install WinPE-PowerShell. - rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\WinPE-PowerShell.cab" /logpath:"dism.log" - rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\en-us\WinPE-PowerShell_en-us.cab" /logpath:"dism.log" - - rem rem Install WinPE-WMI, WinPE-NetFX, WinPE-Scripting, and WinPE-PowerShell before you install WinPE-DismCmdlets. - rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\WinPE-DismCmdlets.cab" /logpath:"dism.log" - rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\en-us\WinPE-DismCmdlets_en-us.cab" /logpath:"dism.log" - - rem rem Install WinPE-WMI, WinPE-NetFX, WinPE-Scripting, and WinPE-PowerShell before you install WinPE-SecureBootCmdlets. - rem rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\WinPE-SecureBootCmdlets.cab" /logpath:"dism.log" - - rem rem Install WinPE-WMI, WinPE-NetFX, WinPE-Scripting, and WinPE-PowerShell before you install WinPE-StorageWMI. - rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\WinPE-StorageWMI.cab" /logpath:"dism.log" - rem dism /add-package /image:"!mount!" /packagepath:"!winpe_ocs!\en-us\WinPE-StorageWMI_en-us.cab" /logpath:"dism.log" - - rem Add Drivers - REM dism /add-driver /image:"!mount!" /driver:"!drivers!" /recurse /logpath:"dism.log" - - rem Force RamDisk size to try and avoid capture-image errors - dism /image:"!mount!" /set-scratchspace:512 - - rem Add WK Stuff - del "!wd!\WK\Scripts\WK.log" - mkdir "!mount!\WK" - robocopy /s /r:3 /w:0 "!wd!\WK\!arch!" "!mount!\WK" - mkdir "!mount!\WK\Scripts" - robocopy /s /r:3 /w:0 "!wd!\Scripts" "!mount!\WK\Scripts" - - rem Add System32 Stuff - copy /y "!wd!\System32\menu.cmd" "!mount!\Windows\System32\menu.cmd" - copy /y "!wd!\System32\Winpeshl.ini" "!mount!\Windows\System32\Winpeshl.ini" - - rem Background - takeown /f "!mount!\Windows\System32\winpe.jpg" /a - icacls "!mount!\Windows\System32\winpe.jpg" /grant administrators:F - copy /y "!wd!\System32\winpe.jpg" "!mount!\Windows\System32\winpe.jpg" - copy /y "!wd!\System32\winpe.jpg" "!mount!\WK\ConEmu\ConEmu.jpg" - - rem Registry Edits - reg load HKLM\WinPE-SW "!mount!\Windows\System32\config\SOFTWARE" - reg load HKLM\WinPE-SYS "!mount!\Windows\System32\config\SYSTEM" - - rem Add 7-Zip and Python to path - reg add "HKLM\WinPE-SYS\ControlSet001\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "%%SystemRoot%%\system32;%%SystemRoot%%;%%SystemRoot%%\System32\Wbem;%%SYSTEMROOT%%\System32\WindowsPowerShell\v1.0\;%%SystemDrive%%\WK\7-Zip;%%SystemDrive%%\WK\python;%%SystemDrive%%\WK\wimlib" /f - - rem Replace Notepad - reg add "HKLM\WinPE-SW\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v Debugger /t REG_SZ /d "X:\WK\NotepadPlusPlus\notepadplusplus.exe /z" /f - - rem Unload registry hives - reg unload HKLM\WinPE-SW - reg unload HKLM\WinPE-SYS - - rem Unmount Image - dism /unmount-image /mountdir:"!mount!" /commit - - rem Create ISO - del "wk-winpe-!iso_date!-!arch!.iso" - call makewinpemedia.cmd /iso "!pe_files!" "wk-winpe-!iso_date!-!arch!.iso" -) -goto Done - -:Abort -color 4e -echo. -echo Aborted. -goto Exit - -:Done -echo. -echo Done. -goto Exit - -:Exit -echo. -echo Press any key to exit... -pause>nul -popd -color -endlocal \ No newline at end of file