summaryrefslogtreecommitdiff
path: root/MAS/Separate-Files-Version
diff options
context:
space:
mode:
Diffstat (limited to 'MAS/Separate-Files-Version')
-rw-r--r--MAS/Separate-Files-Version/Activation_Troubleshoot.cmd584
-rw-r--r--MAS/Separate-Files-Version/Change_Edition.cmd550
-rw-r--r--MAS/Separate-Files-Version/Check-Activation-Status-vbs.cmd3
-rw-r--r--MAS/Separate-Files-Version/Check-Activation-Status-wmi.cmd22
-rw-r--r--MAS/Separate-Files-Version/Extract_OEM_Folder.cmd258
-rw-r--r--MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/ClipUp.exebin1354304 -> 0 bytes
-rw-r--r--MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/Info.txt22
-rw-r--r--MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/gatherosstate.exebin337920 -> 0 bytes
-rw-r--r--MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd1088
-rw-r--r--MAS/Separate-Files-Version/HWID-KMS38_Activation/KMS38_Activation.cmd902
-rw-r--r--MAS/Separate-Files-Version/Install_HWID_Key.cmd275
-rw-r--r--MAS/Separate-Files-Version/Online_KMS_Activation/Activate.cmd226
12 files changed, 1921 insertions, 2009 deletions
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.
@@ -172,31 +172,41 @@ 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 "<assemblyIdentity name=`"$($packageData[0])`" version=`"$($packageData[4])`" processorArchitecture=`"$($packageData[2])`" publicKeyToken=`"$($packageData[1])`" language=`"$($packageData[3])`" />"
+}
+
+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 '<?xml version="1.0"?>'
+ Write-Output '<unattend xmlns="urn:schemas-microsoft-com:unattend">'
+ Write-Output '<servicing>'
+
+ foreach($package in $InstallCandidates) {
+ Write-Output '<package action="install">'
+ Write-Output (Get-AssemblyIdentity -PackageName $package)
+ Write-Output '</package>'
+ }
+
+ foreach($package in $RemovalCandidates) {
+ Write-Output "<package action=`"$removeAction`">"
+ Write-Output (Get-AssemblyIdentity -PackageName $package)
+ Write-Output '</package>'
+ }
+
+ Write-Output '</servicing>'
+ Write-Output '</unattend>'
+}
+
+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
--- a/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/ClipUp.exe
+++ /dev/null
Binary files 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
--- a/MAS/Separate-Files-Version/HWID-KMS38_Activation/BIN/gatherosstate.exe
+++ /dev/null
Binary files 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 <path> & 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 <path>)
-
-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,83 +793,92 @@ 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
+
+<nul set /p "=<?xml version="1.0" encoding="utf-8"?><genuineAuthorization xmlns="http://www.microsoft.com/DRM/SL/GenuineAuthorization/1.0"><version>1.0</version><genuineProperties origin="sppclient"><properties>OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=!encoded!;TimeStampClient=2022-10-11T12:00:00Z</properties><signatures><signature name="clientLockboxKey" method="rsa-sha256">%%E=</signature></signatures></genuineProperties></genuineAuthorization>" >"%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"
+<nul set /p "=<?xml version="1.0" encoding="utf-8"?><genuineAuthorization xmlns="http://www.microsoft.com/DRM/SL/GenuineAuthorization/1.0"><version>1.0</version><genuineProperties origin="sppclient"><properties>OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=%sessionId%;TimeStampClient=2022-10-11T12:00:00Z</properties><signatures><signature name="clientLockboxKey" method="rsa-sha256">%signature%</signature></signatures></genuineProperties></genuineAuthorization>" >"%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 <path> & 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 <path>)
+:: 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,77 +348,78 @@ 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: