From bc8ae03488691ce45752774cc4350a5e6e11cd33 Mon Sep 17 00:00:00 2001 From: DESKTOP-AJSJJMA\Admin Date: Mon, 7 Nov 2022 12:33:01 -0800 Subject: 1.7 --- .../Activation_Troubleshoot.cmd | 584 +++++++++-- MAS/Separate-Files-Version/Change_Edition.cmd | 550 +++++++--- .../Check-Activation-Status-vbs.cmd | 3 +- .../Check-Activation-Status-wmi.cmd | 22 +- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 258 ++--- .../HWID-KMS38_Activation/BIN/ClipUp.exe | Bin 1354304 -> 0 bytes .../HWID-KMS38_Activation/BIN/Info.txt | 22 - .../HWID-KMS38_Activation/BIN/gatherosstate.exe | Bin 337920 -> 0 bytes .../HWID-KMS38_Activation/HWID_Activation.cmd | 1088 ++++++-------------- .../HWID-KMS38_Activation/KMS38_Activation.cmd | 902 ++++++---------- MAS/Separate-Files-Version/Install_HWID_Key.cmd | 275 ++--- .../Online_KMS_Activation/Activate.cmd | 226 ++-- 12 files changed, 1921 insertions(+), 2009 deletions(-) delete mode 100644 MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/ClipUp.exe delete mode 100644 MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/Info.txt delete mode 100644 MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/gatherosstate.exe (limited to 'MAS/Separate-Files-Version') diff --git a/MAS/Separate-Files-Version/Activation_Troubleshoot.cmd b/MAS/Separate-Files-Version/Activation_Troubleshoot.cmd index 4fcad36..e64325b 100644 --- a/MAS/Separate-Files-Version/Activation_Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Activation_Troubleshoot.cmd @@ -55,8 +55,7 @@ if not %errorlevel%==0 ( echo: echo Error: This is not a correct file. It has LF line ending issue. echo: -echo Press any key to exit... -pause >nul +ping 127.0.0.1 -n 6 > nul popd exit /b ) @@ -86,6 +85,7 @@ set cbs_log=%SystemRoot%\logs\cbs\cbs.log set "nceline=echo: &echo ==== ERROR ==== &echo:" set "eline=echo: &call :_color %Red% "==== ERROR ====" &echo:" set "line=_________________________________________________________________________________________________" +if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") ::======================================================================================================================================== @@ -135,7 +135,7 @@ goto at_done :: Elevate script as admin and pass arguments and preventing loop -%nul% reg query HKU\S-1-5-19 || ( +>nul fltmc || ( if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b %nceline% echo This script require administrator privileges. @@ -170,33 +170,43 @@ color 07 title Activation Troubleshoot mode con cols=77 lines=30 -echo: -echo: echo: echo: echo: _______________________________________________________________ echo: -echo: [1] ReadMe -echo: ___________________________________________________ +call :_color2 %_White% " [1] " %_Green% "Help" +echo: ___________________________________________________ echo: -echo: [2] Dism RestoreHealth -echo: [3] SFC Scannow -echo: +echo: [2] Dism RestoreHealth +echo: [3] SFC Scannow +echo: echo: [4] Rebuild Licensing Tokens -echo: [5] Clear Office vNext License -echo: ___________________________________________________ +echo: [5] Rebuild ClipSVC Licences +echo: [6] Clear Office vNext Licences +echo: ___________________________________________________ echo: -echo: [6] Solution: Office is not genuine banner -echo: [0] Exit +echo: [7] Rebuild WMI Repository +echo: [8] Fix: Issues Caused By Gaming Spoofers +echo: [9] Fix: Issues Caused By KB971033 In Windows 7 +echo: [G] Fix: Office Is Not Genuine Banner +echo: [E] Export Event Viewer Logs +echo: ___________________________________________________ +echo: +echo: [0] %_exitmsg% echo: _______________________________________________________________ echo: call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard :" -choice /C:1234560 /N +choice /C:123456789GE0 /N set _erl=%errorlevel% -if %_erl%==7 exit /b -if %_erl%==6 start https://massgrave.dev/office-license-is-not-genuine &goto at_menu -if %_erl%==5 goto:clearvnext +if %_erl%==12 exit /b +if %_erl%==11 goto:exportevtlogs +if %_erl%==10 start https://massgrave.dev/office-license-is-not-genuine &goto at_menu +if %_erl%==9 goto:fixwindows7 +if %_erl%==8 goto:fixspoofer +if %_erl%==7 goto:rewmi +if %_erl%==6 goto:clearvnext +if %_erl%==5 goto:reclipsvc if %_erl%==4 goto:retokens if %_erl%==3 goto:sfcscan if %_erl%==2 goto:dism_rest @@ -242,7 +252,7 @@ call :_color2 %_White% " - " %Gray% "Make sure the Windows update is properl echo: echo %line% echo: -choice /C:29 /N /M "> [9] Continue [2] Go back : " +choice /C:09 /N /M "> [9] Continue [0] Go back : " if %errorlevel%==1 goto at_menu cls @@ -260,12 +270,6 @@ echo dism /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHea echo: dism /online /cleanup-image /restorehealth /Logpath:"%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" /loglevel:4 -if not exist "!desktop!\" ( -echo: -call :_color %Red% "Desktop location is not detected. Failed to copy logs on the dekstop." -goto :at_back -) - if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% copy /y /b "%SystemRoot%\Temp\RHealth_DISM_%_time%.txt" "!desktop!\AT_Logs\RHealth_DISM_%_time%.txt" %nul% copy /y /b "%cbs_log%" "!desktop!\AT_Logs\RHealth_CBS_%_time%.txt" %nul% @@ -295,7 +299,7 @@ echo restarting the PC after each time to completely fix everything that it echo: echo %line% echo: -choice /C:29 /N /M "> [9] Continue [2] Go back : " +choice /C:09 /N /M "> [9] Continue [0] Go back : " if %errorlevel%==1 goto at_menu cls @@ -312,12 +316,6 @@ echo sfc /scannow echo: sfc /scannow -if not exist "!desktop!\" ( -echo: -call :_color %Red% "Desktop location is not detected. Failed to copy logs on the dekstop." -goto :at_back -) - if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% copy /y /b "%cbs_log%" "!desktop!\AT_Logs\SFC_CBS_%_time%.txt" %nul% @@ -346,15 +344,10 @@ echo - KMS option activated Office but Office activation page is not sh echo: echo %line% echo: -choice /C:29 /N /M "> [9] Continue [2] Go back : " +choice /C:09 /N /M "> [9] Continue [0] Go back : " if %errorlevel%==1 goto at_menu cls -mode con cols=115 lines=32 -%nul% %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" - - - echo: echo %line% echo: @@ -362,16 +355,30 @@ call :_color %Magenta% "Clearing Office vNext License" echo: setlocal DisableDelayedExpansion -set "_locl=%LocalAppData%\Microsoft\Office\Licenses" +set "_Local=%LocalAppData%" setlocal EnableDelayedExpansion -call :cleanfolder -set "_locl=%ProgramData%\Microsoft\Office\Licenses" -call :cleanfolder + +attrib -R "!ProgramData!\Microsoft\Office\Licenses" %nul% +attrib -R "!_Local!\Microsoft\Office\Licenses" %nul% +rd /s /q "!ProgramData!\Microsoft\Office\Licenses\" %nul% +rd /s /q "!_Local!\Microsoft\Office\Licenses\" %nul% + +if exist "!ProgramData!\Microsoft\Office\Licenses\" ( +echo Failed To Delete - !ProgramData!\Microsoft\Office\Licenses\ +) else ( +echo Deleted Folder - !ProgramData!\Microsoft\Office\Licenses\ +) + +if exist "!_Local!\Microsoft\Office\Licenses\" ( +echo Failed To Delete - !_Local!\Microsoft\Office\Licenses\ +) else ( +echo Deleted Folder - !_Local!\Microsoft\Office\Licenses\ +) echo: for %%# in ( HKCU\Software\Microsoft\Office\16.0\Common\Licensing -HKCU\Software\Microsoft\Office\16.0\Common\Identity +HKCU\Software\Microsoft\Office\16.0\Registration ) do ( reg query %%# %nul% && ( reg delete %%# /f %nul% && ( @@ -380,32 +387,12 @@ echo Deleted Registry - %%# echo Failed to Delete - %%# ) ) || ( -echo Already Clean - %%# +echo Deleted Registry - %%# ) ) goto :at_back -:cleanfolder - -2>nul dir /b /a "!_locl!\*" | %nul% findstr "^" && ( -pushd "!_locl!\" && ( -del /S /F /Q "!_locl!\*" -for /F "delims=" %%i in ('dir /b') do ( -RD /S /Q "%%i" %nul% -if not exist "!_locl!\%%i\" ( -echo Deleted Folder - !_locl!\%%i -) else ( -echo Failed To Delete - !_locl!\%%i -) -) -popd -) -) || ( -echo Already Clean - !_locl!\ -) -exit /b - ::======================================================================================================================================== :retokens @@ -432,11 +419,12 @@ call :_color2 %_White% " - " %Red% "Apply it only when it is necessary." echo: echo %line% echo: -choice /C:29 /N /M "> [9] Continue [2] Go back : " +choice /C:09 /N /M "> [9] Continue [0] Go back : " if %errorlevel%==1 goto at_menu cls +:cleanspptoken echo: echo %line% echo: @@ -496,7 +484,7 @@ sc qc osppsvc %nul% || ( echo: call :_color %Magenta% "OSPP based Office is not installed" call :_color %Magenta% "Skipping rebuilding OSPP tokens" -goto :cleanclipsvc +goto :repairoffice ) call :_color %Magenta% "Rebuilding OSPP Licensing Tokens" @@ -545,12 +533,6 @@ call :_color %Green% "tokens.dat file was rebuilt successfully." ::======================================================================================================================================== -:cleanclipsvc - -:: This section is removed - -::======================================================================================================================================== - :repairoffice echo: @@ -597,10 +579,11 @@ set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office %nul% reg query %_86%\ClickToRun /v InstallPath && (set "c2r16_86=Office 16.0 C2R x86" & set "c2r16repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe") set uwp16= -if %winbuild% GEQ 10240 reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msoxmled.exe" %nul% && ( +if %winbuild% GEQ 10240 ( dir /b "%ProgramFiles%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP dir /b "%ProgramW6432%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP dir /b "%ProgramFiles(x86)%\WindowsApps\Microsoft.Office.Desktop*" %nul% && set uwp16=Office 16.0 UWP +%psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" 1>nul && set uwp16=Office 16.0 UWP ) set /a counter=0 @@ -645,7 +628,7 @@ goto :repairend echo: ) else ( echo: -call :_color %_Yellow% "A Window will popup, in that Window you need to select Repair Option..." +call :_color %_Yellow% "A Window will popup, in that Window you need to select [Quick] Repair Option..." call :_color %_Yellow% "Press any key to continue..." echo: pause >nul @@ -691,6 +674,405 @@ echo %line% echo: echo: call :_color %Green% "Finished" +goto :at_back + +::======================================================================================================================================== + +:reclipsvc + +cls +mode 98, 30 +title Rebuild ClipSVC Licences + +if %winbuild% LSS 10240 ( +%eline% +echo Unsupported OS version Detected. +echo This command is supported only for Windows 10/11 and their Server equivalent.. +goto :at_back +) + +echo: +echo %line% +echo: +echo Notes: +echo: +echo - Rebuilding ClipSVC Licences helps in troubleshooting HWID-KMS38 activation issues. +echo: +echo - Do not run this option unless you are having issues in HWID-KMS38 activation. +echo: +echo - System restart is recommended after applying it. +echo: +echo %line% +echo: +choice /C:09 /N /M "> [9] Continue [0] Go back : " +if %errorlevel%==1 goto at_menu + +cls +echo: + +echo Stopping ClipSVC service... +call :_stopservice ClipSVC +timeout /t 2 %nul% + +echo: +echo Applying the command to Clean ClipSVC Licences... +echo rundll32 clipc.dll,ClipCleanUpState + +rundll32 clipc.dll,ClipCleanUpState + +if %winbuild% LEQ 10240 ( +call :_color %Green% "[Successful]" +) else ( +if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" ( +call :_color %Red% "[Failed]" +) else ( +call :_color %Green% "[Successful]" +) +) + +:: Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after +:: system restart. It needs to be deleted to activate the system without restart. + +set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" +set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" + +reg query "%RegKey%" %nul% && %nul% call :regownstart +reg delete "%RegKey%" /f %nul% + +echo: +echo Deleting a Volatile ^& Protected Registry Key... +echo [%RegKey%] +reg query "%RegKey%" %nul% && ( +call :_color %Red% "[Failed]" +echo Restart the system, that will delete this registry key automatically. +) || ( +call :_color %Green% "[Successful]" +) + +:: Clear HWID token related registry to fix activation incase if there is any corruption + +echo: +echo Deleting a IdentityCRL Registry Key... +echo [%_ident%] +reg delete "%_ident%" /f %nul% +reg query "%_ident%" %nul% && ( +call :_color %Red% "[Failed]" +) || ( +call :_color %Green% "[Successful]" +) + +echo: +echo Restarting [ClipSVC wlidsvc LicenseManager sppsvc] services... +for %%# in (ClipSVC wlidsvc LicenseManager sppsvc) do (net stop %%# /y %nul% & net start %%# /y %nul%) +goto :at_back + +::======================================================================================================================================== + +:fixspoofer + +cls +mode con cols=115 lines=32 +%nul% %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" +title Fix: Issues Caused By Gaming Spoofers + +%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( +%eline% +echo Powershell is not responding properly. Aborting." +goto :at_back +) + +echo: +echo %line% +echo: +echo Notes: +echo: +echo - Gaming unban/spoofers/cleaners often cause Windows activation issues. +echo: +call :_color2 %_White% " - " %Red% "Apply this fix ONLY if you have used these things." +echo: +echo - This option will fix files and registry permissions and rebuild licensing tokens. +echo: +echo - System restart is recommended after applying it. +echo: +echo %line% +echo: +choice /C:09 /N /M "> [9] Continue [0] Go back : " +if %errorlevel%==1 goto at_menu + +cls +echo: +echo Fixing registry and files permissions... +call :fixpermissions %nul% +goto :cleanspptoken + +:fixpermissions + +:: Thanks to skidaim for the fix + +takeown /F %windir%\System32\sppsvc.exe +icacls %windir%\System32 /grant administrators:F /T +icacls %windir%\System32\spp /grant administrators:F /T + +:: I know it's bad but people have messed up system32 permissions, that's why I don't recommend to run this unless users have messed up systems + +%psc% $acl = Get-Acl 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform'; $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' -AclObject $acl +%psc% $acl = Get-Acl 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SPP'; $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SPP' -AclObject $acl +%psc% $acl = Get-Acl 'HKLM:\SYSTEM\CurrentControlSet\Services\SPPSVC'; $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\SPPSVC' -AclObject $acl +%psc% $acl = Get-Acl 'HKLM:\SYSTEM\WPA'; $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path 'HKLM:\SYSTEM\WPA' -AclObject $acl +%psc% $acl = Get-Acl '%windir%\System32'; $rule = New-Object System.Security.AccessControl.FileSystemAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path '%windir%\System32' -AclObject $acl +%psc% $acl = Get-Acl '%windir%\System32\spp'; $rule = New-Object System.Security.AccessControl.FileSystemAccessRule ('NT Service\sppsvc','FullControl','ContainerInherit, ObjectInherit','None','Allow'); $acl.SetAccessRule($rule); Set-Acl -Path '%windir%\System32\spp' -AclObject $acl +exit /b + +::======================================================================================================================================== + +:fixwindows7 + +cls +mode 98, 30 +title Fix: Issues Caused By KB971033 In Windows 7 + +if %winbuild% GEQ 9200 ( +%eline% +echo Unsupported OS version Detected. +echo This option is supported only for Windows 7 and it's Server equivalent. +goto :at_back +) + +echo: +echo %line% +echo: +echo Notes: +echo: +echo - This option fixes issues caused by Update KB971033 in Windows 7. +echo https://support.microsoft.com/en-us/help/4487266 +echo: +echo %line% +echo: +choice /C:01 /N /M "> [1] Continue [0] Go back : " +if %errorlevel%==1 goto at_menu + +cls +echo: + +echo Checking Update KB971033... +dism /online /get-packages | find /i "Microsoft-Windows-Security-WindowsActivationTechnologies-package~31bf3856ad364e35~amd64~~7.1.7600.16395" 1>nul && ( +echo [Found] +echo Uninstalling it... +) || ( +echo [Not Found] +) + +wusa /uninstall /quiet /norestart /kb:971033 + +echo: +echo Applying Fixes... +echo: + +net stop sppuinotify /y +sc config sppuinotify start= disabled +net stop sppsvc /y +del %windir%\system32\7B296FB0-376B-497e-B012-9C450E1B7327-5P-0.C7483456-A289-439d-8115-601632D005A0 /ah +del %windir%\system32\7B296FB0-376B-497e-B012-9C450E1B7327-5P-1.C7483456-A289-439d-8115-601632D005A0 /ah +del %windir%\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat +del %windir%\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\cache\cache.dat +cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% +sc config sppuinotify start= demand + +goto :at_back + +::======================================================================================================================================== + +:rewmi + +cls +mode 98, 30 +title Rebuild WMI Repository + +:: https://techcommunity.microsoft.com/t5/ask-the-performance-team/wmi-repository-corruption-or-not/ba-p/375484 + +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( +%eline% +echo WMI rebuild is not recommended on Windows Server. Aborting... +goto :at_back +) + +echo: +echo Initializing... + +set _wmic=0 +for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" set _wmic=1 + +set error= +if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul +if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul +if %errorlevel% NEQ 0 set error=1 +winmgmt /verifyrepository %nul% +if %errorlevel% NEQ 0 set error=1 + +cls +echo: +echo %line% +echo: +if defined error ( +echo WMI Status - [Not Responding] %_wmic% +) else ( +call :_color %_Green% " WMI Status - [Working]" +) +echo: +echo Notes: +echo: +call :_color2 %_White% " - " %Magenta% "WMI rebuild can cause some 3rd party apps to not work until reinstall." +echo: +call :_color2 %_White% " - " %Red% "Apply this fix ONLY if WMI is not working." +echo: +echo %line% +echo: +choice /C:09 /N /M "> [9] Continue [0] Go back : " +if %errorlevel%==1 goto at_menu + +:: Below fixes are taken from https://kb.acronis.com/content/62731 + +cls +echo: + +sc query Winmgmt %nul% || ( +%eline% +echo Winmgmt service is not installed. Aborting... +goto :at_back +) + +echo Disabling Winmgmt service... +sc config Winmgmt start= disabled %nul% +if %errorlevel% EQU 0 ( +call :_color %Green% "[Successful]" +) else ( +call :_color %Red% "[Failed] Aborting..." +goto :wmifixend +) + +echo: +echo Stopping Winmgmt service... +call :_stopservice Winmgmt +call :_stopservice Winmgmt +sc query Winmgmt | find /i "1 STOPPED" %nul% && ( +call :_color %Green% "[Successful]" +) || ( +call :_color %Red% "[Failed] Aborting..." +goto :wmifixend +) + +echo: +echo Deleting WMI repository... +if exist "%windir%\System32\wbem\repository\" rmdir /s /q "%windir%\System32\wbem\repository\" %nul% +if exist "%windir%\System32\wbem\repository\" ( +call :_color %Red% "[Failed]" +) else ( +call :_color %Green% "[Successful]" +) + +echo: +echo Enabling Winmgmt service... +sc config Winmgmt start= auto %nul% +if %errorlevel% EQU 0 ( +call :_color %Green% "[Successful]" +) else ( +call :_color %Red% "[Failed]" +) + +echo: +echo Checking WMI... +if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul +if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul +if %errorlevel% NEQ 0 ( +call :_color %Red% "[Not Responding]" +) else ( +call :_color %Green% "[Working]" +) + +goto :at_back + +:wmifixend + +echo: +echo Enabling Winmgmt service... +sc config Winmgmt start= auto %nul% +if %errorlevel% EQU 0 ( +call :_color %Green% "[Successful]" +) else ( +call :_color %Red% "[Failed]" +) + +goto :at_back + +::======================================================================================================================================== + +:exportevtlogs + +cls +mode con cols=125 lines=32 +%nul% %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=500;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" +title Export Event Viewer Logs + +set tdir=%SystemRoot%\Temp\_EventLogs +if exist %tdir%\. rd /s /q %tdir%\ %nul% +if exist %tdir%\ ( +%eline% +echo Failed to delete below folder. Aborting... +echo %tdir%\ +goto :at_back +) + +md %tdir%\ + +echo: +echo Creating archive file of Event logs... + +set _time= +for /f %%a in ('%psc% "Get-Date -format HH_mm_ss"') do set _time=%%a +%nul% robocopy %SystemRoot%\System32\winevt\Logs\ %tdir%\ + +:: https://stackoverflow.com/a/46268232 + +set "ddf="%SystemRoot%\Temp\ddf"" +%nul% del /q /f %ddf% +echo/.New Cabinet>%ddf% +echo/.set Cabinet=ON>>%ddf% +echo/.set CabinetFileCountThreshold=0;>>%ddf% +echo/.set Compress=ON>>%ddf% +echo/.set CompressionType=LZX>>%ddf% +echo/.set CompressionLevel=7;>>%ddf% +echo/.set CompressionMemory=21;>>%ddf% +echo/.set FolderFileCountThreshold=0;>>%ddf% +echo/.set FolderSizeThreshold=0;>>%ddf% +echo/.set GenerateInf=OFF>>%ddf% +echo/.set InfFileName=nul>>%ddf% +echo/.set MaxCabinetSize=0;>>%ddf% +echo/.set MaxDiskFileCount=0;>>%ddf% +echo/.set MaxDiskSize=0;>>%ddf% +echo/.set MaxErrors=1;>>%ddf% +echo/.set RptFileName=nul>>%ddf% +echo/.set UniqueFiles=ON>>%ddf% +pushd "%tdir%\" +for /f "tokens=* delims=" %%D in ('dir /a:-D/b/s "%tdir%\"') do ( + echo/"%%~fD" /inf=no;>>%ddf% +) +makecab /F %ddf% /D DiskDirectory1="" /D CabinetNameTemplate=%tdir%\Logs.cab +del /q /f %ddf% +popd + +if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul% +copy /y /b "%tdir%\Logs.cab" "!desktop!\AT_Logs\EventLogs_%_time%.cab" %nul% +if exist %tdir%\. rd /s /q %tdir%\ %nul% + +echo: +if exist "!desktop!\AT_Logs\EventLogs_%_time%.cab" ( +call :_color %Green% "[Successful]" +echo EventLogs_%_time%.cab created inside AT_Logs folder on the dekstop. +) else ( +call :_color %Red% "[Failed]" +) + +goto :at_back ::======================================================================================================================================== @@ -708,7 +1090,7 @@ goto :at_menu :at_done echo: -echo Press any key to exit... +echo Press any key to %_exitmsg%... pause >nul exit /b @@ -779,7 +1161,57 @@ del /S /F /Q "%%#*.dat" ) exit /b -::========================================================================================================================================\ +::======================================================================================================================================== + +:regownstart + +setlocal +set "TMP=%SystemRoot%\Temp" +set "TEMP=%SystemRoot%\Temp" +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regown\:.*';iex ($f[1]);" +endlocal +exit /b + +:: Below code takes ownership of a volatile registry key and deletes it +:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState + +:: Thanks to Remko Weijnen for the code and thanks to abbodi1406 for the help +:: remkoweijnen.nl/blog/2012/01/16/take-ownership-of-a-registry-key-in-powershell/ + +:regown: +$definition = @" +using System; +using System.Runtime.InteropServices; +namespace Win32Api +{ + public class NtDll + { + [DllImport("ntdll.dll", EntryPoint="RtlAdjustPrivilege")] + public static extern int RtlAdjustPrivilege(int Privilege, bool Enable, bool CurrentThread, ref bool Enabled); + } +} +"@ + +Add-Type -TypeDefinition $definition -PassThru | Out-Null +[Win32Api.NtDll]::RtlAdjustPrivilege(9, $true, $false, [ref]$false) | Out-Null + +$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544') +$IDN = ($SID.Translate([System.Security.Principal.NTAccount])).Value +$Admin = New-Object System.Security.Principal.NTAccount($IDN) + +$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState' +$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'takeownership') + +$acl = $key.GetAccessControl() +$acl.SetOwner($Admin) +$key.SetAccessControl($acl) + +$rule = New-Object System.Security.AccessControl.RegistryAccessRule($Admin,"FullControl","Allow") +$acl.SetAccessRule($rule) +$key.SetAccessControl($acl) +:regown: + +::======================================================================================================================================== :_color diff --git a/MAS/Separate-Files-Version/Change_Edition.cmd b/MAS/Separate-Files-Version/Change_Edition.cmd index 384fabb..06dd798 100644 --- a/MAS/Separate-Files-Version/Change_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Edition.cmd @@ -14,6 +14,10 @@ +:: To stage current edition while changing edition with CBS Upgrade Method, change 0 to 1 in below line +set _stg=0 + + ::======================================================================================================================================== @@ -55,8 +59,7 @@ if not %errorlevel%==0 ( echo: echo Error: This is not a correct file. It has LF line ending issue. echo: -echo Press any key to exit... -pause >nul +ping 127.0.0.1 -n 6 > nul popd exit /b ) @@ -102,13 +105,23 @@ set "_Yellow="Black" "Yellow"" set "nceline=echo: &echo ==== ERROR ==== &echo:" set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:" set "line=echo ___________________________________________________________________________________________" +if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") ::======================================================================================================================================== -if %winbuild% LSS 10240 ( -%eline% +if %winbuild% LSS 7600 ( +%nceline% echo Unsupported OS version detected. -echo Project is supported for Windows 10/11/Server Build 10240 and later. +echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalent. +goto ced_done +) + +if %winbuild% LSS 9200 if not exist "%SystemRoot%\servicing\Packages\Microsoft-Windows-PowerShell-WTR-Package~*.mum" ( +%nceline% +echo Updated Powershell not found. +echo: +echo Download Windows Management Framework 5.1 from below link and install +echo https://aka.ms/wmf5download goto ced_done ) @@ -151,7 +164,7 @@ goto ced_done :: Elevate script as admin and pass arguments and preventing loop -%nul% reg query HKU\S-1-5-19 || ( +>nul fltmc || ( if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b %eline% echo This script require administrator privileges. @@ -164,23 +177,39 @@ goto ced_done cls mode 98, 30 -call :dk_initial +echo: +echo Initializing... +echo: +call :dk_product +call :dk_ckeckwmic + +:: Show info for potential script stuck scenario + +sc start sppsvc %nul% +if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( +echo: +echo Error code: %errorlevel% +call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." +echo: +) + +::======================================================================================================================================== + +:: Check Activation IDs + +call :dk_actids if not defined applist ( -cls %eline% -echo Not Respoding: !e_wmispp! +echo Activation IDs not found. Aborting... goto ced_done ) -::======================================================================================================================================== - :: Check Windows Edition set osedition= for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition 2^>nul ^| find /i "Current Edition :"') do set "osedition=%%a" -cls if "%osedition%"=="" ( %eline% DISM /English /Online /Get-CurrentEdition %nul% @@ -190,10 +219,6 @@ echo OS Edition was not detected properly. Aborting... goto ced_done ) -:: Check product name - -call :dk_product - :: Check SKU value set osSKU= @@ -213,6 +238,9 @@ echo SKU value was not detected properly. Aborting... goto ced_done ) +set branch= +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b" + :: Check PowerShell %psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( @@ -221,25 +249,17 @@ echo PowerShell is not responding properly. Aborting... goto ced_done ) -:: Check slmgr /dlv - -cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% -set error_code=%errorlevel% -cmd /c exit /b %error_code% -if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]" -if %error_code% NEQ 0 ( -%eline% -echo slmgr /dlv is not responding %error_code% -goto ced_done -) - ::======================================================================================================================================== :: Get Target editions list set _target= +set _dtarget= +set _ptarget= set _ntarget= -for /f "tokens=4" %%a in ('dism /online /english /Get-TargetEditions ^| findstr /i /c:"Target Edition : "') do (if defined _target (set "_target=!_target! %%a") else (set "_target=%%a")) + +if %winbuild% GEQ 10240 for /f "tokens=4" %%a in ('dism /online /english /Get-TargetEditions ^| findstr /i /c:"Target Edition : "') do (if defined _dtarget (set "_dtarget=!_dtarget! %%a") else (set "_dtarget=%%a")) +for /f "tokens=4" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -GetTargetEditions;" ^| findstr /i /c:"Target Edition : "') do (if defined _ptarget (set "_ptarget=!_ptarget! %%a") else (set "_ptarget=%%a")) ::======================================================================================================================================== @@ -253,9 +273,13 @@ echo Aborting... goto ced_done ) +for %%# in ( %_dtarget% %_ptarget% ) do ( +echo "!_target!" | find /i " %%# " 1>nul || set "_target=!_target! %%# " +) + if defined _target ( for %%# in (%_target%) do ( -echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (if defined _ntarget (set "_ntarget=!_ntarget! %%#") else (set "_ntarget=%%#")) +echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (set "_ntarget=!_ntarget! %%#") ) ) @@ -275,26 +299,40 @@ goto ced_done cls mode 98, 30 set inpt= +set note= set counter=0 set verified=0 set targetedition= %line% echo: -call :dk_color %Gray% "You can change the Current Edition [%osedition%] to one of the following." +call :dk_color %Gray% "You can change the Edition [%osedition%] [%winbuild%] to one of the following." %line% echo: for %%A in (%_ntarget%) do ( set /a counter+=1 +if %winbuild% GEQ 10240 ( +echo "%_ptarget%" | find /i "%%A" 1>nul && ( +set note=1 +call :dk_color2 %_White% "[!counter!] " %Magenta% "%%A" +) || ( echo [!counter!] %%A +) +) else ( +echo [!counter!] %%A +) set targetedition!counter!=%%A ) %line% echo: -echo [0] Exit +echo [0] %_exitmsg% +echo: +if defined note ( +echo Note: CBS Upgrade Method is available for Purple colored editions. echo: +) call :dk_color %_Green% "Enter option number in keyboard, and press "Enter":" set /p inpt= if "%inpt%"=="" goto cedmenu2 @@ -305,6 +343,42 @@ if %verified%==0 goto cedmenu2 ::======================================================================================================================================== +cls +if %winbuild% GEQ 10240 ( +echo "%_ptarget%" | find /i "%targetedition%" 1>nul && ( +echo "%_dtarget%" | find /i "%targetedition%" 1>nul && ( +echo: +%line% +echo: +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( +echo [1] DISM Method +) else ( +echo [1] Changepk Method +) +echo: +echo [2] CBS Upgrade Method [Alternative] +echo: +echo [0] Go back +%line% +echo: +echo Enter a menu option in the Keyboard: +choice /C:120 /N +set _el=!errorlevel! +if !_el!==3 goto :cedmenu2 +if !_el!==2 goto :cbsmethod +if !_el!==1 REM +) +) +) else ( +goto :cbsmethod +) + +echo "%_ptarget%" | find /i "%targetedition%" 1>nul && ( +echo "%_dtarget%" | find /i "%targetedition%" 1>nul || ( +goto :cbsmethod +) +) + if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( goto :ced_change_server ) @@ -327,7 +401,7 @@ set _changepk=1 ) ) -if %winbuild% LEQ 19044 call :changeeditiondata +if %winbuild% LEQ 19045 call :changeeditiondata if not defined key call :ced_targetSKU %targetedition% if not defined key if defined targetSKU call :ced_windowskey @@ -337,7 +411,8 @@ if not defined key ( %eline% echo [%targetedition% ^| %winbuild%] echo Unable to get product key from pkeyhelper.dll -echo Make sure you are using updated version of the script +echo Make sure you are using updated version of the script. +echo https://massgrave.dev goto ced_done ) @@ -348,8 +423,6 @@ goto ced_done :: Changing from Core to Non-Core & Changing editions in Windows build older than 17134 requires "changepk /productkey" method and restart :: In other cases, editions can be changed instantly with "slmgr /ipk" -:ced_loop - cls if %_changepk%==1 ( echo "%_chan%" | find /i "OEM" >NUL && ( @@ -358,10 +431,17 @@ echo [%osedition%] can not be changed to [%targetedition%] Edition due to lack o echo Non-OEM keys are required to change from Core to Non-Core Editions. goto ced_done ) +) + +:ced_loop + +cls +if %_changepk%==1 ( for %%a in (dns.msftncsi.com,www.microsoft.com,one.one.one.one,resolver1.opendns.com) do ( for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do ( if not [%%#]==[] ( %eline% +echo Internet needs to be disconnected to change edition [%osedition%] to [%targetedition%] echo Disconnect the Internet and then press any key... pause >nul goto ced_loop @@ -375,12 +455,20 @@ echo Changing the Current Edition [%osedition%] to [%targetedition%] echo: if %_changepk%==1 ( -call :dk_color %Green% "You can safely ignore if error appears in the upgrade Window." -call :dk_color %Red% "But in that case you must manually reboot the system." +call :dk_color %_Green% "You can safely ignore if error appears in the upgrade Window." +call :dk_color %_Yellow% "But in that case you must manually reboot the system." +echo: +%psc% "$BLinfo = Get-BitLockerVolume -MountPoint "C:";$blinfo.ProtectionStatus" | find /i "On" 1>nul && ( +call :dk_color %Red% "Bitlocker / Device Encryption is On in the system." +echo: +echo Either Use alternative CBS upgrade method for edition change +echo Or Ensure that you have it's recovery key, you may need it +echo Or Turn off Bitlocker / Device Encryption echo: +) call :dk_color %Magenta% "Important - Save your work before continue, system will auto reboot." echo: -choice /C:21 /N /M "[1] Continue [2] Exit : " +choice /C:21 /N /M "[1] Continue [2] %_exitmsg% : " if !errorlevel!==1 exit /b ) @@ -419,6 +507,34 @@ goto ced_done ::======================================================================================================================================== +:cbsmethod + +cls +mode con cols=105 lines=32 +%nul% %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" + +echo: +echo Changing the Current Edition [%osedition%] to [%targetedition%] +echo: +call :dk_color %Magenta% "Important - Save your work before continue, system will auto reboot." +if %winbuild% GEQ 17034 if %targetedition%==Professional echo - Enterprise Key will be installed instead of Pro, you can quickly change to Pro later. +echo: +choice /C:01 /N /M "[1] Continue [0] %_exitmsg% : " +if %errorlevel%==1 exit /b + +echo: +echo Initializing... +echo: + +if %_stg%==0 (set stage=) else (set stage=-StageCurrent) +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':cbsxml\:.*';& ([ScriptBlock]::Create($f[1])) -SetEdition %targetedition% %stage%;" + +echo: +%line% +goto ced_done + +::======================================================================================================================================== + :ced_change_server cls @@ -438,7 +554,8 @@ if not defined key ( %eline% echo [%targetedition% ^| %winbuild%] echo Unable to get product key from pkeyhelper.dll -echo Make sure you are using updated version of the script +echo Make sure you are using updated version of the script. +echo https://massgrave.dev goto ced_done ) @@ -459,7 +576,7 @@ call :dk_color %Magenta% "Make sure to restart the system." :ced_done echo: -call :dk_color %_Yellow% "Press any key to exit..." +call :dk_color %_Yellow% "Press any key to %_exitmsg%..." pause >nul exit /b @@ -509,53 +626,6 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com ) exit /b -:dk_initial - -echo: -echo Initializing... - -:: Check and enable WinMgmt, sppsvc services if required - -for %%# in (WinMgmt sppsvc) do ( -for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b NEQ 0x2 ( -echo: -echo Enabling %%# service... -if /i %%#==sppsvc sc config %%# start= delayed-auto %nul% || echo Failed -if /i %%#==WinMgmt sc config %%# start= auto %nul% || echo Failed -) -sc start %%# %nul% -if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 ( -echo: -echo Starting %%# service... -sc start %%# -echo: -call :dk_color %Red% "Failed to start [%%#] service, rest of the process may take a long time..." -) -) - -:: Check WMI and SPP Errors - -call :dk_ckeckwmic - -set e_wmi= -set e_wmispp= -call :dk_actids - -if not defined applist ( -net stop sppsvc /y %nul% -cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -call :dk_refresh - -if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul -if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul -if !errorlevel! NEQ 0 set e_wmi=1 - -if defined e_wmi (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP) -call :dk_actids -) -exit /b - ::======================================================================================================================================== :: Get Product Key from pkeyhelper.dll for future new editions @@ -631,6 +701,231 @@ exit /b ::======================================================================================================================================== +:: https://github.com/Gamers-Against-Weed/Set-WindowsCbsEdition + +:cbsxml:[ +param ( + [Parameter()] + [String]$SetEdition, + + [Parameter()] + [Switch]$GetTargetEditions, + + [Parameter()] + [Switch]$StageCurrent +) + +function Get-AssemblyIdentity { + param ( + [String]$PackageName + ) + + $PackageName = [String]$PackageName + $packageData = ($PackageName -split '~') + + if($packageData[3] -eq '') { + $packageData[3] = 'neutral' + } + + return "" +} + +function Get-SxsName { + param ( + [String]$PackageName + ) + + $name = ($PackageName -replace '[^A-z0-9\-\._]', '') + + if($name.Length -gt 40) { + $name = ($name[0..18] -join '') + '\.\.' + ($name[-19..-1] -join '') + } + + return $name.ToLower() +} + +function Find-EditionXmlInSxs { + param ( + [String]$Edition + ) + + $candidates = @($Edition, 'Client', 'Server') + $winSxs = $Env:SystemRoot + '\WinSxS' + $allInSxs = Get-ChildItem -Path $winSxs | select Name + + foreach($candidate in $candidates) { + $name = Get-SxsName -PackageName "Microsoft-Windows-Editions-$candidate" + $packages = $allInSxs | where name -Match ('^.*_'+$name+'_31bf3856ad364e35') + + if($packages.Length -eq 0) { + continue + } + + $package = $packages[-1].Name + $testPath = $winSxs + "\$package\" + $Edition + 'Edition.xml' + + if(Test-Path -Path $testPath -PathType Leaf) { + return $testPath + } + } + + return $null +} + +function Find-EditionXml { + param ( + [String]$Edition + ) + + $servicingEditions = $Env:SystemRoot + '\servicing\Editions' + $editionXml = $Edition + 'Edition.xml' + + $editionXmlInServicing = $servicingEditions + '\' + $editionXml + + if(Test-Path -Path $editionXmlInServicing -PathType Leaf) { + return $editionXmlInServicing + } + + return Find-EditionXmlInSxs -Edition $Edition +} + +function Write-UpgradeCandidates { + param ( + [HashTable]$InstallCandidates + ) + + $editionCount = 0 + Write-Host 'Editions that can be upgraded to:' + foreach($candidate in $InstallCandidates.Keys) { + Write-Host "Target Edition : $candidate" + $editionCount++ + } + + if($editionCount -eq 0) { + Write-Host '(no editions are available)' + } +} + +function Write-UpgradeXml { + param ( + [Array]$RemovalCandidates, + [Array]$InstallCandidates, + [Boolean]$Stage + ) + + $removeAction = 'remove' + if($Stage) { + $removeAction = 'stage' + } + + Write-Output '' + Write-Output '' + Write-Output '' + + foreach($package in $InstallCandidates) { + Write-Output '' + Write-Output (Get-AssemblyIdentity -PackageName $package) + Write-Output '' + } + + foreach($package in $RemovalCandidates) { + Write-Output "" + Write-Output (Get-AssemblyIdentity -PackageName $package) + Write-Output '' + } + + Write-Output '' + Write-Output '' +} + +function Write-Usage { + Get-Help $PSCommandPath -detailed +} + +$version = '1.0' +$getTargetsParam = $GetTargetEditions.IsPresent +$stageCurrentParam = $StageCurrent.IsPresent + +if($SetEdition -eq '' -and ($false -eq $getTargetsParam)) { + Write-Usage + Exit 1 +} + +$removalCandidates = @(); +$installCandidates = @{}; + +$packages = Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages' | select Name | where name -Match '^.*\\Microsoft-Windows-.*Edition~' +foreach($package in $packages) { + $state = (Get-ItemProperty -Path "Registry::$($package.Name)").CurrentState + $packageName = ($package.Name -split '\\')[-1] + $packageEdition = (($packageName -split 'Edition~')[0] -split 'Microsoft-Windows-')[-1] + + if($state -eq 0x40) { + if($null -eq $installCandidates[$packageEdition]) { + $installCandidates[$packageEdition] = @() + } + + if($false -eq ($packageName -in $installCandidates[$packageEdition])) { + $installCandidates[$packageEdition] = $installCandidates[$packageEdition] + @($packageName) + } + } + + if((($state -eq 0x50) -or ($state -eq 0x70)) -and ($false -eq ($packageName -in $removalCandidates))) { + $removalCandidates = $removalCandidates + @($packageName) + } +} + +if($getTargetsParam) { + Write-UpgradeCandidates -InstallCandidates $installCandidates + Exit +} + +if($false -eq ($SetEdition -in $installCandidates.Keys)) { + Write-Error "The system cannot be upgraded to `"$SetEdition`"" + Exit 1 +} + +$xmlPath = $Env:Temp + '\CbsUpgrade.xml' + +Write-UpgradeXml -RemovalCandidates $removalCandidates ` + -InstallCandidates $installCandidates[$SetEdition] ` + -Stage $stageCurrentParam >$xmlPath + +$editionXml = Find-EditionXml -Edition $SetEdition +if($null -eq $editionXml) { + Write-Warning 'Unable to find edition specific settings XML. Proceeding without it...' +} + +Write-Host 'Starting the upgrade process. This may take a while...' + +DISM.EXE /English /NoRestart /Online /Apply-Unattend:$xmlPath +$dismError = $LASTEXITCODE + +Remove-Item -Path $xmlPath -Force + +if(($dismError -ne 0) -and ($dismError -ne 3010)) { + Write-Error 'Failed to upgrade to the target edition' + Exit $dismError +} + +if($null -ne $editionXml) { + $destination = $Env:SystemRoot + '\' + $SetEdition + '.xml' + Copy-Item -Path $editionXml -Destination $destination + + DISM.EXE /English /NoRestart /Online /Apply-Unattend:$editionXml + $dismError = $LASTEXITCODE + + if(($dismError -ne 0) -and ($dismError -ne 3010)) { + Write-Error 'Failed to apply edition specific settings' + Exit $dismError + } +} + +Restart-Computer +:cbsxml:] + +::======================================================================================================================================== + :: 1st column = Generic Retail/OEM/MAK/GVLK Key :: 2nd column = Key Type :: 3rd column = WMI Edition ID @@ -644,43 +939,45 @@ exit /b :changeeditiondata for %%# in ( -44NYX-TKR9D-CCM2D-V6B8F-HQWWR_Volume:MAK_Enterprise -D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ_____Retail_Starter -3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT_Volume:MAK_EnterpriseN -3NFXW-2T27M-2BDW6-4GHRV-68XRX_____Retail_StarterN -VK7JG-NPHTM-C97JM-9MPGT-3V66T_____Retail_Professional -2B87N-8KFHP-DKV6R-Y2C8J-PKCKT_____Retail_ProfessionalN -4CPRK-NM3K3-X6XXQ-RXX86-WXCHW_____Retail_CoreN -N2434-X9D7W-8PF6X-8DV9T-8TYMD_____Retail_CoreCountrySpecific -BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_____Retail_CoreSingleLanguage -YTMG3-N6DKC-DKB77-7M9GH-8HVX7_____Retail_Core -XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_OEM:NONSLP_PPIPro -YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_____Retail_Education -84NGF-MHBT6-FXBX8-QWJK7-DRR8H_____Retail_EducationN -KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_Volume:MAK_EnterpriseS_2021 -VBX36-N7DDY-M9H62-83BMJ-CPR42_Volume:MAK_EnterpriseS_2019 -PN3KR-JXM7T-46HM4-MCQGK-7XPJQ_Volume:MAK_EnterpriseS_2016 -DVWKN-3GCMV-Q2XF4-DDPGM-VQWWY_Volume:MAK_EnterpriseS_2015 -RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_Volume:MAK_EnterpriseSN_2021 -M33WV-NHY3C-R7FPM-BQGPT-239PG_Volume:MAK_EnterpriseSN_2019 -2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_Volume:MAK_EnterpriseSN_2016 -NTX6B-BRYC2-K6786-F6MVQ-M7V2X_Volume:MAK_EnterpriseSN_2015 -G3KNM-CHG6T-R36X3-9QDG6-8M8K9_____Retail_ProfessionalSingleLanguage -HNGCC-Y38KG-QVK8D-WMWRK-X86VK_____Retail_ProfessionalCountrySpecific -DXG7C-N36C4-C4HTG-X4T3X-2YV77_____Retail_ProfessionalWorkstation -WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_____Retail_ProfessionalWorkstationN -8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_____Retail_ProfessionalEducation -GJTYN-HDMQY-FRR76-HVGC7-QPF8P_____Retail_ProfessionalEducationN -C4NTJ-CX6Q2-VXDMR-XVKGM-F9DJC_Volume:MAK_EnterpriseG -46PN6-R9BK9-CVHKB-HWQ9V-MBJY8_Volume:MAK_EnterpriseGN -NJCF7-PW8QT-3324D-688JX-2YV66_____Retail_ServerRdsh -V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_____Retail_Cloud -NH9J3-68WK7-6FB93-4K3DF-DJ4F6_____Retail_CloudN -2HN6V-HGTM8-6C97C-RK67V-JQPFD_____Retail_CloudE -XQQYW-NFFMW-XJPBH-K8732-CKFFD_____OEM:DM_IoTEnterprise -QPM6N-7J2WJ-P88HH-P3YRH-YY74H_OEM:NONSLP_IoTEnterpriseS -K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_____Retail_CloudEditionN -KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_____Retail_CloudEdition +44NYX-TKR9D-CCM2D-V6B8F-HQWWR__Volume:MAK_Enterprise +D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ______Retail_Starter +3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__Volume:MAK_EnterpriseN +3NFXW-2T27M-2BDW6-4GHRV-68XRX______Retail_StarterN +VK7JG-NPHTM-C97JM-9MPGT-3V66T______Retail_Professional +2B87N-8KFHP-DKV6R-Y2C8J-PKCKT______Retail_ProfessionalN +4CPRK-NM3K3-X6XXQ-RXX86-WXCHW______Retail_CoreN +N2434-X9D7W-8PF6X-8DV9T-8TYMD______Retail_CoreCountrySpecific +BT79Q-G7N6G-PGBYW-4YWX6-6F4BT______Retail_CoreSingleLanguage +YTMG3-N6DKC-DKB77-7M9GH-8HVX7______Retail_Core +XKCNC-J26Q9-KFHD2-FKTHY-KD72Y__OEM:NONSLP_PPIPro +YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY______Retail_Education +84NGF-MHBT6-FXBX8-QWJK7-DRR8H______Retail_EducationN +KCNVH-YKWX8-GJJB9-H9FDT-6F7W2__Volume:MAK_EnterpriseS_VB +VBX36-N7DDY-M9H62-83BMJ-CPR42__Volume:MAK_EnterpriseS_RS5 +PN3KR-JXM7T-46HM4-MCQGK-7XPJQ__Volume:MAK_EnterpriseS_RS1 +DVWKN-3GCMV-Q2XF4-DDPGM-VQWWY__Volume:MAK_EnterpriseS_TH +RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT__Volume:MAK_EnterpriseSN_VB +M33WV-NHY3C-R7FPM-BQGPT-239PG__Volume:MAK_EnterpriseSN_RS5 +2DBW3-N2PJG-MVHW3-G7TDK-9HKR4__Volume:MAK_EnterpriseSN_RS1 +NTX6B-BRYC2-K6786-F6MVQ-M7V2X__Volume:MAK_EnterpriseSN_TH +G3KNM-CHG6T-R36X3-9QDG6-8M8K9______Retail_ProfessionalSingleLanguage +HNGCC-Y38KG-QVK8D-WMWRK-X86VK______Retail_ProfessionalCountrySpecific +DXG7C-N36C4-C4HTG-X4T3X-2YV77______Retail_ProfessionalWorkstation +WYPNQ-8C467-V2W6J-TX4WX-WT2RQ______Retail_ProfessionalWorkstationN +8PTT6-RNW4C-6V7J2-C2D3X-MHBPB______Retail_ProfessionalEducation +GJTYN-HDMQY-FRR76-HVGC7-QPF8P______Retail_ProfessionalEducationN +C4NTJ-CX6Q2-VXDMR-XVKGM-F9DJC__Volume:MAK_EnterpriseG +46PN6-R9BK9-CVHKB-HWQ9V-MBJY8__Volume:MAK_EnterpriseGN +NJCF7-PW8QT-3324D-688JX-2YV66______Retail_ServerRdsh +V3WVW-N2PV2-CGWC3-34QGF-VMJ2C______Retail_Cloud +NH9J3-68WK7-6FB93-4K3DF-DJ4F6______Retail_CloudN +2HN6V-HGTM8-6C97C-RK67V-JQPFD______Retail_CloudE +XQQYW-NFFMW-XJPBH-K8732-CKFFD______OEM:DM_IoTEnterprise +QPM6N-7J2WJ-P88HH-P3YRH-YY74H__OEM:NONSLP_IoTEnterpriseS_VB +KBN8V-HFGQ4-MGXVD-347P6-PDQGT_Volume:GVLK_IoTEnterpriseS_NI +K9VKN-3BGWV-Y624W-MCRMQ-BHDCD______Retail_CloudEditionN +KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W______Retail_CloudEdition +MPB3G-XNBR7-CC43M-FG64B-F9GBK______Retail_IoTEnterpriseSK ) do ( for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C ( @@ -689,7 +986,7 @@ set 4th=%%D if not defined 4th ( set "key=%%A" & set "_chan=%%B" ) else ( -echo "%winos%" | find "%%D" 1>nul && (set "key=%%A" & set "_chan=%%B") +echo "%branch%" | find "%%D" 1>nul && (set "key=%%A" & set "_chan=%%B") ) ) ) @@ -701,7 +998,6 @@ exit /b :changeeditionserverdata if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=) -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b" :: Only RS3 and older version keys (GVLK/Generic Retail) are stored here, later ones are extracted from the system itself diff --git a/MAS/Separate-Files-Version/Check-Activation-Status-vbs.cmd b/MAS/Separate-Files-Version/Check-Activation-Status-vbs.cmd index fc6ef8b..9442b80 100644 --- a/MAS/Separate-Files-Version/Check-Activation-Status-vbs.cmd +++ b/MAS/Separate-Files-Version/Check-Activation-Status-vbs.cmd @@ -44,8 +44,7 @@ if not %errorlevel%==0 ( echo: echo Error: This is not a correct file. It has LF line ending issue. echo: -echo Press any key to exit... -pause >nul +ping 127.0.0.1 -n 6 > nul popd exit /b ) diff --git a/MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd b/MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd index 6e9e948..ea350f0 100644 --- a/MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd +++ b/MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd @@ -72,8 +72,7 @@ if not %errorlevel%==0 ( echo: echo Error: This is not a correct file. It has LF line ending issue. echo: -echo Press any key to exit... -pause >nul +ping 127.0.0.1 -n 6 > nul popd exit /b ) @@ -362,7 +361,7 @@ exit /b function PrintModePerPridFromRegistry { $vNextRegkey = "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" - $vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction Ignore | Select-Object -ExpandProperty 'property' | Where-Object -FilterScript {$_ -Ne 'InstalledGraceKey' -And $_ -Ne 'MigrationToV5Done' -And $_ -Ne 'test' -And $_ -Ne 'unknown'} + $vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction Ignore | Select-Object -ExpandProperty 'property' | Where-Object -FilterScript {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"} If ($vNextPrids -Eq $null) { Write-Host "No registry keys found." @@ -457,15 +456,20 @@ function PrintLicensesInformation $license = (Get-Content -Encoding Unicode $_.FullName | ConvertFrom-Json).License $decodedLicense = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($license)) | ConvertFrom-Json $licenseType = $decodedLicense.LicenseType - $userId = $decodedLicense.Metadata.UserId - $identitiesRegkey = Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Identity\Identities\${userId}*" -ErrorAction Ignore + If ($null -Ne $decodedLicense.ExpiresOn) + { + $expiry = [DateTime]::Parse($decodedLicense.ExpiresOn, $null, 48) + } + Else + { + $expiry = New-Object DateTime + } $licenseState = $null If ((Get-Date) -Gt (Get-Date $decodedLicense.MetaData.NotAfter)) { $licenseState = "RFM" } - ElseIf (($decodedLicense.ExpiresOn -Eq $null) -Or - ((Get-Date) -Lt (Get-Date $decodedLicense.ExpiresOn))) + ElseIf ((Get-Date) -Lt (Get-Date $expiry)) { $licenseState = "Licensed" } @@ -483,11 +487,11 @@ function PrintLicensesInformation Acid = $decodedLicense.Acid; LicenseState = $licenseState; EntitlementStatus = $decodedLicense.Status; + EntitlementExpiration = $decodedLicense.ExpiresOn; ReasonCode = $decodedLicense.ReasonCode; NotBefore = $decodedLicense.Metadata.NotBefore; NotAfter = $decodedLicense.Metadata.NotAfter; NextRenewal = $decodedLicense.Metadata.RenewAfter; - Expiration = $decodedLicense.ExpiresOn; TenantId = $decodedLicense.Metadata.TenantId; } | ConvertTo-Json } @@ -502,11 +506,11 @@ function PrintLicensesInformation DeviceId = $decodedLicense.Metadata.DeviceId; LicenseState = $licenseState; EntitlementStatus = $decodedLicense.Status; + EntitlementExpiration = $decodedLicense.ExpiresOn; ReasonCode = $decodedLicense.ReasonCode; NotBefore = $decodedLicense.Metadata.NotBefore; NotAfter = $decodedLicense.Metadata.NotAfter; NextRenewal = $decodedLicense.Metadata.RenewAfter; - Expiration = $decodedLicense.ExpiresOn; TenantId = $decodedLicense.Metadata.TenantId; } | ConvertTo-Json } diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index d255eeb..685a2d2 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -55,8 +55,7 @@ if not %errorlevel%==0 ( echo: echo Error: This is not a correct file. It has LF line ending issue. echo: -echo Press any key to exit... -pause >nul +ping 127.0.0.1 -n 6 > nul popd exit /b ) @@ -114,22 +113,12 @@ goto done2 ::======================================================================================================================================== -:: Check desktop location +:: Fix for the special characters limitation in path name set desktop= for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b" if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a" -if not defined desktop ( -%eline% -echo Desktop location was not detected, aborting... -goto done2 -) - -::======================================================================================================================================== - -:: Fix for the special characters limitation in path name - set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" @@ -137,6 +126,7 @@ set "_batf=%~f0" set "_batp=%_batf:'=''%" set "_pdesk=%desktop:'=''%" +set _PSarg="""%~f0""" -el %_args% set "_ttemp=%temp%" set "_dir=%desktop%\$OEM$\$$\Setup\Scripts" @@ -145,14 +135,6 @@ setlocal EnableDelayedExpansion ::======================================================================================================================================== -if not exist "!desktop!\" ( -%eline% -echo Desktop location was not detected, aborting... -goto done2 -) - -::======================================================================================================================================== - echo "!_batf!" | find /i "!_ttemp!" 1>nul && ( if /i not "!_work!"=="!_ttemp!" ( %eline% @@ -166,6 +148,26 @@ goto done2 ::======================================================================================================================================== +:: Elevate script as admin and pass arguments and preventing loop + +>nul fltmc || ( +if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b +%eline% +echo This script require administrator privileges. +echo To do so, right click on this script and select 'Run as administrator'. +goto done2 +) + +::======================================================================================================================================== + +if not exist "!desktop!\" ( +%eline% +echo Desktop location was not detected, aborting... +goto done2 +) + +::======================================================================================================================================== + mode 66, 26 if exist "!desktop!\$OEM$\" ( @@ -178,8 +180,6 @@ goto done2 set HWID_Activation.cmd=HWID-KMS38_Activation\HWID_Activation.cmd set KMS38_Activation.cmd=HWID-KMS38_Activation\KMS38_Activation.cmd -set ClipUp.exe=HWID-KMS38_Activation\BIN\ClipUp.exe -set gatherosstate.exe=HWID-KMS38_Activation\BIN\gatherosstate.exe set Activate.cmd=Online_KMS_Activation\Activate.cmd set cleanosppx64.exe=Online_KMS_Activation\BIN\cleanosppx64.exe @@ -191,8 +191,6 @@ set _nofile= for %%# in ( %HWID_Activation.cmd% %KMS38_Activation.cmd% -%ClipUp.exe% -%gatherosstate.exe% %Activate.cmd% %cleanosppx64.exe% %cleanosppx86.exe% @@ -229,11 +227,11 @@ echo: echo: [4] HWID ^(Windows^) ^+ Online KMS ^(Office^) echo: [5] KMS38 ^(Windows^) ^+ Online KMS ^(Office^) echo: -echo: [6] Exit +echo: [0] Exit echo: ________________________________________________________ echo: -call :ex_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6]" -choice /C:123456 /N +call :ex_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,0]" +choice /C:123450 /N set _erl=%errorlevel% if %_erl%==6 exit /b @@ -249,14 +247,18 @@ goto :Menu :hwid cls -call :prep -call :hwidprep -call :pop_d +md "!desktop!\$OEM$\$$\Setup\Scripts" +pushd "!_work!" +copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul% +popd call :export hwid_setup -call :hwidprep2 +set _error= +if not exist "!_dir!\HWID_Activation.cmd" set _error=1 +if not exist "!_dir!\SetupComplete.cmd" set _error=1 if defined _error goto errorfound -set "_oem=HWID" + +set oem=HWID goto done :hwid_setup: @@ -264,7 +266,7 @@ goto done fltmc >nul || exit /b -start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a +start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /HWID cd \ (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") @@ -275,14 +277,18 @@ cd \ :kms38 cls -call :prep -call :kms38prep -call :pop_d +md "!desktop!\$OEM$\$$\Setup\Scripts" +pushd "!_work!" +copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul% +popd call :export kms38_setup -call :kms38prep2 +set _error= +if not exist "!_dir!\KMS38_Activation.cmd" set _error=1 +if not exist "!_dir!\SetupComplete.cmd" set _error=1 if defined _error goto errorfound -set "_oem=KMS38" + +set oem=KMS38 goto done :kms38_setup: @@ -290,7 +296,7 @@ goto done fltmc >nul || exit /b -start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a +start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /KMS38 cd \ (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") @@ -301,14 +307,22 @@ cd \ :kms cls -call :prep -call :kmsprep -call :pop_d +md "!desktop!\$OEM$\$$\Setup\Scripts\BIN" +pushd "!_work!" +copy /y /b "%Activate.cmd%" "!_dir!\Activate.cmd" %nul% +copy /y /b "%cleanosppx64.exe%" "!_dir!\BIN\cleanosppx64.exe" %nul% +copy /y /b "%cleanosppx86.exe%" "!_dir!\BIN\cleanosppx86.exe" %nul% +popd call :export kms_setup -call :kmsprep2 -if defined _kerror goto errorfound -set "_oem=Online KMS" +set _error= +if not exist "!_dir!\Activate.cmd" set _error=1 +if not exist "!_dir!\SetupComplete.cmd" set _error=1 +if not exist "!_dir!\BIN\cleanosppx64.exe" set _error=1 +if not exist "!_dir!\BIN\cleanosppx86.exe" set _error=1 +if defined _error goto errorfound + +set oem=Online KMS goto done :kms_setup: @@ -316,8 +330,7 @@ goto done fltmc >nul || exit /b -start /b /wait cmd /c "%~dp0Activate.cmd" /rat -start /b /wait cmd /c "%~dp0Activate.cmd" /wo +start /b /wait cmd /c "%~dp0Activate.cmd" /KMS-ActAndRenewalTask /KMS-WindowsOffice cd \ (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") @@ -328,17 +341,24 @@ cd \ :hwid_kms cls -call :prep -call :hwidprep -call :kmsprep -call :pop_d +md "!desktop!\$OEM$\$$\Setup\Scripts\BIN" +pushd "!_work!" +copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul% +copy /y /b "%Activate.cmd%" "!_dir!\Activate.cmd" %nul% +copy /y /b "%cleanosppx64.exe%" "!_dir!\BIN\cleanosppx64.exe" %nul% +copy /y /b "%cleanosppx86.exe%" "!_dir!\BIN\cleanosppx86.exe" %nul% +popd call :export hwid_kms_setup -call :hwidprep2 -call :kmsprep2 +set _error= +if not exist "!_dir!\HWID_Activation.cmd" set _error=1 +if not exist "!_dir!\Activate.cmd" set _error=1 +if not exist "!_dir!\SetupComplete.cmd" set _error=1 +if not exist "!_dir!\BIN\cleanosppx64.exe" set _error=1 +if not exist "!_dir!\BIN\cleanosppx86.exe" set _error=1 if defined _error goto errorfound -if defined _kerror goto errorfound -set "_oem=HWID [Windows] + Online KMS [Office]" + +set oem=HWID [Windows] + Online KMS [Office] goto done :hwid_kms_setup: @@ -346,10 +366,9 @@ goto done fltmc >nul || exit /b -start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /a +start /b /wait cmd /c "%~dp0HWID_Activation.cmd" /HWID -start /b /wait cmd /c "%~dp0Activate.cmd" /rat -start /b /wait cmd /c "%~dp0Activate.cmd" /o +start /b /wait cmd /c "%~dp0Activate.cmd" /KMS-ActAndRenewalTask /KMS-Office cd \ (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") @@ -360,17 +379,24 @@ cd \ :kms38_kms cls -call :prep -call :kms38prep -call :kmsprep -call :pop_d +md "!desktop!\$OEM$\$$\Setup\Scripts\BIN" +pushd "!_work!" +copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul% +copy /y /b "%Activate.cmd%" "!_dir!\Activate.cmd" %nul% +copy /y /b "%cleanosppx64.exe%" "!_dir!\BIN\cleanosppx64.exe" %nul% +copy /y /b "%cleanosppx86.exe%" "!_dir!\BIN\cleanosppx86.exe" %nul% +popd call :export kms38_kms_setup -call :kms38prep2 -call :kmsprep2 +set _error= +if not exist "!_dir!\KMS38_Activation.cmd" set _error=1 +if not exist "!_dir!\Activate.cmd" set _error=1 +if not exist "!_dir!\SetupComplete.cmd" set _error=1 +if not exist "!_dir!\BIN\cleanosppx64.exe" set _error=1 +if not exist "!_dir!\BIN\cleanosppx86.exe" set _error=1 if defined _error goto errorfound -if defined _kerror goto errorfound -set "_oem=KMS38 [Windows] + Online KMS [Office]" + +set oem=KMS38 [Windows] + Online KMS [Office] goto done :kms38_kms_setup: @@ -378,10 +404,9 @@ goto done fltmc >nul || exit /b -start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /a +start /b /wait cmd /c "%~dp0KMS38_Activation.cmd" /KMS38 -start /b /wait cmd /c "%~dp0Activate.cmd" /rat -start /b /wait cmd /c "%~dp0Activate.cmd" /o +start /b /wait cmd /c "%~dp0Activate.cmd" /KMS-ActAndRenewalTask /KMS-Office cd \ (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") @@ -397,11 +422,16 @@ goto :done2 :done -echo _______________________________________________________ +echo ______________________________________________________________ echo: -call :ex_color %Magenta% "%_oem%" +call :ex_color %Magenta% "%oem%" call :ex_color %Green% "$OEM$ folder is successfully created on the Desktop." -echo _______________________________________________________ +echo "%oem%" | find /i "38" %nul% && ( +echo: +echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^), +echo Check this page https://massgrave.dev/oem-folder +) +echo ______________________________________________________________ :done2 @@ -412,88 +442,6 @@ exit /b ::======================================================================================================================================== -:prep - -pushd "!desktop!" -md "!desktop!\$OEM$\$$\Setup\Scripts\BIN" -pushd "!_work!" -exit /b - -:hwidprep - -copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul% -copy /y /b "%gatherosstate.exe%" "!_dir!\BIN\gatherosstate.exe" %nul% -exit /b - -:kms38prep - -copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul% -copy /y /b "%ClipUp.exe%" "!_dir!\BIN\ClipUp.exe" %nul% -copy /y /b "%gatherosstate.exe%" "!_dir!\BIN\gatherosstate.exe" %nul% -exit /b - -:kmsprep - -copy /y /b "%Activate.cmd%" "!_dir!\Activate.cmd" %nul% -copy /y /b "%cleanosppx64.exe%" "!_dir!\BIN\cleanosppx64.exe" %nul% -copy /y /b "%cleanosppx86.exe%" "!_dir!\BIN\cleanosppx86.exe" %nul% -exit /b - -:hwidprep2 - -set _error= -pushd "!_dir!\" - -for %%# in ( -HWID_Activation.cmd -BIN\gatherosstate.exe -SetupComplete.cmd -) do ( -if not exist "%%#" set _error=1 -) -popd -exit /b - -:kms38prep2 - -set _error= -pushd "!_dir!\" - -for %%# in ( -KMS38_Activation.cmd -BIN\ClipUp.exe -BIN\gatherosstate.exe -SetupComplete.cmd -) do ( -if not exist "%%#" set _error=1 -) -popd -exit /b - -:kmsprep2 - -set _kerror= -pushd "!_dir!\" - -for %%# in ( -Activate.cmd -BIN\cleanosppx64.exe -BIN\cleanosppx86.exe -SetupComplete.cmd -) do ( -if not exist "%%#" set _kerror=1 -) -popd -exit /b - -:pop_d - -popd -popd -exit /b - -::======================================================================================================================================== - :: Extract the text from batch script without character and file encoding issue :export diff --git a/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/ClipUp.exe b/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/ClipUp.exe deleted file mode 100644 index b3b2cff..0000000 Binary files a/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/ClipUp.exe and /dev/null differ diff --git a/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/Info.txt b/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/Info.txt deleted file mode 100644 index 870efd6..0000000 --- a/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/Info.txt +++ /dev/null @@ -1,22 +0,0 @@ -================================================================================= - File Details: -================================================================================= - - - ClipUp.exe (x64) - SHA-1: 48D928B1BEC25A56FE896C430C2C034B7866AA7A - - Taken from Windows server 2016 x64 ISO - https://www.microsoft.com/en-us/evalcenter/ - - - gatherosstate.exe (x86) - SHA-1: FABB5A0FC1E6A372219711152291339AF36ED0B5 - - Taken from Windows 10 Version 1607 ADK (Section: User State Migration Tool) - https://go.microsoft.com/fwlink/p/?LinkId=526740 - -_________________________________________________________________________________ - - - All files are original Microsoft's files. - - ClipUp.exe is required for KMS38 activation of Server Cor/Acor editions. - -================================================================================= \ No newline at end of file diff --git a/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/gatherosstate.exe b/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/gatherosstate.exe deleted file mode 100644 index 4dba73a..0000000 Binary files a/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/gatherosstate.exe and /dev/null differ diff --git a/MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd b/MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd index ee05bb0..37bf005 100644 --- a/MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd @@ -14,27 +14,13 @@ -:: To activate with Downlevel method (default), run the script with /a parameter or change 0 to 1 in below line -set _acti=0 +:: To activate, run the script with "/HWID" parameter or change 0 to 1 in below line +set _act=0 -:: To only generate GenuineTicket.xml with Downlevel method (default), run the script with /g parameter or change 0 to 1 in below line -set _gent=0 +:: To disable changing edition if current edition doesn't support HWID activation, change the value to 1 from 0 or run the script with "/HWID-NoEditionChange" parameter +set _NoEditionChange=0 -:: To enable LockBox method, run the script with /k parameter or change 0 to 1 in below line -:: You need to use this option with either activation or ticket generation. -:: Example, -:: HWID_Activation.cmd /a /k -:: HWID_Activation.cmd /g /k -set _lock=0 - -:: Note about Lockbox method: It's working method is not very clean. We don't suggest to run it on a production system. - -:: If value is changed in ABOVE lines or any ABOVE parameter is used then script will run in unattended mode -:: Incase if more than one options are used then only one option will be applied - - -:: To disable changing edition if current edition doesn't support HWID activation, change the value to 0 from 1 or run the script with /c parameter -set _chan=1 +:: If value is changed in above lines or parameter is used then script will run in unattended mode @@ -78,8 +64,7 @@ if not %errorlevel%==0 ( echo: echo Error: This is not a correct file. It has LF line ending issue. echo: -echo Press any key to exit... -pause >nul +ping 127.0.0.1 -n 6 > nul popd exit /b ) @@ -99,15 +84,13 @@ set _args=%* if defined _args set _args=%_args:"=% if defined _args ( for %%A in (%_args%) do ( -if /i "%%A"=="/a" set _acti=1 -if /i "%%A"=="/g" set _gent=1 -if /i "%%A"=="/k" set _lock=1 -if /i "%%A"=="/c" set _chan=0 -if /i "%%A"=="-el" set _elev=1 +if /i "%%A"=="/HWID" set _act=1 +if /i "%%A"=="/HWID-NoEditionChange" set _NoEditionChange=1 +if /i "%%A"=="-el" set _elev=1 ) ) -for %%A in (%_acti% %_gent% %_lock%) do (if "%%A"=="1" set _unattended=1) +for %%A in (%_act% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== @@ -141,7 +124,7 @@ set "_Yellow="Black" "Yellow"" set "nceline=echo: &echo ==== ERROR ==== &echo:" set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:" -if %~z0 GEQ 500000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") +if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") ::======================================================================================================================================== @@ -152,6 +135,13 @@ echo Project is supported for Windows 10/11. goto dk_done ) +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( +%eline% +echo HWID Activation is not supported for Windows Server. +echo Use KMS38 or KMS Activation. +goto dk_done +) + for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( %nceline% echo Unable to find powershell.exe in the system. @@ -191,7 +181,7 @@ goto dk_done :: Elevate script as admin and pass arguments and preventing loop -%nul% reg query HKU\S-1-5-19 || ( +>nul fltmc || ( if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b %eline% echo This script require administrator privileges. @@ -201,110 +191,32 @@ goto dk_done ::======================================================================================================================================== -:dl_menu - -:: Lockbox method is not shown in menu because it's working method is not very clean. We don't suggest to run it on a production system. -:: Will enable it back when we have a better method for it. Till then, if you want to use Lockbox, you can use parameters, check at the top. - -REM if %_unattended%==0 ( -REM cls -REM mode 76, 25 -REM title HWID Activation - -REM echo: -REM echo: -REM echo: -REM echo: -REM echo ____________________________________________________________ -REM echo: -REM if !_lock!==0 ( -REM echo [1] HWID Activation -REM ) else ( -REM call :dk_color2 %_White% " [1] HWID Activation " %_Yellow% " [LockBox Method]" -REM ) -REM echo ____________________________________________ -REM echo: -REM if !_lock!==0 ( -REM echo [G] Generate Ticket -REM ) else ( -REM call :dk_color2 %_White% " [G] Generate Ticket " %_Yellow% " [LockBox Method]" -REM ) -REM echo ____________________________________________ -REM echo: -REM echo [C] Change Method -REM echo: -REM echo [0] %_exitmsg% -REM echo ____________________________________________________________ -REM echo: -REM call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard:" -REM choice /C:1GC0 /N -REM set _el=!errorlevel! -REM if !_el!==4 exit /b -REM if !_el!==3 ( -REM if !_lock!==0 ( -REM set _lock=1 -REM ) else ( -REM set _lock=0 -REM ) -REM cls -REM echo: -REM call :dk_color %_Green% " Downlevel Method:" -REM echo It creates downlevelGTkey ticket for activation with simplest process. -REM echo: -REM call :dk_color %_Yellow% " LockBox Method:" -REM echo It creates clientLockboxKey ticket which better mimics genuine activation, -REM echo But requires more steps such as, -REM echo - Cleaning ClipSVC licences -REM echo - Deleting a volatile and protected registry key by taking ownership -REM echo - System may need a restart for succesful activation -REM echo - Microsoft Account and Store Apps may need relogin-restart in the system -REM echo: -REM call :dk_color2 %_White% " " %Green% "Note:" -REM echo Microsoft accepts both types of tickets and that's unlikely to change. -REM call :dk_color2 %_White% " " %Green% "On a production system we suggest to use Downlevel [default] Method only." -REM echo: -REM call :dk_color %_Yellow% " Press any key to go back..." -REM pause >nul -REM goto :dl_menu -REM ) -REM if !_el!==2 set _gent=1&goto :dl_menu2 -REM if !_el!==1 goto :dl_menu2 -REM goto :dl_menu -REM ) - -:dl_menu2 - cls -mode 102, 34 -if %_gent%==1 (set _title=title Generate HWID GenuineTicket.xml) else (set _title=title HWID Activation) -if %_lock%==0 (%_title%) else (%_title% [Lockbox Method]) +mode 102, 33 +title HWID Activation -::======================================================================================================================================== +echo: +echo Initializing... +call :dk_product +call :dk_ckeckwmic -if %_gent%==1 if exist %Systemdrive%\GenuineTicket.xml ( -set _gent=0 -%eline% -echo File '%Systemdrive%\GenuineTicket.xml' already exist. -if %_unattended%==0 ( +:: Show info for potential script stuck scenario + +sc start sppsvc %nul% +if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( +echo: +echo Error code: %errorlevel% +call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." echo: -call :dk_color %_Yellow% "Press any key to go back..." -pause >nul -goto dl_menu -) else ( -goto dk_done -) ) ::======================================================================================================================================== -call :dk_initial - :: Check if system is permanently activated or not -cls -call :dk_product call :dk_checkperm -if defined _perm if not %_gent%==1 ( +if defined _perm ( +cls echo ___________________________________________________________________________________________ echo: call :dk_color2 %_White% " " %Green% "Checking: %winos% is Permanently Activated." @@ -312,7 +224,7 @@ call :dk_color2 %_White% " " %Gray% "Activation is not required." echo ___________________________________________________________________________________________ if %_unattended%==1 goto dk_done echo: -choice /C:12 /N /M "> [1] Activate [2] %_exitmsg% : " +choice /C:10 /N /M "> [1] Activate [0] %_exitmsg% : " if errorlevel 2 exit /b ) cls @@ -321,26 +233,13 @@ cls :: Check Evaluation version -set _eval= -set _evalserv= - -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" set _eval=1 -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalEdition~*.mum" set _evalserv=1 -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalCorEdition~*.mum" set _eval=1 & set _evalserv=1 - -if defined _eval ( +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID 2>nul | find /i "Eval" 1>nul && ( %eline% echo [%winos% ^| %winbuild%] -if defined _evalserv ( -echo Server Evaluation cannot be activated. Convert it to full Server OS. -echo: -echo Check 'Change Edition Option' in Extras section in MAS. -) else ( echo Evaluation Editions cannot be activated. Download ^& Install full version of Windows OS. echo: echo https://massgrave.dev/ -) goto dk_done ) ) @@ -368,84 +267,7 @@ goto dk_done ::======================================================================================================================================== -:: Check if HWID key (Retail,OEM,MAK) is already installed or not - -set _hwidk= -call :dk_channel -for %%A in (Retail OEM:SLP OEM:NONSLP OEM:DM Volume:MAK) do (if /i "%%A"=="%_channel%" set _hwidk=1) - -::======================================================================================================================================== - -:: Detect Key - -set app= -set key= -set pkey= -set altkey= -set changekey= -set curedition= -set altedition= -set notworking= - -if defined applist call :hwiddata attempt1 -if not defined key call :hwiddata attempt2 -if defined notworking call :hwidfallback - -if defined altkey (set key=%altkey%&set changekey=1&set notworking=) - -set pkey= -if not defined key call :dk_hwidkey %nul% - -::======================================================================================================================================== - -if not defined key if not defined _hwidk ( -%eline% -%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( -echo PowerShell is not responding properly. Aborting... -goto dk_done -) -echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] -echo Unable to find this product in the supported product list. -echo Make sure you are using updated version of the script. -echo: -if not "%regSKU%"=="%wmiSKU%" ( -echo Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU% -echo Restart the system and try again. -goto dk_done -) -goto dk_done -) - -::======================================================================================================================================== - -:: Check files - -if not exist "!_work!\BIN\gatherosstate.exe" ( -%eline% -echo 'gatherosstate.exe' file is missing in 'BIN' folder. Aborting... -goto dk_done -) - -:: Verify gatherosstate.exe file - -set _hash= -for /f "skip=1 tokens=* delims=" %%# in ('certutil -hashfile "!_work!\BIN\gatherosstate.exe" SHA1^|findstr /i /v CertUtil') do set "_hash=%%#" -set "_hash=%_hash: =%" - -if /i not "%_hash%"=="FABB5A0FC1E6A372219711152291339AF36ED0B5" ( -if /i not "%_hash%"=="3FCCB9C359EDB9527C9F5688683F8B3C5910E75D" ( -%eline% -echo gatherosstate.exe SHA1 hash mismatch found. -echo: -echo Detected: %_hash% -goto dk_done -) -) - -::======================================================================================================================================== - set error= -set activ= :: Check Internet connection @@ -455,18 +277,40 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Cont echo Checking OS Info [%winos% ^| %winbuild% ^| %arch%] set _intcon= -if not %_gent%==1 ( for /f "delims=[] tokens=2" %%# in ('ping -n 1 licensing.mp.microsoft.com') do if not [%%#]==[] set _intcon=1 -if defined _intcon ( + +%psc% "$t = New-Object Net.Sockets.TcpClient;try{$t.Connect("""licensing.mp.microsoft.com""", 443)}catch{};$t.Connected" | findstr /i true 1>nul +if %errorlevel% EQU 0 ( echo Checking Internet Connection [Connected] ) else ( set error=1 -call :dk_color %Red% "Checking Internet Connection [Failed To Connect licensing.mp.microsoft.com]" +if defined _intcon ( +call :dk_color %Red% "Checking Internet Connection [Internet Found But Cant Connect licensing.mp.microsoft.com]" +call :dk_color %Magenta% "Make sure restricted Internet [Office/College] is not connected and URL is not blocked in the system" +) else ( +call :dk_color %Red% "Checking Internet Connection [Not Connected]" ) ) ::======================================================================================================================================== +:: Check Windows Script Host + +set _WSH=1 +reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0) +reg query "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0) + +if %_WSH% EQU 0 ( +reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% +reg add "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% +if not "%arch%"=="x86" reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% +echo Enabling Windows Script Host [Successful] +) + +::======================================================================================================================================== + +echo Initiating Diagnostic Tests... + set "_serv=ClipSVC wlidsvc sppsvc LicenseManager Winmgmt wuauserv" :: Client License Service (ClipSVC) @@ -476,44 +320,45 @@ set "_serv=ClipSVC wlidsvc sppsvc LicenseManager Winmgmt wuauserv" :: Windows Management Instrumentation :: Windows Update -:: Check disabled services +call :dk_errorcheck -set serv_ste= -for %%# in (%_serv%) do ( -set serv_dis= -reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start %nul% || set serv_dis=1 -for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b equ 0x4 set serv_dis=1 -if defined serv_dis (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#")) -) +::======================================================================================================================================== -:: Change disabled services startup type to default +:: Detect Key -set serv_csts= -set serv_cste= +set key= +set altkey= +set changekey= +set curedition= +set altedition= +set notworking= +set actidnotfound= -if defined serv_ste ( -for %%# in (%serv_ste%) do ( -if /i %%#==ClipSVC sc config %%# start= demand %nul% -if /i %%#==wlidsvc sc config %%# start= demand %nul% -if /i %%#==sppsvc sc config %%# start= delayed-auto %nul% -if /i %%#==LicenseManager sc config %%# start= demand %nul% -if /i %%#==Winmgmt sc config %%# start= auto %nul% -if /i %%#==wuauserv sc config %%# start= demand %nul% -if !errorlevel!==0 ( -if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#") -) else ( -set error=1 -if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#") -) +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b" + +if defined applist call :hwiddata key attempt1 +if not defined key call :hwiddata key attempt2 + +if defined notworking call :hwidfallback +if not defined key call :hwidfallback + +if defined altkey (set key=%altkey%&set changekey=1&set notworking=) + +if defined notworking if defined notfoundaltactID ( +call :dk_color %Red% "Checking Alternate Edition For HWID [%altedition% Activation ID Not Found]" +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +call :dk_color %Magenta% "Evaluation Windows Found. Install Full version of Windows. https://massgrave.dev/" ) ) -if defined serv_csts echo Enabling Disabled Services [Successful] [%serv_csts%] -if defined serv_cste call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]" - -if not "%regSKU%"=="%wmiSKU%" ( -set error=1 -call :dk_color %Red% "Checking WMI/REG SKU [Difference Found - WMI:%wmiSKU% Reg:%regSKU%] [Restart System]" +if not defined key ( +%eline% +echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] +echo Unable to find this product in the supported product list. +echo Make sure you are using updated version of the script. +echo https://massgrave.dev +echo: +goto dk_done ) ::======================================================================================================================================== @@ -526,205 +371,63 @@ call :dk_color %Magenta% "[%altedition%] Edition product key will be used to ena echo: ) -set _partial= -if not defined key ( -if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" Get PartialProductKey /value 2^>nul') do set "_partial=%%#" -if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT PartialProductKey FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).PartialProductKey | %% {echo ('PartialProductKey='+$_)}" 2^>nul') do set "_partial=%%#" -call echo Checking Installed Product Key [Partial Key - %%_partial%%] [%_channel%] -) - -set _channel= -set error_code= -if defined key ( if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call InstallProductKey ProductKey="%key%" %nul% if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Version FROM SoftwareLicensingService').Get()).InstallProductKey('%key%')" %nul% -if not !errorlevel!==0 cscript //nologo %windir%\system32\slmgr.vbs /ipk %key% %nul% -set error_code=!errorlevel! -cmd /c exit /b !error_code! -if !error_code! NEQ 0 set "error_code=[0x!=ExitCode!]" +if not %errorlevel%==0 cscript //nologo %windir%\system32\slmgr.vbs /ipk %key% %nul% +set errorcode=%errorlevel% +cmd /c exit /b %errorcode% +if %errorcode% NEQ 0 set "errorcode=[0x%=ExitCode%]" -if !error_code! EQU 0 ( +if %errorcode% EQU 0 ( call :dk_refresh -call :dk_channel -call echo Installing Generic Product Key [%key%] [%%_channel%%] [Successful] -) else ( -call :dk_color %Red% "Installing Generic Product Key [%key%] [Failed] !error_code!" -) -) - -::======================================================================================================================================== - -:: Files are copied to temp to generate ticket to avoid possible issues in case the path contains special character or non English names - -echo: -set "temp_=%SystemRoot%\Temp\_Temp" -if exist "%temp_%\.*" rmdir /s /q "%temp_%\" %nul% -md "%temp_%\" %nul% - -pushd "!_work!\BIN\" -copy /y /b "gatherosstate.exe" "%temp_%\gatherosstate.exe" %nul% -popd - -if not exist "%temp_%\gatherosstate.exe" ( -call :dk_color %Red% "Copying Required Files to Temp [%temp_%] [Failed]" -goto :dl_final -) else ( -echo Copying Required Files to Temp [%temp_%] [Successful] -) - -::======================================================================================================================================== - -if /i "%_hash%"=="3FCCB9C359EDB9527C9F5688683F8B3C5910E75D" ( -echo Checking gatherosstate.exe [Already Modified] -%nul% ren "%temp_%\gatherosstate.exe" "gatherosstatemodified.exe" -goto :dlskipmod -) - -:: Modify gatherosstate.exe - -pushd "%temp_%\" -%nul% %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':hex\:.*';iex ($f[1]);" -popd - -if not exist "%temp_%\gatherosstatemodified.exe" ( -call :dk_color %Red% "Creating Modified Gatherosstate [Failed] Aborting..." -goto :dl_final -) - -set _hash= -for /f "skip=1 tokens=* delims=" %%# in ('certutil -hashfile "%temp_%\gatherosstatemodified.exe" SHA1^|findstr /i /v CertUtil') do set "_hash=%%#" -set "_hash=%_hash: =%" - -if /i not "%_hash%"=="3FCCB9C359EDB9527C9F5688683F8B3C5910E75D" ( -call :dk_color %Red% "Creating Modified Gatherosstate [Failed] [Hash Not Matched] Aborting..." -goto :dl_final +echo Installing Generic Product Key [%key%] [Successful] ) else ( -echo Creating Modified Gatherosstate [Successful] +set error=1 +call :dk_color %Red% "Installing Generic Product Key [%key%] [Failed] %errorcode%" +if defined applist if defined actidnotfound call :dk_color %Red% "Activation ID not found for this key. Make sure you are using updated version of MAS." ) -:dlskipmod - ::======================================================================================================================================== -:: Clean ClipSVC Licences -:: This code runs only if Lockbox method to generate ticket is manually set by the user in this script. - -if %_lock%==1 ( -for %%# in (ClipSVC) do ( -sc query %%# | find /i "STOPPED" %nul% || net stop %%# /y %nul% -sc query %%# | find /i "STOPPED" %nul% || sc stop %%# %nul% -) - -rundll32 clipc.dll,ClipCleanUpState +:: Change Windows region to USA to avoid activation issues as Windows store license is not available in many countries -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\*.dat" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\*.dat" %nul% +for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Name 2^>nul') do set "name=%%b" +for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Nation 2^>nul') do set "nation=%%b" -if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" ( -call :dk_color %Red% "Cleaning ClipSVC Licences [Failed]" +set regionchange= +if not "%name%"=="US" ( +set regionchange=1 +%psc% Set-WinHomeLocation -GeoId 244 +if !errorlevel! EQU 0 ( +echo Changing Windows Region To USA [Successful] ) else ( -echo Cleaning ClipSVC Licences [Successful] +call :dk_color %Red% "Changing Windows Region To USA [Failed]" ) ) -::======================================================================================================================================== - -:: Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after -:: system restart. It needs to be deleted to activate the system without restart. - -:: This code runs only if Lockbox method to generate ticket is manually set by the user in this script. - -set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" -set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" - -if %_lock%==1 ( -%nul% call :regown "%RegKey%" -reg delete "%RegKey%" /f %nul% - -reg query "%RegKey%" %nul% && ( -call :dk_color %Red% "Deleting a Volatile Registry [Failed]" -call :dk_color %Magenta% "Restart the system, that will delete this registry key automatically" -) || ( -echo Deleting a Volatile Registry [Successful] -) - -REM Clear HWID token related registry to fix activation incase if there is any corruption - -reg delete "%_ident%" /f %nul% -reg query "%_ident%" %nul% && ( -call :dk_color %Red% "Deleting a Registry [Failed] [%_ident%]" -) || ( -echo Deleting a Registry [Successful] [%_ident%] -) -) - -::======================================================================================================================================== +::========================================================================================================================================== -:: Multiple attempts to generate the ticket because in some cases, one attempt is not enough. +:: Generate GenuineTicket.xml and apply +:: Most correct way to apply a ticket is by restarting ClipSVC service but we can not check the log details in this way +:: To get the log details and also to correctly apply ticket, script will install tickets two times (service restart + clipup -v -o) -echo: -set "_noxml=if not exist "%temp_%\GenuineTicket.xml"" +set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" +if not exist "%tdir%\" md "%tdir%\" %nul% -set pfn= -for /f "skip=2 tokens=3*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "pfn=%%a" +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% +if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -"%temp_%/gatherosstatemodified.exe" Pfn=%pfn%;DownlevelGenuineState=1 -%_noxml% timeout /t 3 %nul% -%_noxml% net stop sppsvc /y %nul% -%_noxml% call "%temp_%/gatherosstatemodified.exe" Pfn=%pfn%;DownlevelGenuineState=1 -%_noxml% timeout /t 3 %nul% +call :hwiddata ticket -:: Refresh ClipSVC (required after cleanup) with below command, not related to generating tickets +copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% -if %_lock%==1 ( -for %%# in (wlidsvc LicenseManager sppsvc) do (net stop %%# /y %nul% & net start %%# /y %nul%) -call :dk_refresh -) - -%_noxml% ( -call :dk_color %Red% "Generating GenuineTicket.xml [Failed] [%pfn%]" -goto :dl_final -) - -if %_lock%==1 ( -find /i "clientLockboxKey" "%temp_%\GenuineTicket.xml" >nul && ( -echo Generating GenuineTicket.xml [Successful] [%pfn%] -) || ( -call :dk_color %Red% "Generating GenuineTicket.xml [Failed] [%pfn%]" -call :dk_color %Red% "downlevelGTkey Ticket created. Aborting..." +if not exist "%tdir%\GenuineTicket.xml" ( +call :dk_color %Red% "Generating GenuineTicket.xml [Failed]" +echo [%encoded%] +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% goto :dl_final -) -) else ( -echo Generating GenuineTicket.xml [Successful] [%pfn%] -) - -::======================================================================================================================================== - -:: Copy GenuineTicket.xml to the root of C drive and exit if ticket generation option was used in script - -if %_gent%==1 ( -echo: -copy /y /b "%temp_%\GenuineTicket.xml" "%Systemdrive%\GenuineTicket.xml" %nul% -if not exist "%Systemdrive%\GenuineTicket.xml" ( -call :dk_color %Red% "Copying GenuineTicket.xml to %Systemdrive%\ [Failed]" ) else ( -call :dk_color %Green% "Copying GenuineTicket.xml to %Systemdrive%\ [Successful]" -) -goto :dl_final -) - -::======================================================================================================================================== - -:: clipup -v -o -altto & clipup -v -o both methods may fail if the username have spaces/special characters/non English names -:: Most correct way to apply a ticket is by restarting ClipSVC service but we can not check the log details in this way -:: To get the log details and also to correctly apply ticket, script will install tickets two times (service restart + clipup -v -o -altto ) - -set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" -if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -if not exist "%tdir%\" md "%tdir%\" %nul% -copy /y /b "%temp_%\GenuineTicket.xml" "%tdir%\GenuineTicket.xml" %nul% - -if not exist "%tdir%\GenuineTicket.xml" ( -call :dk_color %Red% "Copying Ticket to ClipSVC Location [Failed]" +echo Generating GenuineTicket.xml [Successful] ) set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" @@ -737,11 +440,13 @@ net start ClipSVC /y %nul% %_xmlexist% ( if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart Method]" +call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart, Wait...]" ) ) -clipup -v -o -altto %temp_%\ +copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% +clipup -v -o +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% ::========================================================================================================================================== @@ -754,35 +459,40 @@ echo: call :dk_act call :dk_checkperm if defined _perm ( -set activ=1 call :dk_color %Green% "%winos% is permanently activated." goto :dl_final ) -:: Refresh some services and license status -if %_lock%==1 set _retry=1 -if defined _intcon set _retry=1 +if not defined error ( + +REM Clear store ID related registry to fix activation incase if there is any corruption + +set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" +reg delete "!_ident!" /f %nul% +reg query "!_ident!" %nul% && ( +call :dk_color %Red% "Deleting a Registry [Failed] [!_ident!]" +) || ( +echo Deleting a Registry [Successful] [!_ident!] +) + +REM Refresh some services and license status -if defined _retry ( for %%# in (wlidsvc LicenseManager sppsvc) do (net stop %%# /y %nul% & net start %%# /y %nul%) call :dk_refresh call :dk_act -) - call :dk_checkperm - -set "_unsup=call :dk_color %Magenta% "At the time of writing this, HWID Activation was not supported for this product."" +) if defined _perm ( -set activ=1 call :dk_color %Green% "%winos% is permanently activated." ) else ( call :dk_color %Red% "Activation Failed %error_code%" -if defined key if defined pkey %_unsup% -if not defined key %_unsup% -if defined notworking %_unsup% -if not defined notworking if defined key if not defined pkey call :dk_color %Magenta% "Restart the system and try again / Check troubleshooting steps in MAS Extras option" +if defined notworking ( +call :dk_color %Magenta% "At the time of writing this, HWID Activation was not supported for this product." +) else ( +call :dk_color2 %Magenta% "Check this page for help" %_Yellow% " https://massgrave.dev/troubleshoot" +) ) ::======================================================================================================================================== @@ -790,55 +500,22 @@ if not defined notworking if defined key if not defined pkey call :dk_color %Mag :dl_final echo: -if exist "%temp_%\.*" rmdir /s /q "%temp_%\" %nul% -if exist "%temp_%\" ( -call :dk_color %Red% "Cleaning Temp Files [Failed]" + +if defined regionchange ( +%psc% Set-WinHomeLocation -GeoId %nation% +if !errorlevel! EQU 0 ( +echo Restoring Windows Region [Successful] ) else ( -echo Cleaning Temp Files [Successful] +call :dk_color %Red% "Restoring Windows Region [Failed] [%name%-%nation%]" ) - -if %osSKU%==175 ( -call :dk_color %Red% "ServerRdsh Editon does not officially support activation on non-azure platforms." ) -if not defined activ call :dk_checkerrors - -if not defined activ if not defined error ( -echo Basic Diagnostic Tests [Error Not Found] -) +if %osSKU%==175 call :dk_color %Red% "ServerRdsh Editon does not officially support activation on non-azure platforms." goto :dk_done ::======================================================================================================================================== -:: A lean and mean snippet to set registry ownership and permission recursively -:: Written by @AveYo aka @BAU -:: pastebin.com/XTPt0JSC - -:: Modified by @abbodi1406 to make it work in ARM64 Windows 10 (builds older than 21277) where only x86 version of Powershell is installed. - -:: This code runs only if Lockbox method is manually set by the user in this script. - -:regown - -pushd "!_work!" -setlocal DisableDelayedExpansion - -set "0=%~nx0"&%psc% $A='%~1','%~2','%~3','%~4','%~5','%~6';iex(([io.file]::ReadAllText($env:0)-split':Own1\:.*')[1])&popd&setlocal EnableDelayedExpansion&exit/b:Own1: -$D1=[uri].module.gettype('System.Diagnostics.Process')."GetM`ethods"(42) |where {$_.Name -eq 'SetPrivilege'} #`:no-ev-warn -'SeSecurityPrivilege','SeTakeOwnershipPrivilege','SeBackupPrivilege','SeRestorePrivilege'|foreach {$D1.Invoke($null, @("$_",2))} -$path=$A[0]; $rk=$path-split'\\',2; switch -regex ($rk[0]){'[mM]'{$hv=2147483650};'[uU]'{$hv=2147483649};default{$hv=2147483648};} -$HK=[Microsoft.Win32.RegistryKey]::OpenBaseKey($hv, 256); $s=$A[1]; $sps=[Security.Principal.SecurityIdentifier] -$u=($A[2],'S-1-5-32-544')[!$A[2]];$o=($A[3],$u)[!$A[3]];$w=$u,$o |% {new-object $sps($_)}; $old=!$A[3];$own=!$old; $y=$s-eq'all' -$rar=new-object Security.AccessControl.RegistryAccessRule( $w[0], ($A[5],'FullControl')[!$A[5]], 1, 0, ($A[4],'Allow')[!$A[4]] ) -$x=$s-eq'none';function Own1($k){$t=$HK.OpenSubKey($k,2,'TakeOwnership');if($t){0,4|%{try{$o=$t.GetAccessControl($_)}catch{$old=0} -};if($old){$own=1;$w[1]=$o.GetOwner($sps)};$o.SetOwner($w[0]);$t.SetAccessControl($o); $c=$HK.OpenSubKey($k,2,'ChangePermissions') -$p=$c.GetAccessControl(2);if($y){$p.SetAccessRuleProtection(1,1)};$p.ResetAccessRule($rar);if($x){$p.RemoveAccessRuleAll($rar)} -$c.SetAccessControl($p);if($own){$o.SetOwner($w[1]);$t.SetAccessControl($o)};if($s){$($subkeys=$HK.OpenSubKey($k).GetSubKeyNames()) 2>$null; -foreach($n in $subkeys){Own1 "$k\$n"}}}};Own1 $rk[1];if($env:VO){get-acl Registry::$path|fl} #:Own1: lean & mean snippet by AveYo - -::======================================================================================================================================== - :: Get Windows permanent activation status :dk_checkperm @@ -855,14 +532,6 @@ if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicen if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'SoftwareLicensingService').GetInstances()).RefreshLicenseStatus()" %nul% exit /b -:: Get Windows installed key channel - -:dk_channel - -if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" Get ProductKeyChannel /value 2^>nul') do set "_channel=%%#" -if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT ProductKeyChannel FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).ProductKeyChannel | %% {echo ('ProductKeyChannel='+$_)}" 2^>nul') do set "_channel=%%#" -exit /b - :: Activation command :dk_act @@ -912,97 +581,54 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com ) exit /b -:dk_initial +::======================================================================================================================================== -echo: -echo Initializing... +:dk_errorcheck -:: Check and enable WinMgmt, sppsvc services if required +:: Check disabled services -for %%# in (WinMgmt sppsvc) do ( -for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b NEQ 0x2 ( -echo: -echo Enabling %%# service... -if /i %%#==sppsvc sc config %%# start= delayed-auto %nul% || echo Failed -if /i %%#==WinMgmt sc config %%# start= auto %nul% || echo Failed -) -sc start %%# %nul% -if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 ( -echo: -echo Starting %%# service... -sc start %%# -echo: -call :dk_color %Red% "Failed to start [%%#] service, rest of the process may take a long time..." -) +set serv_ste= +for %%# in (%_serv%) do ( +set serv_dis= +reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start %nul% || set serv_dis=1 +for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b equ 0x4 set serv_dis=1 +if defined serv_dis (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#")) ) -:: Check WMI and SPP Errors - -call :dk_ckeckwmic - -set e_wmi= -set e_wmispp= -call :dk_actids - -if not defined applist ( -net stop sppsvc /y %nul% -cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -call :dk_refresh +:: Change disabled services startup type to default -if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul -if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul -if !errorlevel! NEQ 0 set e_wmi=1 +set serv_csts= +set serv_cste= -if defined e_wmi (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP) -call :dk_actids +if defined serv_ste ( +for %%# in (%serv_ste%) do ( +if /i %%#==ClipSVC (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%#" /v "Start" /t REG_DWORD /d "3" /f %nul% & sc config %%# start= demand %nul%) +if /i %%#==wlidsvc sc config %%# start= demand %nul% +if /i %%#==sppsvc (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%#" /v "Start" /t REG_DWORD /d "2" /f %nul% & sc config %%# start= delayed-auto %nul%) +if /i %%#==LicenseManager sc config %%# start= demand %nul% +if /i %%#==Winmgmt sc config %%# start= auto %nul% +if /i %%#==wuauserv sc config %%# start= demand %nul% +if !errorlevel!==0 ( +if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#") +) else ( +set error=1 +if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#") +) +) ) -exit /b - -::======================================================================================================================================== - -:: Get Product Key from pkeyhelper.dll for future new editions -:: It works on Windows 10 1803 (17134) and later builds. (Partially on 1803 & 1809, fully on 1903 and later) - -:dk_pkey - -set pkey= -set d1=[DllImport(\"pkeyhelper.dll\",CharSet=CharSet.Unicode)]public static extern int SkuGetProductKeyForEdition(int e, string c, out string k, out string p); -set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k=''; $null=$AP::SkuGetProductKeyForEdition(%1, %2, [ref]$k, [ref]$null); $k -for /f %%a in ('%psc% "%d2%"') do if not errorlevel 1 (set pkey=%%a) -exit /b - -:: Get channel name for the key which was extracted from pkeyhelper.dll - -:dk_pkeychannel - -set k=%1 -set pkeychannel= -set p=%SystemRoot%\System32\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms -set m=[System.Runtime.InteropServices.Marshal] -set d1=[DllImport(\"PidGenX.dll\",CharSet=CharSet.Unicode)]public static extern int PidGenX(string k,string p,string m,int u,IntPtr i,IntPtr d,IntPtr f); -set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k='%k%'; $p='%p%'; $r=[byte[]]::new(0x04F8); $r[0]=0xF8; $r[1]=0x04; $f=%m%::AllocHGlobal(1272); %m%::Copy($r,0,$f,1272); -set d3=%d2% [void]$AP::PidGenX($k,$p,\"00000\",0,0,0,$f); %m%::Copy($f,$r,0,1272); %m%::FreeHGlobal($f); [System.Text.Encoding]::Unicode.GetString($r, 1016, 128).Replace('0','') -for /f %%a in ('%psc% "%d3%"') do if not errorlevel 1 (set pkeychannel=%%a) -exit /b -:dk_hwidkey +if defined serv_csts echo Enabling Disabled Services [Successful] [%serv_csts%] -for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b -for %%# in (Retail OEM:NONSLP OEM:DM Volume:MAK) do ( -call :dk_pkey %osSKU% '%%#' -if defined pkey call :dk_pkeychannel !pkey! -if /i [!pkeychannel!]==[%%#] ( -set key=!pkey! -exit /b +if defined serv_cste ( +echo %serv_cste% | findstr /i "ClipSVC sppsvc" %nul% && ( +call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%] [Restart System]" +) || ( +call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]" ) ) -exit /b ::======================================================================================================================================== -:dk_checkerrors - :: Check if the services are able to run or not :: Workarounds are added to get correct status and error code because sc query doesn't output correct results in some conditions @@ -1010,11 +636,12 @@ set serv_e= for %%# in (%_serv%) do ( set errorcode= set checkerror= -sc query %%# | find /i ": 4 RUNNING" %nul% || net start %%# /y %nul% +net start %%# /y %nul% +sc query %%# | find /i "4 RUNNING" %nul% || set checkerror=1 + sc start %%# %nul% set errorcode=!errorlevel! if !errorcode! NEQ 1056 if !errorcode! NEQ 0 set checkerror=1 -sc query %%# | find /i ": 4 RUNNING" %nul% || set checkerror=1 if defined checkerror if defined serv_e (set "serv_e=!serv_e!, %%#-!errorcode!") else (set "serv_e=%%#-!errorcode!") ) @@ -1023,45 +650,71 @@ set error=1 call :dk_color %Red% "Starting Services [Failed] [%serv_e%]" ) +::======================================================================================================================================== + :: Various error checks -set token=0 -if exist %Systemdrive%\Windows\System32\spp\store\2.0\tokens.dat set token=1 -if exist %Systemdrive%\Windows\System32\spp\store_test\2.0\tokens.dat set token=1 -if %token%==0 ( +for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( +call :dk_color %Gray% "Checking WMIC.exe [Not Found]" +) + + +%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( set error=1 -call :dk_color %Red% "Checking SPP tokens.dat [Not Found]" +call :dk_color %Red% "Checking Powershell [Not Responding]" ) + +if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul +if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul +if %errorlevel% NEQ 0 ( +set error=1 +call :dk_color %Red% "Checking WMI [Not Responding] %_wmic%" +) + + +if not "%regSKU%"=="%wmiSKU%" ( +set error=1 +call :dk_color %Red% "Checking WMI/REG SKU [Difference Found - WMI:%wmiSKU% Reg:%regSKU%]" +) + + DISM /English /Online /Get-CurrentEdition %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]" if %error_code% NEQ 0 ( -set error=1 call :dk_color %Red% "Checking DISM [Not Responding] %error_code%" ) -%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( -set error=1 -call :dk_color %Red% "Checking Powershell [Not Responding]" + +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" ) -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( + +cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% +set error_code=%errorlevel% +cmd /c exit /b %error_code% +if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" +if %error_code% NEQ 0 ( set error=1 -call :dk_color %Gray% "Checking WMIC.exe [Not Found]" +call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %error_code%" ) + reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && ( set error=1 call :dk_color %Red% "Checking Rearm [System Restart Is Required]" ) + reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && ( set error=1 call :dk_color %Red% "Checking ClipSVC [System Restart Is Required]" ) + for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" 2^>nul') do if /i %%b NEQ 0x0 ( reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" /t REG_DWORD /d "0" /f %nul% call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found, Changing To 0]" @@ -1070,40 +723,39 @@ net start sppsvc /y %nul% set error=1 ) -set _wsh=1 -reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _wsh=0) -reg query "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _wsh=0) -if %_wsh% EQU 0 ( + +call :dk_actids +if not defined applist ( +net stop sppsvc /y %nul% +cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% +if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% +call :dk_refresh +call :dk_actids +if not defined applist ( set error=1 -call :dk_color %Gray% "Checking Windows Script Host [Disabled]" +call :dk_color %Red% "Checking Activation IDs [Not Found]" +) ) -cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% -set error_code=%errorlevel% -cmd /c exit /b %error_code% -if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]" -if %error_code% NEQ 0 ( + +set token=0 +if exist %Systemdrive%\Windows\System32\spp\store\2.0\tokens.dat set token=1 +if exist %Systemdrive%\Windows\System32\spp\store_test\2.0\tokens.dat set token=1 +if %token%==0 ( set error=1 -call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %error_code%" +call :dk_color %Red% "Checking SPP tokens.dat [Not Found]" ) -if not defined applist ( +if not exist %SystemRoot%\system32\sppsvc.exe ( set error=1 -call :dk_color %Red% "Checking WMI/SPP [Not Responding] [%e_wmispp%]" +call :dk_color %Red% "Checking sppsvc.exe File [Not Found]" ) -set nil= -set _sppint= -if not %_gent%==1 if not defined error ( -for %%# in (SppE%nil%xtComObj.exe,sppsvc.exe) do ( -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%nil%ge File Execu%nil%tion Options\%%#" %nul% && set _sppint=1 +if /i %error_code% EQU 0xc0000022 ( +echo "%serv_e%" | find /i "sppsvc" %nul% && ( +call :dk_color %Magenta% "Looks like you may have used a Gaming spoofer. Check Activation Troubleshoot option in MAS." ) ) - -if defined _sppint ( -call :dk_color %Red% "Checking SPP Interference In IFEO [Found] [Uninstall KMS Activator If There Is Any]" -set error=1 -) exit /b ::======================================================================================================================================== @@ -1141,82 +793,91 @@ exit /b :: 1st column = Activation ID :: 2nd column = Generic Retail/OEM/MAK Key :: 3rd column = SKU ID -:: 4th column = 1 = activation is not working (at the time of writing this), 0 = activation is working -:: 5th column = Key Type -:: 6th column = WMI Edition ID -:: 7th column = Version name incase same Edition ID is used in different OS versions with different key +:: 4th column = Key part number +:: 5th column = Ticket signature value. It's as it is, it's not encoded. (Check https://massgrave.dev/hwid.html#Manual_Activation to see how it's generated) +:: 6th column = 1 = activation is not working (at the time of writing this), 0 = activation is working +:: 7th column = Key Type +:: 8th column = WMI Edition ID +:: 9th column = Version name incase same Edition ID is used in different OS versions with different key :: Separator = _ -:: Key preference is in the following order. Retail > OEM:NONSLP > OEM:DM > Volume:MAK - :hwiddata for %%# in ( -8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_0_OEM:NONSLP_Enterprise -23505d51-32d6-41f0-8ca7-e78ad0f16e71_D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ__11_1_____Retail_Starter -c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_0_Volume:MAK_EnterpriseN -211b80cc-7f64-482c-89e9-4ba21ff827ad_3NFXW-2T27M-2BDW6-4GHRV-68XRX__47_1_____Retail_StarterN -4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_0_____Retail_Professional -9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_0_____Retail_ProfessionalN -f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_0_____Retail_CoreN -1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_0_____Retail_CoreCountrySpecific -3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_0_____Retail_CoreSingleLanguage -2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_0_____Retail_Core -2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_0_OEM:NONSLP_PPIPro -e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_0_____Retail_Education -c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_0_____Retail_EducationN -cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_1_Volume:MAK_EnterpriseS_2021 -d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_0_OEM:NONSLP_EnterpriseS_2019 -706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_0_OEM:NONSLP_EnterpriseS_2016 -faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_0_OEM:NONSLP_EnterpriseS_2015 -2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_1_Volume:MAK_EnterpriseSN_2021 -e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_1_Volume:MAK_EnterpriseSN_2019 -3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_0_Volume:MAK_EnterpriseSN_2016 -60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_0_Volume:MAK_EnterpriseSN_2015 -a48938aa-62fa-4966-9d44-9f04da3f72f2_G3KNM-CHG6T-R36X3-9QDG6-8M8K9_138_1_____Retail_ProfessionalSingleLanguage -f7af7d09-40e4-419c-a49b-eae366689ebd_HNGCC-Y38KG-QVK8D-WMWRK-X86VK_139_1_____Retail_ProfessionalCountrySpecific -eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_0_____Retail_ProfessionalWorkstation -89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_0_____Retail_ProfessionalWorkstationN -62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_0_____Retail_ProfessionalEducation -13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_0_____Retail_ProfessionalEducationN -1ca0bfa8-d96b-4815-a732-7756f30c29e2_FV469-WGNG4-YQP66-2B2HY-KD8YX_171_1_OEM:NONSLP_EnterpriseG -8d6f6ffe-0c30-40ec-9db2-aad7b23bb6e3_FW7NV-4T673-HF4VX-9X4MM-B4H4T_172_1_OEM:NONSLP_EnterpriseGN -df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_0_____Retail_ServerRdsh -d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_0_____Retail_Cloud -af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_0_____Retail_CloudN -c7051f63-3a76-4992-bce5-731ec0b1e825_2HN6V-HGTM8-6C97C-RK67V-JQPFD_183_1_____Retail_CloudE -8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_0_____OEM:DM_IoTEnterprise -ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_0_OEM:NONSLP_IoTEnterpriseS -d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_0_____Retail_CloudEditionN -92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_0_____Retail_CloudEdition +8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_X19-99683_X9J5T0gPQprYpz2euPvoJGlkurIO9h6N8ypE0KWYVpy0nbCKYnqSUCD7u8ReXAmc085jX2uM5PKurSee9Yq/PxesgiysQHDBsOhr98MXZZiIgy4ssnz2gZF70KB8tO3X7kk9LHwxXfz3rlquYPod9swe90nqvVaJMWCpQK0InUw_0_OEM:NONSLP_Enterprise +c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_X19-98746_WFZBjlVtHQumoaVE28/NHsRvv1lgkkfav6NPHqr6OC2u4vxkjjJkkl9OTF6DpHJu0IFrrQv+HYcdZ/WC5EzhOMqMxcujTBSAN7xLIVEbs72Db0Bi5iDAbOltJpk8QKKe18otQJ6vajW5WOPXjbgSJfDFaZQfiwvIJ1ICXt+stog_0_Volume:MAK_EnterpriseN +4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_X19-98841_K3qev/5gQpX1RK1F9M9beEWWv/di1GsRF7OUcEMGTGDTYnaRenRcJaO8zOHQQvKDc57fon/v77ZpHQHT/jWWhWnLm7Ssory+s8tOs72fPjivVBDwpSPIEC1v+8Vpb4a3XCZet2e/Z5wmpCq9XDkowys3IcxYM0mHWBaNPu8gIe4_0_____Retail_Professional +9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_X19-98859_WcAcor6kQgxgkTRzcoxnb8UIoo5/ueYeaOKqy9/xAzlruHAKxhatXeGtSI58lXcCK5hxXkDmcyrRFwWSwdvg0txwTi7VusYcTNCLdmNWU/62iDrBhzMrCYtuhW9EV/g4+TlbjSm4PBJ0HMlI4YzAEnyJiBgKPDgBQ8Gj9LRbEgU_0_____Retail_ProfessionalN +f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_X19-98877_MBDSEqlayxtVVEgIeAl8milgjS/BVHow6+MmpCyh9nweuctlT1+LbEHmDlnqDeLr9FQrN2FpEJtNr26rE0niMdvcAP51MfJsREyhWOEbrWwWyMH0KwDAci2WxWZTJp/SEZnq5HYYT1pPPLMWAkKRHJksJJFtg4zBtoyHvLjc35c_0_____Retail_CoreN +1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_X19-99652_mpjCoh6soA/rwJutsjekZpA9vDUD8znR20V/c8FwSjuCcSbPhmP6bpJR9rfptAZqpagliMxA/OUZsx0Knt0n/hgOy2mv8pr24gI9uYXK8EfhG74bVdsyvZz1tyA6CaVR02ZahQvbKYzCmXUvsI+Wge3bHbKbVpn9Mvl+itn2a4g_0_____Retail_CoreCountrySpecific +3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_X19-99661_KaUs6KwvtthPOsxd3x0tU/baKSv1DWSFOqbq7PbU/uYEY95p0Skzv3y4aXq+xVmfwSt8STL/4vSfFIAlsaRh7Vnq6Y/Ael8joeqI8hBN461fykoHxSELRMJ+eed50T0cJUS79ol6OTBOCCVeHgmtGVbHuL88TMWW69fGNdIMM3U_0_____Retail_CoreSingleLanguage +2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_X19-98868_NpHxrAtA+GL6kawAP5Z2UdfUVcKFvf9UzEe6FIV/HztZqxpMBDFv2hdxCjD9+T8PKcW8j3n04McelOAgr3lD37Fu+wrvJIGX0dG3xEtU/MG9L9X5baBS8H6AmC6rq2+w5NUY8EchK9W2oatBflFb8IcfCSeAyOfsJei6bdu4mp8_0_____Retail_Core +2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_X19-99606_gtywgqIP3j+bliKdunuseeZWtsOzWhj+DmSBq7nqeNarHutgbWEwvcRiGo+nwxONt9Ak/VyuO76ZWH/db3iRVTk1y61vFv15gVlOy1ovLjVHBvmPVdQXIne2N+pIMb0eBhZWHRX63mYdkZRZ0wg/+bj4xsjJv+qLpWhVCzNMge4_0_OEM:NONSLP_PPIPro +e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_X19-98886_VuBmoSUdF63Cvwm9wNlc2yhD2tP9B72iVVWFNcbAwDGXF6o06oNMsIJ0VqGJDdBzZjVGw2wHokMabxZNDyIl90CO7trwgV8S0lLJVLymxyUaE3ThvN3YUsi9Q3H+5Kr0RpsojCWb+UQd/GY4bSXfyStXFylj6im7yv0db/ZWGbw_0_____Retail_Education +c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_X19-98892_jQ6S2bbNoVrp/zvi8BEUwCf7fge1nAdspcjXyTeTySUiR+hXPiKQEWgyLqAdZ5Or+X2JGT/LZN1/eZ9P+REmzG/WQotZ+fyyPguoSsES+d312RkfmQoI5gVanEkGjZSU4YohREM/Vyf9MOO7dbH9MMEpFm2mje6OnhyJo2gux0g_0_____Retail_EducationN +cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_X22-66075_wJ/BPDFz+13PVJtBqBo+E4LCm3LoMVALCQUun9kXGBULr7V8FQ5nKUudUGHDLNNVIIicdw9Uh26BKAt0/hnE7BpBkzwdi4qAdZgKXQ1t06Ek4+zXmoT225NvpaHsuhDkE687TtCB1ZWvAulA8G9ehE3HTJSoNm4wCFOQyIQQtqQ_1_Volume:MAK_EnterpriseS_VB +d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_X21-83233_V+y0SFmAnGwRwgNz+0sO0mj+XxSjbdRDpom1Iqx2BJcsf96Q5ittJOcMhKiNswyKuq5suM5vy60tA/AUdb1mrnnrnXfmz7nFam/BIOOfa18GA7vd1aNFufhpmCiMWxoGSewH/T1pnCZrsvGYIj//qC7aiQVKYBngO7UYWGaytgc_0_OEM:NONSLP_EnterpriseS_RS5 +706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_X21-05035_U2DIv+LAhSGz0rNbTiMQYaP3M41+0+ZioF7vh0COeeJSIruDFCZ3Li7ZM3dSleg6QTCxG04uZ3i3r1bCZv0+WAfU9rG+3BqLAwKlJS/31rETeRWvrxB1UK4mTMHwAJc9txDAc15ureqF+2b9pIIpwLljmFer6fI7z0iI6I/ZuTU_0_OEM:NONSLP_EnterpriseS_RS1 +faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_X19-99617_0frpwr4N/wBVRA/nOvAMqkxmRj6Vv9mA+jVNtnurAL1TjkPN/y+6YVUd5MP/Y4As4kddHoHiZXI+2siKHJsaV95ppXoHKR8d7FRVitr1F+82TbB7OVvdCclGrRZymnq25HvtSC3BROHt7ZXTgSCWMyB7MlbLiqHiTymOj5OMX1g_0_OEM:NONSLP_EnterpriseS_TH +2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_X22-66108_UeA6O2iIW6zFMJzLMCQjVA7gUHOGRTiFB6LPrgjhgfJEXSZnDjxw8wsR+tp+JQWeaQDsVt06c2byH3z7Ft2wNk8n3gcXUknIjlcCckNjw05WDI64/wCqz+gtf1RajMEoV/mODpBx7rdLtCg03FyV7Z9LOib4/WLSmnxjDPKMG7s_1_Volume:MAK_EnterpriseSN_VB +e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_X21-83264_NtP6sMWmOTCdABAbgIZfxZzRs8zaqzfaabLeFXQJvfJvQPLQPk2UxMliASJG+7YwwbTD8pyhUoQqUYrlCzJZ6jDSDyUTJkXgo9akR4fBOg6Z5wn5fW8NGAMDcLND5d9XxHl0gWH/HZNIs/GZaPJsCVVqPr7X8bk/y0DeIofxICU_1_Volume:MAK_EnterpriseSN_RS5 +3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_X21-04921_WeNSkuiC3iyNT9tDqlj6KvM17UYMsYjEelyyMEyPEXSAbYA08lYtYJjCzxSE9T30p9dxqPIuj370OwHhAxG8a51/HoLNWR0grj08HmdOXUA8Ap4clEivxKM0zRvwPR6L2M2HQP0nN54c9It7ikzweJ0X2HHOb58oEw9LbMeUM/Y_0_Volume:MAK_EnterpriseSN_RS1 +60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_X19-98770_QLG40WW/TtUqtir9K6FJCQXU1mfn27uutdOunHJ3gXk6v0Mbxaqu9GKqpg5xFzdFiOPb/8Bmk/ylwceXgoaUx1nKcBGb/Bg+jICiNMEYIbGyMuYiHb0iJeVbjbBLLfWuAAuUPftfnKPH3dAu1YvhaS5nv7a5wICrXdJWeVNpBxk_0_Volume:MAK_EnterpriseSN_TH +eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_X21-43626_vHO/5UEtrsDzGC30A2Ya5DYXlNMs7hVYiLvM7X31xkaFMxogbiy3ZDxBbjRku3VXyW+TYsFX/D/wdJgFmMrhsNrObkxqzYMMRjx+BpwOx2PspKpS2RyzovyRl8v93SvHB5IyoO2/3pm2YqJDK1hXLhms6+DDPuiofQt36q47reQ_0_____Retail_ProfessionalWorkstation +89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_X21-43644_phlxNLr+sk8cCCmAVU3k3XrtD6sFDeoaODc+21soKqePbVQbzPHgokS73ccok6/gDfu/u5UKc7omL8pm2IhIhf70oC+8M/FFp0zRFeC/ZFXdF2tL23oKWI9kZbvcaoZBiqaDGc1bNYi5KAZYaJU8wwqw16ZnohQJZ7QR9cgUfFQ_0_____Retail_ProfessionalWorkstationN +62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_X21-04955_Px7QWdfy0esrMzQoydKlmIcGdfV0pQvbnumyrh4evDNF9gpENm8OIfZfljIynury0qZAkw4AG3uGyp+5IxZGIh6U3dz41uNVfEcA9NZ34OEBXMtjEOU1ZbJ8wp8JecQKwlORclvsri9OOi0GbGc0TYRanlci2jJL/3x/gSuWXCs_0_____Retail_ProfessionalEducation +13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_X21-04956_GRSYno4+yqU/JMxHLDKdvdFWRz1uT90n5JkTvSqztDvXMf/mBhSV/OpppJWGo6UL0FwqYcu9oXl+Vx336pLAE5/EDzQHh+QCwOCDJiTKnd3hW/zrGMe6Sb0OAIkNNML9gcOBbr1IHFWhN99r8ZWl5JjpzMs2nPjejB1Ec8NCcpE_0_____Retail_ProfessionalEducationN +df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_X21-41295_kkJyX1AwYgDYcGK1eIRdocybkbAfEtQkDxhRUhY89X2i2PSD9jcsGQgHWyD3KUKWb3bzR8QkDS3MTeieOw3EzD0RyAQhHc6lRR+rk18lh5UOVCgrZ6byxn29Ur+jAh0LJXImggC9JMGb2cTYaZckxzm3ICoAKwrmI9JnrzBTVmY_0_____Retail_ServerRdsh +d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_X21-32983_YIMgXu2dZ9x1r1NLs3egTc/8EYc1RndYDvoX7QquQQLnhnhbSNBw3hmlqrQ0zNsTLut3EKpGZK2CwPspJJWE60lecdxI4211K748P6vkuqHPL4uFqXyKxTG3qRrtDIra5nnMn4GqG2fWuguzTXaumu8cJU3H1uTOsR1E/DQnJJ0_0_____Retail_Cloud +af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_X21-32987_H0qrFdf+FQxcSRJDtEwd8OfwC4iH/25Q01jz3QuB9yhEqB0W1i83u0WDpVK04pvU1EDCCRRI/DhXynbkWpLC0chdTOW4k5jIy+aa0cD3fccz9ChSjVHMzyTg3abEVFAvy9rttUyxcFIOKcINXHTxTRp5cZPwOa393tlJyBiliAo_0_____Retail_CloudN +8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_X21-99378_Bwx3E7qmE6M8UR6+KPqLnnavI6ThNHHUO717RJY9di2YI9rzC3O0LceXOHjshSKwfwxosqFsD/p/inrJmabed1yA/ZWwISyGtAIGTtRgpuSE4TAfW6KEW0v7rcr2wwwDq7DHSuz4QN4odEGe9bvtx4zIZKufQzzN4TN2rd/BJkE_0_____OEM:DM_IoTEnterprise +ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_X21-99682_lE8qL1p4m68mv9wcxU2sdKZPIccybtOjr+aMAdV+sLHs9wzE26oz5GiSZ3UzpU7yoYrNMqwGkKX6mrCEGRLh+XR2Ricp7ELA1PkzaGm0FLUqaK2GNVQ00i+s6KcA2XRr/gWOhhGTqSCjpSi9cMiqMbftf9Bo/BJVK3ib9xU4OQw_0_OEM:NONSLP_IoTEnterpriseS_VB +d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_X22-53884_hPcIn0dF9Dq6zlXd3RxBqVDPDnf5sTasTjUqhD6lGc9IkTc8476NHd1PV1Ds++VO34/dw2H2PWk33LT5Es6PnUi32Ypva4POy4QJo5W3qyduiJiHUOM5GS9yAkKfdHFgUXaUVwopYKq+EwmgxFmEvHYdWgREHgIMyNoKAZQK0Ok_0_____Retail_CloudEditionN +92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_X22-53847_DCP6QzPj+BD1EEmlBelBt7x9AmvQOfd7kdkUB0b0x6/TNHRnZtdyix3pNX2IDQtJbLnNLc2ZlMmupbZQrtyxe3xl8+xlCnHByXZpzFty9sGzq3MozHHA9u9WsJEf5R7tnFDplNM1UitlTVTAyuCGk83brY4zjmz/52pUQyQHzjI_0_____Retail_CloudEdition +d4f9b41f-205c-405e-8e08-3d16e88e02be_J7NJW-V6KBM-CC8RW-Y29Y4-HQ2MJ_205_X23-15027_U9eyfIBXrs++lyP6OjHHaF/wjieAxQeSKwzSkGBeTTpyCDcenq8t4cKvqDHnauSZzaVPWNoVcASkMCdlJi3EkR29KSgvx9/K2OB8LVH2PPpqvwjm1ZZdrvLMGhW83A/KRrtN9AOx7bnPC8MNLErnzbRRS9/aOrmp4Uzo8EIVagI_0_OEM:NONSLP_IoTEnterpriseSK ) do ( -for /f "tokens=1-8 delims=_" %%A in ("%%#") do if %osSKU%==%%C ( +for /f "tokens=1-10 delims=_" %%A in ("%%#") do ( + +if %1==key if %osSKU%==%%C ( + +REM Detect key attempt 1 -if %1==attempt1 if not defined key ( +if "%2"=="attempt1" if not defined key ( echo "!applist!" | find /i "%%A" 1>nul && ( -set app=%%A +if %%F==1 set notworking=1 set key=%%B -if %%D==1 set notworking=1 ) ) -if %1==attempt2 if not defined key ( -set 7th=%%G -if not defined 7th ( -set app=%%A -if %%D==1 set notworking=1 -if %winbuild% GTR 19044 call :dk_hwidkey %nul% -if not defined key set key=%%B +REM Detect key attempt 2 + +if "%2"=="attempt2" if not defined key ( +set actidnotfound=1 +set 9th=%%I +if not defined 9th ( +if %%F==1 set notworking=1 +set key=%%B ) else ( -echo "%winos%" | find /i "%%G" 1>nul && ( -set app=%%A -if %%D==1 set notworking=1 -if %winbuild% GTR 19044 call :dk_hwidkey %nul% -if not defined key set key=%%B +echo "%branch%" | find /i "%%I" 1>nul && ( +if %%F==1 set notworking=1 +set key=%%B ) ) ) +) + +REM Generate ticket + +if %1==ticket if "%key%"=="%%B" ( +set _nil= +set "string=OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;Pfn=Microsoft.Windows.%%C.%%D_8wekyb3d8bbwe;DownlevelGenuineState=1;$([char]0)" +for /f "tokens=* delims=" %%i in ('powershell [convert]::ToBas!_nil!e64String([Text.Encoding]::Unicode.GetBytes("""!string!"""^)^)') do set "encoded=%%i" +echo "!encoded!" | find "AAAA" 1>nul || exit /b + +1.0OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=!encoded!;TimeStampClient=2022-10-11T12:00:00Z%%E=" >"%tdir%\GenuineTicket" +) + ) ) exit /b @@ -1227,105 +888,38 @@ exit /b :: ProfessionalCountrySpecific won't be converted because it's not a good idea to change CountrySpecific editions -:: 1st column = Current Edition Activation ID -:: 2nd column = Alternate Edition Activation ID -:: 3rd column = Alternate Edition Key -:: 4th column = Current Edition Name -:: 5th column = Alternate Edition Name +:: 1st column = Current SKU ID +:: 2nd column = Current Edition Name +:: 3rd column = Current Edition Activation ID +:: 4th column = Alternate Edition Activation ID +:: 5th column = Alternate Edition HWID Key +:: 6th column = Alternate Edition Name :: Separator = _ -:: Key preference is in the following order. Retail > OEM:NONSLP > OEM:DM > Volume:MAK - :hwidfallback -if %_chan%==0 exit /b +set notfoundaltactID= +if %_NoEditionChange%==1 exit /b for %%# in ( -cce9d2de-98ee-4ce2-8113-222620c64a27_ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_EnterpriseS-2021____________IoTEnterpriseS -a48938aa-62fa-4966-9d44-9f04da3f72f2_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T_ProfessionalSingleLanguage__Professional +125_EnterpriseS-2021___________cce9d2de-98ee-4ce2-8113-222620c64a27_ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_IoTEnterpriseS-2021 +191_IoTEnterpriseS-Win11_______59eb965c-9150-42b7-a0ec-22151b9897c5_d4f9b41f-205c-405e-8e08-3d16e88e02be_J7NJW-V6KBM-CC8RW-Y29Y4-HQ2MJ_IoTEnterpriseSK-Win11 +138_ProfessionalSingleLanguage_a48938aa-62fa-4966-9d44-9f04da3f72f2_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T_Professional ) do ( -for /f "tokens=1-5 delims=_" %%A in ("%%#") do if "%app%"=="%%A" ( -echo "!applist!" | find /i "%%B" 1>nul && ( -set altkey=%%C -set curedition=%%D -set altedition=%%E +for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A ( +echo "!applist!" | find /i "%%C" 1>nul && ( +echo "!applist!" | find /i "%%D" 1>nul && ( +set altkey=%%E +set curedition=%%B +set altedition=%%F +) || ( +set altedition=%%F +set notfoundaltactID=1 +) ) ) ) exit /b -::======================================================================================================================================== - -:: Script changes below values in official gatherosstate.exe so that it can generate usable ticket in Windows unlicensed state - -:hex:[ -$bytes = [System.IO.File]::ReadAllBytes("gatherosstate.exe") -$bytes[320] = 0x9c -$bytes[321] = 0xfb -$bytes[322] = 0x05 -$bytes[13672] = 0x25 -$bytes[13674] = 0x73 -$bytes[13676] = 0x3b -$bytes[13678] = 0x00 -$bytes[13680] = 0x00 -$bytes[13682] = 0x00 -$bytes[13684] = 0x00 -$bytes[32748] = 0xe9 -$bytes[32749] = 0x9e -$bytes[32750] = 0x00 -$bytes[32751] = 0x00 -$bytes[32752] = 0x00 -$bytes[32894] = 0x8b -$bytes[32895] = 0x44 -$bytes[32897] = 0x64 -$bytes[32898] = 0x85 -$bytes[32899] = 0xc0 -$bytes[32900] = 0x0f -$bytes[32901] = 0x85 -$bytes[32902] = 0x1c -$bytes[32903] = 0x02 -$bytes[32904] = 0x00 -$bytes[32906] = 0xe9 -$bytes[32907] = 0x3c -$bytes[32908] = 0x01 -$bytes[32909] = 0x00 -$bytes[32910] = 0x00 -$bytes[32911] = 0x85 -$bytes[32912] = 0xdb -$bytes[32913] = 0x75 -$bytes[32914] = 0xeb -$bytes[32915] = 0xe9 -$bytes[32916] = 0x69 -$bytes[32917] = 0xff -$bytes[32918] = 0xff -$bytes[32919] = 0xff -$bytes[33094] = 0xe9 -$bytes[33095] = 0x80 -$bytes[33096] = 0x00 -$bytes[33097] = 0x00 -$bytes[33098] = 0x00 -$bytes[33449] = 0x64 -$bytes[33576] = 0x8d -$bytes[33577] = 0x54 -$bytes[33579] = 0x24 -$bytes[33580] = 0xe9 -$bytes[33581] = 0x55 -$bytes[33582] = 0x01 -$bytes[33583] = 0x00 -$bytes[33584] = 0x00 -$bytes[34189] = 0x59 -$bytes[34190] = 0xeb -$bytes[34191] = 0x28 -$bytes[34238] = 0xe9 -$bytes[34239] = 0x4f -$bytes[34240] = 0x00 -$bytes[34241] = 0x00 -$bytes[34242] = 0x00 -$bytes[34346] = 0x24 -$bytes[34376] = 0xeb -$bytes[34377] = 0x63 -[System.IO.File]::WriteAllBytes("gatherosstatemodified.exe", $bytes) -:hex:] - ::======================================================================================================================================== \ No newline at end of file diff --git a/MAS/Separate-Files-Version/HWID-KMS38_Activation/KMS38_Activation.cmd b/MAS/Separate-Files-Version/HWID-KMS38_Activation/KMS38_Activation.cmd index fd812ea..09664d4 100644 --- a/MAS/Separate-Files-Version/HWID-KMS38_Activation/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/HWID-KMS38_Activation/KMS38_Activation.cmd @@ -14,27 +14,16 @@ -:: To activate, run the script with /a parameter or change 0 to 1 in below line -set _acti=0 +:: To activate, run the script with /KMS38 parameter or change 0 to 1 in below line +set _act=0 -:: To activate along with KMS38 protection (from being replaced by 180 days KMS activation), -:: run the script with /ap parameter or change 0 to 1 in below line -set _prot=0 +:: To remove KMS38 protection, run the script with /KMS38-RemoveProtection parameter or change 0 to 1 in below line +set _rem=0 -:: To only generate GenuineTicket.xml, run the script with /g parameter or change 0 to 1 in below line -set _gent=0 +:: To disable changing edition if current edition doesn't support KMS38 activation, change the value to 1 from 0 or run the script with "/KMS38-NoEditionChange" parameter +set _NoEditionChange=0 -:: To remove KMS38 protection, run the script with /x parameter or change 0 to 1 in below line -set _unin=0 - - - -:: If value is changed in ABOVE lines or any ABOVE parameter is used then script will run in unattended mode -:: Incase if more than one options are used then only one option will be applied - - -:: To disable changing edition if current edition doesn't support HWID activation, change the value to 0 from 1 or run the script with /c parameter -set _chan=1 +:: If value is changed in above lines or parameter is used then script will run in unattended mode @@ -78,8 +67,7 @@ if not %errorlevel%==0 ( echo: echo Error: This is not a correct file. It has LF line ending issue. echo: -echo Press any key to exit... -pause >nul +ping 127.0.0.1 -n 6 > nul popd exit /b ) @@ -99,16 +87,14 @@ set _args=%* if defined _args set _args=%_args:"=% if defined _args ( for %%A in (%_args%) do ( -if /i "%%A"=="/a" set _acti=1 -if /i "%%A"=="/ap" set _prot=1 -if /i "%%A"=="/g" set _gent=1 -if /i "%%A"=="/x" set _unin=1 -if /i "%%A"=="/c" set _chan=0 -if /i "%%A"=="-el" set _elev=1 +if /i "%%A"=="/KMS38" set _act=1 +if /i "%%A"=="/KMS38-RemoveProtection" set _rem=1 +if /i "%%A"=="/KMS38-NoEditionChange" set _NoEditionChange=1 +if /i "%%A"=="-el" set _elev=1 ) ) -for %%A in (%_acti% %_prot% %_gent% %_unin%) do (if "%%A"=="1" set _unattended=1) +for %%A in (%_act% %_rem% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== @@ -143,7 +129,7 @@ set "_Yellow="Black" "Yellow"" set _k38= set "nceline=echo: &echo ==== ERROR ==== &echo:" set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:" -if %~z0 GEQ 500000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") +if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") set "specific_kms=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f" ::======================================================================================================================================== @@ -194,7 +180,7 @@ goto dk_done :: Elevate script as admin and pass arguments and preventing loop -%nul% reg query HKU\S-1-5-19 || ( +>nul fltmc || ( if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b %eline% echo This script require administrator privileges. @@ -204,7 +190,7 @@ goto dk_done ::======================================================================================================================================== -if %_unin%==1 goto :k_uninstall +if %_rem%==1 goto :k_uninstall :k_menu @@ -216,77 +202,56 @@ title KMS38 Activation echo: echo: echo: +echo: echo ____________________________________________________________ echo: echo [1] KMS38 Activation -echo: -echo [2] KMS38 Activation ^+ Protection echo ____________________________________________ echo: -echo [3] Remove Protection +echo [2] Remove KM38 Protection echo: -echo [4] %_exitmsg% +echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4]" -choice /C:1234 /N +call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,0]" +choice /C:120 /N set _el=!errorlevel! -if !_el!==4 exit /b -if !_el!==3 goto :k_uninstall -if !_el!==2 ( -cls -echo: -call :dk_color2 %_White% " " %_Green% "KMS38 Protection:" -echo: -echo It stops 180 days KMS Activation from replacing KMS38 activation. -echo Protection requires permission altering of a registry key. -echo: -echo If you are going to use KMS_VL_ALL or MAS's KMS activation for Office, -echo then you don't need to enable this protection. -echo For more info, check readme. -echo: -echo: -choice /C:12 /N /M "> [1] Continue [2] Go back : " -if errorlevel 2 goto :k_menu -if errorlevel 1 (set _prot=1&goto :k_menu2) -) -if !_el!==1 (set _prot=0&goto :k_menu2) +if !_el!==3 exit /b +if !_el!==2 goto :k_uninstall +if !_el!==1 goto :k_menu2 goto :k_menu ) +::======================================================================================================================================== + :k_menu2 cls -mode 102, 34 -if %_gent%==1 (set _title=title Generate KMS38 GenuineTicket.xml) else (set _title=title KMS38 Activation) -%_title% +mode 102, 33 +title KMS38 Activation -::======================================================================================================================================== +echo: +echo Initializing... +call :dk_product +call :dk_ckeckwmic -if %_gent%==1 if exist %Systemdrive%\GenuineTicket.xml ( -set _gent=0 -%eline% -echo File '%Systemdrive%\GenuineTicket.xml' already exist. -if %_unattended%==0 ( +:: Show info for potential script stuck scenario + +sc start sppsvc %nul% +if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 ( +echo: +echo Error code: %errorlevel% +call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..." echo: -call :dk_color %_Yellow% "Press any key to go back..." -pause >nul -goto k_menu -) else ( -goto dk_done -) ) ::======================================================================================================================================== -call :dk_initial - :: Check if system is permanently activated or not -cls -call :dk_product call :dk_checkperm -if defined _perm if not %_gent%==1 ( +if defined _perm ( +cls echo ___________________________________________________________________________________________ echo: call :dk_color2 %_White% " " %Green% "Checking: %winos% is Permanently Activated." @@ -294,7 +259,7 @@ call :dk_color2 %_White% " " %Gray% "Activation is not required." echo ___________________________________________________________________________________________ if %_unattended%==1 goto dk_done echo: -choice /C:12 /N /M "> [1] Activate [2] %_exitmsg% : " +choice /C:10 /N /M "> [1] Activate [0] %_exitmsg% : " if errorlevel 2 exit /b ) cls @@ -317,7 +282,7 @@ echo [%winos% ^| %winbuild%] if defined _evalserv ( echo Server Evaluation cannot be activated. Convert it to full Server OS. echo: -echo Check 'Change Edition Option' in Extras section in MAS. +echo Check 'Change Edition' Option in MAS. ) else ( echo Evaluation Editions cannot be activated. Download ^& Install full version of Windows OS. echo: @@ -329,6 +294,24 @@ goto dk_done ::======================================================================================================================================== +:: Check clipup.exe for the detection and activation of server cor and acor editions + +set a_cor= +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" if not exist "%systemroot%\System32\clipup.exe" set a_cor=1 + +if defined a_cor ( +if not exist "!_work!\clipup.exe" ( +%eline% +echo clipup.exe doesn't exist in Server Cor/Acor [No GUI] version. +echo It's required for KMS38 Activation. +echo Check below page on how to activate it. +echo https://massgrave.dev/kms38.html +goto dk_done +) +) + +::======================================================================================================================================== + :: Check SKU value / Check in multiple places to find Edition change corruption set osSKU= @@ -350,14 +333,48 @@ goto dk_done ::======================================================================================================================================== +set error= + +cls +echo: +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b +echo Checking OS Info [%winos% ^| %winbuild% ^| %arch%] + +::======================================================================================================================================== + +:: Check Windows Script Host + +set _WSH=1 +reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0) +reg query "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0) + +if %_WSH% EQU 0 ( +reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% +reg add "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% +if not "%arch%"=="x86" reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% +echo Enabling Windows Script Host [Successful] +) + +::======================================================================================================================================== + +echo Initiating Diagnostic Tests... + +set "_serv=ClipSVC sppsvc Winmgmt" + +:: Client License Service (ClipSVC) +:: Software Protection +:: Windows Management Instrumentation + +call :dk_errorcheck + +::======================================================================================================================================== + :: Check if GVLK (KMS key) is already installed or not set _gvlk= call :dk_channel if /i "Volume:GVLK"=="%_channel%" set _gvlk=1 -::======================================================================================================================================== - :: Detect Key set key= @@ -370,136 +387,23 @@ set altedition= if defined applist call :kms38data getkey if not defined key call :dk_gvlk %nul% - if defined applist if not defined key call :kms38fallback + if defined altkey (set key=%altkey%&set changekey=1) -::======================================================================================================================================== +if not defined key if defined notfoundaltactID ( +call :dk_color %Red% "Checking Alternate Edition For KMS38 [%altedition% Activation ID Not Found]" +) if not defined key if not defined _gvlk ( %eline% -%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( -echo PowerShell is not responding properly. Aborting... -goto dk_done -) -if not defined applist ( -echo Failed to get Key due to error in getting Activation IDs. -echo: -echo This error can appear when below services are not properly responding or system have other issues. -echo Windows Management Instrumentation [WinMgmt], Software Protection Platform [sppsvc] -echo: -call :dk_color2 %Red% "Error Found In:" %_White% " %e_wmispp%" -echo: -echo Check troubleshooting steps in MAS Extras option. -goto dk_done -) echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] echo Unable to find this product in the supported product list. echo Make sure you are using updated version of the script. +echo https://massgrave.dev echo: -if not "%regSKU%"=="%wmiSKU%" ( -echo Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU% -echo Restart the system and try again. -goto dk_done -) -goto dk_done -) - -::======================================================================================================================================== - -:: Check files - -if not exist "!_work!\BIN\gatherosstate.exe" ( -%eline% -echo 'gatherosstate.exe' file is missing in 'BIN' folder. Aborting... -goto dk_done -) - -:: Verify gatherosstate.exe file - -set _hash= -for /f "skip=1 tokens=* delims=" %%# in ('certutil -hashfile "!_work!\BIN\gatherosstate.exe" SHA1^|findstr /i /v CertUtil') do set "_hash=%%#" -set "_hash=%_hash: =%" - -if /i not "%_hash%"=="FABB5A0FC1E6A372219711152291339AF36ED0B5" ( -if /i not "%_hash%"=="3FCCB9C359EDB9527C9F5688683F8B3C5910E75D" ( -%eline% -echo gatherosstate.exe SHA1 hash mismatch found. -echo: -echo Detected: %_hash% -goto dk_done -) -) - -::======================================================================================================================================== - -:: Check clipup.exe for the detection and activation of server cor and acor editions - -set a_cor= -if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" if not exist "%systemroot%\System32\clipup.exe" set a_cor=1 - -if defined a_cor ( -if not exist "!_work!\BIN\clipup.exe" ( -%eline% -echo 'ClipUp.exe' file is not found in 'BIN' folder. goto dk_done ) -) - -::======================================================================================================================================== - -set error= -set activ= - -cls -echo: -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -echo Checking OS Info [%winos% ^| %winbuild% ^| %arch%] - -::======================================================================================================================================== - -set "_serv=ClipSVC sppsvc Winmgmt" - -:: Client License Service (ClipSVC) -:: Software Protection -:: Windows Management Instrumentation - -:: Check disabled services - -set serv_ste= -for %%# in (%_serv%) do ( -set serv_dis= -reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start %nul% || set serv_dis=1 -for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b equ 0x4 set serv_dis=1 -if defined serv_dis (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#")) -) - -:: Change disabled services startup type to default - -set serv_csts= -set serv_cste= - -if defined serv_ste ( -for %%# in (%serv_ste%) do ( -if /i %%#==ClipSVC sc config %%# start= demand %nul% -if /i %%#==sppsvc sc config %%# start= delayed-auto %nul% -if /i %%#==Winmgmt sc config %%# start= auto %nul% -if !errorlevel!==0 ( -if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#") -) else ( -set error=1 -if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#") -) -) -) - -if defined serv_csts echo Enabling Disabled Services [Successful] [%serv_csts%] -if defined serv_cste call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]" - -if not "%regSKU%"=="%wmiSKU%" ( -set error=1 -call :dk_color %Red% "Checking WMI/REG SKU [Difference Found - WMI:%wmiSKU% Reg:%regSKU%] [Restart System]" -) ::======================================================================================================================================== @@ -531,6 +435,7 @@ if !error_code! EQU 0 ( call :dk_refresh echo Installing KMS Client Setup Key [%key%] [Successful] ) else ( +set error=1 call :dk_color %Red% "Installing KMS Client Setup Key [%key%] [Failed] !error_code!" ) ) @@ -544,7 +449,8 @@ if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic path SoftwareLicensin if %_wmic% EQU 0 for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND Description like ''%%KMSCLIENT%%'' AND PartialProductKey IS NOT NULL').Get()).ID | %% {echo ('ID='+$_)}" 2^>nul') do call set "app=%%a" if not defined app ( -call :dk_color %Red% "Checking Activation ID [Failed]" +call :dk_color %Red% "Checking Installed GVLK Activation ID [Not Found] Aborting..." +goto :dk_done ) ::======================================================================================================================================== @@ -552,20 +458,16 @@ call :dk_color %Red% "Checking Activation ID [Failed]" :: Set specific KMS host to Local Host :: By doing this, global KMS IP can not replace KMS38 activation but can be used with Office and other Windows Editions -set regadd= -set k_error= - -if not %_gent%==1 if defined app ( echo: -set regadd=1 %nul% reg delete "HKLM\%specific_kms%" /f %nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f %nul% reg query "HKLM\%specific_kms%" && ( -call :regown "HKLM\%specific_kms%" +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';iex ($f[1]);" %nul% reg delete "HKLM\%specific_kms%" /f ) +set k_error= %nul% reg add "HKLM\%specific_kms%\%app%" /f /v KeyManagementServiceName /t REG_SZ /d "127.0.0.2" || set k_error=1 %nul% reg add "HKLM\%specific_kms%\%app%" /f /v KeyManagementServicePort /t REG_SZ /d "1688" || set k_error=1 @@ -574,36 +476,19 @@ echo Adding Specific KMS Host [LocalHost 127.0.0.2] [Successful] ) else ( call :dk_color %Red% "Adding Specific KMS Host [LocalHost 127.0.0.2] [Failed]" ) -) - -if not %_gent%==1 if not defined app ( -call :dk_color %Red% "Adding Specific KMS Host [Skipped] [Activation ID Not Found]" -) ::======================================================================================================================================== -:: Files are copied to temp to generate ticket to avoid possible issues in case the path contains special character or non English names +:: Copy clipup.exe to System32 directory to activate Server Cor/Acor editions -echo: -set "temp_=%SystemRoot%\Temp\_Temp" +if defined a_cor ( set "_clipup=%systemroot%\System32\clipup.exe" -if exist "%temp_%\.*" rmdir /s /q "%temp_%\" %nul% -md "%temp_%\" %nul% - -pushd "!_work!\BIN\" -copy /y /b "gatherosstate.exe" "%temp_%\gatherosstate.exe" %nul% -if defined a_cor copy /y /b "ClipUp.exe" "%_clipup%" %nul% +pushd "!_work!\" +copy /y /b "ClipUp.exe" "!_clipup!" %nul% popd -if not exist "%temp_%\gatherosstate.exe" ( -call :dk_color %Red% "Copying Required Files to Temp [%temp_%] [Failed]" -goto :k_final -) else ( -echo Copying Required Files to Temp [%temp_%] [Successful] -) - -if defined a_cor ( -if exist "%_clipup%" ( +echo: +if exist "!_clipup!" ( echo Copying clipup.exe File to [%systemroot%\System32\] [Successful] ) else ( call :dk_color %Red% "Copying clipup.exe File to [%systemroot%\System32\] [Failed] Aborting..." @@ -613,92 +498,48 @@ goto :k_final ::======================================================================================================================================== -if /i "%_hash%"=="3FCCB9C359EDB9527C9F5688683F8B3C5910E75D" ( -echo Checking gatherosstate.exe [Already Modified] -%nul% ren "%temp_%\gatherosstate.exe" "gatherosstatemodified.exe" -goto :kskipmod -) - -:: Modify gatherosstate.exe - -pushd "%temp_%\" -%nul% %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':hex\:.*';iex ($f[1]);" -popd - -if not exist "%temp_%\gatherosstatemodified.exe" ( -call :dk_color %Red% "Creating Modified Gatherosstate [Failed] Aborting..." -goto :k_final -) - -set _hash= -for /f "skip=1 tokens=* delims=" %%# in ('certutil -hashfile "%temp_%\gatherosstatemodified.exe" SHA1^|findstr /i /v CertUtil') do set "_hash=%%#" -set "_hash=%_hash: =%" - -if /i not "%_hash%"=="3FCCB9C359EDB9527C9F5688683F8B3C5910E75D" ( -call :dk_color %Red% "Creating Modified Gatherosstate [Failed] [Hash Not Matched] Aborting..." -goto :k_final -) else ( -echo Creating Modified Gatherosstate [Successful] -) +:: Generate GenuineTicket.xml and apply +:: Most correct way to apply a ticket is by restarting ClipSVC service but we can not check the log details in this way +:: To get the log details and also to correctly apply ticket, script will install tickets two times (service restart + clipup -v -o) -:kskipmod +set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" +if not exist "%tdir%\" md "%tdir%\" %nul% -::======================================================================================================================================== +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% +if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -:: Multiple attempts to generate the ticket because in some cases, one attempt is not enough. +:: Signature value is as it is, it's not encoded +:: Session ID is in Base64 encoded format. It's decoded value is "OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;GVLKExp=2038-01-19T03:14:07Z;DownlevelGenuineState=1;" +:: Check https://massgrave.dev/kms38.html#Manual_Activation to see how it's generated -set "_noxml=if not exist "%temp_%\GenuineTicket.xml"" +set "signature=C52iGEoH+1VqzI6kEAqOhUyrWuEObnivzaVjyef8WqItVYd/xGDTZZ3bkxAI9hTpobPFNJyJx6a3uriXq3HVd7mlXfSUK9ydeoUdG4eqMeLwkxeb6jQWJzLOz41rFVSMtBL0e+ycCATebTaXS4uvFYaDHDdPw2lKY8ADj3MLgsA=" +set "sessionId=TwBTAE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAD0ANQA7AE8AUwBNAGkAbgBvAHIAVgBlAHIAcwBpAG8AbgA9ADEAOwBPAFMAUABsAGEAdABmAG8AcgBtAEkAZAA9ADIAOwBQAFAAPQAwADsARwBWAEwASwBFAHgAcAA9ADIAMAAzADgALQAwADEALQAxADkAVAAwADMAOgAxADQAOgAwADcAWgA7AEQAbwB3AG4AbABlAHYAZQBsAEcAZQBuAHUAaQBuAGUAUwB0AGEAdABlAD0AMQA7AAAA" +1.0OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=%sessionId%;TimeStampClient=2022-10-11T12:00:00Z%signature%" >"%tdir%\GenuineTicket" -"%temp_%/gatherosstatemodified.exe" GVLKExp=2038-01-19T03:14:07Z;DownlevelGenuineState=1 -%_noxml% timeout /t 3 %nul% -%_noxml% net stop sppsvc /y %nul% -%_noxml% call "%temp_%/gatherosstatemodified.exe" GVLKExp=2038-01-19T03:14:07Z;DownlevelGenuineState=1 -%_noxml% timeout /t 3 %nul% +copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% -%_noxml% ( -call :dk_color %Red% "Generating GenuineTicket.xml [Failed] Aborting..." +if not exist "%tdir%\GenuineTicket.xml" ( +call :dk_color %Red% "Generating GenuineTicket.xml [Failed]" +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% goto :k_final ) else ( echo Generating GenuineTicket.xml [Successful] ) -::======================================================================================================================================== - -:: Copy GenuineTicket.xml to the root of C drive and exit if ticket generation option was used in script - -if %_gent%==1 ( -echo: -copy /y /b "%temp_%\GenuineTicket.xml" "%Systemdrive%\GenuineTicket.xml" %nul% -if not exist "%Systemdrive%\GenuineTicket.xml" ( -call :dk_color %Red% "Copying GenuineTicket.xml to %Systemdrive%\ [Failed]" -) else ( -call :dk_color %Green% "Copying GenuineTicket.xml to %Systemdrive%\ [Successful]" -) -goto :k_final -) - -::======================================================================================================================================== +set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" -:: clipup -v -o -altto & clipup -v -o both methods may fail if the username have spaces/special characters/non English names -:: Most correct way to apply a ticket is by restarting ClipSVC service but we can not check the log details in this way -:: To get the log details and also to correctly apply ticket, script will install tickets two times (service restart + clipup -v -o -altto ) +:: Stop sppsvc -set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" -if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -if not exist "%tdir%\" md "%tdir%\" %nul% -copy /y /b "%temp_%\GenuineTicket.xml" "%tdir%\GenuineTicket.xml" %nul% +net stop sppsvc /y %nul% +net stop sppsvc /y %nul% +net stop sppsvc /y %nul% -if not exist "%tdir%\GenuineTicket.xml" ( -call :dk_color %Red% "Copying Ticket to ClipSVC Location [Failed]" +sc query sppsvc | find /i "1 STOPPED" %nul% && ( +echo Stopping sppsvc Service [Successful] +) || ( +call :dk_color %Red% "Stopping sppsvc Service [Failed]" ) -set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" - -net stop sppsvc /y %nul% || net stop sppsvc /y %nul% -sc stop sppsvc %nul% - -clipup -v -o -altto %temp_%\ - %_xmlexist% ( net stop ClipSVC /y %nul% net start ClipSVC /y %nul% @@ -707,10 +548,14 @@ net start ClipSVC /y %nul% %_xmlexist% ( if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart Method]" +call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart, Wait...]" ) ) +copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul% +clipup -v -o +if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul% + ::========================================================================================================================================== call :dk_product @@ -721,7 +566,6 @@ echo: call :k_checkexp if defined _k38 ( -set activ=1 call :k_actinfo goto :k_final ) @@ -736,31 +580,17 @@ echo Applying SKU-ID Rearm [Successful] ) else ( call :dk_color %Red% "Applying SKU-ID Rearm [Failed]" ) - -echo: -call :k_checkexp -if defined _k38 ( -set activ=1 -call :k_actinfo -goto :k_final -) - -:: Restart software protection service to refresh itself and run refresh license status and activation commands - -net stop sppsvc /y %nul% -net start sppsvc /y %nul% call :dk_refresh -call :dk_act +echo: call :k_checkexp if defined _k38 ( -set activ=1 call :k_actinfo goto :k_final ) call :dk_color %Red% "Activation Failed" -call :dk_color %Magenta% "Restart the system and try again / Check troubleshooting steps in MAS Extras option" +call :dk_color2 %Magenta% "Check this page for help" %_Yellow% " https://massgrave.dev/troubleshoot" ::======================================================================================================================================== @@ -769,42 +599,32 @@ call :dk_color %Magenta% "Restart the system and try again / Check troubleshooti :: Remove the added Specific KMS Host (Local Host) if activation is not completed echo: -set k_error= -if defined regadd if not defined _k38 ( +if not defined _k38 ( %nul% reg delete "HKLM\%specific_kms%" /f %nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f -%nul% reg query "HKLM\%specific_kms%" && set k_error=1 -%nul% reg query "HKU\S-1-5-20\%specific_kms%" && set k_error=1 -if not defined k_error ( -echo Removing The Added Specific KMS Host [Successful] -) else ( +%nul% reg query "HKLM\%specific_kms%" && ( call :dk_color %Red% "Removing The Added Specific KMS Host [Failed]" +) || ( +echo Removing The Added Specific KMS Host [Successful] ) ) :: Protect KMS38 if opted by the user and conditions are correct -if defined regadd if defined _k38 if %_prot%==1 ( -%nul% call :regown "HKLM\%specific_kms%" "" S-1-5-32-544 "" Deny "SetValue,Delete" +if defined _k38 ( +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';& ([ScriptBlock]::Create($f[1])) -protect;" %nul% reg delete "HKLM\%specific_kms%" /f %nul% reg query "HKLM\%specific_kms%" && ( -call :dk_color %Gray% "Locking a Registry To Protect KMS38 [Successful]" +call :dk_color %Magenta% "Protect KMS38 By KMS [Successful] [Locked A Registry Key]" ) || ( -call :dk_color %Red% "Locking a Registry To Protect KMS38 [Failed]" +call :dk_color %Red% "Protect KMS38 By KMS [Failed To Lock A Registry Key]" ) ) :: clipup.exe does not exist in server cor and acor editions by default, it was copied there with this script -if exist "%temp_%\.*" rmdir /s /q "%temp_%\" %nul% if defined a_cor if exist "%_clipup%" del /f /q "%_clipup%" %nul% -if exist "%temp_%\" ( -call :dk_color %Red% "Cleaning Temp Files [Failed]" -) else ( -echo Cleaning Temp Files [Successful] -) - if defined a_cor ( if exist "%_clipup%" ( call :dk_color %Red% "Deleting copied clipup.exe file [Failed]" @@ -813,15 +633,7 @@ echo Deleting copied clipup.exe file [Successful] ) ) -if %osSKU%==175 ( -call :dk_color %Red% "ServerRdsh Editon does not officially support activation on non-azure platforms." -) - -if not defined activ call :dk_checkerrors - -if not defined activ if not defined error ( -echo Basic Diagnostic Tests [Error Not Found] -) +if %osSKU%==175 call :dk_color %Red% "ServerRdsh Editon does not officially support activation on non-azure platforms." goto :dk_done @@ -832,108 +644,53 @@ goto :dk_done cls mode 99, 28 title Remove KMS38 Protection -set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" -set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" - -echo: -call :dk_ckeckwmic -call :k_checkexp - -:: It's better to not clean ClipSVC hence its skipped - -REM if defined _k38 ( -REM for %%# in (ClipSVC) do ( -REM sc query %%# | find /i "STOPPED" %nul% || net stop %%# /y %nul% -REM sc query %%# | find /i "STOPPED" %nul% || sc stop %%# %nul% -REM ) - -REM REM Thanks to @mspaintmsi for informing this command info - -REM rundll32 clipc.dll,ClipCleanUpState -REM if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" ( -REM call :dk_color %Red% "Cleaning ClipSVC Licences [Failed]" -REM ) else ( -REM echo Cleaning ClipSVC Licences [Successful] -REM ) - -REM REM Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after -REM REM system restart. It needs to be deleted to activate the system without restart. - -REM call :regown "%RegKey%" %nul% -REM reg delete "%RegKey%" /f %nul% - -REM reg query "%RegKey%" %nul% && ( -REM call :dk_color %Red% "Deleting a Volatile Registry [Failed]" -REM call :dk_color %Magenta% "Restart the system, that will delete this registry key automatically" -REM ) || ( -REM echo Deleting a Volatile Registry [Successful] -REM ) - -REM REM Clear HWID token related registry to fix activation incase if there is any corruption - -REM reg delete "%_ident%" /f %nul% -REM reg query "%_ident%" %nul% && ( -REM call :dk_color %Red% "Deleting a Registry [Failed] [%_ident%]" -REM ) || ( -REM echo Deleting a Registry [Successful] [%_ident%] -REM ) - -REM for %%# in (ClipSVC wlidsvc LicenseManager sppsvc) do (net stop %%# /y %nul% & net start %%# /y %nul%) -REM call :dk_refresh -REM ) - -set exist_= -%nul% reg query "HKLM\%specific_kms%" && ( -set exist_=1 %nul% reg delete "HKLM\%specific_kms%" /f -) %nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f %nul% reg query "HKLM\%specific_kms%" && ( -%nul% call :regown "HKLM\%specific_kms%" +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regdel\:.*';iex ($f[1]);" %nul% reg delete "HKLM\%specific_kms%" /f ) +echo: %nul% reg query "HKLM\%specific_kms%" && ( call :dk_color %Red% "Removing Specific KMS Host [Failed]" ) || ( -if defined exist_ ( echo Removing Specific KMS Host [Successful] -) else ( -echo Removing Specific KMS Host [Already Removed] -) ) goto :dk_done ::======================================================================================================================================== -:: A lean and mean snippet to set registry ownership and permission recursively -:: Written by @AveYo aka @BAU -:: pastebin.com/XTPt0JSC +:: This code runs to protect/undo below registry key for KMS38 protection +:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f + +:: KMS38 protection stops 180 days KMS Activation from replacing KMS38 activation -:: Modified by @abbodi1406 to make it work in ARM64 Windows 10 (builds older than 21277) where only x86 version of Powershell is installed. +:regdel: +param ( + [switch]$protect +) -:: This code runs only if KMS38 protection option or complete uninstall option is used by the user in this script. +$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544') +$Admin = ($SID.Translate([System.Security.Principal.NTAccount])).Value -:regown +if($protect) { +$ruleArgs = @("$Admin", "Delete, SetValue", "ContainerInherit", "None", "Deny") +} else { +$ruleArgs = @("$Admin", "FullControl", "Allow") +} -pushd "!_work!" -setlocal DisableDelayedExpansion +$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f' +$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'ChangePermissions') +$acl = $key.GetAccessControl() -set "0=%~nx0"&%psc% $A='%~1','%~2','%~3','%~4','%~5','%~6';iex(([io.file]::ReadAllText($env:0)-split':Own1\:.*')[1])&popd&setlocal EnableDelayedExpansion&exit/b:Own1: -$D1=[uri].module.gettype('System.Diagnostics.Process')."GetM`ethods"(42) |where {$_.Name -eq 'SetPrivilege'} #`:no-ev-warn -'SeSecurityPrivilege','SeTakeOwnershipPrivilege','SeBackupPrivilege','SeRestorePrivilege'|foreach {$D1.Invoke($null, @("$_",2))} -$path=$A[0]; $rk=$path-split'\\',2; switch -regex ($rk[0]){'[mM]'{$hv=2147483650};'[uU]'{$hv=2147483649};default{$hv=2147483648};} -$HK=[Microsoft.Win32.RegistryKey]::OpenBaseKey($hv, 256); $s=$A[1]; $sps=[Security.Principal.SecurityIdentifier] -$u=($A[2],'S-1-5-32-544')[!$A[2]];$o=($A[3],$u)[!$A[3]];$w=$u,$o |% {new-object $sps($_)}; $old=!$A[3];$own=!$old; $y=$s-eq'all' -$rar=new-object Security.AccessControl.RegistryAccessRule( $w[0], ($A[5],'FullControl')[!$A[5]], 1, 0, ($A[4],'Allow')[!$A[4]] ) -$x=$s-eq'none';function Own1($k){$t=$HK.OpenSubKey($k,2,'TakeOwnership');if($t){0,4|%{try{$o=$t.GetAccessControl($_)}catch{$old=0} -};if($old){$own=1;$w[1]=$o.GetOwner($sps)};$o.SetOwner($w[0]);$t.SetAccessControl($o); $c=$HK.OpenSubKey($k,2,'ChangePermissions') -$p=$c.GetAccessControl(2);if($y){$p.SetAccessRuleProtection(1,1)};$p.ResetAccessRule($rar);if($x){$p.RemoveAccessRuleAll($rar)} -$c.SetAccessControl($p);if($own){$o.SetOwner($w[1]);$t.SetAccessControl($o)};if($s){$($subkeys=$HK.OpenSubKey($k).GetSubKeyNames()) 2>$null; -foreach($n in $subkeys){Own1 "$k\$n"}}}};Own1 $rk[1];if($env:VO){get-acl Registry::$path|fl} #:Own1: lean & mean snippet by AveYo +$rule = [System.Security.AccessControl.RegistryAccessRule]::new.Invoke($ruleArgs) +$acl.ResetAccessRule($rule) +$key.SetAccessControl($acl) +:regdel: ::======================================================================================================================================== @@ -980,14 +737,6 @@ if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path SoftwareLicensing if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT ProductKeyChannel FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).ProductKeyChannel | %% {echo ('ProductKeyChannel='+$_)}" 2^>nul') do set "_channel=%%#" exit /b -:: Activation command - -:dk_act - -if %_wmic% EQU 1 wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" call Activate %nul% -if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT ID FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).Activate()" %nul% -exit /b - :: Get Windows Activation IDs :dk_actids @@ -1024,53 +773,6 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com ) exit /b -:dk_initial - -echo: -echo Initializing... - -:: Check and enable WinMgmt, sppsvc services if required - -for %%# in (WinMgmt sppsvc) do ( -for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b NEQ 0x2 ( -echo: -echo Enabling %%# service... -if /i %%#==sppsvc sc config %%# start= delayed-auto %nul% || echo Failed -if /i %%#==WinMgmt sc config %%# start= auto %nul% || echo Failed -) -sc start %%# %nul% -if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 ( -echo: -echo Starting %%# service... -sc start %%# -echo: -call :dk_color %Red% "Failed to start [%%#] service, rest of the process may take a long time..." -) -) - -:: Check WMI and SPP Errors - -call :dk_ckeckwmic - -set e_wmi= -set e_wmispp= -call :dk_actids - -if not defined applist ( -net stop sppsvc /y %nul% -cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -call :dk_refresh - -if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul -if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul -if !errorlevel! NEQ 0 set e_wmi=1 - -if defined e_wmi (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP) -call :dk_actids -) -exit /b - ::======================================================================================================================================== :: Get Product Key from pkeyhelper.dll for future new editions @@ -1113,7 +815,51 @@ exit /b ::======================================================================================================================================== -:dk_checkerrors +:dk_errorcheck + +:: Check disabled services + +set serv_ste= +for %%# in (%_serv%) do ( +set serv_dis= +reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start %nul% || set serv_dis=1 +for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b equ 0x4 set serv_dis=1 +if defined serv_dis (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#")) +) + +:: Change disabled services startup type to default + +set serv_csts= +set serv_cste= + +if defined serv_ste ( +for %%# in (%serv_ste%) do ( +if /i %%#==ClipSVC (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%#" /v "Start" /t REG_DWORD /d "3" /f %nul% & sc config %%# start= demand %nul%) +if /i %%#==wlidsvc sc config %%# start= demand %nul% +if /i %%#==sppsvc (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%#" /v "Start" /t REG_DWORD /d "2" /f %nul% & sc config %%# start= delayed-auto %nul%) +if /i %%#==LicenseManager sc config %%# start= demand %nul% +if /i %%#==Winmgmt sc config %%# start= auto %nul% +if /i %%#==wuauserv sc config %%# start= demand %nul% +if !errorlevel!==0 ( +if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#") +) else ( +set error=1 +if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#") +) +) +) + +if defined serv_csts echo Enabling Disabled Services [Successful] [%serv_csts%] + +if defined serv_cste ( +echo %serv_cste% | findstr /i "ClipSVC sppsvc" %nul% && ( +call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%] [Restart System]" +) || ( +call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]" +) +) + +::======================================================================================================================================== :: Check if the services are able to run or not :: Workarounds are added to get correct status and error code because sc query doesn't output correct results in some conditions @@ -1122,11 +868,12 @@ set serv_e= for %%# in (%_serv%) do ( set errorcode= set checkerror= -sc query %%# | find /i ": 4 RUNNING" %nul% || net start %%# /y %nul% +net start %%# /y %nul% +sc query %%# | find /i "4 RUNNING" %nul% || set checkerror=1 + sc start %%# %nul% set errorcode=!errorlevel! if !errorcode! NEQ 1056 if !errorcode! NEQ 0 set checkerror=1 -sc query %%# | find /i ": 4 RUNNING" %nul% || set checkerror=1 if defined checkerror if defined serv_e (set "serv_e=!serv_e!, %%#-!errorcode!") else (set "serv_e=%%#-!errorcode!") ) @@ -1135,45 +882,71 @@ set error=1 call :dk_color %Red% "Starting Services [Failed] [%serv_e%]" ) +::======================================================================================================================================== + :: Various error checks -set token=0 -if exist %Systemdrive%\Windows\System32\spp\store\2.0\tokens.dat set token=1 -if exist %Systemdrive%\Windows\System32\spp\store_test\2.0\tokens.dat set token=1 -if %token%==0 ( +for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( +call :dk_color %Gray% "Checking WMIC.exe [Not Found]" +) + + +%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( set error=1 -call :dk_color %Red% "Checking SPP tokens.dat [Not Found]" +call :dk_color %Red% "Checking Powershell [Not Responding]" +) + + +if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul +if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul +if %errorlevel% NEQ 0 ( +set error=1 +call :dk_color %Red% "Checking WMI [Not Responding] %_wmic%" +) + + +if not "%regSKU%"=="%wmiSKU%" ( +set error=1 +call :dk_color %Red% "Checking WMI/REG SKU [Difference Found - WMI:%wmiSKU% Reg:%regSKU%]" ) + DISM /English /Online /Get-CurrentEdition %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]" if %error_code% NEQ 0 ( -set error=1 call :dk_color %Red% "Checking DISM [Not Responding] %error_code%" ) -%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( -set error=1 -call :dk_color %Red% "Checking Powershell [Not Responding]" + +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" ) -for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( + +cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% +set error_code=%errorlevel% +cmd /c exit /b %error_code% +if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" +if %error_code% NEQ 0 ( set error=1 -call :dk_color %Gray% "Checking WMIC.exe [Not Found]" +call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %error_code%" ) + reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && ( set error=1 call :dk_color %Red% "Checking Rearm [System Restart Is Required]" ) + reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && ( set error=1 call :dk_color %Red% "Checking ClipSVC [System Restart Is Required]" ) + for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" 2^>nul') do if /i %%b NEQ 0x0 ( reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" /t REG_DWORD /d "0" /f %nul% call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found, Changing To 0]" @@ -1182,40 +955,39 @@ net start sppsvc /y %nul% set error=1 ) -set _wsh=1 -reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _wsh=0) -reg query "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _wsh=0) -if %_wsh% EQU 0 ( + +call :dk_actids +if not defined applist ( +net stop sppsvc /y %nul% +cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% +if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% +call :dk_refresh +call :dk_actids +if not defined applist ( set error=1 -call :dk_color %Gray% "Checking Windows Script Host [Disabled]" +call :dk_color %Red% "Checking Activation IDs [Not Found]" +) ) -cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul% -set error_code=%errorlevel% -cmd /c exit /b %error_code% -if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]" -if %error_code% NEQ 0 ( + +set token=0 +if exist %Systemdrive%\Windows\System32\spp\store\2.0\tokens.dat set token=1 +if exist %Systemdrive%\Windows\System32\spp\store_test\2.0\tokens.dat set token=1 +if %token%==0 ( set error=1 -call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %error_code%" +call :dk_color %Red% "Checking SPP tokens.dat [Not Found]" ) -if not defined applist ( +if not exist %SystemRoot%\system32\sppsvc.exe ( set error=1 -call :dk_color %Red% "Checking WMI/SPP [Not Responding] [%e_wmispp%]" +call :dk_color %Red% "Checking sppsvc.exe File [Not Found]" ) -set nil= -set _sppint= -if not %_gent%==1 if not defined error ( -for %%# in (SppE%nil%xtComObj.exe,sppsvc.exe) do ( -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%nil%ge File Execu%nil%tion Options\%%#" %nul% && set _sppint=1 +if /i %error_code% EQU 0xc0000022 ( +echo "%serv_e%" | find /i "sppsvc" %nul% && ( +call :dk_color %Magenta% "Looks like you may have used a Gaming spoofer. Check Activation Troubleshoot option in MAS." ) ) - -if defined _sppint ( -call :dk_color %Red% "Checking SPP Interference In IFEO [Found] [Uninstall KMS Activator If There Is Any]" -set error=1 -) exit /b ::======================================================================================================================================== @@ -1319,107 +1091,41 @@ exit /b ::======================================================================================================================================== :: Below code is used to get alternate edition name and key if current edition doesn't support KMS38 activation - -:: IoTEnterpriseS 2021 won't be converted to EnterpriseS 2021 to enable KMS38 activation because later has 5 years less update support :: ProfessionalCountrySpecific won't be converted because it's not a good idea to change CountrySpecific editions :: 1st column = Current SKU ID :: 2nd column = Current Edition Name -:: 3rd column = Alternate Edition Activation ID -:: 4th column = Alternate Edition GVLK -:: 5th column = Alternate Edition Name +:: 3rd column = Current Edition Activation ID +:: 4th column = Alternate Edition Activation ID +:: 5th column = Alternate Edition GVLK +:: 6th column = Alternate Edition Name :: Separator = _ :kms38fallback -if %_chan%==0 exit /b +set notfoundaltactID= +if %_NoEditionChange%==1 exit /b for %%# in ( -188_IoTEnterprise_______________73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2YT43_Enterprise -138_ProfessionalSingleLanguage__2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T83GX_Professional +188_IoTEnterprise_______________8ab9bdd1-1f67-4997-82d9-8878520837d9_73111121-5638-40f6-bc11-f1d7b0d64300_NPPR9-FWDCX-D2C8J-H872K-2YT43_Enterprise +191_IoTEnterpriseS-2021_________ed655016-a9e8-4434-95d9-4345352c2552_32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee_M7XTQ-FN8P6-TTKYV-9D4CC-J462D_EnterpriseS-2021 +205_IoTEnterpriseSK_____________d4f9b41f-205c-405e-8e08-3d16e88e02be_59eb965c-9150-42b7-a0ec-22151b9897c5_KBN8V-HFGQ4-MGXVD-347P6-PDQGT_IoTEnterpriseS-Win11 +138_ProfessionalSingleLanguage__a48938aa-62fa-4966-9d44-9f04da3f72f2_2de67392-b7a7-462a-b1ca-108dd189f588_W269N-WFGWX-YVC9B-4J6C9-T83GX_Professional ) do ( -for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %osSKU%==%%A ( +for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A ( echo "!applist!" | find /i "%%C" 1>nul && ( -set altkey=%%D +echo "!applist!" | find /i "%%D" 1>nul && ( +set altkey=%%E set curedition=%%B -set altedition=%%E +set altedition=%%F +) || ( +set altedition=%%F +set notfoundaltactID=1 +) ) ) ) exit /b -::======================================================================================================================================== - -:: Script changes below values in official gatherosstate.exe so that it can generate usable ticket in Windows unlicensed state - -:hex:[ -$bytes = [System.IO.File]::ReadAllBytes("gatherosstate.exe") -$bytes[320] = 0x9c -$bytes[321] = 0xfb -$bytes[322] = 0x05 -$bytes[13672] = 0x25 -$bytes[13674] = 0x73 -$bytes[13676] = 0x3b -$bytes[13678] = 0x00 -$bytes[13680] = 0x00 -$bytes[13682] = 0x00 -$bytes[13684] = 0x00 -$bytes[32748] = 0xe9 -$bytes[32749] = 0x9e -$bytes[32750] = 0x00 -$bytes[32751] = 0x00 -$bytes[32752] = 0x00 -$bytes[32894] = 0x8b -$bytes[32895] = 0x44 -$bytes[32897] = 0x64 -$bytes[32898] = 0x85 -$bytes[32899] = 0xc0 -$bytes[32900] = 0x0f -$bytes[32901] = 0x85 -$bytes[32902] = 0x1c -$bytes[32903] = 0x02 -$bytes[32904] = 0x00 -$bytes[32906] = 0xe9 -$bytes[32907] = 0x3c -$bytes[32908] = 0x01 -$bytes[32909] = 0x00 -$bytes[32910] = 0x00 -$bytes[32911] = 0x85 -$bytes[32912] = 0xdb -$bytes[32913] = 0x75 -$bytes[32914] = 0xeb -$bytes[32915] = 0xe9 -$bytes[32916] = 0x69 -$bytes[32917] = 0xff -$bytes[32918] = 0xff -$bytes[32919] = 0xff -$bytes[33094] = 0xe9 -$bytes[33095] = 0x80 -$bytes[33096] = 0x00 -$bytes[33097] = 0x00 -$bytes[33098] = 0x00 -$bytes[33449] = 0x64 -$bytes[33576] = 0x8d -$bytes[33577] = 0x54 -$bytes[33579] = 0x24 -$bytes[33580] = 0xe9 -$bytes[33581] = 0x55 -$bytes[33582] = 0x01 -$bytes[33583] = 0x00 -$bytes[33584] = 0x00 -$bytes[34189] = 0x59 -$bytes[34190] = 0xeb -$bytes[34191] = 0x28 -$bytes[34238] = 0xe9 -$bytes[34239] = 0x4f -$bytes[34240] = 0x00 -$bytes[34241] = 0x00 -$bytes[34242] = 0x00 -$bytes[34346] = 0x24 -$bytes[34376] = 0xeb -$bytes[34377] = 0x63 -[System.IO.File]::WriteAllBytes("gatherosstatemodified.exe", $bytes) -:hex:] - ::======================================================================================================================================== \ No newline at end of file diff --git a/MAS/Separate-Files-Version/Install_HWID_Key.cmd b/MAS/Separate-Files-Version/Install_HWID_Key.cmd index c25d782..662b0de 100644 --- a/MAS/Separate-Files-Version/Install_HWID_Key.cmd +++ b/MAS/Separate-Files-Version/Install_HWID_Key.cmd @@ -14,7 +14,7 @@ -:: For unattended mode, run the script with /u parameter. +:: For unattended mode, run the script with "/Insert-HWID-Key" parameter @@ -58,8 +58,7 @@ if not %errorlevel%==0 ( echo: echo Error: This is not a correct file. It has LF line ending issue. echo: -echo Press any key to exit... -pause >nul +ping 127.0.0.1 -n 6 > nul popd exit /b ) @@ -69,7 +68,7 @@ popd cls color 07 -title Install Windows Retail/OEM/MAK Key +title Install Windows HWID Key set _args= set _elev= @@ -80,7 +79,7 @@ if defined _args set _args=%_args:"=% if defined _args ( for %%A in (%_args%) do ( if /i "%%A"=="-el" set _elev=1 -if /i "%%A"=="/u" set _unattended=1 +if /i "%%A"=="/Insert-HWID-Key" set _unattended=1 ) ) @@ -111,6 +110,7 @@ set "_Yellow="Black" "Yellow"" set "nceline=echo: &echo ==== ERROR ==== &echo:" set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:" set "line=echo ___________________________________________________________________________________________" +if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") ::======================================================================================================================================== @@ -121,6 +121,12 @@ echo Project is supported for Windows 10/11. goto ins_done ) +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( +%eline% +echo HWID Activation is not supported for Windows Server. +goto ins_done +) + for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" ( %nceline% echo Unable to find powershell.exe in the system. @@ -160,7 +166,7 @@ goto ins_done :: Elevate script as admin and pass arguments and preventing loop -%nul% reg query HKU\S-1-5-19 || ( +>nul fltmc || ( if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b %eline% echo This script require administrator privileges. @@ -172,13 +178,11 @@ goto ins_done cls mode 98, 30 - -call :dk_initial - -:: Check product name - -cls +echo: +echo Initializing... call :dk_product +call :dk_ckeckwmic +call :dk_actids ::======================================================================================================================================== @@ -206,34 +210,23 @@ goto ins_done :: Detect key set key= -set pkey= -set _chan= +set channel= +set actidnotfound= -if defined applist call :hwiddata attempt1 -if not defined key call :hwiddata attempt2 +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b" -set pkey= -if not defined key call :dk_hwidkey %nul% +if defined applist call :hwidkey key attempt1 +if not defined key call :hwidkey key attempt2 if not defined key ( %eline% -%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || ( -echo PowerShell is not responding properly. -echo: -) -echo Unable to find HWID key for [%winos% ^| SKU:%osSKU% ^| %winbuild%] -echo Make sure you are using updated version of the script -echo: -if not "%regSKU%"=="%wmiSKU%" ( -echo Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU% -echo Restart the system and try again. -) +echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] +echo Unable to find this product in the HWID supported product list. +echo Make sure you are using updated version of the script. +echo https://massgrave.dev goto ins_done ) -if defined key call :dk_pkeychannel %key% -if defined pkeychannel set _chan=%pkeychannel% Key - ::======================================================================================================================================== if %_unattended%==1 goto insertkey @@ -241,7 +234,7 @@ if %_unattended%==1 goto insertkey cls %line% echo: -echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %_chan% +echo Install [%winos% ^| SKU:%osSKU% ^| %winbuild%] %channel% Key echo [%key%] %line% echo: @@ -250,10 +243,9 @@ echo Note: Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU% echo Restart the system to resolve it echo: ) -call :dk_color %_Green% "Press [1] to Continue or [2] to Exit" -choice /C:21 /N +call :dk_color %_Green% "Press [1] to Continue or [0] to %_exitmsg%" +choice /C:01 /N if %errorlevel%==1 exit /b -cls ::======================================================================================================================================== @@ -270,20 +262,17 @@ set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]" -if %error_code% EQU 0 ( -call :dk_refresh echo: echo [%winos% ^| SKU:%osSKU% ^| %winbuild%] -echo Installing %_chan% [%key%] +echo Installing %channel% [%key%] echo: + +if %error_code% EQU 0 ( +call :dk_refresh call :dk_color %Green% "[Successful]" ) else ( -%eline% -echo [%winos% ^| SKU:%osSKU% ^| %winbuild%] -echo Installing %_chan% [%key%] -echo: call :dk_color %Red% "[Unsuccessful] %error_code%" -if not defined applist echo Not Respoding: %e_wmispp% +if defined actidnotfound call :dk_color %Red% "Activation ID not found for this key." ) %line% @@ -293,7 +282,7 @@ if not defined applist echo Not Respoding: %e_wmispp% echo: if %_unattended%==1 timeout /t 2 & exit /b -call :dk_color %_Yellow% "Press any key to exit..." +call :dk_color %_Yellow% "Press any key to %_exitmsg%..." pause >nul exit /b @@ -343,93 +332,6 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com ) exit /b -:dk_initial - -echo: -echo Initializing... - -:: Check and enable WinMgmt, sppsvc services if required - -for %%# in (WinMgmt sppsvc) do ( -for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b NEQ 0x2 ( -echo: -echo Enabling %%# service... -if /i %%#==sppsvc sc config %%# start= delayed-auto %nul% || echo Failed -if /i %%#==WinMgmt sc config %%# start= auto %nul% || echo Failed -) -sc start %%# %nul% -if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 ( -echo: -echo Starting %%# service... -sc start %%# -echo: -call :dk_color %Red% "Failed to start [%%#] service, rest of the process may take a long time..." -) -) - -:: Check WMI and SPP Errors - -call :dk_ckeckwmic - -set e_wmi= -set e_wmispp= -call :dk_actids - -if not defined applist ( -net stop sppsvc /y %nul% -cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul% -call :dk_refresh - -if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul -if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul -if !errorlevel! NEQ 0 set e_wmi=1 - -if defined e_wmi (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP) -call :dk_actids -) -exit /b - -::======================================================================================================================================== - -:: Get Product Key from pkeyhelper.dll for future new editions -:: It works on Windows 10 1803 (17134) and later builds. (Partially on 1803 & 1809, fully on 1903 and later) - -:dk_pkey - -set pkey= -set d1=[DllImport(\"pkeyhelper.dll\",CharSet=CharSet.Unicode)]public static extern int SkuGetProductKeyForEdition(int e, string c, out string k, out string p); -set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k=''; $null=$AP::SkuGetProductKeyForEdition(%1, %2, [ref]$k, [ref]$null); $k -for /f %%a in ('%psc% "%d2%"') do if not errorlevel 1 (set pkey=%%a) -exit /b - -:: Get channel name for the key which was extracted from pkeyhelper.dll - -:dk_pkeychannel - -set k=%1 -set pkeychannel= -set p=%SystemRoot%\System32\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms -set m=[System.Runtime.InteropServices.Marshal] -set d1=[DllImport(\"PidGenX.dll\",CharSet=CharSet.Unicode)]public static extern int PidGenX(string k,string p,string m,int u,IntPtr i,IntPtr d,IntPtr f); -set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k='%k%'; $p='%p%'; $r=[byte[]]::new(0x04F8); $r[0]=0xF8; $r[1]=0x04; $f=%m%::AllocHGlobal(1272); %m%::Copy($r,0,$f,1272); -set d3=%d2% [void]$AP::PidGenX($k,$p,\"00000\",0,0,0,$f); %m%::Copy($f,$r,0,1272); %m%::FreeHGlobal($f); [System.Text.Encoding]::Unicode.GetString($r, 1016, 128).Replace('0','') -for /f %%a in ('%psc% "%d3%"') do if not errorlevel 1 (set pkeychannel=%%a) -exit /b - -:dk_hwidkey - -for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b -for %%# in (Retail OEM:NONSLP OEM:DM Volume:MAK) do ( -call :dk_pkey %osSKU% '%%#' -if defined pkey call :dk_pkeychannel !pkey! -if /i [!pkeychannel!]==[%%#] ( -set key=!pkey! -exit /b -) -) -exit /b - ::======================================================================================================================================== :dk_color @@ -446,76 +348,77 @@ exit /b :: 1st column = Activation ID :: 2nd column = Generic Retail/OEM/MAK Key :: 3rd column = SKU ID -:: 4th column = 1 = activation is not working (at the time of writing this), 0 = activation is working -:: 5th column = Key Type -:: 6th column = WMI Edition ID -:: 7th column = Version name incase same Edition ID is used in different OS versions with different key +:: 4th column = Key Type +:: 5th column = WMI Edition ID +:: 6th column = Version name incase same Edition ID is used in different OS versions with different key :: Separator = _ -:: Key preference is in the following order. Retail > OEM:NONSLP > OEM:DM > Volume:MAK - -:hwiddata +:hwidkey for %%# in ( -8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_0_OEM:NONSLP_Enterprise -23505d51-32d6-41f0-8ca7-e78ad0f16e71_D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ__11_1_____Retail_Starter -c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_0_Volume:MAK_EnterpriseN -211b80cc-7f64-482c-89e9-4ba21ff827ad_3NFXW-2T27M-2BDW6-4GHRV-68XRX__47_1_____Retail_StarterN -4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_0_____Retail_Professional -9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_0_____Retail_ProfessionalN -f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_0_____Retail_CoreN -1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_0_____Retail_CoreCountrySpecific -3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_0_____Retail_CoreSingleLanguage -2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_0_____Retail_Core -2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_0_OEM:NONSLP_PPIPro -e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_0_____Retail_Education -c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_0_____Retail_EducationN -cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_1_Volume:MAK_EnterpriseS_2021 -d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_0_OEM:NONSLP_EnterpriseS_2019 -706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_0_OEM:NONSLP_EnterpriseS_2016 -faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_0_OEM:NONSLP_EnterpriseS_2015 -2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_1_Volume:MAK_EnterpriseSN_2021 -e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_1_Volume:MAK_EnterpriseSN_2019 -3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_0_Volume:MAK_EnterpriseSN_2016 -60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_0_Volume:MAK_EnterpriseSN_2015 -a48938aa-62fa-4966-9d44-9f04da3f72f2_G3KNM-CHG6T-R36X3-9QDG6-8M8K9_138_1_____Retail_ProfessionalSingleLanguage -f7af7d09-40e4-419c-a49b-eae366689ebd_HNGCC-Y38KG-QVK8D-WMWRK-X86VK_139_1_____Retail_ProfessionalCountrySpecific -eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_0_____Retail_ProfessionalWorkstation -89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_0_____Retail_ProfessionalWorkstationN -62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_0_____Retail_ProfessionalEducation -13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_0_____Retail_ProfessionalEducationN -1ca0bfa8-d96b-4815-a732-7756f30c29e2_FV469-WGNG4-YQP66-2B2HY-KD8YX_171_1_OEM:NONSLP_EnterpriseG -8d6f6ffe-0c30-40ec-9db2-aad7b23bb6e3_FW7NV-4T673-HF4VX-9X4MM-B4H4T_172_1_OEM:NONSLP_EnterpriseGN -df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_0_____Retail_ServerRdsh -d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_0_____Retail_Cloud -af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_0_____Retail_CloudN -c7051f63-3a76-4992-bce5-731ec0b1e825_2HN6V-HGTM8-6C97C-RK67V-JQPFD_183_1_____Retail_CloudE -8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_0_____OEM:DM_IoTEnterprise -ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_0_OEM:NONSLP_IoTEnterpriseS -d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_0_____Retail_CloudEditionN -92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_0_____Retail_CloudEdition +8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_OEM:NONSLP_Enterprise +c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_Volume:MAK_EnterpriseN +4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_____Retail_Professional +9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_____Retail_ProfessionalN +f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_____Retail_CoreN +1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_____Retail_CoreCountrySpecific +3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_____Retail_CoreSingleLanguage +2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_____Retail_Core +2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_OEM:NONSLP_PPIPro +e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_____Retail_Education +c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_____Retail_EducationN +cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_Volume:MAK_EnterpriseS_VB +d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_OEM:NONSLP_EnterpriseS_RS5 +706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_OEM:NONSLP_EnterpriseS_RS1 +faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_OEM:NONSLP_EnterpriseS_TH +2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_Volume:MAK_EnterpriseSN_VB +e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_Volume:MAK_EnterpriseSN_RS5 +3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_Volume:MAK_EnterpriseSN_RS1 +60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_Volume:MAK_EnterpriseSN_TH +eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_____Retail_ProfessionalWorkstation +89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_____Retail_ProfessionalWorkstationN +62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_____Retail_ProfessionalEducation +13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_____Retail_ProfessionalEducationN +df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_____Retail_ServerRdsh +d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_____Retail_Cloud +af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_____Retail_CloudN +8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_____OEM:DM_IoTEnterprise +ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_OEM:NONSLP_IoTEnterpriseS_VB +d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_____Retail_CloudEditionN +92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_____Retail_CloudEdition +d4f9b41f-205c-405e-8e08-3d16e88e02be_J7NJW-V6KBM-CC8RW-Y29Y4-HQ2MJ_205_OEM:NONSLP_IoTEnterpriseSK ) do ( -for /f "tokens=1-8 delims=_" %%A in ("%%#") do if %osSKU%==%%C ( +for /f "tokens=1-6 delims=_" %%A in ("%%#") do ( + +if %1==key if %osSKU%==%%C ( -if %1==attempt1 if not defined key ( +REM Detect key attempt 1 + +if "%2"=="attempt1" if not defined key ( echo "!applist!" | find /i "%%A" 1>nul && ( set key=%%B +set channel=%%D ) ) -if %1==attempt2 if not defined key ( -set 7th=%%G -if not defined 7th ( -if %winbuild% GTR 19044 call :dk_hwidkey %nul% -if not defined key set key=%%B +REM Detect key attempt 2 + +if "%2"=="attempt2" if not defined key ( +set actidnotfound=1 +set 6th=%%F +if not defined 6th ( +set key=%%B +set channel=%%D ) else ( -echo "%winos%" | find /i "%%G" 1>nul && ( -if %winbuild% GTR 19044 call :dk_hwidkey %nul% -if not defined key set key=%%B +echo "%branch%" | find /i "%%F" 1>nul && ( +set key=%%B +set channel=%%D ) ) ) +) + ) ) exit /b diff --git a/MAS/Separate-Files-Version/Online_KMS_Activation/Activate.cmd b/MAS/Separate-Files-Version/Online_KMS_Activation/Activate.cmd index de48729..2350009 100644 --- a/MAS/Separate-Files-Version/Online_KMS_Activation/Activate.cmd +++ b/MAS/Separate-Files-Version/Online_KMS_Activation/Activate.cmd @@ -61,8 +61,7 @@ if not %errorlevel%==0 ( echo: echo Error: This is not a correct file. It has LF line ending issue. echo: -echo Press any key to exit... -pause >nul +ping 127.0.0.1 -n 6 > nul popd exit /b ) @@ -74,13 +73,15 @@ cls color 07 title Online KMS Activation +:: You are not supposed to edit anything below this. + set WMI_VBS=0 set _Debug=0 set Silent=0 set Logger=0 set AutoR2V=1 set SkipKMS38=1 - +set vNextOverride=1 set ActWindows=1 set ActOffice=1 @@ -90,6 +91,7 @@ set _elev= set _renetask= set _renacttask= set _unattended= +set _unattendedact= set _args=%* if defined _args set _args=%_args:"=% @@ -99,14 +101,15 @@ if "%_args%"=="-el" set _unattended= for %%A in (%_args%) do ( if /i "%%A"=="-el" (set _elev=1 -) else if /i "%%A"=="/rt" (set _renetask=1 -) else if /i "%%A"=="/rat" (set _renacttask=1 -) else if /i "%%A"=="/uni" (set _uni=1 -) else if /i "%%A"=="/w" (set ActWindows=1&set ActOffice=0 -) else if /i "%%A"=="/o" (set ActWindows=0&set ActOffice=1 -) else if /i "%%A"=="/wo" (set ActWindows=1&set ActOffice=1 -) else if /i "%%A"=="/d" (set _Debug=1 -) else if /i "%%A"=="/l" (set Logger=1&set Silent=1 +) else if /i "%%A"=="/KMS-RenewalTask" (set _renetask=1 +) else if /i "%%A"=="/KMS-ActAndRenewalTask" (set _renacttask=1 +) else if /i "%%A"=="/KMS-Uninstall" (set _uni=1 +) else if /i "%%A"=="/KMS-Windows" (set ActWindows=1&set ActOffice=0&set _unattendedact=1 +) else if /i "%%A"=="/KMS-Office" (set ActWindows=0&set ActOffice=1&set _unattendedact=1 +) else if /i "%%A"=="/KMS-WindowsOffice" (set ActWindows=1&set ActOffice=1&set _unattendedact=1 +) else if /i "%%A"=="/KMS-KeepvNext" (set vNextOverride=0 +) else if /i "%%A"=="/KMS-Debug" (set _Debug=1 +) else if /i "%%A"=="/KMS-Logger" (set Logger=1&set Silent=1 ) ) ) @@ -157,6 +160,7 @@ set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% set "_ttemp=%temp%" +set "_Local=%LocalAppData%" setlocal EnableDelayedExpansion @@ -177,7 +181,7 @@ goto Done :: Elevate script as admin and pass arguments and preventing loop -%nul% reg query HKU\S-1-5-19 || ( +>nul fltmc || ( if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b %nceline% echo This script require administrator privileges. @@ -187,6 +191,16 @@ goto Done ::======================================================================================================================================== +if %~z0 GEQ 300000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") + +:: Check not x86 Windows + +set notx86= +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b +if /i not "%arch%"=="x86" set notx86=1 + +::======================================================================================================================================== + for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" ( %nceline% echo Unable to find wmic.exe in the system. @@ -197,6 +211,7 @@ goto Done wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "ComputerSystem" 1>nul || ( %nceline% echo wmic.exe is not responding in the system. +echo Check this page for help https://massgrave.dev/troubleshoot echo Aborting... goto Done ) @@ -206,29 +221,20 @@ reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nu reg query "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0) if %_WSH% EQU 0 ( -%nceline% -echo Windows Script Host is disabled. -echo It is required for this script to work. -echo Aborting... -goto Done +reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% +reg add "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul% +if defined notx86 reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul% ) ::======================================================================================================================================== -if %~z0 GEQ 500000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit") - -:: Check not x86 Windows - -set notx86= -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set arch=%%b -if /i not "%arch%"=="x86" set notx86=1 - -::======================================================================================================================================== - if defined _uni goto _Complete_Uninstall -if defined _renacttask set ActTask=1&goto:RenTask -if defined _renetask set ActTask=&goto:RenTask +if defined _renetask set ActTask=&call:RenTask&timeout /t 2 +cls +if defined _renacttask set ActTask=1&call:RenTask&timeout /t 2 +cls +if defined _unattended if not defined _unattendedact goto Done ::======================================================================================================================================== @@ -237,6 +243,16 @@ set _gui= :_KMS_Menu +set sub_next=0 +set sub_o365=0 +set sub_proj=0 +set sub_vsio=0 +set _Identity=0 +set kNext=HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext +dir /b /s /a:-d "!_Local!\Microsoft\Office\Licenses\*1*" %nul% && set _Identity=1 +dir /b /s /a:-d "!ProgramData!\Microsoft\Office\Licenses\*1*" %nul% && set _Identity=1 +if %_Identity% EQU 1 reg query %kNext% /v MigrationToV5Done 2>nul | find /i "0x1" %nul% && call :officeSub %nul% + set _tskinstalled= reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Renewal" >nul && ( set _tskinstalled=1 @@ -251,6 +267,7 @@ set _oldtsk=1 if defined _unattended ( call :Activation_Start +timeout /t 2 goto Done ) @@ -265,15 +282,9 @@ echo. echo. echo. ______________________________________________________________ echo. -if %_Debug%==0 ( echo. [1] Activate - Windows echo. [2] Activate - Office echo. [3] Activate - All -) else ( -call :_color2 %_White% " [1] Activate - Windows " %_Red% "[Debug Mode]" -call :_color2 %_White% " [2] Activate - Office " %_Red% "[Debug Mode]" -call :_color2 %_White% " [3] Activate - All " %_Red% "[Debug Mode]" -) echo. if defined _tskinstalled call :_color2 %_White% " [4] Install Auto-Renewal " %_Green% "[Installed]" if defined _oldtsk call :_color2 %_White% " [4] Install Auto-Renewal " %_Red% "[Old Installed]" @@ -281,17 +292,35 @@ if not defined _tskinstalled if not defined _oldtsk echo. [4] Insta echo. [5] Uninstall echo. _______________________________________________ echo. -echo. [6] Enable Debug Mode +if %_Debug%==0 ( +echo. [6] Enable Debug Mode [No] +) else ( +call :_color2 %_White% " [6] Enable Debug Mode " %_Red% "[Yes]" +) +if %vNextOverride% EQU 1 ( +if %sub_next% EQU 1 ( +call :_color2 %_White% " [7] Override Office vNext " %_Red% "[Yes]" +) else ( +echo [7] Override Office vNext [Yes] +) +) else ( +if %sub_next% EQU 1 ( +call :_color2 %_White% " [7] Override Office vNext " %_Yellow% "[No]" +) else ( +echo [7] Override Office vNext [No] +) +) echo. _______________________________________________ echo. -echo. [7] %_exitmsg% +echo. [0] %_exitmsg% echo. ______________________________________________________________ echo. -call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7]" -choice /C:1234567 /N +call :_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard [1,2,3,4,5,6,7,0]" +choice /C:12345670 /N set _el=%errorlevel% -if %_el%==7 exit /b +if %_el%==8 exit /b +if %_el%==7 (if %vNextOverride% EQU 0 (set vNextOverride=1) else (set vNextOverride=0))&goto _KMS_Menu if %_el%==6 (if %_Debug%==0 (set _Debug=1) else (set _Debug=0)) &goto _KMS_Menu if %_el%==5 call:_Complete_Uninstall&cls&goto _KMS_Menu if %_el%==4 set ActTask=&call:RenTask&goto _KMS_Menu @@ -322,6 +351,8 @@ for %%# in (SppE%nil%xtComObj.exe,sppsvc.exe,osppsvc.exe) do ( reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%nil%ge File Execu%nil%tion Options\%%#" /f %nul%) ) +call :Clear-KMS-Cache %nul% + set "_Null=1>nul 2>nul" set KMS_Port=1688 if %_Debug% EQU 1 set _unattended=1 @@ -364,11 +395,11 @@ set "_mO21c=Detected Office 2021 C2R Retail could not be converted to Volume" set "_mO19c=Detected Office 2019 C2R Retail could not be converted to Volume" set "_mO16c=Detected Office 2016 C2R Retail could not be converted to Volume" set "_mO15c=Detected Office 2013 C2R Retail could not be converted to Volume" -set "_mO14c=Detected Office 2010 C2R Retail is not supported by KMS_VL_ALL" -set "_mO14m=Detected Office 2010 MSI Retail is not supported by KMS_VL_ALL" -set "_mO15m=Detected Office 2013 MSI Retail is not supported by KMS_VL_ALL" -set "_mO16m=Detected Office 2016 MSI Retail is not supported by KMS_VL_ALL" -set "_mOuwp=Detected Office 365/2016 UWP is not supported by KMS_VL_ALL" +set "_mO14c=Detected Office 2010 C2R Retail is not supported by this script" +set "_mO14m=Detected Office 2010 MSI Retail is not supported by this script" +set "_mO15m=Detected Office 2013 MSI Retail is not supported by this script" +set "_mO16m=Detected Office 2016 MSI Retail is not supported by this script" +set "_mOuwp=Detected Office 365/2016 UWP is not supported by this script" set DO16Ids=ProPlus,Standard,Access,SkypeforBusiness,Excel,Outlook,PowerPoint,Publisher,Word set LV16Ids=Mondo,ProPlus,ProjectPro,VisioPro,Standard,ProjectStd,VisioStd,Access,SkypeforBusiness,OneNote,Excel,Outlook,PowerPoint,Publisher,Word set LR16Ids=%LV16Ids%,Professional,HomeBusiness,HomeStudent,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud @@ -647,7 +678,7 @@ if %ActWindows% EQU 0 ( echo.&echo %_winos% %nKMS% if defined _eval echo %nEval% ) else ( - echo.&echo Failed checking KMS Activation ID^(s^) for Windows.&echo Check Troubleshooting in MAS extras section.&call :CheckWS + echo.&echo Failed checking KMS Activation ID^(s^) for Windows.&echo Check this page for help https://massgrave.dev/troubleshoot &call :CheckWS exit /b ) ) @@ -707,9 +738,12 @@ if %winbuild% GEQ 9200 ( ) if %winbuild% LSS 9200 (if %loc_off14% EQU 0 (echo.&echo No Installed Office %aword% Product Detected...&exit /b)) ) -set sub_O365=0 +if %vNextOverride% EQU 1 if %AutoR2V% EQU 1 ( +set sub_o365=0 set sub_proj=0 -set sub_vis=0 +set sub_vsio=0 +if %sub_next% EQU 1 reg delete HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Licensing /f %_Nul3% +) set Off1ce=1 set _sC2R=sppoff set _fC2R=ReturnSPP @@ -758,7 +792,7 @@ if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office21%%a20 call set /a prr_off21+=1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 ) -if %sub_vis% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( +if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office21%%a2021R" "!_temp!\sppchk.txt" %_Nul1% && ( call set /a prr_off21+=1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off21+=1 ) @@ -783,7 +817,7 @@ if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office19%%a20 call set /a prr_off19+=1 find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 ) -if %sub_vis% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( +if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office19%%a2019R" "!_temp!\sppchk.txt" %_Nul1% && ( call set /a prr_off19+=1 find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off19+=1 ) @@ -815,7 +849,7 @@ if %sub_proj% EQU 0 for %%a in (ProjectPro,ProjectStd) do find /i "Office16%%aR" if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 if %vol_off16% EQU 0 if %vol_off19% EQU 1 find /i "Office19%%a2019VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 ) -if %sub_vis% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( +if %sub_vsio% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office16%%aR" "!_temp!\sppchk.txt" %_Nul1% && ( call set /a prr_off16+=1 if %vol_off16% EQU 1 if %vol_off21% EQU 0 if %vol_off19% EQU 0 find /i "Office16%%aVL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 if %vol_off16% EQU 0 if %vol_off21% EQU 1 find /i "Office21%%a2021VL" "!_temp!\sppchk.txt" %_Nul1% && call set /a prv_off16+=1 @@ -824,7 +858,7 @@ if %sub_vis% EQU 0 for %%a in (VisioPro,VisioStd) do find /i "Office16%%aR" "!_t ) if %loc_off16% EQU 1 if %ret_off16% EQU 1 if %_O16MSI% EQU 0 if defined _C16R if %prv_off16% LSS %prr_off16% (set vol_off16=0&set run_off16=1) set "_qr=%_zz1% %spp% %_zz2% %_zz5%ApplicationID='%_oApp%' AND LicenseFamily like 'Office16O365%%' %_zz6% %_zz3% LicenseFamily %_zz4%" -if %loc_off16% EQU 1 if %run_off16% EQU 0 if %sub_O365% EQU 0 if defined _C16R %_qr% %_Nul2% | find /i "O365" %_Nul1% && ( +if %loc_off16% EQU 1 if %run_off16% EQU 0 if %sub_o365% EQU 0 if defined _C16R %_qr% %_Nul2% | find /i "O365" %_Nul1% && ( find /i "Office16MondoVL" "!_temp!\sppchk.txt" %_Nul1% || set run_off16=1 ) set run_off15=0 @@ -862,7 +896,7 @@ if %loc_off19% EQU 1 if %vol_off19% EQU 0 ( if %aC2R19% EQU 1 (echo.&echo %_mO19a%) else (echo.&echo %_mO19c%) ) if %loc_off16% EQU 1 if %vol_off16% EQU 0 ( -if defined _C16R (if %aC2R16% EQU 1 (echo.&echo %_mO16a%) else (if %sub_O365% EQU 0 echo.&echo %_mO16c%)) else if %_O16MSI% EQU 1 (if %ret_off16% EQU 1 echo.&echo %_mO16m%) +if defined _C16R (if %aC2R16% EQU 1 (echo.&echo %_mO16a%) else (if %sub_o365% EQU 0 echo.&echo %_mO16c%)) else if %_O16MSI% EQU 1 (if %ret_off16% EQU 1 echo.&echo %_mO16m%) ) if %loc_off15% EQU 1 if %vol_off15% EQU 0 ( if defined _C15R (if %aC2R15% EQU 1 (echo.&echo %_mO15a%) else (echo.&echo %_mO15c%)) else if %_O15MSI% EQU 1 (if %ret_off15% EQU 1 echo.&echo %_mO15m%) @@ -1292,6 +1326,20 @@ if not %xOS%==x86 if exist "%ProgramW6432%\Microsoft Office\Office%1\OSPP.VBS" s if not %xOS%==x86 if exist "%ProgramFiles(x86)%\Microsoft Office\Office%1\OSPP.VBS" set loc_off%1=1 exit /b +:officeSub +reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_o365=1) +reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_o365=1) +reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_o365=1) +reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_o365=1) +reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_proj=1 +reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_proj=1 +reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_vsio=1 +reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_vsio=1 +if %sub_o365% EQU 1 set sub_next=1 +if %sub_proj% EQU 1 set sub_next=1 +if %sub_vsio% EQU 1 set sub_next=1 +exit /b + :insKey set S_OK=1 echo. @@ -1609,22 +1657,6 @@ echo Error: %_sps% WMI version is not detected call :CheckWS goto :%_fC2R% ) -set _Identity=0 -set _vNext=0 -dir /b /s /a:-d "!_Local!\Microsoft\Office\Licenses\*1*" %_Nul3% && set _Identity=1 -dir /b /s /a:-d "!ProgramData!\Microsoft\Office\Licenses\*1*" %_Nul3% && set _Identity=1 -set kNext=HKCU\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext -if %_Identity% EQU 1 reg query %kNext% /v MigrationToV5Done %_Nul2% | find /i "0x1" %_Nul1% && set _vNext=1 -if %_vNext% EQU 1 ( -reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_O365=1) -reg query %kNext% | findstr /i /r ".*retail" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_O365=1) -reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x2" %_Nul1% && (set sub_O365=1) -reg query %kNext% | findstr /i /r ".*volume" %_Nul2% | findstr /i /v "project visio" %_Nul2% | find /i "0x3" %_Nul1% && (set sub_O365=1) -reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_proj=1 -reg query %kNext% | findstr /i /r "project.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_proj=1 -reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x2" %_Nul1% && set sub_vis=1 -reg query %kNext% | findstr /i /r "visio.*" %_Nul2% | find /i "0x3" %_Nul1% && set sub_vis=1 -) set _Retail=0 set "_ocq=ApplicationID='%_oApp%' AND LicenseStatus='1' AND PartialProductKey is not NULL" if %WMI_VBS% EQU 0 wmic path %_spp% where (%_ocq%) get Description %_Nul2% |findstr /V /R "^$" >"!_temp!\crvRetail.txt" @@ -1759,20 +1791,20 @@ find /i "Office16MondoVL_KMS_Client" "!_temp!\crvVolume.txt" %_Nul1% && ( for %%a in (O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud) do set _%%a=0 ) ) -if %sub_O365% EQU 1 ( +if %sub_o365% EQU 1 ( for %%a in (%_Suites%) do set _%%a=0 echo. -echo Microsoft Office is activated with a subscription. +echo Microsoft Office is activated with a vNext license. ) if %sub_proj% EQU 1 ( for %%a in (%_PrjSKU%) do set _%%a=0 echo. -echo Microsoft Project is activated with a subscription. +echo Microsoft Project is activated with a vNext license. ) -if %sub_vis% EQU 1 ( +if %sub_vsio% EQU 1 ( for %%a in (%_VisSKU%) do set _%%a=0 echo. -echo Microsoft Visio is activated with a subscription. +echo Microsoft Visio is activated with a vNext license. ) for %%a in (%_RetIds%,ProPlus) do if !_%%a! EQU 1 ( @@ -2980,25 +3012,45 @@ exit /b :_errorinfo -(set msg1=echo Try again and if the issue still persist then either use a^ -&echo different Internet connection or use this offline KMS activator^ -&echo KMS_VL_ALL by @abbodi1406 pastebin.com/raw/cpdmr6HZ +call :CheckFR + +set _intcon= +for %%a in (dns.msftncsi.com licensing.mp.microsoft.com) do ( +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not [%%#]==[] set _intcon=1) ) -call :CheckFR +if not defined _intcon ( +call :_color %_Red% "Internet is not connected." +exit /b +) + +set _portcon= +for %%a in (%srvlist%) do if not defined _portcon ( +%psc% "$t = New-Object Net.Sockets.TcpClient;try{$t.Connect("""%%a""", 1688)}catch{};$t.Connected" | findstr /i true 1>nul && set _portcon=1 +) -if !server_num! GTR %max_servers% ( -ping -n 1 one.one.one.one 1>nul || ping -n 1 resolver1.opendns.com 1>nul || ( -call :_color %_Red% "Unable to test KMS servers due to restricted or no Internet." +if not defined _portcon ( +echo Internet is found but failed to connect KMS servers on Port 1688. +echo. +echo Make sure restricted Internet [Office/College] is not connected, +echo or Port 1688 is not blocked in the firewall. echo. -%msg1% +echo Either use another Internet connection or use offline KMS activator +echo https://github.com/abbodi1406/KMS_VL_ALL_AIO exit /b ) + +if [%ERRORCODE%]==[-1073418124] ( +echo KMS server port 1688 test is passed. +echo Make sure system files are not blocked in firewall. +echo. +echo If the issue persist, try offline KMS activator, +echo https://github.com/abbodi1406/KMS_VL_ALL_AIO +echo. ) -echo Restart the system and try again. echo KMS server is not an issue in this case. -echo Check Troubleshooting steps in the ReadMe. +call :_color2 %Magenta% "Check this page for help" %_Yellow% " https://massgrave.dev/troubleshoot" exit /b ::======================================================================================================================================== @@ -3078,7 +3130,7 @@ if %winbuild% GEQ 9600 ( %nul% reg query "HKLM\%SPPk%\%_wApp%" && ( set error_=9 echo Failed to completely clear KMS Cache. -reg query "HKLM\%SPPk%\%_wApp%" /s 2>nul | findstr /i "127.0.0.2" >nul && echo Most likely, the KMS38 activation is locked. +reg query "HKLM\%SPPk%\%_wApp%" /s 2>nul | findstr /i "127.0.0.2" >nul && echo KMS38 activation is locked. ) || ( echo Cleared KMS Cache successfully. ) @@ -3158,7 +3210,7 @@ call :_color %Green% "Online KMS Complete Uninstall was done successfully." echo __________________________________________________________________________________________ ) -if defined _unattended exit /b +if defined _unattended timeout /t 2 & exit /b echo. call :_color %_Yellow% "Press any key to go back..." @@ -3942,7 +3994,7 @@ if not [%KMS_IP%]==[!KMS_IP!] exit /b goto :_taskgetserv ) -:: Ver:1.6 +:: Ver:1.7 ::======================================================================================================================================== :_extracttask: -- cgit v1.2.3