summaryrefslogtreecommitdiff
path: root/MAS/Separate-Files-Version
diff options
context:
space:
mode:
authorWindowsAddict2025-07-21 23:10:17 +0000
committerWindowsAddict2025-07-21 23:10:17 +0000
commitbc781ad079bfa097fd3c4fb1f43d6ddc64f8ccc4 (patch)
tree40aaf3c16fff0a88be415e23048cb481733696a1 /MAS/Separate-Files-Version
parent43cceb366ef8a2a9dcd85b31ee72063efbde8ef9 (diff)
downloadMicrosoft-Activation-Scripts-bc781ad079bfa097fd3c4fb1f43d6ddc64f8ccc4.zip
Remove KMS38 protection feature, it's not important.
Diffstat (limited to 'MAS/Separate-Files-Version')
-rw-r--r--MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd74
-rw-r--r--MAS/Separate-Files-Version/Troubleshoot.cmd102
2 files changed, 116 insertions, 60 deletions
diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd
index 704e7a3..8afe342 100644
--- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd
+++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd
@@ -15,9 +15,6 @@
:: To activate, run the script with "/KMS38" parameter or change 0 to 1 in below line
set _act=0
-:: To remove KMS38 protection, run the script with /KMS38-RemoveProtection parameter or change 0 to 1 in below line
-set _rem=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
@@ -155,13 +152,12 @@ if defined _args set _args=%_args:re2=%
if defined _args (
for %%A in (%_args%) do (
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 (%_act% %_rem% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1)
+for %%A in (%_act% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1)
::========================================================================================================================================
@@ -382,8 +378,6 @@ cls
::========================================================================================================================================
-if %_rem%==1 goto :k_uninstall
-
:k_menu
if %_unattended%==0 (
@@ -400,7 +394,7 @@ echo:
echo [1] KMS38 Activation
echo ____________________________________________
echo:
-echo [2] Remove KM38 Protection
+echo [2] Remove KMS38 Activation
echo:
echo [0] %_exitmsg%
echo: ______________________________________________________
@@ -667,8 +661,7 @@ echo:
%nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f
%nul% reg query "HKLM\%specific_kms%" && (
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':regdel\:.*';& ([scriptblock]::Create($f[1]))"
-%nul% reg delete "HKLM\%specific_kms%" /f
+call :dk_color %Blue% "Specific KMS registry is locked. %_fixmsg%"
)
set k_error=
@@ -834,18 +827,6 @@ echo Removing the Added Specific KMS Host [Successful]
)
)
-:: Protect KMS38 if opted by the user and conditions are correct
-
-if defined _k38 (
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':regdel\:.*';& ([ScriptBlock]::Create($f[1])) -protect"
-%nul% reg delete "HKLM\%specific_kms%" /f
-%nul% reg query "HKLM\%specific_kms%" && (
-echo Protect KMS38 From KMS [Successful] [Locked a Registry Key]
-) || (
-call :dk_color %Red% "Protect KMS38 From 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 defined a_cor if exist "%_clipup%" del /f /q "%_clipup%" %nul%
@@ -875,54 +856,27 @@ goto :dk_done
cls
if not defined terminal mode 99, 28
-title Remove KMS38 Protection %masver%
+title Remove KMS38 Activation %masver%
%nul% reg delete "HKLM\%specific_kms%" /f
%nul% reg delete "HKU\S-1-5-20\%specific_kms%" /f
-%nul% reg query "HKLM\%specific_kms%" && (
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':regdel\:.*';& ([scriptblock]::Create($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]"
+call :dk_color %Red% "Failed to remove specific KMS Host."
+call :dk_color %Blue% "%_fixmsg%"
) || (
-echo Removing Specific KMS Host [Successful]
+echo Successfully removed specific KMS Host.
)
-goto :dk_done
-
-::========================================================================================================================================
-
-:: 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
-
-:regdel:
-param (
- [switch]$protect
-)
-
-$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')
-$Admin = ($SID.Translate([System.Security.Principal.NTAccount])).Value
-
-if($protect) {
-$ruleArgs = @("$Admin", "Delete, SetValue", "ContainerInherit", "None", "Deny")
-} else {
-$ruleArgs = @("$Admin", "FullControl", "Allow")
-}
-
-$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()
+echo:
+echo KMS38 activation doesn't modify any Windows components and doesn't install any new files.
+echo:
+call :dk_color %Gray% "If you want to reset the activation status,"
+call :dk_color %Blue% "%_fixmsg%"
+echo:
-$rule = [System.Security.AccessControl.RegistryAccessRule]::new.Invoke($ruleArgs)
-$acl.ResetAccessRule($rule)
-$key.SetAccessControl($acl)
-:regdel:
+goto :dk_done
::========================================================================================================================================
diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd
index 2989d4a..3112fca 100644
--- a/MAS/Separate-Files-Version/Troubleshoot.cmd
+++ b/MAS/Separate-Files-Version/Troubleshoot.cmd
@@ -697,6 +697,25 @@ echo:
call :dk_color %Blue% "Rebuilding SPP licensing tokens..."
echo:
+echo Clearing KMS Cache...
+echo:
+call :_taskclear-cache
+
+%nul% reg query "HKLM\%SPPk%\%_wApp%" && (
+echo Removing KMS38 protection...
+%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':regdel\:.*';& ([scriptblock]::Create($f[1]))"
+%nul% reg delete "HKLM\%SPPk%\%_wApp%" /f
+%nul% reg query "HKLM\%SPPk%\%_wApp%" && (
+call :dk_color %Red% "Failed to remove KMS38 protection."
+) || (
+echo Successfully removed KMS38 protection.
+echo Successfully cleared KMS Cache.
+)
+) || (
+echo Successfully cleared KMS Cache.
+)
+echo:
+
call :scandat check
if not defined token (
@@ -1260,6 +1279,59 @@ exit /b
::========================================================================================================================================
+:: Clean existing K-M-S cache from the registry
+
+:_taskclear-cache
+
+set w=
+for %%# in (SppE%w%xtComObj.exe sppsvc.exe SLsvc.exe) do (
+reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul%
+)
+
+set "OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform"
+
+if %winbuild% LSS 7600 (
+reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" %nul% && (
+set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL"
+)
+)
+if not defined SPPk (
+set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform"
+)
+
+set "slp=SoftwareLicensingProduct"
+set "ospp=OfficeSoftwareProtectionProduct"
+
+set "_wApp=55c92734-d682-4d71-983e-d6ec3f16059f"
+set "_oApp=0ff1ce15-a989-479d-af46-f275c6370663"
+set "_oA14=59a52881-a989-479d-af46-f275c6370663"
+
+%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName
+%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName /reg:32
+%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServicePort
+%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServicePort /reg:32
+%nul% reg delete "HKLM\%SPPk%" /f /v DisableDnsPublishing
+%nul% reg delete "HKLM\%SPPk%" /f /v DisableKeyManagementServiceHostCaching
+%nul% reg delete "HKLM\%SPPk%\%_wApp%" /f
+if %winbuild% GEQ 9200 (
+%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f
+%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32
+)
+if %winbuild% GEQ 9600 (
+%nul% reg delete "HKU\S-1-5-20\%SPPk%\%_wApp%" /f
+%nul% reg delete "HKU\S-1-5-20\%SPPk%\%_oApp%" /f
+)
+%nul% reg delete "HKLM\%OPPk%" /f /v KeyManagementServiceName
+%nul% reg delete "HKLM\%OPPk%" /f /v KeyManagementServicePort
+%nul% reg delete "HKLM\%OPPk%" /f /v DisableDnsPublishing
+%nul% reg delete "HKLM\%OPPk%" /f /v DisableKeyManagementServiceHostCaching
+%nul% reg delete "HKLM\%OPPk%\%_oA14%" /f
+%nul% reg delete "HKLM\%OPPk%\%_oApp%" /f
+
+exit /b
+
+::========================================================================================================================================
+
:: Fix SPP related registry and folder permissions
:fixsppperms:
@@ -1471,6 +1543,36 @@ $key.SetAccessControl($acl)
::========================================================================================================================================
+:: This code runs to undo below registry key KMS38 protection
+:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f
+
+:: This option is not used in KMS38 anymore, it's here only to remove previous versions protection.
+
+:regdel:
+param (
+ [switch]$protect
+)
+
+$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')
+$Admin = ($SID.Translate([System.Security.Principal.NTAccount])).Value
+
+if($protect) {
+$ruleArgs = @("$Admin", "Delete, SetValue", "ContainerInherit", "None", "Deny")
+} else {
+$ruleArgs = @("$Admin", "FullControl", "Allow")
+}
+
+$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()
+
+$rule = [System.Security.AccessControl.RegistryAccessRule]::new.Invoke($ruleArgs)
+$acl.ResetAccessRule($rule)
+$key.SetAccessControl($acl)
+:regdel:
+
+::========================================================================================================================================
+
:dk_color
if %_NCS% EQU 1 (