From c75cd29b9fda945df18a72bccf17fab56868a261 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 7 Sep 2024 08:07:44 +0530 Subject: [PATCH 001/132] Revert export-ignore --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index de5bd3d..8749e12 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -MAS export-ignore -LICENSE export-ignore -README.md export-ignore +# MAS export-ignore +# LICENSE export-ignore +# README.md export-ignore .gitattributes export-ignore From 52d4c52dba8e29a3c1fb295c8946dbe6cf2f0239 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 17 Sep 2024 18:21:07 +0530 Subject: [PATCH 002/132] Evade AV's detection - 1 (v2.7) --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 05a9402..92ef1fe 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1,4 +1,4 @@ -@::RANDOM-09dbb08f-d896-4653-b84f-24fc22f8d250 +@::03938c58-ded9-4e95-b879-cb81e3e77c93 @set masver=2.7 @setlocal DisableDelayedExpansion @echo off From 841d856a29cee0444e10302de8650097ee69c161 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 26 Sep 2024 20:43:21 +0530 Subject: [PATCH 003/132] Fix bugs in getting user accounts SID --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 43 +++++++++++-------- .../Activators/Ohook_Activation_AIO.cmd | 42 ++++++++++-------- .../Activators/Online_KMS_Activation.cmd | 42 ++++++++++-------- 3 files changed, 76 insertions(+), 51 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 92ef1fe..7aa0e43 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2807,7 +2807,15 @@ set _sortIds=!_sortIds:PreInstallR_=Retail_! :: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state set _sidlist= -for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like """"$Env:SystemDrive\Users\*"""" -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) +set failedload= + +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($_.PSChildName -match '^S-([^-\n]*-){5,}[^-\n]*$' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) + +:: Fallback method +if not defined _sidlist ( +set failedload=1 +for /f "delims=" %%a in ('%psc% "$explorerProc = Get-Process -Name explorer | Where-Object {$_.SessionId -eq (Get-Process -Id $pid).SessionId} | Select-Object -First 1; $sid = (gwmi -Query ('Select * From Win32_Process Where ProcessID=' + $explorerProc.Id)).GetOwnerSid().Sid; $sid" %nul6%') do (set _sidlist=%%a) +) if not defined _sidlist ( set error=1 @@ -2827,8 +2835,6 @@ call :dk_color %Gray% "Checking Total User Accounts [%counter%]" :: Load the unloaded useraccounts registry set loadedsids= -set failedtoload= -set failedtounload= for %%# in (%_sidlist%) do ( reg query HKU\%%#\Software %nul% || ( for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( @@ -2836,7 +2842,7 @@ reg load HKU\%%# "%%b\NTUSER.DAT" %nul% reg query HKU\%%#\Software %nul% && ( call set "loadedsids=%%loadedsids%% %%#" ) || ( -set failedtoload=1 +set failedload=1 ) ) ) @@ -2898,13 +2904,19 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou :: Some retail products attempt to validate the license and may show a banner "There was a problem checking this device's license status." :: Resiliency registry entry can skip this check +set faileddef= +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b" + if defined o16c2r if defined officeact ( -reg load HKU\DEF_TEMP %SystemDrive%\Users\Default\NTUSER.DAT %nul% -reg query HKU\DEF_TEMP %nul% || set failedtoload=1 +if exist "%defdat%\NTUSER.DAT" ( +reg load HKU\DEF_TEMP "%defdat%\NTUSER.DAT" %nul% +reg query HKU\DEF_TEMP %nul% || set faileddef=1 reg add HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% reg unload HKU\DEF_TEMP %nul% -reg query HKU\DEF_TEMP %nul% && set failedtounload=1 - +reg query HKU\DEF_TEMP %nul% && set faileddef=1 +) else ( +set faileddef=1 +) for %%# in (%_sidlist%) do ( reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul% reg add HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% @@ -2918,19 +2930,15 @@ echo Adding Reg Keys to Skip License Check [Successfully added to all %counter for %%# in (%loadedsids%) do ( reg unload HKU\%%# %nul% -reg query HKU\%%# %nul% && set failedtounload=1 +reg query HKU\%%# %nul% && set failedload=1 ) -if defined failedtoload ( -set error=1 -call :dk_color %Red% "Loading Unloaded Accounts Registry [Failed for some user accounts]" -call :dk_color %Blue% "Reboot your machine using the restart option and try again." +if defined failedload ( +call :dk_color %Gray% "Loading Unloading Registries [Failed for some user accounts]" ) -if defined failedtounload ( -set error=1 -call :dk_color %Red% "Unloading Loaded Account Registries [Failed for some user accounts]" -call :dk_color %Blue% "Reboot your machine using the restart option and try again." +if defined faileddef ( +call :dk_color %Gray% "Loading Unloading Registries [Failed for Default\NTUSER.DAT]" ) exit /b @@ -10252,4 +10260,5 @@ if ($appIdsList.Count -gt 0) { :getappnames: ::======================================================================================================================================== +:: :: Leave empty line below diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index ec2e8c9..b66bc40 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1106,7 +1106,15 @@ set _sortIds=!_sortIds:PreInstallR_=Retail_! :: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state set _sidlist= -for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like """"$Env:SystemDrive\Users\*"""" -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) +set failedload= + +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($_.PSChildName -match '^S-([^-\n]*-){5,}[^-\n]*$' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) + +:: Fallback method +if not defined _sidlist ( +set failedload=1 +for /f "delims=" %%a in ('%psc% "$explorerProc = Get-Process -Name explorer | Where-Object {$_.SessionId -eq (Get-Process -Id $pid).SessionId} | Select-Object -First 1; $sid = (gwmi -Query ('Select * From Win32_Process Where ProcessID=' + $explorerProc.Id)).GetOwnerSid().Sid; $sid" %nul6%') do (set _sidlist=%%a) +) if not defined _sidlist ( set error=1 @@ -1126,8 +1134,6 @@ call :dk_color %Gray% "Checking Total User Accounts [%counter%]" :: Load the unloaded useraccounts registry set loadedsids= -set failedtoload= -set failedtounload= for %%# in (%_sidlist%) do ( reg query HKU\%%#\Software %nul% || ( for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( @@ -1135,7 +1141,7 @@ reg load HKU\%%# "%%b\NTUSER.DAT" %nul% reg query HKU\%%#\Software %nul% && ( call set "loadedsids=%%loadedsids%% %%#" ) || ( -set failedtoload=1 +set failedload=1 ) ) ) @@ -1197,13 +1203,19 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou :: Some retail products attempt to validate the license and may show a banner "There was a problem checking this device's license status." :: Resiliency registry entry can skip this check +set faileddef= +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b" + if defined o16c2r if defined officeact ( -reg load HKU\DEF_TEMP %SystemDrive%\Users\Default\NTUSER.DAT %nul% -reg query HKU\DEF_TEMP %nul% || set failedtoload=1 +if exist "%defdat%\NTUSER.DAT" ( +reg load HKU\DEF_TEMP "%defdat%\NTUSER.DAT" %nul% +reg query HKU\DEF_TEMP %nul% || set faileddef=1 reg add HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% reg unload HKU\DEF_TEMP %nul% -reg query HKU\DEF_TEMP %nul% && set failedtounload=1 - +reg query HKU\DEF_TEMP %nul% && set faileddef=1 +) else ( +set faileddef=1 +) for %%# in (%_sidlist%) do ( reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul% reg add HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% @@ -1217,19 +1229,15 @@ echo Adding Reg Keys to Skip License Check [Successfully added to all %counter for %%# in (%loadedsids%) do ( reg unload HKU\%%# %nul% -reg query HKU\%%# %nul% && set failedtounload=1 +reg query HKU\%%# %nul% && set failedload=1 ) -if defined failedtoload ( -set error=1 -call :dk_color %Red% "Loading Unloaded Accounts Registry [Failed for some user accounts]" -call :dk_color %Blue% "Reboot your machine using the restart option and try again." +if defined failedload ( +call :dk_color %Gray% "Loading Unloading Registries [Failed for some user accounts]" ) -if defined failedtounload ( -set error=1 -call :dk_color %Red% "Unloading Loaded Account Registries [Failed for some user accounts]" -call :dk_color %Blue% "Reboot your machine using the restart option and try again." +if defined faileddef ( +call :dk_color %Gray% "Loading Unloading Registries [Failed for Default\NTUSER.DAT]" ) exit /b diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 306bb47..78f9a11 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1207,7 +1207,15 @@ exit /b :: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state set _sidlist= -for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like """"$Env:SystemDrive\Users\*"""" -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) +set failedload= + +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($_.PSChildName -match '^S-([^-\n]*-){5,}[^-\n]*$' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) + +:: Fallback method +if not defined _sidlist ( +set failedload=1 +for /f "delims=" %%a in ('%psc% "$explorerProc = Get-Process -Name explorer | Where-Object {$_.SessionId -eq (Get-Process -Id $pid).SessionId} | Select-Object -First 1; $sid = (gwmi -Query ('Select * From Win32_Process Where ProcessID=' + $explorerProc.Id)).GetOwnerSid().Sid; $sid" %nul6%') do (set _sidlist=%%a) +) if not defined _sidlist ( set error=1 @@ -1227,8 +1235,6 @@ call :dk_color %Gray% "Checking Total User Accounts [%counter%]" :: Load the unloaded useraccounts registry set loadedsids= -set failedtoload= -set failedtounload= for %%# in (%_sidlist%) do ( reg query HKU\%%#\Software %nul% || ( for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( @@ -1236,7 +1242,7 @@ reg load HKU\%%# "%%b\NTUSER.DAT" %nul% reg query HKU\%%#\Software %nul% && ( call set "loadedsids=%%loadedsids%% %%#" ) || ( -set failedtoload=1 +set failedload=1 ) ) ) @@ -1298,13 +1304,19 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou :: Some retail products attempt to validate the license and may show a banner "There was a problem checking this device's license status." :: Resiliency registry entry can skip this check +set faileddef= +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b" + if defined o16c2r if defined officeact ( -reg load HKU\DEF_TEMP %SystemDrive%\Users\Default\NTUSER.DAT %nul% -reg query HKU\DEF_TEMP %nul% || set failedtoload=1 +if exist "%defdat%\NTUSER.DAT" ( +reg load HKU\DEF_TEMP "%defdat%\NTUSER.DAT" %nul% +reg query HKU\DEF_TEMP %nul% || set faileddef=1 reg add HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% reg unload HKU\DEF_TEMP %nul% -reg query HKU\DEF_TEMP %nul% && set failedtounload=1 - +reg query HKU\DEF_TEMP %nul% && set faileddef=1 +) else ( +set faileddef=1 +) for %%# in (%_sidlist%) do ( reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul% reg add HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% @@ -1318,19 +1330,15 @@ echo Adding Reg Keys to Skip License Check [Successfully added to all %counter for %%# in (%loadedsids%) do ( reg unload HKU\%%# %nul% -reg query HKU\%%# %nul% && set failedtounload=1 +reg query HKU\%%# %nul% && set failedload=1 ) -if defined failedtoload ( -set error=1 -call :dk_color %Red% "Loading Unloaded Accounts Registry [Failed for some user accounts]" -call :dk_color %Blue% "Reboot your machine using the restart option and try again." +if defined failedload ( +call :dk_color %Gray% "Loading Unloading Registries [Failed for some user accounts]" ) -if defined failedtounload ( -set error=1 -call :dk_color %Red% "Unloading Loaded Account Registries [Failed for some user accounts]" -call :dk_color %Blue% "Reboot your machine using the restart option and try again." +if defined faileddef ( +call :dk_color %Gray% "Loading Unloading Registries [Failed for Default\NTUSER.DAT]" ) exit /b From 323c6808af86acaea40e405e4691c111c7c83035 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 26 Sep 2024 20:49:49 +0530 Subject: [PATCH 004/132] Avoid using \> with findstr --- .../Change_Office_Edition.cmd | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index c10cfdf..4b1f515 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -884,10 +884,12 @@ for %%# in ( for /f "tokens=1-2 delims=_" %%A in ("%%~#") do ( set supported= if %winbuild% LSS 10240 (echo %%B | findstr /i "LTSC DevMain" %nul% || set supported=1) else (set supported=1) -if %winbuild% GEQ 10240 (if defined ltsc19 echo %%B | findstr /i "LTSC\>" %nul% || set supported=) -if %winbuild% GEQ 10240 (if defined ltsc21 echo %%B | findstr /i "LTSC2021\>" %nul% || set supported=) -if %winbuild% GEQ 10240 (if defined ltsc24 echo %%B | findstr /i "LTSC2024\>" %nul% || set supported=) -if %winbuild% GEQ 10240 (if not defined ltscfound echo %%B | findstr /i "LTSC" %nul% && set supported=) +if %winbuild% GEQ 10240 ( +if defined ltsc19 echo %%A | findstr /i "2019 VL" %nul% || set supported= +if defined ltsc21 echo %%A | findstr /i "2021 VL" %nul% || set supported= +if defined ltsc24 echo %%A | findstr /i "2024 VL" %nul% || set supported= +if not defined ltscfound echo %%B | findstr /i "LTSC" %nul% && set supported= +) if defined supported ( set /a counter+=1 if !counter! LSS 10 ( @@ -1057,13 +1059,15 @@ if exist "%_cfolder%\OfficeC2RClient.exe" ( set "_c2rCexe=%_cfolder%\OfficeC2RClient.exe" ) -echo %_AudienceData% | findstr /i "LTSC\>" %nul% && set ltsc19=LTSC +set "audidata4=%_AudienceData:~-4%" + +if /i "%audidata4%"=="LTSC" set ltsc19=LTSC echo %_clversion% %_version% | findstr "16.0.103 16.0.104 16.0.105" %nul% && set ltsc19=LTSC -echo %_AudienceData% | findstr /i "LTSC2021\>" %nul% && set ltsc21=LTSC2021 +if /i "%audidata4%"=="2021" set ltsc21=LTSC2021 echo %_clversion% %_version% | findstr "16.0.14332" %nul% && set ltsc21=LTSC2021 -echo %_AudienceData% | findstr /i "LTSC2024\>" %nul% && set ltsc24=LTSC2024 +if /i "%audidata4%"=="2024" set ltsc24=LTSC2024 :: LTSC 2024 build is not fixed yet if not "%ltsc19%%ltsc21%%ltsc24%"=="" set ltscfound=1 From 06695612a8491ac7ccd324b3f01fa0a6523ecdb6 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 26 Sep 2024 20:56:02 +0530 Subject: [PATCH 005/132] Merge the changes in AIO --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 7aa0e43..03d218c 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -9934,10 +9934,12 @@ for %%# in ( for /f "tokens=1-2 delims=_" %%A in ("%%~#") do ( set supported= if %winbuild% LSS 10240 (echo %%B | findstr /i "LTSC DevMain" %nul% || set supported=1) else (set supported=1) -if %winbuild% GEQ 10240 (if defined ltsc19 echo %%B | findstr /i "LTSC\>" %nul% || set supported=) -if %winbuild% GEQ 10240 (if defined ltsc21 echo %%B | findstr /i "LTSC2021\>" %nul% || set supported=) -if %winbuild% GEQ 10240 (if defined ltsc24 echo %%B | findstr /i "LTSC2024\>" %nul% || set supported=) -if %winbuild% GEQ 10240 (if not defined ltscfound echo %%B | findstr /i "LTSC" %nul% && set supported=) +if %winbuild% GEQ 10240 ( +if defined ltsc19 echo %%A | findstr /i "2019 VL" %nul% || set supported= +if defined ltsc21 echo %%A | findstr /i "2021 VL" %nul% || set supported= +if defined ltsc24 echo %%A | findstr /i "2024 VL" %nul% || set supported= +if not defined ltscfound echo %%B | findstr /i "LTSC" %nul% && set supported= +) if defined supported ( set /a counter+=1 if !counter! LSS 10 ( @@ -10107,13 +10109,15 @@ if exist "%_cfolder%\OfficeC2RClient.exe" ( set "_c2rCexe=%_cfolder%\OfficeC2RClient.exe" ) -echo %_AudienceData% | findstr /i "LTSC\>" %nul% && set ltsc19=LTSC +set "audidata4=%_AudienceData:~-4%" + +if /i "%audidata4%"=="LTSC" set ltsc19=LTSC echo %_clversion% %_version% | findstr "16.0.103 16.0.104 16.0.105" %nul% && set ltsc19=LTSC -echo %_AudienceData% | findstr /i "LTSC2021\>" %nul% && set ltsc21=LTSC2021 +if /i "%audidata4%"=="2021" set ltsc21=LTSC2021 echo %_clversion% %_version% | findstr "16.0.14332" %nul% && set ltsc21=LTSC2021 -echo %_AudienceData% | findstr /i "LTSC2024\>" %nul% && set ltsc24=LTSC2024 +if /i "%audidata4%"=="2024" set ltsc24=LTSC2024 :: LTSC 2024 build is not fixed yet if not "%ltsc19%%ltsc21%%ltsc24%"=="" set ltscfound=1 From a1244dcb3b14070c690aed8de3a2fd807466b077 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 26 Sep 2024 21:03:34 +0530 Subject: [PATCH 006/132] Use Official GVLK for Office 2024 ProPlus, ProjectPro and VisioPro --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 6 +++--- .../Activators/Online_KMS_Activation.cmd | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 03d218c..773c101 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -6344,12 +6344,12 @@ aaea0dc8-78e1-4343-9f25-b69b83dd1bce_D9GTG-NP7DV-T6JP3-B6B62-JB%f%89R__16_Projec cbbba2c3-0ff5-4558-846a-043ef9d78559_F4DYN-89BP2-WQTWJ-GR8YC-CK%f%GJG__16_Excel2024Volume_-Excel2024Retail- bef3152a-8a04-40f2-a065-340c3f23516d_D2F8D-N3Q3B-J28PV-X27HD-RJ%f%WB9__16_Outlook2024Volume_-Outlook2024Retail- b63626a4-5f05-4ced-9639-31ba730a127e_CW94N-K6GJH-9CTXY-MG2VC-FY%f%CWP__16_PowerPoint2024Volume_-PowerPoint2024Retail- -f510af75-8ab7-4426-a236-1bfb95c34ff8_NBBBB-BBBBB-BBBBB-BBBH4-GX%f%3R4__16_ProjectPro2024Volume_-ProjectPro2024Retail- +f510af75-8ab7-4426-a236-1bfb95c34ff8_FQQ23-N4YCY-73HQ3-FM9WC-76%f%HF4__16_ProjectPro2024Volume_-ProjectPro2024Retail- 9f144f27-2ac5-40b9-899d-898c2b8b4f81_PD3TT-NTHQQ-VC7CY-MFXK3-G8%f%7F8__16_ProjectStd2024Volume_-ProjectStd2024Retail- -8d368fc1-9470-4be2-8d66-90e836cbb051_NBBBB-BBBBB-BBBBB-BBBJD-VX%f%RPM__16_ProPlus2024Volume_-ProPlus2024Retail- +8d368fc1-9470-4be2-8d66-90e836cbb051_XJ2XN-FW8RK-P4HMP-DKDBV-GC%f%VGB__16_ProPlus2024Volume_-ProPlus2024Retail- 0002290a-2091-4324-9e53-3cfe28884cde_4NKHF-9HBQF-Q3B6C-7YV34-F6%f%4P3__16_SkypeforBusiness2024Volume bbac904f-6a7e-418a-bb4b-24c85da06187_V28N4-JG22K-W66P8-VTMGK-H6%f%HGR__16_Standard2024Volume_-Home2024Retail-HomeBusiness2024Retail- -fa187091-8246-47b1-964f-80a0b1e5d69a_NBBBB-BBBBB-BBBBB-BBBCW-6M%f%X6T__16_VisioPro2024Volume_-VisioPro2024Retail- +fa187091-8246-47b1-964f-80a0b1e5d69a_B7TN8-FJ8V3-7QYCP-HQPMV-YY%f%89G__16_VisioPro2024Volume_-VisioPro2024Retail- 923fa470-aa71-4b8b-b35c-36b79bf9f44b_JMMVY-XFNQC-KK4HK-9H7R3-WQ%f%QTV__16_VisioStd2024Volume_-VisioStd2024Retail- d0eded01-0881-4b37-9738-190400095098_MQ84N-7VYDM-FXV7C-6K7CC-VF%f%W9J__16_Word2024Volume_-Word2024Retail- ) do ( diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 78f9a11..d2d663b 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3489,12 +3489,12 @@ aaea0dc8-78e1-4343-9f25-b69b83dd1bce_D9GTG-NP7DV-T6JP3-B6B62-JB%f%89R__16_Projec cbbba2c3-0ff5-4558-846a-043ef9d78559_F4DYN-89BP2-WQTWJ-GR8YC-CK%f%GJG__16_Excel2024Volume_-Excel2024Retail- bef3152a-8a04-40f2-a065-340c3f23516d_D2F8D-N3Q3B-J28PV-X27HD-RJ%f%WB9__16_Outlook2024Volume_-Outlook2024Retail- b63626a4-5f05-4ced-9639-31ba730a127e_CW94N-K6GJH-9CTXY-MG2VC-FY%f%CWP__16_PowerPoint2024Volume_-PowerPoint2024Retail- -f510af75-8ab7-4426-a236-1bfb95c34ff8_NBBBB-BBBBB-BBBBB-BBBH4-GX%f%3R4__16_ProjectPro2024Volume_-ProjectPro2024Retail- +f510af75-8ab7-4426-a236-1bfb95c34ff8_FQQ23-N4YCY-73HQ3-FM9WC-76%f%HF4__16_ProjectPro2024Volume_-ProjectPro2024Retail- 9f144f27-2ac5-40b9-899d-898c2b8b4f81_PD3TT-NTHQQ-VC7CY-MFXK3-G8%f%7F8__16_ProjectStd2024Volume_-ProjectStd2024Retail- -8d368fc1-9470-4be2-8d66-90e836cbb051_NBBBB-BBBBB-BBBBB-BBBJD-VX%f%RPM__16_ProPlus2024Volume_-ProPlus2024Retail- +8d368fc1-9470-4be2-8d66-90e836cbb051_XJ2XN-FW8RK-P4HMP-DKDBV-GC%f%VGB__16_ProPlus2024Volume_-ProPlus2024Retail- 0002290a-2091-4324-9e53-3cfe28884cde_4NKHF-9HBQF-Q3B6C-7YV34-F6%f%4P3__16_SkypeforBusiness2024Volume bbac904f-6a7e-418a-bb4b-24c85da06187_V28N4-JG22K-W66P8-VTMGK-H6%f%HGR__16_Standard2024Volume_-Home2024Retail-HomeBusiness2024Retail- -fa187091-8246-47b1-964f-80a0b1e5d69a_NBBBB-BBBBB-BBBBB-BBBCW-6M%f%X6T__16_VisioPro2024Volume_-VisioPro2024Retail- +fa187091-8246-47b1-964f-80a0b1e5d69a_B7TN8-FJ8V3-7QYCP-HQPMV-YY%f%89G__16_VisioPro2024Volume_-VisioPro2024Retail- 923fa470-aa71-4b8b-b35c-36b79bf9f44b_JMMVY-XFNQC-KK4HK-9H7R3-WQ%f%QTV__16_VisioStd2024Volume_-VisioStd2024Retail- d0eded01-0881-4b37-9738-190400095098_MQ84N-7VYDM-FXV7C-6K7CC-VF%f%W9J__16_Word2024Volume_-Word2024Retail- ) do ( From 2e6bfa94c2285c4b613075f2673d818df2cb9137 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 27 Sep 2024 07:25:54 +0530 Subject: [PATCH 007/132] Fix blank SvcRestartTask status issue --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 1 + MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 1 + MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 1 + MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 1 + MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 1 + 5 files changed, 5 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 773c101..27267ea 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1687,6 +1687,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +if "!taskinfo!"=="" set "taskinfo=Not Found" call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 3cb7bc6..b5cdb88 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1450,6 +1450,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +if "!taskinfo!"=="" set "taskinfo=Not Found" call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 962a146..1ee3486 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1604,6 +1604,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +if "!taskinfo!"=="" set "taskinfo=Not Found" call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index b66bc40..846621f 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1910,6 +1910,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +if "!taskinfo!"=="" set "taskinfo=Not Found" call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index d2d663b..e7ced99 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2959,6 +2959,7 @@ for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' - echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +if "!taskinfo!"=="" set "taskinfo=Not Found" call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" ) ) From b8504cc21ec9ed5f2de31d9d43e905e20116eab6 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 27 Sep 2024 07:44:11 +0530 Subject: [PATCH 008/132] Improve ImageState detection --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 4 ++-- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- .../Activators/Online_KMS_Activation.cmd | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 27267ea..3b0ba77 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1458,9 +1458,9 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -set error=1 -call :dk_color %Red% "Checking Windows Setup State [%imagestate%]" +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index b5cdb88..add437b 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1221,9 +1221,9 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -set error=1 -call :dk_color %Red% "Checking Windows Setup State [%imagestate%]" +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 1ee3486..07b1ea5 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1375,9 +1375,9 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -set error=1 -call :dk_color %Red% "Checking Windows Setup State [%imagestate%]" +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 846621f..306266b 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1681,9 +1681,9 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -set error=1 -call :dk_color %Red% "Checking Windows Setup State [%imagestate%]" +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index e7ced99..d9526c2 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2730,9 +2730,9 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -set error=1 -call :dk_color %Red% "Checking Windows Setup State [%imagestate%]" +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) From db218720f33f2418a84bfe73ce937ab43f39e9ca Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 27 Sep 2024 08:04:25 +0530 Subject: [PATCH 009/132] Change "Troubleshoot Page" to "Support Webpage" --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- .../Activators/Ohook_Activation_AIO.cmd | 2 +- .../Activators/Online_KMS_Activation.cmd | 2 +- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 4 ++-- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 3b0ba77..20c13f7 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1830,7 +1830,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color2 %Blue% "Press [1] to Open Troubleshoot Page " %Gray% " Press [0] to Ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) @@ -10027,7 +10027,7 @@ call :oe_tempcleanup echo: if defined fixes ( -call :dk_color2 %Blue% "Press [1] To Open Troubleshoot Page " %Gray% " Press [0] To Ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index add437b..08e1c56 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1593,7 +1593,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color2 %Blue% "Press [1] to Open Troubleshoot Page " %Gray% " Press [0] to Ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 07b1ea5..3a84930 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1747,7 +1747,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color2 %Blue% "Press [1] to Open Troubleshoot Page " %Gray% " Press [0] to Ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 306266b..d912038 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2053,7 +2053,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color2 %Blue% "Press [1] to Open Troubleshoot Page " %Gray% " Press [0] to Ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index d9526c2..83608b6 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3102,7 +3102,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color2 %Blue% "Press [1] to Open Troubleshoot Page " %Gray% " Press [0] to Ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 4b1f515..cfa4230 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -976,7 +976,7 @@ call :oe_tempcleanup echo: if defined fixes ( -call :dk_color2 %Blue% "Press [1] To Open Troubleshoot Page " %Gray% " Press [0] To Ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) @@ -1324,7 +1324,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color2 %Blue% "Press [1] To Open Troubleshoot Page " %Gray% " Press [0] To Ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index f32d110..09aae5e 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -987,7 +987,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color2 %Blue% "Press [1] to Open Troubleshoot Page " %Gray% " Press [0] to Ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 53f68cd..3664d64 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -701,7 +701,7 @@ echo ______________________________________________________________ echo: if defined fixes ( -call :dk_color2 %Blue% "Press [1] to Open Troubleshoot Page " %Gray% " Press [0] to Ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 46021c3..763a4bc 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1381,7 +1381,7 @@ $key.SetAccessControl($acl) echo: if defined fixes ( -call :dk_color2 %Blue% "Press [1] to open Troubleshoot page " %Gray% " Press [0] to ignore" +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) From 104d0b0ddace001e3c3b364027cc7f144847254d Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 28 Sep 2024 06:53:48 +0530 Subject: [PATCH 010/132] Add Azure DevOps repo and remove Bitbucket and Codeberg repos links --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 374fa4e..89d3302 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ irm https://massgrave.dev/get | iex ### Method 2 - Traditional (Windows 7 and later) -1. Download the file under the code button from [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts) or [Bitbucket](https://bitbucket.org/WindowsAddict/microsoft-activation-scripts) or [Codeberg](https://codeberg.org/massgravel/Microsoft-Activation-Scripts) +1. Download the file under the code button from [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts) / [Azure DevOps](https://dev.azure.com/massgrave/_git/Microsoft-Activation-Scripts) 2. Right-click on the downloaded zip file and extract 3. In the extracted folder, find the folder named `All-In-One-Version` 4. Run the file named `MAS_AIO.cmd` From 07ad5a208dbe0f4cb570c22a11b27d864c7905c6 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 29 Sep 2024 03:51:04 +0530 Subject: [PATCH 011/132] Add self-hosted Git repo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 89d3302..38744e5 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ irm https://massgrave.dev/get | iex ### Method 2 - Traditional (Windows 7 and later) -1. Download the file under the code button from [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts) / [Azure DevOps](https://dev.azure.com/massgrave/_git/Microsoft-Activation-Scripts) +1. Download the file under the code button from [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts) / [Azure DevOps](https://dev.azure.com/massgrave/_git/Microsoft-Activation-Scripts) / [Self-hosted Git](https://git.activated.win/massgrave/Microsoft-Activation-Scripts) 2. Right-click on the downloaded zip file and extract 3. In the extracted folder, find the folder named `All-In-One-Version` 4. Run the file named `MAS_AIO.cmd` From 643d4f077fd2d46e9595aa1f845dfd051e51cddb Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 30 Sep 2024 03:59:35 +0530 Subject: [PATCH 012/132] Change clipsvc service failure info to gray color --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 20c13f7..3373339 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -781,7 +781,7 @@ set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" %_xmlexist% ( set error=1 if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -call :dk_color %Red% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" +call :dk_color %Gray% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" ) ) @@ -3925,7 +3925,7 @@ call :dk_color %Gray% "Stopping sppsvc Service [Failed]" %_xmlexist% ( set error=1 if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -call :dk_color %Red% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" +call :dk_color %Gray% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 08e1c56..70a1b0b 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -544,7 +544,7 @@ set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" %_xmlexist% ( set error=1 if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -call :dk_color %Red% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" +call :dk_color %Gray% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 3a84930..690db75 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -667,7 +667,7 @@ call :dk_color %Gray% "Stopping sppsvc Service [Failed]" %_xmlexist% ( set error=1 if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% -call :dk_color %Red% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" +call :dk_color %Gray% "Installing GenuineTicket.xml [Failed with ClipSVC service restart, wait...]" ) ) From d384c5f2f79f12f8d4aa18797452e8839cb99cf3 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 30 Sep 2024 05:27:33 +0530 Subject: [PATCH 013/132] Improve useraccounts SID check and don't show errors because it's not very important --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 70 +++++++++---------- .../Activators/Ohook_Activation_AIO.cmd | 70 +++++++++---------- .../Activators/Online_KMS_Activation.cmd | 70 +++++++++---------- 3 files changed, 96 insertions(+), 114 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 3373339..cc74e84 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2808,42 +2808,29 @@ set _sortIds=!_sortIds:PreInstallR_=Retail_! :: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state set _sidlist= -set failedload= +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like '*\Users\*' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_.PSChildName -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) -for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($_.PSChildName -match '^S-([^-\n]*-){5,}[^-\n]*$' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) - -:: Fallback method if not defined _sidlist ( -set failedload=1 for /f "delims=" %%a in ('%psc% "$explorerProc = Get-Process -Name explorer | Where-Object {$_.SessionId -eq (Get-Process -Id $pid).SessionId} | Select-Object -First 1; $sid = (gwmi -Query ('Select * From Win32_Process Where ProcessID=' + $explorerProc.Id)).GetOwnerSid().Sid; $sid" %nul6%') do (set _sidlist=%%a) ) -if not defined _sidlist ( -set error=1 -call :dk_color %Red% "Checking User Accounts SID [Not Found]" -exit /b -) - -set /a counter=0 -for %%# in (%_sidlist%) do set /a counter+=1 - -if %counter% GTR 10 ( -call :dk_color %Gray% "Checking Total User Accounts [%counter%]" -) - ::========================== :: Load the unloaded useraccounts registry set loadedsids= +set alrloadedsids= + for %%# in (%_sidlist%) do ( -reg query HKU\%%#\Software %nul% || ( +reg query HKU\%%#\Software %nul% && ( +call set "alrloadedsids=%%alrloadedsids%% %%#" +) || ( for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( reg load HKU\%%# "%%b\NTUSER.DAT" %nul% reg query HKU\%%#\Software %nul% && ( call set "loadedsids=%%loadedsids%% %%#" ) || ( -set failedload=1 +reg unload HKU\%%# %nul% ) ) ) @@ -2851,6 +2838,23 @@ set failedload=1 ::========================== +set "_sidlist=%loadedsids% %alrloadedsids%" + +set /a counter=0 +for %%# in (%_sidlist%) do set /a counter+=1 + +if %counter% EQU 0 ( +set error=1 +call :dk_color %Red% "Checking User Accounts SID [Not Found]" +exit /b +) + +if %counter% GTR 10 ( +call :dk_color %Gray% "Checking Total User Accounts [%counter%]" +) + +::========================== + :: Clear the vNext/shared/device license blocks which may prevent ohook activation rmdir /s /q "%ProgramData%\Microsoft\Office\Licenses\" %nul% @@ -2905,24 +2909,23 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou :: Some retail products attempt to validate the license and may show a banner "There was a problem checking this device's license status." :: Resiliency registry entry can skip this check -set faileddef= +set defname=DEFTEMP-%random% for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b" if defined o16c2r if defined officeact ( if exist "%defdat%\NTUSER.DAT" ( -reg load HKU\DEF_TEMP "%defdat%\NTUSER.DAT" %nul% -reg query HKU\DEF_TEMP %nul% || set faileddef=1 -reg add HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% -reg unload HKU\DEF_TEMP %nul% -reg query HKU\DEF_TEMP %nul% && set faileddef=1 -) else ( -set faileddef=1 +reg load HKU\%defname% "%defdat%\NTUSER.DAT" %nul% +reg query HKU\%defname%\Software %nul% && ( +reg add HKU\%defname%\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% ) +reg unload HKU\%defname% %nul% +) + for %%# in (%_sidlist%) do ( reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul% reg add HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% ) -echo Adding Reg Keys to Skip License Check [Successfully added to all %counter% ^& future new user accounts] +echo Adding Registry to Skip License Check [Successfully added to all %counter% ^& future new user accounts] ) ::========================== @@ -2931,15 +2934,6 @@ echo Adding Reg Keys to Skip License Check [Successfully added to all %counter for %%# in (%loadedsids%) do ( reg unload HKU\%%# %nul% -reg query HKU\%%# %nul% && set failedload=1 -) - -if defined failedload ( -call :dk_color %Gray% "Loading Unloading Registries [Failed for some user accounts]" -) - -if defined faileddef ( -call :dk_color %Gray% "Loading Unloading Registries [Failed for Default\NTUSER.DAT]" ) exit /b diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index d912038..37a4de5 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1106,42 +1106,29 @@ set _sortIds=!_sortIds:PreInstallR_=Retail_! :: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state set _sidlist= -set failedload= +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like '*\Users\*' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_.PSChildName -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) -for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($_.PSChildName -match '^S-([^-\n]*-){5,}[^-\n]*$' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) - -:: Fallback method if not defined _sidlist ( -set failedload=1 for /f "delims=" %%a in ('%psc% "$explorerProc = Get-Process -Name explorer | Where-Object {$_.SessionId -eq (Get-Process -Id $pid).SessionId} | Select-Object -First 1; $sid = (gwmi -Query ('Select * From Win32_Process Where ProcessID=' + $explorerProc.Id)).GetOwnerSid().Sid; $sid" %nul6%') do (set _sidlist=%%a) ) -if not defined _sidlist ( -set error=1 -call :dk_color %Red% "Checking User Accounts SID [Not Found]" -exit /b -) - -set /a counter=0 -for %%# in (%_sidlist%) do set /a counter+=1 - -if %counter% GTR 10 ( -call :dk_color %Gray% "Checking Total User Accounts [%counter%]" -) - ::========================== :: Load the unloaded useraccounts registry set loadedsids= +set alrloadedsids= + for %%# in (%_sidlist%) do ( -reg query HKU\%%#\Software %nul% || ( +reg query HKU\%%#\Software %nul% && ( +call set "alrloadedsids=%%alrloadedsids%% %%#" +) || ( for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( reg load HKU\%%# "%%b\NTUSER.DAT" %nul% reg query HKU\%%#\Software %nul% && ( call set "loadedsids=%%loadedsids%% %%#" ) || ( -set failedload=1 +reg unload HKU\%%# %nul% ) ) ) @@ -1149,6 +1136,23 @@ set failedload=1 ::========================== +set "_sidlist=%loadedsids% %alrloadedsids%" + +set /a counter=0 +for %%# in (%_sidlist%) do set /a counter+=1 + +if %counter% EQU 0 ( +set error=1 +call :dk_color %Red% "Checking User Accounts SID [Not Found]" +exit /b +) + +if %counter% GTR 10 ( +call :dk_color %Gray% "Checking Total User Accounts [%counter%]" +) + +::========================== + :: Clear the vNext/shared/device license blocks which may prevent ohook activation rmdir /s /q "%ProgramData%\Microsoft\Office\Licenses\" %nul% @@ -1203,24 +1207,23 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou :: Some retail products attempt to validate the license and may show a banner "There was a problem checking this device's license status." :: Resiliency registry entry can skip this check -set faileddef= +set defname=DEFTEMP-%random% for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b" if defined o16c2r if defined officeact ( if exist "%defdat%\NTUSER.DAT" ( -reg load HKU\DEF_TEMP "%defdat%\NTUSER.DAT" %nul% -reg query HKU\DEF_TEMP %nul% || set faileddef=1 -reg add HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% -reg unload HKU\DEF_TEMP %nul% -reg query HKU\DEF_TEMP %nul% && set faileddef=1 -) else ( -set faileddef=1 +reg load HKU\%defname% "%defdat%\NTUSER.DAT" %nul% +reg query HKU\%defname%\Software %nul% && ( +reg add HKU\%defname%\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% ) +reg unload HKU\%defname% %nul% +) + for %%# in (%_sidlist%) do ( reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul% reg add HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% ) -echo Adding Reg Keys to Skip License Check [Successfully added to all %counter% ^& future new user accounts] +echo Adding Registry to Skip License Check [Successfully added to all %counter% ^& future new user accounts] ) ::========================== @@ -1229,15 +1232,6 @@ echo Adding Reg Keys to Skip License Check [Successfully added to all %counter for %%# in (%loadedsids%) do ( reg unload HKU\%%# %nul% -reg query HKU\%%# %nul% && set failedload=1 -) - -if defined failedload ( -call :dk_color %Gray% "Loading Unloading Registries [Failed for some user accounts]" -) - -if defined faileddef ( -call :dk_color %Gray% "Loading Unloading Registries [Failed for Default\NTUSER.DAT]" ) exit /b diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 83608b6..41708c5 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1207,42 +1207,29 @@ exit /b :: https://learn.microsoft.com/office/troubleshoot/activation/reset-office-365-proplus-activation-state set _sidlist= -set failedload= +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like '*\Users\*' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_.PSChildName -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) -for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($_.PSChildName -match '^S-([^-\n]*-){5,}[^-\n]*$' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_ -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) - -:: Fallback method if not defined _sidlist ( -set failedload=1 for /f "delims=" %%a in ('%psc% "$explorerProc = Get-Process -Name explorer | Where-Object {$_.SessionId -eq (Get-Process -Id $pid).SessionId} | Select-Object -First 1; $sid = (gwmi -Query ('Select * From Win32_Process Where ProcessID=' + $explorerProc.Id)).GetOwnerSid().Sid; $sid" %nul6%') do (set _sidlist=%%a) ) -if not defined _sidlist ( -set error=1 -call :dk_color %Red% "Checking User Accounts SID [Not Found]" -exit /b -) - -set /a counter=0 -for %%# in (%_sidlist%) do set /a counter+=1 - -if %counter% GTR 10 ( -call :dk_color %Gray% "Checking Total User Accounts [%counter%]" -) - ::========================== :: Load the unloaded useraccounts registry set loadedsids= +set alrloadedsids= + for %%# in (%_sidlist%) do ( -reg query HKU\%%#\Software %nul% || ( +reg query HKU\%%#\Software %nul% && ( +call set "alrloadedsids=%%alrloadedsids%% %%#" +) || ( for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( reg load HKU\%%# "%%b\NTUSER.DAT" %nul% reg query HKU\%%#\Software %nul% && ( call set "loadedsids=%%loadedsids%% %%#" ) || ( -set failedload=1 +reg unload HKU\%%# %nul% ) ) ) @@ -1250,6 +1237,23 @@ set failedload=1 ::========================== +set "_sidlist=%loadedsids% %alrloadedsids%" + +set /a counter=0 +for %%# in (%_sidlist%) do set /a counter+=1 + +if %counter% EQU 0 ( +set error=1 +call :dk_color %Red% "Checking User Accounts SID [Not Found]" +exit /b +) + +if %counter% GTR 10 ( +call :dk_color %Gray% "Checking Total User Accounts [%counter%]" +) + +::========================== + :: Clear the vNext/shared/device license blocks which may prevent ohook activation rmdir /s /q "%ProgramData%\Microsoft\Office\Licenses\" %nul% @@ -1304,24 +1308,23 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou :: Some retail products attempt to validate the license and may show a banner "There was a problem checking this device's license status." :: Resiliency registry entry can skip this check -set faileddef= +set defname=DEFTEMP-%random% for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b" if defined o16c2r if defined officeact ( if exist "%defdat%\NTUSER.DAT" ( -reg load HKU\DEF_TEMP "%defdat%\NTUSER.DAT" %nul% -reg query HKU\DEF_TEMP %nul% || set faileddef=1 -reg add HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% -reg unload HKU\DEF_TEMP %nul% -reg query HKU\DEF_TEMP %nul% && set faileddef=1 -) else ( -set faileddef=1 +reg load HKU\%defname% "%defdat%\NTUSER.DAT" %nul% +reg query HKU\%defname%\Software %nul% && ( +reg add HKU\%defname%\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% ) +reg unload HKU\%defname% %nul% +) + for %%# in (%_sidlist%) do ( reg delete HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f %nul% reg add HKU\%%#\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /v "TimeOfLastHeartbeatFailure" /t REG_SZ /d "2040-01-01T00:00:00Z" /f %nul% ) -echo Adding Reg Keys to Skip License Check [Successfully added to all %counter% ^& future new user accounts] +echo Adding Registry to Skip License Check [Successfully added to all %counter% ^& future new user accounts] ) ::========================== @@ -1330,15 +1333,6 @@ echo Adding Reg Keys to Skip License Check [Successfully added to all %counter for %%# in (%loadedsids%) do ( reg unload HKU\%%# %nul% -reg query HKU\%%# %nul% && set failedload=1 -) - -if defined failedload ( -call :dk_color %Gray% "Loading Unloading Registries [Failed for some user accounts]" -) - -if defined faileddef ( -call :dk_color %Gray% "Loading Unloading Registries [Failed for Default\NTUSER.DAT]" ) exit /b From d929cd8fa02c49fb1cd6cd8e48c98a9d1f2c91b1 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 22 Oct 2024 02:56:17 +0530 Subject: [PATCH 014/132] Add a separate option for add/remove apps --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 100 +++++++++++++++--- .../Change_Office_Edition.cmd | 100 +++++++++++++++--- 2 files changed, 172 insertions(+), 28 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index cc74e84..e6457f8 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -9466,20 +9466,23 @@ echo: echo: echo ____________________________________________________________ echo: -echo [1] Change - Office Edition -echo [2] Add - Office Edition -echo [3] Remove - Office Edition +echo [1] Change all editions +echo [2] Add edition +echo [3] Remove edition +echo: +echo [4] Add/Remove apps echo ____________________________________________ echo: -echo [4] Change Office Update Channel +echo [5] Change Office Update Channel echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,0]" -choice /C:12340 /N +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,5,0]" +choice /C:123450 /N set _el=!errorlevel! -if !_el!==5 exit /b -if !_el!==4 goto :oe_changeupdchnl +if !_el!==6 exit /b +if !_el!==5 goto :oe_changeupdchnl +if !_el!==4 goto :oe_editedition if !_el!==3 goto :oe_removeedition if !_el!==2 set change=0& goto :oe_edition if !_el!==1 set change=1& goto :oe_edition @@ -9497,7 +9500,12 @@ goto :oe_goback cls if not defined terminal mode 76, 25 -title Change Office Edition %masver% +if %change%==1 ( +title Change all editions %masver% +) else ( +title Add edition %masver% +) + echo: echo: echo: @@ -9589,6 +9597,8 @@ if %verified%==0 goto :oe_editionchange :: Set app exclusions +:oe_excludeappspre + cls set suites= echo %list% | find /i "Suites" %nul1% && ( @@ -9660,7 +9670,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard:" choice /C:AENOPJRVWLDT10 /N set _el=!errorlevel! -if !_el!==14 goto :oe_editionchangepre +if !_el!==14 goto :oemenu if !_el!==13 call :excludelist & goto :oe_editionchangefinal if !_el!==12 if defined Teams_st (if "%Teams_st%"=="Off" (set Teams_st=ON) else (set Teams_st=Off)) if !_el!==11 if defined OneDrive_st (if "%OneDrive_st%"=="Off" (set OneDrive_st=ON) else (set OneDrive_st=Off)) @@ -9789,10 +9799,71 @@ goto :oe_goback ::======================================================================================================================================== +:: Edit Office edition + +:oe_editedition + +cls +title Add/Remove Apps %masver% + +call :oe_chkinternet +if not defined _int ( +goto :oe_goback +) + +set change=0 +call :ch_getinfo +cls + +if not defined terminal ( +mode 98, 35 +) + +set inpt= +set counter=0 +set verified=0 +set targetedition= + +%line% +echo: +call :dk_color %Gray% "You can edit [add/remove apps] one of the following Office editions." +%line% +echo: + +for %%A in (%_oIds%) do ( +set /a counter+=1 +echo [!counter!] %%A +set targetedition!counter!=%%A +) + +%line% +echo: +echo [0] Go Back +echo: +call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:" +set /p inpt= +if "%inpt%"=="" goto :oe_editedition +if "%inpt%"=="0" goto :oemenu +for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1) +set targetedition=!targetedition%inpt%! +if %verified%==0 goto :oe_editedition + +::=============== + +cls +if not defined terminal mode 98, 32 + +echo %targetedition% | findstr /i "Access Excel OneNote Outlook PowerPoint Project Publisher Skype Visio Word" %nul% && (set list=SingleApps) || (set list=Suites) +goto :oe_excludeappspre + +::======================================================================================================================================== + :: Remove Office editions :oe_removeedition +title Remove Office editions %masver% + call :ch_getinfo cls @@ -9874,6 +9945,7 @@ goto :oe_goback :oe_changeupdchnl +title Change Office update channel %masver% call :ch_getinfo cls @@ -9930,10 +10002,10 @@ for /f "tokens=1-2 delims=_" %%A in ("%%~#") do ( set supported= if %winbuild% LSS 10240 (echo %%B | findstr /i "LTSC DevMain" %nul% || set supported=1) else (set supported=1) if %winbuild% GEQ 10240 ( -if defined ltsc19 echo %%A | findstr /i "2019 VL" %nul% || set supported= -if defined ltsc21 echo %%A | findstr /i "2021 VL" %nul% || set supported= -if defined ltsc24 echo %%A | findstr /i "2024 VL" %nul% || set supported= -if not defined ltscfound echo %%B | findstr /i "LTSC" %nul% && set supported= +if defined ltsc19 echo %%B | find /i "2019 VL" %nul% || set supported= +if defined ltsc21 echo %%B | find /i "2021 VL" %nul% || set supported= +if defined ltsc24 echo %%B | find /i "2024 VL" %nul% || set supported= +if not defined ltscfound echo %%B | find /i "LTSC" %nul% && set supported= ) if defined supported ( set /a counter+=1 diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index cfa4230..a445522 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -421,20 +421,23 @@ echo: echo: echo ____________________________________________________________ echo: -echo [1] Change - Office Edition -echo [2] Add - Office Edition -echo [3] Remove - Office Edition +echo [1] Change all editions +echo [2] Add edition +echo [3] Remove edition +echo: +echo [4] Add/Remove apps echo ____________________________________________ echo: -echo [4] Change Office Update Channel +echo [5] Change Office Update Channel echo [0] %_exitmsg% echo ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,0]" -choice /C:12340 /N +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,5,0]" +choice /C:123450 /N set _el=!errorlevel! -if !_el!==5 exit /b -if !_el!==4 goto :oe_changeupdchnl +if !_el!==6 exit /b +if !_el!==5 goto :oe_changeupdchnl +if !_el!==4 goto :oe_editedition if !_el!==3 goto :oe_removeedition if !_el!==2 set change=0& goto :oe_edition if !_el!==1 set change=1& goto :oe_edition @@ -452,7 +455,12 @@ goto :oe_goback cls if not defined terminal mode 76, 25 -title Change Office Edition %masver% +if %change%==1 ( +title Change all editions %masver% +) else ( +title Add edition %masver% +) + echo: echo: echo: @@ -544,6 +552,8 @@ if %verified%==0 goto :oe_editionchange :: Set app exclusions +:oe_excludeappspre + cls set suites= echo %list% | find /i "Suites" %nul1% && ( @@ -615,7 +625,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard:" choice /C:AENOPJRVWLDT10 /N set _el=!errorlevel! -if !_el!==14 goto :oe_editionchangepre +if !_el!==14 goto :oemenu if !_el!==13 call :excludelist & goto :oe_editionchangefinal if !_el!==12 if defined Teams_st (if "%Teams_st%"=="Off" (set Teams_st=ON) else (set Teams_st=Off)) if !_el!==11 if defined OneDrive_st (if "%OneDrive_st%"=="Off" (set OneDrive_st=ON) else (set OneDrive_st=Off)) @@ -744,10 +754,71 @@ goto :oe_goback ::======================================================================================================================================== +:: Edit Office edition + +:oe_editedition + +cls +title Add/Remove Apps %masver% + +call :oe_chkinternet +if not defined _int ( +goto :oe_goback +) + +set change=0 +call :ch_getinfo +cls + +if not defined terminal ( +mode 98, 35 +) + +set inpt= +set counter=0 +set verified=0 +set targetedition= + +%line% +echo: +call :dk_color %Gray% "You can edit [add/remove apps] one of the following Office editions." +%line% +echo: + +for %%A in (%_oIds%) do ( +set /a counter+=1 +echo [!counter!] %%A +set targetedition!counter!=%%A +) + +%line% +echo: +echo [0] Go Back +echo: +call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:" +set /p inpt= +if "%inpt%"=="" goto :oe_editedition +if "%inpt%"=="0" goto :oemenu +for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1) +set targetedition=!targetedition%inpt%! +if %verified%==0 goto :oe_editedition + +::=============== + +cls +if not defined terminal mode 98, 32 + +echo %targetedition% | findstr /i "Access Excel OneNote Outlook PowerPoint Project Publisher Skype Visio Word" %nul% && (set list=SingleApps) || (set list=Suites) +goto :oe_excludeappspre + +::======================================================================================================================================== + :: Remove Office editions :oe_removeedition +title Remove Office editions %masver% + call :ch_getinfo cls @@ -829,6 +900,7 @@ goto :oe_goback :oe_changeupdchnl +title Change Office update channel %masver% call :ch_getinfo cls @@ -885,10 +957,10 @@ for /f "tokens=1-2 delims=_" %%A in ("%%~#") do ( set supported= if %winbuild% LSS 10240 (echo %%B | findstr /i "LTSC DevMain" %nul% || set supported=1) else (set supported=1) if %winbuild% GEQ 10240 ( -if defined ltsc19 echo %%A | findstr /i "2019 VL" %nul% || set supported= -if defined ltsc21 echo %%A | findstr /i "2021 VL" %nul% || set supported= -if defined ltsc24 echo %%A | findstr /i "2024 VL" %nul% || set supported= -if not defined ltscfound echo %%B | findstr /i "LTSC" %nul% && set supported= +if defined ltsc19 echo %%B | find /i "2019 VL" %nul% || set supported= +if defined ltsc21 echo %%B | find /i "2021 VL" %nul% || set supported= +if defined ltsc24 echo %%B | find /i "2024 VL" %nul% || set supported= +if not defined ltscfound echo %%B | find /i "LTSC" %nul% && set supported= ) if defined supported ( set /a counter+=1 From 4e8ebecd3dbed5b0149cbe5df630b6b63812a81e Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 22 Oct 2024 02:59:36 +0530 Subject: [PATCH 015/132] Fix a bug where excluded apps name needs to be in lowercase --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 26 +++++++++---------- .../Change_Office_Edition.cmd | 26 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index e6457f8..413f543 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -9690,18 +9690,18 @@ goto :oe_excludeapps set excludelist= for %%# in ( -Access -Excel -OneNote -Outlook -PowerPoint -Project -Publisher -Visio -Word -Lync -OneDrive -Teams +access +excel +onenote +outlook +powerpoint +project +publisher +visio +word +lync +onedrive +teams ) do ( if /i "!%%#_st!"=="Off" if defined excludelist (set excludelist=!excludelist!,%%#) else (set excludelist=,%%#) ) @@ -9772,7 +9772,7 @@ goto :oe_goback :: OfficeClickToRun.exe with productstoadd method is used here to add editions :: It uses delta updates, meaning that since it's using same installed build, it will consume very less Internet -set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%targetedition%.16_%_lang%_x-none cdnbaseurl.16=http://officecdn.microsoft.com/pr/%_updch% baseurl.16=http://officecdn.microsoft.com/pr/%_updch% version.16=%_version% mediatype.16=CDN sourcetype.16=CDN deliverymechanism=%_updch% %targetedition%.excludedapps.16=Groove%excludelist% flt.useteamsaddon=disabled flt.usebingaddononinstall=disabled flt.usebingaddononupdate=disabled" +set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%targetedition%.16_%_lang%_x-none cdnbaseurl.16=http://officecdn.microsoft.com/pr/%_updch% baseurl.16=http://officecdn.microsoft.com/pr/%_updch% version.16=%_version% mediatype.16=CDN sourcetype.16=CDN deliverymechanism=%_updch% %targetedition%.excludedapps.16=groove%excludelist% flt.useteamsaddon=disabled flt.usebingaddononinstall=disabled flt.usebingaddononupdate=disabled" if %change%==1 ( set "c2rcommand=!c2rcommand! productstoremove=AllProducts" diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index a445522..b714a81 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -645,18 +645,18 @@ goto :oe_excludeapps set excludelist= for %%# in ( -Access -Excel -OneNote -Outlook -PowerPoint -Project -Publisher -Visio -Word -Lync -OneDrive -Teams +access +excel +onenote +outlook +powerpoint +project +publisher +visio +word +lync +onedrive +teams ) do ( if /i "!%%#_st!"=="Off" if defined excludelist (set excludelist=!excludelist!,%%#) else (set excludelist=,%%#) ) @@ -727,7 +727,7 @@ goto :oe_goback :: OfficeClickToRun.exe with productstoadd method is used here to add editions :: It uses delta updates, meaning that since it's using same installed build, it will consume very less Internet -set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%targetedition%.16_%_lang%_x-none cdnbaseurl.16=http://officecdn.microsoft.com/pr/%_updch% baseurl.16=http://officecdn.microsoft.com/pr/%_updch% version.16=%_version% mediatype.16=CDN sourcetype.16=CDN deliverymechanism=%_updch% %targetedition%.excludedapps.16=Groove%excludelist% flt.useteamsaddon=disabled flt.usebingaddononinstall=disabled flt.usebingaddononupdate=disabled" +set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%targetedition%.16_%_lang%_x-none cdnbaseurl.16=http://officecdn.microsoft.com/pr/%_updch% baseurl.16=http://officecdn.microsoft.com/pr/%_updch% version.16=%_version% mediatype.16=CDN sourcetype.16=CDN deliverymechanism=%_updch% %targetedition%.excludedapps.16=groove%excludelist% flt.useteamsaddon=disabled flt.usebingaddononinstall=disabled flt.usebingaddononupdate=disabled" if %change%==1 ( set "c2rcommand=!c2rcommand! productstoremove=AllProducts" From b2831795a480a1bd9e23875576d0bee1a3cac013 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 22 Oct 2024 03:09:33 +0530 Subject: [PATCH 016/132] Show wlms service in red --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++++ MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 4 ++++ MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 4 ++++ .../Activators/Ohook_Activation_AIO.cmd | 4 ++++ .../Activators/Online_KMS_Activation.cmd | 4 ++++ 5 files changed, 20 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 413f543..800e9b5 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1583,7 +1583,11 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System if exist "%SysPath%\wlms\wlms.exe" ( sc query wlms | find /i "RUNNING" %nul% && ( +if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] +) else ( +call :dk_color %Red% "Checking Eval WLMS Service [Found]" +) ) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 70a1b0b..da0754c 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1346,7 +1346,11 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System if exist "%SysPath%\wlms\wlms.exe" ( sc query wlms | find /i "RUNNING" %nul% && ( +if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] +) else ( +call :dk_color %Red% "Checking Eval WLMS Service [Found]" +) ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 690db75..a5ab5d2 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1500,7 +1500,11 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System if exist "%SysPath%\wlms\wlms.exe" ( sc query wlms | find /i "RUNNING" %nul% && ( +if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] +) else ( +call :dk_color %Red% "Checking Eval WLMS Service [Found]" +) ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 37a4de5..858c009 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1800,7 +1800,11 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System if exist "%SysPath%\wlms\wlms.exe" ( sc query wlms | find /i "RUNNING" %nul% && ( +if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] +) else ( +call :dk_color %Red% "Checking Eval WLMS Service [Found]" +) ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 41708c5..821e514 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2849,7 +2849,11 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System if exist "%SysPath%\wlms\wlms.exe" ( sc query wlms | find /i "RUNNING" %nul% && ( +if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] +) else ( +call :dk_color %Red% "Checking Eval WLMS Service [Found]" +) ) ) From 6efb5d50fec167b3bf09d0122840c67c74508de8 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 22 Oct 2024 03:36:28 +0530 Subject: [PATCH 017/132] Suppress error output when screen size is smaller than the cmd window size --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 14 +++++++------- .../Activators/Ohook_Activation_AIO.cmd | 2 +- .../Activators/Online_KMS_Activation.cmd | 2 +- .../Change_Windows_Edition.cmd | 4 ++-- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 800e9b5..baa0c33 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2056,7 +2056,7 @@ cls if not defined terminal ( mode 130, 32 if exist "%SysPath%\spp\store_test\" mode 134, 32 -%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% ) title Ohook Activation %masver% @@ -4435,7 +4435,7 @@ cls if not defined terminal ( mode 115, 32 if exist "%SysPath%\spp\store_test\" mode 135, 32 -%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% ) title Online %KS% Activation %masver% @@ -6402,8 +6402,8 @@ exit /b cls if not defined terminal ( -mode 100, 32 -%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" +mode 100, 36 +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=35;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% ) %psc% "$f=[IO.File]::ReadAllText('!_batp!') -split ':sppmgr\:.*';iex ($f[1])" @@ -7583,7 +7583,7 @@ goto :at_back cls if not defined terminal ( mode 125, 32 -%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;}" +%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;}" %nul% ) title Fix Licensing ^(ClipSVC ^+ SPP ^+ OSPP^) @@ -8796,7 +8796,7 @@ goto dk_done cls if not defined terminal ( mode con cols=105 lines=32 -%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;}" +%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;}" %nul% ) call :ced_rebootflag @@ -8833,7 +8833,7 @@ goto dk_done cls if not defined terminal ( mode con cols=105 lines=32 -%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;}" +%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;}" %nul% ) set key= diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 858c009..79cc6e8 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -350,7 +350,7 @@ cls if not defined terminal ( mode 130, 32 if exist "%SysPath%\spp\store_test\" mode 134, 32 -%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% ) title Ohook Activation %masver% diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 821e514..309cc55 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -410,7 +410,7 @@ cls if not defined terminal ( mode 115, 32 if exist "%SysPath%\spp\store_test\" mode 135, 32 -%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% ) title Online %KS% Activation %masver% diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 09aae5e..d5fb7c6 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -605,7 +605,7 @@ goto dk_done cls if not defined terminal ( mode con cols=105 lines=32 -%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;}" +%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;}" %nul% ) call :ced_rebootflag @@ -642,7 +642,7 @@ goto dk_done cls if not defined terminal ( mode con cols=105 lines=32 -%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;}" +%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;}" %nul% ) set key= diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 763a4bc..c1bc8eb 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -461,7 +461,7 @@ goto :at_back cls if not defined terminal ( mode 125, 32 -%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;}" +%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;}" %nul% ) title Fix Licensing ^(ClipSVC ^+ SPP ^+ OSPP^) From d059952ecd10e79626da4630123c57a4f50b9808 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 25 Oct 2024 05:59:10 +0530 Subject: [PATCH 018/132] Improve SID detection in uninstall section --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 7 ++++++- .../Activators/Ohook_Activation_AIO.cmd | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index baa0c33..54cf9b6 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2410,7 +2410,12 @@ reg load HKU\DEF_TEMP %SystemDrive%\Users\Default\NTUSER.DAT %nul% reg query HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && reg delete HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f reg unload HKU\DEF_TEMP %nul% -for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty $('{0}\{1}' -f $p, $_.PSChildName)).ProfileImagePath; if ($pi -like $('{0}\Users\*' -f $Env:SystemDrive)) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) +set _sidlist= +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like '*\Users\*' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_.PSChildName -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) + +if not defined _sidlist ( +for /f "delims=" %%a in ('%psc% "$explorerProc = Get-Process -Name explorer | Where-Object {$_.SessionId -eq (Get-Process -Id $pid).SessionId} | Select-Object -First 1; $sid = (gwmi -Query ('Select * From Win32_Process Where ProcessID=' + $explorerProc.Id)).GetOwnerSid().Sid; $sid" %nul6%') do (set _sidlist=%%a) +) for %%# in (!_sidlist!) do ( diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 79cc6e8..a98d2eb 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -704,7 +704,12 @@ reg load HKU\DEF_TEMP %SystemDrive%\Users\Default\NTUSER.DAT %nul% reg query HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && reg delete HKU\DEF_TEMP\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency /f reg unload HKU\DEF_TEMP %nul% -for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty $('{0}\{1}' -f $p, $_.PSChildName)).ProfileImagePath; if ($pi -like $('{0}\Users\*' -f $Env:SystemDrive)) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) +set _sidlist= +for /f "tokens=* delims=" %%a in ('%psc% "$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'; Get-ChildItem $p | ForEach-Object { $pi = (Get-ItemProperty """"$p\$($_.PSChildName)"""").ProfileImagePath; if ($pi -like '*\Users\*' -and (Test-Path """"$pi\NTUSER.DAT"""") -and -not ($_.PSChildName -match '\.bak$')) { Split-Path $_.PSPath -Leaf } }" %nul6%') do (if defined _sidlist (set _sidlist=!_sidlist! %%a) else (set _sidlist=%%a)) + +if not defined _sidlist ( +for /f "delims=" %%a in ('%psc% "$explorerProc = Get-Process -Name explorer | Where-Object {$_.SessionId -eq (Get-Process -Id $pid).SessionId} | Select-Object -First 1; $sid = (gwmi -Query ('Select * From Win32_Process Where ProcessID=' + $explorerProc.Id)).GetOwnerSid().Sid; $sid" %nul6%') do (set _sidlist=%%a) +) for %%# in (!_sidlist!) do ( From 1f0e04519adbe3531d550f2af2f1387e0e0a39d6 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 28 Oct 2024 11:09:59 +0530 Subject: [PATCH 019/132] Add support for UWP Office activation in Online KMS --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 90 ++++++++++++++++--- .../Activators/Ohook_Activation_AIO.cmd | 25 +++++- .../Activators/Online_KMS_Activation.cmd | 87 +++++++++++++++--- 3 files changed, 175 insertions(+), 27 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 54cf9b6..14af014 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2116,11 +2116,14 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v P %nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R %nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R -if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set o16uwp=Office UWP +if %winbuild% GEQ 10240 ( +for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty InstallLocation)" %nul6%') do (if exist "%%a\Integration\Integrator.exe" set o16uwp=Office UWP ) +) if not "%o14msi%%o14c2r%%o16uwp%"=="" ( echo: call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%%o16uwp%]" +if not "%o14msi%%o16uwp%"=="" call :dk_color %Blue% "Use Online KMS option to activate it." ) if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( @@ -2550,14 +2553,15 @@ exit /b if not defined _oLPath exit /b +if defined _oIntegrator ( if %oVer%==16 ( "!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%key% %nul% ) else ( "!_oIntegrator!" /I /License PRIDName=%_License% PidKey=%key% %nul% ) - call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 echo "!allapps!" | find /i "!_actid!" %nul1% && exit /b +) :: Fallback to manual method to install licenses incase integrator.exe is not working @@ -2884,6 +2888,23 @@ reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f % reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f /reg:32 %nul% ) +:: Clear vNext in UWP Office + +if defined o16uwpapplist ( +for %%# in (%_sidlist%) do ( +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +rmdir /s /q "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Local\Microsoft\Office\Licenses\" %nul% +if exist "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\SystemAppData\Helium\User.dat" ( +set defname=DEFTEMP-%%# +reg load HKU\!defname! "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\SystemAppData\Helium\User.dat" %nul% +reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Licensing /f %nul% +reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Identity /f %nul% +reg unload HKU\!defname! %nul% +) +) +) +) + :: Clear SharedComputerLicensing for office :: https://learn.microsoft.com/en-us/deployoffice/overview-shared-computer-activation @@ -4657,18 +4678,14 @@ call :dk_color %Gray% "Checking Ohook [Ohook activation :: Check unsupported office versions set o14c2r= -set o16uwp= - set _68=HKLM\SOFTWARE\Microsoft\Office set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office %nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R %nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R -if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set o16uwp=Office UWP - -if not "%o14c2r%%o16uwp%"=="" ( +if not "%o14c2r%"=="" ( echo: -call :dk_color %Red% "Checking Unsupported Office Install [ %o14c2r%%o16uwp%]" +call :dk_color %Red% "Checking Unsupported Office Install [ %o14c2r%]" ) if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( @@ -4681,6 +4698,13 @@ set ohub=1 call :ks_getpath +set o16uwp= +set o16uwp_path= + +if %winbuild% GEQ 10240 ( +for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty InstallLocation)" %nul6%') do (if exist "%%a\Integration\Integrator.exe" (set o16uwp=1&set "o16uwp_path=%%a")) +) + sc query ClickToRunSvc %nul% set error1=%errorlevel% @@ -4701,10 +4725,10 @@ set o15c2r= set error=1 ) -if "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="" ( +if "%o16uwp%%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="" ( set error=1 echo: -if not "%o14c2r%%o16uwp%"=="" ( +if not "%o14c2r%"=="" ( call :dk_color %Red% "Checking Supported Office Install [Not Found]" ) else ( call :dk_color %Red% "Checking Installed Office [Not Found]" @@ -4721,8 +4745,8 @@ goto :ks_activate ) set multioffice= -if not "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="1" set multioffice=1 -if not "%o14c2r%%o16uwp%"=="" set multioffice=1 +if not "%o16uwp%%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="1" set multioffice=1 +if not "%o14c2r%"=="" set multioffice=1 if defined multioffice ( echo: @@ -4731,6 +4755,44 @@ call :dk_color %Gray% "Checking Multiple Office Install [Found. Recommend ::======================================================================================================================================== +:: Process Office UWP + +if not defined o16uwp goto :ks_starto15c2r + +call :ks_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 + +set oVer=16 +set "_oLPath=%o16uwp_path%\Licenses16" +for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty Dependencies) | Select-Object PackageFullName" %nul6%') do (set "o16uwpapplist=!o16uwpapplist! %%a") + +echo "%o16uwpapplist%" | findstr /i "Access Excel OneNote Outlook PowerPoint Publisher SkypeForBusiness Word" %nul% && set "_oIds=O365HomePremRetail" + +for %%# in (Project Visio) do ( +echo "%o16uwpapplist%" | findstr /i "%%#" %nul% && ( +set _lat= +if exist "%_oLPath%\%%#Pro2024VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2024Retail " & set _lat=1 +if not defined _lat if exist "%_oLPath%\%%#Pro2021VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2021Retail " & set _lat=1 +if not defined _lat if exist "%_oLPath%\%%#Pro2019VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2019Retail " & set _lat=1 +if not defined _lat set "_oIds= !_oIds! %%#ProRetail " +) +) + +set uwpinfo=%o16uwp_path:C:\Program Files\WindowsApps\Microsoft.Office.Desktop_=% + +echo: +echo Processing Office... [UWP ^| %uwpinfo%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ks_starto15c2r +) + +call :ks_process + +::======================================================================================================================================== + :: Process Office 15.0 C2R if not defined o15c2r goto :ks_starto16c2r @@ -4821,7 +4883,7 @@ if defined o16msi call :ks_processmsi 16 %o16msi_reg% echo: call :oh_clearblock -if "%o16msi%%o15msi%"=="" if not "%o16c2r%%o15c2r%"=="" if "%keyerror%"=="0" if %_NoEditionChange%==0 call :oh_uninstkey +if "%o16msi%%o15msi%"=="" if not "%o16uwp%%o16c2r%%o15c2r%"=="" if "%keyerror%"=="0" if %_NoEditionChange%==0 call :oh_uninstkey call :oh_licrefresh ::======================================================================================================================================== @@ -4988,6 +5050,8 @@ exit /b :ks_osppready +if not defined _config exit /b + echo: %_config% | find /i "propertyBag" %nul1% && ( set "_osppt=REG_DWORD" set "_osppready=%o15c2r_reg%" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index a98d2eb..bf9da1f 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -410,11 +410,14 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v P %nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R %nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R -if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set o16uwp=Office UWP +if %winbuild% GEQ 10240 ( +for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty InstallLocation)" %nul6%') do (if exist "%%a\Integration\Integrator.exe" set o16uwp=Office UWP ) +) if not "%o14msi%%o14c2r%%o16uwp%"=="" ( echo: call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%%o16uwp%]" +if not "%o14msi%%o16uwp%"=="" call :dk_color %Blue% "Use Online KMS option to activate it." ) if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( @@ -844,14 +847,15 @@ exit /b if not defined _oLPath exit /b +if defined _oIntegrator ( if %oVer%==16 ( "!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%key% %nul% ) else ( "!_oIntegrator!" /I /License PRIDName=%_License% PidKey=%key% %nul% ) - call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 echo "!allapps!" | find /i "!_actid!" %nul1% && exit /b +) :: Fallback to manual method to install licenses incase integrator.exe is not working @@ -1178,6 +1182,23 @@ reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f % reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f /reg:32 %nul% ) +:: Clear vNext in UWP Office + +if defined o16uwpapplist ( +for %%# in (%_sidlist%) do ( +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +rmdir /s /q "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Local\Microsoft\Office\Licenses\" %nul% +if exist "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\SystemAppData\Helium\User.dat" ( +set defname=DEFTEMP-%%# +reg load HKU\!defname! "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\SystemAppData\Helium\User.dat" %nul% +reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Licensing /f %nul% +reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Identity /f %nul% +reg unload HKU\!defname! %nul% +) +) +) +) + :: Clear SharedComputerLicensing for office :: https://learn.microsoft.com/en-us/deployoffice/overview-shared-computer-activation diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 309cc55..23da821 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -627,18 +627,14 @@ call :dk_color %Gray% "Checking Ohook [Ohook activation :: Check unsupported office versions set o14c2r= -set o16uwp= - set _68=HKLM\SOFTWARE\Microsoft\Office set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office %nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R %nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R -if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set o16uwp=Office UWP - -if not "%o14c2r%%o16uwp%"=="" ( +if not "%o14c2r%"=="" ( echo: -call :dk_color %Red% "Checking Unsupported Office Install [ %o14c2r%%o16uwp%]" +call :dk_color %Red% "Checking Unsupported Office Install [ %o14c2r%]" ) if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( @@ -651,6 +647,13 @@ set ohub=1 call :ks_getpath +set o16uwp= +set o16uwp_path= + +if %winbuild% GEQ 10240 ( +for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty InstallLocation)" %nul6%') do (if exist "%%a\Integration\Integrator.exe" (set o16uwp=1&set "o16uwp_path=%%a")) +) + sc query ClickToRunSvc %nul% set error1=%errorlevel% @@ -671,10 +674,10 @@ set o15c2r= set error=1 ) -if "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="" ( +if "%o16uwp%%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="" ( set error=1 echo: -if not "%o14c2r%%o16uwp%"=="" ( +if not "%o14c2r%"=="" ( call :dk_color %Red% "Checking Supported Office Install [Not Found]" ) else ( call :dk_color %Red% "Checking Installed Office [Not Found]" @@ -691,8 +694,8 @@ goto :ks_activate ) set multioffice= -if not "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="1" set multioffice=1 -if not "%o14c2r%%o16uwp%"=="" set multioffice=1 +if not "%o16uwp%%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="1" set multioffice=1 +if not "%o14c2r%"=="" set multioffice=1 if defined multioffice ( echo: @@ -701,6 +704,46 @@ call :dk_color %Gray% "Checking Multiple Office Install [Found. Recommend ::======================================================================================================================================== +:: Process Office UWP + +if not defined o16uwp goto :ks_starto15c2r + +call :ks_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 + +set oVer=16 +set "_oLPath=%o16uwp_path%\Licenses16" +for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty Dependencies) | Select-Object PackageFullName" %nul6%') do (set "o16uwpapplist=!o16uwpapplist! %%a") + +echo "%o16uwpapplist%" | findstr /i "Access Excel OneNote Outlook PowerPoint Publisher SkypeForBusiness Word" %nul% && set "_oIds=O365HomePremRetail" + +for %%# in (Project Visio) do ( +echo "%o16uwpapplist%" | findstr /i "%%#" %nul% && ( +set _lat= +if exist "%_oLPath%\%%#Pro2024VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2024Retail " & set _lat=1 +if not defined _lat if exist "%_oLPath%\%%#Pro2021VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2021Retail " & set _lat=1 +if not defined _lat if exist "%_oLPath%\%%#Pro2019VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2019Retail " & set _lat=1 +if not defined _lat set "_oIds= !_oIds! %%#ProRetail " +) +) + +set uwpinfo=%o16uwp_path:C:\Program Files\WindowsApps\Microsoft.Office.Desktop_=% + +echo: +echo Processing Office... [UWP ^| %uwpinfo%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ks_starto15c2r +) + +call :ks_process + +::======================================================================================================================================== + +:ks_starto15c2r + :: Process Office 15.0 C2R if not defined o15c2r goto :ks_starto16c2r @@ -791,7 +834,7 @@ if defined o16msi call :ks_processmsi 16 %o16msi_reg% echo: call :oh_clearblock -if "%o16msi%%o15msi%"=="" if not "%o16c2r%%o15c2r%"=="" if "%keyerror%"=="0" if %_NoEditionChange%==0 call :oh_uninstkey +if "%o16msi%%o15msi%"=="" if not "%o16uwp%%o16c2r%%o15c2r%"=="" if "%keyerror%"=="0" if %_NoEditionChange%==0 call :oh_uninstkey call :oh_licrefresh ::======================================================================================================================================== @@ -990,6 +1033,8 @@ exit /b :ks_osppready +if not defined _config exit /b + echo: %_config% | find /i "propertyBag" %nul1% && ( set "_osppt=REG_DWORD" set "_osppready=%o15c2r_reg%" @@ -1156,14 +1201,15 @@ exit /b if not defined _oLPath exit /b +if defined _oIntegrator ( if %oVer%==16 ( "!_oIntegrator!" /I /License PRIDName=%_License%.16 PidKey=%key% %nul% ) else ( "!_oIntegrator!" /I /License PRIDName=%_License% PidKey=%key% %nul% ) - call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 echo "!allapps!" | find /i "!_actid!" %nul1% && exit /b +) :: Fallback to manual method to install licenses incase integrator.exe is not working @@ -1274,6 +1320,23 @@ reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f % reg delete "HKLM\SOFTWARE\Policies\Microsoft\Office\%%x.0\Common\Licensing" /f /reg:32 %nul% ) +:: Clear vNext in UWP Office + +if defined o16uwpapplist ( +for %%# in (%_sidlist%) do ( +for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( +rmdir /s /q "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Local\Microsoft\Office\Licenses\" %nul% +if exist "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\SystemAppData\Helium\User.dat" ( +set defname=DEFTEMP-%%# +reg load HKU\!defname! "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\SystemAppData\Helium\User.dat" %nul% +reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Licensing /f %nul% +reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Identity /f %nul% +reg unload HKU\!defname! %nul% +) +) +) +) + :: Clear SharedComputerLicensing for office :: https://learn.microsoft.com/en-us/deployoffice/overview-shared-computer-activation From d76b2ea57ea21f23ecefce1d698e32ced3b1b1be Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 28 Oct 2024 12:00:30 +0530 Subject: [PATCH 020/132] Remove update registry check in malware detection --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 9 --------- .../Activators/HWID_Activation.cmd | 9 --------- .../Activators/KMS38_Activation.cmd | 9 --------- .../Activators/Ohook_Activation_AIO.cmd | 9 --------- .../Activators/Online_KMS_Activation.cmd | 9 --------- 5 files changed, 45 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 14af014..f80f5e2 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1311,15 +1311,6 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -set wucount=0 -for %%# in (wuauserv) do ( -set _corrupt= -for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt ( -reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1 & set /a wucount+=1) -) -) -if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" - sc start sppsvc %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index da0754c..2f24297 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1074,15 +1074,6 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -set wucount=0 -for %%# in (wuauserv) do ( -set _corrupt= -for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt ( -reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1 & set /a wucount+=1) -) -) -if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" - sc start sppsvc %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index a5ab5d2..bf0d7fb 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1228,15 +1228,6 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -set wucount=0 -for %%# in (wuauserv) do ( -set _corrupt= -for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt ( -reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1 & set /a wucount+=1) -) -) -if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" - sc start sppsvc %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index bf9da1f..007b445 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1554,15 +1554,6 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -set wucount=0 -for %%# in (wuauserv) do ( -set _corrupt= -for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt ( -reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1 & set /a wucount+=1) -) -) -if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" - sc start sppsvc %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 23da821..5329567 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2640,15 +2640,6 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -set wucount=0 -for %%# in (wuauserv) do ( -set _corrupt= -for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt ( -reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1 & set /a wucount+=1) -) -) -if %wucount% GEQ 1 set "results=%results%[Windows Update registry is corrupt]" - sc start sppsvc %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" From 7a6e63a462ba7b5929db91571cc02e819736bde7 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 28 Oct 2024 12:09:40 +0530 Subject: [PATCH 021/132] Improve WLMS service check --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 -- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 -- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 -- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 -- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 -- 5 files changed, 10 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index f80f5e2..40c2a4e 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1573,14 +1573,12 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( -sc query wlms | find /i "RUNNING" %nul% && ( if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] ) else ( call :dk_color %Red% "Checking Eval WLMS Service [Found]" ) ) -) reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 2f24297..ab67c46 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1336,14 +1336,12 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( -sc query wlms | find /i "RUNNING" %nul% && ( if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] ) else ( call :dk_color %Red% "Checking Eval WLMS Service [Found]" ) ) -) reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index bf0d7fb..86f5013 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1490,14 +1490,12 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( -sc query wlms | find /i "RUNNING" %nul% && ( if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] ) else ( call :dk_color %Red% "Checking Eval WLMS Service [Found]" ) ) -) reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 007b445..46023ff 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1816,14 +1816,12 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( -sc query wlms | find /i "RUNNING" %nul% && ( if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] ) else ( call :dk_color %Red% "Checking Eval WLMS Service [Found]" ) ) -) reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 5329567..09e9fae 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2902,14 +2902,12 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( -sc query wlms | find /i "RUNNING" %nul% && ( if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] ) else ( call :dk_color %Red% "Checking Eval WLMS Service [Found]" ) ) -) reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( From f32cb934dcd1331018cfd3745f942147a44e830b Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 28 Oct 2024 12:18:04 +0530 Subject: [PATCH 022/132] Remove W7 Embedded Standard activation with Volume:BA Even though it reports its activated, its wlms service doesn't accept it and the system gets shutdown after 1 hour --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 1 - MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 1 - 2 files changed, 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 40c2a4e..df2cd76 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -6281,7 +6281,6 @@ ae2ee509-1b34-41c0-acb7-6d4650168915_33PXH-7Y6KF-2VJC9-XBBR8-HV%f%THH___4_Enterp b92e9980-b9d5-4821-9c94-140f632f6312_FJ82H-XT6CR-J8D7P-XQJJ2-GP%f%DD4__48_Professional 54a09a0d-d57b-4c10-8b69-a842d6590ad5_MRPKT-YTG23-K7D7T-X2JMM-QY%f%7MG__49_ProfessionalN db537896-376f-48ae-a492-53d0547773d0_YBYF6-BHCR3-JPKRB-CDW7B-F9%f%BK4__65_Embedded_POSReady -e1a8296a-db37-44d1-8cce-7bc961d59c54_XGY72-BRBBT-FF8MH-2GG8H-W7%f%KCW__65_Embedded_Standard aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395_73KQT-CD9G6-K7TQG-66MRP-CQ%f%22C__65_Embedded_ThinPC 5a041529-fef8-4d07-b06f-b59b573b32d2_W82YF-2Q76Y-63HXB-FGJG9-GF%f%7QX__69_ProfessionalE 46bbed08-9c7b-48fc-a614-95250573f4ea_C29WB-22CC8-VJ326-GHFJW-H9%f%DH4__70_EnterpriseE diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 09e9fae..dd426ec 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3420,7 +3420,6 @@ ae2ee509-1b34-41c0-acb7-6d4650168915_33PXH-7Y6KF-2VJC9-XBBR8-HV%f%THH___4_Enterp b92e9980-b9d5-4821-9c94-140f632f6312_FJ82H-XT6CR-J8D7P-XQJJ2-GP%f%DD4__48_Professional 54a09a0d-d57b-4c10-8b69-a842d6590ad5_MRPKT-YTG23-K7D7T-X2JMM-QY%f%7MG__49_ProfessionalN db537896-376f-48ae-a492-53d0547773d0_YBYF6-BHCR3-JPKRB-CDW7B-F9%f%BK4__65_Embedded_POSReady -e1a8296a-db37-44d1-8cce-7bc961d59c54_XGY72-BRBBT-FF8MH-2GG8H-W7%f%KCW__65_Embedded_Standard aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395_73KQT-CD9G6-K7TQG-66MRP-CQ%f%22C__65_Embedded_ThinPC 5a041529-fef8-4d07-b06f-b59b573b32d2_W82YF-2Q76Y-63HXB-FGJG9-GF%f%7QX__69_ProfessionalE 46bbed08-9c7b-48fc-a614-95250573f4ea_C29WB-22CC8-VJ326-GHFJW-H9%f%DH4__70_EnterpriseE From 7c69c471c54122e33976b256d5dad531b6525741 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 30 Oct 2024 10:29:31 +0530 Subject: [PATCH 023/132] Fix bugs due to x86 Powershell (No ARM64/x64) on Windows 10 ARM64 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 23 +++++++++++++------ .../Activators/HWID_Activation.cmd | 19 +++++++++------ .../Activators/KMS38_Activation.cmd | 19 +++++++++------ .../Activators/Ohook_Activation_AIO.cmd | 19 +++++++++------ .../Activators/Online_KMS_Activation.cmd | 19 +++++++++------ .../Change_Office_Edition.cmd | 17 +++++++++----- .../Change_Windows_Edition.cmd | 17 +++++++++----- .../Extract_OEM_Folder.cmd | 17 +++++++++----- MAS/Separate-Files-Version/Troubleshoot.cmd | 19 ++++++++++----- 9 files changed, 110 insertions(+), 59 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index df2cd76..20b856c 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -40,24 +40,24 @@ set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowe set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="r1" set r1=1 -if /i "%%#"=="r2" set r2=1 +if /i "%%#"=="re1" (set re1=1) else (set re1=) +if /i "%%#"=="re2" (set re2=1) else (set re2=) ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows :: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows -if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( +if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 ( setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1" exit /b ) :: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows -if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( +if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 ( setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2" exit /b ) @@ -110,6 +110,8 @@ set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% if defined _args ( for %%A in (%_args%) do ( if /i "%%A"=="-el" set _elev=1 @@ -224,6 +226,7 @@ if defined terminal ( %psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= ) +if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) @@ -986,6 +989,8 @@ set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) +echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1) + if %_NCS% EQU 1 ( for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" set "Red="41;97m"" @@ -1689,7 +1694,7 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, Syste :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. set permerror= -if %winbuild% GEQ 9200 ( +if %winbuild% GEQ 9200 if not defined ps32onArm ( for %%# in ( "%tokenstore%+FullControl" "HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" @@ -4782,6 +4787,8 @@ call :ks_process ::======================================================================================================================================== +:ks_starto15c2r + :: Process Office 15.0 C2R if not defined o15c2r goto :ks_starto16c2r @@ -8317,6 +8324,8 @@ exit /b set permerror= if not exist "%tokenstore%\" set "permerror=Error Found In Token Folder" +if defined ps32onArm exit /b + for %%# in ( "%tokenstore%+FullControl" "HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index ab67c46..8bc9df2 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -46,24 +46,24 @@ set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowe set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="r1" set r1=1 -if /i "%%#"=="r2" set r2=1 +if /i "%%#"=="re1" (set re1=1) else (set re1=) +if /i "%%#"=="re2" (set re2=1) else (set re2=) ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows :: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows -if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( +if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 ( setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1" exit /b ) :: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows -if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( +if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 ( setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2" exit /b ) @@ -143,6 +143,8 @@ set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% if defined _args ( for %%A in (%_args%) do ( if /i "%%A"=="/HWID" set _act=1 @@ -263,6 +265,7 @@ if defined terminal ( %psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= ) +if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) @@ -749,6 +752,8 @@ set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) +echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1) + if %_NCS% EQU 1 ( for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" set "Red="41;97m"" @@ -1452,7 +1457,7 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, Syste :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. set permerror= -if %winbuild% GEQ 9200 ( +if %winbuild% GEQ 9200 if not defined ps32onArm ( for %%# in ( "%tokenstore%+FullControl" "HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 86f5013..fa9fd22 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -49,24 +49,24 @@ set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowe set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="r1" set r1=1 -if /i "%%#"=="r2" set r2=1 +if /i "%%#"=="re1" (set re1=1) else (set re1=) +if /i "%%#"=="re2" (set re2=1) else (set re2=) ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows :: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows -if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( +if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 ( setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1" exit /b ) :: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows -if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( +if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 ( setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2" exit /b ) @@ -146,6 +146,8 @@ set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% if defined _args ( for %%A in (%_args%) do ( if /i "%%A"=="/KMS38" set _act=1 @@ -266,6 +268,7 @@ if defined terminal ( %psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= ) +if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) @@ -860,6 +863,8 @@ set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) +echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1) + if %_NCS% EQU 1 ( for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" set "Red="41;97m"" @@ -1606,7 +1611,7 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, Syste :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. set permerror= -if %winbuild% GEQ 9200 ( +if %winbuild% GEQ 9200 if not defined ps32onArm ( for %%# in ( "%tokenstore%+FullControl" "HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 46023ff..f90dd79 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -46,24 +46,24 @@ set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowe set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="r1" set r1=1 -if /i "%%#"=="r2" set r2=1 +if /i "%%#"=="re1" (set re1=1) else (set re1=) +if /i "%%#"=="re2" (set re2=1) else (set re2=) ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows :: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows -if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( +if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 ( setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1" exit /b ) :: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows -if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( +if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 ( setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2" exit /b ) @@ -143,6 +143,8 @@ set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% if defined _args ( for %%A in (%_args%) do ( if /i "%%A"=="/Ohook" set _act=1 @@ -256,6 +258,7 @@ if defined terminal ( %psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= ) +if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) @@ -1354,6 +1357,8 @@ set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) +echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1) + if %_NCS% EQU 1 ( for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" set "Red="41;97m"" @@ -1932,7 +1937,7 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, Syste :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. set permerror= -if %winbuild% GEQ 9200 ( +if %winbuild% GEQ 9200 if not defined ps32onArm ( for %%# in ( "%tokenstore%+FullControl" "HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index dd426ec..ce273b6 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -71,24 +71,24 @@ set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowe set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="r1" set r1=1 -if /i "%%#"=="r2" set r2=1 +if /i "%%#"=="re1" (set re1=1) else (set re1=) +if /i "%%#"=="re2" (set re2=1) else (set re2=) ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows :: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows -if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( +if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 ( setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1" exit /b ) :: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows -if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( +if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 ( setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2" exit /b ) @@ -169,6 +169,8 @@ set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% if defined _args for %%A in (%_args%) do ( if /i "%%A"=="-el" (set _elev=1) if /i "%%A"=="/K-Windows" (set _actwin=1) @@ -285,6 +287,7 @@ if defined terminal ( %psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= ) +if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) @@ -2291,6 +2294,8 @@ set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) +echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1) + if %_NCS% EQU 1 ( for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" set "Red="41;97m"" @@ -3018,7 +3023,7 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, Syste :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. set permerror= -if %winbuild% GEQ 9200 ( +if %winbuild% GEQ 9200 if not defined ps32onArm ( for %%# in ( "%tokenstore%+FullControl" "HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index b714a81..4c44f22 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -33,24 +33,24 @@ set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowe set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="r1" set r1=1 -if /i "%%#"=="r2" set r2=1 +if /i "%%#"=="re1" (set re1=1) else (set re1=) +if /i "%%#"=="re2" (set re2=1) else (set re2=) ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows :: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows -if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( +if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 ( setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1" exit /b ) :: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows -if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( +if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 ( setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2" exit /b ) @@ -103,6 +103,8 @@ set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% if defined _args ( for %%A in (%_args%) do ( if /i "%%A"=="-el" set _elev=1 @@ -216,6 +218,7 @@ if defined terminal ( %psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= ) +if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) @@ -1299,6 +1302,8 @@ set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) +echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1) + if %_NCS% EQU 1 ( for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" set "Red="41;97m"" diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index d5fb7c6..5d1471d 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -38,24 +38,24 @@ set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowe set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="r1" set r1=1 -if /i "%%#"=="r2" set r2=1 +if /i "%%#"=="re1" (set re1=1) else (set re1=) +if /i "%%#"=="re2" (set re2=1) else (set re2=) ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows :: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows -if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( +if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 ( setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1" exit /b ) :: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows -if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( +if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 ( setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2" exit /b ) @@ -108,6 +108,8 @@ set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% if defined _args ( for %%A in (%_args%) do ( if /i "%%A"=="-el" set _elev=1 @@ -221,6 +223,7 @@ if defined terminal ( %psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= ) +if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) @@ -783,6 +786,8 @@ set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) +echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1) + if %_NCS% EQU 1 ( for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" set "Red="41;97m"" diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 3664d64..89e066c 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -33,24 +33,24 @@ set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowe set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="r1" set r1=1 -if /i "%%#"=="r2" set r2=1 +if /i "%%#"=="re1" (set re1=1) else (set re1=) +if /i "%%#"=="re2" (set re2=1) else (set re2=) ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows :: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows -if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( +if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 ( setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1" exit /b ) :: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows -if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( +if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 ( setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2" exit /b ) @@ -103,6 +103,8 @@ set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% if defined _args ( for %%A in (%_args%) do ( if /i "%%A"=="-el" set _elev=1 @@ -215,6 +217,7 @@ if defined terminal ( %psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= ) +if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) @@ -729,6 +732,8 @@ set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) +echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1) + if %_NCS% EQU 1 ( for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" set "Red="41;97m"" diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index c1bc8eb..fd0de9f 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -33,24 +33,24 @@ set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowe set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="r1" set r1=1 -if /i "%%#"=="r2" set r2=1 +if /i "%%#"=="re1" (set re1=1) else (set re1=) +if /i "%%#"=="re2" (set re2=1) else (set re2=) ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows :: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows -if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( +if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 ( setlocal EnableDelayedExpansion -start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1" exit /b ) :: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows -if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( +if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 ( setlocal EnableDelayedExpansion -start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2" exit /b ) @@ -103,6 +103,8 @@ set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% if defined _args ( for %%A in (%_args%) do ( if /i "%%A"=="-el" set _elev=1 @@ -216,6 +218,7 @@ if defined terminal ( %psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= ) +if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) @@ -1138,6 +1141,8 @@ exit /b set permerror= if not exist "%tokenstore%\" set "permerror=Error Found In Token Folder" +if defined ps32onArm exit /b + for %%# in ( "%tokenstore%+FullControl" "HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" @@ -1429,6 +1434,8 @@ set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) +echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1) + if %_NCS% EQU 1 ( for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" set "Red="41;97m"" From 8fe0b24945b5df8462dba06b88d024e4a003b525 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 30 Oct 2024 20:19:09 +0530 Subject: [PATCH 024/132] Fix a bug Thanks to abbodi1406 for notifying --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 6 ++++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 6 ++++-- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 6 ++++-- .../Activators/Ohook_Activation_AIO.cmd | 6 ++++-- .../Activators/Online_KMS_Activation.cmd | 6 ++++-- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 6 ++++-- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 6 ++++-- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 6 ++++-- MAS/Separate-Files-Version/Troubleshoot.cmd | 6 ++++-- 9 files changed, 36 insertions(+), 18 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 20b856c..c9d701d 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -38,10 +38,12 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%Syste set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" +set re1= +set re2= set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="re1" (set re1=1) else (set re1=) -if /i "%%#"=="re2" (set re2=1) else (set re2=) +if /i "%%#"=="re1" set re1=1 +if /i "%%#"=="re2" set re2=1 ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 8bc9df2..40884ca 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -44,10 +44,12 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%Syste set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" +set re1= +set re2= set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="re1" (set re1=1) else (set re1=) -if /i "%%#"=="re2" (set re2=1) else (set re2=) +if /i "%%#"=="re1" set re1=1 +if /i "%%#"=="re2" set re2=1 ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index fa9fd22..f611460 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -47,10 +47,12 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%Syste set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" +set re1= +set re2= set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="re1" (set re1=1) else (set re1=) -if /i "%%#"=="re2" (set re2=1) else (set re2=) +if /i "%%#"=="re1" set re1=1 +if /i "%%#"=="re2" set re2=1 ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index f90dd79..828f2a3 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -44,10 +44,12 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%Syste set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" +set re1= +set re2= set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="re1" (set re1=1) else (set re1=) -if /i "%%#"=="re2" (set re2=1) else (set re2=) +if /i "%%#"=="re1" set re1=1 +if /i "%%#"=="re2" set re2=1 ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index ce273b6..f5f7a35 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -69,10 +69,12 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%Syste set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" +set re1= +set re2= set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="re1" (set re1=1) else (set re1=) -if /i "%%#"=="re2" (set re2=1) else (set re2=) +if /i "%%#"=="re1" set re1=1 +if /i "%%#"=="re2" set re2=1 ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 4c44f22..ae77e7e 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -31,10 +31,12 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%Syste set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" +set re1= +set re2= set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="re1" (set re1=1) else (set re1=) -if /i "%%#"=="re2" (set re2=1) else (set re2=) +if /i "%%#"=="re1" set re1=1 +if /i "%%#"=="re2" set re2=1 ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 5d1471d..e34a61c 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -36,10 +36,12 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%Syste set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" +set re1= +set re2= set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="re1" (set re1=1) else (set re1=) -if /i "%%#"=="re2" (set re2=1) else (set re2=) +if /i "%%#"=="re1" set re1=1 +if /i "%%#"=="re2" set re2=1 ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 89e066c..65edd77 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -31,10 +31,12 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%Syste set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" +set re1= +set re2= set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="re1" (set re1=1) else (set re1=) -if /i "%%#"=="re2" (set re2=1) else (set re2=) +if /i "%%#"=="re1" set re1=1 +if /i "%%#"=="re2" set re2=1 ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index fd0de9f..392687a 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -31,10 +31,12 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%Syste set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" +set re1= +set re2= set "_cmdf=%~f0" for %%# in (%*) do ( -if /i "%%#"=="re1" (set re1=1) else (set re1=) -if /i "%%#"=="re2" (set re2=1) else (set re2=) +if /i "%%#"=="re1" set re1=1 +if /i "%%#"=="re2" set re2=1 ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows From 1849dd307500503bd5447daa13c5693017522b3d Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 31 Oct 2024 06:00:02 +0530 Subject: [PATCH 025/132] Show 3rd party AV list when Powershell check fails --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 3 ++- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 3 ++- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 3 ++- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 3 ++- .../Activators/Online_KMS_Activation.cmd | 3 ++- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 3 ++- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 3 ++- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 3 ++- MAS/Separate-Files-Version/Troubleshoot.cmd | 3 ++- 9 files changed, 18 insertions(+), 9 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index c9d701d..d87bbf0 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -180,7 +180,8 @@ cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( echo Failed to run Powershell command but Powershell is working. -call :dk_color %Blue% "Check if your antivirus is blocking the script." +echo: +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 40884ca..c2d039e 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -219,7 +219,8 @@ cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( echo Failed to run Powershell command but Powershell is working. -call :dk_color %Blue% "Check if your antivirus is blocking the script." +echo: +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index f611460..5cabfd2 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -222,7 +222,8 @@ cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( echo Failed to run Powershell command but Powershell is working. -call :dk_color %Blue% "Check if your antivirus is blocking the script." +echo: +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 828f2a3..14b201d 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -212,7 +212,8 @@ cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( echo Failed to run Powershell command but Powershell is working. -call :dk_color %Blue% "Check if your antivirus is blocking the script." +echo: +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index f5f7a35..5627c84 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -241,7 +241,8 @@ cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( echo Failed to run Powershell command but Powershell is working. -call :dk_color %Blue% "Check if your antivirus is blocking the script." +echo: +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index ae77e7e..0797a22 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -172,7 +172,8 @@ cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( echo Failed to run Powershell command but Powershell is working. -call :dk_color %Blue% "Check if your antivirus is blocking the script." +echo: +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index e34a61c..9e6287b 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -177,7 +177,8 @@ cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( echo Failed to run Powershell command but Powershell is working. -call :dk_color %Blue% "Check if your antivirus is blocking the script." +echo: +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 65edd77..36cc9b5 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -171,7 +171,8 @@ cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( echo Failed to run Powershell command but Powershell is working. -call :dk_color %Blue% "Check if your antivirus is blocking the script." +echo: +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 392687a..e1fe1cb 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -172,7 +172,8 @@ cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( echo Failed to run Powershell command but Powershell is working. -call :dk_color %Blue% "Check if your antivirus is blocking the script." +echo: +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" From a5dd99ac0022b9e6a76d78888ff60264e46c2375 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 3 Nov 2024 02:32:03 +0530 Subject: [PATCH 026/132] Show info when latest office products are not in the list --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 12 +++++++++++- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index d87bbf0..3bc8a48 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -9634,13 +9634,23 @@ goto :oe_goback set inpt= set counter=0 set verified=0 +set _notfound= set targetedition= %line% echo: call :dk_color %Gray% "Installed Office editions: %_oIds%" call :dk_color %Gray% "You can select one of the following Office Editions." -if %winbuild% LSS 10240 echo Unsupported products such as 2019/2021/2024 are excluded from this list. +if %winbuild% LSS 10240 ( +echo Unsupported products such as 2019/2021/2024 are excluded from this list. +) else ( +for %%# in (2019 2021 2024) do ( +find /i "%%#" "%SystemRoot%\Temp\%list%.txt" %nul1% || ( +if defined _notfound (set _notfound=%%#, !_notfound!) else (set _notfound=%%#) +) +) +if defined _notfound call :dk_color %Gray% "Office !_notfound! is not in this list because old version of Office is installed." +) %line% echo: diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 0797a22..5cdbfe0 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -522,13 +522,23 @@ goto :oe_goback set inpt= set counter=0 set verified=0 +set _notfound= set targetedition= %line% echo: call :dk_color %Gray% "Installed Office editions: %_oIds%" call :dk_color %Gray% "You can select one of the following Office Editions." -if %winbuild% LSS 10240 echo Unsupported products such as 2019/2021/2024 are excluded from this list. +if %winbuild% LSS 10240 ( +echo Unsupported products such as 2019/2021/2024 are excluded from this list. +) else ( +for %%# in (2019 2021 2024) do ( +find /i "%%#" "%SystemRoot%\Temp\%list%.txt" %nul1% || ( +if defined _notfound (set _notfound=%%#, !_notfound!) else (set _notfound=%%#) +) +) +if defined _notfound call :dk_color %Gray% "Office !_notfound! is not in this list because old version of Office is installed." +) %line% echo: From 1c9fe0815e81c38e4203d11ed556bcbb1c02194f Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 3 Nov 2024 05:01:19 +0530 Subject: [PATCH 027/132] Bug fix - Add a missing label in change edition section in AIO --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 3bc8a48..c1e1e87 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -9001,6 +9001,17 @@ exit /b ::======================================================================================================================================== +:: Get Edition list + +:ced_edilist + +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do call set "_wtarget= !_wtarget! %%a " +exit /b + +::======================================================================================================================================== + :: Check pending reboot flags :ced_rebootflag From 9b568d4b4e4f1dea23e6ee2685f889525dc17195 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 3 Nov 2024 05:45:45 +0530 Subject: [PATCH 028/132] Mention all W10 keys in change edition because of issues with x86PS / pkeyhelper.dll on W10 ARM64 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 14 +++++++++++++- .../Change_Windows_Edition.cmd | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index c1e1e87..d5f26c8 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -9325,11 +9325,15 @@ if (!$Dism::_DismSetEdition($Session, "$TargetEdition", "$Key", 0, 0, 0)) { :: Separator = _ :: For Windows 10/11 editions, HWID key is listed where ever possible, in Server versions, KMS key is listed where ever possible. -:: Only RS3 and older version Generic keys are stored here, later ones are extracted from the pkeyhelper.dll itself +:: For Windows, generic keys are mentioned till 22000 and for Server, generic keys are mentioned till 17763, later ones are extracted from the pkeyhelper.dll :changeeditiondata +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( if %winbuild% GTR 17763 exit /b +) else ( +if %winbuild% GEQ 22000 exit /b +) if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=) set h= @@ -9347,8 +9351,12 @@ YTMG3-N6DKC-DKB77-7M9GH-8HV%h%X7______Retail_Core XKCNC-J26Q9-KFHD2-FKTHY-KD7%h%2Y__OEM:NONSLP_PPIPro YNMGQ-8RYV3-4PGQ3-C8XTP-7CF%h%BY______Retail_Education 84NGF-MHBT6-FXBX8-QWJK7-DRR%h%8H______Retail_EducationN +KCNVH-YKWX8-GJJB9-H9FDT-6F7%h%W2__Volume:MAK_EnterpriseS_VB +43TBQ-NH92J-XKTM7-KT3KK-P39%h%PB__OEM:NONSLP_EnterpriseS_RS5 NK96Y-D9CD8-W44CQ-R8YTK-DYJ%h%WX__OEM:NONSLP_EnterpriseS_RS1 FWN7H-PF93Q-4GGP8-M8RF3-MDW%h%WW__OEM:NONSLP_EnterpriseS_TH +RQFNW-9TPM3-JQ73T-QV4VQ-DV9%h%PT__Volume:MAK_EnterpriseSN_VB +M33WV-NHY3C-R7FPM-BQGPT-239%h%PG__Volume:MAK_EnterpriseSN_RS5 2DBW3-N2PJG-MVHW3-G7TDK-9HK%h%R4__Volume:MAK_EnterpriseSN_RS1 NTX6B-BRYC2-K6786-F6MVQ-M7V%h%2X__Volume:MAK_EnterpriseSN_TH G3KNM-CHG6T-R36X3-9QDG6-8M8%h%K9______Retail_ProfessionalSingleLanguage @@ -9360,6 +9368,10 @@ GJTYN-HDMQY-FRR76-HVGC7-QPF%h%8P______Retail_ProfessionalEducationN C4NTJ-CX6Q2-VXDMR-XVKGM-F9D%h%JC__Volume:MAK_EnterpriseG 46PN6-R9BK9-CVHKB-HWQ9V-MBJ%h%Y8__Volume:MAK_EnterpriseGN NJCF7-PW8QT-3324D-688JX-2YV%h%66______Retail_ServerRdsh +XQQYW-NFFMW-XJPBH-K8732-CKF%h%FD______OEM:DM_IoTEnterprise +QPM6N-7J2WJ-P88HH-P3YRH-YY7%h%4H__OEM:NONSLP_IoTEnterpriseS +K9VKN-3BGWV-Y624W-MCRMQ-BHD%h%CD______Retail_CloudEditionN +KY7PN-VR6RX-83W6Y-6DDYQ-T6R%h%4W______Retail_CloudEdition V3WVW-N2PV2-CGWC3-34QGF-VMJ%h%2C______Retail_Cloud NH9J3-68WK7-6FB93-4K3DF-DJ4%h%F6______Retail_CloudN 2HN6V-HGTM8-6C97C-RK67V-JQP%h%FD______Retail_CloudE diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 9e6287b..7ed4422 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -1275,11 +1275,15 @@ if (!$Dism::_DismSetEdition($Session, "$TargetEdition", "$Key", 0, 0, 0)) { :: Separator = _ :: For Windows 10/11 editions, HWID key is listed where ever possible, in Server versions, KMS key is listed where ever possible. -:: Only RS3 and older version Generic keys are stored here, later ones are extracted from the pkeyhelper.dll itself +:: For Windows, generic keys are mentioned till 22000 and for Server, generic keys are mentioned till 17763, later ones are extracted from the pkeyhelper.dll :changeeditiondata +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( if %winbuild% GTR 17763 exit /b +) else ( +if %winbuild% GEQ 22000 exit /b +) if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=) set h= @@ -1297,8 +1301,12 @@ YTMG3-N6DKC-DKB77-7M9GH-8HV%h%X7______Retail_Core XKCNC-J26Q9-KFHD2-FKTHY-KD7%h%2Y__OEM:NONSLP_PPIPro YNMGQ-8RYV3-4PGQ3-C8XTP-7CF%h%BY______Retail_Education 84NGF-MHBT6-FXBX8-QWJK7-DRR%h%8H______Retail_EducationN +KCNVH-YKWX8-GJJB9-H9FDT-6F7%h%W2__Volume:MAK_EnterpriseS_VB +43TBQ-NH92J-XKTM7-KT3KK-P39%h%PB__OEM:NONSLP_EnterpriseS_RS5 NK96Y-D9CD8-W44CQ-R8YTK-DYJ%h%WX__OEM:NONSLP_EnterpriseS_RS1 FWN7H-PF93Q-4GGP8-M8RF3-MDW%h%WW__OEM:NONSLP_EnterpriseS_TH +RQFNW-9TPM3-JQ73T-QV4VQ-DV9%h%PT__Volume:MAK_EnterpriseSN_VB +M33WV-NHY3C-R7FPM-BQGPT-239%h%PG__Volume:MAK_EnterpriseSN_RS5 2DBW3-N2PJG-MVHW3-G7TDK-9HK%h%R4__Volume:MAK_EnterpriseSN_RS1 NTX6B-BRYC2-K6786-F6MVQ-M7V%h%2X__Volume:MAK_EnterpriseSN_TH G3KNM-CHG6T-R36X3-9QDG6-8M8%h%K9______Retail_ProfessionalSingleLanguage @@ -1310,6 +1318,10 @@ GJTYN-HDMQY-FRR76-HVGC7-QPF%h%8P______Retail_ProfessionalEducationN C4NTJ-CX6Q2-VXDMR-XVKGM-F9D%h%JC__Volume:MAK_EnterpriseG 46PN6-R9BK9-CVHKB-HWQ9V-MBJ%h%Y8__Volume:MAK_EnterpriseGN NJCF7-PW8QT-3324D-688JX-2YV%h%66______Retail_ServerRdsh +XQQYW-NFFMW-XJPBH-K8732-CKF%h%FD______OEM:DM_IoTEnterprise +QPM6N-7J2WJ-P88HH-P3YRH-YY7%h%4H__OEM:NONSLP_IoTEnterpriseS +K9VKN-3BGWV-Y624W-MCRMQ-BHD%h%CD______Retail_CloudEditionN +KY7PN-VR6RX-83W6Y-6DDYQ-T6R%h%4W______Retail_CloudEdition V3WVW-N2PV2-CGWC3-34QGF-VMJ%h%2C______Retail_Cloud NH9J3-68WK7-6FB93-4K3DF-DJ4%h%F6______Retail_CloudN 2HN6V-HGTM8-6C97C-RK67V-JQP%h%FD______Retail_CloudE From 0477cf13e1f6cf9bb2e69d6416fefd295a1c5c07 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 3 Nov 2024 06:18:19 +0530 Subject: [PATCH 029/132] Fix repair setup detection on W10 ARM64 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 35 +++++++++------------ MAS/Separate-Files-Version/Troubleshoot.cmd | 35 +++++++++------------ 2 files changed, 30 insertions(+), 40 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index d5f26c8..24f372d 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -7973,14 +7973,6 @@ echo: call :dk_color %Blue% "Repairing Office licenses..." 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 - -if /i "%arch%"=="x86" ( -set arch=X86 -) else ( -set arch=X64 -) - for %%# in (68 86) do ( for %%A in (msi14 msi15 msi16 c2r14 c2r15 c2r16) do (set %%A_%%#=&set %%Arepair%%#=) ) @@ -7998,10 +7990,10 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v P for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_86=Office 16.0 MSI x86" & call :getrepairsetup msi16repair86 16) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & call :getrepairsetup msi16repair68 16) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_86=Office 15.0 C2R x86" & set "c2r15repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_68=Office 15.0 C2R x86/x64" & set "c2r15repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_86=Office 16.0 C2R x86" & set "c2r16repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_68=Office 16.0 C2R x86/x64" & set "c2r16repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe") +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_86=Office 15.0 C2R x86" & call :getc2rrepair c2r15repair86 integratedoffice.exe) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_68=Office 15.0 C2R x86/x64" & call :getc2rrepair c2r15repair68 integratedoffice.exe) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_86=Office 16.0 C2R x86" & call :getc2rrepair c2r16repair86 OfficeClickToRun.exe) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_68=Office 16.0 C2R x86/x64" & call :getc2rrepair c2r16repair68 OfficeClickToRun.exe) set uwp16= if %winbuild% GEQ 10240 ( @@ -8062,11 +8054,8 @@ pause %nul1% if defined uwp16 ( echo: -echo Note: Skipping repair for Office 16.0 UWP... -echo You need to use the Reset option in Windows Settings instead. -echo ________________________________________________________________ +echo Skipping repair for Office 16.0 UWP... echo: -start ms-settings:appsfeatures ) set c2r14= @@ -8075,11 +8064,8 @@ if defined c2r14_86 set c2r14=1 if defined c2r14 ( echo: -echo Note: Skipping repair for Office 14.0 C2R... -echo You need to use the Repair option in Windows Settings for it. -echo ________________________________________________________________ +echo Skipping repair for Office 14.0 C2R... echo: -start appwiz.cpl ) if defined msi14_68 if exist "%msi14repair68%" echo Running - "%msi14repair68%" & "%msi14repair68%" @@ -8102,6 +8088,15 @@ echo: call :dk_color %Green% "Finished" goto :at_back +:getc2rrepair + +for %%# in (X86 X64) do ( +if exist "%systemdrive%\Program Files\Microsoft Office 15\Client%%#\%2" ( +set "%1=%systemdrive%\Program Files\Microsoft Office 15\Client%%#\%2" +) +) +exit /b + :getrepairsetup set "_common86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE%2\Office Setup Controller\setup.exe" diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index e1fe1cb..62f2992 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -790,14 +790,6 @@ echo: call :dk_color %Blue% "Repairing Office licenses..." 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 - -if /i "%arch%"=="x86" ( -set arch=X86 -) else ( -set arch=X64 -) - for %%# in (68 86) do ( for %%A in (msi14 msi15 msi16 c2r14 c2r15 c2r16) do (set %%A_%%#=&set %%Arepair%%#=) ) @@ -815,10 +807,10 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v P for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_86=Office 16.0 MSI x86" & call :getrepairsetup msi16repair86 16) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & call :getrepairsetup msi16repair68 16) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_86=Office 15.0 C2R x86" & set "c2r15repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_68=Office 15.0 C2R x86/x64" & set "c2r15repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\integratedoffice.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_86=Office 16.0 C2R x86" & set "c2r16repair86=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_68=Office 16.0 C2R x86/x64" & set "c2r16repair68=%systemdrive%\Program Files\Microsoft Office 15\Client%arch%\OfficeClickToRun.exe") +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_86=Office 15.0 C2R x86" & call :getc2rrepair c2r15repair86 integratedoffice.exe) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_68=Office 15.0 C2R x86/x64" & call :getc2rrepair c2r15repair68 integratedoffice.exe) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_86=Office 16.0 C2R x86" & call :getc2rrepair c2r16repair86 OfficeClickToRun.exe) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_68=Office 16.0 C2R x86/x64" & call :getc2rrepair c2r16repair68 OfficeClickToRun.exe) set uwp16= if %winbuild% GEQ 10240 ( @@ -879,11 +871,8 @@ pause %nul1% if defined uwp16 ( echo: -echo Note: Skipping repair for Office 16.0 UWP... -echo You need to use the Reset option in Windows Settings instead. -echo ________________________________________________________________ +echo Skipping repair for Office 16.0 UWP... echo: -start ms-settings:appsfeatures ) set c2r14= @@ -892,11 +881,8 @@ if defined c2r14_86 set c2r14=1 if defined c2r14 ( echo: -echo Note: Skipping repair for Office 14.0 C2R... -echo You need to use the Repair option in Windows Settings for it. -echo ________________________________________________________________ +echo Skipping repair for Office 14.0 C2R... echo: -start appwiz.cpl ) if defined msi14_68 if exist "%msi14repair68%" echo Running - "%msi14repair68%" & "%msi14repair68%" @@ -919,6 +905,15 @@ echo: call :dk_color %Green% "Finished" goto :at_back +:getc2rrepair + +for %%# in (X86 X64) do ( +if exist "%systemdrive%\Program Files\Microsoft Office 15\Client%%#\%2" ( +set "%1=%systemdrive%\Program Files\Microsoft Office 15\Client%%#\%2" +) +) +exit /b + :getrepairsetup set "_common86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE%2\Office Setup Controller\setup.exe" From 9d1964cedaeb5486bf839083f342bf2b8d90fcc9 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 3 Nov 2024 08:31:56 +0530 Subject: [PATCH 030/132] Increase time out --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 24 +++++++++---------- .../Activators/HWID_Activation.cmd | 16 ++++++------- .../Activators/KMS38_Activation.cmd | 14 +++++------ .../Activators/Ohook_Activation_AIO.cmd | 8 +++---- .../Activators/Online_KMS_Activation.cmd | 10 ++++---- .../Change_Office_Edition.cmd | 4 ++-- .../Change_Windows_Edition.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 8 files changed, 40 insertions(+), 40 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 24f372d..42da352 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -780,7 +780,7 @@ echo Generating GenuineTicket.xml [Successful] set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" %_xmlexist% ( -%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 20 | Out-Null" %_xmlexist% timeout /t 2 %nul% %_xmlexist% timeout /t 2 %nul% @@ -849,7 +849,7 @@ echo: set error=1 call :dk_color %Red% "Deleting IdentityCRL Registry [Failed] [%_ident%]" ) -for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") +for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 20 | Out-Null") call :dk_refresh call :dk_act call :dk_checkperm @@ -918,7 +918,7 @@ reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || set wucor if defined wucorrupt ( call :dk_color %Red% "Checking Windows Update Registry [Corruption Found]" ) else ( -%psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 20 | Out-Null" sc query wuauserv | find /i "RUNNING" %nul% || ( set wuerror=1 sc start wuauserv %nul% @@ -1185,7 +1185,7 @@ reg delete "%ruleskey%" /v "SuppressRulesEngine" /f %nul% set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); set r2=%r1% [void]$TB.DefinePInvokeMethod('SLpTriggerServiceWorker', 'sppc.dll', 22, 1, [Int32], @([UInt32], [IntPtr], [String], [UInt32]), 1, 3); set d1=%r2% [void]$TB.CreateType()::SLpTriggerServiceWorker(0, 0, 'reeval', 0) -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; %d1%" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; %d1%" exit /b :: Get Activation IDs from licensing files if not found through WMI @@ -1254,7 +1254,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1425,7 +1425,7 @@ set errorcode= set checkerror= sc query %%# | find /i "RUNNING" %nul% || ( -%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 20 | Out-Null" set errorcode=!errorlevel! sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) @@ -1614,7 +1614,7 @@ echo Checking SPP In IFEO [%_sppint%] for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" set error=1 ) @@ -1663,7 +1663,7 @@ set showfix=1 call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" @@ -3930,7 +3930,7 @@ set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" :: Stop sppsvc -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" sc query sppsvc | find /i "STOPPED" %nul% && ( echo Stopping sppsvc Service [Successful] @@ -3939,7 +3939,7 @@ call :dk_color %Gray% "Stopping sppsvc Service [Failed]" ) %_xmlexist% ( -%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 20 | Out-Null" %_xmlexist% timeout /t 2 %nul% %_xmlexist% timeout /t 2 %nul% @@ -7782,7 +7782,7 @@ echo [Successful] echo: echo Restarting wlidsvc ^& LicenseManager services... -for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") +for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 20 | Out-Null") ::======================================================================================================================================== @@ -9667,7 +9667,7 @@ find /i "%%#" "%SystemRoot%\Temp\%list%.txt" %nul1% || ( if defined _notfound (set _notfound=%%#, !_notfound!) else (set _notfound=%%#) ) ) -if defined _notfound call :dk_color %Gray% "Office !_notfound! is not in this list because old version of Office is installed." +if defined _notfound call :dk_color %Gray% "Office !_notfound! is not in this list because old version [%_version%] of Office is installed." ) %line% echo: diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index c2d039e..ed5b8b5 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -543,7 +543,7 @@ echo Generating GenuineTicket.xml [Successful] set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" %_xmlexist% ( -%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 20 | Out-Null" %_xmlexist% timeout /t 2 %nul% %_xmlexist% timeout /t 2 %nul% @@ -612,7 +612,7 @@ echo: set error=1 call :dk_color %Red% "Deleting IdentityCRL Registry [Failed] [%_ident%]" ) -for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") +for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 20 | Out-Null") call :dk_refresh call :dk_act call :dk_checkperm @@ -681,7 +681,7 @@ reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || set wucor if defined wucorrupt ( call :dk_color %Red% "Checking Windows Update Registry [Corruption Found]" ) else ( -%psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 20 | Out-Null" sc query wuauserv | find /i "RUNNING" %nul% || ( set wuerror=1 sc start wuauserv %nul% @@ -948,7 +948,7 @@ reg delete "%ruleskey%" /v "SuppressRulesEngine" /f %nul% set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); set r2=%r1% [void]$TB.DefinePInvokeMethod('SLpTriggerServiceWorker', 'sppc.dll', 22, 1, [Int32], @([UInt32], [IntPtr], [String], [UInt32]), 1, 3); set d1=%r2% [void]$TB.CreateType()::SLpTriggerServiceWorker(0, 0, 'reeval', 0) -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; %d1%" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; %d1%" exit /b :: Get Activation IDs from licensing files if not found through WMI @@ -1017,7 +1017,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1188,7 +1188,7 @@ set errorcode= set checkerror= sc query %%# | find /i "RUNNING" %nul% || ( -%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 20 | Out-Null" set errorcode=!errorlevel! sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) @@ -1377,7 +1377,7 @@ echo Checking SPP In IFEO [%_sppint%] for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" set error=1 ) @@ -1426,7 +1426,7 @@ set showfix=1 call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 5cabfd2..593f9e9 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -657,7 +657,7 @@ set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" :: Stop sppsvc -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" sc query sppsvc | find /i "STOPPED" %nul% && ( echo Stopping sppsvc Service [Successful] @@ -666,7 +666,7 @@ call :dk_color %Gray% "Stopping sppsvc Service [Failed]" ) %_xmlexist% ( -%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 20 | Out-Null" %_xmlexist% timeout /t 2 %nul% %_xmlexist% timeout /t 2 %nul% @@ -1075,7 +1075,7 @@ reg delete "%ruleskey%" /v "SuppressRulesEngine" /f %nul% set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); set r2=%r1% [void]$TB.DefinePInvokeMethod('SLpTriggerServiceWorker', 'sppc.dll', 22, 1, [Int32], @([UInt32], [IntPtr], [String], [UInt32]), 1, 3); set d1=%r2% [void]$TB.CreateType()::SLpTriggerServiceWorker(0, 0, 'reeval', 0) -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; %d1%" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; %d1%" exit /b :: Install License files using Powershell/WMI instead of slmgr.vbs @@ -1126,7 +1126,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1342,7 +1342,7 @@ set errorcode= set checkerror= sc query %%# | find /i "RUNNING" %nul% || ( -%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 20 | Out-Null" set errorcode=!errorlevel! sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) @@ -1531,7 +1531,7 @@ echo Checking SPP In IFEO [%_sppint%] for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" set error=1 ) @@ -1580,7 +1580,7 @@ set showfix=1 call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 14b201d..1336942 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1513,7 +1513,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1668,7 +1668,7 @@ set errorcode= set checkerror= sc query %%# | find /i "RUNNING" %nul% || ( -%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 20 | Out-Null" set errorcode=!errorlevel! sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) @@ -1857,7 +1857,7 @@ echo Checking SPP In IFEO [%_sppint%] for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" set error=1 ) @@ -1906,7 +1906,7 @@ set showfix=1 call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 5627c84..6048df5 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2487,7 +2487,7 @@ reg delete "%ruleskey%" /v "SuppressRulesEngine" /f %nul% set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); set r2=%r1% [void]$TB.DefinePInvokeMethod('SLpTriggerServiceWorker', 'sppc.dll', 22, 1, [Int32], @([UInt32], [IntPtr], [String], [UInt32]), 1, 3); set d1=%r2% [void]$TB.CreateType()::SLpTriggerServiceWorker(0, 0, 'reeval', 0) -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; %d1%" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; %d1%" exit /b :: Install License files using Powershell/WMI instead of slmgr.vbs @@ -2538,7 +2538,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -2754,7 +2754,7 @@ set errorcode= set checkerror= sc query %%# | find /i "RUNNING" %nul% || ( -%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 20 | Out-Null" set errorcode=!errorlevel! sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) @@ -2943,7 +2943,7 @@ echo Checking SPP In IFEO [%_sppint%] for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" set error=1 ) @@ -2992,7 +2992,7 @@ set showfix=1 call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 5cdbfe0..3031e0f 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -537,7 +537,7 @@ find /i "%%#" "%SystemRoot%\Temp\%list%.txt" %nul1% || ( if defined _notfound (set _notfound=%%#, !_notfound!) else (set _notfound=%%#) ) ) -if defined _notfound call :dk_color %Gray% "Office !_notfound! is not in this list because old version of Office is installed." +if defined _notfound call :dk_color %Gray% "Office !_notfound! is not in this list because old version [%_version%] of Office is installed." ) %line% echo: @@ -1374,7 +1374,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" exit /b :: Common lines used in PowerShell reflection code diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 7ed4422..e0d3dde 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -875,7 +875,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" exit /b :: Common lines used in PowerShell reflection code diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 62f2992..40e6489 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -599,7 +599,7 @@ echo [Successful] echo: echo Restarting wlidsvc ^& LicenseManager services... -for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") +for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 20 | Out-Null") ::======================================================================================================================================== From 0cbaa141c319958765d9a4d618d9f0b0b68f8b81 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 5 Nov 2024 17:43:20 +0530 Subject: [PATCH 031/132] Update keys --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 8 ++++---- .../Activators/Ohook_Activation_AIO.cmd | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 42da352..b1d52fb 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -3105,15 +3105,15 @@ for %%# in ( 15_191509f2-6977-456f-ab30-cf0492b1e93a_NB77V-RPFQ6-PMMKQ-T87DV-M4%f%D84_Retail________WordRetail 15_9cedef15-be37-4ff0-a08a-13a045540641_RPHPB-Y7NC4-3VYFM-DW7VD-G8%f%YJ8_MAK___________WordVolume :: Office 365 - 15.0 version -15_6337137e-7c07-4197-8986-bece6a76fc33_2P3C9-BQNJH-VCVPH-YDY6M-43%f%JPQ_Subscription__O365BusinessRetail +15_742178ed-6b28-42dd-b3d7-b7c0ea78741b_Y9NF9-M2QWD-FF6RJ-QJW36-RR%f%F2T_SubTest_______O365BusinessRetail 15_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail -15_149dbce7-a48e-44db-8364-a53386cd4580_2N382-D6PKK-QTX4D-2JJYK-M9%f%6P2_Subscription1_O365ProPlusRetail +15_e3dacc06-3bc2-4e13-8e59-8e05f3232325_H8DN8-Y2YP3-CR9JT-DHDR9-C7%f%GP3_Subscription2_O365ProPlusRetail 15_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail :: Office 365 - 16.0 version -16_6337137e-7c07-4197-8986-bece6a76fc33_2P3C9-BQNJH-VCVPH-YDY6M-43%f%JPQ_Subscription__O365BusinessRetail +16_742178ed-6b28-42dd-b3d7-b7c0ea78741b_Y9NF9-M2QWD-FF6RJ-QJW36-RR%f%F2T_SubTest_______O365BusinessRetail 16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_W62NQ-267QR-RTF74-PF2MH-JQ%f%MTH_Subscription__O365EduCloudRetail 16_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail -16_149dbce7-a48e-44db-8364-a53386cd4580_2N382-D6PKK-QTX4D-2JJYK-M9%f%6P2_Subscription1_O365ProPlusRetail +16_e3dacc06-3bc2-4e13-8e59-8e05f3232325_H8DN8-Y2YP3-CR9JT-DHDR9-C7%f%GP3_Subscription2_O365ProPlusRetail 16_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail :: Office 2016 16_bfa358b0-98f1-4125-842e-585fa13032e6_WHK4N-YQGHB-XWXCC-G3HYC-6J%f%F94_Retail________AccessRetail diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 1336942..0d0fc26 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2149,15 +2149,15 @@ for %%# in ( 15_191509f2-6977-456f-ab30-cf0492b1e93a_NB77V-RPFQ6-PMMKQ-T87DV-M4%f%D84_Retail________WordRetail 15_9cedef15-be37-4ff0-a08a-13a045540641_RPHPB-Y7NC4-3VYFM-DW7VD-G8%f%YJ8_MAK___________WordVolume :: Office 365 - 15.0 version -15_6337137e-7c07-4197-8986-bece6a76fc33_2P3C9-BQNJH-VCVPH-YDY6M-43%f%JPQ_Subscription__O365BusinessRetail +15_742178ed-6b28-42dd-b3d7-b7c0ea78741b_Y9NF9-M2QWD-FF6RJ-QJW36-RR%f%F2T_SubTest_______O365BusinessRetail 15_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail -15_149dbce7-a48e-44db-8364-a53386cd4580_2N382-D6PKK-QTX4D-2JJYK-M9%f%6P2_Subscription1_O365ProPlusRetail +15_e3dacc06-3bc2-4e13-8e59-8e05f3232325_H8DN8-Y2YP3-CR9JT-DHDR9-C7%f%GP3_Subscription2_O365ProPlusRetail 15_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail :: Office 365 - 16.0 version -16_6337137e-7c07-4197-8986-bece6a76fc33_2P3C9-BQNJH-VCVPH-YDY6M-43%f%JPQ_Subscription__O365BusinessRetail +16_742178ed-6b28-42dd-b3d7-b7c0ea78741b_Y9NF9-M2QWD-FF6RJ-QJW36-RR%f%F2T_SubTest_______O365BusinessRetail 16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_W62NQ-267QR-RTF74-PF2MH-JQ%f%MTH_Subscription__O365EduCloudRetail 16_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail -16_149dbce7-a48e-44db-8364-a53386cd4580_2N382-D6PKK-QTX4D-2JJYK-M9%f%6P2_Subscription1_O365ProPlusRetail +16_e3dacc06-3bc2-4e13-8e59-8e05f3232325_H8DN8-Y2YP3-CR9JT-DHDR9-C7%f%GP3_Subscription2_O365ProPlusRetail 16_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail :: Office 2016 16_bfa358b0-98f1-4125-842e-585fa13032e6_WHK4N-YQGHB-XWXCC-G3HYC-6J%f%F94_Retail________AccessRetail From fcb710a48aed6a69eacf574e6a16c559953de4e6 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 5 Nov 2024 22:23:02 +0530 Subject: [PATCH 032/132] Add an error code to detect WMI error --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- .../Activators/Ohook_Activation_AIO.cmd | 2 +- .../Activators/Online_KMS_Activation.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index b1d52fb..0544fcb 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1539,7 +1539,7 @@ if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nu if %_wmic% EQU 0 %psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1% if %errorlevel% NEQ 0 set wmifailed=1 -echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants +echo "%error_code%" | findstr /i "0x800410 0x800440 0x80131501" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants if defined wmifailed ( set error=1 call :dk_color %Red% "Checking WMI [Not Working]" @@ -8261,7 +8261,7 @@ if %errorlevel% NEQ 0 (set error=1& exit /b) %psc% "try { $null=([WMISEARCHER]'SELECT * FROM SoftwareLicensingService').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% cmd /c exit /b %errorlevel% -echo "0x%=ExitCode%" | findstr /i "0x800410 0x800440" %nul1% +echo "0x%=ExitCode%" | findstr /i "0x800410 0x800440 0x80131501" %nul1% if %errorlevel% EQU 0 set error=1 exit /b diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index ed5b8b5..5a8fee4 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1302,7 +1302,7 @@ if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nu if %_wmic% EQU 0 %psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1% if %errorlevel% NEQ 0 set wmifailed=1 -echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants +echo "%error_code%" | findstr /i "0x800410 0x800440 0x80131501" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants if defined wmifailed ( set error=1 call :dk_color %Red% "Checking WMI [Not Working]" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 593f9e9..cc19e3e 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1456,7 +1456,7 @@ if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nu if %_wmic% EQU 0 %psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1% if %errorlevel% NEQ 0 set wmifailed=1 -echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants +echo "%error_code%" | findstr /i "0x800410 0x800440 0x80131501" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants if defined wmifailed ( set error=1 call :dk_color %Red% "Checking WMI [Not Working]" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 0d0fc26..e890ae2 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1782,7 +1782,7 @@ if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nu if %_wmic% EQU 0 %psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1% if %errorlevel% NEQ 0 set wmifailed=1 -echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants +echo "%error_code%" | findstr /i "0x800410 0x800440 0x80131501" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants if defined wmifailed ( set error=1 call :dk_color %Red% "Checking WMI [Not Working]" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 6048df5..8a39d2b 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2868,7 +2868,7 @@ if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nu if %_wmic% EQU 0 %psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1% if %errorlevel% NEQ 0 set wmifailed=1 -echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants +echo "%error_code%" | findstr /i "0x800410 0x800440 0x80131501" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants if defined wmifailed ( set error=1 call :dk_color %Red% "Checking WMI [Not Working]" diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 40e6489..131daa6 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1078,7 +1078,7 @@ if %errorlevel% NEQ 0 (set error=1& exit /b) %psc% "try { $null=([WMISEARCHER]'SELECT * FROM SoftwareLicensingService').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% cmd /c exit /b %errorlevel% -echo "0x%=ExitCode%" | findstr /i "0x800410 0x800440" %nul1% +echo "0x%=ExitCode%" | findstr /i "0x800410 0x800440 0x80131501" %nul1% if %errorlevel% EQU 0 set error=1 exit /b From 99954a905601654388199f1d71ca94d112dce191 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 8 Nov 2024 02:35:41 +0530 Subject: [PATCH 033/132] Add troubleshooting info for IMAGE_STATE_UNDEPLOYABLE --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 11 +++++++++-- .../Activators/HWID_Activation.cmd | 11 +++++++++-- .../Activators/KMS38_Activation.cmd | 11 +++++++++-- .../Activators/Ohook_Activation_AIO.cmd | 11 +++++++++-- .../Activators/Online_KMS_Activation.cmd | 11 +++++++++-- 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 0544fcb..10b87fa 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1455,14 +1455,21 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option ) +:: https://learn.microsoft.com/windows-hardware/manufacture/desktop/windows-setup-states + for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) + if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" -echo "%imagestate%" | find /i "RESEAL" %nul% && ( set error=1 set showfix=1 +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" +echo "%imagestate%" | find /i "RESEAL" %nul% && ( call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) +echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "If the activation fails, do this - " %_Yellow% " %mas%in-place_repair_upgrade" +) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 5a8fee4..cc48f02 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1218,14 +1218,21 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option ) +:: https://learn.microsoft.com/windows-hardware/manufacture/desktop/windows-setup-states + for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) + if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" -echo "%imagestate%" | find /i "RESEAL" %nul% && ( set error=1 set showfix=1 +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" +echo "%imagestate%" | find /i "RESEAL" %nul% && ( call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) +echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "If the activation fails, do this - " %_Yellow% " %mas%in-place_repair_upgrade" +) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index cc19e3e..c0bfd47 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1372,14 +1372,21 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option ) +:: https://learn.microsoft.com/windows-hardware/manufacture/desktop/windows-setup-states + for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) + if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" -echo "%imagestate%" | find /i "RESEAL" %nul% && ( set error=1 set showfix=1 +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" +echo "%imagestate%" | find /i "RESEAL" %nul% && ( call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) +echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "If the activation fails, do this - " %_Yellow% " %mas%in-place_repair_upgrade" +) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index e890ae2..1b82bac 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1698,14 +1698,21 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option ) +:: https://learn.microsoft.com/windows-hardware/manufacture/desktop/windows-setup-states + for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) + if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" -echo "%imagestate%" | find /i "RESEAL" %nul% && ( set error=1 set showfix=1 +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" +echo "%imagestate%" | find /i "RESEAL" %nul% && ( call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) +echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "If the activation fails, do this - " %_Yellow% " %mas%in-place_repair_upgrade" +) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 8a39d2b..eb593f8 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2784,14 +2784,21 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option ) +:: https://learn.microsoft.com/windows-hardware/manufacture/desktop/windows-setup-states + for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) + if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" -echo "%imagestate%" | find /i "RESEAL" %nul% && ( set error=1 set showfix=1 +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" +echo "%imagestate%" | find /i "RESEAL" %nul% && ( call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) +echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "If the activation fails, do this - " %_Yellow% " %mas%in-place_repair_upgrade" +) ) From d06ba7fc4cd1c3dd650ca0ca020cfa6f64cfee4a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 8 Nov 2024 05:21:08 +0530 Subject: [PATCH 034/132] Show info to read blue lines --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 10 ++++++++++ .../Activators/HWID_Activation.cmd | 6 ++++++ .../Activators/KMS38_Activation.cmd | 6 ++++++ .../Activators/Ohook_Activation_AIO.cmd | 6 ++++++ .../Activators/Online_KMS_Activation.cmd | 6 ++++++ MAS/Separate-Files-Version/Change_Office_Edition.cmd | 10 ++++++++++ MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 6 ++++++ MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 6 ++++++ MAS/Separate-Files-Version/Troubleshoot.cmd | 6 ++++++ 9 files changed, 62 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 10b87fa..6fe330e 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1000,6 +1000,7 @@ set "Red="41;97m"" set "Gray="100;97m"" set "Green="42;97m"" set "Blue="44;97m"" +set "White="107;91m"" set "_Red="40;91m"" set "_White="40;37m"" set "_Green="40;92m"" @@ -1009,6 +1010,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" +set "White="White" "DarkRed"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" @@ -1838,6 +1840,10 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) @@ -10201,6 +10207,10 @@ call :oe_tempcleanup echo: if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index cc48f02..6352511 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -763,6 +763,7 @@ set "Red="41;97m"" set "Gray="100;97m"" set "Green="42;97m"" set "Blue="44;97m"" +set "White="107;91m"" set "_Red="40;91m"" set "_White="40;37m"" set "_Green="40;92m"" @@ -772,6 +773,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" +set "White="White" "DarkRed"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" @@ -1601,6 +1603,10 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index c0bfd47..534cb08 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -874,6 +874,7 @@ set "Red="41;97m"" set "Gray="100;97m"" set "Green="42;97m"" set "Blue="44;97m"" +set "White="107;91m"" set "_Red="40;91m"" set "_White="40;37m"" set "_Green="40;92m"" @@ -883,6 +884,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" +set "White="White" "DarkRed"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" @@ -1755,6 +1757,10 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 1b82bac..a509e5c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1368,6 +1368,7 @@ set "Red="41;97m"" set "Gray="100;97m"" set "Green="42;97m"" set "Blue="44;97m"" +set "White="107;91m"" set "_Red="40;91m"" set "_White="40;37m"" set "_Green="40;92m"" @@ -1377,6 +1378,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" +set "White="White" "DarkRed"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" @@ -2081,6 +2083,10 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index eb593f8..e02ca5c 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2305,6 +2305,7 @@ set "Red="41;97m"" set "Gray="100;97m"" set "Green="42;97m"" set "Blue="44;97m"" +set "White="107;91m"" set "_Red="40;91m"" set "_White="40;37m"" set "_Green="40;92m"" @@ -2314,6 +2315,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" +set "White="White" "DarkRed"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" @@ -3167,6 +3169,10 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 3031e0f..3975acb 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1064,6 +1064,10 @@ call :oe_tempcleanup echo: if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) @@ -1323,6 +1327,7 @@ set "Red="41;97m"" set "Gray="100;97m"" set "Green="42;97m"" set "Blue="44;97m"" +set "White="107;91m"" set "_Red="40;91m"" set "_White="40;37m"" set "_Green="40;92m"" @@ -1332,6 +1337,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" +set "White="White" "DarkRed"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" @@ -1414,6 +1420,10 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index e0d3dde..b4d0f5a 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -797,6 +797,7 @@ set "Red="41;97m"" set "Gray="100;97m"" set "Green="42;97m"" set "Blue="44;97m"" +set "White="107;91m"" set "_Red="40;91m"" set "_White="40;37m"" set "_Green="40;92m"" @@ -806,6 +807,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" +set "White="White" "DarkRed"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" @@ -995,6 +997,10 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 36cc9b5..36bc8a3 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -707,6 +707,10 @@ echo ______________________________________________________________ echo: if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) @@ -743,6 +747,7 @@ set "Red="41;97m"" set "Gray="100;97m"" set "Green="42;97m"" set "Blue="44;97m"" +set "White="107;91m"" set "_Red="40;91m"" set "_White="40;37m"" set "_Green="40;92m"" @@ -752,6 +757,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" +set "White="White" "DarkRed"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 131daa6..2ee934f 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1384,6 +1384,10 @@ $key.SetAccessControl($acl) echo: if defined fixes ( +call :dk_color %White% " " +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color %White% " " +echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) @@ -1440,6 +1444,7 @@ set "Red="41;97m"" set "Gray="100;97m"" set "Green="42;97m"" set "Blue="44;97m"" +set "White="107;91m"" set "_Red="40;91m"" set "_White="40;37m"" set "_Green="40;92m"" @@ -1449,6 +1454,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" +set "White="White" "DarkRed"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" From 1db017f1f1d8960cbd18afe384358bcf8ac6f5a2 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 8 Nov 2024 19:59:34 +0530 Subject: [PATCH 035/132] Better info when key is not found --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 54 ++++++++++++++----- .../Activators/KMS38_Activation.cmd | 27 +++++++--- .../Activators/Online_KMS_Activation.cmd | 27 +++++++--- 3 files changed, 80 insertions(+), 28 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 6fe330e..0a29b3c 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -3808,18 +3808,29 @@ call :dk_color %Red% "Checking Alternate Edition for KMS38 [%altedition% Acti ) if not defined key if not defined _gvlk ( -%eline% +echo: echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] -if not defined skunotfound ( -echo This product does not support KMS38 activation. -echo Make sure you are using the latest version of the script. -set fixes=%fixes% %mas% -echo %mas% -) else ( -echo Required license files were not found in %SysPath%\spp\tokens\skus\ + +if exist "%SysPath%\spp\tokens\skus\%osedition%\*GVLK*.xrm-ms" set sppks=1 + +if defined skunotfound ( +call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) + +if defined sppks ( +call :dk_color %Red% "KMS38 activation is supported but failed to find the key." +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + +if not defined skunotfound if not defined sppks ( +call :dk_color %Red% "This product does not support KMS38 activation." +call :dk_color %Blue% "Make sure you are using the latest version of the script." +set fixes=%fixes% %mas% +echo %mas% +) echo: goto dk_done ) @@ -4617,15 +4628,30 @@ call :dk_color %Red% "Checking Alternate Edition For %KS% [%altedition% Act if not defined key if not defined _gvlk ( echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] -if not defined skunotfound ( -echo This product does not support %KS% activation. -set fixes=%fixes% %mas%unsupported_products_activation -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%unsupported_products_activation" -) else ( -echo Required license files not found in %SysPath%\spp\tokens\skus\ + +if %winbuild% GEQ 9200 if exist "%SysPath%\spp\tokens\skus\%osedition%\*GVLK*.xrm-ms" set sppks=1 +if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*VLKMS*.xrm-ms" set sppks=1 +if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*VL-BYPASS*.xrm-ms" set sppks=1 + +if defined skunotfound ( +call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) + +if defined sppks ( +call :dk_color %Red% "%KS% activation is supported but failed to find the %KS% key." +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + +if not defined skunotfound if not defined sppks ( +call :dk_color %Red% "This product does not support %KS% activation." +if %winbuild% LSS 9200 ( +call :dk_color2 %Blue% "Use the alternative activator listed here - " %_Yellow% " %mas%unsupported_products_activation" +) +set fixes=%fixes% %mas%unsupported_products_activation +) echo: goto :ks_office ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 534cb08..c2a6eef 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -522,18 +522,29 @@ call :dk_color %Red% "Checking Alternate Edition for KMS38 [%altedition% Acti ) if not defined key if not defined _gvlk ( -%eline% +echo: echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] -if not defined skunotfound ( -echo This product does not support KMS38 activation. -echo Make sure you are using the latest version of the script. -set fixes=%fixes% %mas% -echo %mas% -) else ( -echo Required license files were not found in %SysPath%\spp\tokens\skus\ + +if exist "%SysPath%\spp\tokens\skus\%osedition%\*GVLK*.xrm-ms" set sppks=1 + +if defined skunotfound ( +call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) + +if defined sppks ( +call :dk_color %Red% "KMS38 activation is supported but failed to find the key." +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + +if not defined skunotfound if not defined sppks ( +call :dk_color %Red% "This product does not support KMS38 activation." +call :dk_color %Blue% "Make sure you are using the latest version of the script." +set fixes=%fixes% %mas% +echo %mas% +) echo: goto dk_done ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index e02ca5c..bdc96dc 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -562,15 +562,30 @@ call :dk_color %Red% "Checking Alternate Edition For %KS% [%altedition% Act if not defined key if not defined _gvlk ( echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] -if not defined skunotfound ( -echo This product does not support %KS% activation. -set fixes=%fixes% %mas%unsupported_products_activation -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%unsupported_products_activation" -) else ( -echo Required license files not found in %SysPath%\spp\tokens\skus\ + +if %winbuild% GEQ 9200 if exist "%SysPath%\spp\tokens\skus\%osedition%\*GVLK*.xrm-ms" set sppks=1 +if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*VLKMS*.xrm-ms" set sppks=1 +if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*VL-BYPASS*.xrm-ms" set sppks=1 + +if defined skunotfound ( +call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) + +if defined sppks ( +call :dk_color %Red% "%KS% activation is supported but failed to find the %KS% key." +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + +if not defined skunotfound if not defined sppks ( +call :dk_color %Red% "This product does not support %KS% activation." +if %winbuild% LSS 9200 ( +call :dk_color2 %Blue% "Use the alternative activator listed here - " %_Yellow% " %mas%unsupported_products_activation" +) +set fixes=%fixes% %mas%unsupported_products_activation +) echo: goto :ks_office ) From 5e712529936ad1ef70cd682e76ee9eeac47ffafd Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 8 Nov 2024 20:10:19 +0530 Subject: [PATCH 036/132] Change DarkRed to Red --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 2 +- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 0a29b3c..aefa363 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1010,7 +1010,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" -set "White="White" "DarkRed"" +set "White="White" "Red"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 6352511..fa0a6f4 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -773,7 +773,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" -set "White="White" "DarkRed"" +set "White="White" "Red"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index c2a6eef..ad5b239 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -895,7 +895,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" -set "White="White" "DarkRed"" +set "White="White" "Red"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index a509e5c..17cd223 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1378,7 +1378,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" -set "White="White" "DarkRed"" +set "White="White" "Red"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index bdc96dc..9bbc706 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2330,7 +2330,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" -set "White="White" "DarkRed"" +set "White="White" "Red"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 3975acb..d01a078 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1337,7 +1337,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" -set "White="White" "DarkRed"" +set "White="White" "Red"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index b4d0f5a..07e7e99 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -807,7 +807,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" -set "White="White" "DarkRed"" +set "White="White" "Red"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 36bc8a3..b7f5409 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -757,7 +757,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" -set "White="White" "DarkRed"" +set "White="White" "Red"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 2ee934f..29a5374 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1454,7 +1454,7 @@ set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" -set "White="White" "DarkRed"" +set "White="White" "Red"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" From d1dca45710203de32fc7bfe0b3a67061dd135bbd Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 8 Nov 2024 21:06:48 +0530 Subject: [PATCH 037/132] Update ReadMe --- README.md | 61 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 38744e5..d0a3f9a 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,7 @@

Microsoft Activation Scripts (MAS)

-

A Windows and Office activator using HWID / Ohook / KMS38 / Online KMS activation methods, with a focus on open-source code and fewer antivirus detections.

- -

- Chat with us without signup - MAS on Reddit - Follow us on X -

+

Open-source Windows and Office activator featuring HWID, Ohook, KMS38, and Online KMS activation methods, along with advanced troubleshooting.


@@ -21,32 +15,47 @@ ``` irm https://get.activated.win | iex ``` -or (deprecated, will be retired on Dec 31 2024, use above instead) +3. You will see the activation options. Choose (1) HWID for Windows activation. Choose (2) Ohook for Office activation. +4. That's all. + +
+ More options + +- Alternatively, you can use the following (It will be deprecated in the future.) ``` irm https://massgrave.dev/get | iex ``` -3. You will see the activation options. Choose [1] HWID for Windows activation. Choose [2] Ohook for Office activation. -4. That's all. +- The URL `get.activated.win` might be blocked by some DNS services because it is a new domain. + +
--- -- On older Windows builds you may need to run the below command before, -`[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12` -- The Powershell method does not work on Windows 7. Use the Method 2 - Traditional instead. -- The URL get.activated.win may be blocked by some DNS services because it is a new domain. - ### Method 2 - Traditional (Windows 7 and later) -1. Download the file under the code button from [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts) / [Azure DevOps](https://dev.azure.com/massgrave/_git/Microsoft-Activation-Scripts) / [Self-hosted Git](https://git.activated.win/massgrave/Microsoft-Activation-Scripts) +
+ Info + +1. Download the file under the code button from [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts) or [Azure DevOps](https://dev.azure.com/massgrave/_git/Microsoft-Activation-Scripts) or [Self-hosted Git](https://git.activated.win/massgrave/Microsoft-Activation-Scripts) 2. Right-click on the downloaded zip file and extract 3. In the extracted folder, find the folder named `All-In-One-Version` 4. Run the file named `MAS_AIO.cmd` 5. You will see the activation options, follow the on-screen instructions. 6. That's all. -To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches) +
-
+--- + +> [!NOTE] +> +> - The IRM command in PowerShell downloads a script from a specified URL, and the IEX command executes it. +> - Always double-check the URL before executing the command and verify the source if manually downloading files. +> - Be cautious, as some spread malware disguised as MAS by using different URLs in the IRM command. + +--- + +To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches). ``` Latest Version: 2.7 @@ -56,6 +65,22 @@ Release date: 6-Sep-2024 ### [Troubleshooting / Help](https://massgrave.dev/troubleshoot) ### [Download Original Windows & Office](https://massgrave.dev/genuine-installation-media) ### Homepage - [https://massgrave.dev/](https://massgrave.dev/) +
+ +[![1.1]][1] +[![1.2]][2] +[![1.3]][3] +[![1.4]][4] + +[1.1]: https://massgrave.dev/img/logo_discord.png (Chat with us without signup) +[1.2]: https://massgrave.dev/img/logo_github.png (GitHub) +[1.3]: https://massgrave.dev/img/logo_reddit.png (Reddit) +[1.4]: https://massgrave.dev/img/logo_x.png (Follow on 𝕏/Twitter) + +[1]: https://discord.gg/tVFN4N84PP +[2]: https://github.com/massgravel/Microsoft-Activation-Scripts +[3]: https://www.reddit.com/r/MAS_Activator +[4]: https://twitter.com/massgravel --- From 9bbd02cc91c44713af91f066bfa5ea5ed898f1fa Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 8 Nov 2024 22:16:51 +0530 Subject: [PATCH 038/132] Update PUP detection --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 16 +++++++++++----- .../Activators/HWID_Activation.cmd | 16 +++++++++++----- .../Activators/KMS38_Activation.cmd | 16 +++++++++++----- .../Activators/Ohook_Activation_AIO.cmd | 16 +++++++++++----- .../Activators/Online_KMS_Activation.cmd | 16 +++++++++++----- 5 files changed, 55 insertions(+), 25 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index aefa363..cd6bcf6 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1310,11 +1310,10 @@ exit /b set w= set results= -if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico -if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS -set pupfound=%pupfound1%%pupfound2% +if exist "%ProgramFiles%\KM%w%Spico" set pupfound= KM%w%Spico +if not defined pupfound ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound= KM%w%Spico +) set hcount=0 for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( @@ -1336,6 +1335,13 @@ set fixes=%fixes% %mas%remove_mal%w%ware call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) + +:: Remove the scheduled task of R@1n-KMS (old version) that runs the activation command every minute, as it leads to high CPU usage. + +if exist %SysPath%\Tasks\R@1n-KMS ( +for /f %%A in ('dir /b /a:-d %SysPath%\Tasks\R@1n-KMS %nul6%') do (schtasks /delete /tn \R@1n-KMS\%%A /f %nul%) +) + exit /b ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index fa0a6f4..2563ac7 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1073,11 +1073,10 @@ exit /b set w= set results= -if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico -if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS -set pupfound=%pupfound1%%pupfound2% +if exist "%ProgramFiles%\KM%w%Spico" set pupfound= KM%w%Spico +if not defined pupfound ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound= KM%w%Spico +) set hcount=0 for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( @@ -1099,6 +1098,13 @@ set fixes=%fixes% %mas%remove_mal%w%ware call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) + +:: Remove the scheduled task of R@1n-KMS (old version) that runs the activation command every minute, as it leads to high CPU usage. + +if exist %SysPath%\Tasks\R@1n-KMS ( +for /f %%A in ('dir /b /a:-d %SysPath%\Tasks\R@1n-KMS %nul6%') do (schtasks /delete /tn \R@1n-KMS\%%A /f %nul%) +) + exit /b ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index ad5b239..e7ecf7a 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1238,11 +1238,10 @@ exit /b set w= set results= -if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico -if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS -set pupfound=%pupfound1%%pupfound2% +if exist "%ProgramFiles%\KM%w%Spico" set pupfound= KM%w%Spico +if not defined pupfound ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound= KM%w%Spico +) set hcount=0 for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( @@ -1264,6 +1263,13 @@ set fixes=%fixes% %mas%remove_mal%w%ware call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) + +:: Remove the scheduled task of R@1n-KMS (old version) that runs the activation command every minute, as it leads to high CPU usage. + +if exist %SysPath%\Tasks\R@1n-KMS ( +for /f %%A in ('dir /b /a:-d %SysPath%\Tasks\R@1n-KMS %nul6%') do (schtasks /delete /tn \R@1n-KMS\%%A /f %nul%) +) + exit /b ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 17cd223..0f29f7b 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1553,11 +1553,10 @@ exit /b set w= set results= -if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico -if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS -set pupfound=%pupfound1%%pupfound2% +if exist "%ProgramFiles%\KM%w%Spico" set pupfound= KM%w%Spico +if not defined pupfound ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound= KM%w%Spico +) set hcount=0 for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( @@ -1579,6 +1578,13 @@ set fixes=%fixes% %mas%remove_mal%w%ware call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) + +:: Remove the scheduled task of R@1n-KMS (old version) that runs the activation command every minute, as it leads to high CPU usage. + +if exist %SysPath%\Tasks\R@1n-KMS ( +for /f %%A in ('dir /b /a:-d %SysPath%\Tasks\R@1n-KMS %nul6%') do (schtasks /delete /tn \R@1n-KMS\%%A /f %nul%) +) + exit /b ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 9bbc706..85e82fc 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2654,11 +2654,10 @@ exit /b set w= set results= -if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico -if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS -set pupfound=%pupfound1%%pupfound2% +if exist "%ProgramFiles%\KM%w%Spico" set pupfound= KM%w%Spico +if not defined pupfound ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound= KM%w%Spico +) set hcount=0 for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( @@ -2680,6 +2679,13 @@ set fixes=%fixes% %mas%remove_mal%w%ware call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) + +:: Remove the scheduled task of R@1n-KMS (old version) that runs the activation command every minute, as it leads to high CPU usage. + +if exist %SysPath%\Tasks\R@1n-KMS ( +for /f %%A in ('dir /b /a:-d %SysPath%\Tasks\R@1n-KMS %nul6%') do (schtasks /delete /tn \R@1n-KMS\%%A /f %nul%) +) + exit /b ::======================================================================================================================================== From 897a9db808acc5c7f3bd3af68125956abc155271 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 9 Nov 2024 02:43:31 +0530 Subject: [PATCH 039/132] Suggest repair_upgrade for HKU\S-1-5-20 error --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 4 ++-- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- .../Activators/Online_KMS_Activation.cmd | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index cd6bcf6..4704b2e 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1607,8 +1607,8 @@ call :dk_color %Red% "Checking Eval WLMS Service [Found]" reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 2563ac7..6212416 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1370,8 +1370,8 @@ call :dk_color %Red% "Checking Eval WLMS Service [Found]" reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index e7ecf7a..44fbb94 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1535,8 +1535,8 @@ call :dk_color %Red% "Checking Eval WLMS Service [Found]" reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 0f29f7b..d141e6a 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1850,8 +1850,8 @@ call :dk_color %Red% "Checking Eval WLMS Service [Found]" reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 85e82fc..e720f0f 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2951,8 +2951,8 @@ call :dk_color %Red% "Checking Eval WLMS Service [Found]" reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" ) From 03cc88193dadab2647966c308b715b57c27a0978 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 9 Nov 2024 04:25:44 +0530 Subject: [PATCH 040/132] Fix an issue in edition list when Windows sub license is present --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 15 +++++++-------- .../Change_Windows_Edition.cmd | 15 +++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 4704b2e..1fcbefd 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -8646,15 +8646,17 @@ goto dk_done :: Check Windows Edition and branch -set osedition=0 -set dismedition= +set osedition= set dismnotworking= +for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition %nul6% ^| find /i "1Current Edition :"') do set "osedition=%%a" +if not defined osedition set dismnotworking=1 + if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" -%chkedi% do if not errorlevel 1 (call set "osedition=%%a") +if not defined osedition %chkedi% do if not errorlevel 1 (call set "osedition=%%a") -if %osedition%==0 ( +if not defined osedition ( %eline% echo Failed to detect OS edition, aborting... echo: @@ -8665,12 +8667,9 @@ goto dk_done for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "regedition=%%a" if /i not "%osedition%"=="%regedition%" ( -set "showeditionerror=call :dk_color %_Yellow% "Mismatch found [WMI-%osedition%] [Reg-%regedition%]."" +set "showeditionerror=call :dk_color %_Yellow% "[%osedition%] [Reg-%regedition%]."" ) -for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition %nul6% ^| find /i "Current Edition :"') do set "dismedition=%%a" -if not defined dismedition set dismnotworking=1 - set branch= for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch %nul6%') do set "branch=%%b" diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 07e7e99..796501c 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -352,15 +352,17 @@ goto dk_done :: Check Windows Edition and branch -set osedition=0 -set dismedition= +set osedition= set dismnotworking= +for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition %nul6% ^| find /i "1Current Edition :"') do set "osedition=%%a" +if not defined osedition set dismnotworking=1 + if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" -%chkedi% do if not errorlevel 1 (call set "osedition=%%a") +if not defined osedition %chkedi% do if not errorlevel 1 (call set "osedition=%%a") -if %osedition%==0 ( +if not defined osedition ( %eline% echo Failed to detect OS edition, aborting... echo: @@ -371,12 +373,9 @@ goto dk_done for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "regedition=%%a" if /i not "%osedition%"=="%regedition%" ( -set "showeditionerror=call :dk_color %_Yellow% "Mismatch found [WMI-%osedition%] [Reg-%regedition%]."" +set "showeditionerror=call :dk_color %_Yellow% "[%osedition%] [Reg-%regedition%]."" ) -for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition %nul6% ^| find /i "Current Edition :"') do set "dismedition=%%a" -if not defined dismedition set dismnotworking=1 - set branch= for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch %nul6%') do set "branch=%%b" From f0618824a4c631c39496ade0f4c2f40ad4c8413e Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 9 Nov 2024 05:40:56 +0530 Subject: [PATCH 041/132] Get edition ID from WMI --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 6 +++++- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 6 +++++- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 6 +++++- .../Activators/Ohook_Activation_AIO.cmd | 6 +++++- .../Activators/Online_KMS_Activation.cmd | 6 +++++- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 1fcbefd..a28b638 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1511,7 +1511,11 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" set osedition=0 -for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 (call set "osedition=%%a") + +if %osedition%==0 for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" :: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 6212416..454d0e3 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1274,7 +1274,11 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" set osedition=0 -for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 (call set "osedition=%%a") + +if %osedition%==0 for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" :: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 44fbb94..17f0688 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1439,7 +1439,11 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" set osedition=0 -for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 (call set "osedition=%%a") + +if %osedition%==0 for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" :: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index d141e6a..d15ede9 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1754,7 +1754,11 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" set osedition=0 -for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 (call set "osedition=%%a") + +if %osedition%==0 for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" :: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index e720f0f..9c78cfa 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2855,7 +2855,11 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" set osedition=0 -for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 (call set "osedition=%%a") + +if %osedition%==0 for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" :: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional From 5141866f0a6c100023f64411720b7d634b2152b0 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 9 Nov 2024 05:49:07 +0530 Subject: [PATCH 042/132] Update ReadMe --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d0a3f9a..d346c29 100644 --- a/README.md +++ b/README.md @@ -65,13 +65,16 @@ Release date: 6-Sep-2024 ### [Troubleshooting / Help](https://massgrave.dev/troubleshoot) ### [Download Original Windows & Office](https://massgrave.dev/genuine-installation-media) ### Homepage - [https://massgrave.dev/](https://massgrave.dev/) -
+
+ [![1.1]][1] [![1.2]][2] [![1.3]][3] [![1.4]][4] +
+ [1.1]: https://massgrave.dev/img/logo_discord.png (Chat with us without signup) [1.2]: https://massgrave.dev/img/logo_github.png (GitHub) [1.3]: https://massgrave.dev/img/logo_reddit.png (Reddit) From 0b402d9afe04bc7d820b7337db28e62c1d2e15ad Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 9 Nov 2024 05:54:18 +0530 Subject: [PATCH 043/132] Update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d346c29..13da5ba 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Release date: 6-Sep-2024 [1.1]: https://massgrave.dev/img/logo_discord.png (Chat with us without signup) [1.2]: https://massgrave.dev/img/logo_github.png (GitHub) [1.3]: https://massgrave.dev/img/logo_reddit.png (Reddit) -[1.4]: https://massgrave.dev/img/logo_x.png (Follow on 𝕏/Twitter) +[1.4]: https://massgrave.dev/img/logo_x.png (Follow us on X) [1]: https://discord.gg/tVFN4N84PP [2]: https://github.com/massgravel/Microsoft-Activation-Scripts From 873c4bc4d8fb735e100116782b63f4dd54c355f7 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 9 Nov 2024 20:35:41 +0530 Subject: [PATCH 044/132] Detect a potential script crash when user installs too many licenses for Office --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 16 ++++++++++++++++ .../Activators/Ohook_Activation_AIO.cmd | 16 ++++++++++++++++ .../Activators/Online_KMS_Activation.cmd | 16 ++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index a28b638..dd6d6f6 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1162,6 +1162,22 @@ set allapps= if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')" if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" %chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a")) + +:: Check potential script crash issue when user manually installs way too many licenses for Office (length limit in variable) + +if defined allapps if %1==0ff1ce15-a989-479d-af46-f275c6370663 ( +set len=0 +echo:!allapps!> %SystemRoot%\Temp\chklen +for %%A in (%SystemRoot%\Temp\chklen) do (set len=%%~zA) +del %SystemRoot%\Temp\chklen %nul% + +if !len! GTR 6000 ( +%eline% +echo Too many licenses are installed, the script may crash. +call :dk_color %Blue% "%_fixmsg%" +timeout /t 30 +) +) exit /b :: Get installed products Activation IDs diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index d15ede9..da88ed9 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1455,6 +1455,22 @@ set allapps= if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')" if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" %chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a")) + +:: Check potential script crash issue when user manually installs way too many licenses for Office (length limit in variable) + +if defined allapps if %1==0ff1ce15-a989-479d-af46-f275c6370663 ( +set len=0 +echo:!allapps!> %SystemRoot%\Temp\chklen +for %%A in (%SystemRoot%\Temp\chklen) do (set len=%%~zA) +del %SystemRoot%\Temp\chklen %nul% + +if !len! GTR 6000 ( +%eline% +echo Too many licenses are installed, the script may crash. +call :dk_color %Blue% "%_fixmsg%" +timeout /t 30 +) +) exit /b :: Get installed products Activation IDs diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 9c78cfa..28d22e3 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2479,6 +2479,22 @@ set allapps= if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')" if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" %chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a")) + +:: Check potential script crash issue when user manually installs way too many licenses for Office (length limit in variable) + +if defined allapps if %1==0ff1ce15-a989-479d-af46-f275c6370663 ( +set len=0 +echo:!allapps!> %SystemRoot%\Temp\chklen +for %%A in (%SystemRoot%\Temp\chklen) do (set len=%%~zA) +del %SystemRoot%\Temp\chklen %nul% + +if !len! GTR 6000 ( +%eline% +echo Too many licenses are installed, the script may crash. +call :dk_color %Blue% "%_fixmsg%" +timeout /t 30 +) +) exit /b :: Get installed products Activation IDs From 25abc1f457712275461fcc18aa884763cd0530fd Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 9 Nov 2024 20:42:20 +0530 Subject: [PATCH 045/132] Don't show other fixes when HKU\S-1-5-20 is missing --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 1 + MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 1 + MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 1 + MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 1 + MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 1 + 5 files changed, 5 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index dd6d6f6..ac90af5 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1626,6 +1626,7 @@ call :dk_color %Red% "Checking Eval WLMS Service [Found]" reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 +set showfix=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" set fixes=%fixes% %mas%in-place_repair_upgrade call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 454d0e3..d842c83 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1373,6 +1373,7 @@ call :dk_color %Red% "Checking Eval WLMS Service [Found]" reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 +set showfix=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" set fixes=%fixes% %mas%in-place_repair_upgrade call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 17f0688..6c891c4 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1538,6 +1538,7 @@ call :dk_color %Red% "Checking Eval WLMS Service [Found]" reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 +set showfix=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" set fixes=%fixes% %mas%in-place_repair_upgrade call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index da88ed9..1b8f6aa 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1869,6 +1869,7 @@ call :dk_color %Red% "Checking Eval WLMS Service [Found]" reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 +set showfix=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" set fixes=%fixes% %mas%in-place_repair_upgrade call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 28d22e3..d295f2f 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2970,6 +2970,7 @@ call :dk_color %Red% "Checking Eval WLMS Service [Found]" reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 +set showfix=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" set fixes=%fixes% %mas%in-place_repair_upgrade call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" From ab90514b0a4afd9fd711d2d79c6688d8296671b9 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 9 Nov 2024 21:13:50 +0530 Subject: [PATCH 046/132] 2.8 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- .../Activators/Ohook_Activation_AIO.cmd | 2 +- .../Activators/Online_KMS_Activation.cmd | 2 +- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 2 +- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- README.md | 6 +++--- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index ac90af5..b870b9b 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1,5 +1,5 @@ -@::03938c58-ded9-4e95-b879-cb81e3e77c93 -@set masver=2.7 +@::b879-random +@set masver=2.8 @setlocal DisableDelayedExpansion @echo off diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index d842c83..6401b78 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.7 +@set masver=2.8 @echo off diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 6c891c4..70c8872 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.7 +@set masver=2.8 @echo off diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 1b8f6aa..b065317 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1,4 +1,4 @@ -@set masver=2.7 +@set masver=2.8 @echo off diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index d295f2f..111751f 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.7 +@set masver=2.8 @echo off diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index d01a078..a179dc7 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=2.7 +@set masver=2.8 @echo off diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 796501c..e5b809d 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=2.7 +@set masver=2.8 @echo off diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index b7f5409..e76591f 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -1,4 +1,4 @@ -@set masver=2.7 +@set masver=2.8 @echo off diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 29a5374..38d70fc 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1,4 +1,4 @@ -@set masver=2.7 +@set masver=2.8 @echo off diff --git a/README.md b/README.md index 13da5ba..0c5c1a0 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ irm https://massgrave.dev/get | iex ### Method 2 - Traditional (Windows 7 and later)
- Info + Click here for info 1. Download the file under the code button from [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts) or [Azure DevOps](https://dev.azure.com/massgrave/_git/Microsoft-Activation-Scripts) or [Self-hosted Git](https://git.activated.win/massgrave/Microsoft-Activation-Scripts) 2. Right-click on the downloaded zip file and extract @@ -58,8 +58,8 @@ irm https://massgrave.dev/get | iex To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches). ``` -Latest Version: 2.7 -Release date: 6-Sep-2024 +Latest Version: 2.8 +Release date: 9-Nov-2024 ``` ### [Troubleshooting / Help](https://massgrave.dev/troubleshoot) From 7d036f57fd26a53269d4b64c789cbb1f5ebccf6a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 9 Nov 2024 21:50:23 +0530 Subject: [PATCH 047/132] Export-ignore --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index 8749e12..de5bd3d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -# MAS export-ignore -# LICENSE export-ignore -# README.md export-ignore +MAS export-ignore +LICENSE export-ignore +README.md export-ignore .gitattributes export-ignore From bbdc9bdfd8cb9d9a7cacb5a1d0e543c34f4e9bde Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 9 Nov 2024 21:52:43 +0530 Subject: [PATCH 048/132] Revert export-ignore --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index de5bd3d..8749e12 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -MAS export-ignore -LICENSE export-ignore -README.md export-ignore +# MAS export-ignore +# LICENSE export-ignore +# README.md export-ignore .gitattributes export-ignore From ec259dfbd785bb2f6b6cc78d17b5fb62a9125d9a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 10 Nov 2024 00:47:15 +0530 Subject: [PATCH 049/132] Fix a typo --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index b870b9b..b7e44aa 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -8670,7 +8670,7 @@ goto dk_done set osedition= set dismnotworking= -for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition %nul6% ^| find /i "1Current Edition :"') do set "osedition=%%a" +for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition %nul6% ^| find /i "Current Edition :"') do set "osedition=%%a" if not defined osedition set dismnotworking=1 if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index e5b809d..d03cff3 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -355,7 +355,7 @@ goto dk_done set osedition= set dismnotworking= -for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition %nul6% ^| find /i "1Current Edition :"') do set "osedition=%%a" +for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition %nul6% ^| find /i "Current Edition :"') do set "osedition=%%a" if not defined osedition set dismnotworking=1 if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" From 4dd0215ccc181561a9b0d363080e693dd01fd337 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 10 Nov 2024 16:31:18 +0530 Subject: [PATCH 050/132] Remove the box --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 6 ------ MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 3 --- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 3 --- .../Activators/Ohook_Activation_AIO.cmd | 3 --- .../Activators/Online_KMS_Activation.cmd | 3 --- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 6 ------ MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 3 --- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 3 --- MAS/Separate-Files-Version/Troubleshoot.cmd | 3 --- 9 files changed, 33 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index b7e44aa..120f687 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1867,10 +1867,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) @@ -10259,10 +10256,7 @@ call :oe_tempcleanup echo: if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 6401b78..61400a4 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1614,10 +1614,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 70c8872..3de7ef8 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1779,10 +1779,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index b065317..f9a3015 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2110,10 +2110,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 111751f..2f0cb0a 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3211,10 +3211,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index a179dc7..b6fe488 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1064,10 +1064,7 @@ call :oe_tempcleanup echo: if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) @@ -1420,10 +1417,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index d03cff3..cc9a043 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -996,10 +996,7 @@ echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index e76591f..83ec8ce 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -707,10 +707,7 @@ echo ______________________________________________________________ echo: if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 38d70fc..366aee6 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1384,10 +1384,7 @@ $key.SetAccessControl($acl) echo: if defined fixes ( -call :dk_color %White% " " call :dk_color %White% "Follow ALL the ABOVE blue lines. " -call :dk_color %White% " " -echo: call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) From f1ddb83df092478741344fc55351a65cf6eeafd8 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 11 Nov 2024 14:28:28 +0530 Subject: [PATCH 051/132] Update link in read me --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0c5c1a0..7b67bd3 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,10 @@ irm https://massgrave.dev/get | iex
Click here for info -1. Download the file under the code button from [GitHub](https://github.com/massgravel/Microsoft-Activation-Scripts) or [Azure DevOps](https://dev.azure.com/massgrave/_git/Microsoft-Activation-Scripts) or [Self-hosted Git](https://git.activated.win/massgrave/Microsoft-Activation-Scripts) +1. Download the file using the links provided below. +`https://github.com/massgravel/Microsoft-Activation-Scripts/archive/refs/heads/master.zip` +or +`https://git.activated.win/massgrave/Microsoft-Activation-Scripts/archive/master.zip` 2. Right-click on the downloaded zip file and extract 3. In the extracted folder, find the folder named `All-In-One-Version` 4. Run the file named `MAS_AIO.cmd` From 22ed7a7a07e4187cef22194ff440df1b0fd6fc29 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 20 Dec 2024 16:49:21 +0530 Subject: [PATCH 052/132] Update subscription editon keys --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 8 ++++---- .../Activators/Ohook_Activation_AIO.cmd | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 120f687..ed38ca7 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -3143,15 +3143,15 @@ for %%# in ( 15_9cedef15-be37-4ff0-a08a-13a045540641_RPHPB-Y7NC4-3VYFM-DW7VD-G8%f%YJ8_MAK___________WordVolume :: Office 365 - 15.0 version 15_742178ed-6b28-42dd-b3d7-b7c0ea78741b_Y9NF9-M2QWD-FF6RJ-QJW36-RR%f%F2T_SubTest_______O365BusinessRetail -15_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail +15_a96f8dae-da54-4fad-bdc6-108da592707a_3NMDC-G7C3W-68RGP-CB4MH-4C%f%XCH_SubTest1______O365HomePremRetail 15_e3dacc06-3bc2-4e13-8e59-8e05f3232325_H8DN8-Y2YP3-CR9JT-DHDR9-C7%f%GP3_Subscription2_O365ProPlusRetail -15_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail +15_0bc1dae4-6158-4a1c-a893-807665b934b2_2QCNB-RMDKJ-GC8PB-7QGQV-7Q%f%TQJ_Subscription2_O365SmallBusPremRetail :: Office 365 - 16.0 version 16_742178ed-6b28-42dd-b3d7-b7c0ea78741b_Y9NF9-M2QWD-FF6RJ-QJW36-RR%f%F2T_SubTest_______O365BusinessRetail 16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_W62NQ-267QR-RTF74-PF2MH-JQ%f%MTH_Subscription__O365EduCloudRetail -16_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail +16_a96f8dae-da54-4fad-bdc6-108da592707a_3NMDC-G7C3W-68RGP-CB4MH-4C%f%XCH_SubTest1______O365HomePremRetail 16_e3dacc06-3bc2-4e13-8e59-8e05f3232325_H8DN8-Y2YP3-CR9JT-DHDR9-C7%f%GP3_Subscription2_O365ProPlusRetail -16_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail +16_0bc1dae4-6158-4a1c-a893-807665b934b2_2QCNB-RMDKJ-GC8PB-7QGQV-7Q%f%TQJ_Subscription2_O365SmallBusPremRetail :: Office 2016 16_bfa358b0-98f1-4125-842e-585fa13032e6_WHK4N-YQGHB-XWXCC-G3HYC-6J%f%F94_Retail________AccessRetail 16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_RNB7V-P48F4-3FYY6-2P3R3-63%f%BQV_PrepidBypass__AccessRuntimeRetail diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index f9a3015..0d8d522 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2187,15 +2187,15 @@ for %%# in ( 15_9cedef15-be37-4ff0-a08a-13a045540641_RPHPB-Y7NC4-3VYFM-DW7VD-G8%f%YJ8_MAK___________WordVolume :: Office 365 - 15.0 version 15_742178ed-6b28-42dd-b3d7-b7c0ea78741b_Y9NF9-M2QWD-FF6RJ-QJW36-RR%f%F2T_SubTest_______O365BusinessRetail -15_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail +15_a96f8dae-da54-4fad-bdc6-108da592707a_3NMDC-G7C3W-68RGP-CB4MH-4C%f%XCH_SubTest1______O365HomePremRetail 15_e3dacc06-3bc2-4e13-8e59-8e05f3232325_H8DN8-Y2YP3-CR9JT-DHDR9-C7%f%GP3_Subscription2_O365ProPlusRetail -15_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail +15_0bc1dae4-6158-4a1c-a893-807665b934b2_2QCNB-RMDKJ-GC8PB-7QGQV-7Q%f%TQJ_Subscription2_O365SmallBusPremRetail :: Office 365 - 16.0 version 16_742178ed-6b28-42dd-b3d7-b7c0ea78741b_Y9NF9-M2QWD-FF6RJ-QJW36-RR%f%F2T_SubTest_______O365BusinessRetail 16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_W62NQ-267QR-RTF74-PF2MH-JQ%f%MTH_Subscription__O365EduCloudRetail -16_537ea5b5-7d50-4876-bd38-a53a77caca32_J2W28-TN9C8-26PWV-F7J4G-72%f%XCB_Subscription1_O365HomePremRetail +16_a96f8dae-da54-4fad-bdc6-108da592707a_3NMDC-G7C3W-68RGP-CB4MH-4C%f%XCH_SubTest1______O365HomePremRetail 16_e3dacc06-3bc2-4e13-8e59-8e05f3232325_H8DN8-Y2YP3-CR9JT-DHDR9-C7%f%GP3_Subscription2_O365ProPlusRetail -16_bacd4614-5bef-4a5e-bafc-de4c788037a2_HN8JP-87TQJ-PBF3P-Y66KC-W2%f%K9V_Subscription1_O365SmallBusPremRetail +16_0bc1dae4-6158-4a1c-a893-807665b934b2_2QCNB-RMDKJ-GC8PB-7QGQV-7Q%f%TQJ_Subscription2_O365SmallBusPremRetail :: Office 2016 16_bfa358b0-98f1-4125-842e-585fa13032e6_WHK4N-YQGHB-XWXCC-G3HYC-6J%f%F94_Retail________AccessRetail 16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_RNB7V-P48F4-3FYY6-2P3R3-63%f%BQV_PrepidBypass__AccessRuntimeRetail From 5638898eaf3bd87df534cc67c94eeb5141cd82c2 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 20 Dec 2024 17:19:35 +0530 Subject: [PATCH 053/132] Update license cleanup --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 -- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 -- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 -- 3 files changed, 6 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index ed38ca7..339689a 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2909,7 +2909,6 @@ rmdir /s /q "%ProgramData%\Microsoft\Office\Licenses\" %nul% for %%x in (15 16) do ( for %%# in (%_sidlist%) do ( reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Licensing /f %nul% -reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Identity /f %nul% for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( rmdir /s /q "%%b\AppData\Local\Microsoft\Office\Licenses\" %nul% @@ -2932,7 +2931,6 @@ if exist "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\Syst set defname=DEFTEMP-%%# reg load HKU\!defname! "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\SystemAppData\Helium\User.dat" %nul% reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Licensing /f %nul% -reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Identity /f %nul% reg unload HKU\!defname! %nul% ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 0d8d522..47b5f86 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1175,7 +1175,6 @@ rmdir /s /q "%ProgramData%\Microsoft\Office\Licenses\" %nul% for %%x in (15 16) do ( for %%# in (%_sidlist%) do ( reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Licensing /f %nul% -reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Identity /f %nul% for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( rmdir /s /q "%%b\AppData\Local\Microsoft\Office\Licenses\" %nul% @@ -1198,7 +1197,6 @@ if exist "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\Syst set defname=DEFTEMP-%%# reg load HKU\!defname! "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\SystemAppData\Helium\User.dat" %nul% reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Licensing /f %nul% -reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Identity /f %nul% reg unload HKU\!defname! %nul% ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 2f0cb0a..909cb22 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1328,7 +1328,6 @@ rmdir /s /q "%ProgramData%\Microsoft\Office\Licenses\" %nul% for %%x in (15 16) do ( for %%# in (%_sidlist%) do ( reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Licensing /f %nul% -reg delete HKU\%%#\Software\Microsoft\Office\%%x.0\Common\Identity /f %nul% for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%%#" /v ProfileImagePath" %nul6%') do ( rmdir /s /q "%%b\AppData\Local\Microsoft\Office\Licenses\" %nul% @@ -1351,7 +1350,6 @@ if exist "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\Syst set defname=DEFTEMP-%%# reg load HKU\!defname! "%%b\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\SystemAppData\Helium\User.dat" %nul% reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Licensing /f %nul% -reg delete HKU\!defname!\Software\Microsoft\Office\16.0\Common\Identity /f %nul% reg unload HKU\!defname! %nul% ) ) From 8fff2ccb9c243e3fa15233fe50026ba34a6fc6b3 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 20 Dec 2024 17:59:19 +0530 Subject: [PATCH 054/132] Check all act ids for errors instead of installed key's act id --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 8 ++++---- .../Change_Windows_Edition.cmd | 20 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 339689a..6141021 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -8646,12 +8646,12 @@ if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") ::======================================================================================================================================== -:: Check Activation ID +:: Check Activation IDs -call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f -if not defined apps ( +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined allapps ( %eline% -echo Either key is not insalled or script failed to get installed key's activation ID. Aborting... +echo Failed to find activation IDs. Aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index cc9a043..b98c592 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -336,12 +336,12 @@ if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") ::======================================================================================================================================== -:: Check Activation ID +:: Check Activation IDs -call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f -if not defined apps ( +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined allapps ( %eline% -echo Either key is not insalled or script failed to get installed key's activation ID. Aborting... +echo Failed to find activation IDs. Aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" @@ -834,14 +834,14 @@ if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call RefreshLicenseStatus if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'%sps%').GetInstances()).RefreshLicenseStatus()" %nul% exit /b -:: Get installed products Activation IDs +:: Get all products Activation IDs -:dk_actid +:dk_actids -set apps= -if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1' and PartialProductKey is not null) get ID /VALUE" %nul6%')" -if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" -%chkapp% do (if defined apps (call set "apps=!apps! %%a") else (call set "apps=%%a")) +set allapps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a")) exit /b :: Get Edition list From c00b076a86fdf3bde719c2f88ea626ee6a367460 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 20 Dec 2024 19:57:08 +0530 Subject: [PATCH 055/132] change label name --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 4 ++-- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- .../Activators/Online_KMS_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 4 ++-- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 4 ++-- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 4 ++-- MAS/Separate-Files-Version/Troubleshoot.cmd | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 6141021..1bb8bdf 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -172,9 +172,9 @@ goto dk_done :: Check PowerShell -REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: +REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( %eline% cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 61400a4..1ab708e 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -211,9 +211,9 @@ goto dk_done :: Check PowerShell -REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: +REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( %eline% cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 3de7ef8..471dfc0 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -214,9 +214,9 @@ goto dk_done :: Check PowerShell -REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: +REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( %eline% cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 47b5f86..e9b8153 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -204,9 +204,9 @@ goto dk_done :: Check PowerShell -REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: +REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( %eline% cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 909cb22..3fa72e7 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -233,9 +233,9 @@ goto dk_done :: Check PowerShell -REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: +REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( %eline% cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index b6fe488..62ed83a 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -164,9 +164,9 @@ goto dk_done :: Check PowerShell -REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: +REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( %eline% cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index b98c592..4d27b93 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -169,9 +169,9 @@ goto dk_done :: Check PowerShell -REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: +REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( %eline% cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 83ec8ce..f7a2111 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -163,9 +163,9 @@ goto done2 :: Check PowerShell -REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: +REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( %eline% cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 366aee6..f59fd52 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -164,9 +164,9 @@ goto dk_done :: Check PowerShell -REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: +REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( %eline% cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: From d6aa8b97d1052de1bd3bf59408151d61274b17a6 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 20 Dec 2024 21:04:56 +0530 Subject: [PATCH 056/132] Show update related troubleshooting when activation fails --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 21 +++++++++++++++---- .../Activators/HWID_Activation.cmd | 21 +++++++++++++++---- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 1bb8bdf..eb7b965 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -900,29 +900,42 @@ call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident% reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DisableWindowsUpdateAccess %nul2% | find /i "0x1" %nul% && set wublock=1 reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DoNotConnectToWindowsUpdateInternetLocations %nul2% | find /i "0x1" %nul% && set wublock=1 -if defined wublock call :dk_color %Red% "Checking Update Blocker In Registry [Found]" +if defined wublock ( +call :dk_color %Red% "Checking Update Blocker In Registry [Found]" +call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it." +) reg query "HKLM\SOFTWARE\Policies\Microsoft\WindowsStore" /v DisableStoreApps %nul2% | find /i "0x1" %nul% && ( set storeblock=1 call :dk_color %Red% "Checking Store Blocker In Registry [Found]" +call :dk_color %Blue% "If you have used any tool to block Store, undo it." ) +set wcount=0 for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do if not defined wucorrupt ( -reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v %%G %nul% || set wucorrupt=1 +reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v %%G %nul% || (set wucorrupt=1&set /a wcount+=1) ) -for %%G in (Parameters Security TriggerInfo) do if not defined wucorrupt ( -reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || set wucorrupt=1 +for %%G in (Parameters Security) do if not defined wucorrupt ( +reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || (set wucorrupt=1&set /a wcount+=1) ) if defined wucorrupt ( call :dk_color %Red% "Checking Windows Update Registry [Corruption Found]" +if !wcount! GTR 2 ( +call :dk_color %Red% "Windows seems to be infected with Mal%w%ware." +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +) else ( +call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it." +) ) else ( %psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 20 | Out-Null" sc query wuauserv | find /i "RUNNING" %nul% || ( set wuerror=1 sc start wuauserv %nul% call :dk_color %Red% "Starting Windows Update Service [Failed] [!errorlevel!]" +call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it." ) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 1ab708e..a5dfc14 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -663,29 +663,42 @@ call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident% reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DisableWindowsUpdateAccess %nul2% | find /i "0x1" %nul% && set wublock=1 reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DoNotConnectToWindowsUpdateInternetLocations %nul2% | find /i "0x1" %nul% && set wublock=1 -if defined wublock call :dk_color %Red% "Checking Update Blocker In Registry [Found]" +if defined wublock ( +call :dk_color %Red% "Checking Update Blocker In Registry [Found]" +call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it." +) reg query "HKLM\SOFTWARE\Policies\Microsoft\WindowsStore" /v DisableStoreApps %nul2% | find /i "0x1" %nul% && ( set storeblock=1 call :dk_color %Red% "Checking Store Blocker In Registry [Found]" +call :dk_color %Blue% "If you have used any tool to block Store, undo it." ) +set wcount=0 for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do if not defined wucorrupt ( -reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v %%G %nul% || set wucorrupt=1 +reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v %%G %nul% || (set wucorrupt=1&set /a wcount+=1) ) -for %%G in (Parameters Security TriggerInfo) do if not defined wucorrupt ( -reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || set wucorrupt=1 +for %%G in (Parameters Security) do if not defined wucorrupt ( +reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || (set wucorrupt=1&set /a wcount+=1) ) if defined wucorrupt ( call :dk_color %Red% "Checking Windows Update Registry [Corruption Found]" +if !wcount! GTR 2 ( +call :dk_color %Red% "Windows seems to be infected with Mal%w%ware." +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +) else ( +call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it." +) ) else ( %psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 20 | Out-Null" sc query wuauserv | find /i "RUNNING" %nul% || ( set wuerror=1 sc start wuauserv %nul% call :dk_color %Red% "Starting Windows Update Service [Failed] [!errorlevel!]" +call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it." ) ) From 9f00df5aeeb2e37ca648333f461e5953fc8152e9 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 21 Dec 2024 01:21:27 +0530 Subject: [PATCH 057/132] Add a link for service fix --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 7 ++++++- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 7 ++++++- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 7 ++++++- .../Activators/Ohook_Activation_AIO.cmd | 7 ++++++- .../Activators/Online_KMS_Activation.cmd | 7 ++++++- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 2 +- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 9 files changed, 34 insertions(+), 9 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index eb7b965..faf3712 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -76,7 +76,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%troubleshoot +echo Help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -1479,6 +1479,11 @@ echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) +echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( +set fixes=%fixes% %mas%fix_service +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +set showfix=1 +) ) ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index a5dfc14..6216eae 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -109,7 +109,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%troubleshoot +echo Help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -1226,6 +1226,11 @@ echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) +echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( +set fixes=%fixes% %mas%fix_service +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +set showfix=1 +) ) ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 471dfc0..d7520a7 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -112,7 +112,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%troubleshoot +echo Help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -1378,6 +1378,11 @@ echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) +echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( +set fixes=%fixes% %mas%fix_service +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +set showfix=1 +) ) ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index e9b8153..fa083d9 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -109,7 +109,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%troubleshoot +echo Help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -1707,6 +1707,11 @@ echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) +echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( +set fixes=%fixes% %mas%fix_service +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +set showfix=1 +) ) ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 3fa72e7..31b140c 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -134,7 +134,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%troubleshoot +echo Help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -2808,6 +2808,11 @@ echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." set showfix=1 ) +echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( +set fixes=%fixes% %mas%fix_service +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +set showfix=1 +) ) ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 62ed83a..741d5c5 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -69,7 +69,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%troubleshoot +echo Help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 4d27b93..c4b9273 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -74,7 +74,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%troubleshoot +echo Help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index f7a2111..9f076b2 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -69,7 +69,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%troubleshoot +echo Help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index f59fd52..0bdd4df 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -69,7 +69,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%troubleshoot +echo Help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 From 0d9ffd20521af00c4166eeb2ede92a60f5ba35af Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 21 Dec 2024 04:22:05 +0530 Subject: [PATCH 058/132] 2.9 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- .../Activators/HWID_Activation.cmd | 2 +- .../Activators/KMS38_Activation.cmd | 2 +- .../Activators/Ohook_Activation_AIO.cmd | 2 +- .../Activators/Online_KMS_Activation.cmd | 2 +- .../Change_Office_Edition.cmd | 2 +- .../Change_Windows_Edition.cmd | 2 +- .../Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- README.md | 37 +++++++++++++------ 10 files changed, 35 insertions(+), 20 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index faf3712..9481e18 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1,5 +1,5 @@ @::b879-random -@set masver=2.8 +@set masver=2.9 @setlocal DisableDelayedExpansion @echo off diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 6216eae..2e86baf 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.8 +@set masver=2.9 @echo off diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index d7520a7..99b8a78 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.8 +@set masver=2.9 @echo off diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index fa083d9..2c13f10 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1,4 +1,4 @@ -@set masver=2.8 +@set masver=2.9 @echo off diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 31b140c..af20991 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.8 +@set masver=2.9 @echo off diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 741d5c5..1a5bbd7 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=2.8 +@set masver=2.9 @echo off diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index c4b9273..6a7aada 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=2.8 +@set masver=2.9 @echo off diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 9f076b2..1577d38 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -1,4 +1,4 @@ -@set masver=2.8 +@set masver=2.9 @echo off diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 0bdd4df..ad55e92 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1,4 +1,4 @@ -@set masver=2.8 +@set masver=2.9 @echo off diff --git a/README.md b/README.md index 7b67bd3..8a1dc4f 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,8 @@ or To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches). ``` -Latest Version: 2.8 -Release date: 9-Nov-2024 +Latest Version: 2.9 +Release date: 20-Dec-2024 ``` ### [Troubleshooting / Help](https://massgrave.dev/troubleshoot) @@ -74,19 +74,34 @@ Release date: 9-Nov-2024 [![1.1]][1] [![1.2]][2] [![1.3]][3] -[![1.4]][4] -[1.1]: https://massgrave.dev/img/logo_discord.png (Chat with us without signup) -[1.2]: https://massgrave.dev/img/logo_github.png (GitHub) -[1.3]: https://massgrave.dev/img/logo_reddit.png (Reddit) -[1.4]: https://massgrave.dev/img/logo_x.png (Follow us on X) +
+ +[![1.4]][4] +[![1.5]][5] +[![1.6]][6] +[![1.7]][7] -[1]: https://discord.gg/tVFN4N84PP -[2]: https://github.com/massgravel/Microsoft-Activation-Scripts -[3]: https://www.reddit.com/r/MAS_Activator -[4]: https://twitter.com/massgravel +
+ +[1.1]: https://massgrave.dev/img/logo_github.png (GitHub) +[1.2]: https://massgrave.dev/img/logo_azuredevops.png (AzureDevOps) +[1.3]: https://massgrave.dev/img/logo_gitea.png (Self-hosted Git) + +[1.4]: https://massgrave.dev/img/logo_discord.png (Chat with us without signup) +[1.5]: https://massgrave.dev/img/logo_reddit.png (Reddit) +[1.6]: https://massgrave.dev/img/logo_bluesky.png (Bluesky) +[1.7]: https://massgrave.dev/img/logo_x.png (Twitter) + +[1]: https://github.com/massgravel/Microsoft-Activation-Scripts +[2]: https://dev.azure.com/massgrave/_git/Microsoft-Activation-Scripts +[3]: https://git.activated.win/massgrave/Microsoft-Activation-Scripts +[4]: https://discord.gg/j2yFsV5ZVC +[5]: https://www.reddit.com/r/MAS_Activator +[6]: https://bsky.app/profile/massgrave.dev +[7]: https://twitter.com/massgravel --- From 3ef6d7292e0b45801827988445396ee477ff46ab Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 21 Dec 2024 04:32:25 +0530 Subject: [PATCH 059/132] export-ignore --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index 8749e12..de5bd3d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -# MAS export-ignore -# LICENSE export-ignore -# README.md export-ignore +MAS export-ignore +LICENSE export-ignore +README.md export-ignore .gitattributes export-ignore From 051b4f673f070c1fd2728c82a700ca26b168cb32 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 21 Dec 2024 04:37:12 +0530 Subject: [PATCH 060/132] Revert export-ignore --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index de5bd3d..8749e12 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -MAS export-ignore -LICENSE export-ignore -README.md export-ignore +# MAS export-ignore +# LICENSE export-ignore +# README.md export-ignore .gitattributes export-ignore From 37ec96504a2983a5801c43e975ab78c8f9315d2a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 21 Dec 2024 15:48:02 +0530 Subject: [PATCH 061/132] Fix registry count --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 9481e18..1d800ca 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -912,11 +912,11 @@ call :dk_color %Blue% "If you have used any tool to block Store, undo it." ) set wcount=0 -for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do if not defined wucorrupt ( +for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do ( reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v %%G %nul% || (set wucorrupt=1&set /a wcount+=1) ) -for %%G in (Parameters Security) do if not defined wucorrupt ( +for %%G in (Parameters Security) do ( reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || (set wucorrupt=1&set /a wcount+=1) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 2e86baf..0d43bc6 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -675,11 +675,11 @@ call :dk_color %Blue% "If you have used any tool to block Store, undo it." ) set wcount=0 -for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do if not defined wucorrupt ( +for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do ( reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v %%G %nul% || (set wucorrupt=1&set /a wcount+=1) ) -for %%G in (Parameters Security) do if not defined wucorrupt ( +for %%G in (Parameters Security) do ( reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || (set wucorrupt=1&set /a wcount+=1) ) From 7262a44ba2f22abd8fe712abcfc7e4fe62b1a300 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 21 Dec 2024 21:15:21 +0530 Subject: [PATCH 062/132] Add obscure product keys --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 25 ++++++++++++++++--- .../Activators/Ohook_Activation_AIO.cmd | 10 ++++++++ .../Activators/Online_KMS_Activation.cmd | 15 ++++++++--- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 1d800ca..83b5d1d 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -3113,6 +3113,7 @@ set f= for %%# in ( :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_B7RFY-7NXPK-Q4342-Y9X2H-3J%f%X4X_Retail________AccessRetail +15_259de5be-492b-44b3-9d78-9645f848f7b0_X3XNB-HJB7K-66THH-8DWQ3-XH%f%GJP_Bypass________AccessRuntimeRetail 15_4374022d-56b8-48c1-9bb7-d8f2fc726343_9MF9G-CN32B-HV7XT-9XJ8T-9K%f%VF4_MAK___________AccessVolume 15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_NT889-MBH4X-8MD4H-X8R2D-WQ%f%HF8_Retail________ExcelRetail 15_ac1ae7fd-b949-4e04-a330-849bc40638cf_Y3N36-YCHDK-XYWBG-KYQVV-BD%f%TJ2_MAK___________ExcelVolume @@ -3120,6 +3121,8 @@ for %%# in ( 15_4825ac28-ce41-45a7-9e6e-1fed74057601_RN84D-7HCWY-FTCBK-JMXWM-HT%f%7GJ_MAK___________GrooveVolume 15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2WQNF-GBK4B-XVG6F-BBMX7-M4%f%F2Y_OEM-Perp______HomeBusinessPipcRetail 15_a2b90e7a-a797-4713-af90-f0becf52a1dd_YWD4R-CNKVT-VG8VJ-9333B-RC%f%W9F_Subscription__HomeBusinessRetail +15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_B92QY-NKYFQ-6KTKH-VWW2Q-3P%f%B3B_OEM-ARM_______HomeStudentARMRetail +15_ebef9f05-5273-404a-9253-c5e252f50555_QPG96-CNT7M-KH36K-KY4HQ-M7%f%TBR_OEM-ARM_______HomeStudentPlusARMRetail 15_f2de350d-3028-410a-bfae-283e00b44d0e_6WW3N-BDGM9-PCCHD-9QPP9-P3%f%4QG_Subscription__HomeStudentRetail 15_44984381-406e-4a35-b1c3-e54f499556e2_RV7NQ-HY3WW-7CKWH-QTVMW-29%f%VHC_Retail________InfoPathRetail 15_9e016989-4007-42a6-8051-64eb97110cf2_C4TGN-QQW6Y-FYKXC-6WJW7-X7%f%3VG_MAK___________InfoPathVolume @@ -3176,6 +3179,8 @@ for %%# in ( 16_685062a7-6024-42e7-8c5f-6bb9e63e697f_FVGNR-X82B2-6PRJM-YT4W7-8H%f%V36_MAK___________ExcelVolume 16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2WQNF-GBK4B-XVG6F-BBMX7-M4%f%F2Y_OEM-Perp______HomeBusinessPipcRetail 16_86834d00-7896-4a38-8fae-32f20b86fa2b_HM6FM-NVF78-KV9PM-F36B8-D9%f%MXD_Retail________HomeBusinessRetail +16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_PBQPJ-NC22K-69MXD-KWMRF-WF%f%G77_OEM-ARM_______HomeStudentARMRetail +16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_6F2NY-7RTX4-MD9KM-TJ43H-94%f%TBT_OEM-ARM_______HomeStudentPlusARMRetail 16_c28acdb8-d8b3-4199-baa4-024d09e97c99_PNPRV-F2627-Q8JVC-3DGR9-WT%f%YRK_Retail________HomeStudentRetail 16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_YWD4R-CNKVT-VG8VJ-9333B-RC%f%3B8_Retail________HomeStudentVNextRetail 16_69ec9152-153b-471a-bf35-77ec88683eae_VNWHF-FKFBW-Q2RGD-HYHWF-R3%f%HH2_Subscription__MondoRetail @@ -3222,6 +3227,8 @@ for %%# in ( 16_c201c2b7-02a1-41a8-b496-37c72910cd4a_KBPNW-64CMM-8KWCB-23F44-8B%f%7HM_Retail________Excel2019Retail 16_05cb4e1d-cc81-45d5-a769-f34b09b9b391_8NT4X-GQMCK-62X4P-TW6QP-YK%f%PYF_MAK-AE________Excel2019Volume 16_7fe09eef-5eed-4733-9a60-d7019df11cac_QBN2Y-9B284-9KW78-K48PB-R6%f%2YT_Retail________HomeBusiness2019Retail +16_6303d14a-afad-431f-8434-81052a65f575_DJTNY-4HDWM-TDWB2-8PWC2-W2%f%RRT_OEM-ARM_______HomeStudentARM2019Retail +16_215c841d-ffc1-4f03-bd11-5b27b6ab64cc_NM8WT-CFHB2-QBGXK-J8W6J-GV%f%K8F_OEM-ARM_______HomeStudentPlusARM2019Retail 16_4539aa2c-5c31-4d47-9139-543a868e5741_XNWPM-32XQC-Y7QJC-QGGBV-YY%f%7JK_Retail________HomeStudent2019Retail 16_20e359d5-927f-47c0-8a27-38adbdd27124_WR43D-NMWQQ-HCQR2-VKXDR-37%f%B7H_Retail________Outlook2019Retail 16_92a99ed8-2923-4cb7-a4c5-31da6b0b8cf3_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%QYB_MAK-AE________Outlook2019Volume @@ -3251,11 +3258,14 @@ for %%# in ( :: Office 2021 16_f634398e-af69-48c9-b256-477bea3078b5_P286B-N3XYP-36QRQ-29CMP-RV%f%X9M_Retail________Access2021Retail 16_ae17db74-16b0-430b-912f-4fe456e271db_JBH3N-P97FP-FRTJD-MGK2C-VF%f%WG6_MAK-AE________Access2021Volume +16_844c36cb-851c-49e7-9079-12e62a049e2a_MNX9D-PB834-VCGY2-K2RW2-2D%f%P3D_Bypass________AccessRuntime2021Retail 16_fb099c19-d48b-4a2f-a160-4383011060aa_V6QFB-7N7G9-PF7W9-M8FQM-MY%f%8G9_Retail________Excel2021Retail 16_9da1ecdb-3a62-4273-a234-bf6d43dc0778_WNYR4-KMR9H-KVC8W-7HJ8B-K7%f%9DQ_MAK-AE________Excel2021Volume 16_38b92b63-1dff-4be7-8483-2a839441a2bc_JM99N-4MMD8-DQCGJ-VMYFY-R6%f%3YK_Subscription__HomeBusiness2021Retail 16_2f258377-738f-48dd-9397-287e43079958_N3CWD-38XVH-KRX2Y-YRP74-6R%f%BB2_Subscription__HomeStudent2021Retail 16_279706f4-3a4b-4877-949b-f8c299cf0cc5_NB2TQ-3Y79C-77C6M-QMY7H-7Q%f%Y8P_Retail________OneNote2021Retail +16_0c7af60d-0664-49fc-9b01-41b2dea81380_THNKC-KFR6C-Y86Q9-W8CB3-GF%f%7PD_MAK-AE________OneNote2021Volume +16_778ccb9a-2f6a-44e5-853c-eb22b7609643_CNM3W-V94GB-QJQHH-BDQ3J-33%f%Y8H_Bypass________OneNoteFree2021Retail 16_ecea2cfa-d406-4a7f-be0d-c6163250d126_4NCWR-9V92Y-34VB2-RPTHR-YT%f%GR7_Retail________Outlook2021Retail 16_45bf67f9-0fc8-4335-8b09-9226cef8a576_JQ9MJ-QYN6B-67PX9-GYFVY-QJ%f%6TB_MAK-AE________Outlook2021Volume 16_8f89391e-eedb-429d-af90-9d36fbf94de6_RRRYB-DN749-GCPW4-9H6VK-HC%f%HPT_Retail________Personal2021Retail @@ -6162,10 +6172,13 @@ for %%# in ( 14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_WordR :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_AccessRetail +15_259de5be-492b-44b3-9d78-9645f848f7b0_AccessRuntimeRetail 15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_ExcelRetail 15_cfaf5356-49e3-48a8-ab3c-e729ab791250_GrooveRetail 15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail 15_a2b90e7a-a797-4713-af90-f0becf52a1dd_HomeBusinessRetail +15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_HomeStudentARMRetail +15_ebef9f05-5273-404a-9253-c5e252f50555_HomeStudentPlusARMRetail 15_f2de350d-3028-410a-bfae-283e00b44d0e_HomeStudentRetail 15_44984381-406e-4a35-b1c3-e54f499556e2_InfoPathRetail 15_9103f3ce-1084-447a-827e-d6097f68c895_LyncAcademicRetail @@ -6207,6 +6220,8 @@ for %%# in ( 16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail 16_86834d00-7896-4a38-8fae-32f20b86fa2b_HomeBusinessRetail 16_c28acdb8-d8b3-4199-baa4-024d09e97c99_HomeStudentRetail +16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_HomeStudentARMRetail +16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_HomeStudentPlusARMRetail 16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_HomeStudentVNextRetail 16_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail 16_436366de-5579-4f24-96db-3893e4400030_OneNoteFreeRetail @@ -6405,6 +6420,7 @@ ea509e87-07a1-4a45-9edc-eba5a39f36af_D6QFG-VBYP2-XQHM7-J97RH-VV%f%RCK__14_SmallB 2d0882e7-a4e7-423b-8ccc-70d91e0158b1_HVHB3-C6FV7-KQX9W-YQG79-CR%f%Y7T__14_WordVL :: Office 2013 6ee7622c-18d8-4005-9fb7-92db644a279b_NG2JY-H4JBT-HQXYP-78QH9-4J%f%M2D__15_AccessVolume_-AccessRetail- +259de5be-492b-44b3-9d78-9645f848f7b0_X3XNB-HJB7K-66THH-8DWQ3-XH%f%GJP__15_AccessRuntimeRetail_[Bypass] f7461d52-7c2b-43b2-8744-ea958e0bd09a_VGPNG-Y7HQW-9RHP7-TKPV3-BG%f%7GB__15_ExcelVolume_-ExcelRetail- fb4875ec-0c6b-450f-b82b-ab57d8d1677f_H7R7V-WPNXQ-WCYYC-76BGV-VT%f%7GH__15_GrooveVolume_-GrooveRetail- a30b8040-d68a-423f-b0b5-9ce292ea5a8f_DKT8B-N7VXH-D963P-Q4PHY-F8%f%894__15_InfoPathVolume_-InfoPathRetail- @@ -6422,7 +6438,7 @@ efe1f3e6-aea2-4144-a208-32aa872b6545_TGN6P-8MMBC-37P2F-XHXXK-P3%f%4VW__15_OneNot b322da9c-a2e2-4058-9e4e-f59a6970bd69_YC7DK-G2NP3-2QQC3-J6H88-GV%f%GXT__15_ProPlusVolume_-ProPlusRetail-ProfessionalPipcRetail-ProfessionalRetail- 00c79ff1-6850-443d-bf61-71cde0de305f_PN2WF-29XG2-T9HJ7-JQPJR-FC%f%XK4__15_PublisherVolume_-PublisherRetail- ba3e3833-6a7e-445a-89d0-7802a9a68588_3NY6J-WHT3F-47BDV-JHF36-23%f%43W__15_SPDRetail_[PrepidBypass] -b13afb38-cd79-4ae5-9f7f-eed058d750ca_KBKQT-2NMXY-JJWGP-M62JB-92%f%CD4__15_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentRetail-PersonalPipcRetail-PersonalRetail- +b13afb38-cd79-4ae5-9f7f-eed058d750ca_KBKQT-2NMXY-JJWGP-M62JB-92%f%CD4__15_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentARMRetail-HomeStudentPlusARMRetail-HomeStudentRetail-PersonalPipcRetail-PersonalRetail- e13ac10e-75d0-4aff-a0cd-764982cf541c_C2FG9-N6J68-H8BTJ-BW3QX-RM%f%3B3__15_VisioProVolume_-VisioProRetail- ac4efaf0-f81f-4f61-bdf7-ea32b02ab117_J484Y-4NKBF-W2HMG-DBMJC-PG%f%WR7__15_VisioStdVolume_-VisioStdRetail- d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3_6Q7VD-NX8JD-WJ2VH-88V73-4G%f%BJ7__15_WordVolume_-WordRetail- @@ -6445,7 +6461,7 @@ d450596f-894d-49e0-966a-fd39ed4c4c64_XQNVK-8JYDB-WJ9W3-YJ8YR-WF%f%G99__16_ProPlu 9103f3ce-1084-447a-827e-d6097f68c895_6MDN4-WF3FV-4WH3Q-W699V-RG%f%CMY__16_SkypeServiceBypassRetail_[PrepidBypass] 971cd368-f2e1-49c1-aedd-330909ce18b6_4N4D8-3J7Y3-YYW7C-73HD2-V8%f%RHY__16_SkypeforBusinessEntryRetail_[PrepidBypass] 83e04ee1-fa8d-436d-8994-d31a862cab77_869NQ-FJ69K-466HW-QYCP2-DD%f%BV6__16_SkypeforBusinessVolume_-SkypeforBusinessRetail- -dedfa23d-6ed1-45a6-85dc-63cae0546de6_JNRGM-WHDWX-FJJG3-K47QV-DR%f%TFM__16_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentRetail-HomeStudentVNextRetail-PersonalPipcRetail-PersonalRetail- +dedfa23d-6ed1-45a6-85dc-63cae0546de6_JNRGM-WHDWX-FJJG3-K47QV-DR%f%TFM__16_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentARMRetail-HomeStudentPlusARMRetail-HomeStudentRetail-HomeStudentVNextRetail-PersonalPipcRetail-PersonalRetail- 6bf301c1-b94a-43e9-ba31-d494598c47fb_PD3PC-RHNGV-FXJ29-8JK7D-RJ%f%RJK__16_VisioProVolume_-VisioProRetail- b234abe3-0857-4f9c-b05a-4dc314f85557_69WXN-MBYV6-22PQG-3WGHK-RM%f%6XC__16_VisioProXVolume aa2a7821-1827-4c2c-8f1d-4513a34dda97_7WHWN-4T7MP-G96JF-G33KR-W8%f%GF4__16_VisioStdVolume_-VisioStdRetail- @@ -6463,14 +6479,17 @@ c8f8a301-19f5-4132-96ce-2de9d4adbd33_7HD7K-N4PVK-BHBCQ-YWQRW-XW%f%4VK__16_Outloo 9d3e4cca-e172-46f1-a2f4-1d2107051444_G2KWX-3NW6P-PY93R-JXK2T-C9%f%Y9V__16_Publisher2019Volume_-Publisher2019Retail- 734c6c6e-b0ba-4298-a891-671772b2bd1b_NCJ33-JHBBY-HTK98-MYCV8-HM%f%KHJ__16_SkypeforBusiness2019Volume_-SkypeforBusiness2019Retail- f88cfdec-94ce-4463-a969-037be92bc0e7_N9722-BV9H6-WTJTT-FPB93-97%f%8MK__16_SkypeforBusinessEntry2019Retail_[PrepidBypass] -6912a74b-a5fb-401a-bfdb-2e3ab46f4b02_6NWWJ-YQWMR-QKGCB-6TMB3-9D%f%9HK__16_Standard2019Volume_-Standard2019Retail-HomeBusiness2019Retail-HomeStudent2019Retail-Personal2019Retail- +6912a74b-a5fb-401a-bfdb-2e3ab46f4b02_6NWWJ-YQWMR-QKGCB-6TMB3-9D%f%9HK__16_Standard2019Volume_-Standard2019Retail-HomeBusiness2019Retail-HomeStudentARM2019Retail-HomeStudentPlusARM2019Retail-HomeStudent2019Retail-Personal2019Retail- 5b5cf08f-b81a-431d-b080-3450d8620565_9BGNQ-K37YR-RQHF2-38RQ3-7V%f%CBB__16_VisioPro2019Volume_-VisioPro2019Retail- e06d7df3-aad0-419d-8dfb-0ac37e2bdf39_7TQNQ-K3YQQ-3PFH7-CCPPM-X4%f%VQ2__16_VisioStd2019Volume_-VisioStd2019Retail- 059834fe-a8ea-4bff-b67b-4d006b5447d3_PBX3G-NWMT6-Q7XBW-PYJGG-WX%f%D33__16_Word2019Volume_-Word2019Retail- :: Office 2021 +:: OneNote2021Volume KMS license is not available +844c36cb-851c-49e7-9079-12e62a049e2a_MNX9D-PB834-VCGY2-K2RW2-2D%f%P3D__16_AccessRuntime2021Retail_[Bypass] 1fe429d8-3fa7-4a39-b6f0-03dded42fe14_WM8YG-YNGDD-4JHDC-PG3F4-FC%f%4T4__16_Access2021Volume_-Access2021Retail- ea71effc-69f1-4925-9991-2f5e319bbc24_NWG3X-87C9K-TC7YY-BC2G7-G6%f%RVC__16_Excel2021Volume_-Excel2021Retail- a5799e4c-f83c-4c6e-9516-dfe9b696150b_C9FM6-3N72F-HFJXB-TM3V9-T8%f%6R9__16_Outlook2021Volume_-Outlook2021Retail- +778ccb9a-2f6a-44e5-853c-eb22b7609643_CNM3W-V94GB-QJQHH-BDQ3J-33%f%Y8H__16_OneNoteFree2021Retail_[Bypass] 6e166cc3-495d-438a-89e7-d7c9e6fd4dea_TY7XF-NFRBR-KJ44C-G83KF-GX%f%27K__16_PowerPoint2021Volume_-PowerPoint2021Retail- 76881159-155c-43e0-9db7-2d70a9a3a4ca_FTNWT-C6WBT-8HMGF-K9PRX-QV%f%9H8__16_ProjectPro2021Volume_-ProjectPro2021Retail- 6dd72704-f752-4b71-94c7-11cec6bfc355_J2JDC-NJCYY-9RGQ4-YXWMH-T3%f%D4T__16_ProjectStd2021Volume_-ProjectStd2021Retail- diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 2c13f10..fd84032 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2144,6 +2144,7 @@ set f= for %%# in ( :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_B7RFY-7NXPK-Q4342-Y9X2H-3J%f%X4X_Retail________AccessRetail +15_259de5be-492b-44b3-9d78-9645f848f7b0_X3XNB-HJB7K-66THH-8DWQ3-XH%f%GJP_Bypass________AccessRuntimeRetail 15_4374022d-56b8-48c1-9bb7-d8f2fc726343_9MF9G-CN32B-HV7XT-9XJ8T-9K%f%VF4_MAK___________AccessVolume 15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_NT889-MBH4X-8MD4H-X8R2D-WQ%f%HF8_Retail________ExcelRetail 15_ac1ae7fd-b949-4e04-a330-849bc40638cf_Y3N36-YCHDK-XYWBG-KYQVV-BD%f%TJ2_MAK___________ExcelVolume @@ -2151,6 +2152,8 @@ for %%# in ( 15_4825ac28-ce41-45a7-9e6e-1fed74057601_RN84D-7HCWY-FTCBK-JMXWM-HT%f%7GJ_MAK___________GrooveVolume 15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2WQNF-GBK4B-XVG6F-BBMX7-M4%f%F2Y_OEM-Perp______HomeBusinessPipcRetail 15_a2b90e7a-a797-4713-af90-f0becf52a1dd_YWD4R-CNKVT-VG8VJ-9333B-RC%f%W9F_Subscription__HomeBusinessRetail +15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_B92QY-NKYFQ-6KTKH-VWW2Q-3P%f%B3B_OEM-ARM_______HomeStudentARMRetail +15_ebef9f05-5273-404a-9253-c5e252f50555_QPG96-CNT7M-KH36K-KY4HQ-M7%f%TBR_OEM-ARM_______HomeStudentPlusARMRetail 15_f2de350d-3028-410a-bfae-283e00b44d0e_6WW3N-BDGM9-PCCHD-9QPP9-P3%f%4QG_Subscription__HomeStudentRetail 15_44984381-406e-4a35-b1c3-e54f499556e2_RV7NQ-HY3WW-7CKWH-QTVMW-29%f%VHC_Retail________InfoPathRetail 15_9e016989-4007-42a6-8051-64eb97110cf2_C4TGN-QQW6Y-FYKXC-6WJW7-X7%f%3VG_MAK___________InfoPathVolume @@ -2207,6 +2210,8 @@ for %%# in ( 16_685062a7-6024-42e7-8c5f-6bb9e63e697f_FVGNR-X82B2-6PRJM-YT4W7-8H%f%V36_MAK___________ExcelVolume 16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_2WQNF-GBK4B-XVG6F-BBMX7-M4%f%F2Y_OEM-Perp______HomeBusinessPipcRetail 16_86834d00-7896-4a38-8fae-32f20b86fa2b_HM6FM-NVF78-KV9PM-F36B8-D9%f%MXD_Retail________HomeBusinessRetail +16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_PBQPJ-NC22K-69MXD-KWMRF-WF%f%G77_OEM-ARM_______HomeStudentARMRetail +16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_6F2NY-7RTX4-MD9KM-TJ43H-94%f%TBT_OEM-ARM_______HomeStudentPlusARMRetail 16_c28acdb8-d8b3-4199-baa4-024d09e97c99_PNPRV-F2627-Q8JVC-3DGR9-WT%f%YRK_Retail________HomeStudentRetail 16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_YWD4R-CNKVT-VG8VJ-9333B-RC%f%3B8_Retail________HomeStudentVNextRetail 16_69ec9152-153b-471a-bf35-77ec88683eae_VNWHF-FKFBW-Q2RGD-HYHWF-R3%f%HH2_Subscription__MondoRetail @@ -2253,6 +2258,8 @@ for %%# in ( 16_c201c2b7-02a1-41a8-b496-37c72910cd4a_KBPNW-64CMM-8KWCB-23F44-8B%f%7HM_Retail________Excel2019Retail 16_05cb4e1d-cc81-45d5-a769-f34b09b9b391_8NT4X-GQMCK-62X4P-TW6QP-YK%f%PYF_MAK-AE________Excel2019Volume 16_7fe09eef-5eed-4733-9a60-d7019df11cac_QBN2Y-9B284-9KW78-K48PB-R6%f%2YT_Retail________HomeBusiness2019Retail +16_6303d14a-afad-431f-8434-81052a65f575_DJTNY-4HDWM-TDWB2-8PWC2-W2%f%RRT_OEM-ARM_______HomeStudentARM2019Retail +16_215c841d-ffc1-4f03-bd11-5b27b6ab64cc_NM8WT-CFHB2-QBGXK-J8W6J-GV%f%K8F_OEM-ARM_______HomeStudentPlusARM2019Retail 16_4539aa2c-5c31-4d47-9139-543a868e5741_XNWPM-32XQC-Y7QJC-QGGBV-YY%f%7JK_Retail________HomeStudent2019Retail 16_20e359d5-927f-47c0-8a27-38adbdd27124_WR43D-NMWQQ-HCQR2-VKXDR-37%f%B7H_Retail________Outlook2019Retail 16_92a99ed8-2923-4cb7-a4c5-31da6b0b8cf3_RN3QB-GT6D7-YB3VH-F3RPB-3G%f%QYB_MAK-AE________Outlook2019Volume @@ -2282,11 +2289,14 @@ for %%# in ( :: Office 2021 16_f634398e-af69-48c9-b256-477bea3078b5_P286B-N3XYP-36QRQ-29CMP-RV%f%X9M_Retail________Access2021Retail 16_ae17db74-16b0-430b-912f-4fe456e271db_JBH3N-P97FP-FRTJD-MGK2C-VF%f%WG6_MAK-AE________Access2021Volume +16_844c36cb-851c-49e7-9079-12e62a049e2a_MNX9D-PB834-VCGY2-K2RW2-2D%f%P3D_Bypass________AccessRuntime2021Retail 16_fb099c19-d48b-4a2f-a160-4383011060aa_V6QFB-7N7G9-PF7W9-M8FQM-MY%f%8G9_Retail________Excel2021Retail 16_9da1ecdb-3a62-4273-a234-bf6d43dc0778_WNYR4-KMR9H-KVC8W-7HJ8B-K7%f%9DQ_MAK-AE________Excel2021Volume 16_38b92b63-1dff-4be7-8483-2a839441a2bc_JM99N-4MMD8-DQCGJ-VMYFY-R6%f%3YK_Subscription__HomeBusiness2021Retail 16_2f258377-738f-48dd-9397-287e43079958_N3CWD-38XVH-KRX2Y-YRP74-6R%f%BB2_Subscription__HomeStudent2021Retail 16_279706f4-3a4b-4877-949b-f8c299cf0cc5_NB2TQ-3Y79C-77C6M-QMY7H-7Q%f%Y8P_Retail________OneNote2021Retail +16_0c7af60d-0664-49fc-9b01-41b2dea81380_THNKC-KFR6C-Y86Q9-W8CB3-GF%f%7PD_MAK-AE________OneNote2021Volume +16_778ccb9a-2f6a-44e5-853c-eb22b7609643_CNM3W-V94GB-QJQHH-BDQ3J-33%f%Y8H_Bypass________OneNoteFree2021Retail 16_ecea2cfa-d406-4a7f-be0d-c6163250d126_4NCWR-9V92Y-34VB2-RPTHR-YT%f%GR7_Retail________Outlook2021Retail 16_45bf67f9-0fc8-4335-8b09-9226cef8a576_JQ9MJ-QYN6B-67PX9-GYFVY-QJ%f%6TB_MAK-AE________Outlook2021Volume 16_8f89391e-eedb-429d-af90-9d36fbf94de6_RRRYB-DN749-GCPW4-9H6VK-HC%f%HPT_Retail________Personal2021Retail diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index af20991..d22fe85 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3275,10 +3275,13 @@ for %%# in ( 14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_WordR :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_AccessRetail +15_259de5be-492b-44b3-9d78-9645f848f7b0_AccessRuntimeRetail 15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_ExcelRetail 15_cfaf5356-49e3-48a8-ab3c-e729ab791250_GrooveRetail 15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail 15_a2b90e7a-a797-4713-af90-f0becf52a1dd_HomeBusinessRetail +15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_HomeStudentARMRetail +15_ebef9f05-5273-404a-9253-c5e252f50555_HomeStudentPlusARMRetail 15_f2de350d-3028-410a-bfae-283e00b44d0e_HomeStudentRetail 15_44984381-406e-4a35-b1c3-e54f499556e2_InfoPathRetail 15_9103f3ce-1084-447a-827e-d6097f68c895_LyncAcademicRetail @@ -3320,6 +3323,8 @@ for %%# in ( 16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail 16_86834d00-7896-4a38-8fae-32f20b86fa2b_HomeBusinessRetail 16_c28acdb8-d8b3-4199-baa4-024d09e97c99_HomeStudentRetail +16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_HomeStudentARMRetail +16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_HomeStudentPlusARMRetail 16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_HomeStudentVNextRetail 16_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail 16_436366de-5579-4f24-96db-3893e4400030_OneNoteFreeRetail @@ -3518,6 +3523,7 @@ ea509e87-07a1-4a45-9edc-eba5a39f36af_D6QFG-VBYP2-XQHM7-J97RH-VV%f%RCK__14_SmallB 2d0882e7-a4e7-423b-8ccc-70d91e0158b1_HVHB3-C6FV7-KQX9W-YQG79-CR%f%Y7T__14_WordVL :: Office 2013 6ee7622c-18d8-4005-9fb7-92db644a279b_NG2JY-H4JBT-HQXYP-78QH9-4J%f%M2D__15_AccessVolume_-AccessRetail- +259de5be-492b-44b3-9d78-9645f848f7b0_X3XNB-HJB7K-66THH-8DWQ3-XH%f%GJP__15_AccessRuntimeRetail_[Bypass] f7461d52-7c2b-43b2-8744-ea958e0bd09a_VGPNG-Y7HQW-9RHP7-TKPV3-BG%f%7GB__15_ExcelVolume_-ExcelRetail- fb4875ec-0c6b-450f-b82b-ab57d8d1677f_H7R7V-WPNXQ-WCYYC-76BGV-VT%f%7GH__15_GrooveVolume_-GrooveRetail- a30b8040-d68a-423f-b0b5-9ce292ea5a8f_DKT8B-N7VXH-D963P-Q4PHY-F8%f%894__15_InfoPathVolume_-InfoPathRetail- @@ -3535,7 +3541,7 @@ efe1f3e6-aea2-4144-a208-32aa872b6545_TGN6P-8MMBC-37P2F-XHXXK-P3%f%4VW__15_OneNot b322da9c-a2e2-4058-9e4e-f59a6970bd69_YC7DK-G2NP3-2QQC3-J6H88-GV%f%GXT__15_ProPlusVolume_-ProPlusRetail-ProfessionalPipcRetail-ProfessionalRetail- 00c79ff1-6850-443d-bf61-71cde0de305f_PN2WF-29XG2-T9HJ7-JQPJR-FC%f%XK4__15_PublisherVolume_-PublisherRetail- ba3e3833-6a7e-445a-89d0-7802a9a68588_3NY6J-WHT3F-47BDV-JHF36-23%f%43W__15_SPDRetail_[PrepidBypass] -b13afb38-cd79-4ae5-9f7f-eed058d750ca_KBKQT-2NMXY-JJWGP-M62JB-92%f%CD4__15_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentRetail-PersonalPipcRetail-PersonalRetail- +b13afb38-cd79-4ae5-9f7f-eed058d750ca_KBKQT-2NMXY-JJWGP-M62JB-92%f%CD4__15_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentARMRetail-HomeStudentPlusARMRetail-HomeStudentRetail-PersonalPipcRetail-PersonalRetail- e13ac10e-75d0-4aff-a0cd-764982cf541c_C2FG9-N6J68-H8BTJ-BW3QX-RM%f%3B3__15_VisioProVolume_-VisioProRetail- ac4efaf0-f81f-4f61-bdf7-ea32b02ab117_J484Y-4NKBF-W2HMG-DBMJC-PG%f%WR7__15_VisioStdVolume_-VisioStdRetail- d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3_6Q7VD-NX8JD-WJ2VH-88V73-4G%f%BJ7__15_WordVolume_-WordRetail- @@ -3558,7 +3564,7 @@ d450596f-894d-49e0-966a-fd39ed4c4c64_XQNVK-8JYDB-WJ9W3-YJ8YR-WF%f%G99__16_ProPlu 9103f3ce-1084-447a-827e-d6097f68c895_6MDN4-WF3FV-4WH3Q-W699V-RG%f%CMY__16_SkypeServiceBypassRetail_[PrepidBypass] 971cd368-f2e1-49c1-aedd-330909ce18b6_4N4D8-3J7Y3-YYW7C-73HD2-V8%f%RHY__16_SkypeforBusinessEntryRetail_[PrepidBypass] 83e04ee1-fa8d-436d-8994-d31a862cab77_869NQ-FJ69K-466HW-QYCP2-DD%f%BV6__16_SkypeforBusinessVolume_-SkypeforBusinessRetail- -dedfa23d-6ed1-45a6-85dc-63cae0546de6_JNRGM-WHDWX-FJJG3-K47QV-DR%f%TFM__16_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentRetail-HomeStudentVNextRetail-PersonalPipcRetail-PersonalRetail- +dedfa23d-6ed1-45a6-85dc-63cae0546de6_JNRGM-WHDWX-FJJG3-K47QV-DR%f%TFM__16_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentARMRetail-HomeStudentPlusARMRetail-HomeStudentRetail-HomeStudentVNextRetail-PersonalPipcRetail-PersonalRetail- 6bf301c1-b94a-43e9-ba31-d494598c47fb_PD3PC-RHNGV-FXJ29-8JK7D-RJ%f%RJK__16_VisioProVolume_-VisioProRetail- b234abe3-0857-4f9c-b05a-4dc314f85557_69WXN-MBYV6-22PQG-3WGHK-RM%f%6XC__16_VisioProXVolume aa2a7821-1827-4c2c-8f1d-4513a34dda97_7WHWN-4T7MP-G96JF-G33KR-W8%f%GF4__16_VisioStdVolume_-VisioStdRetail- @@ -3576,14 +3582,17 @@ c8f8a301-19f5-4132-96ce-2de9d4adbd33_7HD7K-N4PVK-BHBCQ-YWQRW-XW%f%4VK__16_Outloo 9d3e4cca-e172-46f1-a2f4-1d2107051444_G2KWX-3NW6P-PY93R-JXK2T-C9%f%Y9V__16_Publisher2019Volume_-Publisher2019Retail- 734c6c6e-b0ba-4298-a891-671772b2bd1b_NCJ33-JHBBY-HTK98-MYCV8-HM%f%KHJ__16_SkypeforBusiness2019Volume_-SkypeforBusiness2019Retail- f88cfdec-94ce-4463-a969-037be92bc0e7_N9722-BV9H6-WTJTT-FPB93-97%f%8MK__16_SkypeforBusinessEntry2019Retail_[PrepidBypass] -6912a74b-a5fb-401a-bfdb-2e3ab46f4b02_6NWWJ-YQWMR-QKGCB-6TMB3-9D%f%9HK__16_Standard2019Volume_-Standard2019Retail-HomeBusiness2019Retail-HomeStudent2019Retail-Personal2019Retail- +6912a74b-a5fb-401a-bfdb-2e3ab46f4b02_6NWWJ-YQWMR-QKGCB-6TMB3-9D%f%9HK__16_Standard2019Volume_-Standard2019Retail-HomeBusiness2019Retail-HomeStudentARM2019Retail-HomeStudentPlusARM2019Retail-HomeStudent2019Retail-Personal2019Retail- 5b5cf08f-b81a-431d-b080-3450d8620565_9BGNQ-K37YR-RQHF2-38RQ3-7V%f%CBB__16_VisioPro2019Volume_-VisioPro2019Retail- e06d7df3-aad0-419d-8dfb-0ac37e2bdf39_7TQNQ-K3YQQ-3PFH7-CCPPM-X4%f%VQ2__16_VisioStd2019Volume_-VisioStd2019Retail- 059834fe-a8ea-4bff-b67b-4d006b5447d3_PBX3G-NWMT6-Q7XBW-PYJGG-WX%f%D33__16_Word2019Volume_-Word2019Retail- :: Office 2021 +:: OneNote2021Volume KMS license is not available +844c36cb-851c-49e7-9079-12e62a049e2a_MNX9D-PB834-VCGY2-K2RW2-2D%f%P3D__16_AccessRuntime2021Retail_[Bypass] 1fe429d8-3fa7-4a39-b6f0-03dded42fe14_WM8YG-YNGDD-4JHDC-PG3F4-FC%f%4T4__16_Access2021Volume_-Access2021Retail- ea71effc-69f1-4925-9991-2f5e319bbc24_NWG3X-87C9K-TC7YY-BC2G7-G6%f%RVC__16_Excel2021Volume_-Excel2021Retail- a5799e4c-f83c-4c6e-9516-dfe9b696150b_C9FM6-3N72F-HFJXB-TM3V9-T8%f%6R9__16_Outlook2021Volume_-Outlook2021Retail- +778ccb9a-2f6a-44e5-853c-eb22b7609643_CNM3W-V94GB-QJQHH-BDQ3J-33%f%Y8H__16_OneNoteFree2021Retail_[Bypass] 6e166cc3-495d-438a-89e7-d7c9e6fd4dea_TY7XF-NFRBR-KJ44C-G83KF-GX%f%27K__16_PowerPoint2021Volume_-PowerPoint2021Retail- 76881159-155c-43e0-9db7-2d70a9a3a4ca_FTNWT-C6WBT-8HMGF-K9PRX-QV%f%9H8__16_ProjectPro2021Volume_-ProjectPro2021Retail- 6dd72704-f752-4b71-94c7-11cec6bfc355_J2JDC-NJCYY-9RGQ4-YXWMH-T3%f%D4T__16_ProjectStd2021Volume_-ProjectStd2021Retail- From a4f9b219ab7ddf16312543a9a22728f165922074 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 9 Jan 2025 00:21:13 +0530 Subject: [PATCH 063/132] Change wordings --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 83b5d1d..a35e855 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1676,7 +1676,7 @@ set error=1 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by HWID spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 0d43bc6..fc5cb9b 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1423,7 +1423,7 @@ set error=1 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by HWID spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 99b8a78..a4ab539 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1575,7 +1575,7 @@ set error=1 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by HWID spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index fd84032..0cd6b3c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1904,7 +1904,7 @@ set error=1 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by HWID spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index d22fe85..314e1f4 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3005,7 +3005,7 @@ set error=1 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by HWID spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) From f2e40bf88e98c823de1efe81d8edeed97acbaf52 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 9 Jan 2025 00:44:02 +0530 Subject: [PATCH 064/132] Fix an issue where the script doesn't show fix licensing suggestion --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index a35e855..368a657 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1723,9 +1723,9 @@ if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f if not defined allapps ( +set error=1 set "_notfoundids=Not found" ) -set error=1 call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index fc5cb9b..b4eac27 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1470,9 +1470,9 @@ if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f if not defined allapps ( +set error=1 set "_notfoundids=Not found" ) -set error=1 call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index a4ab539..a2f555b 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1622,9 +1622,9 @@ if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f if not defined allapps ( +set error=1 set "_notfoundids=Not found" ) -set error=1 call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 0cd6b3c..8baf82e 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1951,9 +1951,9 @@ if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f if not defined allapps ( +set error=1 set "_notfoundids=Not found" ) -set error=1 call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 314e1f4..3a775cd 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3052,9 +3052,9 @@ if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f if not defined allapps ( +set error=1 set "_notfoundids=Not found" ) -set error=1 call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) From 8e2677b1f9b05aa3fe6bba3d900e1c2dfd852584 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 17 Jan 2025 04:34:03 +0530 Subject: [PATCH 065/132] Check license files instead of folder in change edition --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 368a657..7c1fd34 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -8853,7 +8853,7 @@ set _dismapi=0 :: Check if DISM API or slmgr.vbs is required for edition upgrade -if not exist "%SysPath%\spp\tokens\skus\%targetedition%\" ( +if not exist "%SysPath%\spp\tokens\skus\%targetedition%\%targetedition%*.xrm-ms" ( echo %_wtarget% | find /i " %targetedition% " || ( set _dismapi=1 ) diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 6a7aada..868666d 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -506,7 +506,7 @@ set _dismapi=0 :: Check if DISM API or slmgr.vbs is required for edition upgrade -if not exist "%SysPath%\spp\tokens\skus\%targetedition%\" ( +if not exist "%SysPath%\spp\tokens\skus\%targetedition%\%targetedition%*.xrm-ms" ( echo %_wtarget% | find /i " %targetedition% " || ( set _dismapi=1 ) From b732e2c8d71d438228f82f0ac850a37b4f8ffb42 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 17 Jan 2025 17:28:44 +0530 Subject: [PATCH 066/132] Remove permanent activated IDs check in Office scripts --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 67 +------------------ .../Activators/Ohook_Activation_AIO.cmd | 67 +------------------ .../Activators/Online_KMS_Activation.cmd | 5 +- 3 files changed, 3 insertions(+), 136 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 7c1fd34..c5077ab 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2247,16 +2247,6 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2 ::======================================================================================================================================== -:: Check already activated products list - -set actiProds15= -set actiProds16= - -if not "%o15c2r%%o15msi%"=="" call :oh_findactivated -like 15 -if not "%o16c2r%%o16msi%"=="" call :oh_findactivated -notlike 16 - -::======================================================================================================================================== - :: Process Office 15.0 C2R if not defined o15c2r goto :starto16c2r @@ -2725,11 +2715,6 @@ exit /b for %%# in (%_oIds%) do ( -echo: !actiProds%oVer%! | find /i "-%%#-" %nul1% && ( -call :dk_color %Gray% "Checking Activation Status [%%# is already permanently activated]" - -) || ( - set key= set _actid= set _lic= @@ -2754,7 +2739,6 @@ set fixes=%fixes% %mas% call :dk_color %_Yellow% "%mas%" ) ) -) :: Add SharedComputerLicensing registry key if Retail Office C2R is installed on Windows Server :: https://learn.microsoft.com/en-us/office/troubleshoot/office-suite-issues/click-to-run-office-on-terminal-server @@ -2827,46 +2811,6 @@ exit /b ::======================================================================================================================================== -:oh_findactivated - -set oVer=%2 -set _FsortIds= -set actiProds= - -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT LicenseFamily, Name FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL' | Where-Object { $_.Name %1 '*Office 15*' }).LicenseFamily" %nul6%') do call set "actiProds=%%a !actiProds!" - -if not defined actiProds exit /b - -for %%# in (%actiProds%) do ( -set _sortIds=%%# -set _sortIds=!_sortIds:OfficeSPDFreeR_=SPDRetail_! -set _sortIds=!_sortIds:XC2RVL_=XVolume_! -set _sortIds=!_sortIds:CO365R_=Retail_! -set _sortIds=!_sortIds:O365R_=Retail_! -set _sortIds=!_sortIds:E5R_=Retail_! -set _sortIds=!_sortIds:MSDNR_=Retail_! -set _sortIds=!_sortIds:DemoR_=Retail_! -set _sortIds=!_sortIds:EDUR_=Retail_! -set _sortIds=!_sortIds:R_=Retail_! -set _sortIds=!_sortIds:VL_=Volume_! -set _sortIds=!_sortIds:Office16=! -set _sortIds=!_sortIds:Office19=! -set _sortIds=!_sortIds:Office21=! -set _sortIds=!_sortIds:Office24=! -set _sortIds=!_sortIds:Office=! -for /f "tokens=1 delims=-_" %%a in ("!_sortIds!") do set "_sortIds=-%%a-" -set _FsortIds=!_sortIds! !_FsortIds! -) - -call :ohookdata findactivated %2 -exit /b - -:: Below IDs are not checked for permanent activation -set _sortIds=!_sortIds:PreviewVL_=Volume_! -set _sortIds=!_sortIds:PreInstallR_=Retail_! - -::======================================================================================================================================== - :oh_clearblock :: Find remnants of Office vNext/shared/device license block and remove it because it stops other licenses from appearing @@ -3028,11 +2972,8 @@ set upk_result=0 call :dk_actid 0ff1ce15-a989-479d-af46-f275c6370663 if "%_actprojvis%"=="1" ( -set _allactid= for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.Description -match 'KMSCLIENT' -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" -) else ( -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" ) for %%# in (%apps%) do ( @@ -3344,12 +3285,6 @@ if defined _oIds (set _oIds=!_oIds! %%E) else (set _oIds=%%E) ) ) -if %1==findactivated if %oVer%==%%A ( -echo "!_FsortIds!" | find /i "-%%E-" %nul% && ( -set actiProds%oVer%=!actiProds%oVer%! -%%E- -) -) - ) ) exit /b diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 8baf82e..43a3337 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -495,16 +495,6 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2 ::======================================================================================================================================== -:: Check already activated products list - -set actiProds15= -set actiProds16= - -if not "%o15c2r%%o15msi%"=="" call :oh_findactivated -like 15 -if not "%o16c2r%%o16msi%"=="" call :oh_findactivated -notlike 16 - -::======================================================================================================================================== - :: Process Office 15.0 C2R if not defined o15c2r goto :starto16c2r @@ -973,11 +963,6 @@ exit /b for %%# in (%_oIds%) do ( -echo: !actiProds%oVer%! | find /i "-%%#-" %nul1% && ( -call :dk_color %Gray% "Checking Activation Status [%%# is already permanently activated]" - -) || ( - set key= set _actid= set _lic= @@ -1002,7 +987,6 @@ set fixes=%fixes% %mas% call :dk_color %_Yellow% "%mas%" ) ) -) :: Add SharedComputerLicensing registry key if Retail Office C2R is installed on Windows Server :: https://learn.microsoft.com/en-us/office/troubleshoot/office-suite-issues/click-to-run-office-on-terminal-server @@ -1075,46 +1059,6 @@ exit /b ::======================================================================================================================================== -:oh_findactivated - -set oVer=%2 -set _FsortIds= -set actiProds= - -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT LicenseFamily, Name FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL' | Where-Object { $_.Name %1 '*Office 15*' }).LicenseFamily" %nul6%') do call set "actiProds=%%a !actiProds!" - -if not defined actiProds exit /b - -for %%# in (%actiProds%) do ( -set _sortIds=%%# -set _sortIds=!_sortIds:OfficeSPDFreeR_=SPDRetail_! -set _sortIds=!_sortIds:XC2RVL_=XVolume_! -set _sortIds=!_sortIds:CO365R_=Retail_! -set _sortIds=!_sortIds:O365R_=Retail_! -set _sortIds=!_sortIds:E5R_=Retail_! -set _sortIds=!_sortIds:MSDNR_=Retail_! -set _sortIds=!_sortIds:DemoR_=Retail_! -set _sortIds=!_sortIds:EDUR_=Retail_! -set _sortIds=!_sortIds:R_=Retail_! -set _sortIds=!_sortIds:VL_=Volume_! -set _sortIds=!_sortIds:Office16=! -set _sortIds=!_sortIds:Office19=! -set _sortIds=!_sortIds:Office21=! -set _sortIds=!_sortIds:Office24=! -set _sortIds=!_sortIds:Office=! -for /f "tokens=1 delims=-_" %%a in ("!_sortIds!") do set "_sortIds=-%%a-" -set _FsortIds=!_sortIds! !_FsortIds! -) - -call :ohookdata findactivated %2 -exit /b - -:: Below IDs are not checked for permanent activation -set _sortIds=!_sortIds:PreviewVL_=Volume_! -set _sortIds=!_sortIds:PreInstallR_=Retail_! - -::======================================================================================================================================== - :oh_clearblock :: Find remnants of Office vNext/shared/device license block and remove it because it stops other licenses from appearing @@ -1276,11 +1220,8 @@ set upk_result=0 call :dk_actid 0ff1ce15-a989-479d-af46-f275c6370663 if "%_actprojvis%"=="1" ( -set _allactid= for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.Description -match 'KMSCLIENT' -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" -) else ( -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" ) for %%# in (%apps%) do ( @@ -2375,12 +2316,6 @@ if defined _oIds (set _oIds=!_oIds! %%E) else (set _oIds=%%E) ) ) -if %1==findactivated if %oVer%==%%A ( -echo "!_FsortIds!" | find /i "-%%E-" %nul% && ( -set actiProds%oVer%=!actiProds%oVer%! -%%E- -) -) - ) ) exit /b diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 3a775cd..1fa9d92 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1429,11 +1429,8 @@ set upk_result=0 call :dk_actid 0ff1ce15-a989-479d-af46-f275c6370663 if "%_actprojvis%"=="1" ( -set _allactid= for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.Description -match 'KMSCLIENT' -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" -) else ( -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL').ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" ) for %%# in (%apps%) do ( From 9fd5a661ab3d30412967aeb3845a0aa4bdf6013d Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 17 Jan 2025 20:24:54 +0530 Subject: [PATCH 067/132] Change some variable names --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 14 ++++++++------ .../Activators/HWID_Activation.cmd | 6 +++--- .../Activators/KMS38_Activation.cmd | 6 +++--- .../Activators/Ohook_Activation_AIO.cmd | 13 +++++++------ .../Activators/Online_KMS_Activation.cmd | 11 ++++++----- 5 files changed, 27 insertions(+), 23 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index c5077ab..8c44c3a 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1534,7 +1534,7 @@ echo Checking WPA Registry Count [%wpainfo%] ) -if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" @@ -1558,7 +1558,7 @@ if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN ) -if not defined officeact ( +if not defined notwinact ( if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( @@ -1601,7 +1601,7 @@ set showfix=1 ) -if not defined officeact ( +if not defined notwinact ( if %winbuild% GEQ 10240 ( %nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%" set /a "sum/=3" @@ -2152,7 +2152,8 @@ set "_serv=sppsvc Winmgmt" :: Software Protection :: Windows Management Instrumentation -set officeact=1 +set notwinact=1 +set ohookact=1 call :dk_errorcheck :: Check unsupported office versions @@ -2936,7 +2937,7 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou set defname=DEFTEMP-%random% for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b" -if defined o16c2r if defined officeact ( +if defined o16c2r if defined ohookact ( if exist "%defdat%\NTUSER.DAT" ( reg load HKU\%defname% "%defdat%\NTUSER.DAT" %nul% reg query HKU\%defname%\Software %nul% && ( @@ -2991,7 +2992,7 @@ set upk_result=2 ) ) -if defined officeact if not %upk_result%==0 echo: +if defined ohookact if not %upk_result%==0 echo: if %upk_result%==1 echo Uninstalling Other/Grace Keys [Successful] if %upk_result%==2 call :dk_color %Red% "Uninstalling Other/Grace Keys [Failed]" exit /b @@ -4534,6 +4535,7 @@ set "_serv=sppsvc Winmgmt" :: Software Protection :: Windows Management Instrumentation +if %_actwin%==0 set notwinact=1 call :dk_errorcheck ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index b4eac27..00b545e 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1281,7 +1281,7 @@ echo Checking WPA Registry Count [%wpainfo%] ) -if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" @@ -1305,7 +1305,7 @@ if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN ) -if not defined officeact ( +if not defined notwinact ( if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( @@ -1348,7 +1348,7 @@ set showfix=1 ) -if not defined officeact ( +if not defined notwinact ( if %winbuild% GEQ 10240 ( %nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%" set /a "sum/=3" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index a2f555b..f64aa9f 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1433,7 +1433,7 @@ echo Checking WPA Registry Count [%wpainfo%] ) -if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" @@ -1457,7 +1457,7 @@ if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN ) -if not defined officeact ( +if not defined notwinact ( if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( @@ -1500,7 +1500,7 @@ set showfix=1 ) -if not defined officeact ( +if not defined notwinact ( if %winbuild% GEQ 10240 ( %nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%" set /a "sum/=3" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 43a3337..50a7b21 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -400,7 +400,8 @@ set "_serv=sppsvc Winmgmt" :: Software Protection :: Windows Management Instrumentation -set officeact=1 +set notwinact=1 +set ohookact=1 call :dk_errorcheck :: Check unsupported office versions @@ -1184,7 +1185,7 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou set defname=DEFTEMP-%random% for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b" -if defined o16c2r if defined officeact ( +if defined o16c2r if defined ohookact ( if exist "%defdat%\NTUSER.DAT" ( reg load HKU\%defname% "%defdat%\NTUSER.DAT" %nul% reg query HKU\%defname%\Software %nul% && ( @@ -1239,7 +1240,7 @@ set upk_result=2 ) ) -if defined officeact if not %upk_result%==0 echo: +if defined ohookact if not %upk_result%==0 echo: if %upk_result%==1 echo Uninstalling Other/Grace Keys [Successful] if %upk_result%==2 call :dk_color %Red% "Uninstalling Other/Grace Keys [Failed]" exit /b @@ -1703,7 +1704,7 @@ echo Checking WPA Registry Count [%wpainfo%] ) -if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" @@ -1727,7 +1728,7 @@ if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN ) -if not defined officeact ( +if not defined notwinact ( if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( @@ -1770,7 +1771,7 @@ set showfix=1 ) -if not defined officeact ( +if not defined notwinact ( if %winbuild% GEQ 10240 ( %nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%" set /a "sum/=3" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 1fa9d92..24cb014 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -483,6 +483,7 @@ set "_serv=sppsvc Winmgmt" :: Software Protection :: Windows Management Instrumentation +if %_actwin%==0 set notwinact=1 call :dk_errorcheck ::======================================================================================================================================== @@ -1393,7 +1394,7 @@ echo Clearing Office License Blocks [Successfully cleared from all %cou set defname=DEFTEMP-%random% for /f "skip=2 tokens=2*" %%a in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v Default" %nul6%') do call set "defdat=%%b" -if defined o16c2r if defined officeact ( +if defined o16c2r if defined ohookact ( if exist "%defdat%\NTUSER.DAT" ( reg load HKU\%defname% "%defdat%\NTUSER.DAT" %nul% reg query HKU\%defname%\Software %nul% && ( @@ -1448,7 +1449,7 @@ set upk_result=2 ) ) -if defined officeact if not %upk_result%==0 echo: +if defined ohookact if not %upk_result%==0 echo: if %upk_result%==1 echo Uninstalling Other/Grace Keys [Successful] if %upk_result%==2 call :dk_color %Red% "Uninstalling Other/Grace Keys [Failed]" exit /b @@ -2860,7 +2861,7 @@ echo Checking WPA Registry Count [%wpainfo%] ) -if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" @@ -2884,7 +2885,7 @@ if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN ) -if not defined officeact ( +if not defined notwinact ( if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( @@ -2927,7 +2928,7 @@ set showfix=1 ) -if not defined officeact ( +if not defined notwinact ( if %winbuild% GEQ 10240 ( %nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%" set /a "sum/=3" From d31e4ab0cb813c59f55c3aff55b5118fec7d82bb Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 17 Jan 2025 21:58:29 +0530 Subject: [PATCH 068/132] Remove error variable from non-critical errors --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 7 +++---- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 7 +++---- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 7 +++---- .../Activators/Ohook_Activation_AIO.cmd | 7 +++---- .../Activators/Online_KMS_Activation.cmd | 7 +++---- 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 8c44c3a..9937b47 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1536,7 +1536,6 @@ echo Checking WPA Registry Count [%wpainfo%] if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( -set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -1564,13 +1563,11 @@ call :dk_color %Red% "Checking Edition Name [Not Found In Regi ) else ( if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( -set error=1 set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( -set error=1 call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) @@ -1669,7 +1666,6 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" -set error=1 ) @@ -1715,6 +1711,7 @@ set showfix=1 ) +if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% @@ -1729,6 +1726,7 @@ set "_notfoundids=Not found" call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) +) if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( @@ -1744,6 +1742,7 @@ reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Soft reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed if "!taskinfo!"=="" set "taskinfo=Not Found" call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." ) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 00b545e..81b91e2 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1283,7 +1283,6 @@ echo Checking WPA Registry Count [%wpainfo%] if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( -set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -1311,13 +1310,11 @@ call :dk_color %Red% "Checking Edition Name [Not Found In Regi ) else ( if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( -set error=1 set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( -set error=1 call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) @@ -1416,7 +1413,6 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" -set error=1 ) @@ -1462,6 +1458,7 @@ set showfix=1 ) +if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% @@ -1476,6 +1473,7 @@ set "_notfoundids=Not found" call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) +) if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( @@ -1491,6 +1489,7 @@ reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Soft reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed if "!taskinfo!"=="" set "taskinfo=Not Found" call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index f64aa9f..0fc326b 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1435,7 +1435,6 @@ echo Checking WPA Registry Count [%wpainfo%] if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( -set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -1463,13 +1462,11 @@ call :dk_color %Red% "Checking Edition Name [Not Found In Regi ) else ( if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( -set error=1 set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( -set error=1 call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) @@ -1568,7 +1565,6 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" -set error=1 ) @@ -1614,6 +1610,7 @@ set showfix=1 ) +if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% @@ -1628,6 +1625,7 @@ set "_notfoundids=Not found" call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) +) if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( @@ -1643,6 +1641,7 @@ reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Soft reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed if "!taskinfo!"=="" set "taskinfo=Not Found" call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 50a7b21..720f1f9 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1706,7 +1706,6 @@ echo Checking WPA Registry Count [%wpainfo%] if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( -set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -1734,13 +1733,11 @@ call :dk_color %Red% "Checking Edition Name [Not Found In Regi ) else ( if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( -set error=1 set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( -set error=1 call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) @@ -1839,7 +1836,6 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" -set error=1 ) @@ -1885,6 +1881,7 @@ set showfix=1 ) +if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% @@ -1899,6 +1896,7 @@ set "_notfoundids=Not found" call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) +) if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( @@ -1914,6 +1912,7 @@ reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Soft reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed if "!taskinfo!"=="" set "taskinfo=Not Found" call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 24cb014..977b660 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2863,7 +2863,6 @@ echo Checking WPA Registry Count [%wpainfo%] if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( -set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -2891,13 +2890,11 @@ call :dk_color %Red% "Checking Edition Name [Not Found In Regi ) else ( if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( -set error=1 set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( -set error=1 call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) @@ -2996,7 +2993,6 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" -set error=1 ) @@ -3042,6 +3038,7 @@ set showfix=1 ) +if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% @@ -3056,6 +3053,7 @@ set "_notfoundids=Not found" call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) +) if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( @@ -3071,6 +3069,7 @@ reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Soft reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed if "!taskinfo!"=="" set "taskinfo=Not Found" call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." ) ) From 0c88f6bc2c6b730ab2512bc5368173ea89c44657 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 20 Jan 2025 22:35:47 +0530 Subject: [PATCH 069/132] Change error detection for ImageState --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 4 ++-- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- .../Activators/Online_KMS_Activation.cmd | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 9937b47..8945e75 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1502,10 +1502,10 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -set error=1 -set showfix=1 call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 +set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 81b91e2..bfe19e8 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1249,10 +1249,10 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -set error=1 -set showfix=1 call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 +set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 0fc326b..025574a 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1401,10 +1401,10 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -set error=1 -set showfix=1 call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 +set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 720f1f9..963564e 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1672,10 +1672,10 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -set error=1 -set showfix=1 call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 +set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 977b660..ec924c8 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2829,10 +2829,10 @@ call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( -set error=1 -set showfix=1 call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 +set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( From be44b2d887e04ffcce3c987dbf3cc19ba695d912 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 30 Jan 2025 00:51:46 +0530 Subject: [PATCH 070/132] Don't check tasks if csvlk is installed, don't show wlms in red --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 6 ++---- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 6 ++---- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 6 ++---- .../Activators/Ohook_Activation_AIO.cmd | 6 ++---- .../Activators/Online_KMS_Activation.cmd | 6 ++---- 5 files changed, 10 insertions(+), 20 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 8945e75..57c5c99 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1631,11 +1631,7 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( -if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] -) else ( -call :dk_color %Red% "Checking Eval WLMS Service [Found]" -) ) @@ -1736,6 +1732,7 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +%psc% "Get-WmiObject -Query 'SELECT Description FROM SoftwareLicensingProduct WHERE PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Select-Object -Property Description" %nul2% | findstr /i "KMS_" %nul1% || ( for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% @@ -1745,6 +1742,7 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, Syste if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." ) ) +) :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index bfe19e8..8c192be 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1378,11 +1378,7 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( -if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] -) else ( -call :dk_color %Red% "Checking Eval WLMS Service [Found]" -) ) @@ -1483,6 +1479,7 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +%psc% "Get-WmiObject -Query 'SELECT Description FROM SoftwareLicensingProduct WHERE PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Select-Object -Property Description" %nul2% | findstr /i "KMS_" %nul1% || ( for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% @@ -1492,6 +1489,7 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, Syste if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." ) ) +) :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 025574a..80cb7c6 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1530,11 +1530,7 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( -if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] -) else ( -call :dk_color %Red% "Checking Eval WLMS Service [Found]" -) ) @@ -1635,6 +1631,7 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +%psc% "Get-WmiObject -Query 'SELECT Description FROM SoftwareLicensingProduct WHERE PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Select-Object -Property Description" %nul2% | findstr /i "KMS_" %nul1% || ( for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% @@ -1644,6 +1641,7 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, Syste if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." ) ) +) :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 963564e..cd087ed 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1801,11 +1801,7 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( -if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] -) else ( -call :dk_color %Red% "Checking Eval WLMS Service [Found]" -) ) @@ -1906,6 +1902,7 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +%psc% "Get-WmiObject -Query 'SELECT Description FROM SoftwareLicensingProduct WHERE PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Select-Object -Property Description" %nul2% | findstr /i "KMS_" %nul1% || ( for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% @@ -1915,6 +1912,7 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, Syste if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." ) ) +) :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index ec924c8..cae2845 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2958,11 +2958,7 @@ call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( -if %winbuild% LSS 9200 ( echo Checking Eval WLMS Service [Found] -) else ( -call :dk_color %Red% "Checking Eval WLMS Service [Found]" -) ) @@ -3063,6 +3059,7 @@ call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%toke if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +%psc% "Get-WmiObject -Query 'SELECT Description FROM SoftwareLicensingProduct WHERE PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Select-Object -Property Description" %nul2% | findstr /i "KMS_" %nul1% || ( for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% @@ -3072,6 +3069,7 @@ call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, Syste if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." ) ) +) :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. From 411f38770516efbd0bef19e85ad2ac0fa731cfad Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 30 Jan 2025 01:59:45 +0530 Subject: [PATCH 071/132] Fix a bug on 7 where it can't list multiple ids --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- .../Activators/Online_KMS_Activation.cmd | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 57c5c99..465a37b 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2970,8 +2970,8 @@ set upk_result=0 call :dk_actid 0ff1ce15-a989-479d-af46-f275c6370663 if "%_actprojvis%"=="1" ( -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' } | Select-Object -ExpandProperty ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') } | Select-Object -ExpandProperty ID" %nul6%') do call set "_allactid=%%a !_allactid!" ) for %%# in (%apps%) do ( diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index cd087ed..e8766ee 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1221,8 +1221,8 @@ set upk_result=0 call :dk_actid 0ff1ce15-a989-479d-af46-f275c6370663 if "%_actprojvis%"=="1" ( -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' } | Select-Object -ExpandProperty ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') } | Select-Object -ExpandProperty ID" %nul6%') do call set "_allactid=%%a !_allactid!" ) for %%# in (%apps%) do ( diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index cae2845..7c9a45e 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1430,8 +1430,8 @@ set upk_result=0 call :dk_actid 0ff1ce15-a989-479d-af46-f275c6370663 if "%_actprojvis%"=="1" ( -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" -for /f "delims=" %%a in ('%psc% "(Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') }).ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { $_.LicenseFamily -notmatch 'Project' -and $_.LicenseFamily -notmatch 'Visio' } | Select-Object -ExpandProperty ID" %nul6%') do call set "_allactid=%%a !_allactid!" +for /f "delims=" %%a in ('%psc% "Get-WmiObject -Query 'SELECT ID, Description, LicenseFamily FROM %spp% WHERE ApplicationID=''0ff1ce15-a989-479d-af46-f275c6370663'' AND PartialProductKey IS NOT NULL' | Where-Object { '!_allactid!' -contains $_.ID -and ($_.LicenseFamily -match 'Project' -or $_.LicenseFamily -match 'Visio') } | Select-Object -ExpandProperty ID" %nul6%') do call set "_allactid=%%a !_allactid!" ) for %%# in (%apps%) do ( From 0d533338a1c1bd55fbb76b2894f6e6a0464dcc7f Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 30 Jan 2025 02:08:55 +0530 Subject: [PATCH 072/132] Use installed licences edition ids list only from 17063 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 465a37b..e436920 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -8674,7 +8674,7 @@ if %winbuild% GEQ 10240 for /f "tokens=4" %%a in ('dism /online /english /Get-Ta if %winbuild% LSS 10240 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 ")) if %winbuild% GEQ 10240 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( -call :ced_edilist +if %winbuild% GEQ 17063 call :ced_edilist if /i "%osedition:~0,4%"=="Core" set _pro=Professional if /i "%osedition%"=="CoreN" set _pro=ProfessionalN set "_dtarget= %_dtarget% !_wtarget! !_pro! " diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 868666d..604e995 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -393,7 +393,7 @@ if %winbuild% GEQ 10240 for /f "tokens=4" %%a in ('dism /online /english /Get-Ta if %winbuild% LSS 10240 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 ")) if %winbuild% GEQ 10240 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( -call :ced_edilist +if %winbuild% GEQ 17063 call :ced_edilist if /i "%osedition:~0,4%"=="Core" set _pro=Professional if /i "%osedition%"=="CoreN" set _pro=ProfessionalN set "_dtarget= %_dtarget% !_wtarget! !_pro! " From 75c34cbf50acd9fb82fd16f6894f6d61b35bc288 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 30 Jan 2025 02:25:04 +0530 Subject: [PATCH 073/132] Add updated CAS by abbodi1406 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 568 +++++++++++------- .../Check_Activation_Status.cmd | 568 +++++++++++------- 2 files changed, 710 insertions(+), 426 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index e436920..0950461 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -6509,20 +6509,40 @@ mode 100, 36 goto dk_done :sppmgr: +param ( + [Parameter()] + [switch] + $All, + [Parameter()] + [switch] + $Dlv, + [Parameter()] + [switch] + $IID, + [Parameter()] + [switch] + $Pass +) + +function CONOUT($strObj) +{ + Out-Host -Input $strObj +} + function ExitScript($ExitCode = 0) { Exit $ExitCode } if (-Not $PSVersionTable) { - Write-Host "==== ERROR ====`r`n" - Write-Host 'Windows PowerShell 1.0 is not supported by this script.' + "==== ERROR ====`r`n" + "Windows PowerShell 1.0 is not supported by this script." ExitScript 1 } if ($ExecutionContext.SessionState.LanguageMode.value__ -NE 0) { - Write-Host "==== ERROR ====`r`n" - Write-Host 'Windows PowerShell is not running in Full Language Mode.' + "==== ERROR ====`r`n" + "Windows PowerShell is not running in Full Language Mode." ExitScript 1 } @@ -6530,21 +6550,49 @@ $winbuild = 1 try { $winbuild = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$env:SystemRoot\System32\kernel32.dll").FileBuildPart } catch { - $winbuild = [int](Get-WmiObject Win32_OperatingSystem).BuildNumber + $winbuild = [int]([wmi]'Win32_OperatingSystem=@').BuildNumber } if ($winbuild -EQ 1) { - Write-Host "==== ERROR ====`r`n" - Write-Host 'Could not detect Windows build.' + "==== ERROR ====`r`n" + "Could not detect Windows build." ExitScript 1 } if ($winbuild -LT 2600) { - Write-Host "==== ERROR ====`r`n" - Write-Host 'This build of Windows is not supported by this script.' + "==== ERROR ====`r`n" + "This build of Windows is not supported by this script." ExitScript 1 } +$SysPath = "$env:SystemRoot\System32" +if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { + $SysPath = "$env:SystemRoot\Sysnative" +} + +if (Test-Path "$SysPath\sppc.dll") { + $SLdll = 'sppc.dll' +} elseif (Test-Path "$SysPath\slc.dll") { + $SLdll = 'slc.dll' +} else { + "==== ERROR ====`r`n" + "Software Licensing Client Dll is not detected." + ExitScript 1 +} + +if ($All.IsPresent) +{ + $isAll = {CONOUT "`r"} + $noAll = {$null} +} +else +{ + $isAll = {$null} + $noAll = {CONOUT "`r"} +} +$Dlv = $Dlv.IsPresent +$IID = $IID.IsPresent -Or $Dlv.IsPresent + $NT6 = $winbuild -GE 6000 $NT7 = $winbuild -GE 7600 $NT9 = $winbuild -GE 9600 @@ -6554,12 +6602,29 @@ $Admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdenti $line2 = "============================================================" $line3 = "____________________________________________________________" +function UnQuickEdit +{ + $t=[AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 1).DefineDynamicModule((Get-Random), $False).DefineType((Get-Random)) + $t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128) + $t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128) + $t.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128) + $t.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128) + $k=$t.CreateType() + if ($winbuild -GE 17763) { + if ($k::SendMessageW($k::GetConsoleWindow(), 127, 0, 0) -EQ [IntPtr]::Zero) { + return + } + } + $v=(0x0080, 0x00A0)[!($winbuild -GE 10586)] + $b=$k::SetConsoleMode($k::GetStdHandle(-10), $v) +} + function echoWindows { - Write-Host "$line2" - Write-Host "=== Windows Status ===" - Write-Host "$line2" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line2" + CONOUT "=== Windows Status ===" + CONOUT "$line2" + & $noAll } function echoOffice @@ -6568,18 +6633,22 @@ function echoOffice return } - if ($All.IsPresent) {Write-Host} - Write-Host "$line2" - Write-Host "=== Office Status ===" - Write-Host "$line2" - if (!$All.IsPresent) {Write-Host} + & $isAll + CONOUT "$line2" + CONOUT "=== Office Status ===" + CONOUT "$line2" + & $noAll $script:doMSG = 0 } function strGetRegistry($strKey, $strName) { -Get-ItemProperty -EA 0 $strKey | select -EA 0 -Expand $strName + try { + return [Microsoft.Win32.Registry]::GetValue($strKey, $strName, $null) + } catch { + return $null + } } function CheckOhook @@ -6610,55 +6679,57 @@ function CheckOhook return } - if ($All.IsPresent) {Write-Host} - Write-Host "$line2" - Write-Host "=== Office Ohook Status ===" - Write-Host "$line2" - Write-Host - Write-Host -back 'Black' -fore 'Yellow' 'Ohook for permanent Office activation is installed.' - Write-Host -back 'Black' -fore 'Yellow' 'You can ignore the below mentioned Office activation status.' - if (!$All.IsPresent) {Write-Host} + & $isAll + CONOUT "$line2" + CONOUT "=== Office Ohook Status ===" + CONOUT "$line2" + $host.UI.WriteLine('Yellow', 'Black', "`r`nOhook for permanent Office activation is installed.`r`nYou can ignore the below mentioned Office activation status.") + & $noAll } #region WMI -function DetectID($strSLP, $strAppId, [ref]$strAppVar) +function DetectID($strSLP, $strAppId) { - $fltr = "ApplicationID='$strAppId'" - if (!$All.IsPresent) { - $fltr = $fltr + " AND PartialProductKey <> NULL" - } - Get-WmiObject $strSLP ID -Filter $fltr -EA 0 | select ID -EA 0 | foreach { - $strAppVar.Value = 1 - } + $ppk = (" AND PartialProductKey <> NULL)", ")")[$All.IsPresent] + $fltr = "SELECT ID FROM $strSLP WHERE (ApplicationID='$strAppId'" + $clause = $fltr + $ppk + $sWmi = [wmisearcher]$clause + $sWmi.Options.Rewindable = $false + return ($sWmi.Get().Count -GT 0) } -function GetID($strSLP, $strAppId, $strProperty = "ID") +function GetID($strSLP, $strAppId) { $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) $IDs = [Collections.ArrayList]@() + $isAdd = (" AND LicenseDependsOn <> NULL)", ")")[$NT5] + $noAdd = " AND LicenseDependsOn IS NULL)" + $query = "SELECT ID FROM $strSLP WHERE (ApplicationID='$strAppId' AND PartialProductKey" if ($All.IsPresent) { - $fltr = "ApplicationID='$strAppId' AND PartialProductKey IS NULL" - $clause = $fltr + $fltr = $query + " IS NULL" + $clause = $fltr + $isAdd + $sWmi = [wmisearcher]$clause + $sWmi.Options.Rewindable = $false + try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} if (-Not $NT5) { - $clause = $fltr + " AND LicenseDependsOn <> NULL" - } - Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} - if (-Not $NT5) { - $clause = $fltr + " AND LicenseDependsOn IS NULL" - Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + $clause = $fltr + $noAdd + $sWmi = [wmisearcher]$clause + $sWmi.Options.Rewindable = $false + try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} } } - $fltr = "ApplicationID='$strAppId' AND PartialProductKey <> NULL" - $clause = $fltr + $fltr = $query + " <> NULL" + $clause = $fltr + $isAdd + $sWmi = [wmisearcher]$clause + $sWmi.Options.Rewindable = $false + try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} if (-Not $NT5) { - $clause = $fltr + " AND LicenseDependsOn <> NULL" - } - Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} - if (-Not $NT5) { - $clause = $fltr + " AND LicenseDependsOn IS NULL" - Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + $clause = $fltr + $noAdd + $sWmi = [wmisearcher]$clause + $sWmi.Options.Rewindable = $false + try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} } return $IDs @@ -6695,38 +6766,45 @@ function DetectSubscription { if ($objSvc.SubscriptionEdition.Contains("UNKNOWN") -EQ $false) {$SubMsgEdition = $objSvc.SubscriptionEdition} } - Write-Host - Write-Host "Subscription information:" - Write-Host " Edition: $SubMsgEdition" - Write-Host " Type : $SubMsgType" - Write-Host " Status : $SubMsgStatus" - Write-Host " Expiry : $SubMsgExpiry" + CONOUT "`nSubscription information:" + CONOUT " Edition: $SubMsgEdition" + CONOUT " Type : $SubMsgType" + CONOUT " Status : $SubMsgStatus" + CONOUT " Expiry : $SubMsgExpiry" +} + +function DetectAdbaClient +{ + CONOUT "`nAD Activation client information:" + CONOUT " Object Name: $ADActivationObjectName" + CONOUT " Domain Name: $ADActivationObjectDN" + CONOUT " CSVLK Extended PID: $ADActivationCsvlkPid" + CONOUT " CSVLK Activation ID: $ADActivationCsvlkSkuId" } function DetectAvmClient { - Write-Host - Write-Host "Automatic VM Activation client information:" + CONOUT "`nAutomatic VM Activation client information:" if (-Not [String]::IsNullOrEmpty($IAID)) { - Write-Host " Guest IAID: $IAID" + CONOUT " Guest IAID: $IAID" } else { - Write-Host " Guest IAID: Not Available" + CONOUT " Guest IAID: Not Available" } if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostMachineName)) { - Write-Host " Host machine name: $AutomaticVMActivationHostMachineName" + CONOUT " Host machine name: $AutomaticVMActivationHostMachineName" } else { - Write-Host " Host machine name: Not Available" + CONOUT " Host machine name: Not Available" } if ($AutomaticVMActivationLastActivationTime.Substring(0,4) -NE "1601") { $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($AutomaticVMActivationLastActivationTime),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') - Write-Host " Activation time: $EED UTC" + CONOUT " Activation time: $EED UTC" } else { - Write-Host " Activation time: Not Available" + CONOUT " Activation time: Not Available" } if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostDigitalPid2)) { - Write-Host " Host Digital PID2: $AutomaticVMActivationHostDigitalPid2" + CONOUT " Host Digital PID2: $AutomaticVMActivationHostDigitalPid2" } else { - Write-Host " Host Digital PID2: Not Available" + CONOUT " Host Digital PID2: Not Available" } } @@ -6756,32 +6834,30 @@ function DetectKmsHost $KeyManagementServiceLowPriority = "Normal" } - Write-Host - Write-Host "Key Management Service host information:" - Write-Host " Current count: $KeyManagementServiceCurrentCount" - Write-Host " Listening on Port: $KeyManagementServiceListeningPort" - Write-Host " DNS publishing: $KeyManagementServiceDnsPublishing" - Write-Host " KMS priority: $KeyManagementServiceLowPriority" + CONOUT "`nKey Management Service host information:" + CONOUT " Current count: $KeyManagementServiceCurrentCount" + CONOUT " Listening on Port: $KeyManagementServiceListeningPort" + CONOUT " DNS publishing: $KeyManagementServiceDnsPublishing" + CONOUT " KMS priority: $KeyManagementServiceLowPriority" if (-Not [String]::IsNullOrEmpty($KeyManagementServiceTotalRequests)) { - Write-Host - Write-Host "Key Management Service cumulative requests received from clients:" - Write-Host " Total: $KeyManagementServiceTotalRequests" - Write-Host " Failed: $KeyManagementServiceFailedRequests" - Write-Host " Unlicensed: $KeyManagementServiceUnlicensedRequests" - Write-Host " Licensed: $KeyManagementServiceLicensedRequests" - Write-Host " Initial grace period: $KeyManagementServiceOOBGraceRequests" - Write-Host " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests" - Write-Host " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests" - Write-Host " Notification: $KeyManagementServiceNotificationRequests" + CONOUT "`nKey Management Service cumulative requests received from clients:" + CONOUT " Total: $KeyManagementServiceTotalRequests" + CONOUT " Failed: $KeyManagementServiceFailedRequests" + CONOUT " Unlicensed: $KeyManagementServiceUnlicensedRequests" + CONOUT " Licensed: $KeyManagementServiceLicensedRequests" + CONOUT " Initial grace period: $KeyManagementServiceOOBGraceRequests" + CONOUT " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests" + CONOUT " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests" + if ($null -NE $KeyManagementServiceNotificationRequests) {CONOUT " Notification: $KeyManagementServiceNotificationRequests"} } } function DetectKmsClient { - if ($null -NE $VLActivationTypeEnabled) {Write-Host "Configured Activation Type: $($VLActTypes[$VLActivationTypeEnabled])"} - Write-Host + if ($null -NE $VLActivationTypeEnabled) {CONOUT "Configured Activation Type: $($VLActTypes[$VLActivationTypeEnabled])"} + CONOUT "`r" if ($LicenseStatus -NE 1) { - Write-Host "Please activate the product in order to update KMS client information values." + CONOUT "Please activate the product in order to update KMS client information values." return } @@ -6814,33 +6890,42 @@ function DetectKmsClient } } - Write-Host "Key Management Service client information:" - Write-Host " Client Machine ID (CMID): $($objSvc.ClientMachineID)" + CONOUT "Key Management Service client information:" + CONOUT " Client Machine ID (CMID): $($objSvc.ClientMachineID)" if ($null -EQ $KmsReg) { - Write-Host " $KmsDns" - Write-Host " Registered KMS machine name: KMS name not available" + CONOUT " $KmsDns" + CONOUT " Registered KMS machine name: KMS name not available" } else { - Write-Host " $KmsReg" + CONOUT " $KmsReg" } - if ($null -NE $DiscoveredKeyManagementServiceMachineIpAddress) {Write-Host " KMS machine IP address: $DiscoveredKeyManagementServiceMachineIpAddress"} - Write-Host " KMS machine extended PID: $KeyManagementServiceProductKeyID" - Write-Host " Activation interval: $VLActivationInterval minutes" - Write-Host " Renewal interval: $VLRenewalInterval minutes" - if ($null -NE $KeyManagementServiceHostCaching) {Write-Host " KMS host caching: $KeyManagementServiceHostCaching"} - if (-Not [String]::IsNullOrEmpty($KeyManagementServiceLookupDomain)) {Write-Host " KMS SRV record lookup domain: $KeyManagementServiceLookupDomain"} + if ($null -NE $DiscoveredKeyManagementServiceMachineIpAddress) {CONOUT " KMS machine IP address: $DiscoveredKeyManagementServiceMachineIpAddress"} + CONOUT " KMS machine extended PID: $KeyManagementServiceProductKeyID" + CONOUT " Activation interval: $VLActivationInterval minutes" + CONOUT " Renewal interval: $VLRenewalInterval minutes" + if ($null -NE $KeyManagementServiceHostCaching) {CONOUT " KMS host caching: $KeyManagementServiceHostCaching"} + if (-Not [String]::IsNullOrEmpty($KeyManagementServiceLookupDomain)) {CONOUT " KMS SRV record lookup domain: $KeyManagementServiceLookupDomain"} } function GetResult($strSLP, $strSLS, $strID) { - try {$objPrd = Get-WmiObject $strSLP -Filter "ID='$strID'" -EA 1} catch {return} - $objPrd | select -Expand Properties -EA 0 | foreach { - if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} + try + { + $objPrd = [wmisearcher]"SELECT * FROM $strSLP WHERE ID='$strID'" + $objPrd.Options.Rewindable = $false + $objPrd.Get() | select -Expand Properties -EA 0 | foreach { if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} } + $objPrd.Dispose() + } + catch + { + return } $winID = ($ApplicationID -EQ $winApp) $winPR = ($winID -And -Not $LicenseIsAddon) $Vista = ($winID -And $NT6 -And -Not $NT7) $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) + $reapp = ("Windows", "App")[!$winID] + $prmnt = ("machine", "product")[!$winPR] if ($Description | Select-String "VOLUME_KMSCLIENT") {$cKmsClient = 1; $_mTag = "Volume"} if ($Description | Select-String "TIMEBASED_") {$cTblClient = 1; $_mTag = "Timebased"} @@ -6865,7 +6950,7 @@ function GetResult($strSLP, $strSLS, $strID) $LicenseInf = "Licensed" $LicenseMsg = $null if ($GracePeriodRemaining -EQ 0) { - if ($winPR) {$ExpireMsg = "The machine is permanently activated."} else {$ExpireMsg = "The product is permanently activated."} + $ExpireMsg = "The $prmnt is permanently activated." } else { $LicenseMsg = "$_mTag activation expiration: $GracePeriodRemaining minute(s) ($_gpr day(s))" if ($null -NE $_xpr) {$ExpireMsg = "$_mTag activation will expire $_xpr"} @@ -6886,8 +6971,9 @@ function GetResult($strSLP, $strSLS, $strID) if ($LicenseStatus -EQ 5 -And -Not $NT5) { $LicenseInf = "Notification" $LicenseMsg = "Notification Reason: $LicenseReason" + if ($LicenseReason -EQ "0xC004F00F") {if ($null -NE $cKmsClient) {$LicenseMsg = $LicenseMsg + " (KMS license expired)."} else {$LicenseMsg = $LicenseMsg + " (hardware out of tolerance)."}} if ($LicenseReason -EQ "0xC004F200") {$LicenseMsg = $LicenseMsg + " (non-genuine)."} - if ($LicenseReason -EQ "0xC004F009") {$LicenseMsg = $LicenseMsg + " (grace time expired)."} + if ($LicenseReason -EQ "0xC004F009" -Or $LicenseReason -EQ "0xC004F064") {$LicenseMsg = $LicenseMsg + " (grace time expired)."} } if ($LicenseStatus -GT 5 -Or ($LicenseStatus -GT 4 -And $NT5)) { $LicenseInf = "Unknown" @@ -6899,25 +6985,61 @@ function GetResult($strSLP, $strSLS, $strID) } if ($winPR -And $PartialProductKey -And -Not $NT9) { - $dp4 = Get-ItemProperty -EA 0 "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | select -EA 0 -Expand DigitalProductId4 + $dp4 = strGetRegistry "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" "DigitalProductId4" if ($null -NE $dp4) { $ProductKeyChannel = ([System.Text.Encoding]::Unicode.GetString($dp4, 1016, 128)).Trim([char]$null) } } - if ($All.IsPresent) {Write-Host} - Write-Host "Name: $Name" - Write-Host "Description: $Description" - Write-Host "Activation ID: $ID" - if ($null -NE $ProductKeyID) {Write-Host "Extended PID: $ProductKeyID"} - if ($null -NE $OfflineInstallationId -And $IID.IsPresent) {Write-Host "Installation ID: $OfflineInstallationId"} - if ($null -NE $ProductKeyChannel) {Write-Host "Product Key Channel: $ProductKeyChannel"} - if ($null -NE $PartialProductKey) {Write-Host "Partial Product Key: $PartialProductKey"} else {Write-Host "Product Key: Not installed"} - Write-Host "License Status: $LicenseInf" - if ($null -NE $LicenseMsg) {Write-Host "$LicenseMsg"} + if ($winPR -And $Dlv -And $null -EQ $RemainingAppReArmCount) { + try + { + $tmp = [wmisearcher]"SELECT RemainingWindowsReArmCount FROM $strSLS" + $tmp.Options.Rewindable = $false + $tmp.Get() | select -Expand Properties -EA 0 | foreach {set $_.Name $_.Value} + $tmp.Dispose() + } + catch + { + } + } + + $add_on = $Name.IndexOf("add-on for", 5) + + & $isAll + if ($add_on -EQ -1) {CONOUT "Name: $Name"} else {CONOUT "Name: $($Name.Substring(0, $add_on + 7))"} + CONOUT "Description: $Description" + CONOUT "Activation ID: $ID" + if ($null -NE $ProductKeyID) {CONOUT "Extended PID: $ProductKeyID"} + if ($null -NE $ProductKeyID2 -And $Dlv) {CONOUT "Product ID: $ProductKeyID2"} + if ($null -NE $OfflineInstallationId -And $IID) {CONOUT "Installation ID: $OfflineInstallationId"} + if ($null -NE $ProductKeyChannel) {CONOUT "Product Key Channel: $ProductKeyChannel"} + if ($null -NE $PartialProductKey) {CONOUT "Partial Product Key: $PartialProductKey"} + CONOUT "License Status: $LicenseInf" + if ($null -NE $LicenseMsg) {CONOUT "$LicenseMsg"} if ($LicenseStatus -NE 0 -And $EvaluationEndDate.Substring(0,4) -NE "1601") { $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($EvaluationEndDate),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') - Write-Host "Evaluation End Date: $EED UTC" + CONOUT "Evaluation End Date: $EED UTC" + } + if ($Dlv) { + if ($null -NE $RemainingWindowsReArmCount) { + CONOUT "Remaining Windows rearm count: $RemainingWindowsReArmCount" + } + if ($null -NE $RemainingSkuReArmCount -And $RemainingSkuReArmCount -NE 4294967295) { + CONOUT "Remaining $reapp rearm count: $RemainingAppReArmCount" + CONOUT "Remaining SKU rearm count: $RemainingSkuReArmCount" + } + if ($null -NE $TrustedTime -And $LicenseStatus -NE 0) { + $TTD = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($TrustedTime),$null,32).ToString('yyyy-MM-dd hh:mm:ss tt') + CONOUT "Trusted time: $TTD" + } + } + if ($LicenseStatus -EQ 0) { + return + } + + if ($strSLP -EQ $wslp -And $null -NE $PartialProductKey -And $null -NE $ADActivationObjectName -And $VLActivationType -EQ 1) { + DetectAdbaClient } if ($winID -And $null -NE $cAvmClient -And $null -NE $PartialProductKey) { @@ -6929,16 +7051,27 @@ function GetResult($strSLP, $strSLS, $strID) $chkSLS = ($null -NE $PartialProductKey) -And ($null -NE $cKmsClient -Or $null -NE $cKmsHost -Or $chkSub) if (!$chkSLS) { - if ($null -NE $ExpireMsg) {Write-Host; Write-Host " $ExpireMsg"} + if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} return } - $objSvc = Get-WmiObject $strSLS -EA 0 - - if ($Vista) { - $objSvc | select -Expand Properties -EA 0 | foreach { - if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} + try + { + $objSvc = New-Object PSObject + $wmiSvc = [wmisearcher]"SELECT * FROM $strSLS" + $wmiSvc.Options.Rewindable = $false + $wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { + if (-Not [String]::IsNullOrEmpty($_.Value)) + { + $objSvc | Add-Member 8 $_.Name $_.Value + if ($null -EQ $IsKeyManagementServiceMachine) {set $_.Name $_.Value} + } } + $wmiSvc.Dispose() + } + catch + { + return } if ($strSLS -EQ $wsls -And $NT9) { @@ -6948,6 +7081,7 @@ function GetResult($strSLP, $strSLS, $strID) } if ($null -NE $cKmsHost -And $IsKeyManagementServiceMachine -GT 0) { + if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} DetectKmsHost } @@ -6955,7 +7089,9 @@ function GetResult($strSLP, $strSLS, $strID) DetectKmsClient } - if ($null -NE $ExpireMsg) {Write-Host; Write-Host " $ExpireMsg"} + if ($null -EQ $cKmsHost) { + if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} + } if ($chkSub) { DetectSubscription @@ -6995,11 +7131,10 @@ function PrintModePerPridFromRegistry $vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty 'property' -ErrorAction SilentlyContinue | Where-Object -FilterScript {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"} If ($null -Eq $vNextPrids) { - Write-Host - Write-Host "No registry keys found." + CONOUT "`nNo registry keys found." Return } - Write-Host + CONOUT "`r" $vNextPrids | ForEach ` { $mode = (Get-ItemProperty -Path $vNextRegkey -Name $_).$_ @@ -7009,7 +7144,7 @@ function PrintModePerPridFromRegistry 3 { $mode = "Device"; Break } Default { $mode = "Legacy"; Break } } - Write-Host $_ = $mode + CONOUT "$_ = $mode" } } @@ -7023,8 +7158,7 @@ function PrintSharedComputerLicensing $scaPolicyValue = Get-ItemProperty -Path $scaPolicyKey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction SilentlyContinue If ($null -Eq $scaValue -And $null -Eq $scaValue2 -And $null -Eq $scaPolicyValue) { - Write-Host - Write-Host "No registry keys found." + CONOUT "`nNo registry keys found." Return } $scaModeValue = $scaValue -Or $scaValue2 -Or $scaPolicyValue @@ -7036,9 +7170,8 @@ function PrintSharedComputerLicensing { $scaMode = "Enabled" } - Write-Host - Write-Host "Status:" $scaMode - Write-Host + CONOUT "`nStatus: $scaMode" + CONOUT "`r" $tokenFiles = $null $tokenPath = "${env:LOCALAPPDATA}\Microsoft\Office\16.0\Licensing" If (Test-Path $tokenPath) @@ -7047,12 +7180,12 @@ function PrintSharedComputerLicensing } If ($null -Eq $tokenFiles) { - Write-Host "No tokens found." + CONOUT "No tokens found." Return } If ($tokenFiles.Length -Eq 0) { - Write-Host "No tokens found." + CONOUT "No tokens found." Return } $tokenFiles | ForEach ` @@ -7086,16 +7219,9 @@ function PrintLicensesInformation { $licenseFiles = Get-ChildItem -Path $licensePath -Recurse | Where-Object { !$_.PSIsContainer } } - If ($null -Eq $licenseFiles) + If ($null -Eq $licenseFiles -Or $licenseFiles.Length -Eq 0) { - Write-Host - Write-Host "No licenses found." - Return - } - If ($licenseFiles.Length -Eq 0) - { - Write-Host - Write-Host "No licenses found." + CONOUT "`nNo licenses found." Return } $licenseFiles | ForEach ` @@ -7152,24 +7278,20 @@ function vNextDiagRun Return } - if ($All.IsPresent) {Write-Host} - Write-Host "$line2" - Write-Host "=== Office vNext Status ===" - Write-Host "$line2" - Write-Host - Write-Host "========== Mode per ProductReleaseId ==========" + & $isAll + CONOUT "$line2" + CONOUT "=== Office vNext Status ===" + CONOUT "$line2" + CONOUT "`n========== Mode per ProductReleaseId ==========" PrintModePerPridFromRegistry - Write-Host - Write-Host "========== Shared Computer Licensing ==========" + CONOUT "`n========== Shared Computer Licensing ==========" PrintSharedComputerLicensing - Write-Host - Write-Host "========== vNext licenses ===========" + CONOUT "`n========== vNext licenses ===========" PrintLicensesInformation -Mode "NUL" - Write-Host - Write-Host "========== Device licenses ==========" + CONOUT "`n========== Device licenses ==========" PrintLicensesInformation -Mode "Device" - Write-Host "$line3" - Write-Host + CONOUT "$line3" + CONOUT "`r" } #endregion @@ -7252,13 +7374,13 @@ function PrintStateData { } [string[]]$pwszStateString = $Marshal::PtrToStringUni($pwszStateData) -replace ";", "`n " - Write-Host " $pwszStateString" + CONOUT (" $pwszStateString") $Marshal::FreeHGlobal($pwszStateData) return $TRUE } -function PrintLastActivationHRresult { +function PrintLastActivationHResult { $pdwLastHResult = 0 $cbSize = 0 @@ -7271,12 +7393,34 @@ function PrintLastActivationHRresult { return $FALSE } - Write-Host (" LastActivationHResult=0x{0:x8}" -f $Marshal::ReadInt32($pdwLastHResult)) + CONOUT (" LastActivationHResult=0x{0:x8}" -f $Marshal::ReadInt32($pdwLastHResult)) $Marshal::FreeHGlobal($pdwLastHResult) return $TRUE } +function PrintLastActivationTime { + $pdwLastTime = 0 + $cbSize = 0 + + if ($Win32::SLGetWindowsInformation( + "Security-SPP-LastWindowsActivationTime", + [ref]$null, + [ref]$cbSize, + [ref]$pdwLastTime + )) { + return $FALSE + } + + $actTime = $Marshal::ReadInt64($pdwLastTime) + if ($actTime -ne 0) { + CONOUT (" LastActivationTime={0}" -f [DateTime]::FromFileTimeUtc($actTime).ToString("yyyy/MM/dd:HH:mm:ss")) + } + + $Marshal::FreeHGlobal($pdwLastTime) + return $TRUE +} + function PrintIsWindowsGenuine { $dwGenuine = 0 $ppwszGenuineStates = @( @@ -7292,9 +7436,9 @@ function PrintIsWindowsGenuine { } if ($dwGenuine -lt 5) { - Write-Host (" IsWindowsGenuine={0}" -f $ppwszGenuineStates[$dwGenuine]) + CONOUT (" IsWindowsGenuine={0}" -f $ppwszGenuineStates[$dwGenuine]) } else { - Write-Host (" IsWindowsGenuine={0}" -f $dwGenuine) + CONOUT (" IsWindowsGenuine={0}" -f $dwGenuine) } return $TRUE @@ -7318,7 +7462,7 @@ function PrintDigitalLicenseStatus { [bool]$bDigitalLicense = $FALSE $bDigitalLicense = (($dwReturnCode -ge 0) -and ($dwReturnCode -ne 1)) - Write-Host (" IsDigitalLicense={0}" -f (BoolToWStr $bDigitalLicense)) + CONOUT (" IsDigitalLicense={0}" -f (BoolToWStr $bDigitalLicense)) return $TRUE } @@ -7336,7 +7480,7 @@ function PrintSubscriptionStatus { return $FALSE } - Write-Host (" SubscriptionSupportedEdition={0}" -f (BoolToWStr $dwSupported)) + CONOUT (" SubscriptionSupportedEdition={0}" -f (BoolToWStr $dwSupported)) $pStatus = $Marshal::AllocHGlobal($Marshal::SizeOf([Type]$SubStatus)) if ($Win32::ClipGetSubscriptionStatus([ref]$pStatus)) { @@ -7347,25 +7491,26 @@ function PrintSubscriptionStatus { $sStatus = $Marshal::PtrToStructure($pStatus, [Type]$SubStatus) $Marshal::FreeHGlobal($pStatus) - Write-Host (" SubscriptionEnabled={0}" -f (BoolToWStr $sStatus.dwEnabled)) + CONOUT (" SubscriptionEnabled={0}" -f (BoolToWStr $sStatus.dwEnabled)) if ($sStatus.dwEnabled -eq 0) { return $TRUE } - Write-Host (" SubscriptionSku={0}" -f $sStatus.dwSku) - Write-Host (" SubscriptionState={0}" -f $sStatus.dwState) + CONOUT (" SubscriptionSku={0}" -f $sStatus.dwSku) + CONOUT (" SubscriptionState={0}" -f $sStatus.dwState) return $TRUE } function ClicRun { - if ($All.IsPresent) {Write-Host} - Write-Host "Client Licensing Check information:" + & $isAll + CONOUT "Client Licensing Check information:" $null = PrintStateData - $null = PrintLastActivationHRresult + $null = PrintLastActivationHResult + $null = PrintLastActivationTime $null = PrintIsWindowsGenuine if ($DllDigital) { @@ -7376,20 +7521,16 @@ function ClicRun $null = PrintSubscriptionStatus } - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } #endregion $Host.UI.RawUI.WindowTitle = "Check Activation Status" - +UnQuickEdit if ($All.IsPresent) { - $B=$Host.UI.RawUI.BufferSize;$B.Height=3000;$Host.UI.RawUI.BufferSize=$B;clear; -} - -$SysPath = "$env:SystemRoot\System32" -if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { - $SysPath = "$env:SystemRoot\Sysnative" + $B=$Host.UI.RawUI.BufferSize;$B.Height=3000;$Host.UI.RawUI.BufferSize=$B; + if (!$Pass.IsPresent) {clear;} } $wslp = "SoftwareLicensingProduct" @@ -7403,46 +7544,43 @@ $cSub = ($winbuild -GE 19041) -And (Select-String -Path "$SysPath\wbem\sppwmi.mo $DllDigital = ($winbuild -GE 14393) -And (Test-Path "$SysPath\EditionUpgradeManagerObj.dll") $DllSubscription = ($winbuild -GE 14393) -And (Test-Path "$SysPath\Clipc.dll") $VLActTypes = @("All", "AD", "KMS", "Token") -$SLKeyPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" -$NSKeyPath = "Registry::HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" +$SLKeyPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" +$NSKeyPath = "HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" -'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ $null} +'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ $false} -$OsppHook = 1 -try {gsv osppsvc -EA 1 | Out-Null} catch {$OsppHook = 0} +$offsvc = "osppsvc" +if ($NT7 -Or -Not $NT6) {$winsvc = "sppsvc"} else {$winsvc = "slsvc"} -if ($NT7 -Or -Not $NT6) { - try {sasv sppsvc -EA 1} catch {} +try {gsv $winsvc -EA 1 | Out-Null; $WsppHook = 1} catch {$WsppHook = 0} +try {gsv $offsvc -EA 1 | Out-Null; $OsppHook = 1} catch {$OsppHook = 0} + +if ($WsppHook -NE 0) { + try {sasv $winsvc -EA 1} catch {} + $cW1nd0ws = DetectID $wslp $winApp + $c0ff1ce15 = DetectID $wslp $o15App + $c0ff1ce14 = DetectID $wslp $o14App } -else -{ - try {sasv slsvc -EA 1} catch {} -} - -DetectID $wslp $winApp ([ref]$cW1nd0ws) -DetectID $wslp $o15App ([ref]$c0ff1ce15) -DetectID $wslp $o14App ([ref]$c0ff1ce14) if ($OsppHook -NE 0) { - try {sasv osppsvc -EA 1} catch {} - DetectID $oslp $o15App ([ref]$ospp15) - DetectID $oslp $o14App ([ref]$ospp14) + try {sasv $offsvc -EA 1} catch {} + $ospp15 = DetectID $oslp $o15App + $ospp14 = DetectID $oslp $o14App } -if ($null -NE $cW1nd0ws) +if ($cW1nd0ws) { echoWindows GetID $wslp $winApp | foreach -EA 1 { GetResult $wslp $wsls $_ - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } } elseif ($NT6) { echoWindows - Write-Host - Write-Host "Error: product key not found." + CONOUT "`nError: product key not found." } if ($winbuild -GE 9200) { @@ -7456,39 +7594,43 @@ if ($c0ff1ce15 -Or $ospp15) { $doMSG = 1 -if ($null -NE $c0ff1ce15) { +if ($c0ff1ce15) +{ echoOffice GetID $wslp $o15App | foreach -EA 1 { GetResult $wslp $wsls $_ - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } } -if ($null -NE $c0ff1ce14) { +if ($c0ff1ce14) +{ echoOffice GetID $wslp $o14App | foreach -EA 1 { GetResult $wslp $wsls $_ - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } } -if ($null -NE $ospp15) { +if ($ospp15) +{ echoOffice GetID $oslp $o15App | foreach -EA 1 { GetResult $oslp $osls $_ - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } } -if ($null -NE $ospp14) { +if ($ospp14) +{ echoOffice GetID $oslp $o14App | foreach -EA 1 { GetResult $oslp $osls $_ - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } } diff --git a/MAS/Separate-Files-Version/Check_Activation_Status.cmd b/MAS/Separate-Files-Version/Check_Activation_Status.cmd index a9ba6a4..3340948 100644 --- a/MAS/Separate-Files-Version/Check_Activation_Status.cmd +++ b/MAS/Separate-Files-Version/Check_Activation_Status.cmd @@ -47,20 +47,40 @@ choice /c 0 /n exit /b :sppmgr: +param ( + [Parameter()] + [switch] + $All, + [Parameter()] + [switch] + $Dlv, + [Parameter()] + [switch] + $IID, + [Parameter()] + [switch] + $Pass +) + +function CONOUT($strObj) +{ + Out-Host -Input $strObj +} + function ExitScript($ExitCode = 0) { Exit $ExitCode } if (-Not $PSVersionTable) { - Write-Host "==== ERROR ====`r`n" - Write-Host 'Windows PowerShell 1.0 is not supported by this script.' + "==== ERROR ====`r`n" + "Windows PowerShell 1.0 is not supported by this script." ExitScript 1 } if ($ExecutionContext.SessionState.LanguageMode.value__ -NE 0) { - Write-Host "==== ERROR ====`r`n" - Write-Host 'Windows PowerShell is not running in Full Language Mode.' + "==== ERROR ====`r`n" + "Windows PowerShell is not running in Full Language Mode." ExitScript 1 } @@ -68,21 +88,49 @@ $winbuild = 1 try { $winbuild = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$env:SystemRoot\System32\kernel32.dll").FileBuildPart } catch { - $winbuild = [int](Get-WmiObject Win32_OperatingSystem).BuildNumber + $winbuild = [int]([wmi]'Win32_OperatingSystem=@').BuildNumber } if ($winbuild -EQ 1) { - Write-Host "==== ERROR ====`r`n" - Write-Host 'Could not detect Windows build.' + "==== ERROR ====`r`n" + "Could not detect Windows build." ExitScript 1 } if ($winbuild -LT 2600) { - Write-Host "==== ERROR ====`r`n" - Write-Host 'This build of Windows is not supported by this script.' + "==== ERROR ====`r`n" + "This build of Windows is not supported by this script." ExitScript 1 } +$SysPath = "$env:SystemRoot\System32" +if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { + $SysPath = "$env:SystemRoot\Sysnative" +} + +if (Test-Path "$SysPath\sppc.dll") { + $SLdll = 'sppc.dll' +} elseif (Test-Path "$SysPath\slc.dll") { + $SLdll = 'slc.dll' +} else { + "==== ERROR ====`r`n" + "Software Licensing Client Dll is not detected." + ExitScript 1 +} + +if ($All.IsPresent) +{ + $isAll = {CONOUT "`r"} + $noAll = {$null} +} +else +{ + $isAll = {$null} + $noAll = {CONOUT "`r"} +} +$Dlv = $Dlv.IsPresent +$IID = $IID.IsPresent -Or $Dlv.IsPresent + $NT6 = $winbuild -GE 6000 $NT7 = $winbuild -GE 7600 $NT9 = $winbuild -GE 9600 @@ -92,12 +140,29 @@ $Admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdenti $line2 = "============================================================" $line3 = "____________________________________________________________" +function UnQuickEdit +{ + $t=[AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 1).DefineDynamicModule((Get-Random), $False).DefineType((Get-Random)) + $t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128) + $t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128) + $t.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128) + $t.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128) + $k=$t.CreateType() + if ($winbuild -GE 17763) { + if ($k::SendMessageW($k::GetConsoleWindow(), 127, 0, 0) -EQ [IntPtr]::Zero) { + return + } + } + $v=(0x0080, 0x00A0)[!($winbuild -GE 10586)] + $b=$k::SetConsoleMode($k::GetStdHandle(-10), $v) +} + function echoWindows { - Write-Host "$line2" - Write-Host "=== Windows Status ===" - Write-Host "$line2" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line2" + CONOUT "=== Windows Status ===" + CONOUT "$line2" + & $noAll } function echoOffice @@ -106,18 +171,22 @@ function echoOffice return } - if ($All.IsPresent) {Write-Host} - Write-Host "$line2" - Write-Host "=== Office Status ===" - Write-Host "$line2" - if (!$All.IsPresent) {Write-Host} + & $isAll + CONOUT "$line2" + CONOUT "=== Office Status ===" + CONOUT "$line2" + & $noAll $script:doMSG = 0 } function strGetRegistry($strKey, $strName) { -Get-ItemProperty -EA 0 $strKey | select -EA 0 -Expand $strName + try { + return [Microsoft.Win32.Registry]::GetValue($strKey, $strName, $null) + } catch { + return $null + } } function CheckOhook @@ -148,55 +217,57 @@ function CheckOhook return } - if ($All.IsPresent) {Write-Host} - Write-Host "$line2" - Write-Host "=== Office Ohook Status ===" - Write-Host "$line2" - Write-Host - Write-Host -back 'Black' -fore 'Yellow' 'Ohook for permanent Office activation is installed.' - Write-Host -back 'Black' -fore 'Yellow' 'You can ignore the below mentioned Office activation status.' - if (!$All.IsPresent) {Write-Host} + & $isAll + CONOUT "$line2" + CONOUT "=== Office Ohook Status ===" + CONOUT "$line2" + $host.UI.WriteLine('Yellow', 'Black', "`r`nOhook for permanent Office activation is installed.`r`nYou can ignore the below mentioned Office activation status.") + & $noAll } #region WMI -function DetectID($strSLP, $strAppId, [ref]$strAppVar) +function DetectID($strSLP, $strAppId) { - $fltr = "ApplicationID='$strAppId'" - if (!$All.IsPresent) { - $fltr = $fltr + " AND PartialProductKey <> NULL" - } - Get-WmiObject $strSLP ID -Filter $fltr -EA 0 | select ID -EA 0 | foreach { - $strAppVar.Value = 1 - } + $ppk = (" AND PartialProductKey <> NULL)", ")")[$All.IsPresent] + $fltr = "SELECT ID FROM $strSLP WHERE (ApplicationID='$strAppId'" + $clause = $fltr + $ppk + $sWmi = [wmisearcher]$clause + $sWmi.Options.Rewindable = $false + return ($sWmi.Get().Count -GT 0) } -function GetID($strSLP, $strAppId, $strProperty = "ID") +function GetID($strSLP, $strAppId) { $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) $IDs = [Collections.ArrayList]@() + $isAdd = (" AND LicenseDependsOn <> NULL)", ")")[$NT5] + $noAdd = " AND LicenseDependsOn IS NULL)" + $query = "SELECT ID FROM $strSLP WHERE (ApplicationID='$strAppId' AND PartialProductKey" if ($All.IsPresent) { - $fltr = "ApplicationID='$strAppId' AND PartialProductKey IS NULL" - $clause = $fltr + $fltr = $query + " IS NULL" + $clause = $fltr + $isAdd + $sWmi = [wmisearcher]$clause + $sWmi.Options.Rewindable = $false + try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} if (-Not $NT5) { - $clause = $fltr + " AND LicenseDependsOn <> NULL" - } - Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} - if (-Not $NT5) { - $clause = $fltr + " AND LicenseDependsOn IS NULL" - Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + $clause = $fltr + $noAdd + $sWmi = [wmisearcher]$clause + $sWmi.Options.Rewindable = $false + try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} } } - $fltr = "ApplicationID='$strAppId' AND PartialProductKey <> NULL" - $clause = $fltr + $fltr = $query + " <> NULL" + $clause = $fltr + $isAdd + $sWmi = [wmisearcher]$clause + $sWmi.Options.Rewindable = $false + try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} if (-Not $NT5) { - $clause = $fltr + " AND LicenseDependsOn <> NULL" - } - Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} - if (-Not $NT5) { - $clause = $fltr + " AND LicenseDependsOn IS NULL" - Get-WmiObject $strSLP $strProperty -Filter $clause -EA 0 | select -Expand $strProperty -EA 0 | foreach {$IDs += $_} + $clause = $fltr + $noAdd + $sWmi = [wmisearcher]$clause + $sWmi.Options.Rewindable = $false + try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} } return $IDs @@ -233,38 +304,45 @@ function DetectSubscription { if ($objSvc.SubscriptionEdition.Contains("UNKNOWN") -EQ $false) {$SubMsgEdition = $objSvc.SubscriptionEdition} } - Write-Host - Write-Host "Subscription information:" - Write-Host " Edition: $SubMsgEdition" - Write-Host " Type : $SubMsgType" - Write-Host " Status : $SubMsgStatus" - Write-Host " Expiry : $SubMsgExpiry" + CONOUT "`nSubscription information:" + CONOUT " Edition: $SubMsgEdition" + CONOUT " Type : $SubMsgType" + CONOUT " Status : $SubMsgStatus" + CONOUT " Expiry : $SubMsgExpiry" +} + +function DetectAdbaClient +{ + CONOUT "`nAD Activation client information:" + CONOUT " Object Name: $ADActivationObjectName" + CONOUT " Domain Name: $ADActivationObjectDN" + CONOUT " CSVLK Extended PID: $ADActivationCsvlkPid" + CONOUT " CSVLK Activation ID: $ADActivationCsvlkSkuId" } function DetectAvmClient { - Write-Host - Write-Host "Automatic VM Activation client information:" + CONOUT "`nAutomatic VM Activation client information:" if (-Not [String]::IsNullOrEmpty($IAID)) { - Write-Host " Guest IAID: $IAID" + CONOUT " Guest IAID: $IAID" } else { - Write-Host " Guest IAID: Not Available" + CONOUT " Guest IAID: Not Available" } if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostMachineName)) { - Write-Host " Host machine name: $AutomaticVMActivationHostMachineName" + CONOUT " Host machine name: $AutomaticVMActivationHostMachineName" } else { - Write-Host " Host machine name: Not Available" + CONOUT " Host machine name: Not Available" } if ($AutomaticVMActivationLastActivationTime.Substring(0,4) -NE "1601") { $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($AutomaticVMActivationLastActivationTime),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') - Write-Host " Activation time: $EED UTC" + CONOUT " Activation time: $EED UTC" } else { - Write-Host " Activation time: Not Available" + CONOUT " Activation time: Not Available" } if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostDigitalPid2)) { - Write-Host " Host Digital PID2: $AutomaticVMActivationHostDigitalPid2" + CONOUT " Host Digital PID2: $AutomaticVMActivationHostDigitalPid2" } else { - Write-Host " Host Digital PID2: Not Available" + CONOUT " Host Digital PID2: Not Available" } } @@ -294,32 +372,30 @@ function DetectKmsHost $KeyManagementServiceLowPriority = "Normal" } - Write-Host - Write-Host "Key Management Service host information:" - Write-Host " Current count: $KeyManagementServiceCurrentCount" - Write-Host " Listening on Port: $KeyManagementServiceListeningPort" - Write-Host " DNS publishing: $KeyManagementServiceDnsPublishing" - Write-Host " KMS priority: $KeyManagementServiceLowPriority" + CONOUT "`nKey Management Service host information:" + CONOUT " Current count: $KeyManagementServiceCurrentCount" + CONOUT " Listening on Port: $KeyManagementServiceListeningPort" + CONOUT " DNS publishing: $KeyManagementServiceDnsPublishing" + CONOUT " KMS priority: $KeyManagementServiceLowPriority" if (-Not [String]::IsNullOrEmpty($KeyManagementServiceTotalRequests)) { - Write-Host - Write-Host "Key Management Service cumulative requests received from clients:" - Write-Host " Total: $KeyManagementServiceTotalRequests" - Write-Host " Failed: $KeyManagementServiceFailedRequests" - Write-Host " Unlicensed: $KeyManagementServiceUnlicensedRequests" - Write-Host " Licensed: $KeyManagementServiceLicensedRequests" - Write-Host " Initial grace period: $KeyManagementServiceOOBGraceRequests" - Write-Host " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests" - Write-Host " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests" - Write-Host " Notification: $KeyManagementServiceNotificationRequests" + CONOUT "`nKey Management Service cumulative requests received from clients:" + CONOUT " Total: $KeyManagementServiceTotalRequests" + CONOUT " Failed: $KeyManagementServiceFailedRequests" + CONOUT " Unlicensed: $KeyManagementServiceUnlicensedRequests" + CONOUT " Licensed: $KeyManagementServiceLicensedRequests" + CONOUT " Initial grace period: $KeyManagementServiceOOBGraceRequests" + CONOUT " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests" + CONOUT " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests" + if ($null -NE $KeyManagementServiceNotificationRequests) {CONOUT " Notification: $KeyManagementServiceNotificationRequests"} } } function DetectKmsClient { - if ($null -NE $VLActivationTypeEnabled) {Write-Host "Configured Activation Type: $($VLActTypes[$VLActivationTypeEnabled])"} - Write-Host + if ($null -NE $VLActivationTypeEnabled) {CONOUT "Configured Activation Type: $($VLActTypes[$VLActivationTypeEnabled])"} + CONOUT "`r" if ($LicenseStatus -NE 1) { - Write-Host "Please activate the product in order to update KMS client information values." + CONOUT "Please activate the product in order to update KMS client information values." return } @@ -352,33 +428,42 @@ function DetectKmsClient } } - Write-Host "Key Management Service client information:" - Write-Host " Client Machine ID (CMID): $($objSvc.ClientMachineID)" + CONOUT "Key Management Service client information:" + CONOUT " Client Machine ID (CMID): $($objSvc.ClientMachineID)" if ($null -EQ $KmsReg) { - Write-Host " $KmsDns" - Write-Host " Registered KMS machine name: KMS name not available" + CONOUT " $KmsDns" + CONOUT " Registered KMS machine name: KMS name not available" } else { - Write-Host " $KmsReg" + CONOUT " $KmsReg" } - if ($null -NE $DiscoveredKeyManagementServiceMachineIpAddress) {Write-Host " KMS machine IP address: $DiscoveredKeyManagementServiceMachineIpAddress"} - Write-Host " KMS machine extended PID: $KeyManagementServiceProductKeyID" - Write-Host " Activation interval: $VLActivationInterval minutes" - Write-Host " Renewal interval: $VLRenewalInterval minutes" - if ($null -NE $KeyManagementServiceHostCaching) {Write-Host " KMS host caching: $KeyManagementServiceHostCaching"} - if (-Not [String]::IsNullOrEmpty($KeyManagementServiceLookupDomain)) {Write-Host " KMS SRV record lookup domain: $KeyManagementServiceLookupDomain"} + if ($null -NE $DiscoveredKeyManagementServiceMachineIpAddress) {CONOUT " KMS machine IP address: $DiscoveredKeyManagementServiceMachineIpAddress"} + CONOUT " KMS machine extended PID: $KeyManagementServiceProductKeyID" + CONOUT " Activation interval: $VLActivationInterval minutes" + CONOUT " Renewal interval: $VLRenewalInterval minutes" + if ($null -NE $KeyManagementServiceHostCaching) {CONOUT " KMS host caching: $KeyManagementServiceHostCaching"} + if (-Not [String]::IsNullOrEmpty($KeyManagementServiceLookupDomain)) {CONOUT " KMS SRV record lookup domain: $KeyManagementServiceLookupDomain"} } function GetResult($strSLP, $strSLS, $strID) { - try {$objPrd = Get-WmiObject $strSLP -Filter "ID='$strID'" -EA 1} catch {return} - $objPrd | select -Expand Properties -EA 0 | foreach { - if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} + try + { + $objPrd = [wmisearcher]"SELECT * FROM $strSLP WHERE ID='$strID'" + $objPrd.Options.Rewindable = $false + $objPrd.Get() | select -Expand Properties -EA 0 | foreach { if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} } + $objPrd.Dispose() + } + catch + { + return } $winID = ($ApplicationID -EQ $winApp) $winPR = ($winID -And -Not $LicenseIsAddon) $Vista = ($winID -And $NT6 -And -Not $NT7) $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) + $reapp = ("Windows", "App")[!$winID] + $prmnt = ("machine", "product")[!$winPR] if ($Description | Select-String "VOLUME_KMSCLIENT") {$cKmsClient = 1; $_mTag = "Volume"} if ($Description | Select-String "TIMEBASED_") {$cTblClient = 1; $_mTag = "Timebased"} @@ -403,7 +488,7 @@ function GetResult($strSLP, $strSLS, $strID) $LicenseInf = "Licensed" $LicenseMsg = $null if ($GracePeriodRemaining -EQ 0) { - if ($winPR) {$ExpireMsg = "The machine is permanently activated."} else {$ExpireMsg = "The product is permanently activated."} + $ExpireMsg = "The $prmnt is permanently activated." } else { $LicenseMsg = "$_mTag activation expiration: $GracePeriodRemaining minute(s) ($_gpr day(s))" if ($null -NE $_xpr) {$ExpireMsg = "$_mTag activation will expire $_xpr"} @@ -424,8 +509,9 @@ function GetResult($strSLP, $strSLS, $strID) if ($LicenseStatus -EQ 5 -And -Not $NT5) { $LicenseInf = "Notification" $LicenseMsg = "Notification Reason: $LicenseReason" + if ($LicenseReason -EQ "0xC004F00F") {if ($null -NE $cKmsClient) {$LicenseMsg = $LicenseMsg + " (KMS license expired)."} else {$LicenseMsg = $LicenseMsg + " (hardware out of tolerance)."}} if ($LicenseReason -EQ "0xC004F200") {$LicenseMsg = $LicenseMsg + " (non-genuine)."} - if ($LicenseReason -EQ "0xC004F009") {$LicenseMsg = $LicenseMsg + " (grace time expired)."} + if ($LicenseReason -EQ "0xC004F009" -Or $LicenseReason -EQ "0xC004F064") {$LicenseMsg = $LicenseMsg + " (grace time expired)."} } if ($LicenseStatus -GT 5 -Or ($LicenseStatus -GT 4 -And $NT5)) { $LicenseInf = "Unknown" @@ -437,25 +523,61 @@ function GetResult($strSLP, $strSLS, $strID) } if ($winPR -And $PartialProductKey -And -Not $NT9) { - $dp4 = Get-ItemProperty -EA 0 "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | select -EA 0 -Expand DigitalProductId4 + $dp4 = strGetRegistry "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" "DigitalProductId4" if ($null -NE $dp4) { $ProductKeyChannel = ([System.Text.Encoding]::Unicode.GetString($dp4, 1016, 128)).Trim([char]$null) } } - if ($All.IsPresent) {Write-Host} - Write-Host "Name: $Name" - Write-Host "Description: $Description" - Write-Host "Activation ID: $ID" - if ($null -NE $ProductKeyID) {Write-Host "Extended PID: $ProductKeyID"} - if ($null -NE $OfflineInstallationId -And $IID.IsPresent) {Write-Host "Installation ID: $OfflineInstallationId"} - if ($null -NE $ProductKeyChannel) {Write-Host "Product Key Channel: $ProductKeyChannel"} - if ($null -NE $PartialProductKey) {Write-Host "Partial Product Key: $PartialProductKey"} else {Write-Host "Product Key: Not installed"} - Write-Host "License Status: $LicenseInf" - if ($null -NE $LicenseMsg) {Write-Host "$LicenseMsg"} + if ($winPR -And $Dlv -And $null -EQ $RemainingAppReArmCount) { + try + { + $tmp = [wmisearcher]"SELECT RemainingWindowsReArmCount FROM $strSLS" + $tmp.Options.Rewindable = $false + $tmp.Get() | select -Expand Properties -EA 0 | foreach {set $_.Name $_.Value} + $tmp.Dispose() + } + catch + { + } + } + + $add_on = $Name.IndexOf("add-on for", 5) + + & $isAll + if ($add_on -EQ -1) {CONOUT "Name: $Name"} else {CONOUT "Name: $($Name.Substring(0, $add_on + 7))"} + CONOUT "Description: $Description" + CONOUT "Activation ID: $ID" + if ($null -NE $ProductKeyID) {CONOUT "Extended PID: $ProductKeyID"} + if ($null -NE $ProductKeyID2 -And $Dlv) {CONOUT "Product ID: $ProductKeyID2"} + if ($null -NE $OfflineInstallationId -And $IID) {CONOUT "Installation ID: $OfflineInstallationId"} + if ($null -NE $ProductKeyChannel) {CONOUT "Product Key Channel: $ProductKeyChannel"} + if ($null -NE $PartialProductKey) {CONOUT "Partial Product Key: $PartialProductKey"} + CONOUT "License Status: $LicenseInf" + if ($null -NE $LicenseMsg) {CONOUT "$LicenseMsg"} if ($LicenseStatus -NE 0 -And $EvaluationEndDate.Substring(0,4) -NE "1601") { $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($EvaluationEndDate),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') - Write-Host "Evaluation End Date: $EED UTC" + CONOUT "Evaluation End Date: $EED UTC" + } + if ($Dlv) { + if ($null -NE $RemainingWindowsReArmCount) { + CONOUT "Remaining Windows rearm count: $RemainingWindowsReArmCount" + } + if ($null -NE $RemainingSkuReArmCount -And $RemainingSkuReArmCount -NE 4294967295) { + CONOUT "Remaining $reapp rearm count: $RemainingAppReArmCount" + CONOUT "Remaining SKU rearm count: $RemainingSkuReArmCount" + } + if ($null -NE $TrustedTime -And $LicenseStatus -NE 0) { + $TTD = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($TrustedTime),$null,32).ToString('yyyy-MM-dd hh:mm:ss tt') + CONOUT "Trusted time: $TTD" + } + } + if ($LicenseStatus -EQ 0) { + return + } + + if ($strSLP -EQ $wslp -And $null -NE $PartialProductKey -And $null -NE $ADActivationObjectName -And $VLActivationType -EQ 1) { + DetectAdbaClient } if ($winID -And $null -NE $cAvmClient -And $null -NE $PartialProductKey) { @@ -467,16 +589,27 @@ function GetResult($strSLP, $strSLS, $strID) $chkSLS = ($null -NE $PartialProductKey) -And ($null -NE $cKmsClient -Or $null -NE $cKmsHost -Or $chkSub) if (!$chkSLS) { - if ($null -NE $ExpireMsg) {Write-Host; Write-Host " $ExpireMsg"} + if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} return } - $objSvc = Get-WmiObject $strSLS -EA 0 - - if ($Vista) { - $objSvc | select -Expand Properties -EA 0 | foreach { - if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} + try + { + $objSvc = New-Object PSObject + $wmiSvc = [wmisearcher]"SELECT * FROM $strSLS" + $wmiSvc.Options.Rewindable = $false + $wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { + if (-Not [String]::IsNullOrEmpty($_.Value)) + { + $objSvc | Add-Member 8 $_.Name $_.Value + if ($null -EQ $IsKeyManagementServiceMachine) {set $_.Name $_.Value} + } } + $wmiSvc.Dispose() + } + catch + { + return } if ($strSLS -EQ $wsls -And $NT9) { @@ -486,6 +619,7 @@ function GetResult($strSLP, $strSLS, $strID) } if ($null -NE $cKmsHost -And $IsKeyManagementServiceMachine -GT 0) { + if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} DetectKmsHost } @@ -493,7 +627,9 @@ function GetResult($strSLP, $strSLS, $strID) DetectKmsClient } - if ($null -NE $ExpireMsg) {Write-Host; Write-Host " $ExpireMsg"} + if ($null -EQ $cKmsHost) { + if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} + } if ($chkSub) { DetectSubscription @@ -533,11 +669,10 @@ function PrintModePerPridFromRegistry $vNextPrids = Get-Item -Path $vNextRegkey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty 'property' -ErrorAction SilentlyContinue | Where-Object -FilterScript {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"} If ($null -Eq $vNextPrids) { - Write-Host - Write-Host "No registry keys found." + CONOUT "`nNo registry keys found." Return } - Write-Host + CONOUT "`r" $vNextPrids | ForEach ` { $mode = (Get-ItemProperty -Path $vNextRegkey -Name $_).$_ @@ -547,7 +682,7 @@ function PrintModePerPridFromRegistry 3 { $mode = "Device"; Break } Default { $mode = "Legacy"; Break } } - Write-Host $_ = $mode + CONOUT "$_ = $mode" } } @@ -561,8 +696,7 @@ function PrintSharedComputerLicensing $scaPolicyValue = Get-ItemProperty -Path $scaPolicyKey -ErrorAction SilentlyContinue | Select-Object -ExpandProperty "SharedComputerLicensing" -ErrorAction SilentlyContinue If ($null -Eq $scaValue -And $null -Eq $scaValue2 -And $null -Eq $scaPolicyValue) { - Write-Host - Write-Host "No registry keys found." + CONOUT "`nNo registry keys found." Return } $scaModeValue = $scaValue -Or $scaValue2 -Or $scaPolicyValue @@ -574,9 +708,8 @@ function PrintSharedComputerLicensing { $scaMode = "Enabled" } - Write-Host - Write-Host "Status:" $scaMode - Write-Host + CONOUT "`nStatus: $scaMode" + CONOUT "`r" $tokenFiles = $null $tokenPath = "${env:LOCALAPPDATA}\Microsoft\Office\16.0\Licensing" If (Test-Path $tokenPath) @@ -585,12 +718,12 @@ function PrintSharedComputerLicensing } If ($null -Eq $tokenFiles) { - Write-Host "No tokens found." + CONOUT "No tokens found." Return } If ($tokenFiles.Length -Eq 0) { - Write-Host "No tokens found." + CONOUT "No tokens found." Return } $tokenFiles | ForEach ` @@ -624,16 +757,9 @@ function PrintLicensesInformation { $licenseFiles = Get-ChildItem -Path $licensePath -Recurse | Where-Object { !$_.PSIsContainer } } - If ($null -Eq $licenseFiles) + If ($null -Eq $licenseFiles -Or $licenseFiles.Length -Eq 0) { - Write-Host - Write-Host "No licenses found." - Return - } - If ($licenseFiles.Length -Eq 0) - { - Write-Host - Write-Host "No licenses found." + CONOUT "`nNo licenses found." Return } $licenseFiles | ForEach ` @@ -690,24 +816,20 @@ function vNextDiagRun Return } - if ($All.IsPresent) {Write-Host} - Write-Host "$line2" - Write-Host "=== Office vNext Status ===" - Write-Host "$line2" - Write-Host - Write-Host "========== Mode per ProductReleaseId ==========" + & $isAll + CONOUT "$line2" + CONOUT "=== Office vNext Status ===" + CONOUT "$line2" + CONOUT "`n========== Mode per ProductReleaseId ==========" PrintModePerPridFromRegistry - Write-Host - Write-Host "========== Shared Computer Licensing ==========" + CONOUT "`n========== Shared Computer Licensing ==========" PrintSharedComputerLicensing - Write-Host - Write-Host "========== vNext licenses ===========" + CONOUT "`n========== vNext licenses ===========" PrintLicensesInformation -Mode "NUL" - Write-Host - Write-Host "========== Device licenses ==========" + CONOUT "`n========== Device licenses ==========" PrintLicensesInformation -Mode "Device" - Write-Host "$line3" - Write-Host + CONOUT "$line3" + CONOUT "`r" } #endregion @@ -790,13 +912,13 @@ function PrintStateData { } [string[]]$pwszStateString = $Marshal::PtrToStringUni($pwszStateData) -replace ";", "`n " - Write-Host " $pwszStateString" + CONOUT (" $pwszStateString") $Marshal::FreeHGlobal($pwszStateData) return $TRUE } -function PrintLastActivationHRresult { +function PrintLastActivationHResult { $pdwLastHResult = 0 $cbSize = 0 @@ -809,12 +931,34 @@ function PrintLastActivationHRresult { return $FALSE } - Write-Host (" LastActivationHResult=0x{0:x8}" -f $Marshal::ReadInt32($pdwLastHResult)) + CONOUT (" LastActivationHResult=0x{0:x8}" -f $Marshal::ReadInt32($pdwLastHResult)) $Marshal::FreeHGlobal($pdwLastHResult) return $TRUE } +function PrintLastActivationTime { + $pdwLastTime = 0 + $cbSize = 0 + + if ($Win32::SLGetWindowsInformation( + "Security-SPP-LastWindowsActivationTime", + [ref]$null, + [ref]$cbSize, + [ref]$pdwLastTime + )) { + return $FALSE + } + + $actTime = $Marshal::ReadInt64($pdwLastTime) + if ($actTime -ne 0) { + CONOUT (" LastActivationTime={0}" -f [DateTime]::FromFileTimeUtc($actTime).ToString("yyyy/MM/dd:HH:mm:ss")) + } + + $Marshal::FreeHGlobal($pdwLastTime) + return $TRUE +} + function PrintIsWindowsGenuine { $dwGenuine = 0 $ppwszGenuineStates = @( @@ -830,9 +974,9 @@ function PrintIsWindowsGenuine { } if ($dwGenuine -lt 5) { - Write-Host (" IsWindowsGenuine={0}" -f $ppwszGenuineStates[$dwGenuine]) + CONOUT (" IsWindowsGenuine={0}" -f $ppwszGenuineStates[$dwGenuine]) } else { - Write-Host (" IsWindowsGenuine={0}" -f $dwGenuine) + CONOUT (" IsWindowsGenuine={0}" -f $dwGenuine) } return $TRUE @@ -856,7 +1000,7 @@ function PrintDigitalLicenseStatus { [bool]$bDigitalLicense = $FALSE $bDigitalLicense = (($dwReturnCode -ge 0) -and ($dwReturnCode -ne 1)) - Write-Host (" IsDigitalLicense={0}" -f (BoolToWStr $bDigitalLicense)) + CONOUT (" IsDigitalLicense={0}" -f (BoolToWStr $bDigitalLicense)) return $TRUE } @@ -874,7 +1018,7 @@ function PrintSubscriptionStatus { return $FALSE } - Write-Host (" SubscriptionSupportedEdition={0}" -f (BoolToWStr $dwSupported)) + CONOUT (" SubscriptionSupportedEdition={0}" -f (BoolToWStr $dwSupported)) $pStatus = $Marshal::AllocHGlobal($Marshal::SizeOf([Type]$SubStatus)) if ($Win32::ClipGetSubscriptionStatus([ref]$pStatus)) { @@ -885,25 +1029,26 @@ function PrintSubscriptionStatus { $sStatus = $Marshal::PtrToStructure($pStatus, [Type]$SubStatus) $Marshal::FreeHGlobal($pStatus) - Write-Host (" SubscriptionEnabled={0}" -f (BoolToWStr $sStatus.dwEnabled)) + CONOUT (" SubscriptionEnabled={0}" -f (BoolToWStr $sStatus.dwEnabled)) if ($sStatus.dwEnabled -eq 0) { return $TRUE } - Write-Host (" SubscriptionSku={0}" -f $sStatus.dwSku) - Write-Host (" SubscriptionState={0}" -f $sStatus.dwState) + CONOUT (" SubscriptionSku={0}" -f $sStatus.dwSku) + CONOUT (" SubscriptionState={0}" -f $sStatus.dwState) return $TRUE } function ClicRun { - if ($All.IsPresent) {Write-Host} - Write-Host "Client Licensing Check information:" + & $isAll + CONOUT "Client Licensing Check information:" $null = PrintStateData - $null = PrintLastActivationHRresult + $null = PrintLastActivationHResult + $null = PrintLastActivationTime $null = PrintIsWindowsGenuine if ($DllDigital) { @@ -914,20 +1059,16 @@ function ClicRun $null = PrintSubscriptionStatus } - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } #endregion $Host.UI.RawUI.WindowTitle = "Check Activation Status" - +UnQuickEdit if ($All.IsPresent) { - $B=$Host.UI.RawUI.BufferSize;$B.Height=3000;$Host.UI.RawUI.BufferSize=$B;clear; -} - -$SysPath = "$env:SystemRoot\System32" -if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { - $SysPath = "$env:SystemRoot\Sysnative" + $B=$Host.UI.RawUI.BufferSize;$B.Height=3000;$Host.UI.RawUI.BufferSize=$B; + if (!$Pass.IsPresent) {clear;} } $wslp = "SoftwareLicensingProduct" @@ -941,46 +1082,43 @@ $cSub = ($winbuild -GE 19041) -And (Select-String -Path "$SysPath\wbem\sppwmi.mo $DllDigital = ($winbuild -GE 14393) -And (Test-Path "$SysPath\EditionUpgradeManagerObj.dll") $DllSubscription = ($winbuild -GE 14393) -And (Test-Path "$SysPath\Clipc.dll") $VLActTypes = @("All", "AD", "KMS", "Token") -$SLKeyPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" -$NSKeyPath = "Registry::HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" +$SLKeyPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" +$NSKeyPath = "HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" -'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ $null} +'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ $false} -$OsppHook = 1 -try {gsv osppsvc -EA 1 | Out-Null} catch {$OsppHook = 0} +$offsvc = "osppsvc" +if ($NT7 -Or -Not $NT6) {$winsvc = "sppsvc"} else {$winsvc = "slsvc"} -if ($NT7 -Or -Not $NT6) { - try {sasv sppsvc -EA 1} catch {} +try {gsv $winsvc -EA 1 | Out-Null; $WsppHook = 1} catch {$WsppHook = 0} +try {gsv $offsvc -EA 1 | Out-Null; $OsppHook = 1} catch {$OsppHook = 0} + +if ($WsppHook -NE 0) { + try {sasv $winsvc -EA 1} catch {} + $cW1nd0ws = DetectID $wslp $winApp + $c0ff1ce15 = DetectID $wslp $o15App + $c0ff1ce14 = DetectID $wslp $o14App } -else -{ - try {sasv slsvc -EA 1} catch {} -} - -DetectID $wslp $winApp ([ref]$cW1nd0ws) -DetectID $wslp $o15App ([ref]$c0ff1ce15) -DetectID $wslp $o14App ([ref]$c0ff1ce14) if ($OsppHook -NE 0) { - try {sasv osppsvc -EA 1} catch {} - DetectID $oslp $o15App ([ref]$ospp15) - DetectID $oslp $o14App ([ref]$ospp14) + try {sasv $offsvc -EA 1} catch {} + $ospp15 = DetectID $oslp $o15App + $ospp14 = DetectID $oslp $o14App } -if ($null -NE $cW1nd0ws) +if ($cW1nd0ws) { echoWindows GetID $wslp $winApp | foreach -EA 1 { GetResult $wslp $wsls $_ - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } } elseif ($NT6) { echoWindows - Write-Host - Write-Host "Error: product key not found." + CONOUT "`nError: product key not found." } if ($winbuild -GE 9200) { @@ -994,39 +1132,43 @@ if ($c0ff1ce15 -Or $ospp15) { $doMSG = 1 -if ($null -NE $c0ff1ce15) { +if ($c0ff1ce15) +{ echoOffice GetID $wslp $o15App | foreach -EA 1 { GetResult $wslp $wsls $_ - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } } -if ($null -NE $c0ff1ce14) { +if ($c0ff1ce14) +{ echoOffice GetID $wslp $o14App | foreach -EA 1 { GetResult $wslp $wsls $_ - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } } -if ($null -NE $ospp15) { +if ($ospp15) +{ echoOffice GetID $oslp $o15App | foreach -EA 1 { GetResult $oslp $osls $_ - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } } -if ($null -NE $ospp14) { +if ($ospp14) +{ echoOffice GetID $oslp $o14App | foreach -EA 1 { GetResult $oslp $osls $_ - Write-Host "$line3" - if (!$All.IsPresent) {Write-Host} + CONOUT "$line3" + & $noAll } } From de812acdc5cfa814ba55dd4b6fb0780cb83f1906 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 31 Jan 2025 18:25:56 +0530 Subject: [PATCH 074/132] show error info on screen when unable to connect to licensing servers --- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 8c192be..94f651d 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -636,10 +636,12 @@ set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();" set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();" set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()" %psc% "!tls! !d1!" %nul2% | findstr /i "PurchaseFD DeviceAddResponse" %nul1% || set resfail=1 +if defined resfail %psc% "!tls! !d1!" ) if not defined resfail ( %psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1 +if defined resfail %psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" ) if defined resfail ( From d10b6d691e4af66c22fc5038ef9c50ee4c197ab1 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 1 Feb 2025 21:18:21 +0530 Subject: [PATCH 075/132] Update licensing servers test section --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 45 ++++++++++++------- .../Activators/HWID_Activation.cmd | 43 +++++++++++------- 2 files changed, 54 insertions(+), 34 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 0950461..90639da 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -842,17 +842,18 @@ goto :dl_final set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" -if defined _int ( +if %keyerror% EQU 0 if defined _int ( reg delete "%_ident%" /f %nul% -reg query "%_ident%" %nul% && ( -echo: -set error=1 -call :dk_color %Red% "Deleting IdentityCRL Registry [Failed] [%_ident%]" -) for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 20 | Out-Null") call :dk_refresh call :dk_act call :dk_checkperm + +reg query "%_ident%" %nul% || ( +set error=1 +echo: +call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]" +) ) ::========================================================================================================================================== @@ -860,7 +861,6 @@ call :dk_checkperm :: Extended licensing servers tests incase error not found and activation failed if %keyerror% EQU 0 if not defined _perm if defined _int ( -set resfail= ipconfig /flushdns %nul% set "tls=[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;" @@ -873,30 +873,35 @@ set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();" set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();" set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()" %psc% "!tls! !d1!" %nul2% | findstr /i "PurchaseFD DeviceAddResponse" %nul1% || set resfail=1 +if defined resfail %psc% "!tls! !d1!" ) if not defined resfail ( %psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1 +if defined resfail %psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" +) ) if defined resfail ( set error=1 echo: -call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]" +for %%# in ( +login.live.com +purchase.mp.microsoft.com +licensing.mp.microsoft.com +) do ( +findstr /i "%%#" "%SysPath%\drivers\etc\hosts" %nul1% && set "hosfail= [Blocked in Hosts]" +) +call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]!hosfail!" set fixes=%fixes% %mas%licensing-servers-issue call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" ) -) ::========================================================================================================================================== -if %keyerror% EQU 0 if not defined _perm if defined _int ( +:: Windows update and store block check -reg query "%_ident%" %nul% || ( -set error=1 -echo: -call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]" -) +if %keyerror% EQU 0 if not defined _perm if defined _int ( reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DisableWindowsUpdateAccess %nul2% | find /i "0x1" %nul% && set wublock=1 reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DoNotConnectToWindowsUpdateInternetLocations %nul2% | find /i "0x1" %nul% && set wublock=1 @@ -921,6 +926,7 @@ reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || (set wuco ) if defined wucorrupt ( +set error=1 call :dk_color %Red% "Checking Windows Update Registry [Corruption Found]" if !wcount! GTR 2 ( call :dk_color %Red% "Windows seems to be infected with Mal%w%ware." @@ -932,16 +938,21 @@ call :dk_color %Blue% "HWID activation needs working Windows updates, if you hav ) else ( %psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 20 | Out-Null" sc query wuauserv | find /i "RUNNING" %nul% || ( +set error=1 set wuerror=1 sc start wuauserv %nul% call :dk_color %Red% "Starting Windows Update Service [Failed] [!errorlevel!]" call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it." ) ) +) -REM Check Internet related error codes +::========================================================================================================================================== -if not defined wucorrupt if not defined wublock if not defined wuerror if not defined storeblock ( +:: Check Internet related error codes + +if %keyerror% EQU 0 if not defined _perm if defined _int ( +if not defined wucorrupt if not defined wublock if not defined wuerror if not defined storeblock if not defined resfail ( echo "%error_code%" | findstr /i "0x80072e 0x80072f 0x800704cf 0x87e10bcf 0x800705b4" %nul% && ( call :dk_color %Red% "Checking Internet Issues [Found] %error_code%" set fixes=%fixes% %mas%licensing-servers-issue diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 94f651d..e92f742 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -605,17 +605,18 @@ goto :dl_final set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" -if defined _int ( +if %keyerror% EQU 0 if defined _int ( reg delete "%_ident%" /f %nul% -reg query "%_ident%" %nul% && ( -echo: -set error=1 -call :dk_color %Red% "Deleting IdentityCRL Registry [Failed] [%_ident%]" -) for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 20 | Out-Null") call :dk_refresh call :dk_act call :dk_checkperm + +reg query "%_ident%" %nul% || ( +set error=1 +echo: +call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]" +) ) ::========================================================================================================================================== @@ -623,7 +624,6 @@ call :dk_checkperm :: Extended licensing servers tests incase error not found and activation failed if %keyerror% EQU 0 if not defined _perm if defined _int ( -set resfail= ipconfig /flushdns %nul% set "tls=[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;" @@ -643,25 +643,28 @@ if not defined resfail ( %psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1 if defined resfail %psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" ) +) if defined resfail ( set error=1 echo: -call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]" +for %%# in ( +login.live.com +purchase.mp.microsoft.com +licensing.mp.microsoft.com +) do ( +findstr /i "%%#" "%SysPath%\drivers\etc\hosts" %nul1% && set "hosfail= [Blocked in Hosts]" +) +call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]!hosfail!" set fixes=%fixes% %mas%licensing-servers-issue call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" ) -) ::========================================================================================================================================== -if %keyerror% EQU 0 if not defined _perm if defined _int ( +:: Windows update and store block check -reg query "%_ident%" %nul% || ( -set error=1 -echo: -call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]" -) +if %keyerror% EQU 0 if not defined _perm if defined _int ( reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DisableWindowsUpdateAccess %nul2% | find /i "0x1" %nul% && set wublock=1 reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DoNotConnectToWindowsUpdateInternetLocations %nul2% | find /i "0x1" %nul% && set wublock=1 @@ -686,6 +689,7 @@ reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || (set wuco ) if defined wucorrupt ( +set error=1 call :dk_color %Red% "Checking Windows Update Registry [Corruption Found]" if !wcount! GTR 2 ( call :dk_color %Red% "Windows seems to be infected with Mal%w%ware." @@ -697,16 +701,21 @@ call :dk_color %Blue% "HWID activation needs working Windows updates, if you hav ) else ( %psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 20 | Out-Null" sc query wuauserv | find /i "RUNNING" %nul% || ( +set error=1 set wuerror=1 sc start wuauserv %nul% call :dk_color %Red% "Starting Windows Update Service [Failed] [!errorlevel!]" call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it." ) ) +) -REM Check Internet related error codes +::========================================================================================================================================== -if not defined wucorrupt if not defined wublock if not defined wuerror if not defined storeblock ( +:: Check Internet related error codes + +if %keyerror% EQU 0 if not defined _perm if defined _int ( +if not defined wucorrupt if not defined wublock if not defined wuerror if not defined storeblock if not defined resfail ( echo "%error_code%" | findstr /i "0x80072e 0x80072f 0x800704cf 0x87e10bcf 0x800705b4" %nul% && ( call :dk_color %Red% "Checking Internet Issues [Found] %error_code%" set fixes=%fixes% %mas%licensing-servers-issue From b5ba36c033f160a7e8814d6f96d33ebfc5105e67 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 2 Feb 2025 03:50:02 +0530 Subject: [PATCH 076/132] Remove UnQuickEdit in check activation script --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 18 ------------------ .../Check_Activation_Status.cmd | 18 ------------------ 2 files changed, 36 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 90639da..d16eb7d 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -6613,23 +6613,6 @@ $Admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdenti $line2 = "============================================================" $line3 = "____________________________________________________________" -function UnQuickEdit -{ - $t=[AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 1).DefineDynamicModule((Get-Random), $False).DefineType((Get-Random)) - $t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128) - $t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128) - $t.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128) - $t.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128) - $k=$t.CreateType() - if ($winbuild -GE 17763) { - if ($k::SendMessageW($k::GetConsoleWindow(), 127, 0, 0) -EQ [IntPtr]::Zero) { - return - } - } - $v=(0x0080, 0x00A0)[!($winbuild -GE 10586)] - $b=$k::SetConsoleMode($k::GetStdHandle(-10), $v) -} - function echoWindows { CONOUT "$line2" @@ -7538,7 +7521,6 @@ function ClicRun #endregion $Host.UI.RawUI.WindowTitle = "Check Activation Status" -UnQuickEdit if ($All.IsPresent) { $B=$Host.UI.RawUI.BufferSize;$B.Height=3000;$Host.UI.RawUI.BufferSize=$B; if (!$Pass.IsPresent) {clear;} diff --git a/MAS/Separate-Files-Version/Check_Activation_Status.cmd b/MAS/Separate-Files-Version/Check_Activation_Status.cmd index 3340948..52b15b7 100644 --- a/MAS/Separate-Files-Version/Check_Activation_Status.cmd +++ b/MAS/Separate-Files-Version/Check_Activation_Status.cmd @@ -140,23 +140,6 @@ $Admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdenti $line2 = "============================================================" $line3 = "____________________________________________________________" -function UnQuickEdit -{ - $t=[AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 1).DefineDynamicModule((Get-Random), $False).DefineType((Get-Random)) - $t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128) - $t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128) - $t.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128) - $t.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128) - $k=$t.CreateType() - if ($winbuild -GE 17763) { - if ($k::SendMessageW($k::GetConsoleWindow(), 127, 0, 0) -EQ [IntPtr]::Zero) { - return - } - } - $v=(0x0080, 0x00A0)[!($winbuild -GE 10586)] - $b=$k::SetConsoleMode($k::GetStdHandle(-10), $v) -} - function echoWindows { CONOUT "$line2" @@ -1065,7 +1048,6 @@ function ClicRun #endregion $Host.UI.RawUI.WindowTitle = "Check Activation Status" -UnQuickEdit if ($All.IsPresent) { $B=$Host.UI.RawUI.BufferSize;$B.Height=3000;$Host.UI.RawUI.BufferSize=$B; if (!$Pass.IsPresent) {clear;} From 9e6f386819c5c64287e25a8229107dcdd6d91c7e Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 2 Feb 2025 18:13:28 +0530 Subject: [PATCH 077/132] Fix licensing servers tests --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 17 ++++++----------- .../Activators/HWID_Activation.cmd | 17 ++++++----------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index d16eb7d..42c837e 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -865,26 +865,21 @@ ipconfig /flushdns %nul% set "tls=[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;" for %%# in ( +licensing.mp.microsoft.com/v7.0/licenses/content login.live.com/ppsecure/deviceaddcredential.srf purchase.mp.microsoft.com/v7.0/users/me/orders ) do if not defined resfail ( -set "d1=Add-Type -AssemblyName System.Net.Http;" -set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();" -set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();" -set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()" -%psc% "!tls! !d1!" %nul2% | findstr /i "PurchaseFD DeviceAddResponse" %nul1% || set resfail=1 -if defined resfail %psc% "!tls! !d1!" +%psc% "try { !tls! irm https://%%# -Method POST } catch { if ($_.Exception.Response -eq $null) { exit 3 } }" +if !errorlevel!==3 ( +echo: +set resfail=1 +%psc% "try { !tls! irm https://%%# -Method POST } catch { Write-Host """"[%%#] $($_.Exception.Message)"""" -ForegroundColor Red -BackgroundColor Black }" ) - -if not defined resfail ( -%psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1 -if defined resfail %psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" ) ) if defined resfail ( set error=1 -echo: for %%# in ( login.live.com purchase.mp.microsoft.com diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index e92f742..bb33f73 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -628,26 +628,21 @@ ipconfig /flushdns %nul% set "tls=[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;" for %%# in ( +licensing.mp.microsoft.com/v7.0/licenses/content login.live.com/ppsecure/deviceaddcredential.srf purchase.mp.microsoft.com/v7.0/users/me/orders ) do if not defined resfail ( -set "d1=Add-Type -AssemblyName System.Net.Http;" -set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();" -set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();" -set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()" -%psc% "!tls! !d1!" %nul2% | findstr /i "PurchaseFD DeviceAddResponse" %nul1% || set resfail=1 -if defined resfail %psc% "!tls! !d1!" +%psc% "try { !tls! irm https://%%# -Method POST } catch { if ($_.Exception.Response -eq $null) { exit 3 } }" +if !errorlevel!==3 ( +echo: +set resfail=1 +%psc% "try { !tls! irm https://%%# -Method POST } catch { Write-Host """"[%%#] $($_.Exception.Message)"""" -ForegroundColor Red -BackgroundColor Black }" ) - -if not defined resfail ( -%psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1 -if defined resfail %psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" ) ) if defined resfail ( set error=1 -echo: for %%# in ( login.live.com purchase.mp.microsoft.com From 19c6612a4709694630471a3de685dbe955dbe12d Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 2 Feb 2025 18:25:46 +0530 Subject: [PATCH 078/132] Optimize the tests --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 8 ++------ MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 8 ++------ 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 42c837e..cefb6f3 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -869,12 +869,8 @@ licensing.mp.microsoft.com/v7.0/licenses/content login.live.com/ppsecure/deviceaddcredential.srf purchase.mp.microsoft.com/v7.0/users/me/orders ) do if not defined resfail ( -%psc% "try { !tls! irm https://%%# -Method POST } catch { if ($_.Exception.Response -eq $null) { exit 3 } }" -if !errorlevel!==3 ( -echo: -set resfail=1 -%psc% "try { !tls! irm https://%%# -Method POST } catch { Write-Host """"[%%#] $($_.Exception.Message)"""" -ForegroundColor Red -BackgroundColor Black }" -) +%psc% "try { !tls! irm https://%%# -Method POST } catch { if ($_.Exception.Response -eq $null) { Write-Host """"[%%#] $($_.Exception.Message)"""" -ForegroundColor Red -BackgroundColor Black; exit 3 } }" +if !errorlevel!==3 set resfail=1 ) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index bb33f73..49d0415 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -632,12 +632,8 @@ licensing.mp.microsoft.com/v7.0/licenses/content login.live.com/ppsecure/deviceaddcredential.srf purchase.mp.microsoft.com/v7.0/users/me/orders ) do if not defined resfail ( -%psc% "try { !tls! irm https://%%# -Method POST } catch { if ($_.Exception.Response -eq $null) { exit 3 } }" -if !errorlevel!==3 ( -echo: -set resfail=1 -%psc% "try { !tls! irm https://%%# -Method POST } catch { Write-Host """"[%%#] $($_.Exception.Message)"""" -ForegroundColor Red -BackgroundColor Black }" -) +%psc% "try { !tls! irm https://%%# -Method POST } catch { if ($_.Exception.Response -eq $null) { Write-Host """"[%%#] $($_.Exception.Message)"""" -ForegroundColor Red -BackgroundColor Black; exit 3 } }" +if !errorlevel!==3 set resfail=1 ) ) From 63045afc708028e867f02a3cd135c6e7ebe5fa53 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 2 Feb 2025 19:21:01 +0530 Subject: [PATCH 079/132] Remove activation not required line in HWID --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 1 - MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 1 - 2 files changed, 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index cefb6f3..bf222d5 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -600,7 +600,6 @@ cls echo ___________________________________________________________________________________________ echo: call :dk_color2 %_White% " " %Green% "%winos% is already permanently activated." -call :dk_color2 %_White% " " %Gray% "Activation is not required." echo ___________________________________________________________________________________________ if %_unattended%==1 goto dk_done echo: diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 49d0415..89aeaea 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -363,7 +363,6 @@ cls echo ___________________________________________________________________________________________ echo: call :dk_color2 %_White% " " %Green% "%winos% is already permanently activated." -call :dk_color2 %_White% " " %Gray% "Activation is not required." echo ___________________________________________________________________________________________ if %_unattended%==1 goto dk_done echo: From af69d79c5c1d05c56959a7f6266c893cb28a0cda Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 3 Feb 2025 19:32:03 +0530 Subject: [PATCH 080/132] check main domain --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 +++- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index bf222d5..40cc675 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -876,11 +876,13 @@ if !errorlevel!==3 set resfail=1 if defined resfail ( set error=1 for %%# in ( +live.com +microsoft.com login.live.com purchase.mp.microsoft.com licensing.mp.microsoft.com ) do ( -findstr /i "%%#" "%SysPath%\drivers\etc\hosts" %nul1% && set "hosfail= [Blocked in Hosts]" +findstr /i "%%#" "%SysPath%\drivers\etc\hosts" %nul1% && set "hosfail= [%%# Blocked in Hosts]" ) call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]!hosfail!" set fixes=%fixes% %mas%licensing-servers-issue diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 89aeaea..b88f42a 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -639,11 +639,13 @@ if !errorlevel!==3 set resfail=1 if defined resfail ( set error=1 for %%# in ( +live.com +microsoft.com login.live.com purchase.mp.microsoft.com licensing.mp.microsoft.com ) do ( -findstr /i "%%#" "%SysPath%\drivers\etc\hosts" %nul1% && set "hosfail= [Blocked in Hosts]" +findstr /i "%%#" "%SysPath%\drivers\etc\hosts" %nul1% && set "hosfail= [%%# Blocked in Hosts]" ) call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]!hosfail!" set fixes=%fixes% %mas%licensing-servers-issue From 8f3f3925177b26cf21b8dbd5cad6debf0e3b2e19 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 3 Feb 2025 23:57:37 +0530 Subject: [PATCH 081/132] Add updated CAS --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 38 +++++-------------- .../Check_Activation_Status.cmd | 38 +++++-------------- 2 files changed, 18 insertions(+), 58 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 40cc675..30ebaea 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -6568,21 +6568,6 @@ if ($winbuild -LT 2600) { ExitScript 1 } -$SysPath = "$env:SystemRoot\System32" -if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { - $SysPath = "$env:SystemRoot\Sysnative" -} - -if (Test-Path "$SysPath\sppc.dll") { - $SLdll = 'sppc.dll' -} elseif (Test-Path "$SysPath\slc.dll") { - $SLdll = 'slc.dll' -} else { - "==== ERROR ====`r`n" - "Software Licensing Client Dll is not detected." - ExitScript 1 -} - if ($All.IsPresent) { $isAll = {CONOUT "`r"} @@ -6977,7 +6962,7 @@ function GetResult($strSLP, $strSLS, $strID) } } - if ($winPR -And $Dlv -And $null -EQ $RemainingAppReArmCount) { + if ($winPR -And $Dlv -And $NT7 -And $null -EQ $RemainingAppReArmCount) { try { $tmp = [wmisearcher]"SELECT RemainingWindowsReArmCount FROM $strSLS" @@ -7046,14 +7031,9 @@ function GetResult($strSLP, $strSLS, $strID) $objSvc = New-Object PSObject $wmiSvc = [wmisearcher]"SELECT * FROM $strSLS" $wmiSvc.Options.Rewindable = $false - $wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { - if (-Not [String]::IsNullOrEmpty($_.Value)) - { - $objSvc | Add-Member 8 $_.Name $_.Value - if ($null -EQ $IsKeyManagementServiceMachine) {set $_.Name $_.Value} - } - } + $wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { if (-Not [String]::IsNullOrEmpty($_.Value)) {$objSvc | Add-Member 8 $_.Name $_.Value} } $wmiSvc.Dispose() + if ($null -EQ $IsKeyManagementServiceMachine) {$objSvc.PSObject.Properties | foreach {set $_.Name $_.Value}} } catch { @@ -7164,12 +7144,7 @@ function PrintSharedComputerLicensing { $tokenFiles = Get-ChildItem -Path $tokenPath -Filter "*authString*" -Recurse | Where-Object { !$_.PSIsContainer } } - If ($null -Eq $tokenFiles) - { - CONOUT "No tokens found." - Return - } - If ($tokenFiles.Length -Eq 0) + If ($null -Eq $tokenFiles -Or $tokenFiles.Length -Eq 0) { CONOUT "No tokens found." Return @@ -7518,6 +7493,11 @@ if ($All.IsPresent) { if (!$Pass.IsPresent) {clear;} } +$SysPath = "$env:SystemRoot\System32" +if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { + $SysPath = "$env:SystemRoot\Sysnative" +} + $wslp = "SoftwareLicensingProduct" $wsls = "SoftwareLicensingService" $oslp = "OfficeSoftwareProtectionProduct" diff --git a/MAS/Separate-Files-Version/Check_Activation_Status.cmd b/MAS/Separate-Files-Version/Check_Activation_Status.cmd index 52b15b7..f15f36e 100644 --- a/MAS/Separate-Files-Version/Check_Activation_Status.cmd +++ b/MAS/Separate-Files-Version/Check_Activation_Status.cmd @@ -103,21 +103,6 @@ if ($winbuild -LT 2600) { ExitScript 1 } -$SysPath = "$env:SystemRoot\System32" -if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { - $SysPath = "$env:SystemRoot\Sysnative" -} - -if (Test-Path "$SysPath\sppc.dll") { - $SLdll = 'sppc.dll' -} elseif (Test-Path "$SysPath\slc.dll") { - $SLdll = 'slc.dll' -} else { - "==== ERROR ====`r`n" - "Software Licensing Client Dll is not detected." - ExitScript 1 -} - if ($All.IsPresent) { $isAll = {CONOUT "`r"} @@ -512,7 +497,7 @@ function GetResult($strSLP, $strSLS, $strID) } } - if ($winPR -And $Dlv -And $null -EQ $RemainingAppReArmCount) { + if ($winPR -And $Dlv -And $NT7 -And $null -EQ $RemainingAppReArmCount) { try { $tmp = [wmisearcher]"SELECT RemainingWindowsReArmCount FROM $strSLS" @@ -581,14 +566,9 @@ function GetResult($strSLP, $strSLS, $strID) $objSvc = New-Object PSObject $wmiSvc = [wmisearcher]"SELECT * FROM $strSLS" $wmiSvc.Options.Rewindable = $false - $wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { - if (-Not [String]::IsNullOrEmpty($_.Value)) - { - $objSvc | Add-Member 8 $_.Name $_.Value - if ($null -EQ $IsKeyManagementServiceMachine) {set $_.Name $_.Value} - } - } + $wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { if (-Not [String]::IsNullOrEmpty($_.Value)) {$objSvc | Add-Member 8 $_.Name $_.Value} } $wmiSvc.Dispose() + if ($null -EQ $IsKeyManagementServiceMachine) {$objSvc.PSObject.Properties | foreach {set $_.Name $_.Value}} } catch { @@ -699,12 +679,7 @@ function PrintSharedComputerLicensing { $tokenFiles = Get-ChildItem -Path $tokenPath -Filter "*authString*" -Recurse | Where-Object { !$_.PSIsContainer } } - If ($null -Eq $tokenFiles) - { - CONOUT "No tokens found." - Return - } - If ($tokenFiles.Length -Eq 0) + If ($null -Eq $tokenFiles -Or $tokenFiles.Length -Eq 0) { CONOUT "No tokens found." Return @@ -1053,6 +1028,11 @@ if ($All.IsPresent) { if (!$Pass.IsPresent) {clear;} } +$SysPath = "$env:SystemRoot\System32" +if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { + $SysPath = "$env:SystemRoot\Sysnative" +} + $wslp = "SoftwareLicensingProduct" $wsls = "SoftwareLicensingService" $oslp = "OfficeSoftwareProtectionProduct" From 60c99742ce9ff1c675c6e381e17b0f4ccf1a57bd Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 13 Feb 2025 23:10:49 +0530 Subject: [PATCH 082/132] 3.0 --- .gitattributes | 6 +- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 6175 +++++++++++++- .../Activators/HWID_Activation.cmd | 33 +- .../Activators/KMS38_Activation.cmd | 31 +- .../Activators/Ohook_Activation_AIO.cmd | 46 +- .../Activators/Online_KMS_Activation.cmd | 31 +- .../Activators/ReadMe.txt | 12 - .../Activators/TSforge_Activation.cmd | 7408 +++++++++++++++++ .../Activators/_ReadMe.txt | 13 + .../Change_Office_Edition.cmd | 22 +- .../Change_Windows_Edition.cmd | 22 +- .../Extract_OEM_Folder.cmd | 212 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 22 +- README.md | 27 +- 14 files changed, 13773 insertions(+), 287 deletions(-) delete mode 100644 MAS/Separate-Files-Version/Activators/ReadMe.txt create mode 100644 MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd create mode 100644 MAS/Separate-Files-Version/Activators/_ReadMe.txt diff --git a/.gitattributes b/.gitattributes index 8749e12..de5bd3d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -# MAS export-ignore -# LICENSE export-ignore -# README.md export-ignore +MAS export-ignore +LICENSE export-ignore +README.md export-ignore .gitattributes export-ignore diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 30ebaea..dfb8b2f 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1,18 +1,18 @@ -@::b879-random -@set masver=2.9 +@::u78r-random +@set masver=3.0 @setlocal DisableDelayedExpansion @echo off -:: For command line switches, check mass grave[.]dev/command_line_switches +:: For command line switches, check mass<>grave<.>dev/command_line_switches :: If you want to better understand script, read from MAS separate files version. ::============================================================================ :: -:: Homepage: mass grave[.]dev +:: Homepage: mass<>grave<.>dev :: Email: mas.help@outlook.com :: ::============================================================================ @@ -131,6 +131,16 @@ set "nul=>nul 2>&1" call :dk_setvar +if %winbuild% EQU 1 ( +%eline% +echo Failed to detect Windows build number. +echo: +setlocal EnableDelayedExpansion +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. @@ -255,9 +265,13 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( +if not "%%#"=="" set old=1 +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( +if not "%%#"=="" set old= +) ) if defined old ( @@ -273,7 +287,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem -if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) +if !errorlevel!==1 (start %mas% & exit /b) ) ) @@ -286,10 +300,11 @@ if not exist "%SystemRoot%\Temp\" mkdir "%SystemRoot%\Temp" %nul% set _elev= if defined _args echo "%_args%" | find /i "/S" %nul% && (set "_silent=%nul%") || (set _silent=) if defined _args echo "%_args%" | find /i "/" %nul% && ( -echo "%_args%" | find /i "/HWID" %nul% && (setlocal & cls & (call :HWIDActivation %_args% %_silent%) & endlocal) -echo "%_args%" | find /i "/KMS38" %nul% && (setlocal & cls & (call :KMS38Activation %_args% %_silent%) & endlocal) -echo "%_args%" | find /i "/K-" %nul% && (setlocal & cls & (call :KMSActivation %_args% %_silent%) & endlocal) -echo "%_args%" | find /i "/Ohook" %nul% && (setlocal & cls & (call :OhookActivation %_args% %_silent%) & endlocal) +echo "%_args%" | find /i "/HWID" %nul% && (setlocal & cls & (call :HWIDActivation %_args% %_silent%) & endlocal) +echo "%_args%" | find /i "/KMS38" %nul% && (setlocal & cls & (call :KMS38Activation %_args% %_silent%) & endlocal) +echo "%_args%" | find /i "/Z-" %nul% && (setlocal & cls & (call :TSforgeActivation %_args% %_silent%) & endlocal) +echo "%_args%" | find /i "/K-" %nul% && (setlocal & cls & (call :KMSActivation %_args% %_silent%) & endlocal) +echo "%_args%" | find /i "/Ohook" %nul% && (setlocal & cls & (call :OhookActivation %_args% %_silent%) & endlocal) exit /b ) @@ -319,7 +334,13 @@ goto dk_done cls color 07 title Microsoft %blank%Activation %blank%Scripts %masver% -if not defined terminal mode 76, 33 +if not defined terminal mode 76, 34 + +if %winbuild% GEQ 10240 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" set _hwidgo=1 +if %winbuild% GTR 14393 if exist "%SysPath%\spp\tokens\skus\EnterpriseSN\" set _hwidgo= +if not defined _hwidgo set _tsforgego=1 +if %winbuild% GEQ 9200 set _ohookgo=1 +if %winbuild% LSS 9200 set _okmsgo=1 echo: echo: @@ -329,40 +350,67 @@ echo: ______________________________________________________________ echo: echo: Activation Methods: echo: -echo: [1] HWID ^| Windows ^| Permanent -echo: [2] Ohook ^| Office ^| Permanent -echo: [3] KMS38 ^| Windows ^| Year 2038 -echo: [4] Online KMS ^| Windows / Office ^| 180 Days +if defined _hwidgo ( +call :dk_color3 %_White% " [1] " %_Green% "HWID" %_White% " - Windows" +) else ( +echo: [1] HWID - Windows +) +if defined _ohookgo ( +call :dk_color3 %_White% " [2] " %_Green% "Ohook" %_White% " - Office" +) else ( +echo: [2] Ohook - Office +) +if defined _tsforgego ( +call :dk_color3 %_White% " [3] " %_Green% "TSforge" %_White% " - Windows / Office / ESU" +) else ( +echo: [3] TSforge - Windows / Office / ESU +) +echo: [4] KMS38 - Windows +if defined _okmsgo ( +call :dk_color3 %_White% " [5] " %_Green% "Online KMS" %_White% " - Windows / Office" +) else ( +echo: [5] Online KMS - Windows / Office +) +echo: __________________________________________________ +echo: +echo: [6] Check Activation Status +echo: [7] Change Windows Edition +echo: [8] Change Office Edition echo: __________________________________________________ echo: -echo: [5] Check Activation Status -echo: [6] Change Windows Edition -echo: [7] Change Office Edition -echo: __________________________________________________ -echo: -echo: [8] Troubleshoot -echo: [9] Extras +echo: [9] Troubleshoot +echo: [E] Extras echo: [H] Help echo: [0] Exit echo: ______________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,5,6,7,8,9,H,0] :" -choice /C:123456789H0 /N +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3...E,H,0] :" +choice /C:123456789EH0 /N set _erl=%errorlevel% -if %_erl%==11 exit /b -if %_erl%==10 start %mas%troubleshoot & goto :MainMenu -if %_erl%==9 goto :Extras -if %_erl%==8 setlocal & call :troubleshoot & cls & endlocal & goto :MainMenu -if %_erl%==7 setlocal & call :change_offedition & cls & endlocal & goto :MainMenu -if %_erl%==6 setlocal & call :change_winedition & cls & endlocal & goto :MainMenu -if %_erl%==5 setlocal & call :check_actstatus & cls & endlocal & goto :MainMenu -if %_erl%==4 setlocal & call :KMSActivation & cls & endlocal & goto :MainMenu -if %_erl%==3 setlocal & call :KMS38Activation & cls & endlocal & goto :MainMenu +if %_erl%==12 exit /b +if %_erl%==11 start %mas%troubleshoot & goto :MainMenu +if %_erl%==10 goto :Extras +if %_erl%==9 setlocal & call :troubleshoot & cls & endlocal & goto :MainMenu +if %_erl%==8 setlocal & call :change_offedition & cls & endlocal & goto :MainMenu +if %_erl%==7 setlocal & call :change_winedition & cls & endlocal & goto :MainMenu +if %_erl%==6 setlocal & call :check_actstatus & cls & endlocal & goto :MainMenu +if %_erl%==5 setlocal & call :KMSActivation & cls & endlocal & goto :MainMenu +if %_erl%==4 setlocal & call :KMS38Activation & cls & endlocal & goto :MainMenu +if %_erl%==3 setlocal & call :TSforgeActivation & cls & endlocal & goto :MainMenu if %_erl%==2 setlocal & call :OhookActivation & cls & endlocal & goto :MainMenu if %_erl%==1 setlocal & call :HWIDActivation & cls & endlocal & goto :MainMenu goto :MainMenu +:dk_color3 + +if %_NCS% EQU 1 ( +echo %esc%[%~1%~2%esc%[%~3%~4%esc%[%~5%~6%esc%[0m +) else ( +%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6'-NoNewline; write-host -back '%7' -fore '%8' '%9' +) +exit /b + ::======================================================================================================================================== :Extras @@ -422,36 +470,34 @@ echo: echo: echo: echo: Extract $OEM$ folder on the desktop -echo: ________________________________________________________ +echo: ____________________________________________________________ echo: -echo: [1] HWID -echo: [2] Ohook -echo: [3] KMS38 -echo: [4] Online KMS +echo: [1] HWID [Windows] +echo: [2] Ohook [Office] +echo: [3] TSforge [Windows / ESU / Office] +echo: [4] KMS38 [Windows] +echo: [5] Online KMS [Windows / Office] echo: -echo: [5] HWID ^(Windows^) ^+ Ohook ^(Office^) -echo: [6] HWID ^(Windows^) ^+ Online KMS ^(Office^) -echo: [7] KMS38 ^(Windows^) ^+ Ohook ^(Office^) -echo: [8] KMS38 ^(Windows^) ^+ Online KMS ^(Office^) -echo: [9] Online KMS ^(Windows^) ^+ Ohook ^(Office^) +echo: [6] HWID [Windows] ^+ Ohook [Office] +echo: [7] HWID [Windows] ^+ Ohook [Office] ^+ TSforge [ESU] +echo: [8] TSforge [Windows] ^+ Online KMS [Office] echo: -call :dk_color2 %_White% " [R] " %_Green% "ReadMe" -echo: [0] Go Back -echo: ________________________________________________________ +call :dk_color2 %_White% " [R] " %_Green% "ReadMe" +echo: [0] Go Back +echo: ____________________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard:" -choice /C:123456789R0 /N +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard :" +choice /C:12345678R0 /N set _erl=%errorlevel% -if %_erl%==11 goto:Extras -if %_erl%==10 start %mas%oem-folder &goto:Extract$OEM$2 -if %_erl%==9 (set "_oem=Online KMS [Windows] + Ohook [Office]" & set "para=/K-Windows /Ohook" &goto:Extract$OEM$3) -if %_erl%==8 (set "_oem=KMS38 [Windows] + Online KMS [Office]" & set "para=/KMS38 /K-Office" &goto:Extract$OEM$3) -if %_erl%==7 (set "_oem=KMS38 [Windows] + Ohook [Office]" & set "para=/KMS38 /Ohook" &goto:Extract$OEM$3) -if %_erl%==6 (set "_oem=HWID [Windows] + Online KMS [Office]" & set "para=/HWID /K-Office" &goto:Extract$OEM$3) -if %_erl%==5 (set "_oem=HWID [Windows] + Ohook [Office]" & set "para=/HWID /Ohook" &goto:Extract$OEM$3) -if %_erl%==4 (set "_oem=Online KMS" & set "para=/K-WindowsOffice" &goto:Extract$OEM$3) -if %_erl%==3 (set "_oem=KMS38" & set "para=/KMS38" &goto:Extract$OEM$3) +if %_erl%==10 goto:Extras +if %_erl%==9 start %mas%oem-folder &goto:Extract$OEM$2 +if %_erl%==8 (set "_oem=TSforge [Windows] + Online KMS [Office]" & set "para=/Z-Windows /K-Office" &goto:Extract$OEM$3) +if %_erl%==7 (set "_oem=HWID [Windows] + Ohook [Office] + TSforge [ESU]" & set "para=/HWID /Ohook /Z-ESU" &goto:Extract$OEM$3) +if %_erl%==6 (set "_oem=HWID [Windows] + Ohook [Office]" & set "para=/HWID /Ohook" &goto:Extract$OEM$3) +if %_erl%==5 (set "_oem=Online KMS" & set "para=/K-WindowsOffice" &goto:Extract$OEM$3) +if %_erl%==4 (set "_oem=KMS38" & set "para=/KMS38" &goto:Extract$OEM$3) +if %_erl%==3 (set "_oem=TSforge" & set "para=/Z-WindowsESUOffice" &goto:Extract$OEM$3) if %_erl%==2 (set "_oem=Ohook" & set "para=/Ohook" &goto:Extract$OEM$3) if %_erl%==1 (set "_oem=HWID" & set "para=/HWID" &goto:Extract$OEM$3) goto :Extract$OEM$2 @@ -540,14 +586,14 @@ if %winbuild% LSS 10240 ( echo Unsupported OS version detected [%winbuild%]. echo HWID Activation is only supported on Windows 10/11. echo: -call :dk_color %Blue% "Use Online KMS activation option." +call :dk_color %Blue% "Use TSforge activation option from the main menu." goto dk_done ) if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( %eline% echo HWID Activation is not supported on Windows Server. -call :dk_color %Blue% "Use KMS38 or Online KMS activation option." +call :dk_color %Blue% "Use TSforge activation option from the main menu." goto dk_done ) @@ -617,7 +663,8 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2 %eline% echo [%winos% ^| %winbuild%] echo: -echo Evaluation editions cannot be activated outside of their evaluation period. +echo Evaluation editions cannot be activated outside of their evaluation period. +call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." echo: set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -701,7 +748,7 @@ echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] if not defined skunotfound ( echo This product does not support HWID activation. echo Make sure you are using the latest version of the script. -echo If you are, then try KMS38 activation option. +echo If you are, then try TSforge activation option from the main menu. set fixes=%fixes% %mas% echo %mas% ) else ( @@ -962,7 +1009,7 @@ call :dk_color %Green% "%winos% is permanently activated with a digital license. call :dk_color %Red% "Activation Failed %error_code%" if defined notworking ( call :dk_color %Blue% "At the time of writing, HWID Activation is not supported for this product." -call :dk_color %Blue% "Use KMS38 activation option instead." +call :dk_color %Blue% "Use TSforge activation option from the main menu instead." ) else ( if not defined error call :dk_color %Blue% "%_fixmsg%" set fixes=%fixes% %mas%troubleshoot @@ -2272,11 +2319,11 @@ echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") set "_oLPath=%_oRoot%\Licenses" set "_oIntegrator=%_oRoot%\integration\integrator.exe" -if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") -if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") +if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") +if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") if not "%osarch%"=="x86" ( -if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) @@ -2322,11 +2369,11 @@ set _o16c2rIds=%_oIds% set "_oLPath=%_oRoot%\Licenses16" set "_oIntegrator=%_oRoot%\integration\integrator.exe" -if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") -if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") +if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") +if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") if not "%osarch%"=="x86" ( -if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) @@ -2772,11 +2819,11 @@ echo "%2" | find /i "Wow6432Node" %nul1% && set _oArch=x86 if not "%osarch%"=="x86" if not defined _oArch set _oArch=x64 if "%osarch%"=="x86" set _oArch=x86 -if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") -if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") +if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") +if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") if not "%osarch%"=="x86" ( -if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) @@ -3537,6 +3584,5966 @@ M--u-D----BE-----QBW-GE-cgBG-Gk-b-Bl-Ek-bgBm-G8------CQ-B----FQ-cgBh-G4-cwBs-GE- :+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +:TSforgeActivation + +:: To activate Windows, run the script with "/Z-Windows" parameter or change 0 to 1 in below line +set _actwin=0 + +:: To activate Windows ESU, run the script with "/Z-ESU" parameter or change 0 to 1 in below line +set _actesu=0 + +:: To activate all Office apps (including Project/Visio), run the script with "/Z-Office" parameter or change 0 to 1 in below line +set _actoff=0 + +:: To activate only Project/Visio, run the script with "/Z-ProjectVisio" parameter or change 0 to 1 in below line +set _actprojvis=0 + +:: To activate all Windows/ESU/Office, run the script with "/Z-WindowsESUOffice" parameter or change 0 to 1 in below line +set _actwinesuoff=0 + +:: Advanced options: +:: To activate Windows K-M-S host (csvlk), run the script with "/Z-WinHost" parameter or change 0 to 1 in below line +set _actwinhost=0 + +:: To activate Office K-M-S host (csvlk), run the script with "/Z-OffHost" parameter or change 0 to 1 in below line +set _actoffhost=0 + +:: To activate Windows 8/8.1 APPX Sideloading (APPXLOB), run the script with "/Z-APPX" parameter or change 0 to 1 in below line +set _actappx=0 + +:: To activate certain activation IDs, change 0 to 1 in below line and set activation IDs in "tsids" variable, you can enter multiple by adding a space after each of them +:: or run the script with "/Z-ID-ActivationIdGoesHere" parameter. If you want to add multiple through parameter, pass each of them in separate parameters +set _actman= +set tsids= + +:: To reset rearm counter, evaluation period and clear the tamper state, key lock, run the script with "/Z-Reset" parameter or change 0 to 1 in below line +set _resall=0 + +:: Debug Mode: +:: To run the script in debug mode, change 0 to any parameter above that you want to run, in below line +set "_debug=0" + +:: Script will run in unattended mode if parameters are used OR value is changed in above lines. +:: If multiple options are selected then script will only pick one from the advanced option. + + + +::======================================================================================================================================== + +cls +color 07 +set KS=K%blank%MS +title TSforge Activation %masver% + +set _args= +set _elev= +set _unattended=0 + +set _args=%* +if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% +if defined _args for %%A in (%_args%) do ( +if /i "%%A"=="-el" (set _elev=1) +if /i "%%A"=="/Z-Windows" (set _actwin=1) +if /i "%%A"=="/Z-ESU" (set _actesu=1) +if /i "%%A"=="/Z-Office" (set _actoff=1) +if /i "%%A"=="/Z-ProjectVisio" (set _actprojvis=1) +if /i "%%A"=="/Z-WindowsESUOffice" (set _actwinesuoff=1) +if /i "%%A"=="/Z-WinHost" (set _actwinhost=1) +if /i "%%A"=="/Z-OffHost" (set _actoffhost=1) +if /i "%%A"=="/Z-APPX" (set _actappx=1) +echo "%%A" | find /i "/Z-ID-" >nul && (set _actman=1& set "filtsids=%%A" & call set "filtsids=%%filtsids:~6%%" & if defined filtsids call set tsids=%%filtsids%% %%tsids%%) +if /i "%%A"=="/Z-Reset" (set _resall=1) +) + +if not defined tsids set _actman=0 +for %%A in (%_actwin% %_actesu% %_actoff% %_actprojvis% %_actwinesuoff% %_actwinhost% %_actoffhost% %_actappx% %_actman% %_resall%) do (if "%%A"=="1" set _unattended=1) + +::======================================================================================================================================== + +:ts_menu + +if %_unattended%==0 ( +cls +if not defined terminal mode 76, 33 +title TSforge Activation %masver% + +echo: +echo: +echo: +echo ______________________________________________________________ +echo: +echo [1] Activate - Windows +echo [2] Activate - Windows [ESU] +echo [3] Activate - Office [All] +echo [4] Activate - Office [Project/Visio] +echo [5] Activate - All +echo _______________________________________________ +echo: +echo Advanced Options: +echo: +echo [A] Activate - Windows %KS% Host +echo [B] Activate - Office %KS% Host +echo [C] Activate - Windows 8/8.1 APPX Sideloading +echo [D] Activate - Manually Select Products +echo [E] Reset - Rearm/Timers/Tamper/Lock +echo _______________________________________________ +echo: +echo [6] Remove TSforge Activation +echo [7] Download Office +echo [0] %_exitmsg% +echo ______________________________________________________________ +echo: +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard..." +choice /C:12345ABCDE670 /N +set _el=!errorlevel! + +if !_el!==13 exit /b +if !_el!==12 start %mas%genuine-installation-media & goto :ts_menu +if !_el!==11 call :ts_remove & cls & goto :ts_menu +if !_el!==10 cls & setlocal & set "_resall=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==9 cls & setlocal & set "_actman=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==8 cls & setlocal & set "_actappx=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==7 cls & setlocal & set "_actoffhost=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==6 cls & setlocal & set "_actwinhost=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==5 cls & setlocal & set "_actwinesuoff=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==4 cls & setlocal & set "_actprojvis=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==3 cls & setlocal & set "_actoff=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==2 cls & setlocal & set "_actesu=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==1 cls & setlocal & set "_actwin=1" & call :ts_start & endlocal & cls & goto :ts_menu +goto :ts_menu +) + +::======================================================================================================================================== + +:ts_start + +cls + +if %_actwinesuoff%==1 (set height=38) else (set height=32) +if not defined terminal ( +mode 125, %height% +if exist "%SysPath%\spp\store_test\" mode 134, %height% +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=%height%;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% +) +title TSforge Activation %masver% + +echo: +echo Initializing... +call :dk_chkmal + +if not exist %SysPath%\sppsvc.exe ( +%eline% +echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +for /f "delims=" %%a in ('%psc% "[System.Environment]::Version.Major" %nul6%') do if "%%a"=="2" ( +reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /v Install %nul2% | find /i "0x1" %nul1% || ( +%eline% +echo .NET 3.5 Framework is corrupt or missing. Aborting... +if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-Embedded" ( +echo Install .NET Framework 4.8 and Windows Management Framework 5.1 +) +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) +) + +if %winbuild% LSS 9200 if exist "%SysPath%\wlms\wlms.exe" ( +sc query wlms | find /i "RUNNING" %nul% && ( +sc stop sppsvc %nul% +if !errorlevel! EQU 1051 ( +%eline% +echo Evaluation WLMS service is running, sppsvc service can not be stopped. Aborting... +echo Install Non-Eval version for Windows build %winbuild%. +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) +) +) + +::======================================================================================================================================== + +if %_actwinesuoff%==1 (set "_actwin=1" & set "_actesu=1" & set "_actoff=1") +if %_actprojvis%==1 (set "_actoff=1") + +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService + +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue + +::======================================================================================================================================== + +set error= + +cls +echo: +call :dk_showosinfo + +echo Initiating Diagnostic Tests... + +set "_serv=sppsvc Winmgmt" + +:: Software Protection +:: Windows Management Instrumentation + +call :dk_errorcheck + +if defined error ( +call :dk_color %Red% "Some errors were detected. Aborting the operation..." +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto :dk_done +) + +call :ts_getedition +if not defined tsedition ( +call :dk_color %Red% "Checking Windows Edition ID [Not found in installed licenses, aborting...]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto :dk_done +) + +::======================================================================================================================================== + +if %_resall%==1 goto :ts_resetall +if %_actman%==1 goto :ts_actman +if %_actappx%==1 goto :ts_appxlob +if %_actwinhost%==1 goto :ts_whost +if %_actoffhost%==1 goto :ts_ohost +if not %_actwin%==1 goto :ts_esu + +::======================================================================================================================================== + +:: Process Windows +:: Check if system is permanently activated or not + +echo: +echo Processing Windows... + +echo %tsedition% | find /i "Eval" %nul1% && ( +goto :ts_wineval +) + +call :ts_checkwinperm +if defined _perm ( +call :dk_color %Gray% "Checking OS Activation [Windows is already permanently activated]" +goto :ts_esu +) + +set tempid= +set keytype=zero +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wintsid\:.*';iex ($f[1])" %nul6%') do ( +echo "%%a" | findstr /r ".*-.*-.*-.*-.*" %nul1% && (set tsids=!tsids! %%a& set tempid=%%a) +) + +if defined tempid ( +echo Checking Activation ID [%tempid%] [%tsedition%] +) else ( +call :dk_color %Red% "Checking Activation ID [Not Found] [%tsedition%] [%osSKU%]" +set error=1 +goto :ts_esu +) + +if defined winsub ( +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." +echo: +) +goto :ts_esu + +::======================================================================================================================================== + +:ts_wineval + +call :dk_color %Gray% "Checking OS Edition [%tsedition%] [Evaluation edition found]" +call :dk_color %Blue% "Evaluation editions cannot be activated outside of evaluation period." + +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( +call :dk_color %Blue% "Script will reset evaluation period, but to permanently activate Windows," +call :dk_color %Blue% "Go back to main menu and use [Change Edition] option and change to Non-eval edition." +) else ( +call :dk_color %Blue% "Script will reset evaluation period, but to permanently activate Windows, install Non-eval edition." +call :dk_color %_Yellow% "%mas%evaluation_editions" +) + +:: Check Internet connection + +set _int= +for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1) +) + +if not defined _int ( +%psc% "If([Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet){Exit 0}Else{Exit 1}" +if !errorlevel!==0 (set _int=1&set ping_f= But Ping Failed) +) + +if defined _int ( +echo Checking Internet Connection [Connected%ping_f%] +) else ( +set error=1 +call :dk_color %Red% "Checking Internet Connection [Not Connected]" +call :dk_color %Blue% "Internet is required for Windows Evaluation activation." +) + +:: List of products lacking activable evaluation keys and ISOs + +:: c4b908d2-c4b9-439d-8ff0-48b656a24da4_EmbeddedIndustryEEval_8.1 +:: 9b74255b-afe1-4da7-a143-98d1874b2a6c_EnterpriseNEval_8 +:: 7fd0a88b-fb89-415f-9b79-84adc6a7cd56_EnterpriseNEval_8.1 +:: 994578eb-193c-4c99-bea0-2483274c9afd_EnterpriseSNEval_2015 +:: b9f3109c-bfa9-4f37-9824-6dba9ee62056_ServerStorageStandardEval_2012R2 +:: 2d3b7269-65f4-467d-9d51-dbe0e5a4e668_ServerStorageWorkgroupEval_2012R2 + +:: -------- + +:: 1st column = Activation ID +:: 2nd column = Activable evaluation key +:: 3rd column = Edition ID +:: 4th column = Windows version (for reference only) +:: 5th column = NoAct = activation is not working +:: Separator = _ + +set f= +set key= +set eval= +if not defined allapps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f + +for %%# in ( +d9eea459-1e6b-499d-8486-e68163f2a8be_N3QJR-YCWKK-RVJGK-GQFMX-T8%f%2BF_EmbeddedIndustryEval_8.1 +fbd4c5c6-adc6-4740-bc65-b2dc6dc249c1_MJ8TN-42JH8-886MT-8THCF-36%f%67B_EnterpriseEval_8_NoAct_ REM New time based activation not available +0eebbb45-29d4-49cb-ba87-a23db0cce40a_76FKW-8NR3K-QDH4P-3C87F-JH%f%TTW_EnterpriseEval_8.1 +3f4c0546-36c6-46a8-a37f-be13cdd0cf25_7HBDQ-QNKVG-K4RBF-HMBY6-YG%f%9R6_EnterpriseEval_10 +1f8dbfe8-defa-4676-b5a6-f76949a01540_4N8VT-7Y686-43DGV-THTW9-M9%f%8W7_EnterpriseNEval_10 +57a4ebb6-8e0c-41f8-b79e-8872ddc971ef_W63GF-7N4D9-GQH3K-K4FP7-9B%f%T6C_EnterpriseSEval_2015 +b47dd250-fd6a-44c8-9217-03aca6e4812e_N4DMT-RJKDQ-XR6H7-3DKKP-3Y%f%JWT_EnterpriseSEval_2016 +267bf82d-08e8-4046-b061-9ef3f8ac2b5a_N7HMH-MK36Q-M4X93-76KQ2-6J%f%HWR_EnterpriseSEval_2019 +aff25f1f-fb53-4e27-95ef-b8e5aca10ac6_9V4NK-624Y3-VK47R-Q27GP-27%f%PGF_EnterpriseSEval_2021 +399f0697-886b-4881-894c-4ff6c52e7d8f_CYPB3-XNV9V-QR4G4-Q3B8K-KQ%f%FGJ_EnterpriseSEval_2024 +6162e8c2-3c30-46e1-b964-0de603498e2d_R34N9-HJ6Q3-GBX4F-Q24KQ-49%f%DF7_EnterpriseSNEval_2016 +aed14fc8-907d-44fb-a3a1-d5d8e638acb3_MHN9Q-RD9PW-BFHDQ-9FTWQ-WQ%f%PF8_EnterpriseSNEval_2019 +5dd0c869-eae9-40ce-af48-736692cd8e43_XCN62-29X92-C4T8X-WP82X-DY%f%MJ8_EnterpriseSNEval_2021 +522cc0dc-3c7b-4258-ae68-f297ca63b64e_Y8DJM-NPXF3-QG4MH-W7WJK-KQ%f%FGM_EnterpriseSNEval_2024 +aa708397-8618-42de-b120-a44190ef456d_R63DV-9NPDX-QVWJF-HMR8V-M4%f%K7D_IoTEnterpriseSEval_2024 +cd25b1e8-5839-4a96-a769-b6abe3aa5dee_73BMN-332G9-DX6B8-FGDT3-GF%f%YT6_ServerDatacenterEval_2012 +e628c5e8-2300-4429-8b80-a8b21bd7ce0a_WPR94-KN3J7-MRB7X-JPJV8-RX%f%7J2_ServerDatacenterEval_2012R2 +01398239-85ff-487f-9e90-0e3cc5bcc92e_QVTQ9-GNRBH-JQ9G7-W7FBW-RX%f%9QR_ServerDatacenterEval_2016 +5ea4af9e-fd59-4691-b61c-1fc1ff3e309e_KNW3G-22YD2-7QKQJ-2RF2X-H6%f%F8M_ServerDatacenterEval_2019 +1d02774d-66ab-4c57-8b14-e254fdce09d4_PK7JN-24236-FH7JP-V792F-37%f%CYR_ServerDatacenterEval_2021 +96794a98-097f-42fe-8f28-2c38ea115229_M4RNW-CRTHF-TY7BG-DDHG6-J2%f%T92_ServerDatacenterEval_2025 +38d172c7-36b3-4e4b-b435-fd0b06b95c6e_RNFGD-WFFQR-XQ8BG-K7QQK-GJ%f%CP9_ServerStandardEval_2012 +4fc45a88-26b5-4cf9-9eef-769ee3f0a016_79M8M-N36BX-8YGJY-2G9KP-3Y%f%GPC_ServerStandardEval_2012R2 +9dfa8ec0-7665-4b9d-b2cb-bfc2dc37c9f4_9PBKX-4NHGT-QWV4C-4JD94-TV%f%KQ6_ServerStandardEval_2016 +7783a126-c108-4cf7-b59f-13c78c7a7337_J4WNC-H9BG3-6XRX4-3XD8K-Y7%f%XRX_ServerStandardEval_2019 +c1a197b6-ba5e-4394-b9bf-b659a6c1b873_7PBJM-MNVPD-MBQD7-TYTY4-W8%f%JDY_ServerStandardEval_2021 +753c53a2-4274-4339-8c2e-f66c0b9646c5_YPBVM-HFNWQ-CTF9M-FR4RR-7H%f%9YG_ServerStandardEval_2025 +0de5ff31-2d62-4912-b1a8-3ea01d2461fd_3CKBN-3GJ8X-7YT4X-D8DDC-D6%f%69B_ServerStorageStandardEval_2012 +fb08f53a-e597-40dc-9f08-8bbf99f19b92_NCJ6J-J23VR-DBYB3-QQBJF-W8%f%CP7_ServerStorageWorkgroupEval_2012 +) do ( +for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %tsedition%==%%C if not defined key ( +echo "%allapps%" | find /i "%%A" %nul1% && ( +set key=%%B +set eval=1 +if /i "%%E"=="NoAct" set noact=1 +echo Checking Activation ID [%%A] [%%C] +) +) +) + +if not defined key ( +set error=1 +call :dk_color %Red% "Checking Activation ID [%tsedition% not found in the script]" +call :dk_color %Blue% "Make sure you are using the updated version of the script." +goto :ts_esu +) + +set resetstuff=1 +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':tsforge\:.*';iex ($f[1])" +set resetstuff= +if !errorlevel!==3 ( +set error=1 +call :dk_color %Red% "Resetting Rearm / GracePeriod [Failed]" +call :dk_color %Blue% "%_fixmsg%" +goto :ts_esu +) else ( +echo Resetting Rearm / GracePeriod [Successful] +) + +%psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=%errorlevel% +cmd /c exit /b %keyerror% +if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" + +if %keyerror% EQU 0 ( +call :dk_refresh +echo Installing Activable Evaluation Key [%key%] [Successful] +) else ( +set error=1 +call :dk_color %Red% "Installing Activable Evaluation Key [%key%] [Failed] %keyerror%" +call :dk_color %Blue% "%_fixmsg%" +) + +::======================================================================================================================================== + +:ts_esu + +if not %_actesu%==1 goto :ts_off + +:: Process Windows ESU + +echo: +echo Processing Windows ESU... + +set esuexist= +set esuexistsup= +set esueditionlist= +set esuexistbutnosup= + +for %%# in (EnterpriseS IoTEnterpriseS IoTEnterpriseSK) do (if /i %tsedition%==%%# set isltsc=1) +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" set isServer=1 + +if /i %tsedition%==Embedded ( +if exist "%SystemRoot%\Servicing\Packages\WinEmb-Branding-Embedded-ThinPC-Package*.mum" set isThinpc=1 +if exist "%SystemRoot%\Servicing\Packages\WinEmb-Branding-Embedded-POSReady7-Package*.mum" set subEdition=[POS] +if exist "%SystemRoot%\Servicing\Packages\WinEmb-Branding-Embedded-Standard-Package*.mum" set subEdition=[Standard] +) +if not defined allapps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f + +if not defined isThinpc if not defined isltsc for %%# in ( +REM Windows7 +4220f546-f522-46df-8202-4d07afd26454_Client-ESU-Year3[1-3y]_-Enterprise-EnterpriseE-EnterpriseN-Professional-ProfessionalE-ProfessionalN-Ultimate-UltimateE-UltimateN- +7e94be23-b161-4956-a682-146ab291774c_Client-ESU-Year6[4-6y]_-Enterprise-EnterpriseE-EnterpriseN-Professional-ProfessionalE-ProfessionalN-Ultimate-UltimateE-UltimateN- +REM Windows7EmbeddedPOSReady7 +4f1f646c-1e66-4908-acc7-d1606229b29e_POS-ESU-Year3[1-3y]_-Embedded[POS]- +REM Windows7EmbeddedStandard +6aaf1c7d-527f-4ed5-b908-9fc039dfc654_WES-ESU-Year3[1-3y]_-Embedded[Standard]- +REM WindowsServer2008R2 +8e7bfb1e-acc1-4f56-abae-b80fce56cd4b_Server-ESU-PA[1-6y]_-ServerDatacenter-ServerDatacenterCore-ServerDatacenterV-ServerDatacenterVCore-ServerStandard-ServerStandardCore-ServerStandardV-ServerStandardVCore-ServerEnterprise-ServerEnterpriseCore-ServerEnterpriseV-ServerEnterpriseVCore- +REM Windows8.1 +4afc620f-12a4-48ad-8015-2aebfbd6e47c_Client-ESU-Year3[1-3y]_-Enterprise-EnterpriseN-Professional-ProfessionalN- +11be7019-a309-4763-9a09-091d1722ffe3_Client-FES-ESU-Year3[1-3y]_-EmbeddedIndustry-EmbeddedIndustryE- +REM WindowsServer2012/2012R2 +55b1dd2d-2209-4ea0-a805-06298bad25b3_Server-ESU-Year3[1-3y]_-ServerDatacenter-ServerDatacenterCore-ServerDatacenterV-ServerDatacenterVCore-ServerStandard-ServerStandardCore-ServerStandardV-ServerStandardVCore- +REM Windows10 +83d49986-add3-41d7-ba33-87c7bfb5c0fb_Client-ESU-Year3[1-3y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN- +0b533b5e-08b6-44f9-b885-c2de291ba456_Client-ESU-Year6[4-6y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN- +4dac5a0c-5709-4595-a32c-14a56a4a6b31_Client-IoT-ESU-Year3[1-3y]_-IoTEnterprise- REM Removed IoTEnterpriseS because it already has longer support +f69e2d51-3bbd-4ddf-8da7-a145e9dca597_Client-IoT-ESU-Year6[4-6y]_-IoTEnterprise- REM Removed IoTEnterpriseS because it already has longer support +) do ( +for /f "tokens=1-3 delims=_" %%A in ("%%#") do ( +echo "%allapps%" | find /i "%%A" %nul1% && ( +set esuexist=1 +echo "%%C" | find /i "-%tsedition%%subEdition%-" %nul1% && ( +set esuexistsup=1 +set esueditionlist= +set esuexistbutnosup= +set tsids=!tsids! %%A +echo Checking Activation ID [%%A] [%%B] +) || ( +if not defined esueditionlist set esueditionlist=%%C +set esuexistbutnosup=1 +) +) +) +) + +if defined esuexistsup ( +echo "%tsids%" | find /i "4220f546-f522-46df-8202-4d07afd26454" %nul1% && ( +echo "%tsids%" | find /i "7e94be23-b161-4956-a682-146ab291774c" %nul1% || ( +call :dk_color %Gray% "Now update Windows to get Client-ESU-Year6[4-6y] license and activate that using this script." +) +) +goto :ts_off +) + +if defined isltsc ( +call :dk_color %Gray% "Checking Activation ID [%tsedition% LTSC already has longer support, ESU is not applicable]" +goto :ts_off +) + +if defined esuexistbutnosup ( +call :dk_color %Red% "Checking Activation ID [Commercial ESU is not supported for %tsedition%]" +call :dk_color %Blue% "Go back to Main Menu, select Change Windows Edition option and change to any of the below listed editions." +echo [%esueditionlist%] +goto :ts_off +) + +set esuavail= +if %winbuild% LEQ 7602 if not defined isThinpc set esuavail=1 +if %winbuild% GTR 7602 if %winbuild% LSS 10240 if defined isServer set esuavail=1 +if %winbuild% GEQ 10240 if %winbuild% LEQ 19045 if not defined isServer set esuavail=1 +if %winbuild% EQU 9600 set esuavail=1 + +if defined esuavail ( +call :dk_color %Red% "Checking Activation ID [ESU license is not found, make sure Windows is fully updated]" +set fixes=%fixes% %mas%tsforge#windows-esu +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%tsforge#windows-esu" +) else ( +call :dk_color %Gray% "Checking Activation ID [ESU is not available for %winos%]" +) + +::======================================================================================================================================== + +:ts_off + +if not %_actoff%==1 goto :ts_act + +if %winbuild% LSS 9200 ( +echo: +call :dk_color %Gray% "Checking Supported Office [TSforge for Office is supported on Windows 8 and later versions]" +call :dk_color %Blue% "On Windows 7 build, use Online %KS% activation option for Office instead." +goto :ts_act +) + +:: Check ohook install + +set ohook= +for %%# in (15 16) do ( +for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do ( +if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" set ohook=1 +) +) + +for %%# in (System SystemX86) do ( +for %%G in ("Office 15" "Office") do ( +for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do ( +if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" set ohook=1 +) +) +) + +if defined ohook ( +echo: +call :dk_color %Gray% "Checking Ohook [Ohook activation is already installed for Office]" +) + +:: Check unsupported office versions + +set o14msi= +set o14c2r= + +set _68=HKLM\SOFTWARE\Microsoft\Office +set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) +%nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R +%nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R + +if not "%o14msi%%o14c2r%"=="" ( +echo: +call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%]" +) + +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( +set ohub=1 +) + +::======================================================================================================================================== + +:: Check supported office versions + +call :ts_getpath + +set o16uwp= +set o16uwp_path= + +if %winbuild% GEQ 10240 ( +for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty InstallLocation)" %nul6%') do (if exist "%%a\Integration\Integrator.exe" (set o16uwp=1&set "o16uwp_path=%%a")) +) + +sc query ClickToRunSvc %nul% +set error1=%errorlevel% + +if defined o16c2r if %error1% EQU 1060 ( +echo: +call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 16.0 files found]" +set o16c2r= +set error=1 +) + +sc query OfficeSvc %nul% +set error2=%errorlevel% + +if defined o15c2r if %error1% EQU 1060 if %error2% EQU 1060 ( +echo: +call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 15.0 files found]" +set o15c2r= +set error=1 +) + +if "%o16uwp%%o16c2r%%o15c2r%%o16msi%%o15msi%"=="" ( +set error=1 +set showfix=1 +echo: +if not "%o14msi%%o14c2r%"=="" ( +call :dk_color %Red% "Checking Supported Office Install [Not Found]" +) else ( +if %_actwin%==0 ( +call :dk_color %Red% "Checking Installed Office [Not Found]" +) else ( +call :dk_color %Gray% "Checking Installed Office [Not Found]" +) +) + +if defined ohub ( +echo: +echo You have only Office dashboard app installed, you need to install full Office version. +) +call :dk_color %Blue% "Download and install Office from below URL and try again." +if %_actwin%==0 set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto :ts_act +) + +set multioffice= +if not "%o16uwp%%o16c2r%%o15c2r%%o16msi%%o15msi%"=="1" set multioffice=1 +if not "%o14c2r%%o14msi%"=="" set multioffice=1 + +if defined multioffice ( +echo: +call :dk_color %Gray% "Checking Multiple Office Install [Found. Recommended to install one version only]" +) + +::======================================================================================================================================== + +:: Check Windows Server + +set winserver= +reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v ProductType %nul2% | find /i "WinNT" %nul1% || set winserver=1 +if not defined winserver ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Server" %nul1% && set winserver=1 +) + +::======================================================================================================================================== + +:: Process Office UWP + +if not defined o16uwp goto :ts_starto15c2r + +call :ts_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 + +set oVer=16 +set "_oLPath=%o16uwp_path%\Licenses16" +set "pkeypath=%o16uwp_path%\Office16\pkeyconfig-office.xrm-ms" +for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty Dependencies) | Select-Object PackageFullName" %nul6%') do (set "o16uwpapplist=!o16uwpapplist! %%a") + +echo "%o16uwpapplist%" | findstr /i "Access Excel OneNote Outlook PowerPoint Publisher SkypeForBusiness Word" %nul% && set "_oIds=O365HomePremRetail" + +for %%# in (Project Visio) do ( +echo "%o16uwpapplist%" | findstr /i "%%#" %nul% && ( +set _lat= +if exist "%_oLPath%\%%#Pro2024VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2024Retail " & set _lat=1 +if not defined _lat if exist "%_oLPath%\%%#Pro2021VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2021Retail " & set _lat=1 +if not defined _lat if exist "%_oLPath%\%%#Pro2019VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2019Retail " & set _lat=1 +if not defined _lat set "_oIds= !_oIds! %%#ProRetail " +) +) + +set uwpinfo=%o16uwp_path:C:\Program Files\WindowsApps\Microsoft.Office.Desktop_=% + +echo: +echo Processing Office... [UWP ^| %uwpinfo%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ts_starto15c2r +) + +call :ts_process + +::======================================================================================================================================== + +:ts_starto15c2r + +:: Process Office 15.0 C2R + +if not defined o15c2r goto :ts_starto16c2r + +call :ts_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 + +set oVer=15 +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o15c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o15c2r_reg%\Configuration") +if not defined _oArch for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v Platform" %nul6%') do (set "_oArch=%%b") +if not defined _version for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v version" %nul6%') do (set "_version=%%b") +if not defined _prids for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v ProductReleaseId" %nul6%') do (set "_prids=%o15c2r_reg%\propertyBag /v ProductReleaseId" & set "_config=%o15c2r_reg%\propertyBag") + +echo "%o15c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=10) || (set _tok=9) +for /f "tokens=%_tok% delims=\" %%a in ('reg query %o15c2r_reg%\ProductReleaseIDs\Active %nul6% ^| findstr /i "Retail Volume"') do ( +echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") +) + +set "_oLPath=%_oRoot%\Licenses" +set "pkeypath=%_oRoot%\Office15\pkeyconfig-office.xrm-ms" +set "_oIntegrator=%_oRoot%\integration\integrator.exe" + +echo: +echo Processing Office... [C2R ^| %_version% ^| %_oArch%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ts_starto16c2r +) + +if "%_actprojvis%"=="0" call :oh_fixprids +call :ts_process + +::======================================================================================================================================== + +:ts_starto16c2r + +:: Process Office 16.0 C2R + +if not defined o16c2r goto :ts_startmsi + +call :ts_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 + +set oVer=16 +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceData" %nul6%') do (set "_AudienceData=^| %%b ") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o16c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o16c2r_reg%\Configuration") + +echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=9) || (set _tok=8) +for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs" /s /f ".16" /k %nul6% ^| findstr /i "Retail Volume"') do ( +echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") +) +set _oIds=%_oIds:.16=% +set _o16c2rIds=%_oIds% + +set "_oLPath=%_oRoot%\Licenses16" +set "pkeypath=%_oRoot%\Office16\pkeyconfig-office.xrm-ms" +set "_oIntegrator=%_oRoot%\integration\integrator.exe" + +echo: +echo Processing Office... [C2R ^| %_version% %_AudienceData%^| %_oArch%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ts_startmsi +) + +if "%_actprojvis%"=="0" call :oh_fixprids +call :ts_process + +::======================================================================================================================================== + +:ts_startmsi + +if defined o15msi call :ts_processmsi 15 %o15msi_reg% +if defined o16msi call :ts_processmsi 16 %o16msi_reg% + +::======================================================================================================================================== + +echo: +call :oh_clearblock +if "%o16msi%%o15msi%"=="" if not "%o16uwp%%o16c2r%%o15c2r%"=="" call :oh_uninstkey +call :oh_licrefresh + +goto :ts_act + +::======================================================================================================================================== + +:ts_whost + +:: Process Windows K-M-S host + +echo: +echo Processing Windows %KS% Host... + +echo: +if %winbuild% GEQ 10586 ( +call :dk_color %Gray% "With %KS% Host license, system may randomly change Windows Edition later. It is a Windows issue and can be safely ignored." +) +call :dk_color %Gray% "%KS% Host [Not to be confused with %KS% Client] license causes the sppsvc service to run continuously." +call :dk_color %Blue% "Only use this activation when necessary, you can revert to normal activation from the previous menu." + +if %_unattended%==0 ( +echo: +choice /C:0F /N /M "> [0] Go back [F] Continue : " +if !errorlevel!==1 exit /b +echo: +) + +set _arr= +set tempid= +set keytype=kmshost + +:: Install current edition csvlk license so that correct edition can reflect for csvlk + +if %winbuild% GEQ 10586 ( +for %%# in ("%SysPath%\spp\tokens\skus\%tsedition%\*CSVLK*.xrm-ms") do ( +if defined _arr (set "_arr=!_arr!;"%SysPath%\spp\tokens\skus\%tsedition%\%%~nx#"") else (set "_arr="%SysPath%\spp\tokens\skus\%tsedition%\%%~nx#"") +) +if defined _arr %psc% "$sls = Get-WmiObject %sps%; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); InstallLicenseArr '!_arr!'" %nul% +) + +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wintsid\:.*';iex ($f[1])" %nul6%') do ( +echo "%%a" | findstr /r ".*-.*-.*-.*-.*" %nul1% && (set tsids=!tsids! %%a& set tempid=%%a) +) + +if defined tempid ( +echo Checking Activation ID [%tempid%] [%tsedition%] +) else ( +call :dk_color %Red% "Checking Activation ID [Not Found] [%tsedition%] [%osSKU%]" +call :dk_color %Blue% "%KS% Host license is not found on your system. It is available for the below editions." +call :dk_color %Blue% "Professional, Education, ProfessionalWorkstation, Enterprise, EnterpriseS, and Server editions, etc." +goto :ts_act +) + +if defined winsub ( +echo: +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." +) + +goto :ts_act + +::======================================================================================================================================== + +:ts_ohost + +:: Process Office K-M-S host + +echo: +echo Processing Office %KS% Host... + +set ohostexist= +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +set ohostids=%allapps% +call :dk_actids 59a52881-a989-479d-af46-f275c6370663 +set ohostids=%ohostids% %allapps% + +for %%# in ( +bfe7a195-4f8f-4f0b-a622-cf13c7d16864_KMSHost2010-ProPlusVL +f3d89bbf-c0ec-47ce-a8fa-e5a5f97e447f_KMSHost2024Volume +47f3b983-7c53-4d45-abc6-bcd91e2dd90a_KMSHost2021Volume +70512334-47b4-44db-a233-be5ea33b914c_KMSHost2019Volume +98ebfe73-2084-4c97-932c-c0cd1643bea7_KMSHost2016Volume +2e28138a-847f-42bc-9752-61b03fff33cd_KMSHost2013Volume +) do ( +for /f "tokens=1-2 delims=_" %%A in ("%%#") do ( +echo "%ohostids%" | find /i "%%A" %nul1% && ( +set ohostexist=1 +set tsids=!tsids! %%A +echo Checking Activation ID [%%A] [%%B] +) +) +) + +if not defined ohostexist ( +call :dk_color %Gray% "Checking Activation ID [Not found for Office %KS% Host]" +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%tsforge#office-kms-host" +) + +echo: +call :dk_color %Gray% "%KS% Host [Not to be confused with %KS% Client] license causes the sppsvc service to run continuously." +call :dk_color %Gray% "Only use this activation when necessary." + +goto :ts_act + +::======================================================================================================================================== + +:ts_appxlob + +:: Process Windows 8/8.1 APPX Sideloading + +echo: +echo Processing Windows 8/8.1 APPX Sideloading... + +if %winbuild% LSS 9200 set noappx=1 +if %winbuild% GTR 9600 set noappx=1 + +echo: +if defined noappx ( +call :dk_color %Gray% "Checking Activation ID [APPX Sideloading feature is available only on Windows 8/8.1]" +goto :dk_done +) + +set appxexist= +if not defined allapps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f + +for %%# in ( +ec67814b-30e6-4a50-bf7b-d55daf729d1e_APPXLOB-Client +251ef9bf-2005-442f-94c4-86307de7bb32_APPXLOB-Embedded-Industry +1e58c9d7-e3f1-4f69-9039-1f162463ac2c_APPXLOB-Embedded-Standard +3502d53e-5d43-436a-84af-714e8d334f8d_APPXLOB-Server +) do ( +for /f "tokens=1-2 delims=_" %%A in ("%%#") do ( +echo "%allapps%" | find /i "%%A" %nul1% && ( +set appxexist=1 +set tsids=!tsids! %%A +echo Checking Activation ID [%%A] [%%B] +) +) +) + +if not defined appxexist ( +call :dk_color %Red% "Checking Activation ID [Not found]" +call :dk_color %Blue% "APPX Sideloading feature is available only on Pro and higher level editions." +) + +goto :ts_act + +::======================================================================================================================================== + +:ts_resetall + +echo: +echo Processing Reset of Rearm / Timers / Tamper / Lock... +echo: + +set resetstuff=1 +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':tsforge\:.*';iex ($f[1])" + +if %errorlevel%==3 ( +call :dk_color %Red% "Reset Failed." +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) else ( +call :dk_color %Green% "Reset process has been successfully done." +) + +goto :dk_done + +::======================================================================================================================================== + +:ts_actman + +echo: +echo Processing Manual Activation... +echo: + +call :dk_color %Gray% "This option is for advanced users, those who already know what they are doing." +call :dk_color %Blue% "Some activation IDs may cause system crash [MUI mismatch], or irreversible changes [CloudEdition etc]." + +if %_unattended%==1 ( +echo: +for %%# in (%tsids%) do (echo Activation ID - %%#) +goto :ts_act +) + +call :dk_color %Blue% "Although the script will try to remove those IDs from the list, it is not fully guaranteed." +echo: +choice /C:0F /N /M "> [0] Go back [F] Continue : " +if %errorlevel%==1 exit /b + +echo: +echo Fetching Supported Activation IDs list. Please wait... + +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':listactids\:.*';iex ($f[1])" +if %errorlevel%==3 ( +call :dk_color %Gray% "No supported activation ID found, aborting..." +goto :dk_done +) + +for /f "delims=" %%a in ('%psc% "$ids = Get-WmiObject -Query 'SELECT ID FROM SoftwareLicensingProduct' | Select-Object -ExpandProperty ID; $ids" %nul6%') do call set "allactids= %%a !allactids! " + +echo: +call :dk_color %Gray% "Enter / Paste the Activation ID shown in first column in the opened text file, or just press Enter to return:" +echo Add space after each Activation ID if you are adding multiple: +echo: +set /p tsids= + +del /f /q "%SystemRoot%\Temp\actids_159_*" %nul% +if not defined tsids goto :dk_done + +for %%# in (%tsids%) do ( +echo "%allactids%" | find /i " %%# " %nul1% || ( +call :dk_color %Red% "[%%#] Incorrect Activation ID entered, aborting..." +goto :dk_done +) +) + +goto :ts_act + +:listactids: +$t = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0) +$t.DefinePInvokeMethod('SLOpen', 'slc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) +$t.DefinePInvokeMethod('SLClose', 'slc.dll', 22, 1, [IntPtr], @([IntPtr]), 1, 3).SetImplementationFlags(128) +$t.DefinePInvokeMethod('SLGetProductSkuInformation', 'slc.dll', 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) +$t.DefinePInvokeMethod('SLGetLicense', 'slc.dll', 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) +$w = $t.CreateType() +$m = [Runtime.InteropServices.Marshal] + +function slGetSkuInfo($SkuId) { + $c = 0; $b = 0 + $r = $w::SLGetProductSkuInformation($hSLC, [ref][Guid]$SkuId, "msft:sl/EUL/PHONE/PUBLIC", [ref]$null, [ref]$c, [ref]$b) + return ($r -eq 0) +} + +function IsMuiNotLocked($SkuId) { + $r = $true; $c = 0; $b = 0 + + $LicId = [Guid]::Empty + [void]$w::SLGetProductSkuInformation($hSLC, [ref][Guid]$SkuId, "fileId", [ref]$null, [ref]$c, [ref]$b) + $FileId = $m::PtrToStringUni($b) + + $c = 0; $b = 0 + [void]$w::SLGetLicense($hSLC, [ref][Guid]$FileId, [ref]$c, [ref]$b) + $blob = New-Object byte[] $c; $m::Copy($b, $blob, 0, $c) + $cont = [Text.Encoding]::UTF8.GetString($blob) + $xml = [xml]$cont.SubString($cont.IndexOf('(this T data) where T : struct + { + int size = Marshal.SizeOf(typeof(T)); + byte[] result = new byte[size]; + GCHandle handle = GCHandle.Alloc(result, GCHandleType.Pinned); + try + { + Marshal.StructureToPtr(data, handle.AddrOfPinnedObject(), false); + } + finally + { + handle.Free(); + } + return result; + } + + public static T CastToStruct(this byte[] data) where T : struct + { + GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); + try + { + IntPtr ptr = handle.AddrOfPinnedObject(); + return (T)Marshal.PtrToStructure(ptr, typeof(T)); + } + finally + { + handle.Free(); + } + } + } + + public static class FileStreamExt + { + public static byte[] ReadAllBytes(this FileStream fs) + { + BinaryReader br = new BinaryReader(fs); + return br.ReadBytes((int)fs.Length); + } + + public static void WriteAllBytes(this FileStream fs, byte[] data) + { + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(data.Length); + fs.Write(data, 0, data.Length); + } + } + + public static class Utils + { + public static string DecodeString(byte[] data) + { + return Encoding.Unicode.GetString(data).Trim('\0'); + } + + public static byte[] EncodeString(string str) + { + return Encoding.Unicode.GetBytes(str + '\0'); + } + + [DllImport("kernel32.dll")] + public static extern uint GetSystemDefaultLCID(); + + public static uint CRC32(byte[] data) + { + const uint polynomial = 0x04C11DB7; + uint crc = 0xffffffff; + + foreach (byte b in data) + { + crc ^= (uint)b << 24; + for (int bit = 0; bit < 8; bit++) + { + if ((crc & 0x80000000) != 0) + { + crc = (crc << 1) ^ polynomial; + } + else + { + crc <<= 1; + } + } + } + return ~crc; + } + + public static void KillSPP() + { + ServiceController sc; + + try + { + sc = new ServiceController("sppsvc"); + + if (sc.Status == ServiceControllerStatus.Stopped) + return; + } + catch (InvalidOperationException ex) + { + throw new InvalidOperationException("Unable to access sppsvc: " + ex.Message); + } + + Logger.WriteLine("Stopping sppsvc..."); + + bool stopped = false; + + for (int i = 0; stopped == false && i < 60; i++) + { + try + { + if (sc.Status != ServiceControllerStatus.StopPending) + sc.Stop(); + + sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromMilliseconds(500)); + } + catch (System.ServiceProcess.TimeoutException) + { + continue; + } + catch (InvalidOperationException) + { + System.Threading.Thread.Sleep(500); + continue; + } + + stopped = true; + } + + if (!stopped) + throw new System.TimeoutException("Failed to stop sppsvc"); + + Logger.WriteLine("sppsvc stopped successfully."); + } + + public static string GetPSPath(PSVersion version) + { + switch (version) + { + case PSVersion.Win7: + return Directory.GetFiles( + Environment.GetFolderPath(Environment.SpecialFolder.System), + "7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-8115-601632D005A0") + .FirstOrDefault() ?? ""; + case PSVersion.Win8Early: + case PSVersion.WinBlue: + case PSVersion.Win8: + case PSVersion.WinModern: + return Path.Combine( + Environment.ExpandEnvironmentVariables( + (string)Registry.GetValue( + @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", + "TokenStore", + string.Empty + ) + ), + "data.dat" + ); + default: + return ""; + } + } + + public static string GetTokensPath(PSVersion version) + { + switch (version) + { + case PSVersion.Win7: + return Path.Combine( + Environment.ExpandEnvironmentVariables("%WINDIR%"), + @"ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat" + ); + case PSVersion.Win8Early: + case PSVersion.WinBlue: + case PSVersion.Win8: + case PSVersion.WinModern: + return Path.Combine( + Environment.ExpandEnvironmentVariables( + (string)Registry.GetValue( + @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", + "TokenStore", + string.Empty + ) + ), + "tokens.dat" + ); + default: + return ""; + } + } + + public static IPhysicalStore GetStore(PSVersion version, bool production) + { + string psPath; + + try + { + psPath = GetPSPath(version); + } + catch + { + throw new FileNotFoundException("Failed to get path of physical store."); + } + + if (string.IsNullOrEmpty(psPath) || !File.Exists(psPath)) + { + throw new FileNotFoundException(string.Format("Physical store not found at expected path {0}.", psPath)); + } + + if (version == PSVersion.Vista) + { + throw new NotSupportedException("Physical store editing is not supported for Windows Vista."); + } + + return version == PSVersion.Win7 ? new PhysicalStoreWin7(psPath, production) : (IPhysicalStore)new PhysicalStoreModern(psPath, production, version); + } + + public static ITokenStore GetTokenStore(PSVersion version) + { + string tokPath; + + try + { + tokPath = GetTokensPath(version); + } + catch + { + throw new FileNotFoundException("Failed to get path of physical store."); + } + + if (string.IsNullOrEmpty(tokPath) || !File.Exists(tokPath)) + { + throw new FileNotFoundException(string.Format("Token store not found at expected path {0}.", tokPath)); + } + + return new TokenStoreModern(tokPath); + } + + public static string GetArchitecture() + { + string arch = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE", EnvironmentVariableTarget.Machine).ToUpperInvariant(); + return arch == "AMD64" ? "X64" : arch; + } + + public static PSVersion DetectVersion() + { + int build = Environment.OSVersion.Version.Build; + + if (build >= 9600) return PSVersion.WinModern; + if (build >= 6000 && build <= 6003) return PSVersion.Vista; + if (build >= 7600 && build <= 7602) return PSVersion.Win7; + if (build == 9200) return PSVersion.Win8; + + throw new NotSupportedException("Unable to auto-detect version info, please specify one manually using the /ver argument."); + } + + public static bool DetectCurrentKey() + { + SLApi.RefreshLicenseStatus(); + + using (RegistryKey wpaKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\WPA")) + { + foreach (string subKey in wpaKey.GetSubKeyNames()) + { + if (subKey.StartsWith("8DEC0AF1") && subKey.EndsWith("-1")) + { + return subKey.Contains("P"); + } + } + } + + throw new FileNotFoundException("Failed to autodetect key type, specify physical store key with /prod or /test arguments."); + } + + public static void DumpStore(PSVersion version, bool production, string filePath, string encrFilePath) + { + if (encrFilePath == null) + { + encrFilePath = GetPSPath(version); + } + + if (string.IsNullOrEmpty(encrFilePath) || !File.Exists(encrFilePath)) + { + throw new FileNotFoundException("Store does not exist at expected path '" + encrFilePath + "'."); + } + + KillSPP(); + + using (FileStream fs = File.Open(encrFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)) + { + byte[] encrData = fs.ReadAllBytes(); + File.WriteAllBytes(filePath, PhysStoreCrypto.DecryptPhysicalStore(encrData, production)); + } + + Logger.WriteLine("Store dumped successfully to '" + filePath + "'."); + } + + public static void LoadStore(PSVersion version, bool production, string filePath) + { + if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) + { + throw new FileNotFoundException("Store file '" + filePath + "' does not exist."); + } + + KillSPP(); + + using (IPhysicalStore store = GetStore(version, production)) + { + store.WriteRaw(File.ReadAllBytes(filePath)); + } + + Logger.WriteLine("Loaded store file succesfully."); + } + } + + public static class Logger + { + public static bool HideOutput = false; + + public static void WriteLine(string line) + { + if (!HideOutput) Console.WriteLine(line); + } + } +} + + +// SPP/PKeyConfig.cs +namespace LibTSforge.SPP +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Text; + using System.Xml; + + public enum PKeyAlgorithm + { + PKEY2005, + PKEY2009 + } + + public class KeyRange + { + public int Start; + public int End; + public string EulaType; + public string PartNumber; + public bool Valid; + + public bool Contains(int n) + { + return Start <= n && End <= n; + } + } + + public class ProductConfig + { + public int GroupId; + public string Edition; + public string Description; + public string Channel; + public bool Randomized; + public PKeyAlgorithm Algorithm; + public List Ranges; + public Guid ActivationId; + + private List GetPkeyRanges() + { + if (Ranges.Count == 0) + { + throw new ArgumentException("No key ranges."); + } + + if (Algorithm == PKeyAlgorithm.PKEY2005) + { + return Ranges; + } + + List FilteredRanges = Ranges.Where(r => !r.EulaType.Contains("WAU")).ToList(); + + if (FilteredRanges.Count == 0) + { + throw new NotSupportedException("Specified Activation ID is usable only for Windows Anytime Upgrade. Please use a non-WAU Activation ID instead."); + } + + return FilteredRanges; + } + + public ProductKey GetRandomKey() + { + List KeyRanges = GetPkeyRanges(); + Random rnd = new Random(); + + KeyRange range = KeyRanges[rnd.Next(KeyRanges.Count)]; + int serial = rnd.Next(range.Start, range.End); + + return new ProductKey(serial, 0, false, Algorithm, this, range); + } + } + + public class PKeyConfig + { + public Dictionary Products = new Dictionary(); + private List loadedPkeyConfigs = new List(); + + public void LoadConfig(Guid actId) + { + string pkcData; + Guid pkcFileId = SLApi.GetPkeyConfigFileId(actId); + + if (loadedPkeyConfigs.Contains(pkcFileId)) return; + + string licConts = SLApi.GetLicenseContents(pkcFileId); + + using (TextReader tr = new StringReader(licConts)) + { + XmlDocument lic = new XmlDocument(); + lic.Load(tr); + + XmlNamespaceManager nsmgr = new XmlNamespaceManager(lic.NameTable); + nsmgr.AddNamespace("rg", "urn:mpeg:mpeg21:2003:01-REL-R-NS"); + nsmgr.AddNamespace("r", "urn:mpeg:mpeg21:2003:01-REL-R-NS"); + nsmgr.AddNamespace("tm", "http://www.microsoft.com/DRM/XrML2/TM/v2"); + + XmlNode root = lic.DocumentElement; + XmlNode pkcDataNode = root.SelectSingleNode("/rg:licenseGroup/r:license/r:otherInfo/tm:infoTables/tm:infoList/tm:infoBin[@name=\"pkeyConfigData\"]", nsmgr); + pkcData = Encoding.UTF8.GetString(Convert.FromBase64String(pkcDataNode.InnerText)); + } + + using (TextReader tr = new StringReader(pkcData)) + { + XmlDocument lic = new XmlDocument(); + lic.Load(tr); + + XmlNamespaceManager nsmgr = new XmlNamespaceManager(lic.NameTable); + nsmgr.AddNamespace("p", "http://www.microsoft.com/DRM/PKEY/Configuration/2.0"); + XmlNodeList configNodes = lic.SelectNodes("//p:ProductKeyConfiguration/p:Configurations/p:Configuration", nsmgr); + XmlNodeList rangeNodes = lic.SelectNodes("//p:ProductKeyConfiguration/p:KeyRanges/p:KeyRange", nsmgr); + XmlNodeList pubKeyNodes = lic.SelectNodes("//p:ProductKeyConfiguration/p:PublicKeys/p:PublicKey", nsmgr); + + Dictionary algorithms = new Dictionary(); + Dictionary> ranges = new Dictionary>(); + + Dictionary algoConv = new Dictionary + { + { "msft:rm/algorithm/pkey/2005", PKeyAlgorithm.PKEY2005 }, + { "msft:rm/algorithm/pkey/2009", PKeyAlgorithm.PKEY2009 } + }; + + foreach (XmlNode pubKeyNode in pubKeyNodes) + { + int group = int.Parse(pubKeyNode.SelectSingleNode("./p:GroupId", nsmgr).InnerText); + algorithms[group] = algoConv[pubKeyNode.SelectSingleNode("./p:AlgorithmId", nsmgr).InnerText]; + } + + foreach (XmlNode rangeNode in rangeNodes) + { + string refActIdStr = rangeNode.SelectSingleNode("./p:RefActConfigId", nsmgr).InnerText; + + if (!ranges.ContainsKey(refActIdStr)) + { + ranges[refActIdStr] = new List(); + } + + KeyRange keyRange = new KeyRange(); + keyRange.Start = int.Parse(rangeNode.SelectSingleNode("./p:Start", nsmgr).InnerText); + keyRange.End = int.Parse(rangeNode.SelectSingleNode("./p:End", nsmgr).InnerText); + keyRange.EulaType = rangeNode.SelectSingleNode("./p:EulaType", nsmgr).InnerText; + keyRange.PartNumber = rangeNode.SelectSingleNode("./p:PartNumber", nsmgr).InnerText; + keyRange.Valid = rangeNode.SelectSingleNode("./p:IsValid", nsmgr).InnerText.ToLower() == "true"; + + ranges[refActIdStr].Add(keyRange); + } + + foreach (XmlNode configNode in configNodes) + { + string refActIdStr = configNode.SelectSingleNode("./p:ActConfigId", nsmgr).InnerText; + Guid refActId = new Guid(refActIdStr); + int group = int.Parse(configNode.SelectSingleNode("./p:RefGroupId", nsmgr).InnerText); + List keyRanges = ranges[refActIdStr]; + + if (keyRanges.Count > 0 && !Products.ContainsKey(refActId)) + { + ProductConfig productConfig = new ProductConfig(); + productConfig.GroupId = group; + productConfig.Edition = configNode.SelectSingleNode("./p:EditionId", nsmgr).InnerText; + productConfig.Description = configNode.SelectSingleNode("./p:ProductDescription", nsmgr).InnerText; + productConfig.Channel = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText; + productConfig.Randomized = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText.ToLower() == "true"; + productConfig.Algorithm = algorithms[group]; + productConfig.Ranges = keyRanges; + productConfig.ActivationId = refActId; + + Products[refActId] = productConfig; + } + } + } + + loadedPkeyConfigs.Add(pkcFileId); + } + + public ProductConfig MatchParams(int group, int serial) + { + foreach (ProductConfig config in Products.Values) + { + if (config.GroupId == group) + { + foreach (KeyRange range in config.Ranges) + { + if (range.Contains(serial)) + { + return config; + } + } + } + } + + throw new FileNotFoundException("Failed to find product matching supplied product key parameters."); + } + + public void LoadAllConfigs(Guid appId) + { + foreach (Guid actId in SLApi.GetActivationIds(appId)) + { + try + { + LoadConfig(actId); + } + catch (ArgumentException) + { + + } + } + } + + public PKeyConfig() + { + + } + } +} + + +// SPP/ProductKey.cs +namespace LibTSforge.SPP +{ + using System; + using System.IO; + using System.Linq; + using LibTSforge.Crypto; + using LibTSforge.PhysicalStore; + + public class ProductKey + { + private static readonly string ALPHABET = "BCDFGHJKMPQRTVWXY2346789"; + + private readonly ulong klow; + private readonly ulong khigh; + + public int Group; + public int Serial; + public ulong Security; + public bool Upgrade; + public PKeyAlgorithm Algorithm; + public string EulaType; + public string PartNumber; + public string Edition; + public string Channel; + public Guid ActivationId; + + private string mpc; + private string pid2; + + public byte[] KeyBytes + { + get { return BitConverter.GetBytes(klow).Concat(BitConverter.GetBytes(khigh)).ToArray(); } + } + + public ProductKey(int serial, ulong security, bool upgrade, PKeyAlgorithm algorithm, ProductConfig config, KeyRange range) + { + Group = config.GroupId; + Serial = serial; + Security = security; + Upgrade = upgrade; + Algorithm = algorithm; + EulaType = range.EulaType; + PartNumber = range.PartNumber.Split(':', ';')[0]; + Edition = config.Edition; + Channel = config.Channel; + ActivationId = config.ActivationId; + + klow = ((security & 0x3fff) << 50 | ((ulong)serial & 0x3fffffff) << 20 | ((ulong)Group & 0xfffff)); + khigh = ((upgrade ? (ulong)1 : 0) << 49 | ((security >> 14) & 0x7fffffffff)); + + uint checksum = Utils.CRC32(KeyBytes) & 0x3ff; + + khigh |= ((ulong)checksum << 39); + } + + public string GetAlgoUri() + { + return "msft:rm/algorithm/pkey/" + (Algorithm == PKeyAlgorithm.PKEY2005 ? "2005" : (Algorithm == PKeyAlgorithm.PKEY2009 ? "2009" : "Unknown")); + } + + public Guid GetPkeyId() + { + VariableBag pkb = new VariableBag(); + pkb.Blocks.AddRange(new CRCBlock[] + { + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyBindingProductKey", + ValueAsStr = ToString() + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppPkeyBindingMiscData", + Value = new byte[] { } + }, + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyBindingAlgorithm", + ValueAsStr = GetAlgoUri() + } + }); + + return new Guid(CryptoUtils.SHA256Hash(pkb.Serialize()).Take(16).ToArray()); + } + + public string GetDefaultMPC() + { + int build = Environment.OSVersion.Version.Build; + string defaultMPC = build >= 10240 ? "03612" : + build >= 9600 ? "06401" : + build >= 9200 ? "05426" : + "55041"; + return defaultMPC; + } + + public string GetMPC() + { + if (mpc != null) + { + return mpc; + } + + mpc = GetDefaultMPC(); + + // setup.cfg doesn't exist in Windows 8+ + string setupcfg = string.Format("{0}\\oobe\\{1}", Environment.SystemDirectory, "setup.cfg"); + + if (!File.Exists(setupcfg) || Edition.Contains(";")) + { + return mpc; + } + + string mpcKey = string.Format("{0}.{1}=", Utils.GetArchitecture(), Edition); + string localMPC = File.ReadAllLines(setupcfg).FirstOrDefault(line => line.Contains(mpcKey)); + if (localMPC != null) + { + mpc = localMPC.Split('=')[1].Trim(); + } + + return mpc; + } + + public string GetPid2() + { + if (pid2 != null) + { + return pid2; + } + + pid2 = ""; + + if (Algorithm == PKeyAlgorithm.PKEY2005) + { + string mpc = GetMPC(); + string serialHigh; + int serialLow; + int lastPart; + + if (EulaType == "OEM") + { + serialHigh = "OEM"; + serialLow = ((Group / 2) % 100) * 10000 + (Serial / 100000); + lastPart = Serial % 100000; + } + else + { + serialHigh = (Serial / 1000000).ToString("D3"); + serialLow = Serial % 1000000; + lastPart = ((Group / 2) % 100) * 1000 + new Random().Next(1000); + } + + int checksum = 0; + + foreach (char c in serialLow.ToString()) + { + checksum += int.Parse(c.ToString()); + } + checksum = 7 - (checksum % 7); + + pid2 = string.Format("{0}-{1}-{2:D6}{3}-{4:D5}", mpc, serialHigh, serialLow, checksum, lastPart); + } + + return pid2; + } + + public byte[] GetPid3() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(0xA4); + writer.Write(0x3); + writer.WriteFixedString(GetPid2(), 24); + writer.Write(Group); + writer.WriteFixedString(PartNumber, 16); + writer.WritePadding(0x6C); + byte[] data = writer.GetBytes(); + byte[] crc = BitConverter.GetBytes(~Utils.CRC32(data.Reverse().ToArray())).Reverse().ToArray(); + writer.Write(crc); + + return writer.GetBytes(); + } + + public byte[] GetPid4() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(0x4F8); + writer.Write(0x4); + writer.WriteFixedString16(GetExtendedPid(), 0x80); + writer.WriteFixedString16(ActivationId.ToString(), 0x80); + writer.WritePadding(0x10); + writer.WriteFixedString16(Edition, 0x208); + writer.Write(Upgrade ? (ulong)1 : 0); + writer.WritePadding(0x50); + writer.WriteFixedString16(PartNumber, 0x80); + writer.WriteFixedString16(Channel, 0x80); + writer.WriteFixedString16(EulaType, 0x80); + + return writer.GetBytes(); + } + + public string GetExtendedPid() + { + string mpc = GetMPC(); + int serialHigh = Serial / 1000000; + int serialLow = Serial % 1000000; + int licenseType; + uint lcid = Utils.GetSystemDefaultLCID(); + int build = Environment.OSVersion.Version.Build; + int dayOfYear = DateTime.Now.DayOfYear; + int year = DateTime.Now.Year; + + switch (EulaType) + { + case "OEM": + licenseType = 2; + break; + + case "Volume": + licenseType = 3; + break; + + default: + licenseType = 0; + break; + } + + return string.Format( + "{0}-{1:D5}-{2:D3}-{3:D6}-{4:D2}-{5:D4}-{6:D4}.0000-{7:D3}{8:D4}", + mpc, + Group, + serialHigh, + serialLow, + licenseType, + lcid, + build, + dayOfYear, + year + ); + } + + public byte[] GetPhoneData(PSVersion version) + { + if (version == PSVersion.Win7) + { + Random rnd = new Random(Group * 1000000000 + Serial); + byte[] data = new byte[8]; + rnd.NextBytes(data); + return data; + } + + int serialHigh = Serial / 1000000; + int serialLow = Serial % 1000000; + + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(new Guid("B8731595-A2F6-430B-A799-FBFFB81A8D73").ToByteArray()); + writer.Write(Group); + writer.Write(serialHigh); + writer.Write(serialLow); + writer.Write(Upgrade ? 1 : 0); + writer.Write(Security); + + return writer.GetBytes(); + } + + public override string ToString() + { + string keyStr = ""; + Random rnd = new Random(Group * 1000000000 + Serial); + + if (Algorithm == PKeyAlgorithm.PKEY2005) + { + keyStr = "H4X3DH4X3DH4X3DH4X3D"; + + for (int i = 0; i < 5; i++) + { + keyStr += ALPHABET[rnd.Next(24)]; + } + } + else if (Algorithm == PKeyAlgorithm.PKEY2009) + { + int last = 0; + byte[] bKey = KeyBytes; + + for (int i = 24; i >= 0; i--) + { + int current = 0; + + for (int j = 14; j >= 0; j--) + { + current *= 0x100; + current += bKey[j]; + bKey[j] = (byte)(current / 24); + current %= 24; + last = current; + } + + keyStr = ALPHABET[current] + keyStr; + } + + keyStr = keyStr.Substring(1, last) + "N" + keyStr.Substring(last + 1, keyStr.Length - last - 1); + } + + for (int i = 5; i < keyStr.Length; i += 6) + { + keyStr = keyStr.Insert(i, "-"); + } + + return keyStr; + } + } +} + + +// SPP/SLAPI.cs +namespace LibTSforge.SPP +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Runtime.InteropServices; + using System.Text; + + public static class SLApi + { + private enum SLIDTYPE + { + SL_ID_APPLICATION, + SL_ID_PRODUCT_SKU, + SL_ID_LICENSE_FILE, + SL_ID_LICENSE, + SL_ID_PKEY, + SL_ID_ALL_LICENSES, + SL_ID_ALL_LICENSE_FILES, + SL_ID_STORE_TOKEN, + SL_ID_LAST + } + + private enum SLDATATYPE + { + SL_DATA_NONE, + SL_DATA_SZ, + SL_DATA_DWORD, + SL_DATA_BINARY, + SL_DATA_MULTI_SZ, + SL_DATA_SUM + } + + [StructLayout(LayoutKind.Sequential)] + private struct SL_LICENSING_STATUS + { + public Guid SkuId; + public uint eStatus; + public uint dwGraceTime; + public uint dwTotalGraceDays; + public uint hrReason; + public ulong qwValidityExpiration; + } + + public static readonly Guid WINDOWS_APP_ID = new Guid("55c92734-d682-4d71-983e-d6ec3f16059f"); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + private static extern void SLOpen(out IntPtr hSLC); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + private static extern void SLClose(IntPtr hSLC); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetWindowsInformationDWORD(string ValueName, ref int Value); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLInstallProofOfPurchase(IntPtr hSLC, string pwszPKeyAlgorithm, string pwszPKeyString, uint cbPKeySpecificData, byte[] pbPKeySpecificData, ref Guid PKeyId); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLUninstallProofOfPurchase(IntPtr hSLC, ref Guid PKeyId); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetPKeyInformation(IntPtr hSLC, ref Guid pPKeyId, string pwszValueName, out SLDATATYPE peDataType, out uint pcbValue, out IntPtr ppbValue); + + [DllImport("sppcext.dll", CharSet = CharSet.Unicode)] + private static extern uint SLActivateProduct(IntPtr hSLC, ref Guid pProductSkuId, byte[] cbAppSpecificData, byte[] pvAppSpecificData, byte[] pActivationInfo, string pwszProxyServer, ushort wProxyPort); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGenerateOfflineInstallationId(IntPtr hSLC, ref Guid pProductSkuId, ref string ppwszInstallationId); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLDepositOfflineConfirmationId(IntPtr hSLC, ref Guid pProductSkuId, string pwszInstallationId, string pwszConfirmationId); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetSLIDList(IntPtr hSLC, SLIDTYPE eQueryIdType, ref Guid pQueryId, SLIDTYPE eReturnIdType, out uint pnReturnIds, out IntPtr ppReturnIds); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + private static extern void SLGetLicensingStatusInformation(IntPtr hSLC, ref Guid pAppID, IntPtr pProductSkuId, string pwszRightName, out uint pnStatusCount, out IntPtr ppLicensingStatus); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetInstalledProductKeyIds(IntPtr hSLC, ref Guid pProductSkuId, out uint pnProductKeyIds, out IntPtr ppProductKeyIds); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLConsumeWindowsRight(uint unknown); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetProductSkuInformation(IntPtr hSLC, ref Guid pProductSkuId, string pwszValueName, out SLDATATYPE peDataType, out uint pcbValue, out IntPtr ppbValue); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetProductSkuInformation(IntPtr hSLC, ref Guid pProductSkuId, string pwszValueName, IntPtr peDataType, out uint pcbValue, out IntPtr ppbValue); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetLicense(IntPtr hSLC, ref Guid pLicenseFileId, out uint pcbLicenseFile, out IntPtr ppbLicenseFile); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLSetCurrentProductKey(IntPtr hSLC, ref Guid pProductSkuId, ref Guid pProductKeyId); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLFireEvent(IntPtr hSLC, string pwszEventId, ref Guid pApplicationId); + + public class SLContext : IDisposable + { + public readonly IntPtr Handle; + + public SLContext() + { + SLOpen(out Handle); + } + + public void Dispose() + { + SLClose(Handle); + GC.SuppressFinalize(this); + } + + ~SLContext() + { + Dispose(); + } + } + + public static Guid GetDefaultActivationID(Guid appId, bool includeActivated) + { + using (SLContext sl = new SLContext()) + { + uint count; + IntPtr pLicStat; + + SLGetLicensingStatusInformation(sl.Handle, ref appId, IntPtr.Zero, null, out count, out pLicStat); + + unsafe + { + SL_LICENSING_STATUS* licensingStatuses = (SL_LICENSING_STATUS*)pLicStat; + for (int i = 0; i < count; i++) + { + SL_LICENSING_STATUS slStatus = licensingStatuses[i]; + + Guid actId = slStatus.SkuId; + if (GetInstalledPkeyID(actId) == Guid.Empty) continue; + if (IsAddon(actId)) continue; + if (!includeActivated && (slStatus.eStatus == 1)) continue; + + return actId; + } + } + + return Guid.Empty; + } + } + + public static string GetInstallationID(Guid actId) + { + using (SLContext sl = new SLContext()) + { + string installationId = null; + return SLGenerateOfflineInstallationId(sl.Handle, ref actId, ref installationId) == 0 ? installationId : null; + } + } + + public static Guid GetInstalledPkeyID(Guid actId) + { + using (SLContext sl = new SLContext()) + { + uint status; + uint count; + IntPtr pProductKeyIds; + + status = SLGetInstalledProductKeyIds(sl.Handle, ref actId, out count, out pProductKeyIds); + + if (status != 0 || count == 0) + { + return Guid.Empty; + } + + unsafe { return *(Guid*)pProductKeyIds; } + } + } + + public static uint DepositConfirmationID(Guid actId, string installationId, string confirmationId) + { + using (SLContext sl = new SLContext()) + { + return SLDepositOfflineConfirmationId(sl.Handle, ref actId, installationId, confirmationId); + } + } + + public static void RefreshLicenseStatus() + { + SLConsumeWindowsRight(0); + } + + public static bool RefreshTrustedTime(Guid actId) + { + using (SLContext sl = new SLContext()) + { + SLDATATYPE type; + uint count; + IntPtr ppbValue; + + uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "TrustedTime", out type, out count, out ppbValue); + return (int)status >= 0 && status != 0xC004F012; + } + } + + public static void FireStateChangedEvent(Guid appId) + { + using (SLContext sl = new SLContext()) + { + SLFireEvent(sl.Handle, "msft:rm/event/licensingstatechanged", ref appId); + } + } + + public static Guid GetAppId(Guid actId) + { + using (SLContext sl = new SLContext()) + { + uint status; + uint count; + IntPtr pAppIds; + + status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_APPLICATION, out count, out pAppIds); + + if (status != 0 || count == 0) + { + return Guid.Empty; + } + + unsafe { return *(Guid*)pAppIds; } + } + } + + public static bool IsAddon(Guid actId) + { + using (SLContext sl = new SLContext()) + { + uint count; + SLDATATYPE type; + IntPtr ppbValue; + + uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "DependsOn", out type, out count, out ppbValue); + return (int)status >= 0 && status != 0xC004F012; + } + } + + public static Guid GetLicenseFileId(Guid licId) + { + using (SLContext sl = new SLContext()) + { + uint status; + uint count; + IntPtr ppReturnLics; + + status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_LICENSE, ref licId, SLIDTYPE.SL_ID_LICENSE_FILE, out count, out ppReturnLics); + + if (status != 0 || count == 0) + { + return Guid.Empty; + } + + unsafe { return *(Guid*)ppReturnLics; } + } + } + + public static Guid GetPkeyConfigFileId(Guid actId) + { + using (SLContext sl = new SLContext()) + { + SLDATATYPE type; + uint len; + IntPtr ppReturnLics; + + uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "pkeyConfigLicenseId", out type, out len, out ppReturnLics); + + if (status != 0 || len == 0) + { + return Guid.Empty; + } + + Guid pkcId = new Guid(Marshal.PtrToStringAuto(ppReturnLics)); + return GetLicenseFileId(pkcId); + } + } + + public static string GetLicenseContents(Guid fileId) + { + if (fileId == Guid.Empty) throw new ArgumentException("License contents could not be retrieved."); + + using (SLContext sl = new SLContext()) + { + uint dataLen; + IntPtr dataPtr; + + if (SLGetLicense(sl.Handle, ref fileId, out dataLen, out dataPtr) != 0) + { + return null; + } + + byte[] data = new byte[dataLen]; + Marshal.Copy(dataPtr, data, 0, (int)dataLen); + + data = data.Skip(Array.IndexOf(data, (byte)'<')).ToArray(); + return Encoding.UTF8.GetString(data); + } + } + + public static bool IsPhoneActivatable(Guid actId) + { + using (SLContext sl = new SLContext()) + { + uint count; + SLDATATYPE type; + IntPtr ppbValue; + + uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "msft:sl/EUL/PHONE/PUBLIC", out type, out count, out ppbValue); + return status >= 0 && status != 0xC004F012; + } + } + + public static string GetPKeyChannel(Guid pkeyId) + { + using (SLContext sl = new SLContext()) + { + SLDATATYPE type; + uint len; + IntPtr ppbValue; + + uint status = SLGetPKeyInformation(sl.Handle, ref pkeyId, "Channel", out type, out len, out ppbValue); + + if (status != 0 || len == 0) + { + return null; + } + + return Marshal.PtrToStringAuto(ppbValue); + } + } + + public static string GetMetaStr(Guid actId, string value) + { + using (SLContext sl = new SLContext()) + { + uint len; + SLDATATYPE type; + IntPtr ppbValue; + + uint status = SLGetProductSkuInformation(sl.Handle, ref actId, value, out type, out len, out ppbValue); + + if (status != 0 || len == 0 || type != SLDATATYPE.SL_DATA_SZ) + { + return null; + } + + return Marshal.PtrToStringAuto(ppbValue); + } + } + + public static List GetActivationIds(Guid appId) + { + using (SLContext sl = new SLContext()) + { + uint count; + IntPtr pLicStat; + + SLGetLicensingStatusInformation(sl.Handle, ref appId, IntPtr.Zero, null, out count, out pLicStat); + + List result = new List(); + + unsafe + { + SL_LICENSING_STATUS* licensingStatuses = (SL_LICENSING_STATUS*)pLicStat; + for (int i = 0; i < count; i++) + { + result.Add(licensingStatuses[i].SkuId); + } + } + + return result; + } + } + + public static uint SetCurrentProductKey(Guid actId, Guid pkeyId) + { + using (SLContext sl = new SLContext()) + { + return SLSetCurrentProductKey(sl.Handle, ref actId, ref pkeyId); + } + } + + public static uint InstallProductKey(ProductKey pkey) + { + using (SLContext sl = new SLContext()) + { + Guid pkeyId = Guid.Empty; + return SLInstallProofOfPurchase(sl.Handle, pkey.GetAlgoUri(), pkey.ToString(), 0, null, ref pkeyId); + } + } + + public static uint UninstallProductKey(Guid pkeyId) + { + using (SLContext sl = new SLContext()) + { + return SLUninstallProofOfPurchase(sl.Handle, ref pkeyId); + } + } + + public static void UninstallAllProductKeys(Guid appId) + { + foreach (Guid actId in GetActivationIds(appId)) + { + Guid pkeyId = GetInstalledPkeyID(actId); + if (pkeyId == Guid.Empty) continue; + if (IsAddon(actId)) continue; + UninstallProductKey(pkeyId); + } + } + } +} + + +// Crypto/CryptoUtils.cs +namespace LibTSforge.Crypto +{ + using System; + using System.Linq; + using System.Security.Cryptography; + + public static class CryptoUtils + { + public static byte[] GenerateRandomKey(int len) + { + byte[] rand = new byte[len]; + Random r = new Random(); + r.NextBytes(rand); + + return rand; + } + + public static byte[] AESEncrypt(byte[] data, byte[] key) + { + using (Aes aes = Aes.Create()) + { + aes.Key = key; + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.PKCS7; + + ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, Enumerable.Repeat((byte)0, 16).ToArray()); + byte[] encryptedData = encryptor.TransformFinalBlock(data, 0, data.Length); + return encryptedData; + } + } + + public static byte[] AESDecrypt(byte[] data, byte[] key) + { + using (Aes aes = Aes.Create()) + { + aes.Key = key; + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.PKCS7; + + ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, Enumerable.Repeat((byte)0, 16).ToArray()); + byte[] decryptedData = decryptor.TransformFinalBlock(data, 0, data.Length); + return decryptedData; + } + } + + public static byte[] RSADecrypt(byte[] rsaKey, byte[] data) + { + + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + return rsa.Decrypt(data, false); + } + } + + public static byte[] RSAEncrypt(byte[] rsaKey, byte[] data) + { + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + return rsa.Encrypt(data, false); + } + } + + public static byte[] RSASign(byte[] rsaKey, byte[] data) + { + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(rsa); + formatter.SetHashAlgorithm("SHA1"); + + byte[] hash; + using (SHA1 sha1 = SHA1.Create()) + { + hash = sha1.ComputeHash(data); + } + + return formatter.CreateSignature(hash); + } + } + + public static bool RSAVerifySignature(byte[] rsaKey, byte[] data, byte[] signature) + { + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(rsa); + deformatter.SetHashAlgorithm("SHA1"); + + byte[] hash; + using (SHA1 sha1 = SHA1.Create()) + { + hash = sha1.ComputeHash(data); + } + + return deformatter.VerifySignature(hash, signature); + } + } + + public static byte[] HMACSign(byte[] key, byte[] data) + { + HMACSHA1 hmac = new HMACSHA1(key); + return hmac.ComputeHash(data); + } + + public static bool HMACVerify(byte[] key, byte[] data, byte[] signature) + { + HMACSHA1 hmac = new HMACSHA1(key); + return Enumerable.SequenceEqual(signature, HMACSign(key, data)); + } + + public static byte[] SHA256Hash(byte[] data) + { + using (SHA256 sha256 = SHA256.Create()) + { + return sha256.ComputeHash(data); + } + } + } +} + + +// Crypto/Keys.cs +namespace LibTSforge.Crypto +{ + public static class Keys + { + public static readonly byte[] PRODUCTION = { + 0x07, 0x02, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x52, 0x53, 0x41, 0x32, 0x00, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x29, 0x87, 0xBA, 0x3F, 0x52, 0x90, 0x57, 0xD8, 0x12, 0x26, 0x6B, 0x38, + 0xB2, 0x3B, 0xF9, 0x67, 0x08, 0x4F, 0xDD, 0x8B, 0xF5, 0xE3, 0x11, 0xB8, 0x61, 0x3A, 0x33, 0x42, + 0x51, 0x65, 0x05, 0x86, 0x1E, 0x00, 0x41, 0xDE, 0xC5, 0xDD, 0x44, 0x60, 0x56, 0x3D, 0x14, 0x39, + 0xB7, 0x43, 0x65, 0xE9, 0xF7, 0x2B, 0xA5, 0xF0, 0xA3, 0x65, 0x68, 0xE9, 0xE4, 0x8B, 0x5C, 0x03, + 0x2D, 0x36, 0xFE, 0x28, 0x4C, 0xD1, 0x3C, 0x3D, 0xC1, 0x90, 0x75, 0xF9, 0x6E, 0x02, 0xE0, 0x58, + 0x97, 0x6A, 0xCA, 0x80, 0x02, 0x42, 0x3F, 0x6C, 0x15, 0x85, 0x4D, 0x83, 0x23, 0x6A, 0x95, 0x9E, + 0x38, 0x52, 0x59, 0x38, 0x6A, 0x99, 0xF0, 0xB5, 0xCD, 0x53, 0x7E, 0x08, 0x7C, 0xB5, 0x51, 0xD3, + 0x8F, 0xA3, 0x0D, 0xA0, 0xFA, 0x8D, 0x87, 0x3C, 0xFC, 0x59, 0x21, 0xD8, 0x2E, 0xD9, 0x97, 0x8B, + 0x40, 0x60, 0xB1, 0xD7, 0x2B, 0x0A, 0x6E, 0x60, 0xB5, 0x50, 0xCC, 0x3C, 0xB1, 0x57, 0xE4, 0xB7, + 0xDC, 0x5A, 0x4D, 0xE1, 0x5C, 0xE0, 0x94, 0x4C, 0x5E, 0x28, 0xFF, 0xFA, 0x80, 0x6A, 0x13, 0x53, + 0x52, 0xDB, 0xF3, 0x04, 0x92, 0x43, 0x38, 0xB9, 0x1B, 0xD9, 0x85, 0x54, 0x7B, 0x14, 0xC7, 0x89, + 0x16, 0x8A, 0x4B, 0x82, 0xA1, 0x08, 0x02, 0x99, 0x23, 0x48, 0xDD, 0x75, 0x9C, 0xC8, 0xC1, 0xCE, + 0xB0, 0xD7, 0x1B, 0xD8, 0xFB, 0x2D, 0xA7, 0x2E, 0x47, 0xA7, 0x18, 0x4B, 0xF6, 0x29, 0x69, 0x44, + 0x30, 0x33, 0xBA, 0xA7, 0x1F, 0xCE, 0x96, 0x9E, 0x40, 0xE1, 0x43, 0xF0, 0xE0, 0x0D, 0x0A, 0x32, + 0xB4, 0xEE, 0xA1, 0xC3, 0x5E, 0x9B, 0xC7, 0x7F, 0xF5, 0x9D, 0xD8, 0xF2, 0x0F, 0xD9, 0x8F, 0xAD, + 0x75, 0x0A, 0x00, 0xD5, 0x25, 0x43, 0xF7, 0xAE, 0x51, 0x7F, 0xB7, 0xDE, 0xB7, 0xAD, 0xFB, 0xCE, + 0x83, 0xE1, 0x81, 0xFF, 0xDD, 0xA2, 0x77, 0xFE, 0xEB, 0x27, 0x1F, 0x10, 0xFA, 0x82, 0x37, 0xF4, + 0x7E, 0xCC, 0xE2, 0xA1, 0x58, 0xC8, 0xAF, 0x1D, 0x1A, 0x81, 0x31, 0x6E, 0xF4, 0x8B, 0x63, 0x34, + 0xF3, 0x05, 0x0F, 0xE1, 0xCC, 0x15, 0xDC, 0xA4, 0x28, 0x7A, 0x9E, 0xEB, 0x62, 0xD8, 0xD8, 0x8C, + 0x85, 0xD7, 0x07, 0x87, 0x90, 0x2F, 0xF7, 0x1C, 0x56, 0x85, 0x2F, 0xEF, 0x32, 0x37, 0x07, 0xAB, + 0xB0, 0xE6, 0xB5, 0x02, 0x19, 0x35, 0xAF, 0xDB, 0xD4, 0xA2, 0x9C, 0x36, 0x80, 0xC6, 0xDC, 0x82, + 0x08, 0xE0, 0xC0, 0x5F, 0x3C, 0x59, 0xAA, 0x4E, 0x26, 0x03, 0x29, 0xB3, 0x62, 0x58, 0x41, 0x59, + 0x3A, 0x37, 0x43, 0x35, 0xE3, 0x9F, 0x34, 0xE2, 0xA1, 0x04, 0x97, 0x12, 0x9D, 0x8C, 0xAD, 0xF7, + 0xFB, 0x8C, 0xA1, 0xA2, 0xE9, 0xE4, 0xEF, 0xD9, 0xC5, 0xE5, 0xDF, 0x0E, 0xBF, 0x4A, 0xE0, 0x7A, + 0x1E, 0x10, 0x50, 0x58, 0x63, 0x51, 0xE1, 0xD4, 0xFE, 0x57, 0xB0, 0x9E, 0xD7, 0xDA, 0x8C, 0xED, + 0x7D, 0x82, 0xAC, 0x2F, 0x25, 0x58, 0x0A, 0x58, 0xE6, 0xA4, 0xF4, 0x57, 0x4B, 0xA4, 0x1B, 0x65, + 0xB9, 0x4A, 0x87, 0x46, 0xEB, 0x8C, 0x0F, 0x9A, 0x48, 0x90, 0xF9, 0x9F, 0x76, 0x69, 0x03, 0x72, + 0x77, 0xEC, 0xC1, 0x42, 0x4C, 0x87, 0xDB, 0x0B, 0x3C, 0xD4, 0x74, 0xEF, 0xE5, 0x34, 0xE0, 0x32, + 0x45, 0xB0, 0xF8, 0xAB, 0xD5, 0x26, 0x21, 0xD7, 0xD2, 0x98, 0x54, 0x8F, 0x64, 0x88, 0x20, 0x2B, + 0x14, 0xE3, 0x82, 0xD5, 0x2A, 0x4B, 0x8F, 0x4E, 0x35, 0x20, 0x82, 0x7E, 0x1B, 0xFE, 0xFA, 0x2C, + 0x79, 0x6C, 0x6E, 0x66, 0x94, 0xBB, 0x0A, 0xEB, 0xBA, 0xD9, 0x70, 0x61, 0xE9, 0x47, 0xB5, 0x82, + 0xFC, 0x18, 0x3C, 0x66, 0x3A, 0x09, 0x2E, 0x1F, 0x61, 0x74, 0xCA, 0xCB, 0xF6, 0x7A, 0x52, 0x37, + 0x1D, 0xAC, 0x8D, 0x63, 0x69, 0x84, 0x8E, 0xC7, 0x70, 0x59, 0xDD, 0x2D, 0x91, 0x1E, 0xF7, 0xB1, + 0x56, 0xED, 0x7A, 0x06, 0x9D, 0x5B, 0x33, 0x15, 0xDD, 0x31, 0xD0, 0xE6, 0x16, 0x07, 0x9B, 0xA5, + 0x94, 0x06, 0x7D, 0xC1, 0xE9, 0xD6, 0xC8, 0xAF, 0xB4, 0x1E, 0x2D, 0x88, 0x06, 0xA7, 0x63, 0xB8, + 0xCF, 0xC8, 0xA2, 0x6E, 0x84, 0xB3, 0x8D, 0xE5, 0x47, 0xE6, 0x13, 0x63, 0x8E, 0xD1, 0x7F, 0xD4, + 0x81, 0x44, 0x38, 0xBF + }; + + public static readonly byte[] TEST = { + 0x07, 0x02, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x52, 0x53, 0x41, 0x32, 0x00, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x0F, 0xBE, 0x77, 0xB8, 0xDD, 0x54, 0x36, 0xDD, 0x67, 0xD4, 0x17, 0x66, + 0xC4, 0x13, 0xD1, 0x3F, 0x1E, 0x16, 0x0C, 0x16, 0x35, 0xAB, 0x6D, 0x3D, 0x34, 0x51, 0xED, 0x3F, + 0x57, 0x14, 0xB6, 0xB7, 0x08, 0xE9, 0xD9, 0x7A, 0x80, 0xB3, 0x5F, 0x9B, 0x3A, 0xFD, 0x9E, 0x37, + 0x3A, 0x53, 0x72, 0x67, 0x92, 0x60, 0xC3, 0xEF, 0xB5, 0x8E, 0x1E, 0xCF, 0x9D, 0x9C, 0xD3, 0x90, + 0xE5, 0xDD, 0xF4, 0xDB, 0xF3, 0xD6, 0x65, 0xB3, 0xC1, 0xBD, 0x69, 0xE1, 0x76, 0x95, 0xD9, 0x37, + 0xB8, 0x5E, 0xCA, 0x3D, 0x98, 0xFC, 0x50, 0x5C, 0x98, 0xAE, 0xE3, 0x7C, 0x4C, 0x27, 0xC3, 0xD0, + 0xCE, 0x78, 0x06, 0x51, 0x68, 0x23, 0xE6, 0x70, 0xF8, 0x7C, 0xAE, 0x36, 0xBE, 0x41, 0x57, 0xE2, + 0xC3, 0x2D, 0xAF, 0x21, 0xB1, 0xB3, 0x15, 0x81, 0x19, 0x26, 0x6B, 0x10, 0xB3, 0xE9, 0xD1, 0x45, + 0x21, 0x77, 0x9C, 0xF6, 0xE1, 0xDD, 0xB6, 0x78, 0x9D, 0x1D, 0x32, 0x61, 0xBC, 0x2B, 0xDB, 0x86, + 0xFB, 0x07, 0x24, 0x10, 0x19, 0x4F, 0x09, 0x6D, 0x03, 0x90, 0xD4, 0x5E, 0x30, 0x85, 0xC5, 0x58, + 0x7E, 0x5D, 0xAE, 0x9F, 0x64, 0x93, 0x04, 0x82, 0x09, 0x0E, 0x1C, 0x66, 0xA8, 0x95, 0x91, 0x51, + 0xB2, 0xED, 0x9A, 0x75, 0x04, 0x87, 0x50, 0xAC, 0xCC, 0x20, 0x06, 0x45, 0xB9, 0x7B, 0x42, 0x53, + 0x9A, 0xD1, 0x29, 0xFC, 0xEF, 0xB9, 0x47, 0x16, 0x75, 0x69, 0x05, 0x87, 0x2B, 0xCB, 0x54, 0x9C, + 0x21, 0x2D, 0x50, 0x8E, 0x12, 0xDE, 0xD3, 0x6B, 0xEC, 0x92, 0xA1, 0xB1, 0xE9, 0x4B, 0xBF, 0x6B, + 0x9A, 0x38, 0xC7, 0x13, 0xFA, 0x78, 0xA1, 0x3C, 0x1E, 0xBB, 0x38, 0x31, 0xBB, 0x0C, 0x9F, 0x70, + 0x1A, 0x31, 0x00, 0xD7, 0x5A, 0xA5, 0x84, 0x24, 0x89, 0x80, 0xF5, 0x88, 0xC2, 0x31, 0x18, 0xDC, + 0x53, 0x05, 0x5D, 0xFA, 0x81, 0xDC, 0xE1, 0xCE, 0xA4, 0xAA, 0xBA, 0x07, 0xDA, 0x28, 0x4F, 0x64, + 0x0E, 0x84, 0x9B, 0x06, 0xDE, 0xC8, 0x78, 0x66, 0x2F, 0x17, 0x25, 0xA8, 0x9C, 0x99, 0xFC, 0xBC, + 0x7D, 0x01, 0x42, 0xD7, 0x35, 0xBF, 0x19, 0xF6, 0x3F, 0x20, 0xD9, 0x98, 0x9B, 0x5D, 0xDD, 0x39, + 0xBE, 0x81, 0x00, 0x0B, 0xDE, 0x6F, 0x14, 0xCA, 0x7E, 0xF8, 0xC0, 0x26, 0xA8, 0x1D, 0xD1, 0x16, + 0x88, 0x64, 0x87, 0x36, 0x45, 0x37, 0x50, 0xDA, 0x6C, 0xEB, 0x85, 0xB5, 0x43, 0x29, 0x88, 0x6F, + 0x2F, 0xFE, 0x8D, 0x12, 0x8B, 0x72, 0xB7, 0x5A, 0xCB, 0x66, 0xC2, 0x2E, 0x1D, 0x7D, 0x42, 0xA6, + 0xF4, 0xFE, 0x26, 0x5D, 0x54, 0x9E, 0x77, 0x1D, 0x97, 0xC2, 0xF3, 0xFD, 0x60, 0xB3, 0x22, 0x88, + 0xCA, 0x27, 0x99, 0xDF, 0xC8, 0xB1, 0xD7, 0xC6, 0x54, 0xA6, 0x50, 0xB9, 0x54, 0xF5, 0xDE, 0xFE, + 0xE1, 0x81, 0xA2, 0xBE, 0x81, 0x9F, 0x48, 0xFF, 0x2F, 0xB8, 0xA4, 0xB3, 0x17, 0xD8, 0xC1, 0xB9, + 0x5D, 0x21, 0x3D, 0xA2, 0xED, 0x1C, 0x96, 0x66, 0xEE, 0x1F, 0x47, 0xCF, 0x62, 0xFA, 0xD6, 0xC1, + 0x87, 0x5B, 0xC4, 0xE5, 0xD9, 0x08, 0x38, 0x22, 0xFA, 0x21, 0xBD, 0xF2, 0x88, 0xDA, 0xE2, 0x24, + 0x25, 0x1F, 0xF1, 0x0B, 0x2D, 0xAE, 0x04, 0xBE, 0xA6, 0x7F, 0x75, 0x8C, 0xD9, 0x97, 0xE1, 0xCA, + 0x35, 0xB9, 0xFC, 0x6F, 0x01, 0x68, 0x11, 0xD3, 0x68, 0x32, 0xD0, 0xC1, 0x69, 0xA3, 0xCF, 0x9B, + 0x10, 0xE4, 0x69, 0xA7, 0xCF, 0xE1, 0xFE, 0x2A, 0x07, 0x9E, 0xC1, 0x37, 0x84, 0x68, 0xE5, 0xC5, + 0xAB, 0x25, 0xEC, 0x7D, 0x7D, 0x74, 0x6A, 0xD1, 0xD5, 0x4D, 0xD7, 0xE1, 0x7D, 0xDE, 0x30, 0x4B, + 0xE6, 0x5D, 0xCD, 0x91, 0x59, 0xF6, 0x80, 0xFD, 0xC6, 0x3C, 0xDD, 0x94, 0x7F, 0x15, 0x9D, 0xEF, + 0x2F, 0x00, 0x62, 0xD7, 0xDA, 0xB9, 0xB3, 0xD9, 0x8D, 0xE8, 0xD7, 0x3C, 0x96, 0x45, 0x5D, 0x1E, + 0x50, 0xFB, 0xAA, 0x43, 0xD3, 0x47, 0x77, 0x81, 0xE9, 0x67, 0xE4, 0xFE, 0xDF, 0x42, 0x79, 0xCB, + 0xA7, 0xAD, 0x5D, 0x48, 0xF5, 0xB7, 0x74, 0x96, 0x12, 0x23, 0x06, 0x70, 0x42, 0x68, 0x7A, 0x44, + 0xFC, 0xA0, 0x31, 0x7F, 0x68, 0xCA, 0xA2, 0x14, 0x5D, 0xA3, 0xCF, 0x42, 0x23, 0xAB, 0x47, 0xF6, + 0xB2, 0xFC, 0x6D, 0xF1 + }; + } +} + + +// Crypto/PhysStoreCrypto.cs +namespace LibTSforge.Crypto +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Text; + + public static class PhysStoreCrypto + { + public static byte[] DecryptPhysicalStore(byte[] data, bool production) + { + byte[] rsaKey = production ? Keys.PRODUCTION : Keys.TEST; + BinaryReader br = new BinaryReader(new MemoryStream(data)); + br.BaseStream.Seek(0x10, SeekOrigin.Begin); + byte[] aesKeySig = br.ReadBytes(0x80); + byte[] encAesKey = br.ReadBytes(0x80); + + if (CryptoUtils.RSAVerifySignature(rsaKey, encAesKey, aesKeySig)) + { + byte[] aesKey = CryptoUtils.RSADecrypt(rsaKey, encAesKey); + byte[] decData = CryptoUtils.AESDecrypt(br.ReadBytes((int)br.BaseStream.Length - 0x110), aesKey); + byte[] hmacKey = decData.Take(0x10).ToArray(); + byte[] hmacSig = decData.Skip(0x10).Take(0x14).ToArray(); + byte[] psData = decData.Skip(0x28).ToArray(); + + if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig)) + { + Logger.WriteLine("Warning: Failed to verify HMAC. Physical store is either corrupt or in Vista format."); + } + + return psData; + } + + throw new Exception("Failed to decrypt physical store."); + } + + public static byte[] EncryptPhysicalStore(byte[] data, bool production, PSVersion version) + { + Dictionary versionTable = new Dictionary + { + {PSVersion.Win7, 5}, + {PSVersion.Win8, 1}, + {PSVersion.WinBlue, 2}, + {PSVersion.WinModern, 3} + }; + + byte[] rsaKey = production ? Keys.PRODUCTION : Keys.TEST; + + byte[] aesKey = Encoding.UTF8.GetBytes("massgrave.dev :3"); + byte[] hmacKey = CryptoUtils.GenerateRandomKey(0x10); + + byte[] encAesKey = CryptoUtils.RSAEncrypt(rsaKey, aesKey); + byte[] aesKeySig = CryptoUtils.RSASign(rsaKey, encAesKey); + byte[] hmacSig = CryptoUtils.HMACSign(hmacKey, data); + + byte[] decData = new byte[] { }; + decData = decData.Concat(hmacKey).Concat(hmacSig).Concat(BitConverter.GetBytes(0)).Concat(data).ToArray(); + byte[] encData = CryptoUtils.AESEncrypt(decData, aesKey); + + BinaryWriter bw = new BinaryWriter(new MemoryStream()); + bw.Write(versionTable[version]); + bw.Write(Encoding.UTF8.GetBytes("UNTRUSTSTORE")); + bw.Write(aesKeySig); + bw.Write(encAesKey); + bw.Write(encData); + + return bw.GetBytes(); + } + } +} + + +// Modifiers/GenPKeyInstall.cs +namespace LibTSforge.Modifiers +{ + using System; + using System.IO; + using Microsoft.Win32; + using LibTSforge.PhysicalStore; + using LibTSforge.SPP; + using LibTSforge.TokenStore; + + public static class GenPKeyInstall + { + private static void WritePkey2005RegistryValues(PSVersion version, ProductKey pkey) + { + Logger.WriteLine("Writing registry data for Windows product key..."); + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductId", pkey.GetPid2()); + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DigitalProductId", pkey.GetPid3()); + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DigitalProductId4", pkey.GetPid4()); + + if (Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Registration", "ProductId", null) != null) + { + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Registration", "ProductId", pkey.GetPid2()); + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Registration", "DigitalProductId", pkey.GetPid3()); + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Registration", "DigitalProductId4", pkey.GetPid4()); + } + + if (pkey.Channel == "Volume:CSVLK" && version != PSVersion.Win7) + { + Registry.SetValue(@"HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", "KmsHostConfig", 1); + } + } + + public static void InstallGenPKey(PSVersion version, bool production, Guid actId) + { + if (actId == Guid.Empty) throw new ArgumentException("Activation ID must be specified for generated product key install."); + + PKeyConfig pkc = new PKeyConfig(); + + try + { + pkc.LoadConfig(actId); + } + catch (ArgumentException) + { + pkc.LoadAllConfigs(SLApi.GetAppId(actId)); + } + + ProductConfig config; + pkc.Products.TryGetValue(actId, out config); + + if (config == null) throw new ArgumentException("Activation ID " + actId + " not found in PKeyConfig."); + + ProductKey pkey = config.GetRandomKey(); + + Guid instPkeyId = SLApi.GetInstalledPkeyID(actId); + if (instPkeyId != Guid.Empty) SLApi.UninstallProductKey(instPkeyId); + + if (pkey.Algorithm == PKeyAlgorithm.PKEY2009) + { + uint status = SLApi.InstallProductKey(pkey); + Logger.WriteLine(string.Format("Installing generated product key {0} status {1:X}", pkey.ToString(), status)); + + if ((int)status < 0) + { + throw new ApplicationException("Failed to install generated product key."); + } + + Logger.WriteLine("Successfully deposited generated product key."); + return; + } + + Logger.WriteLine("Key range is PKEY2005, creating fake key data..."); + + if (pkey.Channel == "Volume:GVLK" && version == PSVersion.Win7) throw new NotSupportedException("Fake GVLK generation is not supported on Windows 7."); + + VariableBag pkb = new VariableBag(); + pkb.Blocks.AddRange(new CRCBlock[] + { + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyBindingProductKey", + ValueAsStr = pkey.ToString() + }, + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyBindingMPC", + ValueAsStr = pkey.GetMPC() + }, + new CRCBlock { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppPkeyBindingPid2", + ValueAsStr = pkey.GetPid2() + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppPkeyBindingPid3", + Value = pkey.GetPid3() + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppPkeyBindingPid4", + Value = pkey.GetPid4() + }, + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyChannelId", + ValueAsStr = pkey.Channel + }, + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyBindingEditionId", + ValueAsStr = pkey.Edition + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = (version == PSVersion.Win7) ? "SppPkeyShortAuthenticator" : "SppPkeyPhoneActivationData", + Value = pkey.GetPhoneData(version) + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppPkeyBindingMiscData", + Value = new byte[] { } + } + }); + + Guid appId = SLApi.GetAppId(actId); + string pkeyId = pkey.GetPkeyId().ToString(); + bool isAddon = SLApi.IsAddon(actId); + string currEdition = SLApi.GetMetaStr(actId, "Family"); + + if (appId == SLApi.WINDOWS_APP_ID && !isAddon) + { + SLApi.UninstallAllProductKeys(appId); + } + + Utils.KillSPP(); + + using (IPhysicalStore ps = Utils.GetStore(version, production)) + { + using (ITokenStore tks = Utils.GetTokenStore(version)) + { + Logger.WriteLine("Writing to physical store and token store..."); + + string suffix = (version == PSVersion.Win8 || version == PSVersion.WinBlue || version == PSVersion.WinModern) ? "_--" : ""; + string metSuffix = suffix + "_met"; + + if (appId == SLApi.WINDOWS_APP_ID && !isAddon) + { + string edTokName = "msft:spp/token/windows/productkeyid/" + currEdition; + + TokenMeta edToken = tks.GetMetaEntry(edTokName); + edToken.Data["windowsComponentEditionPkeyId"] = pkeyId; + edToken.Data["windowsComponentEditionSkuId"] = actId.ToString(); + tks.SetEntry(edTokName, "xml", edToken.Serialize()); + + WritePkey2005RegistryValues(version, pkey); + } + + string uriMapName = "msft:spp/token/PKeyIdUriMapper" + metSuffix; + TokenMeta uriMap = tks.GetMetaEntry(uriMapName); + uriMap.Data[pkeyId] = pkey.GetAlgoUri(); + tks.SetEntry(uriMapName, "xml", uriMap.Serialize()); + + string skuMetaName = actId.ToString() + metSuffix; + TokenMeta skuMeta = tks.GetMetaEntry(skuMetaName); + + foreach (string k in skuMeta.Data.Keys) + { + if (k.StartsWith("pkeyId_")) + { + skuMeta.Data.Remove(k); + break; + } + } + + skuMeta.Data["pkeyId"] = pkeyId; + skuMeta.Data["pkeyIdList"] = pkeyId; + tks.SetEntry(skuMetaName, "xml", skuMeta.Serialize()); + + string psKey = string.Format("SPPSVC\\{0}\\{1}", appId, actId); + ps.DeleteBlock(psKey, pkeyId); + ps.AddBlock(new PSBlock + { + Type = BlockType.NAMED, + Flags = (version == PSVersion.WinModern) ? (uint)0x402 : 0x2, + KeyAsStr = psKey, + ValueAsStr = pkeyId, + Data = pkb.Serialize() + }); + + string cachePath = Utils.GetTokensPath(version).Replace("tokens.dat", @"cache\cache.dat"); + if (File.Exists(cachePath)) File.Delete(cachePath); + } + } + + SLApi.RefreshTrustedTime(actId); + Logger.WriteLine("Successfully deposited fake product key."); + } + } +} + + +// Modifiers/GracePeriodReset.cs +namespace LibTSforge.Modifiers +{ + using System; + using System.Collections.Generic; + using System.Linq; + using LibTSforge.PhysicalStore; + + public static class GracePeriodReset + { + public static void Reset(PSVersion version, bool production) + { + Utils.KillSPP(); + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + string value = "msft:sl/timer"; + List blocks = store.FindBlocks(value).ToList(); + + foreach (PSBlock block in blocks) + { + store.DeleteBlock(block.KeyAsStr, block.ValueAsStr); + } + } + + Logger.WriteLine("Successfully reset all grace and evaluation period timers."); + } + } +} + + +// Modifiers/KeyChangeLockDelete.cs +namespace LibTSforge.Modifiers +{ + using System.Collections.Generic; + using System.Linq; + using LibTSforge.PhysicalStore; + using LibTSforge; + public static class KeyChangeLockDelete + { + public static void Delete(PSVersion version, bool production) + { + Utils.KillSPP(); + Logger.WriteLine("Writing TrustedStore data..."); + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + List values = new List + { + "msft:spp/timebased/AB", + "msft:spp/timebased/CD" + }; + List blocks = new List(); + foreach (string value in values) + { + blocks.AddRange(store.FindBlocks(value).ToList()); + } + foreach (PSBlock block in blocks) + { + store.DeleteBlock(block.KeyAsStr, block.ValueAsStr); + } + } + Logger.WriteLine("Successfully removed the key change lock."); + } + } +} + + +// Modifiers/KMSHostCharge.cs +namespace LibTSforge.Modifiers +{ + using System; + using System.IO; + using LibTSforge.PhysicalStore; + using LibTSforge.SPP; + + public static class KMSHostCharge + { + public static void Charge(PSVersion version, Guid actId, bool production) + { + if (actId == Guid.Empty) + { + actId = SLApi.GetDefaultActivationID(SLApi.WINDOWS_APP_ID, true); + + if (actId == Guid.Empty) + { + throw new NotSupportedException("No applicable activation IDs found."); + } + } + + if (SLApi.GetPKeyChannel(SLApi.GetInstalledPkeyID(actId)) != "Volume:CSVLK") + { + throw new NotSupportedException("Non-Volume:CSVLK product key installed."); + } + + Guid appId = SLApi.GetAppId(actId); + int totalClients = 50; + int currClients = 25; + byte[] hwidBlock = Constants.UniversalHWIDBlock; + string key = string.Format("SPPSVC\\{0}", appId); + long ldapTimestamp = DateTime.Now.ToFileTime(); + + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + + for (int i = 0; i < currClients; i++) + { + writer.Write(ldapTimestamp - (10 * (i + 1))); + writer.Write(Guid.NewGuid().ToByteArray()); + } + + byte[] cmidGuids = writer.GetBytes(); + + writer = new BinaryWriter(new MemoryStream()); + + writer.Write(new byte[40]); + + writer.Seek(4, SeekOrigin.Begin); + writer.Write((byte)currClients); + + writer.Seek(24, SeekOrigin.Begin); + writer.Write((byte)currClients); + byte[] reqCounts = writer.GetBytes(); + + Utils.KillSPP(); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + VariableBag kmsCountData = new VariableBag(); + kmsCountData.Blocks.AddRange(new CRCBlock[] + { + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppBindingLicenseData", + Value = hwidBlock + }, + new CRCBlock + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = (uint)totalClients + }, + new CRCBlock + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = 1051200000 + }, + new CRCBlock + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = (uint)currClients + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + Key = new byte[] { }, + Value = cmidGuids + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + Key = new byte[] { }, + Value = reqCounts + } + }); + + byte[] kmsChargeData = kmsCountData.Serialize(); + string countVal = string.Format("msft:spp/kms/host/2.0/store/counters/{0}", appId); + + store.DeleteBlock(key, countVal); + store.AddBlock(new PSBlock + { + Type = BlockType.NAMED, + Flags = (version == PSVersion.WinModern) ? (uint)0x400 : 0, + KeyAsStr = key, + ValueAsStr = countVal, + Data = kmsChargeData + }); + + Logger.WriteLine(string.Format("Set charge count to {0} successfully.", currClients)); + } + } + } +} + + +// Modifiers/RearmReset.cs +namespace LibTSforge.Modifiers +{ + using System; + using System.Collections.Generic; + using System.Linq; + using LibTSforge.PhysicalStore; + + public static class RearmReset + { + public static void Reset(PSVersion version, bool production) + { + Utils.KillSPP(); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + List blocks; + + if (version == PSVersion.Win7) + { + blocks = store.FindBlocks(0xA0000).ToList(); + } + else + { + blocks = store.FindBlocks("__##USERSEP-RESERVED##__$$REARM-COUNT$$").ToList(); + } + + foreach (PSBlock block in blocks) + { + if (version == PSVersion.Win7) + { + store.SetBlock(block.KeyAsStr, block.ValueAsInt, new byte[8]); + } + else + { + store.SetBlock(block.KeyAsStr, block.ValueAsStr, new byte[8]); + } + } + + Logger.WriteLine("Successfully reset all rearm counters."); + } + } + } +} + + +// Modifiers/TamperedFlagsDelete.cs +namespace LibTSforge.Modifiers +{ + using System; + using System.Linq; + using LibTSforge.PhysicalStore; + + public static class TamperedFlagsDelete + { + public static void DeleteTamperFlags(PSVersion version, bool production) + { + Utils.KillSPP(); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + if (version != PSVersion.Win7) + { + string recreatedFlag = "__##USERSEP-RESERVED##__$$RECREATED-FLAG$$"; + string recoveredFlag = "__##USERSEP-RESERVED##__$$RECOVERED-FLAG$$"; + + DeleteFlag(store, recreatedFlag); + DeleteFlag(store, recoveredFlag); + } + else + { + SetFlag(store, 0xA0001); + } + + Logger.WriteLine("Successfully cleared the tamper state."); + } + } + + private static void DeleteFlag(IPhysicalStore store, string flag) + { + store.FindBlocks(flag).ToList().ForEach(block => store.DeleteBlock(block.KeyAsStr, block.ValueAsStr)); + } + + private static void SetFlag(IPhysicalStore store, uint flag) + { + store.FindBlocks(flag).ToList().ForEach(block => store.SetBlock(block.KeyAsStr, block.ValueAsInt, new byte[8])); + } + } +} + + +// Modifiers/UniqueIdDelete.cs +namespace LibTSforge.Modifiers +{ + using System; + using LibTSforge.PhysicalStore; + using LibTSforge.SPP; + + public static class UniqueIdDelete + { + public static void DeleteUniqueId(PSVersion version, bool production, Guid actId) + { + Guid appId; + + if (actId == Guid.Empty) + { + appId = SLApi.WINDOWS_APP_ID; + actId = SLApi.GetDefaultActivationID(appId, true); + + if (actId == Guid.Empty) + { + throw new Exception("No applicable activation IDs found."); + } + } + else + { + appId = SLApi.GetAppId(actId); + } + + string instId = SLApi.GetInstallationID(actId); + Guid pkeyId = SLApi.GetInstalledPkeyID(actId); + + Utils.KillSPP(); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId); + PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString()); + + if (keyBlock == null) + { + throw new Exception("No product key found."); + } + + VariableBag pkb = new VariableBag(keyBlock.Data); + + pkb.DeleteBlock("SppPkeyUniqueIdToken"); + + store.SetBlock(key, pkeyId.ToString(), pkb.Serialize()); + } + + Logger.WriteLine("Successfully removed Unique ID for product key ID " + pkeyId); + } + } +} + + +// Activators/ZeroCID.cs +namespace LibTSforge.Activators +{ + using System; + using System.IO; + using LibTSforge.Crypto; + using LibTSforge.PhysicalStore; + using LibTSforge.SPP; + + public static class ZeroCID + { + public static void Deposit(Guid actId, string instId) + { + uint status = SLApi.DepositConfirmationID(actId, instId, Constants.ZeroCID); + Logger.WriteLine(string.Format("Depositing fake CID status {0:X}", status)); + + if (status != 0) + { + throw new InvalidOperationException("Failed to deposit fake CID."); + } + } + + public static void Activate(PSVersion version, bool production, Guid actId) + { + Guid appId; + + if (actId == Guid.Empty) + { + appId = SLApi.WINDOWS_APP_ID; + actId = SLApi.GetDefaultActivationID(appId, false); + + if (actId == Guid.Empty) + { + throw new NotSupportedException("No applicable activation IDs found."); + } + } + else + { + appId = SLApi.GetAppId(actId); + } + + if (!SLApi.IsPhoneActivatable(actId)) + { + throw new NotSupportedException("Phone license is unavailable for this product."); + } + + string instId = SLApi.GetInstallationID(actId); + Guid pkeyId = SLApi.GetInstalledPkeyID(actId); + + if (version == PSVersion.Win7) + { + Deposit(actId, instId); + } + + Utils.KillSPP(); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + byte[] hwidBlock = Constants.UniversalHWIDBlock; + + Logger.WriteLine("Activation ID: " + actId); + Logger.WriteLine("Installation ID: " + instId); + Logger.WriteLine("Product Key ID: " + pkeyId); + + byte[] iidHash; + + if (version == PSVersion.Win7) + { + iidHash = CryptoUtils.SHA256Hash(Utils.EncodeString(instId)); + } + else + { + iidHash = CryptoUtils.SHA256Hash(Utils.EncodeString(instId + '\0' + Constants.ZeroCID)); + } + + string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId); + PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString()); + + if (keyBlock == null) + { + throw new InvalidDataException("Failed to get product key data for activation ID " + actId + "."); + } + + VariableBag pkb = new VariableBag(keyBlock.Data); + + byte[] pkeyData; + + if (version == PSVersion.Win7) + { + pkeyData = pkb.GetBlock("SppPkeyShortAuthenticator").Value; + } + else + { + pkeyData = pkb.GetBlock("SppPkeyPhoneActivationData").Value; + } + + pkb.DeleteBlock("SppPkeyVirtual"); + store.SetBlock(key, pkeyId.ToString(), pkb.Serialize()); + + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(0x20); + writer.Write(iidHash); + writer.Write(hwidBlock.Length); + writer.Write(hwidBlock); + byte[] tsHwidData = writer.GetBytes(); + + writer = new BinaryWriter(new MemoryStream()); + writer.Write(0x20); + writer.Write(iidHash); + writer.Write(pkeyData.Length); + writer.Write(pkeyData); + byte[] tsPkeyInfoData = writer.GetBytes(); + + store.AddBlocks(new PSBlock[] { + new PSBlock + { + Type = BlockType.NAMED, + Flags = 0, + KeyAsStr = key, + ValueAsStr = "msft:Windows/7.0/Phone/Cached/HwidBlock/" + pkeyId, + Data = tsHwidData + }, + new PSBlock + { + Type = BlockType.NAMED, + Flags = 0, + KeyAsStr = key, + ValueAsStr = "msft:Windows/7.0/Phone/Cached/PKeyInfo/" + pkeyId, + Data = tsPkeyInfoData + } + }); + } + + if (version != PSVersion.Win7) + { + Deposit(actId, instId); + } + + SLApi.RefreshLicenseStatus(); + SLApi.FireStateChangedEvent(appId); + Logger.WriteLine("Activated using ZeroCID successfully."); + } + } +} + + +// TokenStore/Common.cs +namespace LibTSforge.TokenStore +{ + using System.Collections.Generic; + using System.IO; + + public class TokenEntry + { + public string Name; + public string Extension; + public byte[] Data; + public bool Populated; + } + + public class TokenMeta + { + public string Name; + public Dictionary Data = new Dictionary(); + + public byte[] Serialize() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(1); + byte[] nameBytes = Utils.EncodeString(Name); + writer.Write(nameBytes.Length); + writer.Write(nameBytes); + + foreach (KeyValuePair kv in Data) + { + byte[] keyBytes = Utils.EncodeString(kv.Key); + byte[] valueBytes = Utils.EncodeString(kv.Value); + writer.Write(keyBytes.Length); + writer.Write(valueBytes.Length); + writer.Write(keyBytes); + writer.Write(valueBytes); + } + + return writer.GetBytes(); + } + + public void Deserialize(byte[] data) + { + BinaryReader reader = new BinaryReader(new MemoryStream(data)); + reader.ReadInt32(); + int nameLen = reader.ReadInt32(); + Name = reader.ReadNullTerminatedString(nameLen); + + while (reader.BaseStream.Position < data.Length - 0x8) + { + int keyLen = reader.ReadInt32(); + int valueLen = reader.ReadInt32(); + string key = reader.ReadNullTerminatedString(keyLen); + string value = reader.ReadNullTerminatedString(valueLen); + Data[key] = value; + } + } + + public TokenMeta(byte[] data) + { + Deserialize(data); + } + + public TokenMeta() + { + + } + } +} + + +// TokenStore/ITokenStore.cs +namespace LibTSforge.TokenStore +{ + using System; + + public interface ITokenStore : IDisposable + { + void Deserialize(); + void Serialize(); + void AddEntry(TokenEntry entry); + void AddEntries(TokenEntry[] entries); + void DeleteEntry(string name, string ext); + void DeleteUnpopEntry(string name, string ext); + TokenEntry GetEntry(string name, string ext); + TokenMeta GetMetaEntry(string name); + void SetEntry(string name, string ext, byte[] data); + } +} + + +// TokenStore/TokenStoreModern.cs +namespace LibTSforge.TokenStore +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using LibTSforge.Crypto; + + public class TokenStoreModern : ITokenStore + { + private static readonly uint VERSION = 3; + private static readonly int ENTRY_SIZE = 0x9E; + private static readonly int BLOCK_SIZE = 0x4020; + private static readonly int ENTRIES_PER_BLOCK = BLOCK_SIZE / ENTRY_SIZE; + private static readonly int BLOCK_PAD_SIZE = 0x66; + + private static readonly byte[] CONTS_HEADER = Enumerable.Repeat((byte)0x55, 0x20).ToArray(); + private static readonly byte[] CONTS_FOOTER = Enumerable.Repeat((byte)0xAA, 0x20).ToArray(); + + private List Entries = new List(); + public FileStream TokensFile; + + public void Deserialize() + { + if (TokensFile.Length < BLOCK_SIZE) return; + + TokensFile.Seek(0x24, SeekOrigin.Begin); + uint nextBlock = 0; + + BinaryReader reader = new BinaryReader(TokensFile); + do + { + uint curOffset = reader.ReadUInt32(); + nextBlock = reader.ReadUInt32(); + + for (int i = 0; i < ENTRIES_PER_BLOCK; i++) + { + curOffset = reader.ReadUInt32(); + bool populated = reader.ReadUInt32() == 1; + uint contentOffset = reader.ReadUInt32(); + uint contentLength = reader.ReadUInt32(); + uint allocLength = reader.ReadUInt32(); + byte[] contentData = new byte[] { }; + + if (populated) + { + reader.BaseStream.Seek(contentOffset + 0x20, SeekOrigin.Begin); + uint dataLength = reader.ReadUInt32(); + + if (dataLength != contentLength) + { + throw new FormatException("Data length in tokens content is inconsistent with entry."); + } + + reader.ReadBytes(0x20); + contentData = reader.ReadBytes((int)contentLength); + } + + reader.BaseStream.Seek(curOffset + 0x14, SeekOrigin.Begin); + + Entries.Add(new TokenEntry + { + Name = reader.ReadNullTerminatedString(0x82), + Extension = reader.ReadNullTerminatedString(0x8), + Data = contentData, + Populated = populated + }); + } + + reader.BaseStream.Seek(nextBlock, SeekOrigin.Begin); + } while (nextBlock != 0); + } + + public void Serialize() + { + MemoryStream tokens = new MemoryStream(); + + using (BinaryWriter writer = new BinaryWriter(tokens)) + { + writer.Write(VERSION); + writer.Write(CONTS_HEADER); + + int curBlockOffset = (int)writer.BaseStream.Position; + int curEntryOffset = curBlockOffset + 0x8; + int curContsOffset = curBlockOffset + BLOCK_SIZE; + + for (int eIndex = 0; eIndex < ((Entries.Count / ENTRIES_PER_BLOCK) + 1) * ENTRIES_PER_BLOCK; eIndex++) + { + TokenEntry entry; + + if (eIndex < Entries.Count) + { + entry = Entries[eIndex]; + } + else + { + entry = new TokenEntry + { + Name = "", + Extension = "", + Populated = false, + Data = new byte[] { } + }; + } + + writer.BaseStream.Seek(curBlockOffset, SeekOrigin.Begin); + writer.Write(curBlockOffset); + writer.Write(0); + + writer.BaseStream.Seek(curEntryOffset, SeekOrigin.Begin); + writer.Write(curEntryOffset); + writer.Write(entry.Populated ? 1 : 0); + writer.Write(entry.Populated ? curContsOffset : 0); + writer.Write(entry.Populated ? entry.Data.Length : -1); + writer.Write(entry.Populated ? entry.Data.Length : -1); + writer.WriteFixedString16(entry.Name, 0x82); + writer.WriteFixedString16(entry.Extension, 0x8); + curEntryOffset = (int)writer.BaseStream.Position; + + if (entry.Populated) + { + writer.BaseStream.Seek(curContsOffset, SeekOrigin.Begin); + writer.Write(CONTS_HEADER); + writer.Write(entry.Data.Length); + writer.Write(CryptoUtils.SHA256Hash(entry.Data)); + writer.Write(entry.Data); + writer.Write(CONTS_FOOTER); + curContsOffset = (int)writer.BaseStream.Position; + } + + if ((eIndex + 1) % ENTRIES_PER_BLOCK == 0 && eIndex != 0) + { + if (eIndex < Entries.Count) + { + writer.BaseStream.Seek(curBlockOffset + 0x4, SeekOrigin.Begin); + writer.Write(curContsOffset); + } + + writer.BaseStream.Seek(curEntryOffset, SeekOrigin.Begin); + writer.WritePadding(BLOCK_PAD_SIZE); + + writer.BaseStream.Seek(curBlockOffset, SeekOrigin.Begin); + byte[] blockHash; + byte[] blockData = new byte[BLOCK_SIZE - 0x20]; + + tokens.Read(blockData, 0, BLOCK_SIZE - 0x20); + blockHash = CryptoUtils.SHA256Hash(blockData); + + writer.BaseStream.Seek(curBlockOffset + BLOCK_SIZE - 0x20, SeekOrigin.Begin); + writer.Write(blockHash); + + curBlockOffset = curContsOffset; + curEntryOffset = curBlockOffset + 0x8; + curContsOffset = curBlockOffset + BLOCK_SIZE; + } + } + + tokens.SetLength(curBlockOffset); + } + + byte[] tokensData = tokens.ToArray(); + byte[] tokensHash = CryptoUtils.SHA256Hash(tokensData.Take(0x4).Concat(tokensData.Skip(0x24)).ToArray()); + + tokens = new MemoryStream(tokensData); + + BinaryWriter tokWriter = new BinaryWriter(TokensFile); + using (BinaryReader reader = new BinaryReader(tokens)) + { + TokensFile.Seek(0, SeekOrigin.Begin); + TokensFile.SetLength(tokens.Length); + tokWriter.Write(reader.ReadBytes(0x4)); + reader.ReadBytes(0x20); + tokWriter.Write(tokensHash); + tokWriter.Write(reader.ReadBytes((int)reader.BaseStream.Length - 0x4)); + } + } + + public void AddEntry(TokenEntry entry) + { + Entries.Add(entry); + } + + public void AddEntries(TokenEntry[] entries) + { + Entries.AddRange(entries); + } + + public void DeleteEntry(string name, string ext) + { + foreach (TokenEntry entry in Entries) + { + if (entry.Name == name && entry.Extension == ext) + { + Entries.Remove(entry); + return; + } + } + } + + public void DeleteUnpopEntry(string name, string ext) + { + List delEntries = new List(); + foreach (TokenEntry entry in Entries) + { + if (entry.Name == name && entry.Extension == ext && !entry.Populated) + { + delEntries.Add(entry); + } + } + + Entries = Entries.Except(delEntries).ToList(); + } + + public TokenEntry GetEntry(string name, string ext) + { + foreach (TokenEntry entry in Entries) + { + if (entry.Name == name && entry.Extension == ext) + { + if (!entry.Populated) continue; + return entry; + } + } + + return null; + } + + public TokenMeta GetMetaEntry(string name) + { + DeleteUnpopEntry(name, "xml"); + TokenEntry entry = GetEntry(name, "xml"); + TokenMeta meta; + + if (entry == null) + { + meta = new TokenMeta + { + Name = name + }; + } + else + { + meta = new TokenMeta(entry.Data); + } + + return meta; + } + + public void SetEntry(string name, string ext, byte[] data) + { + for (int i = 0; i < Entries.Count; i++) + { + TokenEntry entry = Entries[i]; + + if (entry.Name == name && entry.Extension == ext && entry.Populated) + { + entry.Data = data; + Entries[i] = entry; + return; + } + } + + Entries.Add(new TokenEntry + { + Populated = true, + Name = name, + Extension = ext, + Data = data + }); + } + + public TokenStoreModern(string tokensPath) + { + TokensFile = File.Open(tokensPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + Deserialize(); + } + + public TokenStoreModern() + { + + } + + public void Dispose() + { + Serialize(); + TokensFile.Close(); + } + } +} + + +// PhysicalStore/Common.cs +namespace LibTSforge.PhysicalStore +{ + using System.Runtime.InteropServices; + + public enum BlockType : uint + { + NONE, + NAMED, + ATTRIBUTE, + TIMER + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct Timer + { + public ulong Unknown; + public ulong Time1; + public ulong Time2; + public ulong Expiry; + } +} + + +// PhysicalStore/IPhysicalStore.cs +namespace LibTSforge.PhysicalStore +{ + using System; + using System.Collections.Generic; + + public class PSBlock + { + public BlockType Type; + public uint Flags; + public uint Unknown = 0; + public byte[] Key; + public string KeyAsStr + { + get + { + return Utils.DecodeString(Key); + } + set + { + Key = Utils.EncodeString(value); + } + } + public byte[] Value; + public string ValueAsStr + { + get + { + return Utils.DecodeString(Value); + } + set + { + Value = Utils.EncodeString(value); + } + } + public uint ValueAsInt + { + get + { + return BitConverter.ToUInt32(Value, 0); + } + set + { + Value = BitConverter.GetBytes(value); + } + } + public byte[] Data; + public string DataAsStr + { + get + { + return Utils.DecodeString(Data); + } + set + { + Data = Utils.EncodeString(value); + } + } + public uint DataAsInt + { + get + { + return BitConverter.ToUInt32(Data, 0); + } + set + { + Data = BitConverter.GetBytes(value); + } + } + } + + public interface IPhysicalStore : IDisposable + { + PSBlock GetBlock(string key, string value); + PSBlock GetBlock(string key, uint value); + void AddBlock(PSBlock block); + void AddBlocks(IEnumerable blocks); + void SetBlock(string key, string value, byte[] data); + void SetBlock(string key, string value, string data); + void SetBlock(string key, string value, uint data); + void SetBlock(string key, uint value, byte[] data); + void SetBlock(string key, uint value, string data); + void SetBlock(string key, uint value, uint data); + void DeleteBlock(string key, string value); + void DeleteBlock(string key, uint value); + byte[] Serialize(); + void Deserialize(byte[] data); + byte[] ReadRaw(); + void WriteRaw(byte[] data); + IEnumerable FindBlocks(string valueSearch); + IEnumerable FindBlocks(uint valueSearch); + } +} + + +// PhysicalStore/PhysicalStoreModern.cs +namespace LibTSforge.PhysicalStore +{ + using System; + using System.Collections.Generic; + using System.IO; + using LibTSforge.Crypto; + + public class ModernBlock + { + public BlockType Type; + public uint Flags; + public uint Unknown; + public byte[] Value; + public string ValueAsStr + { + get + { + return Utils.DecodeString(Value); + } + set + { + Value = Utils.EncodeString(value); + } + } + public uint ValueAsInt + { + get + { + return BitConverter.ToUInt32(Value, 0); + } + set + { + Value = BitConverter.GetBytes(value); + } + } + public byte[] Data; + public string DataAsStr + { + get + { + return Utils.DecodeString(Data); + } + set + { + Data = Utils.EncodeString(value); + } + } + public uint DataAsInt + { + get + { + return BitConverter.ToUInt32(Data, 0); + } + set + { + Data = BitConverter.GetBytes(value); + } + } + + public void Encode(BinaryWriter writer) + { + writer.Write((uint)Type); + writer.Write(Flags); + writer.Write((uint)Value.Length); + writer.Write((uint)Data.Length); + writer.Write(Unknown); + writer.Write(Value); + writer.Write(Data); + } + + public static ModernBlock Decode(BinaryReader reader) + { + uint type = reader.ReadUInt32(); + uint flags = reader.ReadUInt32(); + + uint valueLen = reader.ReadUInt32(); + uint dataLen = reader.ReadUInt32(); + uint unk3 = reader.ReadUInt32(); + + byte[] value = reader.ReadBytes((int)valueLen); + byte[] data = reader.ReadBytes((int)dataLen); + + return new ModernBlock + { + Type = (BlockType)type, + Flags = flags, + Unknown = unk3, + Value = value, + Data = data, + }; + } + } + + public sealed class PhysicalStoreModern : IPhysicalStore + { + private byte[] PreHeaderBytes = new byte[] { }; + private readonly Dictionary> Data = new Dictionary>(); + private readonly FileStream TSFile; + private readonly PSVersion Version; + private readonly bool Production; + + public byte[] Serialize() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(PreHeaderBytes); + writer.Write(Data.Keys.Count); + + foreach (string key in Data.Keys) + { + List blocks = Data[key]; + byte[] keyNameEnc = Utils.EncodeString(key); + + writer.Write(keyNameEnc.Length); + writer.Write(keyNameEnc); + writer.Write(blocks.Count); + writer.Align(4); + + foreach (ModernBlock block in blocks) + { + block.Encode(writer); + writer.Align(4); + } + } + + return writer.GetBytes(); + } + + public void Deserialize(byte[] data) + { + BinaryReader reader = new BinaryReader(new MemoryStream(data)); + PreHeaderBytes = reader.ReadBytes(8); + + while (reader.BaseStream.Position < data.Length - 0x4) + { + uint numKeys = reader.ReadUInt32(); + + for (int i = 0; i < numKeys; i++) + { + uint lenKeyName = reader.ReadUInt32(); + string keyName = Utils.DecodeString(reader.ReadBytes((int)lenKeyName)); uint numValues = reader.ReadUInt32(); + + reader.Align(4); + + Data[keyName] = new List(); + + for (int j = 0; j < numValues; j++) + { + Data[keyName].Add(ModernBlock.Decode(reader)); + reader.Align(4); + } + } + } + } + + public void AddBlock(PSBlock block) + { + if (!Data.ContainsKey(block.KeyAsStr)) + { + Data[block.KeyAsStr] = new List(); + } + + Data[block.KeyAsStr].Add(new ModernBlock + { + Type = block.Type, + Flags = block.Flags, + Unknown = block.Unknown, + Value = block.Value, + Data = block.Data + }); + } + + public void AddBlocks(IEnumerable blocks) + { + foreach (PSBlock block in blocks) + { + AddBlock(block); + } + } + + public PSBlock GetBlock(string key, string value) + { + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsStr == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = Utils.EncodeString(key), + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public PSBlock GetBlock(string key, uint value) + { + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsInt == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = Utils.EncodeString(key), + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public void SetBlock(string key, string value, byte[] data) + { + List blocks = Data[key]; + + for (int i = 0; i < blocks.Count; i++) + { + ModernBlock block = blocks[i]; + + if (block.ValueAsStr == value) + { + block.Data = data; + blocks[i] = block; + break; + } + } + + Data[key] = blocks; + } + + public void SetBlock(string key, uint value, byte[] data) + { + List blocks = Data[key]; + + for (int i = 0; i < blocks.Count; i++) + { + ModernBlock block = blocks[i]; + + if (block.ValueAsInt == value) + { + block.Data = data; + blocks[i] = block; + break; + } + } + + Data[key] = blocks; + } + + public void SetBlock(string key, string value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, string value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void SetBlock(string key, uint value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, uint value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void DeleteBlock(string key, string value) + { + if (Data.ContainsKey(key)) + { + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsStr == value) + { + blocks.Remove(block); + break; + } + } + + Data[key] = blocks; + } + } + + public void DeleteBlock(string key, uint value) + { + if (Data.ContainsKey(key)) + { + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsInt == value) + { + blocks.Remove(block); + break; + } + } + + Data[key] = blocks; + } + } + + public PhysicalStoreModern(string tsPath, bool production, PSVersion version) + { + TSFile = File.Open(tsPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), production)); + TSFile.Seek(0, SeekOrigin.Begin); + Version = version; + Production = production; + } + + public void Dispose() + { + if (TSFile.CanWrite) + { + byte[] data = PhysStoreCrypto.EncryptPhysicalStore(Serialize(), Production, Version); + TSFile.SetLength(data.LongLength); + TSFile.Seek(0, SeekOrigin.Begin); + TSFile.WriteAllBytes(data); + TSFile.Close(); + } + } + + public byte[] ReadRaw() + { + byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), Production); + TSFile.Seek(0, SeekOrigin.Begin); + return data; + } + + public void WriteRaw(byte[] data) + { + byte[] encrData = PhysStoreCrypto.EncryptPhysicalStore(data, Production, Version); + TSFile.SetLength(encrData.LongLength); + TSFile.Seek(0, SeekOrigin.Begin); + TSFile.WriteAllBytes(encrData); + TSFile.Close(); + } + + public IEnumerable FindBlocks(string valueSearch) + { + List results = new List(); + + foreach (string key in Data.Keys) + { + List values = Data[key]; + + foreach (ModernBlock block in values) + { + if (block.ValueAsStr.Contains(valueSearch)) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + KeyAsStr = key, + Value = block.Value, + Data = block.Data + }); + } + } + } + + return results; + } + + public IEnumerable FindBlocks(uint valueSearch) + { + List results = new List(); + + foreach (string key in Data.Keys) + { + List values = Data[key]; + + foreach (ModernBlock block in values) + { + if (block.ValueAsInt == valueSearch) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + KeyAsStr = key, + Value = block.Value, + Data = block.Data + }); + } + } + } + + return results; + } + } +} + + +// PhysicalStore/PhysicalStoreWin7.cs +namespace LibTSforge.PhysicalStore +{ + using System; + using System.Collections.Generic; + using System.IO; + using LibTSforge.Crypto; + + public class Win7Block + { + public BlockType Type; + public uint Flags; + public byte[] Key; + public string KeyAsStr + { + get + { + return Utils.DecodeString(Key); + } + set + { + Key = Utils.EncodeString(value); + } + } + public byte[] Value; + public string ValueAsStr + { + get + { + return Utils.DecodeString(Value); + } + set + { + Value = Utils.EncodeString(value); + } + } + public uint ValueAsInt + { + get + { + return BitConverter.ToUInt32(Value, 0); + } + set + { + Value = BitConverter.GetBytes(value); + } + } + public byte[] Data; + public string DataAsStr + { + get + { + return Utils.DecodeString(Data); + } + set + { + Data = Utils.EncodeString(value); + } + } + public uint DataAsInt + { + get + { + return BitConverter.ToUInt32(Data, 0); + } + set + { + Data = BitConverter.GetBytes(value); + } + } + + internal void Encode(BinaryWriter writer) + { + writer.Write((uint)Type); + writer.Write(Flags); + writer.Write(Key.Length); + writer.Write(Value.Length); + writer.Write(Data.Length); + writer.Write(Key); + writer.Write(Value); + writer.Write(Data); + } + + internal static Win7Block Decode(BinaryReader reader) + { + uint type = reader.ReadUInt32(); + uint flags = reader.ReadUInt32(); + + int keyLen = reader.ReadInt32(); + int valueLen = reader.ReadInt32(); + int dataLen = reader.ReadInt32(); + + byte[] key = reader.ReadBytes(keyLen); + byte[] value = reader.ReadBytes(valueLen); + byte[] data = reader.ReadBytes(dataLen); + return new Win7Block + { + Type = (BlockType)type, + Flags = flags, + Key = key, + Value = value, + Data = data, + }; + } + } + + public sealed class PhysicalStoreWin7 : IPhysicalStore + { + private byte[] PreHeaderBytes = new byte[] { }; + private readonly List Blocks = new List(); + private readonly FileStream TSPrimary; + private readonly FileStream TSSecondary; + private readonly bool Production; + + public byte[] Serialize() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(PreHeaderBytes); + + foreach (Win7Block block in Blocks) + { + block.Encode(writer); + writer.Align(4); + } + + return writer.GetBytes(); + } + + public void Deserialize(byte[] data) + { + int len = data.Length; + + BinaryReader reader = new BinaryReader(new MemoryStream(data)); + PreHeaderBytes = reader.ReadBytes(8); + + while (reader.BaseStream.Position < len - 0x14) + { + Blocks.Add(Win7Block.Decode(reader)); + reader.Align(4); + } + } + + public void AddBlock(PSBlock block) + { + Blocks.Add(new Win7Block + { + Type = block.Type, + Flags = block.Flags, + Key = block.Key, + Value = block.Value, + Data = block.Data + }); + } + + public void AddBlocks(IEnumerable blocks) + { + foreach (PSBlock block in blocks) + { + AddBlock(block); + } + } + + public PSBlock GetBlock(string key, string value) + { + foreach (Win7Block block in Blocks) + { + if (block.KeyAsStr == key && block.ValueAsStr == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = block.Key, + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public PSBlock GetBlock(string key, uint value) + { + foreach (Win7Block block in Blocks) + { + if (block.KeyAsStr == key && block.ValueAsInt == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = block.Key, + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public void SetBlock(string key, string value, byte[] data) + { + for (int i = 0; i < Blocks.Count; i++) + { + Win7Block block = Blocks[i]; + + if (block.KeyAsStr == key && block.ValueAsStr == value) + { + block.Data = data; + Blocks[i] = block; + break; + } + } + } + + public void SetBlock(string key, uint value, byte[] data) + { + for (int i = 0; i < Blocks.Count; i++) + { + Win7Block block = Blocks[i]; + + if (block.KeyAsStr == key && block.ValueAsInt == value) + { + block.Data = data; + Blocks[i] = block; + break; + } + } + } + + public void SetBlock(string key, string value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, string value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void SetBlock(string key, uint value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, uint value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void DeleteBlock(string key, string value) + { + foreach (Win7Block block in Blocks) + { + if (block.KeyAsStr == key && block.ValueAsStr == value) + { + Blocks.Remove(block); + return; + } + } + } + + public void DeleteBlock(string key, uint value) + { + foreach (Win7Block block in Blocks) + { + if (block.KeyAsStr == key && block.ValueAsInt == value) + { + Blocks.Remove(block); + return; + } + } + } + + public PhysicalStoreWin7(string primaryPath, bool production) + { + TSPrimary = File.Open(primaryPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + TSSecondary = File.Open(primaryPath.Replace("-0.", "-1."), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + Production = production; + + Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), production)); + TSPrimary.Seek(0, SeekOrigin.Begin); + } + + public void Dispose() + { + if (TSPrimary.CanWrite && TSSecondary.CanWrite) + { + byte[] data = PhysStoreCrypto.EncryptPhysicalStore(Serialize(), Production, PSVersion.Win7); + + TSPrimary.SetLength(data.LongLength); + TSSecondary.SetLength(data.LongLength); + + TSPrimary.Seek(0, SeekOrigin.Begin); + TSSecondary.Seek(0, SeekOrigin.Begin); + + TSPrimary.WriteAllBytes(data); + TSSecondary.WriteAllBytes(data); + + TSPrimary.Close(); + TSSecondary.Close(); + } + } + + public byte[] ReadRaw() + { + byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), Production); + TSPrimary.Seek(0, SeekOrigin.Begin); + return data; + } + + public void WriteRaw(byte[] data) + { + byte[] encrData = PhysStoreCrypto.EncryptPhysicalStore(data, Production, PSVersion.Win7); + + TSPrimary.SetLength(encrData.LongLength); + TSSecondary.SetLength(encrData.LongLength); + + TSPrimary.Seek(0, SeekOrigin.Begin); + TSSecondary.Seek(0, SeekOrigin.Begin); + + TSPrimary.WriteAllBytes(encrData); + TSSecondary.WriteAllBytes(encrData); + + TSPrimary.Close(); + TSSecondary.Close(); + } + + public IEnumerable FindBlocks(string valueSearch) + { + List results = new List(); + + foreach (Win7Block block in Blocks) + { + if (block.ValueAsStr.Contains(valueSearch)) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = block.Key, + Value = block.Value, + Data = block.Data + }); + } + } + + return results; + } + + public IEnumerable FindBlocks(uint valueSearch) + { + List results = new List(); + + foreach (Win7Block block in Blocks) + { + if (block.ValueAsInt == valueSearch) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = block.Key, + Value = block.Value, + Data = block.Data + }); + } + } + + return results; + } + } +} + + +// PhysicalStore/VariableBag.cs +namespace LibTSforge.PhysicalStore +{ + using System; + using System.Collections.Generic; + using System.IO; + + public enum CRCBlockType : uint + { + UINT = 1 << 0, + STRING = 1 << 1, + BINARY = 1 << 2 + } + + public class CRCBlock + { + public CRCBlockType DataType; + public byte[] Key; + public string KeyAsStr + { + get + { + return Utils.DecodeString(Key); + } + set + { + Key = Utils.EncodeString(value); + } + } + public byte[] Value; + public string ValueAsStr + { + get + { + return Utils.DecodeString(Value); + } + set + { + Value = Utils.EncodeString(value); + } + } + public uint ValueAsInt + { + get + { + return BitConverter.ToUInt32(Value, 0); + } + set + { + Value = BitConverter.GetBytes(value); + } + } + + public void Encode(BinaryWriter writer) + { + uint crc = CRC(); + writer.Write(crc); + writer.Write((uint)DataType); + writer.Write(Key.Length); + writer.Write(Value.Length); + + writer.Write(Key); + writer.Align(8); + + writer.Write(Value); + writer.Align(8); + } + + public static CRCBlock Decode(BinaryReader reader) + { + uint crc = reader.ReadUInt32(); + uint type = reader.ReadUInt32(); + uint lenName = reader.ReadUInt32(); + uint lenVal = reader.ReadUInt32(); + + byte[] key = reader.ReadBytes((int)lenName); + reader.Align(8); + + byte[] value = reader.ReadBytes((int)lenVal); + reader.Align(8); + + CRCBlock block = new CRCBlock + { + DataType = (CRCBlockType)type, + Key = key, + Value = value, + }; + + if (block.CRC() != crc) + { + throw new InvalidDataException("Invalid CRC in variable bag."); + } + + return block; + } + + public uint CRC() + { + BinaryWriter wtemp = new BinaryWriter(new MemoryStream()); + wtemp.Write(0); + wtemp.Write((uint)DataType); + wtemp.Write(Key.Length); + wtemp.Write(Value.Length); + wtemp.Write(Key); + wtemp.Write(Value); + return Utils.CRC32(wtemp.GetBytes()); + } + } + + public class VariableBag + { + public List Blocks = new List(); + + public void Deserialize(byte[] data) + { + int len = data.Length; + + BinaryReader reader = new BinaryReader(new MemoryStream(data)); + + while (reader.BaseStream.Position < len - 0x10) + { + Blocks.Add(CRCBlock.Decode(reader)); + } + } + + public byte[] Serialize() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + + foreach (CRCBlock block in Blocks) + { + block.Encode(writer); + } + + return writer.GetBytes(); + } + + public CRCBlock GetBlock(string key) + { + foreach (CRCBlock block in Blocks) + { + if (block.KeyAsStr == key) + { + return block; + } + } + + return null; + } + + public void SetBlock(string key, byte[] value) + { + for (int i = 0; i < Blocks.Count; i++) + { + CRCBlock block = Blocks[i]; + + if (block.KeyAsStr == key) + { + block.Value = value; + Blocks[i] = block; + break; + } + } + } + + public void DeleteBlock(string key) + { + foreach (CRCBlock block in Blocks) + { + if (block.KeyAsStr == key) + { + Blocks.Remove(block); + return; + } + } + } + + public VariableBag(byte[] data) + { + Deserialize(data); + } + + public VariableBag() + { + + } + } +} +'@ +$ErrorActionPreference = 'Stop' +$cp = [CodeDom.Compiler.CompilerParameters] [string[]]@("System.dll", "System.Core.dll", "System.ServiceProcess.dll", "System.Xml.dll") +$cp.CompilerOptions = "/unsafe" +$lang = If ((Get-Host).Version.Major -gt 2) { "CSharp" } Else { "CSharpVersion3" } + +$ctemp = "$env:SystemRoot\Temp\" +if (-Not (Test-Path -Path $ctemp)) { New-Item -Path $ctemp -ItemType Directory > $null } +$env:TMP = $ctemp +$env:TEMP = $ctemp + +$cp.GenerateInMemory = $true +Add-Type -Language $lang -TypeDefinition $src -CompilerParameters $cp +if ($env:_debug -eq '0') { + [LibTSforge.Logger]::HideOutput = $true +} +$ver = [LibTSforge.Utils]::DetectVersion() +$prod = [LibTSforge.Utils]::DetectCurrentKey() +$tsactids = @($args) + +function Get-WmiInfo { + param ([string]$tsactid, [string]$property) + + $query = "SELECT ID, $property FROM SoftwareLicensingProduct WHERE ID='$tsactid'" + $record = Get-WmiObject -Query $query + if ($record) { + return $record.$property + } +} + +if ($env:resetstuff -eq $null) { + foreach ($tsactid in $tsactids) { + try { + $prodDes = Get-WmiInfo -tsactid $tsactid -property "Description" + $prodName = Get-WmiInfo -tsactid $tsactid -property "Name" + if ($prodName) { + $nameParts = $prodName -split ',', 2 + $prodName = if ($nameParts.Count -gt 1) { ($nameParts[1].Trim() -split '[ ,]')[0] } else { $null } + } + [LibTSforge.Modifiers.GenPKeyInstall]::InstallGenPKey($ver, $prod, $tsactid) + [LibTSforge.Activators.ZeroCID]::Activate($ver, $prod, $tsactid) + $licenseStatus = Get-WmiInfo -tsactid $tsactid -property "LicenseStatus" + if ($licenseStatus -eq 1) { + if ($prodDes -match 'KMS' -and $prodDes -notmatch 'CLIENT') { + [LibTSforge.Modifiers.KMSHostCharge]::Charge($ver, $tsactid, $prod) + Write-Host "[$prodName] CSVLK is permanently activated with ZeroCID." -ForegroundColor White -BackgroundColor DarkGreen + Write-Host "[$prodName] CSVLK is charged with 25 clients for 30 days." -ForegroundColor White -BackgroundColor DarkGreen + } + else { + Write-Host "[$prodName] is permanently activated with ZeroCID." -ForegroundColor White -BackgroundColor DarkGreen + } + } + else { + Write-Host "[$prodName] activation has failed." -ForegroundColor White -BackgroundColor DarkRed + $errcode = 3 + } + } + catch { + $errcode = 3 + Write-Host "$($_.Exception.Message)" -ForegroundColor Red -BackgroundColor Black + Write-Host "[$prodName] activation has failed." -ForegroundColor White -BackgroundColor DarkRed + } + } +} + +if ($env:resetstuff -eq '1') { + try { + [LibTSforge.Modifiers.TamperedFlagsDelete]::DeleteTamperFlags($ver, $prod) + [LibTSforge.SPP.SLApi]::RefreshLicenseStatus() + [LibTSforge.Modifiers.RearmReset]::Reset($ver, $prod) + [LibTSforge.Modifiers.GracePeriodReset]::Reset($ver, $prod) + [LibTSforge.Modifiers.KeyChangeLockDelete]::Delete($ver, $prod) + } + catch { + $errcode = 3 + Write-Host "$($_.Exception.Message)" -ForegroundColor Red -BackgroundColor Black + } +} + +Exit $errcode +:tsforge: + +::======================================================================================================================================== + +:: Get Windows Activation ID + +:wintsid: +$SysPath = "$env:SystemRoot\System32" +if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { + $SysPath = "$env:SystemRoot\Sysnative" +} + +function Windows-ActID { + param ( + [string]$edition, + [string]$keytype + ) + + $filePatterns = @( + "$SysPath\spp\tokens\skus\$edition\$edition*.xrm-ms", + "$SysPath\spp\tokens\skus\Security-SPP-Component-SKU-$edition\*-$edition-*.xrm-ms" + ) + + switch ($keytype) { + "zero" { + $licenseTypes = @('OEM_DM', 'OEM_COA_SLP', 'OEM_COA_NSLP', 'MAK', 'RETAIL') + } + "ks" { + $licenseTypes = @('KMSCLIENT') + } + "avma" { + $licenseTypes = @('VIRTUAL_MACHINE') + } + "kmshost" { + $licenseTypes = @('KMS_') + } + } + + $softwareLicensingProducts = Get-WmiObject -Query "SELECT ID, Description, LicenseFamily FROM SoftwareLicensingProduct WHERE ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f'" | Where-Object { $_.LicenseFamily -eq $edition } + + $orderedLicenses = @() + foreach ($type in $licenseTypes) { + $orderedLicenses += $softwareLicensingProducts | Where-Object { $_.Description -match $type } | Select-Object -ExpandProperty ID + } + + $fileIds = @() + $muiLockedIds = @() + $kmsCountedIdCounts = @{} + + $t = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0) + + $methods = @( + @{name = 'SLOpen'; returnType = [Int32]; parameters = @([IntPtr].MakeByRefType()) }, + @{name = 'SLClose'; returnType = [Int32]; parameters = @([IntPtr]) }, + @{name = 'SLGetProductSkuInformation'; returnType = [Int32]; parameters = @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()) }, + @{name = 'SLGetLicense'; returnType = [Int32]; parameters = @([IntPtr], [Guid].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()) } + ) + + foreach ($method in $methods) { + $t.DefinePInvokeMethod($method.name, 'slc.dll', 22, 1, $method.returnType, $method.parameters, 1, 3).SetImplementationFlags(128) + } + + $w = $t.CreateType() + $m = [Runtime.InteropServices.Marshal] + + function GetLicenseInfo($SkuId, $checkType) { + $result = $false + $c = 0; $b = 0 + + [void]$w::SLGetProductSkuInformation($hSLC, [ref][Guid]$SkuId, "fileId", [ref]$null, [ref]$c, [ref]$b) + $FileId = $m::PtrToStringUni($b) + + $c = 0; $b = 0 + [void]$w::SLGetLicense($hSLC, [ref][Guid]$FileId, [ref]$c, [ref]$b) + $blob = New-Object byte[] $c; $m::Copy($b, $blob, 0, $c) + $cont = [Text.Encoding]::UTF8.GetString($blob) + $xml = [xml]$cont.SubString($cont.IndexOf('\{$id\}" -and -not ($file.Name -match 'Beta|Test')) { + $fileIds += $id + } + } + } + } + } + + if ($kmsCountedIdCounts.Count -gt 0) { + $idWithMostIds = $kmsCountedIdCounts.GetEnumerator() | Sort-Object Value -Descending + $fileIds = $idWithMostIds | Select-Object -ExpandProperty Key + } + else { + if ($fileIds.Count -eq 0) { + $fileIds = $orderedLicenses + } + + $fileIds = $orderedLicenses | Where-Object { $fileIds -contains $_ -and $muiLockedIds -notcontains $_ } | Select-Object -Unique + } + + [void]$w::SLClose($hSLC) + + $pkeyconfig = "$SysPath\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms" + if ($keytype -eq 'kmshost') { + $csvlkPath = "$SysPath\spp\tokens\pkeyconfig\pkeyconfig-csvlk.xrm-ms" + if (Test-Path $csvlkPath) { + $pkeyconfig = $csvlkPath + } + } + + $data = [xml][Text.Encoding]::UTF8.GetString([Convert]::FromBase64String(([xml](get-content $pkeyconfig)).licenseGroup.license.otherInfo.infoTables.infoList.infoBin.InnerText)) + + $betaIds = @() + $excludedIds = @() + $checkedIds = @() + + foreach ($id in $fileIds) { + $actConfig = $data.ProductKeyConfiguration.Configurations.Configuration | Where-Object { $_.ActConfigId -eq "{$id}" } + if ($actConfig) { + $productDescription = $actConfig.ProductDescription + $productEditionID = $actConfig.EditionID + if ($productDescription -match 'MUI locked|Tencent|Qihoo|WAU') { + $excludedIds += $id + continue + } + + if ($productDescription -match 'Beta|RC |Next |Test|Pre-') { + $betaIds += $id + continue + } + + if ($keytype -ne 'kmshost' -and $productEditionID -eq '$edition') { + $checkedIds += $id + continue + } + + $refGroupId = $actConfig.RefGroupId + $publicKey = $data.ProductKeyConfiguration.PublicKeys.PublicKey | Where-Object { $_.GroupId -eq $refGroupId -and $_.AlgorithmId -eq 'msft:rm/algorithm/pkey/2009' } + if ($publicKey) { + $keyRanges = $data.ProductKeyConfiguration.KeyRanges.KeyRange | Where-Object { $_.RefActConfigId -eq "{$id}" } + foreach ($keyRange in $keyRanges) { + if ($keyRange.EulaType -match 'WAU') { + $excludedIds += $id + break + } + } + } + } + } + + $prefinalIds = @() + $finalIds = @() + + $prefinalIds = $fileIds | Where-Object { $excludedIds -notcontains $_ } | Select-Object -Unique + $finalIds = $prefinalIds | Where-Object { $betaIds -notcontains $_ } | Select-Object -Unique + + if ($finalIds.Count -eq 0) { + $finalIds = $prefinalIds + } + + if ($checkedIds.Count -gt 0) { + $finalIds = $checkedIds + $finalIds + } + + $firstId = $finalIds | Select-Object -First 1 + return $firstId.ToLower() +} + +Windows-ActID -edition "$env:tsedition" -keytype "$env:keytype" +:wintsid: + +::======================================================================================================================================== + +:: Get Office Activation ID + +:offtsid: +function Office-ActID { + param ( + [string]$pkeypath, + [string]$edition, + [string]$keytype + ) + + switch ($keytype) { + "zero" { $productKeyTypes = @("OEM:NONSLP","Volume:MAK","Retail") } + "ks" { $productKeyTypes = @("Volume:GVLK") } + } + + $data = [xml][Text.Encoding]::UTF8.GetString([Convert]::FromBase64String(([xml](Get-Content $pkeypath)).licenseGroup.license.otherInfo.infoTables.infoList.infoBin.InnerText)) + $configurations = $data.ProductKeyConfiguration.Configurations.Configuration + + $filteredConfigs = @() + foreach ($type in $productKeyTypes) { + $filteredConfigs += $configurations | Where-Object { + $_.EditionId -eq $edition -and + $_.ProductKeyType -eq $type -and + $_.ProductDescription -notmatch 'demo|MSDN|PIN' + } + } + + $filterPreview = $filteredConfigs | Where-Object { $_.ProductDescription -notmatch 'preview' } + + if ($filterPreview.Count -ne 0) { + $filteredConfigs = $filterPreview + } + + $firstConfig = ($filteredConfigs | Select-Object -First 1).ActConfigID -replace '^\{|\}$', '' + return $firstConfig.ToLower() +} + +Office-ActID -pkeypath "$env:pkeypath" -edition "$env:_License" -keytype "$env:keytype" +:offtsid: + +::======================================================================================================================================== + +:: 1st column = Office version number +:: 2nd column = Activation ID +:: 3rd column = Edition +:: Separator = "_" + +:ts_msiofficedata + +for %%# in ( +:: Office 2013 +15_ab4d047b-97cf-4126-a69f-34df08e2f254_AccessRetail +15_259de5be-492b-44b3-9d78-9645f848f7b0_AccessRuntimeRetail +15_4374022d-56b8-48c1-9bb7-d8f2fc726343_AccessVolume +15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_ExcelRetail +15_ac1ae7fd-b949-4e04-a330-849bc40638cf_ExcelVolume +15_cfaf5356-49e3-48a8-ab3c-e729ab791250_GrooveRetail +15_4825ac28-ce41-45a7-9e6e-1fed74057601_GrooveVolume +15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail +15_a2b90e7a-a797-4713-af90-f0becf52a1dd_HomeBusinessRetail +15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_HomeStudentARMRetail +15_ebef9f05-5273-404a-9253-c5e252f50555_HomeStudentPlusARMRetail +15_f2de350d-3028-410a-bfae-283e00b44d0e_HomeStudentRetail +15_44984381-406e-4a35-b1c3-e54f499556e2_InfoPathRetail +15_9e016989-4007-42a6-8051-64eb97110cf2_InfoPathVolume +15_9103f3ce-1084-447a-827e-d6097f68c895_LyncAcademicRetail +15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_LyncEntryRetail +15_fada6658-bfc6-4c4e-825a-59a89822cda8_LyncRetail +15_e1264e10-afaf-4439-a98b-256df8bb156f_LyncVolume +15_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail +15_f33485a0-310b-4b72-9a0e-b1d605510dbd_MondoVolume +15_3391e125-f6e4-4b1e-899c-a25e6092d40d_OneNoteFreeRetail +15_8b524bcc-67ea-4876-a509-45e46f6347e8_OneNoteRetail +15_b067e965-7521-455b-b9f7-c740204578a2_OneNoteVolume +15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_OutlookRetail +15_8d577c50-ae5e-47fd-a240-24986f73d503_OutlookVolume +15_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail +15_17e9df2d-ed91-4382-904b-4fed6a12caf0_PersonalRetail +15_31743b82-bfbc-44b6-aa12-85d42e644d5b_PowerPointRetail +15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_PowerPointVolume +15_064383fa-1538-491c-859b-0ecab169a0ab_ProPlusRetail +15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_ProPlusVolume +15_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail +15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_ProfessionalRetail +15_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail +15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_ProjectProVolume +15_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail +15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_ProjectStdVolume +15_c3a0814a-70a4-471f-af37-2313a6331111_PublisherRetail +15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_PublisherVolume +15_ba3e3833-6a7e-445a-89d0-7802a9a68588_SPDRetail +15_32255c0a-16b4-4ce2-b388-8a4267e219eb_StandardRetail +15_a24cca51-3d54-4c41-8a76-4031f5338cb2_StandardVolume +15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail +15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_VisioProVolume +15_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail +15_44a1f6ff-0876-4edb-9169-dbb43101ee89_VisioStdVolume +15_191509f2-6977-456f-ab30-cf0492b1e93a_WordRetail +15_9cedef15-be37-4ff0-a08a-13a045540641_WordVolume +:: Office 365 - 15.0 version +15_742178ed-6b28-42dd-b3d7-b7c0ea78741b_O365BusinessRetail +15_a96f8dae-da54-4fad-bdc6-108da592707a_O365HomePremRetail +15_e3dacc06-3bc2-4e13-8e59-8e05f3232325_O365ProPlusRetail +15_0bc1dae4-6158-4a1c-a893-807665b934b2_O365SmallBusPremRetail +:: Office 365 - 16.0 version +16_742178ed-6b28-42dd-b3d7-b7c0ea78741b_O365BusinessRetail +16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_O365EduCloudRetail +16_a96f8dae-da54-4fad-bdc6-108da592707a_O365HomePremRetail +16_e3dacc06-3bc2-4e13-8e59-8e05f3232325_O365ProPlusRetail +16_0bc1dae4-6158-4a1c-a893-807665b934b2_O365SmallBusPremRetail +:: Office 2016 +16_bfa358b0-98f1-4125-842e-585fa13032e6_AccessRetail +16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_AccessRuntimeRetail +16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_AccessVolume +16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_ExcelRetail +16_685062a7-6024-42e7-8c5f-6bb9e63e697f_ExcelVolume +16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail +16_86834d00-7896-4a38-8fae-32f20b86fa2b_HomeBusinessRetail +16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_HomeStudentARMRetail +16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_HomeStudentPlusARMRetail +16_c28acdb8-d8b3-4199-baa4-024d09e97c99_HomeStudentRetail +16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_HomeStudentVNextRetail +16_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail +16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_MondoVolume +16_436366de-5579-4f24-96db-3893e4400030_OneNoteFreeRetail +16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_OneNoteRetail +16_23b672da-a456-4860-a8f3-e062a501d7e8_OneNoteVolume +16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_OutlookRetail +16_50059979-ac6f-4458-9e79-710bcb41721a_OutlookVolume +16_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail +16_a9f645a1-0d6a-4978-926a-abcb363b72a6_PersonalRetail +16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_PowerPointRetail +16_9b4060c9-a7f5-4a66-b732-faf248b7240f_PowerPointVolume +16_de52bd50-9564-4adc-8fcb-a345c17f84f9_ProPlusRetail +16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_ProPlusVolume +16_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail +16_d64edc00-7453-4301-8428-197343fafb16_ProfessionalRetail +16_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail +16_82f502b5-b0b0-4349-bd2c-c560df85b248_ProjectProVolume +16_16728639-a9ab-4994-b6d8-f81051e69833_ProjectProXVolume +16_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail +16_82e6b314-2a62-4e51-9220-61358dd230e6_ProjectStdVolume +16_431058f0-c059-44c5-b9e7-ed2dd46b6789_ProjectStdXVolume +16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_PublisherRetail +16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_PublisherVolume +16_9103f3ce-1084-447a-827e-d6097f68c895_SkypeServiceBypassRetail +16_971cd368-f2e1-49c1-aedd-330909ce18b6_SkypeforBusinessEntryRetail +16_418d2b9f-b491-4d7f-84f1-49e27cc66597_SkypeforBusinessRetail +16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_SkypeforBusinessVolume +16_4a31c291-3a12-4c64-b8ab-cd79212be45e_StandardRetail +16_0ed94aac-2234-4309-ba29-74bdbb887083_StandardVolume +16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail +16_295b2c03-4b1c-4221-b292-1411f468bd02_VisioProVolume +16_0594dc12-8444-4912-936a-747ca742dbdb_VisioProXVolume +16_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail +16_44151c2d-c398-471f-946f-7660542e3369_VisioStdVolume +16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_VisioStdXVolume +16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_WordRetail +16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_WordVolume +) do ( +for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( + +if "%oVer%"=="%%A" ( +for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" +set prodId=!prodId:"/>=! +set prodId=!prodId:~-4! +if "%oVer%"=="14" ( +REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml +echo %%C | find /i "Visio" %nul% && set prodId=0057 +) +reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( +reg query "%1\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%C) else (set _oIds=%%C) +) +) +) + +) +) +exit /b + +::======================================================================================================================================== + +:ts_getedition + +set tsedition= +set _wtarget= + +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 call set "_wtarget= !_wtarget! %%a " + +:: SKU and Edition ID database + +for %%# in ( +1:Ultimate +2:HomeBasic +3:HomePremium +4:Enterprise +5:HomeBasicN +6:Business +7:ServerStandard +8:ServerDatacenter +9:ServerSBSStandard +10:ServerEnterprise +11:Starter +12:ServerDatacenterCore +13:ServerStandardCore +14:ServerEnterpriseCore +15:ServerEnterpriseIA64 +16:BusinessN +17:ServerWeb +18:ServerHPC +19:ServerHomeStandard +20:ServerStorageExpress +21:ServerStorageStandard +22:ServerStorageWorkgroup +23:ServerStorageEnterprise +24:ServerWinSB +25:ServerSBSPremium +26:HomePremiumN +27:EnterpriseN +28:UltimateN +29:ServerWebCore +30:ServerMediumBusinessManagement +31:ServerMediumBusinessSecurity +32:ServerMediumBusinessMessaging +33:ServerWinFoundation +34:ServerHomePremium +35:ServerWinSBV +36:ServerStandardV +37:ServerDatacenterV +38:ServerEnterpriseV +39:ServerDatacenterVCore +40:ServerStandardVCore +41:ServerEnterpriseVCore +42:ServerHyperCore +43:ServerStorageExpressCore +44:ServerStorageStandardCore +45:ServerStorageWorkgroupCore +46:ServerStorageEnterpriseCore +47:StarterN +48:Professional +49:ProfessionalN +50:ServerSolution +51:ServerForSBSolutions +52:ServerSolutionsPremium +53:ServerSolutionsPremiumCore +54:ServerSolutionEM +55:ServerForSBSolutionsEM +56:ServerEmbeddedSolution +57:ServerEmbeddedSolutionCore +58:ProfessionalEmbedded +59:ServerEssentialManagement +60:ServerEssentialAdditional +61:ServerEssentialManagementSvc +62:ServerEssentialAdditionalSvc +63:ServerSBSPremiumCore +64:ServerHPCV +65:Embedded +66:StarterE +67:HomeBasicE +68:HomePremiumE +69:ProfessionalE +70:EnterpriseE +71:UltimateE +72:EnterpriseEval +74:Prerelease +76:ServerMultiPointStandard +77:ServerMultiPointPremium +79:ServerStandardEval +80:ServerDatacenterEval +81:PrereleaseARM +82:PrereleaseN +84:EnterpriseNEval +85:EmbeddedAutomotive +86:EmbeddedIndustryA +87:ThinPC +88:EmbeddedA +89:EmbeddedIndustry +90:EmbeddedE +91:EmbeddedIndustryE +92:EmbeddedIndustryAE +93:ProfessionalPlus +95:ServerStorageWorkgroupEval +96:ServerStorageStandardEval +97:CoreARM +98:CoreN +99:CoreCountrySpecific +100:CoreSingleLanguage +101:Core +103:ProfessionalWMC +104:MobileCore +105:EmbeddedIndustryEval +106:EmbeddedIndustryEEval +107:EmbeddedEval +108:EmbeddedEEval +109:CoreSystemServer +110:ServerCloudStorage +111:CoreConnected +112:ProfessionalStudent +113:CoreConnectedN +114:ProfessionalStudentN +115:CoreConnectedSingleLanguage +116:CoreConnectedCountrySpecific +117:ConnectedCar +118:IndustryHandheld +119:PPIPRO +120:ServerARM64 +121:Education +122:EducationN +123:IoTUAP +124:ServerHI +125:EnterpriseS +126:EnterpriseSN +127:ProfessionalS +128:ProfessionalSN +129:EnterpriseSEval +130:EnterpriseSNEval +131:IoTUAPCommercial +133:MobileEnterprise +134:AnalogOneCoreEnterprise +135:AnalogOneCore +136:Holographic +138:ProfessionalSingleLanguage +139:ProfessionalCountrySpecific +140:EnterpriseSubscription +141:EnterpriseSubscriptionN +143:ServerDatacenterNano +144:ServerStandardNano +145:ServerDatacenterACor +146:ServerStandardACor +147:ServerDatacenterCor +148:ServerStandardCor +149:UtilityVM +159:ServerDatacenterEvalCor +160:ServerStandardEvalCor +161:ProfessionalWorkstation +162:ProfessionalWorkstationN +163:ServerAzure +164:ProfessionalEducation +165:ProfessionalEducationN +168:ServerAzureCor +169:ServerAzureNano +171:EnterpriseG +172:EnterpriseGN +173:BusinessSubscription +174:BusinessSubscriptionN +175:ServerRdsh +178:Cloud +179:CloudN +180:HubOS +182:OneCoreUpdateOS +183:CloudE +184:Andromeda +185:IoTOS +186:CloudEN +187:IoTEdgeOS +188:IoTEnterprise +189:ModernPC +191:IoTEnterpriseS +192:SystemOS +193:NativeOS +194:GameCoreXbox +195:GameOS +196:DurangoHostOS +197:ScarlettHostOS +198:Keystone +199:CloudHost +200:CloudMOS +201:CloudCore +202:CloudEditionN +203:CloudEdition +204:WinVOS +205:IoTEnterpriseSK +206:IoTEnterpriseK +207:IoTEnterpriseSEval +208:AgentBridge +209:NanoHost +210:WNC +406:ServerAzureStackHCICor +407:ServerTurbine +408:ServerTurbineCor + +REM Some old edition names with same SKU ID + +4:ProEnterprise +6:ProStandard +10:ProSBS +16:ProStandardN +18:ServerComputeCluster +19:ServerHome +30:ServerMidmarketStandard +31:ServerMidmarketEdge +32:ServerMidmarketPremium +33:ServerSBSPrime +42:ServerHyper +64:ServerComputeClusterV +85:EmbeddedIapetus +86:EmbeddedTethys +88:EmbeddedDione +89:EmbeddedRhea +90:EmbeddedEnceladus +109:ServerNano +124:ServerCloudHostInfrastructure +133:MobileBusiness +134:HololensEnterprise +145:ServerDatacenterSCor +146:ServerStandardSCor +147:ServerDatacenterWSCor +148:ServerStandardWSCor +189:Lite +) do ( +for /f "tokens=1-2 delims=:" %%A in ("%%#") do if "%osSKU%"=="%%A" if not defined tsedition ( +echo "%_wtarget%" | find /i " %%B " %nul% && set tsedition=%%B +) +) + +if defined tsedition exit /b + +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionNameFromId', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [IntPtr].MakeByRefType()), 1, 3); +set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionNameFromId(%osSKU%, [ref]$out);$s=[Runtime.InteropServices.Marshal]::PtrToStringUni($out); $s + +for %%# in (pkeyhelper.dll) do @if not "%%~$PATH:#"=="" ( +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 ( +echo "%_wtarget%" | find /i " %%a " %nul% && set tsedition=%%a +) +) + +exit /b + +:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + :KMS38Activation :: To activate, run the script with "/KMS38" parameter or change 0 to 1 in below line @@ -3585,9 +9592,9 @@ echo Unsupported OS version detected [%winbuild%]. echo KMS38 activation is only supported on Windows 10/11/Server, build 14393 and later. echo: if %winbuild% LSS 10240 ( -call :dk_color %Blue% "Use Online KMS activation option." +call :dk_color %Blue% "Use TSforge activation option from the main menu." ) else ( -call :dk_color %Blue% "Use HWID activation option." +call :dk_color %Blue% "Use HWID activation option from the main menu." ) goto dk_done ) @@ -3703,7 +9710,8 @@ echo Server Evaluation cannot be activated. Convert it to full Server OS. echo: call :dk_color %Blue% "Go Back to main menu and use [Change Edition] option." ) else ( -echo Evaluation editions cannot be activated outside of their evaluation period. +echo Evaluation editions cannot be activated outside of their evaluation period. +call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." echo: set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -3813,7 +9821,7 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" if not defined skunotfound if not defined sppks ( call :dk_color %Red% "This product does not support KMS38 activation." -call :dk_color %Blue% "Make sure you are using the latest version of the script." +call :dk_color %Blue% "Use TSforge activation option from the main menu." set fixes=%fixes% %mas% echo %mas% ) @@ -4572,6 +10580,7 @@ call :dk_color %Red% "Checking Evaluation Edition [Evaluation editio if defined _evalserv ( call :dk_color %Blue% "Go back to main menu and use [Change Edition] option." ) else ( +call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) @@ -4634,10 +10643,7 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" if not defined skunotfound if not defined sppks ( call :dk_color %Red% "This product does not support %KS% activation." -if %winbuild% LSS 9200 ( -call :dk_color2 %Blue% "Use the alternative activator listed here - " %_Yellow% " %mas%unsupported_products_activation" -) -set fixes=%fixes% %mas%unsupported_products_activation +call :dk_color %Blue% "Use TSforge activation option from the main menu." ) echo: goto :ks_office @@ -5598,8 +11604,7 @@ if defined t_name ( echo %prodname% cannot be KMS-activated on this computer due to unqualified OEM BIOS [0xC004F035]. ) else ( call :dk_color %Red% "%prodname% cannot be KMS-activated on this computer due to unqualified OEM BIOS [0xC004F035]." -set fixes=%fixes% %mas%unsupported_products_activation -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%unsupported_products_activation" +call :dk_color %Blue% "Use TSforge activation option from the main menu." ) set oemerr=1 set showfix=1 diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index b88f42a..6b960f8 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.9 +@set masver=3.0 @echo off @@ -161,19 +161,29 @@ for %%A in (%_act% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1) call :dk_setvar +if %winbuild% EQU 1 ( +%eline% +echo Failed to detect Windows build number. +echo: +setlocal EnableDelayedExpansion +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + if %winbuild% LSS 10240 ( %eline% echo Unsupported OS version detected [%winbuild%]. echo HWID Activation is only supported on Windows 10/11. echo: -call :dk_color %Blue% "Use Online KMS activation option." +call :dk_color %Blue% "Use TSforge activation option from the main menu." goto dk_done ) if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( %eline% echo HWID Activation is not supported on Windows Server. -call :dk_color %Blue% "Use KMS38 or Online KMS activation option." +call :dk_color %Blue% "Use TSforge activation option from the main menu." goto dk_done ) @@ -294,9 +304,13 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( +if not "%%#"=="" set old=1 +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( +if not "%%#"=="" set old= +) ) if defined old ( @@ -312,7 +326,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem -if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) +if !errorlevel!==1 (start %mas% & exit /b) ) ) @@ -380,7 +394,8 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2 %eline% echo [%winos% ^| %winbuild%] echo: -echo Evaluation editions cannot be activated outside of their evaluation period. +echo Evaluation editions cannot be activated outside of their evaluation period. +call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." echo: set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -464,7 +479,7 @@ echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] if not defined skunotfound ( echo This product does not support HWID activation. echo Make sure you are using the latest version of the script. -echo If you are, then try KMS38 activation option. +echo If you are, then try TSforge activation option from the main menu. set fixes=%fixes% %mas% echo %mas% ) else ( @@ -725,7 +740,7 @@ call :dk_color %Green% "%winos% is permanently activated with a digital license. call :dk_color %Red% "Activation Failed %error_code%" if defined notworking ( call :dk_color %Blue% "At the time of writing, HWID Activation is not supported for this product." -call :dk_color %Blue% "Use KMS38 activation option instead." +call :dk_color %Blue% "Use TSforge activation option from the main menu instead." ) else ( if not defined error call :dk_color %Blue% "%_fixmsg%" set fixes=%fixes% %mas%troubleshoot diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 80cb7c6..7ae669d 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.9 +@set masver=3.0 @echo off @@ -167,15 +167,25 @@ set _k38= call :dk_setvar set "specific_kms=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f" +if %winbuild% EQU 1 ( +%eline% +echo Failed to detect Windows build number. +echo: +setlocal EnableDelayedExpansion +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + if %winbuild% LSS 14393 ( %eline% echo Unsupported OS version detected [%winbuild%]. echo KMS38 activation is only supported on Windows 10/11/Server, build 14393 and later. echo: if %winbuild% LSS 10240 ( -call :dk_color %Blue% "Use Online KMS activation option." +call :dk_color %Blue% "Use TSforge activation option from the main menu." ) else ( -call :dk_color %Blue% "Use HWID activation option." +call :dk_color %Blue% "Use HWID activation option from the main menu." ) goto dk_done ) @@ -297,9 +307,13 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( +if not "%%#"=="" set old=1 +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( +if not "%%#"=="" set old= +) ) if defined old ( @@ -315,7 +329,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem -if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) +if !errorlevel!==1 (start %mas% & exit /b) ) ) cls @@ -431,7 +445,8 @@ echo Server Evaluation cannot be activated. Convert it to full Server OS. echo: call :dk_color %Blue% "Go Back to main menu and use [Change Edition] option." ) else ( -echo Evaluation editions cannot be activated outside of their evaluation period. +echo Evaluation editions cannot be activated outside of their evaluation period. +call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." echo: set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" @@ -541,7 +556,7 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" if not defined skunotfound if not defined sppks ( call :dk_color %Red% "This product does not support KMS38 activation." -call :dk_color %Blue% "Make sure you are using the latest version of the script." +call :dk_color %Blue% "Use TSforge activation option from the main menu." set fixes=%fixes% %mas% echo %mas% ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index e8766ee..454644c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1,4 +1,4 @@ -@set masver=2.9 +@set masver=3.0 @echo off @@ -161,6 +161,16 @@ for %%A in (%_act% %_rem%) do (if "%%A"=="1" set _unattended=1) call :dk_setvar +if %winbuild% EQU 1 ( +%eline% +echo Failed to detect Windows build number. +echo: +setlocal EnableDelayedExpansion +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + if %winbuild% LSS 9200 ( %eline% echo Unsupported OS version detected [%winbuild%]. @@ -287,9 +297,13 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( +if not "%%#"=="" set old=1 +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( +if not "%%#"=="" set old= +) ) if defined old ( @@ -305,7 +319,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem -if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) +if !errorlevel!==1 (start %mas% & exit /b) ) ) cls @@ -520,11 +534,11 @@ echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") set "_oLPath=%_oRoot%\Licenses" set "_oIntegrator=%_oRoot%\integration\integrator.exe" -if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") -if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") +if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") +if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") if not "%osarch%"=="x86" ( -if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) @@ -570,11 +584,11 @@ set _o16c2rIds=%_oIds% set "_oLPath=%_oRoot%\Licenses16" set "_oIntegrator=%_oRoot%\integration\integrator.exe" -if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") -if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") +if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") +if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") if not "%osarch%"=="x86" ( -if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) @@ -1020,11 +1034,11 @@ echo "%2" | find /i "Wow6432Node" %nul1% && set _oArch=x86 if not "%osarch%"=="x86" if not defined _oArch set _oArch=x64 if "%osarch%"=="x86" set _oArch=x86 -if "%_oArch%"=="x64" (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") -if "%_oArch%"=="x86" (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") +if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") +if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") if not "%osarch%"=="x86" ( -if "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" ) else ( set "_sppcPath=%SystemRoot%\System32\sppc.dll" ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 7c9a45e..519c1bd 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=2.9 +@set masver=3.0 @echo off @@ -192,6 +192,16 @@ for %%A in (%_actwin% %_actoff% %_actprojvis% %_actwinoff% %_uni%) do (if "%%A"= call :dk_setvar +if %winbuild% EQU 1 ( +%eline% +echo Failed to detect Windows build number. +echo: +setlocal EnableDelayedExpansion +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. @@ -316,9 +326,13 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( +if not "%%#"=="" set old=1 +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( +if not "%%#"=="" set old= +) ) if defined old ( @@ -334,7 +348,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem -if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) +if !errorlevel!==1 (start %mas% & exit /b) ) ) @@ -520,6 +534,7 @@ call :dk_color %Red% "Checking Evaluation Edition [Evaluation editio if defined _evalserv ( call :dk_color %Blue% "Go back to main menu and use [Change Edition] option." ) else ( +call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) @@ -582,10 +597,7 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" if not defined skunotfound if not defined sppks ( call :dk_color %Red% "This product does not support %KS% activation." -if %winbuild% LSS 9200 ( -call :dk_color2 %Blue% "Use the alternative activator listed here - " %_Yellow% " %mas%unsupported_products_activation" -) -set fixes=%fixes% %mas%unsupported_products_activation +call :dk_color %Blue% "Use TSforge activation option from the main menu." ) echo: goto :ks_office @@ -1828,8 +1840,7 @@ if defined t_name ( echo %prodname% cannot be KMS-activated on this computer due to unqualified OEM BIOS [0xC004F035]. ) else ( call :dk_color %Red% "%prodname% cannot be KMS-activated on this computer due to unqualified OEM BIOS [0xC004F035]." -set fixes=%fixes% %mas%unsupported_products_activation -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%unsupported_products_activation" +call :dk_color %Blue% "Use TSforge activation option from the main menu." ) set oemerr=1 set showfix=1 diff --git a/MAS/Separate-Files-Version/Activators/ReadMe.txt b/MAS/Separate-Files-Version/Activators/ReadMe.txt deleted file mode 100644 index 4990391..0000000 --- a/MAS/Separate-Files-Version/Activators/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ --------------------------------------------------------------------------------------- -Activation Type Supported Product Activation Period --------------------------------------------------------------------------------------- - -HWID - Windows 10-11 - Permanent -Ohook - Office - Permanent -KMS38 - Windows 10-11-Server - Till the Year 2038 -Online KMS - Windows / Office - 180 Days. Lifetime With Renewal Task - --------------------------------------------------------------------------------------- - -For more details, use the respective docs section here https://massgrave.dev/ \ No newline at end of file diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd new file mode 100644 index 0000000..030e406 --- /dev/null +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -0,0 +1,7408 @@ +@set masver=3.0 +@echo off + + + +::============================================================================ +:: +:: Homepage: mass grave[.]dev +:: Email: mas.help@outlook.com +:: +::============================================================================ + + + +:: To activate Windows, run the script with "/Z-Windows" parameter or change 0 to 1 in below line +set _actwin=0 + +:: To activate Windows ESU, run the script with "/Z-ESU" parameter or change 0 to 1 in below line +set _actesu=0 + +:: To activate all Office apps (including Project/Visio), run the script with "/Z-Office" parameter or change 0 to 1 in below line +set _actoff=0 + +:: To activate only Project/Visio, run the script with "/Z-ProjectVisio" parameter or change 0 to 1 in below line +set _actprojvis=0 + +:: To activate all Windows/ESU/Office, run the script with "/Z-WindowsESUOffice" parameter or change 0 to 1 in below line +set _actwinesuoff=0 + +:: Advanced options: +:: To activate Windows K-M-S host (csvlk), run the script with "/Z-WinHost" parameter or change 0 to 1 in below line +set _actwinhost=0 + +:: To activate Office K-M-S host (csvlk), run the script with "/Z-OffHost" parameter or change 0 to 1 in below line +set _actoffhost=0 + +:: To activate Windows 8/8.1 APPX Sideloading (APPXLOB), run the script with "/Z-APPX" parameter or change 0 to 1 in below line +set _actappx=0 + +:: To activate certain activation IDs, change 0 to 1 in below line and set activation IDs in "tsids" variable, you can enter multiple by adding a space after each of them +:: or run the script with "/Z-ID-ActivationIdGoesHere" parameter. If you want to add multiple through parameter, pass each of them in separate parameters +set _actman= +set tsids= + +:: To reset rearm counter, evaluation period and clear the tamper state, key lock, run the script with "/Z-Reset" parameter or change 0 to 1 in below line +set _resall=0 + +:: Debug Mode: +:: To run the script in debug mode, change 0 to any parameter above that you want to run, in below line +set "_debug=0" + +:: Script will run in unattended mode if parameters are used OR value is changed in above lines. +:: If multiple options are selected then script will only pick one from the advanced option. + + + +::======================================================================================================================================== + +:: Set environment variables, it helps if they are misconfigured in the system + +setlocal EnableExtensions +setlocal DisableDelayedExpansion + +set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" + +set "SysPath=%SystemRoot%\System32" +set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" +if exist "%SystemRoot%\Sysnative\reg.exe" ( +set "SysPath=%SystemRoot%\Sysnative" +set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" +) + +set "ComSpec=%SysPath%\cmd.exe" +set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" + +set re1= +set re2= +set "_cmdf=%~f0" +for %%# in (%*) do ( +if /i "%%#"=="re1" set re1=1 +if /i "%%#"=="re2" set re2=1 +) + +:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows +:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows + +if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 ( +setlocal EnableDelayedExpansion +start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1" +exit /b +) + +:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows + +if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 ( +setlocal EnableDelayedExpansion +start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2" +exit /b +) + +::======================================================================================================================================== + +:: Debug code + +if "%_debug%" EQU "0" ( +set "nul1=1>nul" +set "nul2=2>nul" +set "nul6=2^>nul" +set "nul=>nul 2>&1" +goto :_debug +) + +set "nul1=" +set "nul2=" +set "nul6=" +set "nul=" + +@echo on +@prompt $G +@call :_debug "%_debug%" >"%~dp0_tmp.log" 2>&1 +@cmd /u /c type "%~dp0_tmp.log">"%~dp0_Debug.log" +@del "%~dp0_tmp.log" +@echo off +@exit /b + +:_debug + +::======================================================================================================================================== + +set "blank=" +set "mas=ht%blank%tps%blank%://mass%blank%grave.dev/" + +:: Check if Null service is working, it's important for the batch script + +sc query Null | find /i "RUNNING" +if %errorlevel% NEQ 0 ( +echo: +echo Null service is not running, script may crash... +echo: +echo: +echo Help - %mas%fix_service +echo: +echo: +ping 127.0.0.1 -n 20 +) +cls + +:: Check LF line ending + +pushd "%~dp0" +>nul findstr /v "$" "%~nx0" && ( +echo: +echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. +echo: +echo: +echo Help - %mas%troubleshoot +echo: +echo: +ping 127.0.0.1 -n 20 >nul +popd +exit /b +) +popd + +::======================================================================================================================================== + +cls +color 07 +set KS=K%blank%MS +title TSforge Activation %masver% + +set _args= +set _elev= +set _unattended=0 + +set _args=%* +if defined _args set _args=%_args:"=% +if defined _args set _args=%_args:re1=% +if defined _args set _args=%_args:re2=% +if defined _args for %%A in (%_args%) do ( +if /i "%%A"=="-el" (set _elev=1) +if /i "%%A"=="/Z-Windows" (set _actwin=1) +if /i "%%A"=="/Z-ESU" (set _actesu=1) +if /i "%%A"=="/Z-Office" (set _actoff=1) +if /i "%%A"=="/Z-ProjectVisio" (set _actprojvis=1) +if /i "%%A"=="/Z-WindowsESUOffice" (set _actwinesuoff=1) +if /i "%%A"=="/Z-WinHost" (set _actwinhost=1) +if /i "%%A"=="/Z-OffHost" (set _actoffhost=1) +if /i "%%A"=="/Z-APPX" (set _actappx=1) +echo "%%A" | find /i "/Z-ID-" >nul && (set _actman=1& set "filtsids=%%A" & call set "filtsids=%%filtsids:~6%%" & if defined filtsids call set tsids=%%filtsids%% %%tsids%%) +if /i "%%A"=="/Z-Reset" (set _resall=1) +) + +if not defined tsids set _actman=0 +for %%A in (%_actwin% %_actesu% %_actoff% %_actprojvis% %_actwinesuoff% %_actwinhost% %_actoffhost% %_actappx% %_actman% %_resall%) do (if "%%A"=="1" set _unattended=1) + +::======================================================================================================================================== + +call :dk_setvar + +if %winbuild% EQU 1 ( +%eline% +echo Failed to detect Windows build number. +echo: +setlocal EnableDelayedExpansion +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +if %winbuild% LSS 7600 ( +%nceline% +echo Unsupported OS version detected [%winbuild%]. +echo MAS only supports Windows 7/8/8.1/10/11 and their Server equivalents. +goto dk_done +) + +::======================================================================================================================================== + +:: Fix special character limitations in path name + +set "_work=%~dp0" +if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" + +set "_batf=%~f0" +set "_batp=%_batf:'=''%" + +set _PSarg="""%~f0""" -el %_args% +set _PSarg=%_PSarg:'=''% + +set "_ttemp=%userprofile%\AppData\Local\Temp" + +setlocal EnableDelayedExpansion + +::======================================================================================================================================== + +echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( +if /i not "!_work!"=="!_ttemp!" ( +%eline% +echo The script was launched from the temp folder. +echo You are most likely running the script directly from the archive file. +echo: +echo Extract the archive file and launch the script from the extracted folder. +goto dk_done +) +) + +::======================================================================================================================================== + +:: Check PowerShell + +REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: + +cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( +%eline% +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo: +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( +echo Failed to run Powershell command but Powershell is working. +echo: +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) || ( +echo PowerShell is not working. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +) +goto dk_done +) + +::======================================================================================================================================== + +:: Elevate script as admin and pass arguments and preventing loop + +%nul1% fltmc || ( +if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg!\"' -verb runas" && exit /b +%eline% +echo This script needs admin rights. +echo Right click on this script and select 'Run as administrator'. +goto dk_done +) + +::======================================================================================================================================== + +:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app + +if %winbuild% GEQ 17763 ( +set terminal=1 +) else ( +set terminal= +) + +:: Check if script is running in Terminal app + +set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); +set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); +set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); +set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); +set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); + +if defined terminal ( +%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +) + +if defined ps32onArm goto :skipQE +if %_unattended%==1 goto :skipQE +for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) + +if defined terminal ( +set "launchcmd=start conhost.exe %psc%" +) else ( +set "launchcmd=%psc%" +) + +:: Disable QuickEdit in current session + +set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" +set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" +set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" +set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" + +%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) +:skipQE + +::======================================================================================================================================== + +:: Check for updates + +set -= +set old= +set upver=%masver:.=% + +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( +if not "%%#"=="" set old=1 +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( +if not "%%#"=="" set old= +) +) + +if defined old ( +echo ________________________________________________ +%eline% +echo Your version of MAS [%masver%] is outdated. +echo ________________________________________________ +echo: +if not %_unattended%==1 ( +echo [1] Get Latest MAS +echo [0] Continue Anyway +echo: +call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" +choice /C:10 /N +if !errorlevel!==2 rem +if !errorlevel!==1 (start %mas% & exit /b) +) +) + +::======================================================================================================================================== + +:ts_menu + +if %_unattended%==0 ( +cls +if not defined terminal mode 76, 33 +title TSforge Activation %masver% + +echo: +echo: +echo: +echo ______________________________________________________________ +echo: +echo [1] Activate - Windows +echo [2] Activate - Windows [ESU] +echo [3] Activate - Office [All] +echo [4] Activate - Office [Project/Visio] +echo [5] Activate - All +echo _______________________________________________ +echo: +echo Advanced Options: +echo: +echo [A] Activate - Windows %KS% Host +echo [B] Activate - Office %KS% Host +echo [C] Activate - Windows 8/8.1 APPX Sideloading +echo [D] Activate - Manually Select Products +echo [E] Reset - Rearm/Timers/Tamper/Lock +echo _______________________________________________ +echo: +echo [6] Remove TSforge Activation +echo [7] Download Office +echo [0] %_exitmsg% +echo ______________________________________________________________ +echo: +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard..." +choice /C:12345ABCDE670 /N +set _el=!errorlevel! + +if !_el!==13 exit /b +if !_el!==12 start %mas%genuine-installation-media & goto :ts_menu +if !_el!==11 call :ts_remove & cls & goto :ts_menu +if !_el!==10 cls & setlocal & set "_resall=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==9 cls & setlocal & set "_actman=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==8 cls & setlocal & set "_actappx=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==7 cls & setlocal & set "_actoffhost=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==6 cls & setlocal & set "_actwinhost=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==5 cls & setlocal & set "_actwinesuoff=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==4 cls & setlocal & set "_actprojvis=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==3 cls & setlocal & set "_actoff=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==2 cls & setlocal & set "_actesu=1" & call :ts_start & endlocal & cls & goto :ts_menu +if !_el!==1 cls & setlocal & set "_actwin=1" & call :ts_start & endlocal & cls & goto :ts_menu +goto :ts_menu +) + +::======================================================================================================================================== + +:ts_start + +cls + +if %_actwinesuoff%==1 (set height=38) else (set height=32) +if not defined terminal ( +mode 125, %height% +if exist "%SysPath%\spp\store_test\" mode 134, %height% +%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=%height%;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% +) +title TSforge Activation %masver% + +echo: +echo Initializing... +call :dk_chkmal + +if not exist %SysPath%\sppsvc.exe ( +%eline% +echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +for /f "delims=" %%a in ('%psc% "[System.Environment]::Version.Major" %nul6%') do if "%%a"=="2" ( +reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /v Install %nul2% | find /i "0x1" %nul1% || ( +%eline% +echo .NET 3.5 Framework is corrupt or missing. Aborting... +if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-Embedded" ( +echo Install .NET Framework 4.8 and Windows Management Framework 5.1 +) +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) +) + +if %winbuild% LSS 9200 if exist "%SysPath%\wlms\wlms.exe" ( +sc query wlms | find /i "RUNNING" %nul% && ( +sc stop sppsvc %nul% +if !errorlevel! EQU 1051 ( +%eline% +echo Evaluation WLMS service is running, sppsvc service can not be stopped. Aborting... +echo Install Non-Eval version for Windows build %winbuild%. +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) +) +) + +::======================================================================================================================================== + +if %_actwinesuoff%==1 (set "_actwin=1" & set "_actesu=1" & set "_actoff=1") +if %_actprojvis%==1 (set "_actoff=1") + +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService + +call :dk_ckeckwmic +call :dk_checksku +call :dk_product +call :dk_sppissue + +::======================================================================================================================================== + +set error= + +cls +echo: +call :dk_showosinfo + +echo Initiating Diagnostic Tests... + +set "_serv=sppsvc Winmgmt" + +:: Software Protection +:: Windows Management Instrumentation + +call :dk_errorcheck + +if defined error ( +call :dk_color %Red% "Some errors were detected. Aborting the operation..." +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto :dk_done +) + +call :ts_getedition +if not defined tsedition ( +call :dk_color %Red% "Checking Windows Edition ID [Not found in installed licenses, aborting...]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto :dk_done +) + +::======================================================================================================================================== + +if %_resall%==1 goto :ts_resetall +if %_actman%==1 goto :ts_actman +if %_actappx%==1 goto :ts_appxlob +if %_actwinhost%==1 goto :ts_whost +if %_actoffhost%==1 goto :ts_ohost +if not %_actwin%==1 goto :ts_esu + +::======================================================================================================================================== + +:: Process Windows +:: Check if system is permanently activated or not + +echo: +echo Processing Windows... + +echo %tsedition% | find /i "Eval" %nul1% && ( +goto :ts_wineval +) + +call :ts_checkwinperm +if defined _perm ( +call :dk_color %Gray% "Checking OS Activation [Windows is already permanently activated]" +goto :ts_esu +) + +set tempid= +set keytype=zero +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wintsid\:.*';iex ($f[1])" %nul6%') do ( +echo "%%a" | findstr /r ".*-.*-.*-.*-.*" %nul1% && (set tsids=!tsids! %%a& set tempid=%%a) +) + +if defined tempid ( +echo Checking Activation ID [%tempid%] [%tsedition%] +) else ( +call :dk_color %Red% "Checking Activation ID [Not Found] [%tsedition%] [%osSKU%]" +set error=1 +goto :ts_esu +) + +if defined winsub ( +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." +echo: +) +goto :ts_esu + +::======================================================================================================================================== + +:ts_wineval + +call :dk_color %Gray% "Checking OS Edition [%tsedition%] [Evaluation edition found]" +call :dk_color %Blue% "Evaluation editions cannot be activated outside of evaluation period." + +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( +call :dk_color %Blue% "Script will reset evaluation period, but to permanently activate Windows," +call :dk_color %Blue% "Go back to main menu and use [Change Edition] option and change to Non-eval edition." +) else ( +call :dk_color %Blue% "Script will reset evaluation period, but to permanently activate Windows, install Non-eval edition." +call :dk_color %_Yellow% "%mas%evaluation_editions" +) + +:: Check Internet connection + +set _int= +for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( +for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1) +) + +if not defined _int ( +%psc% "If([Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet){Exit 0}Else{Exit 1}" +if !errorlevel!==0 (set _int=1&set ping_f= But Ping Failed) +) + +if defined _int ( +echo Checking Internet Connection [Connected%ping_f%] +) else ( +set error=1 +call :dk_color %Red% "Checking Internet Connection [Not Connected]" +call :dk_color %Blue% "Internet is required for Windows Evaluation activation." +) + +:: List of products lacking activable evaluation keys and ISOs + +:: c4b908d2-c4b9-439d-8ff0-48b656a24da4_EmbeddedIndustryEEval_8.1 +:: 9b74255b-afe1-4da7-a143-98d1874b2a6c_EnterpriseNEval_8 +:: 7fd0a88b-fb89-415f-9b79-84adc6a7cd56_EnterpriseNEval_8.1 +:: 994578eb-193c-4c99-bea0-2483274c9afd_EnterpriseSNEval_2015 +:: b9f3109c-bfa9-4f37-9824-6dba9ee62056_ServerStorageStandardEval_2012R2 +:: 2d3b7269-65f4-467d-9d51-dbe0e5a4e668_ServerStorageWorkgroupEval_2012R2 + +:: -------- + +:: 1st column = Activation ID +:: 2nd column = Activable evaluation key +:: 3rd column = Edition ID +:: 4th column = Windows version (for reference only) +:: 5th column = NoAct = activation is not working +:: Separator = _ + +set f= +set key= +set eval= +if not defined allapps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f + +for %%# in ( +d9eea459-1e6b-499d-8486-e68163f2a8be_N3QJR-YCWKK-RVJGK-GQFMX-T8%f%2BF_EmbeddedIndustryEval_8.1 +fbd4c5c6-adc6-4740-bc65-b2dc6dc249c1_MJ8TN-42JH8-886MT-8THCF-36%f%67B_EnterpriseEval_8_NoAct_ REM New time based activation not available +0eebbb45-29d4-49cb-ba87-a23db0cce40a_76FKW-8NR3K-QDH4P-3C87F-JH%f%TTW_EnterpriseEval_8.1 +3f4c0546-36c6-46a8-a37f-be13cdd0cf25_7HBDQ-QNKVG-K4RBF-HMBY6-YG%f%9R6_EnterpriseEval_10 +1f8dbfe8-defa-4676-b5a6-f76949a01540_4N8VT-7Y686-43DGV-THTW9-M9%f%8W7_EnterpriseNEval_10 +57a4ebb6-8e0c-41f8-b79e-8872ddc971ef_W63GF-7N4D9-GQH3K-K4FP7-9B%f%T6C_EnterpriseSEval_2015 +b47dd250-fd6a-44c8-9217-03aca6e4812e_N4DMT-RJKDQ-XR6H7-3DKKP-3Y%f%JWT_EnterpriseSEval_2016 +267bf82d-08e8-4046-b061-9ef3f8ac2b5a_N7HMH-MK36Q-M4X93-76KQ2-6J%f%HWR_EnterpriseSEval_2019 +aff25f1f-fb53-4e27-95ef-b8e5aca10ac6_9V4NK-624Y3-VK47R-Q27GP-27%f%PGF_EnterpriseSEval_2021 +399f0697-886b-4881-894c-4ff6c52e7d8f_CYPB3-XNV9V-QR4G4-Q3B8K-KQ%f%FGJ_EnterpriseSEval_2024 +6162e8c2-3c30-46e1-b964-0de603498e2d_R34N9-HJ6Q3-GBX4F-Q24KQ-49%f%DF7_EnterpriseSNEval_2016 +aed14fc8-907d-44fb-a3a1-d5d8e638acb3_MHN9Q-RD9PW-BFHDQ-9FTWQ-WQ%f%PF8_EnterpriseSNEval_2019 +5dd0c869-eae9-40ce-af48-736692cd8e43_XCN62-29X92-C4T8X-WP82X-DY%f%MJ8_EnterpriseSNEval_2021 +522cc0dc-3c7b-4258-ae68-f297ca63b64e_Y8DJM-NPXF3-QG4MH-W7WJK-KQ%f%FGM_EnterpriseSNEval_2024 +aa708397-8618-42de-b120-a44190ef456d_R63DV-9NPDX-QVWJF-HMR8V-M4%f%K7D_IoTEnterpriseSEval_2024 +cd25b1e8-5839-4a96-a769-b6abe3aa5dee_73BMN-332G9-DX6B8-FGDT3-GF%f%YT6_ServerDatacenterEval_2012 +e628c5e8-2300-4429-8b80-a8b21bd7ce0a_WPR94-KN3J7-MRB7X-JPJV8-RX%f%7J2_ServerDatacenterEval_2012R2 +01398239-85ff-487f-9e90-0e3cc5bcc92e_QVTQ9-GNRBH-JQ9G7-W7FBW-RX%f%9QR_ServerDatacenterEval_2016 +5ea4af9e-fd59-4691-b61c-1fc1ff3e309e_KNW3G-22YD2-7QKQJ-2RF2X-H6%f%F8M_ServerDatacenterEval_2019 +1d02774d-66ab-4c57-8b14-e254fdce09d4_PK7JN-24236-FH7JP-V792F-37%f%CYR_ServerDatacenterEval_2021 +96794a98-097f-42fe-8f28-2c38ea115229_M4RNW-CRTHF-TY7BG-DDHG6-J2%f%T92_ServerDatacenterEval_2025 +38d172c7-36b3-4e4b-b435-fd0b06b95c6e_RNFGD-WFFQR-XQ8BG-K7QQK-GJ%f%CP9_ServerStandardEval_2012 +4fc45a88-26b5-4cf9-9eef-769ee3f0a016_79M8M-N36BX-8YGJY-2G9KP-3Y%f%GPC_ServerStandardEval_2012R2 +9dfa8ec0-7665-4b9d-b2cb-bfc2dc37c9f4_9PBKX-4NHGT-QWV4C-4JD94-TV%f%KQ6_ServerStandardEval_2016 +7783a126-c108-4cf7-b59f-13c78c7a7337_J4WNC-H9BG3-6XRX4-3XD8K-Y7%f%XRX_ServerStandardEval_2019 +c1a197b6-ba5e-4394-b9bf-b659a6c1b873_7PBJM-MNVPD-MBQD7-TYTY4-W8%f%JDY_ServerStandardEval_2021 +753c53a2-4274-4339-8c2e-f66c0b9646c5_YPBVM-HFNWQ-CTF9M-FR4RR-7H%f%9YG_ServerStandardEval_2025 +0de5ff31-2d62-4912-b1a8-3ea01d2461fd_3CKBN-3GJ8X-7YT4X-D8DDC-D6%f%69B_ServerStorageStandardEval_2012 +fb08f53a-e597-40dc-9f08-8bbf99f19b92_NCJ6J-J23VR-DBYB3-QQBJF-W8%f%CP7_ServerStorageWorkgroupEval_2012 +) do ( +for /f "tokens=1-5 delims=_" %%A in ("%%#") do if %tsedition%==%%C if not defined key ( +echo "%allapps%" | find /i "%%A" %nul1% && ( +set key=%%B +set eval=1 +if /i "%%E"=="NoAct" set noact=1 +echo Checking Activation ID [%%A] [%%C] +) +) +) + +if not defined key ( +set error=1 +call :dk_color %Red% "Checking Activation ID [%tsedition% not found in the script]" +call :dk_color %Blue% "Make sure you are using the updated version of the script." +goto :ts_esu +) + +set resetstuff=1 +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':tsforge\:.*';iex ($f[1])" +set resetstuff= +if !errorlevel!==3 ( +set error=1 +call :dk_color %Red% "Resetting Rearm / GracePeriod [Failed]" +call :dk_color %Blue% "%_fixmsg%" +goto :ts_esu +) else ( +echo Resetting Rearm / GracePeriod [Successful] +) + +%psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=%errorlevel% +cmd /c exit /b %keyerror% +if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" + +if %keyerror% EQU 0 ( +call :dk_refresh +echo Installing Activable Evaluation Key [%key%] [Successful] +) else ( +set error=1 +call :dk_color %Red% "Installing Activable Evaluation Key [%key%] [Failed] %keyerror%" +call :dk_color %Blue% "%_fixmsg%" +) + +::======================================================================================================================================== + +:ts_esu + +if not %_actesu%==1 goto :ts_off + +:: Process Windows ESU + +echo: +echo Processing Windows ESU... + +set esuexist= +set esuexistsup= +set esueditionlist= +set esuexistbutnosup= + +for %%# in (EnterpriseS IoTEnterpriseS IoTEnterpriseSK) do (if /i %tsedition%==%%# set isltsc=1) +if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" set isServer=1 + +if /i %tsedition%==Embedded ( +if exist "%SystemRoot%\Servicing\Packages\WinEmb-Branding-Embedded-ThinPC-Package*.mum" set isThinpc=1 +if exist "%SystemRoot%\Servicing\Packages\WinEmb-Branding-Embedded-POSReady7-Package*.mum" set subEdition=[POS] +if exist "%SystemRoot%\Servicing\Packages\WinEmb-Branding-Embedded-Standard-Package*.mum" set subEdition=[Standard] +) +if not defined allapps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f + +if not defined isThinpc if not defined isltsc for %%# in ( +REM Windows7 +4220f546-f522-46df-8202-4d07afd26454_Client-ESU-Year3[1-3y]_-Enterprise-EnterpriseE-EnterpriseN-Professional-ProfessionalE-ProfessionalN-Ultimate-UltimateE-UltimateN- +7e94be23-b161-4956-a682-146ab291774c_Client-ESU-Year6[4-6y]_-Enterprise-EnterpriseE-EnterpriseN-Professional-ProfessionalE-ProfessionalN-Ultimate-UltimateE-UltimateN- +REM Windows7EmbeddedPOSReady7 +4f1f646c-1e66-4908-acc7-d1606229b29e_POS-ESU-Year3[1-3y]_-Embedded[POS]- +REM Windows7EmbeddedStandard +6aaf1c7d-527f-4ed5-b908-9fc039dfc654_WES-ESU-Year3[1-3y]_-Embedded[Standard]- +REM WindowsServer2008R2 +8e7bfb1e-acc1-4f56-abae-b80fce56cd4b_Server-ESU-PA[1-6y]_-ServerDatacenter-ServerDatacenterCore-ServerDatacenterV-ServerDatacenterVCore-ServerStandard-ServerStandardCore-ServerStandardV-ServerStandardVCore-ServerEnterprise-ServerEnterpriseCore-ServerEnterpriseV-ServerEnterpriseVCore- +REM Windows8.1 +4afc620f-12a4-48ad-8015-2aebfbd6e47c_Client-ESU-Year3[1-3y]_-Enterprise-EnterpriseN-Professional-ProfessionalN- +11be7019-a309-4763-9a09-091d1722ffe3_Client-FES-ESU-Year3[1-3y]_-EmbeddedIndustry-EmbeddedIndustryE- +REM WindowsServer2012/2012R2 +55b1dd2d-2209-4ea0-a805-06298bad25b3_Server-ESU-Year3[1-3y]_-ServerDatacenter-ServerDatacenterCore-ServerDatacenterV-ServerDatacenterVCore-ServerStandard-ServerStandardCore-ServerStandardV-ServerStandardVCore- +REM Windows10 +83d49986-add3-41d7-ba33-87c7bfb5c0fb_Client-ESU-Year3[1-3y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN- +0b533b5e-08b6-44f9-b885-c2de291ba456_Client-ESU-Year6[4-6y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN- +4dac5a0c-5709-4595-a32c-14a56a4a6b31_Client-IoT-ESU-Year3[1-3y]_-IoTEnterprise- REM Removed IoTEnterpriseS because it already has longer support +f69e2d51-3bbd-4ddf-8da7-a145e9dca597_Client-IoT-ESU-Year6[4-6y]_-IoTEnterprise- REM Removed IoTEnterpriseS because it already has longer support +) do ( +for /f "tokens=1-3 delims=_" %%A in ("%%#") do ( +echo "%allapps%" | find /i "%%A" %nul1% && ( +set esuexist=1 +echo "%%C" | find /i "-%tsedition%%subEdition%-" %nul1% && ( +set esuexistsup=1 +set esueditionlist= +set esuexistbutnosup= +set tsids=!tsids! %%A +echo Checking Activation ID [%%A] [%%B] +) || ( +if not defined esueditionlist set esueditionlist=%%C +set esuexistbutnosup=1 +) +) +) +) + +if defined esuexistsup ( +echo "%tsids%" | find /i "4220f546-f522-46df-8202-4d07afd26454" %nul1% && ( +echo "%tsids%" | find /i "7e94be23-b161-4956-a682-146ab291774c" %nul1% || ( +call :dk_color %Gray% "Now update Windows to get Client-ESU-Year6[4-6y] license and activate that using this script." +) +) +goto :ts_off +) + +if defined isltsc ( +call :dk_color %Gray% "Checking Activation ID [%tsedition% LTSC already has longer support, ESU is not applicable]" +goto :ts_off +) + +if defined esuexistbutnosup ( +call :dk_color %Red% "Checking Activation ID [Commercial ESU is not supported for %tsedition%]" +call :dk_color %Blue% "Go back to Main Menu, select Change Windows Edition option and change to any of the below listed editions." +echo [%esueditionlist%] +goto :ts_off +) + +set esuavail= +if %winbuild% LEQ 7602 if not defined isThinpc set esuavail=1 +if %winbuild% GTR 7602 if %winbuild% LSS 10240 if defined isServer set esuavail=1 +if %winbuild% GEQ 10240 if %winbuild% LEQ 19045 if not defined isServer set esuavail=1 +if %winbuild% EQU 9600 set esuavail=1 + +if defined esuavail ( +call :dk_color %Red% "Checking Activation ID [ESU license is not found, make sure Windows is fully updated]" +set fixes=%fixes% %mas%tsforge#windows-esu +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%tsforge#windows-esu" +) else ( +call :dk_color %Gray% "Checking Activation ID [ESU is not available for %winos%]" +) + +::======================================================================================================================================== + +:ts_off + +if not %_actoff%==1 goto :ts_act + +if %winbuild% LSS 9200 ( +echo: +call :dk_color %Gray% "Checking Supported Office [TSforge for Office is supported on Windows 8 and later versions]" +call :dk_color %Blue% "On Windows 7 build, use Online %KS% activation option for Office instead." +goto :ts_act +) + +:: Check ohook install + +set ohook= +for %%# in (15 16) do ( +for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do ( +if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" set ohook=1 +) +) + +for %%# in (System SystemX86) do ( +for %%G in ("Office 15" "Office") do ( +for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do ( +if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" set ohook=1 +) +) +) + +if defined ohook ( +echo: +call :dk_color %Gray% "Checking Ohook [Ohook activation is already installed for Office]" +) + +:: Check unsupported office versions + +set o14msi= +set o14c2r= + +set _68=HKLM\SOFTWARE\Microsoft\Office +set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) +%nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R +%nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R + +if not "%o14msi%%o14c2r%"=="" ( +echo: +call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%]" +) + +if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( +set ohub=1 +) + +::======================================================================================================================================== + +:: Check supported office versions + +call :ts_getpath + +set o16uwp= +set o16uwp_path= + +if %winbuild% GEQ 10240 ( +for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty InstallLocation)" %nul6%') do (if exist "%%a\Integration\Integrator.exe" (set o16uwp=1&set "o16uwp_path=%%a")) +) + +sc query ClickToRunSvc %nul% +set error1=%errorlevel% + +if defined o16c2r if %error1% EQU 1060 ( +echo: +call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 16.0 files found]" +set o16c2r= +set error=1 +) + +sc query OfficeSvc %nul% +set error2=%errorlevel% + +if defined o15c2r if %error1% EQU 1060 if %error2% EQU 1060 ( +echo: +call :dk_color %Red% "Checking ClickToRun Service [Not found, Office 15.0 files found]" +set o15c2r= +set error=1 +) + +if "%o16uwp%%o16c2r%%o15c2r%%o16msi%%o15msi%"=="" ( +set error=1 +set showfix=1 +echo: +if not "%o14msi%%o14c2r%"=="" ( +call :dk_color %Red% "Checking Supported Office Install [Not Found]" +) else ( +if %_actwin%==0 ( +call :dk_color %Red% "Checking Installed Office [Not Found]" +) else ( +call :dk_color %Gray% "Checking Installed Office [Not Found]" +) +) + +if defined ohub ( +echo: +echo You have only Office dashboard app installed, you need to install full Office version. +) +call :dk_color %Blue% "Download and install Office from below URL and try again." +if %_actwin%==0 set fixes=%fixes% %mas%genuine-installation-media +call :dk_color %_Yellow% "%mas%genuine-installation-media" +goto :ts_act +) + +set multioffice= +if not "%o16uwp%%o16c2r%%o15c2r%%o16msi%%o15msi%"=="1" set multioffice=1 +if not "%o14c2r%%o14msi%"=="" set multioffice=1 + +if defined multioffice ( +echo: +call :dk_color %Gray% "Checking Multiple Office Install [Found. Recommended to install one version only]" +) + +::======================================================================================================================================== + +:: Check Windows Server + +set winserver= +reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v ProductType %nul2% | find /i "WinNT" %nul1% || set winserver=1 +if not defined winserver ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Server" %nul1% && set winserver=1 +) + +::======================================================================================================================================== + +:: Process Office UWP + +if not defined o16uwp goto :ts_starto15c2r + +call :ts_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 + +set oVer=16 +set "_oLPath=%o16uwp_path%\Licenses16" +set "pkeypath=%o16uwp_path%\Office16\pkeyconfig-office.xrm-ms" +for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty Dependencies) | Select-Object PackageFullName" %nul6%') do (set "o16uwpapplist=!o16uwpapplist! %%a") + +echo "%o16uwpapplist%" | findstr /i "Access Excel OneNote Outlook PowerPoint Publisher SkypeForBusiness Word" %nul% && set "_oIds=O365HomePremRetail" + +for %%# in (Project Visio) do ( +echo "%o16uwpapplist%" | findstr /i "%%#" %nul% && ( +set _lat= +if exist "%_oLPath%\%%#Pro2024VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2024Retail " & set _lat=1 +if not defined _lat if exist "%_oLPath%\%%#Pro2021VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2021Retail " & set _lat=1 +if not defined _lat if exist "%_oLPath%\%%#Pro2019VL*.xrm-ms" set "_oIds= !_oIds! %%#Pro2019Retail " & set _lat=1 +if not defined _lat set "_oIds= !_oIds! %%#ProRetail " +) +) + +set uwpinfo=%o16uwp_path:C:\Program Files\WindowsApps\Microsoft.Office.Desktop_=% + +echo: +echo Processing Office... [UWP ^| %uwpinfo%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ts_starto15c2r +) + +call :ts_process + +::======================================================================================================================================== + +:ts_starto15c2r + +:: Process Office 15.0 C2R + +if not defined o15c2r goto :ts_starto16c2r + +call :ts_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 + +set oVer=15 +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o15c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o15c2r_reg%\Configuration") +if not defined _oArch for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v Platform" %nul6%') do (set "_oArch=%%b") +if not defined _version for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v version" %nul6%') do (set "_version=%%b") +if not defined _prids for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg%\propertyBag /v ProductReleaseId" %nul6%') do (set "_prids=%o15c2r_reg%\propertyBag /v ProductReleaseId" & set "_config=%o15c2r_reg%\propertyBag") + +echo "%o15c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=10) || (set _tok=9) +for /f "tokens=%_tok% delims=\" %%a in ('reg query %o15c2r_reg%\ProductReleaseIDs\Active %nul6% ^| findstr /i "Retail Volume"') do ( +echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") +) + +set "_oLPath=%_oRoot%\Licenses" +set "pkeypath=%_oRoot%\Office15\pkeyconfig-office.xrm-ms" +set "_oIntegrator=%_oRoot%\integration\integrator.exe" + +echo: +echo Processing Office... [C2R ^| %_version% ^| %_oArch%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ts_starto16c2r +) + +if "%_actprojvis%"=="0" call :oh_fixprids +call :ts_process + +::======================================================================================================================================== + +:ts_starto16c2r + +:: Process Office 16.0 C2R + +if not defined o16c2r goto :ts_startmsi + +call :ts_reset +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 + +set oVer=16 +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceData" %nul6%') do (set "_AudienceData=^| %%b ") +for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ProductReleaseIds" %nul6%') do (set "_prids=%o16c2r_reg%\Configuration /v ProductReleaseIds" & set "_config=%o16c2r_reg%\Configuration") + +echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=9) || (set _tok=8) +for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs" /s /f ".16" /k %nul6% ^| findstr /i "Retail Volume"') do ( +echo "!_oIds!" | find /i " %%a " %nul1% || (set "_oIds= !_oIds! %%a ") +) +set _oIds=%_oIds:.16=% +set _o16c2rIds=%_oIds% + +set "_oLPath=%_oRoot%\Licenses16" +set "pkeypath=%_oRoot%\Office16\pkeyconfig-office.xrm-ms" +set "_oIntegrator=%_oRoot%\integration\integrator.exe" + +echo: +echo Processing Office... [C2R ^| %_version% %_AudienceData%^| %_oArch%] + +if not defined _oIds ( +call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" +set error=1 +goto :ts_startmsi +) + +if "%_actprojvis%"=="0" call :oh_fixprids +call :ts_process + +::======================================================================================================================================== + +:ts_startmsi + +if defined o15msi call :ts_processmsi 15 %o15msi_reg% +if defined o16msi call :ts_processmsi 16 %o16msi_reg% + +::======================================================================================================================================== + +echo: +call :oh_clearblock +if "%o16msi%%o15msi%"=="" if not "%o16uwp%%o16c2r%%o15c2r%"=="" call :oh_uninstkey +call :oh_licrefresh + +goto :ts_act + +::======================================================================================================================================== + +:ts_whost + +:: Process Windows K-M-S host + +echo: +echo Processing Windows %KS% Host... + +echo: +if %winbuild% GEQ 10586 ( +call :dk_color %Gray% "With %KS% Host license, system may randomly change Windows Edition later. It is a Windows issue and can be safely ignored." +) +call :dk_color %Gray% "%KS% Host [Not to be confused with %KS% Client] license causes the sppsvc service to run continuously." +call :dk_color %Blue% "Only use this activation when necessary, you can revert to normal activation from the previous menu." + +if %_unattended%==0 ( +echo: +choice /C:0F /N /M "> [0] Go back [F] Continue : " +if !errorlevel!==1 exit /b +echo: +) + +set _arr= +set tempid= +set keytype=kmshost + +:: Install current edition csvlk license so that correct edition can reflect for csvlk + +if %winbuild% GEQ 10586 ( +for %%# in ("%SysPath%\spp\tokens\skus\%tsedition%\*CSVLK*.xrm-ms") do ( +if defined _arr (set "_arr=!_arr!;"%SysPath%\spp\tokens\skus\%tsedition%\%%~nx#"") else (set "_arr="%SysPath%\spp\tokens\skus\%tsedition%\%%~nx#"") +) +if defined _arr %psc% "$sls = Get-WmiObject %sps%; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); InstallLicenseArr '!_arr!'" %nul% +) + +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wintsid\:.*';iex ($f[1])" %nul6%') do ( +echo "%%a" | findstr /r ".*-.*-.*-.*-.*" %nul1% && (set tsids=!tsids! %%a& set tempid=%%a) +) + +if defined tempid ( +echo Checking Activation ID [%tempid%] [%tsedition%] +) else ( +call :dk_color %Red% "Checking Activation ID [Not Found] [%tsedition%] [%osSKU%]" +call :dk_color %Blue% "%KS% Host license is not found on your system. It is available for the below editions." +call :dk_color %Blue% "Professional, Education, ProfessionalWorkstation, Enterprise, EnterpriseS, and Server editions, etc." +goto :ts_act +) + +if defined winsub ( +echo: +call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." +) + +goto :ts_act + +::======================================================================================================================================== + +:ts_ohost + +:: Process Office K-M-S host + +echo: +echo Processing Office %KS% Host... + +set ohostexist= +call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +set ohostids=%allapps% +call :dk_actids 59a52881-a989-479d-af46-f275c6370663 +set ohostids=%ohostids% %allapps% + +for %%# in ( +bfe7a195-4f8f-4f0b-a622-cf13c7d16864_KMSHost2010-ProPlusVL +f3d89bbf-c0ec-47ce-a8fa-e5a5f97e447f_KMSHost2024Volume +47f3b983-7c53-4d45-abc6-bcd91e2dd90a_KMSHost2021Volume +70512334-47b4-44db-a233-be5ea33b914c_KMSHost2019Volume +98ebfe73-2084-4c97-932c-c0cd1643bea7_KMSHost2016Volume +2e28138a-847f-42bc-9752-61b03fff33cd_KMSHost2013Volume +) do ( +for /f "tokens=1-2 delims=_" %%A in ("%%#") do ( +echo "%ohostids%" | find /i "%%A" %nul1% && ( +set ohostexist=1 +set tsids=!tsids! %%A +echo Checking Activation ID [%%A] [%%B] +) +) +) + +if not defined ohostexist ( +call :dk_color %Gray% "Checking Activation ID [Not found for Office %KS% Host]" +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%tsforge#office-kms-host" +) + +echo: +call :dk_color %Gray% "%KS% Host [Not to be confused with %KS% Client] license causes the sppsvc service to run continuously." +call :dk_color %Gray% "Only use this activation when necessary." + +goto :ts_act + +::======================================================================================================================================== + +:ts_appxlob + +:: Process Windows 8/8.1 APPX Sideloading + +echo: +echo Processing Windows 8/8.1 APPX Sideloading... + +if %winbuild% LSS 9200 set noappx=1 +if %winbuild% GTR 9600 set noappx=1 + +echo: +if defined noappx ( +call :dk_color %Gray% "Checking Activation ID [APPX Sideloading feature is available only on Windows 8/8.1]" +goto :dk_done +) + +set appxexist= +if not defined allapps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f + +for %%# in ( +ec67814b-30e6-4a50-bf7b-d55daf729d1e_APPXLOB-Client +251ef9bf-2005-442f-94c4-86307de7bb32_APPXLOB-Embedded-Industry +1e58c9d7-e3f1-4f69-9039-1f162463ac2c_APPXLOB-Embedded-Standard +3502d53e-5d43-436a-84af-714e8d334f8d_APPXLOB-Server +) do ( +for /f "tokens=1-2 delims=_" %%A in ("%%#") do ( +echo "%allapps%" | find /i "%%A" %nul1% && ( +set appxexist=1 +set tsids=!tsids! %%A +echo Checking Activation ID [%%A] [%%B] +) +) +) + +if not defined appxexist ( +call :dk_color %Red% "Checking Activation ID [Not found]" +call :dk_color %Blue% "APPX Sideloading feature is available only on Pro and higher level editions." +) + +goto :ts_act + +::======================================================================================================================================== + +:ts_resetall + +echo: +echo Processing Reset of Rearm / Timers / Tamper / Lock... +echo: + +set resetstuff=1 +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':tsforge\:.*';iex ($f[1])" + +if %errorlevel%==3 ( +call :dk_color %Red% "Reset Failed." +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) else ( +call :dk_color %Green% "Reset process has been successfully done." +) + +goto :dk_done + +::======================================================================================================================================== + +:ts_actman + +echo: +echo Processing Manual Activation... +echo: + +call :dk_color %Gray% "This option is for advanced users, those who already know what they are doing." +call :dk_color %Blue% "Some activation IDs may cause system crash [MUI mismatch], or irreversible changes [CloudEdition etc]." + +if %_unattended%==1 ( +echo: +for %%# in (%tsids%) do (echo Activation ID - %%#) +goto :ts_act +) + +call :dk_color %Blue% "Although the script will try to remove those IDs from the list, it is not fully guaranteed." +echo: +choice /C:0F /N /M "> [0] Go back [F] Continue : " +if %errorlevel%==1 exit /b + +echo: +echo Fetching Supported Activation IDs list. Please wait... + +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':listactids\:.*';iex ($f[1])" +if %errorlevel%==3 ( +call :dk_color %Gray% "No supported activation ID found, aborting..." +goto :dk_done +) + +for /f "delims=" %%a in ('%psc% "$ids = Get-WmiObject -Query 'SELECT ID FROM SoftwareLicensingProduct' | Select-Object -ExpandProperty ID; $ids" %nul6%') do call set "allactids= %%a !allactids! " + +echo: +call :dk_color %Gray% "Enter / Paste the Activation ID shown in first column in the opened text file, or just press Enter to return:" +echo Add space after each Activation ID if you are adding multiple: +echo: +set /p tsids= + +del /f /q "%SystemRoot%\Temp\actids_159_*" %nul% +if not defined tsids goto :dk_done + +for %%# in (%tsids%) do ( +echo "%allactids%" | find /i " %%# " %nul1% || ( +call :dk_color %Red% "[%%#] Incorrect Activation ID entered, aborting..." +goto :dk_done +) +) + +goto :ts_act + +:listactids: +$t = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0) +$t.DefinePInvokeMethod('SLOpen', 'slc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) +$t.DefinePInvokeMethod('SLClose', 'slc.dll', 22, 1, [IntPtr], @([IntPtr]), 1, 3).SetImplementationFlags(128) +$t.DefinePInvokeMethod('SLGetProductSkuInformation', 'slc.dll', 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) +$t.DefinePInvokeMethod('SLGetLicense', 'slc.dll', 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) +$w = $t.CreateType() +$m = [Runtime.InteropServices.Marshal] + +function slGetSkuInfo($SkuId) { + $c = 0; $b = 0 + $r = $w::SLGetProductSkuInformation($hSLC, [ref][Guid]$SkuId, "msft:sl/EUL/PHONE/PUBLIC", [ref]$null, [ref]$c, [ref]$b) + return ($r -eq 0) +} + +function IsMuiNotLocked($SkuId) { + $r = $true; $c = 0; $b = 0 + + $LicId = [Guid]::Empty + [void]$w::SLGetProductSkuInformation($hSLC, [ref][Guid]$SkuId, "fileId", [ref]$null, [ref]$c, [ref]$b) + $FileId = $m::PtrToStringUni($b) + + $c = 0; $b = 0 + [void]$w::SLGetLicense($hSLC, [ref][Guid]$FileId, [ref]$c, [ref]$b) + $blob = New-Object byte[] $c; $m::Copy($b, $blob, 0, $c) + $cont = [Text.Encoding]::UTF8.GetString($blob) + $xml = [xml]$cont.SubString($cont.IndexOf(' %SystemRoot%\Temp\chklen +for %%A in (%SystemRoot%\Temp\chklen) do (set len=%%~zA) +del %SystemRoot%\Temp\chklen %nul% + +if !len! GTR 6000 ( +%eline% +echo Too many licenses are installed, the script may crash. +call :dk_color %Blue% "%_fixmsg%" +timeout /t 30 +) +) +exit /b + +:: Get installed products Activation IDs + +:dk_actid + +set apps= +if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1' and PartialProductKey is not null) get ID /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" +%chkapp% do (if defined apps (call set "apps=!apps! %%a") else (call set "apps=%%a")) +exit /b + +:: Trigger reevaluation, it helps in updating SPP tasks + +:dk_reeval + +:: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP + +set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" +reg delete "%ruleskey%" /v "State" /f %nul% +reg delete "%ruleskey%" /v "SuppressRulesEngine" /f %nul% + +set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); +set r2=%r1% [void]$TB.DefinePInvokeMethod('SLpTriggerServiceWorker', 'sppc.dll', 22, 1, [Int32], @([UInt32], [IntPtr], [String], [UInt32]), 1, 3); +set d1=%r2% [void]$TB.CreateType()::SLpTriggerServiceWorker(0, 0, 'reeval', 0) +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; %d1%" +exit /b + +:: Install License files using Powershell/WMI instead of slmgr.vbs + +:xrm: +function InstallLicenseFile($Lsc) { + try { + $null = $sls.InstallLicense([IO.File]::ReadAllText($Lsc)) + } catch { + $host.SetShouldExit($_.Exception.HResult) + } +} +function InstallLicenseArr($Str) { + $a = $Str -split ';' + ForEach ($x in $a) {InstallLicenseFile "$x"} +} +function InstallLicenseDir($Loc) { + dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} +} +function ReinstallLicenses() { + $Oem = "$env:SysPath\oem" + $Spp = "$env:SysPath\spp\tokens" + InstallLicenseDir "$Spp" + If (Test-Path $Oem) {InstallLicenseDir "$Oem"} +} +:xrm: + +:: Check wmic.exe + +:dk_ckeckwmic + +set _wmic=0 +for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( +cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 +) +exit /b + +:: Show info for potential script stuck scenario + +:dk_sppissue + +sc start sppsvc %nul% +set spperror=%errorlevel% + +if %spperror% NEQ 1056 if %spperror% NEQ 0 ( +%eline% +echo sc start sppsvc [Error Code: %spperror%] +) + +echo: +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +exit /b + +:: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) + +:dk_product + +set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') + +set winos= +for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) +echo "%winos%" | find /i "Windows" %nul1% || ( +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName %nul6%') do set "winos=%%b" +if %winbuild% GEQ 22000 ( +set winos=!winos:Windows 10=Windows 11! +) +) + +if not defined winsub exit /b + +:: Check base edition product name if Windows subscription license is found + +for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionNameFromId', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [IntPtr].MakeByRefType()), 1, 3); +set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionNameFromId(%regSKU%, [ref]$out);$s=[Runtime.InteropServices.Marshal]::PtrToStringUni($out); $s + +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 ( +if %winbuild% GEQ 22000 ( +set winos=Windows 11 %%a +) else ( +set winos=Windows 10 %%a +) +) +exit /b + +:: Common lines used in PowerShell reflection code + +:dk_reflection + +set ref=$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1); +set ref=%ref% $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False); +set ref=%ref% $TypeBuilder = $ModuleBuilder.DefineType(0); +exit /b + +::======================================================================================================================================== + +:dk_chkmal + +:: Many users unknowingly download mal-ware by using activators found through Google search. +:: This code aims to notify users that their system has been affected by mal-ware. + +set w= +set results= +if exist "%ProgramFiles%\KM%w%Spico" set pupfound= KM%w%Spico +if not defined pupfound ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound= KM%w%Spico +) + +set hcount=0 +for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( +find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) +if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" + +sc start sppsvc %nul% +echo "%errorlevel%" | findstr "577 225" %nul% && ( +set "results=%results%[Likely File Infector]" +) || ( +if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +) + +if not "%results%%pupfound%"=="" ( +if defined pupfound call :dk_color %Gray% "Checking PUP Activators [Found%pupfound%]" +if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." +if defined results call :dk_color %Red% "%results%" +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +echo: +) + +:: Remove the scheduled task of R@1n-KMS (old version) that runs the activation command every minute, as it leads to high CPU usage. + +if exist %SysPath%\Tasks\R@1n-KMS ( +for /f %%A in ('dir /b /a:-d %SysPath%\Tasks\R@1n-KMS %nul6%') do (schtasks /delete /tn \R@1n-KMS\%%A /f %nul%) +) + +exit /b + +::======================================================================================================================================== + +:dk_errorcheck + +set showfix= +call :dk_chkmal + +:: Check Sandboxing + +sc query Null %nul% || ( +set error=1 +set showfix=1 +call :dk_color %Red% "Checking Sandboxing [Found, script may not work properly.]" +call :dk_color %Blue% "If you are using any third-party antivirus, check if it is blocking the script." +echo: +) + +::======================================================================================================================================== + +:: Check corrupt services + +set serv_cor= +for %%# in (%_serv%) do ( +set _corrupt= +sc start %%# %nul% +if !errorlevel! EQU 1060 set _corrupt=1 +sc query %%# %nul% || set _corrupt=1 +for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt ( +reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || set _corrupt=1 +) + +if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#")) +) + +if defined serv_cor ( +set error=1 +set showfix=1 +call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]" +) + +::======================================================================================================================================== + +:: Check disabled services + +set serv_ste= +for %%# in (%_serv%) do ( +sc start %%# %nul% +if !errorlevel! EQU 1058 (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 %%#==KeyIso sc config %%# start= demand %nul% +if /i %%#==LicenseManager sc config %%# start= demand %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 ( +if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#") +) +) +) + +if defined serv_csts call :dk_color %Gray% "Enabling Disabled Services [Successful] [%serv_csts%]" + +if defined serv_cste ( +set error=1 +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 + +set serv_e= +for %%# in (%_serv%) do ( +set errorcode= +set checkerror= + +sc query %%# | find /i "RUNNING" %nul% || ( +%psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 20 | Out-Null" +set errorcode=!errorlevel! +sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 +) + +sc start %%# %nul% +if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (set errorcode=!errorlevel!&set checkerror=1) +if defined checkerror if defined serv_e (set "serv_e=!serv_e!, %%#-!errorcode!") else (set "serv_e=%%#-!errorcode!") +) + +if defined serv_e ( +set error=1 +call :dk_color %Red% "Starting Services [Failed] [%serv_e%]" +echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( +call :dk_color %Blue% "Reboot your machine using the restart option to fix this error." +set showfix=1 +) +echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( +set fixes=%fixes% %mas%fix_service +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +set showfix=1 +) +) + +::======================================================================================================================================== + +:: Various error checks + +if defined safeboot_option ( +set error=1 +set showfix=1 +call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option%] " %Blue% "[Safe mode found. Run in normal mode.]" +) + + +:: https://learn.microsoft.com/windows-hardware/manufacture/desktop/windows-setup-states + +for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) + +if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( +call :dk_color %Gray% "Checking Windows Setup State [%imagestate%]" +echo "%imagestate%" | find /i "RESEAL" %nul% && ( +set error=1 +set showfix=1 +call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." +) +echo "%imagestate%" | find /i "UNDEPLOYABLE" %nul% && ( +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "If the activation fails, do this - " %_Yellow% " %mas%in-place_repair_upgrade" +) +) + + +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinPE" /v InstRoot %nul% && ( +set error=1 +set showfix=1 +call :dk_color2 %Red% "Checking WinPE " %Blue% "[WinPE mode found. Run in normal mode.]" +) + + +set wpainfo= +set wpaerror= +for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1])" %nul6%') do (set wpainfo=%%a) +echo "%wpainfo%" | find /i "Error Found" %nul% && ( +set error=1 +set wpaerror=1 +call :dk_color %Red% "Checking WPA Registry Errors [%wpainfo%]" +) || ( +echo Checking WPA Registry Count [%wpainfo%] +) + + +if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( +call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" +set fixes=%fixes% %mas%evaluation_editions +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +) +) + + +set osedition=0 +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 (call set "osedition=%%a") + +if %osedition%==0 for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" + +:: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional + +if not %osedition%==0 ( +if "%osSKU%"=="164" set osedition=ProfessionalEducation +if "%osSKU%"=="165" set osedition=ProfessionalEducationN +) + +if not defined notwinact ( +if %osedition%==0 ( +call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" +) else ( + +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( +set skunotfound=1 +call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" +) + +if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( +call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" +) +) +) + + +%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %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 SoftwareLicensingService [Not Working] %error_code%" +) + + +set wmifailed= +if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% +if %_wmic% EQU 0 %psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1% + +if %errorlevel% NEQ 0 set wmifailed=1 +echo "%error_code%" | findstr /i "0x800410 0x800440 0x80131501" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants +if defined wmifailed ( +set error=1 +call :dk_color %Red% "Checking WMI [Not Working]" +if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." +set showfix=1 +) + + +if not defined notwinact ( +if %winbuild% GEQ 10240 ( +%nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%" +set /a "sum/=3" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI/REG SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU% Reg:%regSKU%]" +) +) else ( +%nul% set /a "sum=%slcSKU%+%wmiSKU%" +set /a "sum/=2" +if not "!sum!"=="%slcSKU%" ( +call :dk_color %Gray% "Checking SLC/WMI SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU%]" +) +) +) + +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && ( +set error=1 +set showfix=1 +call :dk_color2 %Red% "Checking Rearm " %Blue% "[System Restart Is Required]" +) + + +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && ( +set error=1 +set showfix=1 +call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System Restart Is Required]" +) + + +:: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. + +if exist "%SysPath%\wlms\wlms.exe" ( +echo Checking Eval WLMS Service [Found] +) + + +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( +set error=1 +set showfix=1 +call :dk_color %Red% "Checking HKU\S-1-5-20 Registry [Not Found]" +set fixes=%fixes% %mas%in-place_repair_upgrade +call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %mas%in-place_repair_upgrade" +) + + +for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) +) +if defined _sppint ( +echo %_sppint% | find /i "PerfOptions" %nul% && ( +call :dk_color %Red% "Checking SPP Interference In IFEO [%_sppint% - System might deactivate later]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) || ( +echo Checking SPP In IFEO [%_sppint%] +) +) + + +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" +) + + +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( +call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" +set fixes=%fixes% %mas%issues_due_to_gaming_spoofers +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +set error=1 +set showfix=1 +) + + +set tokenstore= +for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" +if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" +if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +set toerr=1 +set error=1 +set showfix=1 +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +) + + +:: This code creates token folder only if it's missing and sets default permission for it + +if not defined toerr if not exist "%tokenstore%\" ( +mkdir "%tokenstore%" %nul% +if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" +if %winbuild% GEQ 9200 set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';" +set "d=!d! $AclObject = New-Object System.Security.AccessControl.DirectorySecurity;" +set "d=!d! $AclObject.SetSecurityDescriptorSddlForm($sddl);" +set "d=!d! Set-Acl -Path %tokenstore% -AclObject $AclObject;" +%psc% "!d!" %nul% +if exist "%tokenstore%\" ( +call :dk_color %Gray% "Checking SPP Token Folder [Not Found, Created Now] [%tokenstore%\]" +) else ( +call :dk_color %Red% "Checking SPP Token Folder [Not Found, Failed to Create] [%tokenstore%\]" +set error=1 +set showfix=1 +) +) + + +if not defined notwinact ( +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined apps ( +set "_notfoundids=Key Not Installed / Act ID Not Found" +call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f +if not defined allapps ( +set error=1 +set "_notfoundids=Not found" +) +call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" +) +) +) + + +if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( +set error=1 +call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" +) + + +if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( +%psc% "Get-WmiObject -Query 'SELECT Description FROM SoftwareLicensingProduct WHERE PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Select-Object -Property Description" %nul2% | findstr /i "KMS_" %nul1% || ( +for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) +echo !taskinfo! | find /i "Ready" %nul% || ( +reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% +reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed +if "!taskinfo!"=="" set "taskinfo=Not Found" +call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!, System might deactivate later]" +if not defined error call :dk_color %Blue% "Reboot your machine using the restart option." +) +) +) + + +:: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. + +set permerror= +if %winbuild% GEQ 9200 if not defined ps32onArm ( +for %%# in ( +"%tokenstore%+FullControl" +"HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" +"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform+SetValue" +) do for /f "tokens=1,2 delims=+" %%A in (%%#) do if not defined permerror ( +%psc% "$acl = (Get-Acl '%%A' | fl | Out-String); if (-not ($acl -match 'NT SERVICE\\sppsvc Allow %%B') -or ($acl -match 'NT SERVICE\\sppsvc Deny')) {Exit 2}" %nul% +if !errorlevel!==2 ( +if "%%A"=="%tokenstore%" ( +set "permerror=Error Found In Token Folder" +) else ( +set "permerror=Error Found In SPP Registries" +) +) +) + +REM https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application + +if not defined permerror ( +reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% && ( +set "pol=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" +reg query "!pol!" %nul% || reg add "!pol!" %nul% +%psc% "$netServ = (New-Object Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([Security.Principal.NTAccount]).Value; $aclString = Get-Acl 'Registry::!pol!' | Format-List | Out-String; if (-not ($aclString.Contains($netServ + ' Allow FullControl') -or $aclString.Contains('NT SERVICE\sppsvc Allow FullControl')) -or ($aclString.Contains('Deny'))) {Exit 3}" %nul% +if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" +) +) + +if defined permerror ( +set error=1 +call :dk_color %Red% "Checking SPP Permissions [!permerror!]" +if not defined showfix call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) +) + + +:: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before + +if not defined serv_cor if not defined serv_cste if defined error if /i not %error_code%==0 if not defined showfix ( +if not defined permerror if defined wpaerror (call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." & set showfix=1) +if not defined showfix ( +set showfix=1 +call :dk_color %Blue% "%_fixmsg%" +if not defined permerror call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option." +) +) + +if not defined showfix if defined wpaerror ( +set showfix=1 +call :dk_color %Blue% "If activation fails then go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." +) + +exit /b + +:: This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems + +:wpatest: +$wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") +$count = 0 +foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $count++ + } +} +$osVersion = [System.Environment]::OSVersion.Version +$minBuildNumber = 14393 +if ($osVersion.Build -ge $minBuildNumber) { + $subkeyHashTable = @{} + foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { + if ($subkeyName -match '.*-.*-.*-.*-.*-') { + $keyNumber = $subkeyName -replace '.*-', '' + $subkeyHashTable[$keyNumber] = $true + } + } + for ($i=1; $i -le $count; $i++) { + if (-not $subkeyHashTable.ContainsKey("$i")) { + Write-Output "Total Keys $count. Error Found - $i key does not exist." + $wpaKey.Close() + exit + } + } +} +$wpaKey.GetSubKeyNames() | ForEach-Object { + if ($_ -match '.*-.*-.*-.*-.*-') { + if ($PSVersionTable.PSVersion.Major -lt 3) { + cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" + if ($LASTEXITCODE -ne 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } else { + $subkey = $wpaKey.OpenSubKey($_) + $p = $subkey.GetValueNames() + if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { + Write-Host "Total Keys $count. Error Found - Binary Data is corrupt." + $wpaKey.Close() + exit + } + } + } +} +$count +$wpaKey.Close() +:wpatest: + +::======================================================================================================================================== + +:dk_color + +if %_NCS% EQU 1 ( +echo %esc%[%~1%~2%esc%[0m +) else ( +%psc% write-host -back '%1' -fore '%2' '%3' +) +exit /b + +:dk_color2 + +if %_NCS% EQU 1 ( +echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m +) else ( +%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) +exit /b + +::======================================================================================================================================== + +:dk_done + +echo: +if %_unattended%==1 timeout /t 2 & exit /b + +if defined fixes ( +call :dk_color %White% "Follow ALL the ABOVE blue lines. " +call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" +choice /C:10 /N +if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) +) + +if defined terminal ( +call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..." +choice /c 0 /n +) else ( +call :dk_color %_Yellow% "Press any key to %_exitmsg%..." +pause %nul1% +) + +exit /b + +::======================================================================================================================================== + +:tsforge: +$src = @' +// Common.cs +namespace LibTSforge +{ + using Microsoft.Win32; + using System; + using System.IO; + using System.Linq; + using System.Runtime.InteropServices; + using System.ServiceProcess; + using System.Text; + using LibTSforge.Crypto; + using LibTSforge.PhysicalStore; + using LibTSforge.SPP; + using LibTSforge.TokenStore; + + public enum PSVersion + { + Vista, + Win7, + Win8Early, + Win8, + WinBlue, + WinModern + } + + public static class Constants + { + public static readonly byte[] UniversalHWIDBlock = + { + 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x0c, 0x01, 0x00 + }; + + public static readonly byte[] KMSv4Response = + { + 0x00, 0x00, 0x04, 0x00, 0x62, 0x00, 0x00, 0x00, 0x30, 0x00, 0x35, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x2D, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x2D, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x2D, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x2D, 0x00, 0x30, 0x00, 0x33, 0x00, 0x2D, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2E, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2D, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x33, 0x00, 0x00, 0x00, 0xDE, 0x19, 0x02, 0xCF, 0x1F, 0x35, + 0x97, 0x4E, 0x8A, 0x8F, 0xB8, 0x07, 0xB1, 0x92, 0xB5, 0xB5, 0x97, 0x42, 0xEC, 0x3A, 0x76, 0x84, + 0xD5, 0x01, 0x32, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x60, 0x27, 0x00, 0x00, 0xC4, 0x1E, + 0xAA, 0x8B, 0xDD, 0x0C, 0xAB, 0x55, 0x6A, 0xCE, 0xAF, 0xAC, 0x7F, 0x5F, 0xBD, 0xE9 + }; + + public static readonly byte[] KMSv5Response = + { + 0x00, 0x00, 0x05, 0x00, 0xBE, 0x96, 0xF9, 0x04, 0x54, 0x17, 0x3F, 0xAF, 0xE3, 0x08, 0x50, 0xEB, + 0x22, 0xBA, 0x53, 0xBF, 0xF2, 0x6A, 0x7B, 0xC9, 0x05, 0x1D, 0xB5, 0x19, 0xDF, 0x98, 0xE2, 0x71, + 0x4D, 0x00, 0x61, 0xE9, 0x9D, 0x03, 0xFB, 0x31, 0xF9, 0x1F, 0x2E, 0x60, 0x59, 0xC7, 0x73, 0xC8, + 0xE8, 0xB6, 0xE1, 0x2B, 0x39, 0xC6, 0x35, 0x0E, 0x68, 0x7A, 0xAA, 0x4F, 0x28, 0x23, 0x12, 0x18, + 0xE3, 0xAA, 0x84, 0x81, 0x6E, 0x82, 0xF0, 0x3F, 0xD9, 0x69, 0xA9, 0xDF, 0xBA, 0x5F, 0xCA, 0x32, + 0x54, 0xB2, 0x52, 0x3B, 0x3E, 0xD1, 0x5C, 0x65, 0xBC, 0x3E, 0x59, 0x0D, 0x15, 0x9F, 0x37, 0xEC, + 0x30, 0x9C, 0xCC, 0x1B, 0x39, 0x0D, 0x21, 0x32, 0x29, 0xA2, 0xDD, 0xC7, 0xC1, 0x69, 0xF2, 0x72, + 0x3F, 0x00, 0x98, 0x1E, 0xF8, 0x9A, 0x79, 0x44, 0x5D, 0x25, 0x80, 0x7B, 0xF5, 0xE1, 0x7C, 0x68, + 0x25, 0xAA, 0x0D, 0x67, 0x98, 0xE5, 0x59, 0x9B, 0x04, 0xC1, 0x23, 0x33, 0x48, 0xFB, 0x28, 0xD0, + 0x76, 0xDF, 0x01, 0x56, 0xE7, 0xEC, 0xBF, 0x1A, 0xA2, 0x22, 0x28, 0xCA, 0xB1, 0xB4, 0x4C, 0x30, + 0x14, 0x6F, 0xD2, 0x2E, 0x01, 0x2A, 0x04, 0xE3, 0xBD, 0xA7, 0x41, 0x2F, 0xC9, 0xEF, 0x53, 0xC0, + 0x70, 0x48, 0xF1, 0xB2, 0xB6, 0xEA, 0xE7, 0x0F, 0x7A, 0x15, 0xD1, 0xA6, 0xFE, 0x23, 0xC8, 0xF3, + 0xE1, 0x02, 0x9E, 0xA0, 0x4E, 0xBD, 0xF5, 0xEA, 0x53, 0x74, 0x8E, 0x74, 0xA1, 0xA1, 0xBD, 0xBE, + 0x66, 0xC4, 0x73, 0x8F, 0x24, 0xA7, 0x2A, 0x2F, 0xE3, 0xD9, 0xF4, 0x28, 0xD9, 0xF8, 0xA3, 0x93, + 0x03, 0x9E, 0x29, 0xAB + }; + + public static readonly byte[] KMSv6Response = + { + 0x00, 0x00, 0x06, 0x00, 0x54, 0xD3, 0x40, 0x08, 0xF3, 0xCD, 0x03, 0xEF, 0xC8, 0x15, 0x87, 0x9E, + 0xCA, 0x2E, 0x85, 0xFB, 0xE6, 0xF6, 0x73, 0x66, 0xFB, 0xDA, 0xBB, 0x7B, 0xB1, 0xBC, 0xD6, 0xF9, + 0x5C, 0x41, 0xA0, 0xFE, 0xE1, 0x74, 0xC4, 0xBB, 0x91, 0xE5, 0xDE, 0x6D, 0x3A, 0x11, 0xD5, 0xFC, + 0x68, 0xC0, 0x7B, 0x82, 0xB2, 0x24, 0xD1, 0x85, 0xBA, 0x45, 0xBF, 0xF1, 0x26, 0xFA, 0xA5, 0xC6, + 0x61, 0x70, 0x69, 0x69, 0x6E, 0x0F, 0x0B, 0x60, 0xB7, 0x3D, 0xE8, 0xF1, 0x47, 0x0B, 0x65, 0xFD, + 0xA7, 0x30, 0x1E, 0xF6, 0xA4, 0xD0, 0x79, 0xC4, 0x58, 0x8D, 0x81, 0xFD, 0xA7, 0xE7, 0x53, 0xF1, + 0x67, 0x78, 0xF0, 0x0F, 0x60, 0x8F, 0xC8, 0x16, 0x35, 0x22, 0x94, 0x48, 0xCB, 0x0F, 0x8E, 0xB2, + 0x1D, 0xF7, 0x3E, 0x28, 0x42, 0x55, 0x6B, 0x07, 0xE3, 0xE8, 0x51, 0xD5, 0xFA, 0x22, 0x0C, 0x86, + 0x65, 0x0D, 0x3F, 0xDD, 0x8D, 0x9B, 0x1B, 0xC9, 0xD3, 0xB8, 0x3A, 0xEC, 0xF1, 0x11, 0x19, 0x25, + 0xF7, 0x84, 0x4A, 0x4C, 0x0A, 0xB5, 0x31, 0x94, 0x37, 0x76, 0xCE, 0xE7, 0xAB, 0xA9, 0x69, 0xDF, + 0xA4, 0xC9, 0x22, 0x6C, 0x23, 0xFF, 0x6B, 0xFC, 0xDA, 0x78, 0xD8, 0xC4, 0x8F, 0x74, 0xBB, 0x26, + 0x05, 0x00, 0x98, 0x9B, 0xE5, 0xE2, 0xAD, 0x0D, 0x57, 0x95, 0x80, 0x66, 0x8E, 0x43, 0x74, 0x87, + 0x93, 0x1F, 0xF4, 0xB2, 0x2C, 0x20, 0x5F, 0xD8, 0x9C, 0x4C, 0x56, 0xB3, 0x57, 0x44, 0x62, 0x68, + 0x8D, 0xAA, 0x40, 0x11, 0x9D, 0x84, 0x62, 0x0E, 0x43, 0x8A, 0x1D, 0xF0, 0x1C, 0x49, 0xD8, 0x56, + 0xEF, 0x4C, 0xD3, 0x64, 0xBA, 0x0D, 0xEF, 0x87, 0xB5, 0x2C, 0x88, 0xF3, 0x18, 0xFF, 0x3A, 0x8C, + 0xF5, 0xA6, 0x78, 0x5C, 0x62, 0xE3, 0x9E, 0x4C, 0xB6, 0x31, 0x2D, 0x06, 0x80, 0x92, 0xBC, 0x2E, + 0x92, 0xA6, 0x56, 0x96 + }; + + // 2^31 - 1 minutes + public static ulong TimerMax = (ulong)TimeSpan.FromMinutes(2147483647).Ticks; + + public static readonly string ZeroCID = new string('0', 48); + } + + public static class BinaryReaderExt + { + public static void Align(this BinaryReader reader, int to) + { + int pos = (int)reader.BaseStream.Position; + reader.BaseStream.Seek(-pos & (to - 1), SeekOrigin.Current); + } + + public static string ReadNullTerminatedString(this BinaryReader reader, int maxLen) + { + return Encoding.Unicode.GetString(reader.ReadBytes(maxLen)).Split(new char[] { '\0' }, 2)[0]; + } + } + + public static class BinaryWriterExt + { + public static void Align(this BinaryWriter writer, int to) + { + int pos = (int)writer.BaseStream.Position; + writer.WritePadding(-pos & (to - 1)); + } + + public static void WritePadding(this BinaryWriter writer, int len) + { + writer.Write(Enumerable.Repeat((byte)0, len).ToArray()); + } + + public static void WriteFixedString(this BinaryWriter writer, string str, int bLen) + { + writer.Write(Encoding.ASCII.GetBytes(str)); + writer.WritePadding(bLen - str.Length); + } + + public static void WriteFixedString16(this BinaryWriter writer, string str, int bLen) + { + byte[] bstr = Utils.EncodeString(str); + writer.Write(bstr); + writer.WritePadding(bLen - bstr.Length); + } + + public static byte[] GetBytes(this BinaryWriter writer) + { + return ((MemoryStream)writer.BaseStream).ToArray(); + } + } + + public static class ByteArrayExt + { + public static byte[] CastToArray(this T data) where T : struct + { + int size = Marshal.SizeOf(typeof(T)); + byte[] result = new byte[size]; + GCHandle handle = GCHandle.Alloc(result, GCHandleType.Pinned); + try + { + Marshal.StructureToPtr(data, handle.AddrOfPinnedObject(), false); + } + finally + { + handle.Free(); + } + return result; + } + + public static T CastToStruct(this byte[] data) where T : struct + { + GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); + try + { + IntPtr ptr = handle.AddrOfPinnedObject(); + return (T)Marshal.PtrToStructure(ptr, typeof(T)); + } + finally + { + handle.Free(); + } + } + } + + public static class FileStreamExt + { + public static byte[] ReadAllBytes(this FileStream fs) + { + BinaryReader br = new BinaryReader(fs); + return br.ReadBytes((int)fs.Length); + } + + public static void WriteAllBytes(this FileStream fs, byte[] data) + { + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(data.Length); + fs.Write(data, 0, data.Length); + } + } + + public static class Utils + { + public static string DecodeString(byte[] data) + { + return Encoding.Unicode.GetString(data).Trim('\0'); + } + + public static byte[] EncodeString(string str) + { + return Encoding.Unicode.GetBytes(str + '\0'); + } + + [DllImport("kernel32.dll")] + public static extern uint GetSystemDefaultLCID(); + + public static uint CRC32(byte[] data) + { + const uint polynomial = 0x04C11DB7; + uint crc = 0xffffffff; + + foreach (byte b in data) + { + crc ^= (uint)b << 24; + for (int bit = 0; bit < 8; bit++) + { + if ((crc & 0x80000000) != 0) + { + crc = (crc << 1) ^ polynomial; + } + else + { + crc <<= 1; + } + } + } + return ~crc; + } + + public static void KillSPP() + { + ServiceController sc; + + try + { + sc = new ServiceController("sppsvc"); + + if (sc.Status == ServiceControllerStatus.Stopped) + return; + } + catch (InvalidOperationException ex) + { + throw new InvalidOperationException("Unable to access sppsvc: " + ex.Message); + } + + Logger.WriteLine("Stopping sppsvc..."); + + bool stopped = false; + + for (int i = 0; stopped == false && i < 60; i++) + { + try + { + if (sc.Status != ServiceControllerStatus.StopPending) + sc.Stop(); + + sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromMilliseconds(500)); + } + catch (System.ServiceProcess.TimeoutException) + { + continue; + } + catch (InvalidOperationException) + { + System.Threading.Thread.Sleep(500); + continue; + } + + stopped = true; + } + + if (!stopped) + throw new System.TimeoutException("Failed to stop sppsvc"); + + Logger.WriteLine("sppsvc stopped successfully."); + } + + public static string GetPSPath(PSVersion version) + { + switch (version) + { + case PSVersion.Win7: + return Directory.GetFiles( + Environment.GetFolderPath(Environment.SpecialFolder.System), + "7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-8115-601632D005A0") + .FirstOrDefault() ?? ""; + case PSVersion.Win8Early: + case PSVersion.WinBlue: + case PSVersion.Win8: + case PSVersion.WinModern: + return Path.Combine( + Environment.ExpandEnvironmentVariables( + (string)Registry.GetValue( + @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", + "TokenStore", + string.Empty + ) + ), + "data.dat" + ); + default: + return ""; + } + } + + public static string GetTokensPath(PSVersion version) + { + switch (version) + { + case PSVersion.Win7: + return Path.Combine( + Environment.ExpandEnvironmentVariables("%WINDIR%"), + @"ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat" + ); + case PSVersion.Win8Early: + case PSVersion.WinBlue: + case PSVersion.Win8: + case PSVersion.WinModern: + return Path.Combine( + Environment.ExpandEnvironmentVariables( + (string)Registry.GetValue( + @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", + "TokenStore", + string.Empty + ) + ), + "tokens.dat" + ); + default: + return ""; + } + } + + public static IPhysicalStore GetStore(PSVersion version, bool production) + { + string psPath; + + try + { + psPath = GetPSPath(version); + } + catch + { + throw new FileNotFoundException("Failed to get path of physical store."); + } + + if (string.IsNullOrEmpty(psPath) || !File.Exists(psPath)) + { + throw new FileNotFoundException(string.Format("Physical store not found at expected path {0}.", psPath)); + } + + if (version == PSVersion.Vista) + { + throw new NotSupportedException("Physical store editing is not supported for Windows Vista."); + } + + return version == PSVersion.Win7 ? new PhysicalStoreWin7(psPath, production) : (IPhysicalStore)new PhysicalStoreModern(psPath, production, version); + } + + public static ITokenStore GetTokenStore(PSVersion version) + { + string tokPath; + + try + { + tokPath = GetTokensPath(version); + } + catch + { + throw new FileNotFoundException("Failed to get path of physical store."); + } + + if (string.IsNullOrEmpty(tokPath) || !File.Exists(tokPath)) + { + throw new FileNotFoundException(string.Format("Token store not found at expected path {0}.", tokPath)); + } + + return new TokenStoreModern(tokPath); + } + + public static string GetArchitecture() + { + string arch = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE", EnvironmentVariableTarget.Machine).ToUpperInvariant(); + return arch == "AMD64" ? "X64" : arch; + } + + public static PSVersion DetectVersion() + { + int build = Environment.OSVersion.Version.Build; + + if (build >= 9600) return PSVersion.WinModern; + if (build >= 6000 && build <= 6003) return PSVersion.Vista; + if (build >= 7600 && build <= 7602) return PSVersion.Win7; + if (build == 9200) return PSVersion.Win8; + + throw new NotSupportedException("Unable to auto-detect version info, please specify one manually using the /ver argument."); + } + + public static bool DetectCurrentKey() + { + SLApi.RefreshLicenseStatus(); + + using (RegistryKey wpaKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\WPA")) + { + foreach (string subKey in wpaKey.GetSubKeyNames()) + { + if (subKey.StartsWith("8DEC0AF1") && subKey.EndsWith("-1")) + { + return subKey.Contains("P"); + } + } + } + + throw new FileNotFoundException("Failed to autodetect key type, specify physical store key with /prod or /test arguments."); + } + + public static void DumpStore(PSVersion version, bool production, string filePath, string encrFilePath) + { + if (encrFilePath == null) + { + encrFilePath = GetPSPath(version); + } + + if (string.IsNullOrEmpty(encrFilePath) || !File.Exists(encrFilePath)) + { + throw new FileNotFoundException("Store does not exist at expected path '" + encrFilePath + "'."); + } + + KillSPP(); + + using (FileStream fs = File.Open(encrFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)) + { + byte[] encrData = fs.ReadAllBytes(); + File.WriteAllBytes(filePath, PhysStoreCrypto.DecryptPhysicalStore(encrData, production)); + } + + Logger.WriteLine("Store dumped successfully to '" + filePath + "'."); + } + + public static void LoadStore(PSVersion version, bool production, string filePath) + { + if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) + { + throw new FileNotFoundException("Store file '" + filePath + "' does not exist."); + } + + KillSPP(); + + using (IPhysicalStore store = GetStore(version, production)) + { + store.WriteRaw(File.ReadAllBytes(filePath)); + } + + Logger.WriteLine("Loaded store file succesfully."); + } + } + + public static class Logger + { + public static bool HideOutput = false; + + public static void WriteLine(string line) + { + if (!HideOutput) Console.WriteLine(line); + } + } +} + + +// SPP/PKeyConfig.cs +namespace LibTSforge.SPP +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Text; + using System.Xml; + + public enum PKeyAlgorithm + { + PKEY2005, + PKEY2009 + } + + public class KeyRange + { + public int Start; + public int End; + public string EulaType; + public string PartNumber; + public bool Valid; + + public bool Contains(int n) + { + return Start <= n && End <= n; + } + } + + public class ProductConfig + { + public int GroupId; + public string Edition; + public string Description; + public string Channel; + public bool Randomized; + public PKeyAlgorithm Algorithm; + public List Ranges; + public Guid ActivationId; + + private List GetPkeyRanges() + { + if (Ranges.Count == 0) + { + throw new ArgumentException("No key ranges."); + } + + if (Algorithm == PKeyAlgorithm.PKEY2005) + { + return Ranges; + } + + List FilteredRanges = Ranges.Where(r => !r.EulaType.Contains("WAU")).ToList(); + + if (FilteredRanges.Count == 0) + { + throw new NotSupportedException("Specified Activation ID is usable only for Windows Anytime Upgrade. Please use a non-WAU Activation ID instead."); + } + + return FilteredRanges; + } + + public ProductKey GetRandomKey() + { + List KeyRanges = GetPkeyRanges(); + Random rnd = new Random(); + + KeyRange range = KeyRanges[rnd.Next(KeyRanges.Count)]; + int serial = rnd.Next(range.Start, range.End); + + return new ProductKey(serial, 0, false, Algorithm, this, range); + } + } + + public class PKeyConfig + { + public Dictionary Products = new Dictionary(); + private List loadedPkeyConfigs = new List(); + + public void LoadConfig(Guid actId) + { + string pkcData; + Guid pkcFileId = SLApi.GetPkeyConfigFileId(actId); + + if (loadedPkeyConfigs.Contains(pkcFileId)) return; + + string licConts = SLApi.GetLicenseContents(pkcFileId); + + using (TextReader tr = new StringReader(licConts)) + { + XmlDocument lic = new XmlDocument(); + lic.Load(tr); + + XmlNamespaceManager nsmgr = new XmlNamespaceManager(lic.NameTable); + nsmgr.AddNamespace("rg", "urn:mpeg:mpeg21:2003:01-REL-R-NS"); + nsmgr.AddNamespace("r", "urn:mpeg:mpeg21:2003:01-REL-R-NS"); + nsmgr.AddNamespace("tm", "http://www.microsoft.com/DRM/XrML2/TM/v2"); + + XmlNode root = lic.DocumentElement; + XmlNode pkcDataNode = root.SelectSingleNode("/rg:licenseGroup/r:license/r:otherInfo/tm:infoTables/tm:infoList/tm:infoBin[@name=\"pkeyConfigData\"]", nsmgr); + pkcData = Encoding.UTF8.GetString(Convert.FromBase64String(pkcDataNode.InnerText)); + } + + using (TextReader tr = new StringReader(pkcData)) + { + XmlDocument lic = new XmlDocument(); + lic.Load(tr); + + XmlNamespaceManager nsmgr = new XmlNamespaceManager(lic.NameTable); + nsmgr.AddNamespace("p", "http://www.microsoft.com/DRM/PKEY/Configuration/2.0"); + XmlNodeList configNodes = lic.SelectNodes("//p:ProductKeyConfiguration/p:Configurations/p:Configuration", nsmgr); + XmlNodeList rangeNodes = lic.SelectNodes("//p:ProductKeyConfiguration/p:KeyRanges/p:KeyRange", nsmgr); + XmlNodeList pubKeyNodes = lic.SelectNodes("//p:ProductKeyConfiguration/p:PublicKeys/p:PublicKey", nsmgr); + + Dictionary algorithms = new Dictionary(); + Dictionary> ranges = new Dictionary>(); + + Dictionary algoConv = new Dictionary + { + { "msft:rm/algorithm/pkey/2005", PKeyAlgorithm.PKEY2005 }, + { "msft:rm/algorithm/pkey/2009", PKeyAlgorithm.PKEY2009 } + }; + + foreach (XmlNode pubKeyNode in pubKeyNodes) + { + int group = int.Parse(pubKeyNode.SelectSingleNode("./p:GroupId", nsmgr).InnerText); + algorithms[group] = algoConv[pubKeyNode.SelectSingleNode("./p:AlgorithmId", nsmgr).InnerText]; + } + + foreach (XmlNode rangeNode in rangeNodes) + { + string refActIdStr = rangeNode.SelectSingleNode("./p:RefActConfigId", nsmgr).InnerText; + + if (!ranges.ContainsKey(refActIdStr)) + { + ranges[refActIdStr] = new List(); + } + + KeyRange keyRange = new KeyRange(); + keyRange.Start = int.Parse(rangeNode.SelectSingleNode("./p:Start", nsmgr).InnerText); + keyRange.End = int.Parse(rangeNode.SelectSingleNode("./p:End", nsmgr).InnerText); + keyRange.EulaType = rangeNode.SelectSingleNode("./p:EulaType", nsmgr).InnerText; + keyRange.PartNumber = rangeNode.SelectSingleNode("./p:PartNumber", nsmgr).InnerText; + keyRange.Valid = rangeNode.SelectSingleNode("./p:IsValid", nsmgr).InnerText.ToLower() == "true"; + + ranges[refActIdStr].Add(keyRange); + } + + foreach (XmlNode configNode in configNodes) + { + string refActIdStr = configNode.SelectSingleNode("./p:ActConfigId", nsmgr).InnerText; + Guid refActId = new Guid(refActIdStr); + int group = int.Parse(configNode.SelectSingleNode("./p:RefGroupId", nsmgr).InnerText); + List keyRanges = ranges[refActIdStr]; + + if (keyRanges.Count > 0 && !Products.ContainsKey(refActId)) + { + ProductConfig productConfig = new ProductConfig(); + productConfig.GroupId = group; + productConfig.Edition = configNode.SelectSingleNode("./p:EditionId", nsmgr).InnerText; + productConfig.Description = configNode.SelectSingleNode("./p:ProductDescription", nsmgr).InnerText; + productConfig.Channel = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText; + productConfig.Randomized = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText.ToLower() == "true"; + productConfig.Algorithm = algorithms[group]; + productConfig.Ranges = keyRanges; + productConfig.ActivationId = refActId; + + Products[refActId] = productConfig; + } + } + } + + loadedPkeyConfigs.Add(pkcFileId); + } + + public ProductConfig MatchParams(int group, int serial) + { + foreach (ProductConfig config in Products.Values) + { + if (config.GroupId == group) + { + foreach (KeyRange range in config.Ranges) + { + if (range.Contains(serial)) + { + return config; + } + } + } + } + + throw new FileNotFoundException("Failed to find product matching supplied product key parameters."); + } + + public void LoadAllConfigs(Guid appId) + { + foreach (Guid actId in SLApi.GetActivationIds(appId)) + { + try + { + LoadConfig(actId); + } + catch (ArgumentException) + { + + } + } + } + + public PKeyConfig() + { + + } + } +} + + +// SPP/ProductKey.cs +namespace LibTSforge.SPP +{ + using System; + using System.IO; + using System.Linq; + using LibTSforge.Crypto; + using LibTSforge.PhysicalStore; + + public class ProductKey + { + private static readonly string ALPHABET = "BCDFGHJKMPQRTVWXY2346789"; + + private readonly ulong klow; + private readonly ulong khigh; + + public int Group; + public int Serial; + public ulong Security; + public bool Upgrade; + public PKeyAlgorithm Algorithm; + public string EulaType; + public string PartNumber; + public string Edition; + public string Channel; + public Guid ActivationId; + + private string mpc; + private string pid2; + + public byte[] KeyBytes + { + get { return BitConverter.GetBytes(klow).Concat(BitConverter.GetBytes(khigh)).ToArray(); } + } + + public ProductKey(int serial, ulong security, bool upgrade, PKeyAlgorithm algorithm, ProductConfig config, KeyRange range) + { + Group = config.GroupId; + Serial = serial; + Security = security; + Upgrade = upgrade; + Algorithm = algorithm; + EulaType = range.EulaType; + PartNumber = range.PartNumber.Split(':', ';')[0]; + Edition = config.Edition; + Channel = config.Channel; + ActivationId = config.ActivationId; + + klow = ((security & 0x3fff) << 50 | ((ulong)serial & 0x3fffffff) << 20 | ((ulong)Group & 0xfffff)); + khigh = ((upgrade ? (ulong)1 : 0) << 49 | ((security >> 14) & 0x7fffffffff)); + + uint checksum = Utils.CRC32(KeyBytes) & 0x3ff; + + khigh |= ((ulong)checksum << 39); + } + + public string GetAlgoUri() + { + return "msft:rm/algorithm/pkey/" + (Algorithm == PKeyAlgorithm.PKEY2005 ? "2005" : (Algorithm == PKeyAlgorithm.PKEY2009 ? "2009" : "Unknown")); + } + + public Guid GetPkeyId() + { + VariableBag pkb = new VariableBag(); + pkb.Blocks.AddRange(new CRCBlock[] + { + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyBindingProductKey", + ValueAsStr = ToString() + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppPkeyBindingMiscData", + Value = new byte[] { } + }, + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyBindingAlgorithm", + ValueAsStr = GetAlgoUri() + } + }); + + return new Guid(CryptoUtils.SHA256Hash(pkb.Serialize()).Take(16).ToArray()); + } + + public string GetDefaultMPC() + { + int build = Environment.OSVersion.Version.Build; + string defaultMPC = build >= 10240 ? "03612" : + build >= 9600 ? "06401" : + build >= 9200 ? "05426" : + "55041"; + return defaultMPC; + } + + public string GetMPC() + { + if (mpc != null) + { + return mpc; + } + + mpc = GetDefaultMPC(); + + // setup.cfg doesn't exist in Windows 8+ + string setupcfg = string.Format("{0}\\oobe\\{1}", Environment.SystemDirectory, "setup.cfg"); + + if (!File.Exists(setupcfg) || Edition.Contains(";")) + { + return mpc; + } + + string mpcKey = string.Format("{0}.{1}=", Utils.GetArchitecture(), Edition); + string localMPC = File.ReadAllLines(setupcfg).FirstOrDefault(line => line.Contains(mpcKey)); + if (localMPC != null) + { + mpc = localMPC.Split('=')[1].Trim(); + } + + return mpc; + } + + public string GetPid2() + { + if (pid2 != null) + { + return pid2; + } + + pid2 = ""; + + if (Algorithm == PKeyAlgorithm.PKEY2005) + { + string mpc = GetMPC(); + string serialHigh; + int serialLow; + int lastPart; + + if (EulaType == "OEM") + { + serialHigh = "OEM"; + serialLow = ((Group / 2) % 100) * 10000 + (Serial / 100000); + lastPart = Serial % 100000; + } + else + { + serialHigh = (Serial / 1000000).ToString("D3"); + serialLow = Serial % 1000000; + lastPart = ((Group / 2) % 100) * 1000 + new Random().Next(1000); + } + + int checksum = 0; + + foreach (char c in serialLow.ToString()) + { + checksum += int.Parse(c.ToString()); + } + checksum = 7 - (checksum % 7); + + pid2 = string.Format("{0}-{1}-{2:D6}{3}-{4:D5}", mpc, serialHigh, serialLow, checksum, lastPart); + } + + return pid2; + } + + public byte[] GetPid3() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(0xA4); + writer.Write(0x3); + writer.WriteFixedString(GetPid2(), 24); + writer.Write(Group); + writer.WriteFixedString(PartNumber, 16); + writer.WritePadding(0x6C); + byte[] data = writer.GetBytes(); + byte[] crc = BitConverter.GetBytes(~Utils.CRC32(data.Reverse().ToArray())).Reverse().ToArray(); + writer.Write(crc); + + return writer.GetBytes(); + } + + public byte[] GetPid4() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(0x4F8); + writer.Write(0x4); + writer.WriteFixedString16(GetExtendedPid(), 0x80); + writer.WriteFixedString16(ActivationId.ToString(), 0x80); + writer.WritePadding(0x10); + writer.WriteFixedString16(Edition, 0x208); + writer.Write(Upgrade ? (ulong)1 : 0); + writer.WritePadding(0x50); + writer.WriteFixedString16(PartNumber, 0x80); + writer.WriteFixedString16(Channel, 0x80); + writer.WriteFixedString16(EulaType, 0x80); + + return writer.GetBytes(); + } + + public string GetExtendedPid() + { + string mpc = GetMPC(); + int serialHigh = Serial / 1000000; + int serialLow = Serial % 1000000; + int licenseType; + uint lcid = Utils.GetSystemDefaultLCID(); + int build = Environment.OSVersion.Version.Build; + int dayOfYear = DateTime.Now.DayOfYear; + int year = DateTime.Now.Year; + + switch (EulaType) + { + case "OEM": + licenseType = 2; + break; + + case "Volume": + licenseType = 3; + break; + + default: + licenseType = 0; + break; + } + + return string.Format( + "{0}-{1:D5}-{2:D3}-{3:D6}-{4:D2}-{5:D4}-{6:D4}.0000-{7:D3}{8:D4}", + mpc, + Group, + serialHigh, + serialLow, + licenseType, + lcid, + build, + dayOfYear, + year + ); + } + + public byte[] GetPhoneData(PSVersion version) + { + if (version == PSVersion.Win7) + { + Random rnd = new Random(Group * 1000000000 + Serial); + byte[] data = new byte[8]; + rnd.NextBytes(data); + return data; + } + + int serialHigh = Serial / 1000000; + int serialLow = Serial % 1000000; + + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(new Guid("B8731595-A2F6-430B-A799-FBFFB81A8D73").ToByteArray()); + writer.Write(Group); + writer.Write(serialHigh); + writer.Write(serialLow); + writer.Write(Upgrade ? 1 : 0); + writer.Write(Security); + + return writer.GetBytes(); + } + + public override string ToString() + { + string keyStr = ""; + Random rnd = new Random(Group * 1000000000 + Serial); + + if (Algorithm == PKeyAlgorithm.PKEY2005) + { + keyStr = "H4X3DH4X3DH4X3DH4X3D"; + + for (int i = 0; i < 5; i++) + { + keyStr += ALPHABET[rnd.Next(24)]; + } + } + else if (Algorithm == PKeyAlgorithm.PKEY2009) + { + int last = 0; + byte[] bKey = KeyBytes; + + for (int i = 24; i >= 0; i--) + { + int current = 0; + + for (int j = 14; j >= 0; j--) + { + current *= 0x100; + current += bKey[j]; + bKey[j] = (byte)(current / 24); + current %= 24; + last = current; + } + + keyStr = ALPHABET[current] + keyStr; + } + + keyStr = keyStr.Substring(1, last) + "N" + keyStr.Substring(last + 1, keyStr.Length - last - 1); + } + + for (int i = 5; i < keyStr.Length; i += 6) + { + keyStr = keyStr.Insert(i, "-"); + } + + return keyStr; + } + } +} + + +// SPP/SLAPI.cs +namespace LibTSforge.SPP +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Runtime.InteropServices; + using System.Text; + + public static class SLApi + { + private enum SLIDTYPE + { + SL_ID_APPLICATION, + SL_ID_PRODUCT_SKU, + SL_ID_LICENSE_FILE, + SL_ID_LICENSE, + SL_ID_PKEY, + SL_ID_ALL_LICENSES, + SL_ID_ALL_LICENSE_FILES, + SL_ID_STORE_TOKEN, + SL_ID_LAST + } + + private enum SLDATATYPE + { + SL_DATA_NONE, + SL_DATA_SZ, + SL_DATA_DWORD, + SL_DATA_BINARY, + SL_DATA_MULTI_SZ, + SL_DATA_SUM + } + + [StructLayout(LayoutKind.Sequential)] + private struct SL_LICENSING_STATUS + { + public Guid SkuId; + public uint eStatus; + public uint dwGraceTime; + public uint dwTotalGraceDays; + public uint hrReason; + public ulong qwValidityExpiration; + } + + public static readonly Guid WINDOWS_APP_ID = new Guid("55c92734-d682-4d71-983e-d6ec3f16059f"); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + private static extern void SLOpen(out IntPtr hSLC); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + private static extern void SLClose(IntPtr hSLC); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetWindowsInformationDWORD(string ValueName, ref int Value); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLInstallProofOfPurchase(IntPtr hSLC, string pwszPKeyAlgorithm, string pwszPKeyString, uint cbPKeySpecificData, byte[] pbPKeySpecificData, ref Guid PKeyId); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLUninstallProofOfPurchase(IntPtr hSLC, ref Guid PKeyId); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetPKeyInformation(IntPtr hSLC, ref Guid pPKeyId, string pwszValueName, out SLDATATYPE peDataType, out uint pcbValue, out IntPtr ppbValue); + + [DllImport("sppcext.dll", CharSet = CharSet.Unicode)] + private static extern uint SLActivateProduct(IntPtr hSLC, ref Guid pProductSkuId, byte[] cbAppSpecificData, byte[] pvAppSpecificData, byte[] pActivationInfo, string pwszProxyServer, ushort wProxyPort); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGenerateOfflineInstallationId(IntPtr hSLC, ref Guid pProductSkuId, ref string ppwszInstallationId); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLDepositOfflineConfirmationId(IntPtr hSLC, ref Guid pProductSkuId, string pwszInstallationId, string pwszConfirmationId); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetSLIDList(IntPtr hSLC, SLIDTYPE eQueryIdType, ref Guid pQueryId, SLIDTYPE eReturnIdType, out uint pnReturnIds, out IntPtr ppReturnIds); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + private static extern void SLGetLicensingStatusInformation(IntPtr hSLC, ref Guid pAppID, IntPtr pProductSkuId, string pwszRightName, out uint pnStatusCount, out IntPtr ppLicensingStatus); + + [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetInstalledProductKeyIds(IntPtr hSLC, ref Guid pProductSkuId, out uint pnProductKeyIds, out IntPtr ppProductKeyIds); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLConsumeWindowsRight(uint unknown); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetProductSkuInformation(IntPtr hSLC, ref Guid pProductSkuId, string pwszValueName, out SLDATATYPE peDataType, out uint pcbValue, out IntPtr ppbValue); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetProductSkuInformation(IntPtr hSLC, ref Guid pProductSkuId, string pwszValueName, IntPtr peDataType, out uint pcbValue, out IntPtr ppbValue); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLGetLicense(IntPtr hSLC, ref Guid pLicenseFileId, out uint pcbLicenseFile, out IntPtr ppbLicenseFile); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLSetCurrentProductKey(IntPtr hSLC, ref Guid pProductSkuId, ref Guid pProductKeyId); + + [DllImport("slc.dll", CharSet = CharSet.Unicode)] + private static extern uint SLFireEvent(IntPtr hSLC, string pwszEventId, ref Guid pApplicationId); + + public class SLContext : IDisposable + { + public readonly IntPtr Handle; + + public SLContext() + { + SLOpen(out Handle); + } + + public void Dispose() + { + SLClose(Handle); + GC.SuppressFinalize(this); + } + + ~SLContext() + { + Dispose(); + } + } + + public static Guid GetDefaultActivationID(Guid appId, bool includeActivated) + { + using (SLContext sl = new SLContext()) + { + uint count; + IntPtr pLicStat; + + SLGetLicensingStatusInformation(sl.Handle, ref appId, IntPtr.Zero, null, out count, out pLicStat); + + unsafe + { + SL_LICENSING_STATUS* licensingStatuses = (SL_LICENSING_STATUS*)pLicStat; + for (int i = 0; i < count; i++) + { + SL_LICENSING_STATUS slStatus = licensingStatuses[i]; + + Guid actId = slStatus.SkuId; + if (GetInstalledPkeyID(actId) == Guid.Empty) continue; + if (IsAddon(actId)) continue; + if (!includeActivated && (slStatus.eStatus == 1)) continue; + + return actId; + } + } + + return Guid.Empty; + } + } + + public static string GetInstallationID(Guid actId) + { + using (SLContext sl = new SLContext()) + { + string installationId = null; + return SLGenerateOfflineInstallationId(sl.Handle, ref actId, ref installationId) == 0 ? installationId : null; + } + } + + public static Guid GetInstalledPkeyID(Guid actId) + { + using (SLContext sl = new SLContext()) + { + uint status; + uint count; + IntPtr pProductKeyIds; + + status = SLGetInstalledProductKeyIds(sl.Handle, ref actId, out count, out pProductKeyIds); + + if (status != 0 || count == 0) + { + return Guid.Empty; + } + + unsafe { return *(Guid*)pProductKeyIds; } + } + } + + public static uint DepositConfirmationID(Guid actId, string installationId, string confirmationId) + { + using (SLContext sl = new SLContext()) + { + return SLDepositOfflineConfirmationId(sl.Handle, ref actId, installationId, confirmationId); + } + } + + public static void RefreshLicenseStatus() + { + SLConsumeWindowsRight(0); + } + + public static bool RefreshTrustedTime(Guid actId) + { + using (SLContext sl = new SLContext()) + { + SLDATATYPE type; + uint count; + IntPtr ppbValue; + + uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "TrustedTime", out type, out count, out ppbValue); + return (int)status >= 0 && status != 0xC004F012; + } + } + + public static void FireStateChangedEvent(Guid appId) + { + using (SLContext sl = new SLContext()) + { + SLFireEvent(sl.Handle, "msft:rm/event/licensingstatechanged", ref appId); + } + } + + public static Guid GetAppId(Guid actId) + { + using (SLContext sl = new SLContext()) + { + uint status; + uint count; + IntPtr pAppIds; + + status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_APPLICATION, out count, out pAppIds); + + if (status != 0 || count == 0) + { + return Guid.Empty; + } + + unsafe { return *(Guid*)pAppIds; } + } + } + + public static bool IsAddon(Guid actId) + { + using (SLContext sl = new SLContext()) + { + uint count; + SLDATATYPE type; + IntPtr ppbValue; + + uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "DependsOn", out type, out count, out ppbValue); + return (int)status >= 0 && status != 0xC004F012; + } + } + + public static Guid GetLicenseFileId(Guid licId) + { + using (SLContext sl = new SLContext()) + { + uint status; + uint count; + IntPtr ppReturnLics; + + status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_LICENSE, ref licId, SLIDTYPE.SL_ID_LICENSE_FILE, out count, out ppReturnLics); + + if (status != 0 || count == 0) + { + return Guid.Empty; + } + + unsafe { return *(Guid*)ppReturnLics; } + } + } + + public static Guid GetPkeyConfigFileId(Guid actId) + { + using (SLContext sl = new SLContext()) + { + SLDATATYPE type; + uint len; + IntPtr ppReturnLics; + + uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "pkeyConfigLicenseId", out type, out len, out ppReturnLics); + + if (status != 0 || len == 0) + { + return Guid.Empty; + } + + Guid pkcId = new Guid(Marshal.PtrToStringAuto(ppReturnLics)); + return GetLicenseFileId(pkcId); + } + } + + public static string GetLicenseContents(Guid fileId) + { + if (fileId == Guid.Empty) throw new ArgumentException("License contents could not be retrieved."); + + using (SLContext sl = new SLContext()) + { + uint dataLen; + IntPtr dataPtr; + + if (SLGetLicense(sl.Handle, ref fileId, out dataLen, out dataPtr) != 0) + { + return null; + } + + byte[] data = new byte[dataLen]; + Marshal.Copy(dataPtr, data, 0, (int)dataLen); + + data = data.Skip(Array.IndexOf(data, (byte)'<')).ToArray(); + return Encoding.UTF8.GetString(data); + } + } + + public static bool IsPhoneActivatable(Guid actId) + { + using (SLContext sl = new SLContext()) + { + uint count; + SLDATATYPE type; + IntPtr ppbValue; + + uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "msft:sl/EUL/PHONE/PUBLIC", out type, out count, out ppbValue); + return status >= 0 && status != 0xC004F012; + } + } + + public static string GetPKeyChannel(Guid pkeyId) + { + using (SLContext sl = new SLContext()) + { + SLDATATYPE type; + uint len; + IntPtr ppbValue; + + uint status = SLGetPKeyInformation(sl.Handle, ref pkeyId, "Channel", out type, out len, out ppbValue); + + if (status != 0 || len == 0) + { + return null; + } + + return Marshal.PtrToStringAuto(ppbValue); + } + } + + public static string GetMetaStr(Guid actId, string value) + { + using (SLContext sl = new SLContext()) + { + uint len; + SLDATATYPE type; + IntPtr ppbValue; + + uint status = SLGetProductSkuInformation(sl.Handle, ref actId, value, out type, out len, out ppbValue); + + if (status != 0 || len == 0 || type != SLDATATYPE.SL_DATA_SZ) + { + return null; + } + + return Marshal.PtrToStringAuto(ppbValue); + } + } + + public static List GetActivationIds(Guid appId) + { + using (SLContext sl = new SLContext()) + { + uint count; + IntPtr pLicStat; + + SLGetLicensingStatusInformation(sl.Handle, ref appId, IntPtr.Zero, null, out count, out pLicStat); + + List result = new List(); + + unsafe + { + SL_LICENSING_STATUS* licensingStatuses = (SL_LICENSING_STATUS*)pLicStat; + for (int i = 0; i < count; i++) + { + result.Add(licensingStatuses[i].SkuId); + } + } + + return result; + } + } + + public static uint SetCurrentProductKey(Guid actId, Guid pkeyId) + { + using (SLContext sl = new SLContext()) + { + return SLSetCurrentProductKey(sl.Handle, ref actId, ref pkeyId); + } + } + + public static uint InstallProductKey(ProductKey pkey) + { + using (SLContext sl = new SLContext()) + { + Guid pkeyId = Guid.Empty; + return SLInstallProofOfPurchase(sl.Handle, pkey.GetAlgoUri(), pkey.ToString(), 0, null, ref pkeyId); + } + } + + public static uint UninstallProductKey(Guid pkeyId) + { + using (SLContext sl = new SLContext()) + { + return SLUninstallProofOfPurchase(sl.Handle, ref pkeyId); + } + } + + public static void UninstallAllProductKeys(Guid appId) + { + foreach (Guid actId in GetActivationIds(appId)) + { + Guid pkeyId = GetInstalledPkeyID(actId); + if (pkeyId == Guid.Empty) continue; + if (IsAddon(actId)) continue; + UninstallProductKey(pkeyId); + } + } + } +} + + +// Crypto/CryptoUtils.cs +namespace LibTSforge.Crypto +{ + using System; + using System.Linq; + using System.Security.Cryptography; + + public static class CryptoUtils + { + public static byte[] GenerateRandomKey(int len) + { + byte[] rand = new byte[len]; + Random r = new Random(); + r.NextBytes(rand); + + return rand; + } + + public static byte[] AESEncrypt(byte[] data, byte[] key) + { + using (Aes aes = Aes.Create()) + { + aes.Key = key; + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.PKCS7; + + ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, Enumerable.Repeat((byte)0, 16).ToArray()); + byte[] encryptedData = encryptor.TransformFinalBlock(data, 0, data.Length); + return encryptedData; + } + } + + public static byte[] AESDecrypt(byte[] data, byte[] key) + { + using (Aes aes = Aes.Create()) + { + aes.Key = key; + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.PKCS7; + + ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, Enumerable.Repeat((byte)0, 16).ToArray()); + byte[] decryptedData = decryptor.TransformFinalBlock(data, 0, data.Length); + return decryptedData; + } + } + + public static byte[] RSADecrypt(byte[] rsaKey, byte[] data) + { + + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + return rsa.Decrypt(data, false); + } + } + + public static byte[] RSAEncrypt(byte[] rsaKey, byte[] data) + { + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + return rsa.Encrypt(data, false); + } + } + + public static byte[] RSASign(byte[] rsaKey, byte[] data) + { + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(rsa); + formatter.SetHashAlgorithm("SHA1"); + + byte[] hash; + using (SHA1 sha1 = SHA1.Create()) + { + hash = sha1.ComputeHash(data); + } + + return formatter.CreateSignature(hash); + } + } + + public static bool RSAVerifySignature(byte[] rsaKey, byte[] data, byte[] signature) + { + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(rsa); + deformatter.SetHashAlgorithm("SHA1"); + + byte[] hash; + using (SHA1 sha1 = SHA1.Create()) + { + hash = sha1.ComputeHash(data); + } + + return deformatter.VerifySignature(hash, signature); + } + } + + public static byte[] HMACSign(byte[] key, byte[] data) + { + HMACSHA1 hmac = new HMACSHA1(key); + return hmac.ComputeHash(data); + } + + public static bool HMACVerify(byte[] key, byte[] data, byte[] signature) + { + HMACSHA1 hmac = new HMACSHA1(key); + return Enumerable.SequenceEqual(signature, HMACSign(key, data)); + } + + public static byte[] SHA256Hash(byte[] data) + { + using (SHA256 sha256 = SHA256.Create()) + { + return sha256.ComputeHash(data); + } + } + } +} + + +// Crypto/Keys.cs +namespace LibTSforge.Crypto +{ + public static class Keys + { + public static readonly byte[] PRODUCTION = { + 0x07, 0x02, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x52, 0x53, 0x41, 0x32, 0x00, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x29, 0x87, 0xBA, 0x3F, 0x52, 0x90, 0x57, 0xD8, 0x12, 0x26, 0x6B, 0x38, + 0xB2, 0x3B, 0xF9, 0x67, 0x08, 0x4F, 0xDD, 0x8B, 0xF5, 0xE3, 0x11, 0xB8, 0x61, 0x3A, 0x33, 0x42, + 0x51, 0x65, 0x05, 0x86, 0x1E, 0x00, 0x41, 0xDE, 0xC5, 0xDD, 0x44, 0x60, 0x56, 0x3D, 0x14, 0x39, + 0xB7, 0x43, 0x65, 0xE9, 0xF7, 0x2B, 0xA5, 0xF0, 0xA3, 0x65, 0x68, 0xE9, 0xE4, 0x8B, 0x5C, 0x03, + 0x2D, 0x36, 0xFE, 0x28, 0x4C, 0xD1, 0x3C, 0x3D, 0xC1, 0x90, 0x75, 0xF9, 0x6E, 0x02, 0xE0, 0x58, + 0x97, 0x6A, 0xCA, 0x80, 0x02, 0x42, 0x3F, 0x6C, 0x15, 0x85, 0x4D, 0x83, 0x23, 0x6A, 0x95, 0x9E, + 0x38, 0x52, 0x59, 0x38, 0x6A, 0x99, 0xF0, 0xB5, 0xCD, 0x53, 0x7E, 0x08, 0x7C, 0xB5, 0x51, 0xD3, + 0x8F, 0xA3, 0x0D, 0xA0, 0xFA, 0x8D, 0x87, 0x3C, 0xFC, 0x59, 0x21, 0xD8, 0x2E, 0xD9, 0x97, 0x8B, + 0x40, 0x60, 0xB1, 0xD7, 0x2B, 0x0A, 0x6E, 0x60, 0xB5, 0x50, 0xCC, 0x3C, 0xB1, 0x57, 0xE4, 0xB7, + 0xDC, 0x5A, 0x4D, 0xE1, 0x5C, 0xE0, 0x94, 0x4C, 0x5E, 0x28, 0xFF, 0xFA, 0x80, 0x6A, 0x13, 0x53, + 0x52, 0xDB, 0xF3, 0x04, 0x92, 0x43, 0x38, 0xB9, 0x1B, 0xD9, 0x85, 0x54, 0x7B, 0x14, 0xC7, 0x89, + 0x16, 0x8A, 0x4B, 0x82, 0xA1, 0x08, 0x02, 0x99, 0x23, 0x48, 0xDD, 0x75, 0x9C, 0xC8, 0xC1, 0xCE, + 0xB0, 0xD7, 0x1B, 0xD8, 0xFB, 0x2D, 0xA7, 0x2E, 0x47, 0xA7, 0x18, 0x4B, 0xF6, 0x29, 0x69, 0x44, + 0x30, 0x33, 0xBA, 0xA7, 0x1F, 0xCE, 0x96, 0x9E, 0x40, 0xE1, 0x43, 0xF0, 0xE0, 0x0D, 0x0A, 0x32, + 0xB4, 0xEE, 0xA1, 0xC3, 0x5E, 0x9B, 0xC7, 0x7F, 0xF5, 0x9D, 0xD8, 0xF2, 0x0F, 0xD9, 0x8F, 0xAD, + 0x75, 0x0A, 0x00, 0xD5, 0x25, 0x43, 0xF7, 0xAE, 0x51, 0x7F, 0xB7, 0xDE, 0xB7, 0xAD, 0xFB, 0xCE, + 0x83, 0xE1, 0x81, 0xFF, 0xDD, 0xA2, 0x77, 0xFE, 0xEB, 0x27, 0x1F, 0x10, 0xFA, 0x82, 0x37, 0xF4, + 0x7E, 0xCC, 0xE2, 0xA1, 0x58, 0xC8, 0xAF, 0x1D, 0x1A, 0x81, 0x31, 0x6E, 0xF4, 0x8B, 0x63, 0x34, + 0xF3, 0x05, 0x0F, 0xE1, 0xCC, 0x15, 0xDC, 0xA4, 0x28, 0x7A, 0x9E, 0xEB, 0x62, 0xD8, 0xD8, 0x8C, + 0x85, 0xD7, 0x07, 0x87, 0x90, 0x2F, 0xF7, 0x1C, 0x56, 0x85, 0x2F, 0xEF, 0x32, 0x37, 0x07, 0xAB, + 0xB0, 0xE6, 0xB5, 0x02, 0x19, 0x35, 0xAF, 0xDB, 0xD4, 0xA2, 0x9C, 0x36, 0x80, 0xC6, 0xDC, 0x82, + 0x08, 0xE0, 0xC0, 0x5F, 0x3C, 0x59, 0xAA, 0x4E, 0x26, 0x03, 0x29, 0xB3, 0x62, 0x58, 0x41, 0x59, + 0x3A, 0x37, 0x43, 0x35, 0xE3, 0x9F, 0x34, 0xE2, 0xA1, 0x04, 0x97, 0x12, 0x9D, 0x8C, 0xAD, 0xF7, + 0xFB, 0x8C, 0xA1, 0xA2, 0xE9, 0xE4, 0xEF, 0xD9, 0xC5, 0xE5, 0xDF, 0x0E, 0xBF, 0x4A, 0xE0, 0x7A, + 0x1E, 0x10, 0x50, 0x58, 0x63, 0x51, 0xE1, 0xD4, 0xFE, 0x57, 0xB0, 0x9E, 0xD7, 0xDA, 0x8C, 0xED, + 0x7D, 0x82, 0xAC, 0x2F, 0x25, 0x58, 0x0A, 0x58, 0xE6, 0xA4, 0xF4, 0x57, 0x4B, 0xA4, 0x1B, 0x65, + 0xB9, 0x4A, 0x87, 0x46, 0xEB, 0x8C, 0x0F, 0x9A, 0x48, 0x90, 0xF9, 0x9F, 0x76, 0x69, 0x03, 0x72, + 0x77, 0xEC, 0xC1, 0x42, 0x4C, 0x87, 0xDB, 0x0B, 0x3C, 0xD4, 0x74, 0xEF, 0xE5, 0x34, 0xE0, 0x32, + 0x45, 0xB0, 0xF8, 0xAB, 0xD5, 0x26, 0x21, 0xD7, 0xD2, 0x98, 0x54, 0x8F, 0x64, 0x88, 0x20, 0x2B, + 0x14, 0xE3, 0x82, 0xD5, 0x2A, 0x4B, 0x8F, 0x4E, 0x35, 0x20, 0x82, 0x7E, 0x1B, 0xFE, 0xFA, 0x2C, + 0x79, 0x6C, 0x6E, 0x66, 0x94, 0xBB, 0x0A, 0xEB, 0xBA, 0xD9, 0x70, 0x61, 0xE9, 0x47, 0xB5, 0x82, + 0xFC, 0x18, 0x3C, 0x66, 0x3A, 0x09, 0x2E, 0x1F, 0x61, 0x74, 0xCA, 0xCB, 0xF6, 0x7A, 0x52, 0x37, + 0x1D, 0xAC, 0x8D, 0x63, 0x69, 0x84, 0x8E, 0xC7, 0x70, 0x59, 0xDD, 0x2D, 0x91, 0x1E, 0xF7, 0xB1, + 0x56, 0xED, 0x7A, 0x06, 0x9D, 0x5B, 0x33, 0x15, 0xDD, 0x31, 0xD0, 0xE6, 0x16, 0x07, 0x9B, 0xA5, + 0x94, 0x06, 0x7D, 0xC1, 0xE9, 0xD6, 0xC8, 0xAF, 0xB4, 0x1E, 0x2D, 0x88, 0x06, 0xA7, 0x63, 0xB8, + 0xCF, 0xC8, 0xA2, 0x6E, 0x84, 0xB3, 0x8D, 0xE5, 0x47, 0xE6, 0x13, 0x63, 0x8E, 0xD1, 0x7F, 0xD4, + 0x81, 0x44, 0x38, 0xBF + }; + + public static readonly byte[] TEST = { + 0x07, 0x02, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x52, 0x53, 0x41, 0x32, 0x00, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x0F, 0xBE, 0x77, 0xB8, 0xDD, 0x54, 0x36, 0xDD, 0x67, 0xD4, 0x17, 0x66, + 0xC4, 0x13, 0xD1, 0x3F, 0x1E, 0x16, 0x0C, 0x16, 0x35, 0xAB, 0x6D, 0x3D, 0x34, 0x51, 0xED, 0x3F, + 0x57, 0x14, 0xB6, 0xB7, 0x08, 0xE9, 0xD9, 0x7A, 0x80, 0xB3, 0x5F, 0x9B, 0x3A, 0xFD, 0x9E, 0x37, + 0x3A, 0x53, 0x72, 0x67, 0x92, 0x60, 0xC3, 0xEF, 0xB5, 0x8E, 0x1E, 0xCF, 0x9D, 0x9C, 0xD3, 0x90, + 0xE5, 0xDD, 0xF4, 0xDB, 0xF3, 0xD6, 0x65, 0xB3, 0xC1, 0xBD, 0x69, 0xE1, 0x76, 0x95, 0xD9, 0x37, + 0xB8, 0x5E, 0xCA, 0x3D, 0x98, 0xFC, 0x50, 0x5C, 0x98, 0xAE, 0xE3, 0x7C, 0x4C, 0x27, 0xC3, 0xD0, + 0xCE, 0x78, 0x06, 0x51, 0x68, 0x23, 0xE6, 0x70, 0xF8, 0x7C, 0xAE, 0x36, 0xBE, 0x41, 0x57, 0xE2, + 0xC3, 0x2D, 0xAF, 0x21, 0xB1, 0xB3, 0x15, 0x81, 0x19, 0x26, 0x6B, 0x10, 0xB3, 0xE9, 0xD1, 0x45, + 0x21, 0x77, 0x9C, 0xF6, 0xE1, 0xDD, 0xB6, 0x78, 0x9D, 0x1D, 0x32, 0x61, 0xBC, 0x2B, 0xDB, 0x86, + 0xFB, 0x07, 0x24, 0x10, 0x19, 0x4F, 0x09, 0x6D, 0x03, 0x90, 0xD4, 0x5E, 0x30, 0x85, 0xC5, 0x58, + 0x7E, 0x5D, 0xAE, 0x9F, 0x64, 0x93, 0x04, 0x82, 0x09, 0x0E, 0x1C, 0x66, 0xA8, 0x95, 0x91, 0x51, + 0xB2, 0xED, 0x9A, 0x75, 0x04, 0x87, 0x50, 0xAC, 0xCC, 0x20, 0x06, 0x45, 0xB9, 0x7B, 0x42, 0x53, + 0x9A, 0xD1, 0x29, 0xFC, 0xEF, 0xB9, 0x47, 0x16, 0x75, 0x69, 0x05, 0x87, 0x2B, 0xCB, 0x54, 0x9C, + 0x21, 0x2D, 0x50, 0x8E, 0x12, 0xDE, 0xD3, 0x6B, 0xEC, 0x92, 0xA1, 0xB1, 0xE9, 0x4B, 0xBF, 0x6B, + 0x9A, 0x38, 0xC7, 0x13, 0xFA, 0x78, 0xA1, 0x3C, 0x1E, 0xBB, 0x38, 0x31, 0xBB, 0x0C, 0x9F, 0x70, + 0x1A, 0x31, 0x00, 0xD7, 0x5A, 0xA5, 0x84, 0x24, 0x89, 0x80, 0xF5, 0x88, 0xC2, 0x31, 0x18, 0xDC, + 0x53, 0x05, 0x5D, 0xFA, 0x81, 0xDC, 0xE1, 0xCE, 0xA4, 0xAA, 0xBA, 0x07, 0xDA, 0x28, 0x4F, 0x64, + 0x0E, 0x84, 0x9B, 0x06, 0xDE, 0xC8, 0x78, 0x66, 0x2F, 0x17, 0x25, 0xA8, 0x9C, 0x99, 0xFC, 0xBC, + 0x7D, 0x01, 0x42, 0xD7, 0x35, 0xBF, 0x19, 0xF6, 0x3F, 0x20, 0xD9, 0x98, 0x9B, 0x5D, 0xDD, 0x39, + 0xBE, 0x81, 0x00, 0x0B, 0xDE, 0x6F, 0x14, 0xCA, 0x7E, 0xF8, 0xC0, 0x26, 0xA8, 0x1D, 0xD1, 0x16, + 0x88, 0x64, 0x87, 0x36, 0x45, 0x37, 0x50, 0xDA, 0x6C, 0xEB, 0x85, 0xB5, 0x43, 0x29, 0x88, 0x6F, + 0x2F, 0xFE, 0x8D, 0x12, 0x8B, 0x72, 0xB7, 0x5A, 0xCB, 0x66, 0xC2, 0x2E, 0x1D, 0x7D, 0x42, 0xA6, + 0xF4, 0xFE, 0x26, 0x5D, 0x54, 0x9E, 0x77, 0x1D, 0x97, 0xC2, 0xF3, 0xFD, 0x60, 0xB3, 0x22, 0x88, + 0xCA, 0x27, 0x99, 0xDF, 0xC8, 0xB1, 0xD7, 0xC6, 0x54, 0xA6, 0x50, 0xB9, 0x54, 0xF5, 0xDE, 0xFE, + 0xE1, 0x81, 0xA2, 0xBE, 0x81, 0x9F, 0x48, 0xFF, 0x2F, 0xB8, 0xA4, 0xB3, 0x17, 0xD8, 0xC1, 0xB9, + 0x5D, 0x21, 0x3D, 0xA2, 0xED, 0x1C, 0x96, 0x66, 0xEE, 0x1F, 0x47, 0xCF, 0x62, 0xFA, 0xD6, 0xC1, + 0x87, 0x5B, 0xC4, 0xE5, 0xD9, 0x08, 0x38, 0x22, 0xFA, 0x21, 0xBD, 0xF2, 0x88, 0xDA, 0xE2, 0x24, + 0x25, 0x1F, 0xF1, 0x0B, 0x2D, 0xAE, 0x04, 0xBE, 0xA6, 0x7F, 0x75, 0x8C, 0xD9, 0x97, 0xE1, 0xCA, + 0x35, 0xB9, 0xFC, 0x6F, 0x01, 0x68, 0x11, 0xD3, 0x68, 0x32, 0xD0, 0xC1, 0x69, 0xA3, 0xCF, 0x9B, + 0x10, 0xE4, 0x69, 0xA7, 0xCF, 0xE1, 0xFE, 0x2A, 0x07, 0x9E, 0xC1, 0x37, 0x84, 0x68, 0xE5, 0xC5, + 0xAB, 0x25, 0xEC, 0x7D, 0x7D, 0x74, 0x6A, 0xD1, 0xD5, 0x4D, 0xD7, 0xE1, 0x7D, 0xDE, 0x30, 0x4B, + 0xE6, 0x5D, 0xCD, 0x91, 0x59, 0xF6, 0x80, 0xFD, 0xC6, 0x3C, 0xDD, 0x94, 0x7F, 0x15, 0x9D, 0xEF, + 0x2F, 0x00, 0x62, 0xD7, 0xDA, 0xB9, 0xB3, 0xD9, 0x8D, 0xE8, 0xD7, 0x3C, 0x96, 0x45, 0x5D, 0x1E, + 0x50, 0xFB, 0xAA, 0x43, 0xD3, 0x47, 0x77, 0x81, 0xE9, 0x67, 0xE4, 0xFE, 0xDF, 0x42, 0x79, 0xCB, + 0xA7, 0xAD, 0x5D, 0x48, 0xF5, 0xB7, 0x74, 0x96, 0x12, 0x23, 0x06, 0x70, 0x42, 0x68, 0x7A, 0x44, + 0xFC, 0xA0, 0x31, 0x7F, 0x68, 0xCA, 0xA2, 0x14, 0x5D, 0xA3, 0xCF, 0x42, 0x23, 0xAB, 0x47, 0xF6, + 0xB2, 0xFC, 0x6D, 0xF1 + }; + } +} + + +// Crypto/PhysStoreCrypto.cs +namespace LibTSforge.Crypto +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Text; + + public static class PhysStoreCrypto + { + public static byte[] DecryptPhysicalStore(byte[] data, bool production) + { + byte[] rsaKey = production ? Keys.PRODUCTION : Keys.TEST; + BinaryReader br = new BinaryReader(new MemoryStream(data)); + br.BaseStream.Seek(0x10, SeekOrigin.Begin); + byte[] aesKeySig = br.ReadBytes(0x80); + byte[] encAesKey = br.ReadBytes(0x80); + + if (CryptoUtils.RSAVerifySignature(rsaKey, encAesKey, aesKeySig)) + { + byte[] aesKey = CryptoUtils.RSADecrypt(rsaKey, encAesKey); + byte[] decData = CryptoUtils.AESDecrypt(br.ReadBytes((int)br.BaseStream.Length - 0x110), aesKey); + byte[] hmacKey = decData.Take(0x10).ToArray(); + byte[] hmacSig = decData.Skip(0x10).Take(0x14).ToArray(); + byte[] psData = decData.Skip(0x28).ToArray(); + + if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig)) + { + Logger.WriteLine("Warning: Failed to verify HMAC. Physical store is either corrupt or in Vista format."); + } + + return psData; + } + + throw new Exception("Failed to decrypt physical store."); + } + + public static byte[] EncryptPhysicalStore(byte[] data, bool production, PSVersion version) + { + Dictionary versionTable = new Dictionary + { + {PSVersion.Win7, 5}, + {PSVersion.Win8, 1}, + {PSVersion.WinBlue, 2}, + {PSVersion.WinModern, 3} + }; + + byte[] rsaKey = production ? Keys.PRODUCTION : Keys.TEST; + + byte[] aesKey = Encoding.UTF8.GetBytes("massgrave.dev :3"); + byte[] hmacKey = CryptoUtils.GenerateRandomKey(0x10); + + byte[] encAesKey = CryptoUtils.RSAEncrypt(rsaKey, aesKey); + byte[] aesKeySig = CryptoUtils.RSASign(rsaKey, encAesKey); + byte[] hmacSig = CryptoUtils.HMACSign(hmacKey, data); + + byte[] decData = new byte[] { }; + decData = decData.Concat(hmacKey).Concat(hmacSig).Concat(BitConverter.GetBytes(0)).Concat(data).ToArray(); + byte[] encData = CryptoUtils.AESEncrypt(decData, aesKey); + + BinaryWriter bw = new BinaryWriter(new MemoryStream()); + bw.Write(versionTable[version]); + bw.Write(Encoding.UTF8.GetBytes("UNTRUSTSTORE")); + bw.Write(aesKeySig); + bw.Write(encAesKey); + bw.Write(encData); + + return bw.GetBytes(); + } + } +} + + +// Modifiers/GenPKeyInstall.cs +namespace LibTSforge.Modifiers +{ + using System; + using System.IO; + using Microsoft.Win32; + using LibTSforge.PhysicalStore; + using LibTSforge.SPP; + using LibTSforge.TokenStore; + + public static class GenPKeyInstall + { + private static void WritePkey2005RegistryValues(PSVersion version, ProductKey pkey) + { + Logger.WriteLine("Writing registry data for Windows product key..."); + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductId", pkey.GetPid2()); + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DigitalProductId", pkey.GetPid3()); + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DigitalProductId4", pkey.GetPid4()); + + if (Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Registration", "ProductId", null) != null) + { + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Registration", "ProductId", pkey.GetPid2()); + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Registration", "DigitalProductId", pkey.GetPid3()); + Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Registration", "DigitalProductId4", pkey.GetPid4()); + } + + if (pkey.Channel == "Volume:CSVLK" && version != PSVersion.Win7) + { + Registry.SetValue(@"HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", "KmsHostConfig", 1); + } + } + + public static void InstallGenPKey(PSVersion version, bool production, Guid actId) + { + if (actId == Guid.Empty) throw new ArgumentException("Activation ID must be specified for generated product key install."); + + PKeyConfig pkc = new PKeyConfig(); + + try + { + pkc.LoadConfig(actId); + } + catch (ArgumentException) + { + pkc.LoadAllConfigs(SLApi.GetAppId(actId)); + } + + ProductConfig config; + pkc.Products.TryGetValue(actId, out config); + + if (config == null) throw new ArgumentException("Activation ID " + actId + " not found in PKeyConfig."); + + ProductKey pkey = config.GetRandomKey(); + + Guid instPkeyId = SLApi.GetInstalledPkeyID(actId); + if (instPkeyId != Guid.Empty) SLApi.UninstallProductKey(instPkeyId); + + if (pkey.Algorithm == PKeyAlgorithm.PKEY2009) + { + uint status = SLApi.InstallProductKey(pkey); + Logger.WriteLine(string.Format("Installing generated product key {0} status {1:X}", pkey.ToString(), status)); + + if ((int)status < 0) + { + throw new ApplicationException("Failed to install generated product key."); + } + + Logger.WriteLine("Successfully deposited generated product key."); + return; + } + + Logger.WriteLine("Key range is PKEY2005, creating fake key data..."); + + if (pkey.Channel == "Volume:GVLK" && version == PSVersion.Win7) throw new NotSupportedException("Fake GVLK generation is not supported on Windows 7."); + + VariableBag pkb = new VariableBag(); + pkb.Blocks.AddRange(new CRCBlock[] + { + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyBindingProductKey", + ValueAsStr = pkey.ToString() + }, + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyBindingMPC", + ValueAsStr = pkey.GetMPC() + }, + new CRCBlock { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppPkeyBindingPid2", + ValueAsStr = pkey.GetPid2() + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppPkeyBindingPid3", + Value = pkey.GetPid3() + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppPkeyBindingPid4", + Value = pkey.GetPid4() + }, + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyChannelId", + ValueAsStr = pkey.Channel + }, + new CRCBlock + { + DataType = CRCBlockType.STRING, + KeyAsStr = "SppPkeyBindingEditionId", + ValueAsStr = pkey.Edition + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = (version == PSVersion.Win7) ? "SppPkeyShortAuthenticator" : "SppPkeyPhoneActivationData", + Value = pkey.GetPhoneData(version) + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppPkeyBindingMiscData", + Value = new byte[] { } + } + }); + + Guid appId = SLApi.GetAppId(actId); + string pkeyId = pkey.GetPkeyId().ToString(); + bool isAddon = SLApi.IsAddon(actId); + string currEdition = SLApi.GetMetaStr(actId, "Family"); + + if (appId == SLApi.WINDOWS_APP_ID && !isAddon) + { + SLApi.UninstallAllProductKeys(appId); + } + + Utils.KillSPP(); + + using (IPhysicalStore ps = Utils.GetStore(version, production)) + { + using (ITokenStore tks = Utils.GetTokenStore(version)) + { + Logger.WriteLine("Writing to physical store and token store..."); + + string suffix = (version == PSVersion.Win8 || version == PSVersion.WinBlue || version == PSVersion.WinModern) ? "_--" : ""; + string metSuffix = suffix + "_met"; + + if (appId == SLApi.WINDOWS_APP_ID && !isAddon) + { + string edTokName = "msft:spp/token/windows/productkeyid/" + currEdition; + + TokenMeta edToken = tks.GetMetaEntry(edTokName); + edToken.Data["windowsComponentEditionPkeyId"] = pkeyId; + edToken.Data["windowsComponentEditionSkuId"] = actId.ToString(); + tks.SetEntry(edTokName, "xml", edToken.Serialize()); + + WritePkey2005RegistryValues(version, pkey); + } + + string uriMapName = "msft:spp/token/PKeyIdUriMapper" + metSuffix; + TokenMeta uriMap = tks.GetMetaEntry(uriMapName); + uriMap.Data[pkeyId] = pkey.GetAlgoUri(); + tks.SetEntry(uriMapName, "xml", uriMap.Serialize()); + + string skuMetaName = actId.ToString() + metSuffix; + TokenMeta skuMeta = tks.GetMetaEntry(skuMetaName); + + foreach (string k in skuMeta.Data.Keys) + { + if (k.StartsWith("pkeyId_")) + { + skuMeta.Data.Remove(k); + break; + } + } + + skuMeta.Data["pkeyId"] = pkeyId; + skuMeta.Data["pkeyIdList"] = pkeyId; + tks.SetEntry(skuMetaName, "xml", skuMeta.Serialize()); + + string psKey = string.Format("SPPSVC\\{0}\\{1}", appId, actId); + ps.DeleteBlock(psKey, pkeyId); + ps.AddBlock(new PSBlock + { + Type = BlockType.NAMED, + Flags = (version == PSVersion.WinModern) ? (uint)0x402 : 0x2, + KeyAsStr = psKey, + ValueAsStr = pkeyId, + Data = pkb.Serialize() + }); + + string cachePath = Utils.GetTokensPath(version).Replace("tokens.dat", @"cache\cache.dat"); + if (File.Exists(cachePath)) File.Delete(cachePath); + } + } + + SLApi.RefreshTrustedTime(actId); + Logger.WriteLine("Successfully deposited fake product key."); + } + } +} + + +// Modifiers/GracePeriodReset.cs +namespace LibTSforge.Modifiers +{ + using System; + using System.Collections.Generic; + using System.Linq; + using LibTSforge.PhysicalStore; + + public static class GracePeriodReset + { + public static void Reset(PSVersion version, bool production) + { + Utils.KillSPP(); + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + string value = "msft:sl/timer"; + List blocks = store.FindBlocks(value).ToList(); + + foreach (PSBlock block in blocks) + { + store.DeleteBlock(block.KeyAsStr, block.ValueAsStr); + } + } + + Logger.WriteLine("Successfully reset all grace and evaluation period timers."); + } + } +} + + +// Modifiers/KeyChangeLockDelete.cs +namespace LibTSforge.Modifiers +{ + using System.Collections.Generic; + using System.Linq; + using LibTSforge.PhysicalStore; + using LibTSforge; + public static class KeyChangeLockDelete + { + public static void Delete(PSVersion version, bool production) + { + Utils.KillSPP(); + Logger.WriteLine("Writing TrustedStore data..."); + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + List values = new List + { + "msft:spp/timebased/AB", + "msft:spp/timebased/CD" + }; + List blocks = new List(); + foreach (string value in values) + { + blocks.AddRange(store.FindBlocks(value).ToList()); + } + foreach (PSBlock block in blocks) + { + store.DeleteBlock(block.KeyAsStr, block.ValueAsStr); + } + } + Logger.WriteLine("Successfully removed the key change lock."); + } + } +} + + +// Modifiers/KMSHostCharge.cs +namespace LibTSforge.Modifiers +{ + using System; + using System.IO; + using LibTSforge.PhysicalStore; + using LibTSforge.SPP; + + public static class KMSHostCharge + { + public static void Charge(PSVersion version, Guid actId, bool production) + { + if (actId == Guid.Empty) + { + actId = SLApi.GetDefaultActivationID(SLApi.WINDOWS_APP_ID, true); + + if (actId == Guid.Empty) + { + throw new NotSupportedException("No applicable activation IDs found."); + } + } + + if (SLApi.GetPKeyChannel(SLApi.GetInstalledPkeyID(actId)) != "Volume:CSVLK") + { + throw new NotSupportedException("Non-Volume:CSVLK product key installed."); + } + + Guid appId = SLApi.GetAppId(actId); + int totalClients = 50; + int currClients = 25; + byte[] hwidBlock = Constants.UniversalHWIDBlock; + string key = string.Format("SPPSVC\\{0}", appId); + long ldapTimestamp = DateTime.Now.ToFileTime(); + + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + + for (int i = 0; i < currClients; i++) + { + writer.Write(ldapTimestamp - (10 * (i + 1))); + writer.Write(Guid.NewGuid().ToByteArray()); + } + + byte[] cmidGuids = writer.GetBytes(); + + writer = new BinaryWriter(new MemoryStream()); + + writer.Write(new byte[40]); + + writer.Seek(4, SeekOrigin.Begin); + writer.Write((byte)currClients); + + writer.Seek(24, SeekOrigin.Begin); + writer.Write((byte)currClients); + byte[] reqCounts = writer.GetBytes(); + + Utils.KillSPP(); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + VariableBag kmsCountData = new VariableBag(); + kmsCountData.Blocks.AddRange(new CRCBlock[] + { + new CRCBlock + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppBindingLicenseData", + Value = hwidBlock + }, + new CRCBlock + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = (uint)totalClients + }, + new CRCBlock + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = 1051200000 + }, + new CRCBlock + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = (uint)currClients + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + Key = new byte[] { }, + Value = cmidGuids + }, + new CRCBlock + { + DataType = CRCBlockType.BINARY, + Key = new byte[] { }, + Value = reqCounts + } + }); + + byte[] kmsChargeData = kmsCountData.Serialize(); + string countVal = string.Format("msft:spp/kms/host/2.0/store/counters/{0}", appId); + + store.DeleteBlock(key, countVal); + store.AddBlock(new PSBlock + { + Type = BlockType.NAMED, + Flags = (version == PSVersion.WinModern) ? (uint)0x400 : 0, + KeyAsStr = key, + ValueAsStr = countVal, + Data = kmsChargeData + }); + + Logger.WriteLine(string.Format("Set charge count to {0} successfully.", currClients)); + } + } + } +} + + +// Modifiers/RearmReset.cs +namespace LibTSforge.Modifiers +{ + using System; + using System.Collections.Generic; + using System.Linq; + using LibTSforge.PhysicalStore; + + public static class RearmReset + { + public static void Reset(PSVersion version, bool production) + { + Utils.KillSPP(); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + List blocks; + + if (version == PSVersion.Win7) + { + blocks = store.FindBlocks(0xA0000).ToList(); + } + else + { + blocks = store.FindBlocks("__##USERSEP-RESERVED##__$$REARM-COUNT$$").ToList(); + } + + foreach (PSBlock block in blocks) + { + if (version == PSVersion.Win7) + { + store.SetBlock(block.KeyAsStr, block.ValueAsInt, new byte[8]); + } + else + { + store.SetBlock(block.KeyAsStr, block.ValueAsStr, new byte[8]); + } + } + + Logger.WriteLine("Successfully reset all rearm counters."); + } + } + } +} + + +// Modifiers/TamperedFlagsDelete.cs +namespace LibTSforge.Modifiers +{ + using System; + using System.Linq; + using LibTSforge.PhysicalStore; + + public static class TamperedFlagsDelete + { + public static void DeleteTamperFlags(PSVersion version, bool production) + { + Utils.KillSPP(); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + if (version != PSVersion.Win7) + { + string recreatedFlag = "__##USERSEP-RESERVED##__$$RECREATED-FLAG$$"; + string recoveredFlag = "__##USERSEP-RESERVED##__$$RECOVERED-FLAG$$"; + + DeleteFlag(store, recreatedFlag); + DeleteFlag(store, recoveredFlag); + } + else + { + SetFlag(store, 0xA0001); + } + + Logger.WriteLine("Successfully cleared the tamper state."); + } + } + + private static void DeleteFlag(IPhysicalStore store, string flag) + { + store.FindBlocks(flag).ToList().ForEach(block => store.DeleteBlock(block.KeyAsStr, block.ValueAsStr)); + } + + private static void SetFlag(IPhysicalStore store, uint flag) + { + store.FindBlocks(flag).ToList().ForEach(block => store.SetBlock(block.KeyAsStr, block.ValueAsInt, new byte[8])); + } + } +} + + +// Modifiers/UniqueIdDelete.cs +namespace LibTSforge.Modifiers +{ + using System; + using LibTSforge.PhysicalStore; + using LibTSforge.SPP; + + public static class UniqueIdDelete + { + public static void DeleteUniqueId(PSVersion version, bool production, Guid actId) + { + Guid appId; + + if (actId == Guid.Empty) + { + appId = SLApi.WINDOWS_APP_ID; + actId = SLApi.GetDefaultActivationID(appId, true); + + if (actId == Guid.Empty) + { + throw new Exception("No applicable activation IDs found."); + } + } + else + { + appId = SLApi.GetAppId(actId); + } + + string instId = SLApi.GetInstallationID(actId); + Guid pkeyId = SLApi.GetInstalledPkeyID(actId); + + Utils.KillSPP(); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId); + PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString()); + + if (keyBlock == null) + { + throw new Exception("No product key found."); + } + + VariableBag pkb = new VariableBag(keyBlock.Data); + + pkb.DeleteBlock("SppPkeyUniqueIdToken"); + + store.SetBlock(key, pkeyId.ToString(), pkb.Serialize()); + } + + Logger.WriteLine("Successfully removed Unique ID for product key ID " + pkeyId); + } + } +} + + +// Activators/ZeroCID.cs +namespace LibTSforge.Activators +{ + using System; + using System.IO; + using LibTSforge.Crypto; + using LibTSforge.PhysicalStore; + using LibTSforge.SPP; + + public static class ZeroCID + { + public static void Deposit(Guid actId, string instId) + { + uint status = SLApi.DepositConfirmationID(actId, instId, Constants.ZeroCID); + Logger.WriteLine(string.Format("Depositing fake CID status {0:X}", status)); + + if (status != 0) + { + throw new InvalidOperationException("Failed to deposit fake CID."); + } + } + + public static void Activate(PSVersion version, bool production, Guid actId) + { + Guid appId; + + if (actId == Guid.Empty) + { + appId = SLApi.WINDOWS_APP_ID; + actId = SLApi.GetDefaultActivationID(appId, false); + + if (actId == Guid.Empty) + { + throw new NotSupportedException("No applicable activation IDs found."); + } + } + else + { + appId = SLApi.GetAppId(actId); + } + + if (!SLApi.IsPhoneActivatable(actId)) + { + throw new NotSupportedException("Phone license is unavailable for this product."); + } + + string instId = SLApi.GetInstallationID(actId); + Guid pkeyId = SLApi.GetInstalledPkeyID(actId); + + if (version == PSVersion.Win7) + { + Deposit(actId, instId); + } + + Utils.KillSPP(); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = Utils.GetStore(version, production)) + { + byte[] hwidBlock = Constants.UniversalHWIDBlock; + + Logger.WriteLine("Activation ID: " + actId); + Logger.WriteLine("Installation ID: " + instId); + Logger.WriteLine("Product Key ID: " + pkeyId); + + byte[] iidHash; + + if (version == PSVersion.Win7) + { + iidHash = CryptoUtils.SHA256Hash(Utils.EncodeString(instId)); + } + else + { + iidHash = CryptoUtils.SHA256Hash(Utils.EncodeString(instId + '\0' + Constants.ZeroCID)); + } + + string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId); + PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString()); + + if (keyBlock == null) + { + throw new InvalidDataException("Failed to get product key data for activation ID " + actId + "."); + } + + VariableBag pkb = new VariableBag(keyBlock.Data); + + byte[] pkeyData; + + if (version == PSVersion.Win7) + { + pkeyData = pkb.GetBlock("SppPkeyShortAuthenticator").Value; + } + else + { + pkeyData = pkb.GetBlock("SppPkeyPhoneActivationData").Value; + } + + pkb.DeleteBlock("SppPkeyVirtual"); + store.SetBlock(key, pkeyId.ToString(), pkb.Serialize()); + + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(0x20); + writer.Write(iidHash); + writer.Write(hwidBlock.Length); + writer.Write(hwidBlock); + byte[] tsHwidData = writer.GetBytes(); + + writer = new BinaryWriter(new MemoryStream()); + writer.Write(0x20); + writer.Write(iidHash); + writer.Write(pkeyData.Length); + writer.Write(pkeyData); + byte[] tsPkeyInfoData = writer.GetBytes(); + + store.AddBlocks(new PSBlock[] { + new PSBlock + { + Type = BlockType.NAMED, + Flags = 0, + KeyAsStr = key, + ValueAsStr = "msft:Windows/7.0/Phone/Cached/HwidBlock/" + pkeyId, + Data = tsHwidData + }, + new PSBlock + { + Type = BlockType.NAMED, + Flags = 0, + KeyAsStr = key, + ValueAsStr = "msft:Windows/7.0/Phone/Cached/PKeyInfo/" + pkeyId, + Data = tsPkeyInfoData + } + }); + } + + if (version != PSVersion.Win7) + { + Deposit(actId, instId); + } + + SLApi.RefreshLicenseStatus(); + SLApi.FireStateChangedEvent(appId); + Logger.WriteLine("Activated using ZeroCID successfully."); + } + } +} + + +// TokenStore/Common.cs +namespace LibTSforge.TokenStore +{ + using System.Collections.Generic; + using System.IO; + + public class TokenEntry + { + public string Name; + public string Extension; + public byte[] Data; + public bool Populated; + } + + public class TokenMeta + { + public string Name; + public Dictionary Data = new Dictionary(); + + public byte[] Serialize() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(1); + byte[] nameBytes = Utils.EncodeString(Name); + writer.Write(nameBytes.Length); + writer.Write(nameBytes); + + foreach (KeyValuePair kv in Data) + { + byte[] keyBytes = Utils.EncodeString(kv.Key); + byte[] valueBytes = Utils.EncodeString(kv.Value); + writer.Write(keyBytes.Length); + writer.Write(valueBytes.Length); + writer.Write(keyBytes); + writer.Write(valueBytes); + } + + return writer.GetBytes(); + } + + public void Deserialize(byte[] data) + { + BinaryReader reader = new BinaryReader(new MemoryStream(data)); + reader.ReadInt32(); + int nameLen = reader.ReadInt32(); + Name = reader.ReadNullTerminatedString(nameLen); + + while (reader.BaseStream.Position < data.Length - 0x8) + { + int keyLen = reader.ReadInt32(); + int valueLen = reader.ReadInt32(); + string key = reader.ReadNullTerminatedString(keyLen); + string value = reader.ReadNullTerminatedString(valueLen); + Data[key] = value; + } + } + + public TokenMeta(byte[] data) + { + Deserialize(data); + } + + public TokenMeta() + { + + } + } +} + + +// TokenStore/ITokenStore.cs +namespace LibTSforge.TokenStore +{ + using System; + + public interface ITokenStore : IDisposable + { + void Deserialize(); + void Serialize(); + void AddEntry(TokenEntry entry); + void AddEntries(TokenEntry[] entries); + void DeleteEntry(string name, string ext); + void DeleteUnpopEntry(string name, string ext); + TokenEntry GetEntry(string name, string ext); + TokenMeta GetMetaEntry(string name); + void SetEntry(string name, string ext, byte[] data); + } +} + + +// TokenStore/TokenStoreModern.cs +namespace LibTSforge.TokenStore +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using LibTSforge.Crypto; + + public class TokenStoreModern : ITokenStore + { + private static readonly uint VERSION = 3; + private static readonly int ENTRY_SIZE = 0x9E; + private static readonly int BLOCK_SIZE = 0x4020; + private static readonly int ENTRIES_PER_BLOCK = BLOCK_SIZE / ENTRY_SIZE; + private static readonly int BLOCK_PAD_SIZE = 0x66; + + private static readonly byte[] CONTS_HEADER = Enumerable.Repeat((byte)0x55, 0x20).ToArray(); + private static readonly byte[] CONTS_FOOTER = Enumerable.Repeat((byte)0xAA, 0x20).ToArray(); + + private List Entries = new List(); + public FileStream TokensFile; + + public void Deserialize() + { + if (TokensFile.Length < BLOCK_SIZE) return; + + TokensFile.Seek(0x24, SeekOrigin.Begin); + uint nextBlock = 0; + + BinaryReader reader = new BinaryReader(TokensFile); + do + { + uint curOffset = reader.ReadUInt32(); + nextBlock = reader.ReadUInt32(); + + for (int i = 0; i < ENTRIES_PER_BLOCK; i++) + { + curOffset = reader.ReadUInt32(); + bool populated = reader.ReadUInt32() == 1; + uint contentOffset = reader.ReadUInt32(); + uint contentLength = reader.ReadUInt32(); + uint allocLength = reader.ReadUInt32(); + byte[] contentData = new byte[] { }; + + if (populated) + { + reader.BaseStream.Seek(contentOffset + 0x20, SeekOrigin.Begin); + uint dataLength = reader.ReadUInt32(); + + if (dataLength != contentLength) + { + throw new FormatException("Data length in tokens content is inconsistent with entry."); + } + + reader.ReadBytes(0x20); + contentData = reader.ReadBytes((int)contentLength); + } + + reader.BaseStream.Seek(curOffset + 0x14, SeekOrigin.Begin); + + Entries.Add(new TokenEntry + { + Name = reader.ReadNullTerminatedString(0x82), + Extension = reader.ReadNullTerminatedString(0x8), + Data = contentData, + Populated = populated + }); + } + + reader.BaseStream.Seek(nextBlock, SeekOrigin.Begin); + } while (nextBlock != 0); + } + + public void Serialize() + { + MemoryStream tokens = new MemoryStream(); + + using (BinaryWriter writer = new BinaryWriter(tokens)) + { + writer.Write(VERSION); + writer.Write(CONTS_HEADER); + + int curBlockOffset = (int)writer.BaseStream.Position; + int curEntryOffset = curBlockOffset + 0x8; + int curContsOffset = curBlockOffset + BLOCK_SIZE; + + for (int eIndex = 0; eIndex < ((Entries.Count / ENTRIES_PER_BLOCK) + 1) * ENTRIES_PER_BLOCK; eIndex++) + { + TokenEntry entry; + + if (eIndex < Entries.Count) + { + entry = Entries[eIndex]; + } + else + { + entry = new TokenEntry + { + Name = "", + Extension = "", + Populated = false, + Data = new byte[] { } + }; + } + + writer.BaseStream.Seek(curBlockOffset, SeekOrigin.Begin); + writer.Write(curBlockOffset); + writer.Write(0); + + writer.BaseStream.Seek(curEntryOffset, SeekOrigin.Begin); + writer.Write(curEntryOffset); + writer.Write(entry.Populated ? 1 : 0); + writer.Write(entry.Populated ? curContsOffset : 0); + writer.Write(entry.Populated ? entry.Data.Length : -1); + writer.Write(entry.Populated ? entry.Data.Length : -1); + writer.WriteFixedString16(entry.Name, 0x82); + writer.WriteFixedString16(entry.Extension, 0x8); + curEntryOffset = (int)writer.BaseStream.Position; + + if (entry.Populated) + { + writer.BaseStream.Seek(curContsOffset, SeekOrigin.Begin); + writer.Write(CONTS_HEADER); + writer.Write(entry.Data.Length); + writer.Write(CryptoUtils.SHA256Hash(entry.Data)); + writer.Write(entry.Data); + writer.Write(CONTS_FOOTER); + curContsOffset = (int)writer.BaseStream.Position; + } + + if ((eIndex + 1) % ENTRIES_PER_BLOCK == 0 && eIndex != 0) + { + if (eIndex < Entries.Count) + { + writer.BaseStream.Seek(curBlockOffset + 0x4, SeekOrigin.Begin); + writer.Write(curContsOffset); + } + + writer.BaseStream.Seek(curEntryOffset, SeekOrigin.Begin); + writer.WritePadding(BLOCK_PAD_SIZE); + + writer.BaseStream.Seek(curBlockOffset, SeekOrigin.Begin); + byte[] blockHash; + byte[] blockData = new byte[BLOCK_SIZE - 0x20]; + + tokens.Read(blockData, 0, BLOCK_SIZE - 0x20); + blockHash = CryptoUtils.SHA256Hash(blockData); + + writer.BaseStream.Seek(curBlockOffset + BLOCK_SIZE - 0x20, SeekOrigin.Begin); + writer.Write(blockHash); + + curBlockOffset = curContsOffset; + curEntryOffset = curBlockOffset + 0x8; + curContsOffset = curBlockOffset + BLOCK_SIZE; + } + } + + tokens.SetLength(curBlockOffset); + } + + byte[] tokensData = tokens.ToArray(); + byte[] tokensHash = CryptoUtils.SHA256Hash(tokensData.Take(0x4).Concat(tokensData.Skip(0x24)).ToArray()); + + tokens = new MemoryStream(tokensData); + + BinaryWriter tokWriter = new BinaryWriter(TokensFile); + using (BinaryReader reader = new BinaryReader(tokens)) + { + TokensFile.Seek(0, SeekOrigin.Begin); + TokensFile.SetLength(tokens.Length); + tokWriter.Write(reader.ReadBytes(0x4)); + reader.ReadBytes(0x20); + tokWriter.Write(tokensHash); + tokWriter.Write(reader.ReadBytes((int)reader.BaseStream.Length - 0x4)); + } + } + + public void AddEntry(TokenEntry entry) + { + Entries.Add(entry); + } + + public void AddEntries(TokenEntry[] entries) + { + Entries.AddRange(entries); + } + + public void DeleteEntry(string name, string ext) + { + foreach (TokenEntry entry in Entries) + { + if (entry.Name == name && entry.Extension == ext) + { + Entries.Remove(entry); + return; + } + } + } + + public void DeleteUnpopEntry(string name, string ext) + { + List delEntries = new List(); + foreach (TokenEntry entry in Entries) + { + if (entry.Name == name && entry.Extension == ext && !entry.Populated) + { + delEntries.Add(entry); + } + } + + Entries = Entries.Except(delEntries).ToList(); + } + + public TokenEntry GetEntry(string name, string ext) + { + foreach (TokenEntry entry in Entries) + { + if (entry.Name == name && entry.Extension == ext) + { + if (!entry.Populated) continue; + return entry; + } + } + + return null; + } + + public TokenMeta GetMetaEntry(string name) + { + DeleteUnpopEntry(name, "xml"); + TokenEntry entry = GetEntry(name, "xml"); + TokenMeta meta; + + if (entry == null) + { + meta = new TokenMeta + { + Name = name + }; + } + else + { + meta = new TokenMeta(entry.Data); + } + + return meta; + } + + public void SetEntry(string name, string ext, byte[] data) + { + for (int i = 0; i < Entries.Count; i++) + { + TokenEntry entry = Entries[i]; + + if (entry.Name == name && entry.Extension == ext && entry.Populated) + { + entry.Data = data; + Entries[i] = entry; + return; + } + } + + Entries.Add(new TokenEntry + { + Populated = true, + Name = name, + Extension = ext, + Data = data + }); + } + + public TokenStoreModern(string tokensPath) + { + TokensFile = File.Open(tokensPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + Deserialize(); + } + + public TokenStoreModern() + { + + } + + public void Dispose() + { + Serialize(); + TokensFile.Close(); + } + } +} + + +// PhysicalStore/Common.cs +namespace LibTSforge.PhysicalStore +{ + using System.Runtime.InteropServices; + + public enum BlockType : uint + { + NONE, + NAMED, + ATTRIBUTE, + TIMER + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct Timer + { + public ulong Unknown; + public ulong Time1; + public ulong Time2; + public ulong Expiry; + } +} + + +// PhysicalStore/IPhysicalStore.cs +namespace LibTSforge.PhysicalStore +{ + using System; + using System.Collections.Generic; + + public class PSBlock + { + public BlockType Type; + public uint Flags; + public uint Unknown = 0; + public byte[] Key; + public string KeyAsStr + { + get + { + return Utils.DecodeString(Key); + } + set + { + Key = Utils.EncodeString(value); + } + } + public byte[] Value; + public string ValueAsStr + { + get + { + return Utils.DecodeString(Value); + } + set + { + Value = Utils.EncodeString(value); + } + } + public uint ValueAsInt + { + get + { + return BitConverter.ToUInt32(Value, 0); + } + set + { + Value = BitConverter.GetBytes(value); + } + } + public byte[] Data; + public string DataAsStr + { + get + { + return Utils.DecodeString(Data); + } + set + { + Data = Utils.EncodeString(value); + } + } + public uint DataAsInt + { + get + { + return BitConverter.ToUInt32(Data, 0); + } + set + { + Data = BitConverter.GetBytes(value); + } + } + } + + public interface IPhysicalStore : IDisposable + { + PSBlock GetBlock(string key, string value); + PSBlock GetBlock(string key, uint value); + void AddBlock(PSBlock block); + void AddBlocks(IEnumerable blocks); + void SetBlock(string key, string value, byte[] data); + void SetBlock(string key, string value, string data); + void SetBlock(string key, string value, uint data); + void SetBlock(string key, uint value, byte[] data); + void SetBlock(string key, uint value, string data); + void SetBlock(string key, uint value, uint data); + void DeleteBlock(string key, string value); + void DeleteBlock(string key, uint value); + byte[] Serialize(); + void Deserialize(byte[] data); + byte[] ReadRaw(); + void WriteRaw(byte[] data); + IEnumerable FindBlocks(string valueSearch); + IEnumerable FindBlocks(uint valueSearch); + } +} + + +// PhysicalStore/PhysicalStoreModern.cs +namespace LibTSforge.PhysicalStore +{ + using System; + using System.Collections.Generic; + using System.IO; + using LibTSforge.Crypto; + + public class ModernBlock + { + public BlockType Type; + public uint Flags; + public uint Unknown; + public byte[] Value; + public string ValueAsStr + { + get + { + return Utils.DecodeString(Value); + } + set + { + Value = Utils.EncodeString(value); + } + } + public uint ValueAsInt + { + get + { + return BitConverter.ToUInt32(Value, 0); + } + set + { + Value = BitConverter.GetBytes(value); + } + } + public byte[] Data; + public string DataAsStr + { + get + { + return Utils.DecodeString(Data); + } + set + { + Data = Utils.EncodeString(value); + } + } + public uint DataAsInt + { + get + { + return BitConverter.ToUInt32(Data, 0); + } + set + { + Data = BitConverter.GetBytes(value); + } + } + + public void Encode(BinaryWriter writer) + { + writer.Write((uint)Type); + writer.Write(Flags); + writer.Write((uint)Value.Length); + writer.Write((uint)Data.Length); + writer.Write(Unknown); + writer.Write(Value); + writer.Write(Data); + } + + public static ModernBlock Decode(BinaryReader reader) + { + uint type = reader.ReadUInt32(); + uint flags = reader.ReadUInt32(); + + uint valueLen = reader.ReadUInt32(); + uint dataLen = reader.ReadUInt32(); + uint unk3 = reader.ReadUInt32(); + + byte[] value = reader.ReadBytes((int)valueLen); + byte[] data = reader.ReadBytes((int)dataLen); + + return new ModernBlock + { + Type = (BlockType)type, + Flags = flags, + Unknown = unk3, + Value = value, + Data = data, + }; + } + } + + public sealed class PhysicalStoreModern : IPhysicalStore + { + private byte[] PreHeaderBytes = new byte[] { }; + private readonly Dictionary> Data = new Dictionary>(); + private readonly FileStream TSFile; + private readonly PSVersion Version; + private readonly bool Production; + + public byte[] Serialize() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(PreHeaderBytes); + writer.Write(Data.Keys.Count); + + foreach (string key in Data.Keys) + { + List blocks = Data[key]; + byte[] keyNameEnc = Utils.EncodeString(key); + + writer.Write(keyNameEnc.Length); + writer.Write(keyNameEnc); + writer.Write(blocks.Count); + writer.Align(4); + + foreach (ModernBlock block in blocks) + { + block.Encode(writer); + writer.Align(4); + } + } + + return writer.GetBytes(); + } + + public void Deserialize(byte[] data) + { + BinaryReader reader = new BinaryReader(new MemoryStream(data)); + PreHeaderBytes = reader.ReadBytes(8); + + while (reader.BaseStream.Position < data.Length - 0x4) + { + uint numKeys = reader.ReadUInt32(); + + for (int i = 0; i < numKeys; i++) + { + uint lenKeyName = reader.ReadUInt32(); + string keyName = Utils.DecodeString(reader.ReadBytes((int)lenKeyName)); uint numValues = reader.ReadUInt32(); + + reader.Align(4); + + Data[keyName] = new List(); + + for (int j = 0; j < numValues; j++) + { + Data[keyName].Add(ModernBlock.Decode(reader)); + reader.Align(4); + } + } + } + } + + public void AddBlock(PSBlock block) + { + if (!Data.ContainsKey(block.KeyAsStr)) + { + Data[block.KeyAsStr] = new List(); + } + + Data[block.KeyAsStr].Add(new ModernBlock + { + Type = block.Type, + Flags = block.Flags, + Unknown = block.Unknown, + Value = block.Value, + Data = block.Data + }); + } + + public void AddBlocks(IEnumerable blocks) + { + foreach (PSBlock block in blocks) + { + AddBlock(block); + } + } + + public PSBlock GetBlock(string key, string value) + { + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsStr == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = Utils.EncodeString(key), + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public PSBlock GetBlock(string key, uint value) + { + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsInt == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = Utils.EncodeString(key), + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public void SetBlock(string key, string value, byte[] data) + { + List blocks = Data[key]; + + for (int i = 0; i < blocks.Count; i++) + { + ModernBlock block = blocks[i]; + + if (block.ValueAsStr == value) + { + block.Data = data; + blocks[i] = block; + break; + } + } + + Data[key] = blocks; + } + + public void SetBlock(string key, uint value, byte[] data) + { + List blocks = Data[key]; + + for (int i = 0; i < blocks.Count; i++) + { + ModernBlock block = blocks[i]; + + if (block.ValueAsInt == value) + { + block.Data = data; + blocks[i] = block; + break; + } + } + + Data[key] = blocks; + } + + public void SetBlock(string key, string value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, string value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void SetBlock(string key, uint value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, uint value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void DeleteBlock(string key, string value) + { + if (Data.ContainsKey(key)) + { + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsStr == value) + { + blocks.Remove(block); + break; + } + } + + Data[key] = blocks; + } + } + + public void DeleteBlock(string key, uint value) + { + if (Data.ContainsKey(key)) + { + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsInt == value) + { + blocks.Remove(block); + break; + } + } + + Data[key] = blocks; + } + } + + public PhysicalStoreModern(string tsPath, bool production, PSVersion version) + { + TSFile = File.Open(tsPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), production)); + TSFile.Seek(0, SeekOrigin.Begin); + Version = version; + Production = production; + } + + public void Dispose() + { + if (TSFile.CanWrite) + { + byte[] data = PhysStoreCrypto.EncryptPhysicalStore(Serialize(), Production, Version); + TSFile.SetLength(data.LongLength); + TSFile.Seek(0, SeekOrigin.Begin); + TSFile.WriteAllBytes(data); + TSFile.Close(); + } + } + + public byte[] ReadRaw() + { + byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), Production); + TSFile.Seek(0, SeekOrigin.Begin); + return data; + } + + public void WriteRaw(byte[] data) + { + byte[] encrData = PhysStoreCrypto.EncryptPhysicalStore(data, Production, Version); + TSFile.SetLength(encrData.LongLength); + TSFile.Seek(0, SeekOrigin.Begin); + TSFile.WriteAllBytes(encrData); + TSFile.Close(); + } + + public IEnumerable FindBlocks(string valueSearch) + { + List results = new List(); + + foreach (string key in Data.Keys) + { + List values = Data[key]; + + foreach (ModernBlock block in values) + { + if (block.ValueAsStr.Contains(valueSearch)) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + KeyAsStr = key, + Value = block.Value, + Data = block.Data + }); + } + } + } + + return results; + } + + public IEnumerable FindBlocks(uint valueSearch) + { + List results = new List(); + + foreach (string key in Data.Keys) + { + List values = Data[key]; + + foreach (ModernBlock block in values) + { + if (block.ValueAsInt == valueSearch) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + KeyAsStr = key, + Value = block.Value, + Data = block.Data + }); + } + } + } + + return results; + } + } +} + + +// PhysicalStore/PhysicalStoreWin7.cs +namespace LibTSforge.PhysicalStore +{ + using System; + using System.Collections.Generic; + using System.IO; + using LibTSforge.Crypto; + + public class Win7Block + { + public BlockType Type; + public uint Flags; + public byte[] Key; + public string KeyAsStr + { + get + { + return Utils.DecodeString(Key); + } + set + { + Key = Utils.EncodeString(value); + } + } + public byte[] Value; + public string ValueAsStr + { + get + { + return Utils.DecodeString(Value); + } + set + { + Value = Utils.EncodeString(value); + } + } + public uint ValueAsInt + { + get + { + return BitConverter.ToUInt32(Value, 0); + } + set + { + Value = BitConverter.GetBytes(value); + } + } + public byte[] Data; + public string DataAsStr + { + get + { + return Utils.DecodeString(Data); + } + set + { + Data = Utils.EncodeString(value); + } + } + public uint DataAsInt + { + get + { + return BitConverter.ToUInt32(Data, 0); + } + set + { + Data = BitConverter.GetBytes(value); + } + } + + internal void Encode(BinaryWriter writer) + { + writer.Write((uint)Type); + writer.Write(Flags); + writer.Write(Key.Length); + writer.Write(Value.Length); + writer.Write(Data.Length); + writer.Write(Key); + writer.Write(Value); + writer.Write(Data); + } + + internal static Win7Block Decode(BinaryReader reader) + { + uint type = reader.ReadUInt32(); + uint flags = reader.ReadUInt32(); + + int keyLen = reader.ReadInt32(); + int valueLen = reader.ReadInt32(); + int dataLen = reader.ReadInt32(); + + byte[] key = reader.ReadBytes(keyLen); + byte[] value = reader.ReadBytes(valueLen); + byte[] data = reader.ReadBytes(dataLen); + return new Win7Block + { + Type = (BlockType)type, + Flags = flags, + Key = key, + Value = value, + Data = data, + }; + } + } + + public sealed class PhysicalStoreWin7 : IPhysicalStore + { + private byte[] PreHeaderBytes = new byte[] { }; + private readonly List Blocks = new List(); + private readonly FileStream TSPrimary; + private readonly FileStream TSSecondary; + private readonly bool Production; + + public byte[] Serialize() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(PreHeaderBytes); + + foreach (Win7Block block in Blocks) + { + block.Encode(writer); + writer.Align(4); + } + + return writer.GetBytes(); + } + + public void Deserialize(byte[] data) + { + int len = data.Length; + + BinaryReader reader = new BinaryReader(new MemoryStream(data)); + PreHeaderBytes = reader.ReadBytes(8); + + while (reader.BaseStream.Position < len - 0x14) + { + Blocks.Add(Win7Block.Decode(reader)); + reader.Align(4); + } + } + + public void AddBlock(PSBlock block) + { + Blocks.Add(new Win7Block + { + Type = block.Type, + Flags = block.Flags, + Key = block.Key, + Value = block.Value, + Data = block.Data + }); + } + + public void AddBlocks(IEnumerable blocks) + { + foreach (PSBlock block in blocks) + { + AddBlock(block); + } + } + + public PSBlock GetBlock(string key, string value) + { + foreach (Win7Block block in Blocks) + { + if (block.KeyAsStr == key && block.ValueAsStr == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = block.Key, + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public PSBlock GetBlock(string key, uint value) + { + foreach (Win7Block block in Blocks) + { + if (block.KeyAsStr == key && block.ValueAsInt == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = block.Key, + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public void SetBlock(string key, string value, byte[] data) + { + for (int i = 0; i < Blocks.Count; i++) + { + Win7Block block = Blocks[i]; + + if (block.KeyAsStr == key && block.ValueAsStr == value) + { + block.Data = data; + Blocks[i] = block; + break; + } + } + } + + public void SetBlock(string key, uint value, byte[] data) + { + for (int i = 0; i < Blocks.Count; i++) + { + Win7Block block = Blocks[i]; + + if (block.KeyAsStr == key && block.ValueAsInt == value) + { + block.Data = data; + Blocks[i] = block; + break; + } + } + } + + public void SetBlock(string key, string value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, string value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void SetBlock(string key, uint value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, uint value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void DeleteBlock(string key, string value) + { + foreach (Win7Block block in Blocks) + { + if (block.KeyAsStr == key && block.ValueAsStr == value) + { + Blocks.Remove(block); + return; + } + } + } + + public void DeleteBlock(string key, uint value) + { + foreach (Win7Block block in Blocks) + { + if (block.KeyAsStr == key && block.ValueAsInt == value) + { + Blocks.Remove(block); + return; + } + } + } + + public PhysicalStoreWin7(string primaryPath, bool production) + { + TSPrimary = File.Open(primaryPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + TSSecondary = File.Open(primaryPath.Replace("-0.", "-1."), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + Production = production; + + Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), production)); + TSPrimary.Seek(0, SeekOrigin.Begin); + } + + public void Dispose() + { + if (TSPrimary.CanWrite && TSSecondary.CanWrite) + { + byte[] data = PhysStoreCrypto.EncryptPhysicalStore(Serialize(), Production, PSVersion.Win7); + + TSPrimary.SetLength(data.LongLength); + TSSecondary.SetLength(data.LongLength); + + TSPrimary.Seek(0, SeekOrigin.Begin); + TSSecondary.Seek(0, SeekOrigin.Begin); + + TSPrimary.WriteAllBytes(data); + TSSecondary.WriteAllBytes(data); + + TSPrimary.Close(); + TSSecondary.Close(); + } + } + + public byte[] ReadRaw() + { + byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), Production); + TSPrimary.Seek(0, SeekOrigin.Begin); + return data; + } + + public void WriteRaw(byte[] data) + { + byte[] encrData = PhysStoreCrypto.EncryptPhysicalStore(data, Production, PSVersion.Win7); + + TSPrimary.SetLength(encrData.LongLength); + TSSecondary.SetLength(encrData.LongLength); + + TSPrimary.Seek(0, SeekOrigin.Begin); + TSSecondary.Seek(0, SeekOrigin.Begin); + + TSPrimary.WriteAllBytes(encrData); + TSSecondary.WriteAllBytes(encrData); + + TSPrimary.Close(); + TSSecondary.Close(); + } + + public IEnumerable FindBlocks(string valueSearch) + { + List results = new List(); + + foreach (Win7Block block in Blocks) + { + if (block.ValueAsStr.Contains(valueSearch)) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = block.Key, + Value = block.Value, + Data = block.Data + }); + } + } + + return results; + } + + public IEnumerable FindBlocks(uint valueSearch) + { + List results = new List(); + + foreach (Win7Block block in Blocks) + { + if (block.ValueAsInt == valueSearch) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = block.Key, + Value = block.Value, + Data = block.Data + }); + } + } + + return results; + } + } +} + + +// PhysicalStore/VariableBag.cs +namespace LibTSforge.PhysicalStore +{ + using System; + using System.Collections.Generic; + using System.IO; + + public enum CRCBlockType : uint + { + UINT = 1 << 0, + STRING = 1 << 1, + BINARY = 1 << 2 + } + + public class CRCBlock + { + public CRCBlockType DataType; + public byte[] Key; + public string KeyAsStr + { + get + { + return Utils.DecodeString(Key); + } + set + { + Key = Utils.EncodeString(value); + } + } + public byte[] Value; + public string ValueAsStr + { + get + { + return Utils.DecodeString(Value); + } + set + { + Value = Utils.EncodeString(value); + } + } + public uint ValueAsInt + { + get + { + return BitConverter.ToUInt32(Value, 0); + } + set + { + Value = BitConverter.GetBytes(value); + } + } + + public void Encode(BinaryWriter writer) + { + uint crc = CRC(); + writer.Write(crc); + writer.Write((uint)DataType); + writer.Write(Key.Length); + writer.Write(Value.Length); + + writer.Write(Key); + writer.Align(8); + + writer.Write(Value); + writer.Align(8); + } + + public static CRCBlock Decode(BinaryReader reader) + { + uint crc = reader.ReadUInt32(); + uint type = reader.ReadUInt32(); + uint lenName = reader.ReadUInt32(); + uint lenVal = reader.ReadUInt32(); + + byte[] key = reader.ReadBytes((int)lenName); + reader.Align(8); + + byte[] value = reader.ReadBytes((int)lenVal); + reader.Align(8); + + CRCBlock block = new CRCBlock + { + DataType = (CRCBlockType)type, + Key = key, + Value = value, + }; + + if (block.CRC() != crc) + { + throw new InvalidDataException("Invalid CRC in variable bag."); + } + + return block; + } + + public uint CRC() + { + BinaryWriter wtemp = new BinaryWriter(new MemoryStream()); + wtemp.Write(0); + wtemp.Write((uint)DataType); + wtemp.Write(Key.Length); + wtemp.Write(Value.Length); + wtemp.Write(Key); + wtemp.Write(Value); + return Utils.CRC32(wtemp.GetBytes()); + } + } + + public class VariableBag + { + public List Blocks = new List(); + + public void Deserialize(byte[] data) + { + int len = data.Length; + + BinaryReader reader = new BinaryReader(new MemoryStream(data)); + + while (reader.BaseStream.Position < len - 0x10) + { + Blocks.Add(CRCBlock.Decode(reader)); + } + } + + public byte[] Serialize() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + + foreach (CRCBlock block in Blocks) + { + block.Encode(writer); + } + + return writer.GetBytes(); + } + + public CRCBlock GetBlock(string key) + { + foreach (CRCBlock block in Blocks) + { + if (block.KeyAsStr == key) + { + return block; + } + } + + return null; + } + + public void SetBlock(string key, byte[] value) + { + for (int i = 0; i < Blocks.Count; i++) + { + CRCBlock block = Blocks[i]; + + if (block.KeyAsStr == key) + { + block.Value = value; + Blocks[i] = block; + break; + } + } + } + + public void DeleteBlock(string key) + { + foreach (CRCBlock block in Blocks) + { + if (block.KeyAsStr == key) + { + Blocks.Remove(block); + return; + } + } + } + + public VariableBag(byte[] data) + { + Deserialize(data); + } + + public VariableBag() + { + + } + } +} +'@ +$ErrorActionPreference = 'Stop' +$cp = [CodeDom.Compiler.CompilerParameters] [string[]]@("System.dll", "System.Core.dll", "System.ServiceProcess.dll", "System.Xml.dll") +$cp.CompilerOptions = "/unsafe" +$lang = If ((Get-Host).Version.Major -gt 2) { "CSharp" } Else { "CSharpVersion3" } + +$ctemp = "$env:SystemRoot\Temp\" +if (-Not (Test-Path -Path $ctemp)) { New-Item -Path $ctemp -ItemType Directory > $null } +$env:TMP = $ctemp +$env:TEMP = $ctemp + +$cp.GenerateInMemory = $true +Add-Type -Language $lang -TypeDefinition $src -CompilerParameters $cp +if ($env:_debug -eq '0') { + [LibTSforge.Logger]::HideOutput = $true +} +$ver = [LibTSforge.Utils]::DetectVersion() +$prod = [LibTSforge.Utils]::DetectCurrentKey() +$tsactids = @($args) + +function Get-WmiInfo { + param ([string]$tsactid, [string]$property) + + $query = "SELECT ID, $property FROM SoftwareLicensingProduct WHERE ID='$tsactid'" + $record = Get-WmiObject -Query $query + if ($record) { + return $record.$property + } +} + +if ($env:resetstuff -eq $null) { + foreach ($tsactid in $tsactids) { + try { + $prodDes = Get-WmiInfo -tsactid $tsactid -property "Description" + $prodName = Get-WmiInfo -tsactid $tsactid -property "Name" + if ($prodName) { + $nameParts = $prodName -split ',', 2 + $prodName = if ($nameParts.Count -gt 1) { ($nameParts[1].Trim() -split '[ ,]')[0] } else { $null } + } + [LibTSforge.Modifiers.GenPKeyInstall]::InstallGenPKey($ver, $prod, $tsactid) + [LibTSforge.Activators.ZeroCID]::Activate($ver, $prod, $tsactid) + $licenseStatus = Get-WmiInfo -tsactid $tsactid -property "LicenseStatus" + if ($licenseStatus -eq 1) { + if ($prodDes -match 'KMS' -and $prodDes -notmatch 'CLIENT') { + [LibTSforge.Modifiers.KMSHostCharge]::Charge($ver, $tsactid, $prod) + Write-Host "[$prodName] CSVLK is permanently activated with ZeroCID." -ForegroundColor White -BackgroundColor DarkGreen + Write-Host "[$prodName] CSVLK is charged with 25 clients for 30 days." -ForegroundColor White -BackgroundColor DarkGreen + } + else { + Write-Host "[$prodName] is permanently activated with ZeroCID." -ForegroundColor White -BackgroundColor DarkGreen + } + } + else { + Write-Host "[$prodName] activation has failed." -ForegroundColor White -BackgroundColor DarkRed + $errcode = 3 + } + } + catch { + $errcode = 3 + Write-Host "$($_.Exception.Message)" -ForegroundColor Red -BackgroundColor Black + Write-Host "[$prodName] activation has failed." -ForegroundColor White -BackgroundColor DarkRed + } + } +} + +if ($env:resetstuff -eq '1') { + try { + [LibTSforge.Modifiers.TamperedFlagsDelete]::DeleteTamperFlags($ver, $prod) + [LibTSforge.SPP.SLApi]::RefreshLicenseStatus() + [LibTSforge.Modifiers.RearmReset]::Reset($ver, $prod) + [LibTSforge.Modifiers.GracePeriodReset]::Reset($ver, $prod) + [LibTSforge.Modifiers.KeyChangeLockDelete]::Delete($ver, $prod) + } + catch { + $errcode = 3 + Write-Host "$($_.Exception.Message)" -ForegroundColor Red -BackgroundColor Black + } +} + +Exit $errcode +:tsforge: + +::======================================================================================================================================== + +:: Get Windows Activation ID + +:wintsid: +$SysPath = "$env:SystemRoot\System32" +if (Test-Path "$env:SystemRoot\Sysnative\reg.exe") { + $SysPath = "$env:SystemRoot\Sysnative" +} + +function Windows-ActID { + param ( + [string]$edition, + [string]$keytype + ) + + $filePatterns = @( + "$SysPath\spp\tokens\skus\$edition\$edition*.xrm-ms", + "$SysPath\spp\tokens\skus\Security-SPP-Component-SKU-$edition\*-$edition-*.xrm-ms" + ) + + switch ($keytype) { + "zero" { + $licenseTypes = @('OEM_DM', 'OEM_COA_SLP', 'OEM_COA_NSLP', 'MAK', 'RETAIL') + } + "ks" { + $licenseTypes = @('KMSCLIENT') + } + "avma" { + $licenseTypes = @('VIRTUAL_MACHINE') + } + "kmshost" { + $licenseTypes = @('KMS_') + } + } + + $softwareLicensingProducts = Get-WmiObject -Query "SELECT ID, Description, LicenseFamily FROM SoftwareLicensingProduct WHERE ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f'" | Where-Object { $_.LicenseFamily -eq $edition } + + $orderedLicenses = @() + foreach ($type in $licenseTypes) { + $orderedLicenses += $softwareLicensingProducts | Where-Object { $_.Description -match $type } | Select-Object -ExpandProperty ID + } + + $fileIds = @() + $muiLockedIds = @() + $kmsCountedIdCounts = @{} + + $t = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0) + + $methods = @( + @{name = 'SLOpen'; returnType = [Int32]; parameters = @([IntPtr].MakeByRefType()) }, + @{name = 'SLClose'; returnType = [Int32]; parameters = @([IntPtr]) }, + @{name = 'SLGetProductSkuInformation'; returnType = [Int32]; parameters = @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()) }, + @{name = 'SLGetLicense'; returnType = [Int32]; parameters = @([IntPtr], [Guid].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()) } + ) + + foreach ($method in $methods) { + $t.DefinePInvokeMethod($method.name, 'slc.dll', 22, 1, $method.returnType, $method.parameters, 1, 3).SetImplementationFlags(128) + } + + $w = $t.CreateType() + $m = [Runtime.InteropServices.Marshal] + + function GetLicenseInfo($SkuId, $checkType) { + $result = $false + $c = 0; $b = 0 + + [void]$w::SLGetProductSkuInformation($hSLC, [ref][Guid]$SkuId, "fileId", [ref]$null, [ref]$c, [ref]$b) + $FileId = $m::PtrToStringUni($b) + + $c = 0; $b = 0 + [void]$w::SLGetLicense($hSLC, [ref][Guid]$FileId, [ref]$c, [ref]$b) + $blob = New-Object byte[] $c; $m::Copy($b, $blob, 0, $c) + $cont = [Text.Encoding]::UTF8.GetString($blob) + $xml = [xml]$cont.SubString($cont.IndexOf('\{$id\}" -and -not ($file.Name -match 'Beta|Test')) { + $fileIds += $id + } + } + } + } + } + + if ($kmsCountedIdCounts.Count -gt 0) { + $idWithMostIds = $kmsCountedIdCounts.GetEnumerator() | Sort-Object Value -Descending + $fileIds = $idWithMostIds | Select-Object -ExpandProperty Key + } + else { + if ($fileIds.Count -eq 0) { + $fileIds = $orderedLicenses + } + + $fileIds = $orderedLicenses | Where-Object { $fileIds -contains $_ -and $muiLockedIds -notcontains $_ } | Select-Object -Unique + } + + [void]$w::SLClose($hSLC) + + $pkeyconfig = "$SysPath\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms" + if ($keytype -eq 'kmshost') { + $csvlkPath = "$SysPath\spp\tokens\pkeyconfig\pkeyconfig-csvlk.xrm-ms" + if (Test-Path $csvlkPath) { + $pkeyconfig = $csvlkPath + } + } + + $data = [xml][Text.Encoding]::UTF8.GetString([Convert]::FromBase64String(([xml](get-content $pkeyconfig)).licenseGroup.license.otherInfo.infoTables.infoList.infoBin.InnerText)) + + $betaIds = @() + $excludedIds = @() + $checkedIds = @() + + foreach ($id in $fileIds) { + $actConfig = $data.ProductKeyConfiguration.Configurations.Configuration | Where-Object { $_.ActConfigId -eq "{$id}" } + if ($actConfig) { + $productDescription = $actConfig.ProductDescription + $productEditionID = $actConfig.EditionID + if ($productDescription -match 'MUI locked|Tencent|Qihoo|WAU') { + $excludedIds += $id + continue + } + + if ($productDescription -match 'Beta|RC |Next |Test|Pre-') { + $betaIds += $id + continue + } + + if ($keytype -ne 'kmshost' -and $productEditionID -eq '$edition') { + $checkedIds += $id + continue + } + + $refGroupId = $actConfig.RefGroupId + $publicKey = $data.ProductKeyConfiguration.PublicKeys.PublicKey | Where-Object { $_.GroupId -eq $refGroupId -and $_.AlgorithmId -eq 'msft:rm/algorithm/pkey/2009' } + if ($publicKey) { + $keyRanges = $data.ProductKeyConfiguration.KeyRanges.KeyRange | Where-Object { $_.RefActConfigId -eq "{$id}" } + foreach ($keyRange in $keyRanges) { + if ($keyRange.EulaType -match 'WAU') { + $excludedIds += $id + break + } + } + } + } + } + + $prefinalIds = @() + $finalIds = @() + + $prefinalIds = $fileIds | Where-Object { $excludedIds -notcontains $_ } | Select-Object -Unique + $finalIds = $prefinalIds | Where-Object { $betaIds -notcontains $_ } | Select-Object -Unique + + if ($finalIds.Count -eq 0) { + $finalIds = $prefinalIds + } + + if ($checkedIds.Count -gt 0) { + $finalIds = $checkedIds + $finalIds + } + + $firstId = $finalIds | Select-Object -First 1 + return $firstId.ToLower() +} + +Windows-ActID -edition "$env:tsedition" -keytype "$env:keytype" +:wintsid: + +::======================================================================================================================================== + +:: Get Office Activation ID + +:offtsid: +function Office-ActID { + param ( + [string]$pkeypath, + [string]$edition, + [string]$keytype + ) + + switch ($keytype) { + "zero" { $productKeyTypes = @("OEM:NONSLP","Volume:MAK","Retail") } + "ks" { $productKeyTypes = @("Volume:GVLK") } + } + + $data = [xml][Text.Encoding]::UTF8.GetString([Convert]::FromBase64String(([xml](Get-Content $pkeypath)).licenseGroup.license.otherInfo.infoTables.infoList.infoBin.InnerText)) + $configurations = $data.ProductKeyConfiguration.Configurations.Configuration + + $filteredConfigs = @() + foreach ($type in $productKeyTypes) { + $filteredConfigs += $configurations | Where-Object { + $_.EditionId -eq $edition -and + $_.ProductKeyType -eq $type -and + $_.ProductDescription -notmatch 'demo|MSDN|PIN' + } + } + + $filterPreview = $filteredConfigs | Where-Object { $_.ProductDescription -notmatch 'preview' } + + if ($filterPreview.Count -ne 0) { + $filteredConfigs = $filterPreview + } + + $firstConfig = ($filteredConfigs | Select-Object -First 1).ActConfigID -replace '^\{|\}$', '' + return $firstConfig.ToLower() +} + +Office-ActID -pkeypath "$env:pkeypath" -edition "$env:_License" -keytype "$env:keytype" +:offtsid: + +::======================================================================================================================================== + +:: 1st column = Office version number +:: 2nd column = Activation ID +:: 3rd column = Edition +:: Separator = "_" + +:ts_msiofficedata + +for %%# in ( +:: Office 2013 +15_ab4d047b-97cf-4126-a69f-34df08e2f254_AccessRetail +15_259de5be-492b-44b3-9d78-9645f848f7b0_AccessRuntimeRetail +15_4374022d-56b8-48c1-9bb7-d8f2fc726343_AccessVolume +15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_ExcelRetail +15_ac1ae7fd-b949-4e04-a330-849bc40638cf_ExcelVolume +15_cfaf5356-49e3-48a8-ab3c-e729ab791250_GrooveRetail +15_4825ac28-ce41-45a7-9e6e-1fed74057601_GrooveVolume +15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail +15_a2b90e7a-a797-4713-af90-f0becf52a1dd_HomeBusinessRetail +15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_HomeStudentARMRetail +15_ebef9f05-5273-404a-9253-c5e252f50555_HomeStudentPlusARMRetail +15_f2de350d-3028-410a-bfae-283e00b44d0e_HomeStudentRetail +15_44984381-406e-4a35-b1c3-e54f499556e2_InfoPathRetail +15_9e016989-4007-42a6-8051-64eb97110cf2_InfoPathVolume +15_9103f3ce-1084-447a-827e-d6097f68c895_LyncAcademicRetail +15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_LyncEntryRetail +15_fada6658-bfc6-4c4e-825a-59a89822cda8_LyncRetail +15_e1264e10-afaf-4439-a98b-256df8bb156f_LyncVolume +15_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail +15_f33485a0-310b-4b72-9a0e-b1d605510dbd_MondoVolume +15_3391e125-f6e4-4b1e-899c-a25e6092d40d_OneNoteFreeRetail +15_8b524bcc-67ea-4876-a509-45e46f6347e8_OneNoteRetail +15_b067e965-7521-455b-b9f7-c740204578a2_OneNoteVolume +15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_OutlookRetail +15_8d577c50-ae5e-47fd-a240-24986f73d503_OutlookVolume +15_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail +15_17e9df2d-ed91-4382-904b-4fed6a12caf0_PersonalRetail +15_31743b82-bfbc-44b6-aa12-85d42e644d5b_PowerPointRetail +15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_PowerPointVolume +15_064383fa-1538-491c-859b-0ecab169a0ab_ProPlusRetail +15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_ProPlusVolume +15_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail +15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_ProfessionalRetail +15_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail +15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_ProjectProVolume +15_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail +15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_ProjectStdVolume +15_c3a0814a-70a4-471f-af37-2313a6331111_PublisherRetail +15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_PublisherVolume +15_ba3e3833-6a7e-445a-89d0-7802a9a68588_SPDRetail +15_32255c0a-16b4-4ce2-b388-8a4267e219eb_StandardRetail +15_a24cca51-3d54-4c41-8a76-4031f5338cb2_StandardVolume +15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail +15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_VisioProVolume +15_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail +15_44a1f6ff-0876-4edb-9169-dbb43101ee89_VisioStdVolume +15_191509f2-6977-456f-ab30-cf0492b1e93a_WordRetail +15_9cedef15-be37-4ff0-a08a-13a045540641_WordVolume +:: Office 365 - 15.0 version +15_742178ed-6b28-42dd-b3d7-b7c0ea78741b_O365BusinessRetail +15_a96f8dae-da54-4fad-bdc6-108da592707a_O365HomePremRetail +15_e3dacc06-3bc2-4e13-8e59-8e05f3232325_O365ProPlusRetail +15_0bc1dae4-6158-4a1c-a893-807665b934b2_O365SmallBusPremRetail +:: Office 365 - 16.0 version +16_742178ed-6b28-42dd-b3d7-b7c0ea78741b_O365BusinessRetail +16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_O365EduCloudRetail +16_a96f8dae-da54-4fad-bdc6-108da592707a_O365HomePremRetail +16_e3dacc06-3bc2-4e13-8e59-8e05f3232325_O365ProPlusRetail +16_0bc1dae4-6158-4a1c-a893-807665b934b2_O365SmallBusPremRetail +:: Office 2016 +16_bfa358b0-98f1-4125-842e-585fa13032e6_AccessRetail +16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_AccessRuntimeRetail +16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_AccessVolume +16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_ExcelRetail +16_685062a7-6024-42e7-8c5f-6bb9e63e697f_ExcelVolume +16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail +16_86834d00-7896-4a38-8fae-32f20b86fa2b_HomeBusinessRetail +16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_HomeStudentARMRetail +16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_HomeStudentPlusARMRetail +16_c28acdb8-d8b3-4199-baa4-024d09e97c99_HomeStudentRetail +16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_HomeStudentVNextRetail +16_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail +16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_MondoVolume +16_436366de-5579-4f24-96db-3893e4400030_OneNoteFreeRetail +16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_OneNoteRetail +16_23b672da-a456-4860-a8f3-e062a501d7e8_OneNoteVolume +16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_OutlookRetail +16_50059979-ac6f-4458-9e79-710bcb41721a_OutlookVolume +16_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail +16_a9f645a1-0d6a-4978-926a-abcb363b72a6_PersonalRetail +16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_PowerPointRetail +16_9b4060c9-a7f5-4a66-b732-faf248b7240f_PowerPointVolume +16_de52bd50-9564-4adc-8fcb-a345c17f84f9_ProPlusRetail +16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_ProPlusVolume +16_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail +16_d64edc00-7453-4301-8428-197343fafb16_ProfessionalRetail +16_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail +16_82f502b5-b0b0-4349-bd2c-c560df85b248_ProjectProVolume +16_16728639-a9ab-4994-b6d8-f81051e69833_ProjectProXVolume +16_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail +16_82e6b314-2a62-4e51-9220-61358dd230e6_ProjectStdVolume +16_431058f0-c059-44c5-b9e7-ed2dd46b6789_ProjectStdXVolume +16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_PublisherRetail +16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_PublisherVolume +16_9103f3ce-1084-447a-827e-d6097f68c895_SkypeServiceBypassRetail +16_971cd368-f2e1-49c1-aedd-330909ce18b6_SkypeforBusinessEntryRetail +16_418d2b9f-b491-4d7f-84f1-49e27cc66597_SkypeforBusinessRetail +16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_SkypeforBusinessVolume +16_4a31c291-3a12-4c64-b8ab-cd79212be45e_StandardRetail +16_0ed94aac-2234-4309-ba29-74bdbb887083_StandardVolume +16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail +16_295b2c03-4b1c-4221-b292-1411f468bd02_VisioProVolume +16_0594dc12-8444-4912-936a-747ca742dbdb_VisioProXVolume +16_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail +16_44151c2d-c398-471f-946f-7660542e3369_VisioStdVolume +16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_VisioStdXVolume +16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_WordRetail +16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_WordVolume +) do ( +for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( + +if "%oVer%"=="%%A" ( +for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" +set prodId=!prodId:"/>=! +set prodId=!prodId:~-4! +if "%oVer%"=="14" ( +REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml +echo %%C | find /i "Visio" %nul% && set prodId=0057 +) +reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( +reg query "%1\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%C) else (set _oIds=%%C) +) +) +) + +) +) +exit /b + +::======================================================================================================================================== + +:ts_getedition + +set tsedition= +set _wtarget= + +if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL) get LicenseFamily /VALUE" %nul6%')" +if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')" +%chkedi% do if not errorlevel 1 call set "_wtarget= !_wtarget! %%a " + +:: SKU and Edition ID database + +for %%# in ( +1:Ultimate +2:HomeBasic +3:HomePremium +4:Enterprise +5:HomeBasicN +6:Business +7:ServerStandard +8:ServerDatacenter +9:ServerSBSStandard +10:ServerEnterprise +11:Starter +12:ServerDatacenterCore +13:ServerStandardCore +14:ServerEnterpriseCore +15:ServerEnterpriseIA64 +16:BusinessN +17:ServerWeb +18:ServerHPC +19:ServerHomeStandard +20:ServerStorageExpress +21:ServerStorageStandard +22:ServerStorageWorkgroup +23:ServerStorageEnterprise +24:ServerWinSB +25:ServerSBSPremium +26:HomePremiumN +27:EnterpriseN +28:UltimateN +29:ServerWebCore +30:ServerMediumBusinessManagement +31:ServerMediumBusinessSecurity +32:ServerMediumBusinessMessaging +33:ServerWinFoundation +34:ServerHomePremium +35:ServerWinSBV +36:ServerStandardV +37:ServerDatacenterV +38:ServerEnterpriseV +39:ServerDatacenterVCore +40:ServerStandardVCore +41:ServerEnterpriseVCore +42:ServerHyperCore +43:ServerStorageExpressCore +44:ServerStorageStandardCore +45:ServerStorageWorkgroupCore +46:ServerStorageEnterpriseCore +47:StarterN +48:Professional +49:ProfessionalN +50:ServerSolution +51:ServerForSBSolutions +52:ServerSolutionsPremium +53:ServerSolutionsPremiumCore +54:ServerSolutionEM +55:ServerForSBSolutionsEM +56:ServerEmbeddedSolution +57:ServerEmbeddedSolutionCore +58:ProfessionalEmbedded +59:ServerEssentialManagement +60:ServerEssentialAdditional +61:ServerEssentialManagementSvc +62:ServerEssentialAdditionalSvc +63:ServerSBSPremiumCore +64:ServerHPCV +65:Embedded +66:StarterE +67:HomeBasicE +68:HomePremiumE +69:ProfessionalE +70:EnterpriseE +71:UltimateE +72:EnterpriseEval +74:Prerelease +76:ServerMultiPointStandard +77:ServerMultiPointPremium +79:ServerStandardEval +80:ServerDatacenterEval +81:PrereleaseARM +82:PrereleaseN +84:EnterpriseNEval +85:EmbeddedAutomotive +86:EmbeddedIndustryA +87:ThinPC +88:EmbeddedA +89:EmbeddedIndustry +90:EmbeddedE +91:EmbeddedIndustryE +92:EmbeddedIndustryAE +93:ProfessionalPlus +95:ServerStorageWorkgroupEval +96:ServerStorageStandardEval +97:CoreARM +98:CoreN +99:CoreCountrySpecific +100:CoreSingleLanguage +101:Core +103:ProfessionalWMC +104:MobileCore +105:EmbeddedIndustryEval +106:EmbeddedIndustryEEval +107:EmbeddedEval +108:EmbeddedEEval +109:CoreSystemServer +110:ServerCloudStorage +111:CoreConnected +112:ProfessionalStudent +113:CoreConnectedN +114:ProfessionalStudentN +115:CoreConnectedSingleLanguage +116:CoreConnectedCountrySpecific +117:ConnectedCar +118:IndustryHandheld +119:PPIPRO +120:ServerARM64 +121:Education +122:EducationN +123:IoTUAP +124:ServerHI +125:EnterpriseS +126:EnterpriseSN +127:ProfessionalS +128:ProfessionalSN +129:EnterpriseSEval +130:EnterpriseSNEval +131:IoTUAPCommercial +133:MobileEnterprise +134:AnalogOneCoreEnterprise +135:AnalogOneCore +136:Holographic +138:ProfessionalSingleLanguage +139:ProfessionalCountrySpecific +140:EnterpriseSubscription +141:EnterpriseSubscriptionN +143:ServerDatacenterNano +144:ServerStandardNano +145:ServerDatacenterACor +146:ServerStandardACor +147:ServerDatacenterCor +148:ServerStandardCor +149:UtilityVM +159:ServerDatacenterEvalCor +160:ServerStandardEvalCor +161:ProfessionalWorkstation +162:ProfessionalWorkstationN +163:ServerAzure +164:ProfessionalEducation +165:ProfessionalEducationN +168:ServerAzureCor +169:ServerAzureNano +171:EnterpriseG +172:EnterpriseGN +173:BusinessSubscription +174:BusinessSubscriptionN +175:ServerRdsh +178:Cloud +179:CloudN +180:HubOS +182:OneCoreUpdateOS +183:CloudE +184:Andromeda +185:IoTOS +186:CloudEN +187:IoTEdgeOS +188:IoTEnterprise +189:ModernPC +191:IoTEnterpriseS +192:SystemOS +193:NativeOS +194:GameCoreXbox +195:GameOS +196:DurangoHostOS +197:ScarlettHostOS +198:Keystone +199:CloudHost +200:CloudMOS +201:CloudCore +202:CloudEditionN +203:CloudEdition +204:WinVOS +205:IoTEnterpriseSK +206:IoTEnterpriseK +207:IoTEnterpriseSEval +208:AgentBridge +209:NanoHost +210:WNC +406:ServerAzureStackHCICor +407:ServerTurbine +408:ServerTurbineCor + +REM Some old edition names with same SKU ID + +4:ProEnterprise +6:ProStandard +10:ProSBS +16:ProStandardN +18:ServerComputeCluster +19:ServerHome +30:ServerMidmarketStandard +31:ServerMidmarketEdge +32:ServerMidmarketPremium +33:ServerSBSPrime +42:ServerHyper +64:ServerComputeClusterV +85:EmbeddedIapetus +86:EmbeddedTethys +88:EmbeddedDione +89:EmbeddedRhea +90:EmbeddedEnceladus +109:ServerNano +124:ServerCloudHostInfrastructure +133:MobileBusiness +134:HololensEnterprise +145:ServerDatacenterSCor +146:ServerStandardSCor +147:ServerDatacenterWSCor +148:ServerStandardWSCor +189:Lite +) do ( +for /f "tokens=1-2 delims=:" %%A in ("%%#") do if "%osSKU%"=="%%A" if not defined tsedition ( +echo "%_wtarget%" | find /i " %%B " %nul% && set tsedition=%%B +) +) + +if defined tsedition exit /b + +set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionNameFromId', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [IntPtr].MakeByRefType()), 1, 3); +set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionNameFromId(%osSKU%, [ref]$out);$s=[Runtime.InteropServices.Marshal]::PtrToStringUni($out); $s + +for %%# in (pkeyhelper.dll) do @if not "%%~$PATH:#"=="" ( +for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 ( +echo "%_wtarget%" | find /i " %%a " %nul% && set tsedition=%%a +) +) + +exit /b + +::======================================================================================================================================== +:: Leave empty line below diff --git a/MAS/Separate-Files-Version/Activators/_ReadMe.txt b/MAS/Separate-Files-Version/Activators/_ReadMe.txt new file mode 100644 index 0000000..2473884 --- /dev/null +++ b/MAS/Separate-Files-Version/Activators/_ReadMe.txt @@ -0,0 +1,13 @@ +-------------------------------------------------------------------------------------- +Activation Type Supported Product Activation Period +-------------------------------------------------------------------------------------- + +HWID - Windows 10-11 - Permanent +Ohook - Office - Permanent +TSforge - Windows / ESU / Office - Permanent +KMS38 - Windows 10-11-Server - Till the Year 2038 +Online KMS - Windows / Office - 180 Days. Lifetime With Renewal Task + +-------------------------------------------------------------------------------------- + +For more details, check https://massgrave.dev/activations_comparison \ No newline at end of file diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 1a5bbd7..05d4410 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=2.9 +@set masver=3.0 @echo off @@ -123,6 +123,16 @@ set "line=echo _________________________________________________________________ ::======================================================================================================================================== +if %winbuild% EQU 1 ( +%eline% +echo Failed to detect Windows build number. +echo: +setlocal EnableDelayedExpansion +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. @@ -247,9 +257,13 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( +if not "%%#"=="" set old=1 +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( +if not "%%#"=="" set old= +) ) if defined old ( @@ -265,7 +279,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem -if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) +if !errorlevel!==1 (start %mas% & exit /b) ) ) diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 604e995..fa4f62f 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=2.9 +@set masver=3.0 @echo off @@ -128,6 +128,16 @@ set "line=echo _________________________________________________________________ ::======================================================================================================================================== +if %winbuild% EQU 1 ( +%eline% +echo Failed to detect Windows build number. +echo: +setlocal EnableDelayedExpansion +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. @@ -252,9 +262,13 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( +if not "%%#"=="" set old=1 +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( +if not "%%#"=="" set old= +) ) if defined old ( @@ -270,7 +284,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem -if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) +if !errorlevel!==1 (start %mas% & exit /b) ) ) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 1577d38..bae7818 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -1,4 +1,4 @@ -@set masver=2.9 +@set masver=3.0 @echo off @@ -122,6 +122,16 @@ call :dk_setvar ::======================================================================================================================================== +if %winbuild% EQU 1 ( +%eline% +echo Failed to detect Windows build number. +echo: +setlocal EnableDelayedExpansion +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. @@ -246,9 +256,13 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( +if not "%%#"=="" set old=1 +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( +if not "%%#"=="" set old= +) ) if defined old ( @@ -264,7 +278,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem -if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) +if !errorlevel!==1 (start %mas% & exit /b) ) ) @@ -305,6 +319,7 @@ set HWID_Activation.cmd=Activators\HWID_Activation.cmd set KMS38_Activation.cmd=Activators\KMS38_Activation.cmd set Online_KMS_Activation.cmd=Activators\Online_KMS_Activation.cmd set Ohook_Activation_AIO.cmd=Activators\Ohook_Activation_AIO.cmd +set TSforge_Activation.cmd=Activators\TSforge_Activation.cmd pushd "!_work!" set _nofile= @@ -313,6 +328,7 @@ for %%# in ( %KMS38_Activation.cmd% %Online_KMS_Activation.cmd% %Ohook_Activation_AIO.cmd% +%TSforge_Activation.cmd% ) do ( if not exist "%%#" set _nofile=1 ) @@ -338,36 +354,34 @@ echo: echo: echo: echo: Extract $OEM$ folder on the desktop -echo: ________________________________________________________ +echo: ____________________________________________________________ echo: -echo: [1] HWID -echo: [2] Ohook -echo: [3] KMS38 -echo: [4] Online KMS +echo: [1] HWID [Windows] +echo: [2] Ohook [Office] +echo: [3] TSforge [Windows / ESU / Office] +echo: [4] KMS38 [Windows] +echo: [5] Online KMS [Windows / Office] echo: -echo: [5] HWID ^(Windows^) ^+ Ohook ^(Office^) -echo: [6] HWID ^(Windows^) ^+ Online KMS ^(Office^) -echo: [7] KMS38 ^(Windows^) ^+ Ohook ^(Office^) -echo: [8] KMS38 ^(Windows^) ^+ Online KMS ^(Office^) -echo: [9] Online KMS ^(Windows^) ^+ Ohook ^(Office^) +echo: [6] HWID [Windows] ^+ Ohook [Office] +echo: [7] HWID [Windows] ^+ Ohook [Office] ^+ TSforge [ESU] +echo: [8] TSforge [Windows] ^+ Online KMS [Office] echo: -call :dk_color2 %_White% " [R] " %_Green% "ReadMe" -echo: [0] Exit -echo: ________________________________________________________ +call :dk_color2 %_White% " [R] " %_Green% "ReadMe" +echo: [0] Exit +echo: ____________________________________________________________ echo: call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard :" -choice /C:123456789R0 /N +choice /C:12345678R0 /N set _erl=%errorlevel% -if %_erl%==11 exit /b -if %_erl%==10 start %mas%oem-folder &goto :Menu -if %_erl%==9 goto:kms_ohook -if %_erl%==8 goto:kms38_kms -if %_erl%==7 goto:kms38_ohook -if %_erl%==6 goto:hwid_kms -if %_erl%==5 goto:hwid_ohook -if %_erl%==4 goto:kms -if %_erl%==3 goto:kms38 +if %_erl%==10 exit /b +if %_erl%==9 start %mas%oem-folder &goto :Menu +if %_erl%==8 goto:tsforge_kms +if %_erl%==7 goto:hwid_ohook_tsforge +if %_erl%==6 goto:hwid_ohook +if %_erl%==5 goto:kms +if %_erl%==4 goto:kms38 +if %_erl%==3 goto:tsforge if %_erl%==2 goto:ohook if %_erl%==1 goto:hwid goto :Menu @@ -434,6 +448,36 @@ cd \ ::======================================================================================================================================== +:tsforge + +cls +md "!desktop!\$OEM$\$$\Setup\Scripts" +pushd "!_work!" +copy /y /b "%TSforge_Activation.cmd%" "!_dir!\TSforge_Activation.cmd" %nul% +popd +call :export tsforge_setup + +set _error= +if not exist "!_dir!\TSforge_Activation.cmd" set _error=1 +if not exist "!_dir!\SetupComplete.cmd" set _error=1 +if defined _error goto errorfound + +set oem=TSforge +goto done + +:tsforge_setup: +@echo off + +fltmc >nul || exit /b + +call "%~dp0TSforge_Activation.cmd" /Z-WindowsESUOffice + +cd \ +(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") +:tsforge_setup: + +::======================================================================================================================================== + :kms38 cls @@ -532,26 +576,28 @@ cd \ ::======================================================================================================================================== -:hwid_kms +:hwid_ohook_tsforge cls md "!desktop!\$OEM$\$$\Setup\Scripts" pushd "!_work!" copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul% -copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul% +copy /y /b "%Ohook_Activation_AIO.cmd%" "!_dir!\Ohook_Activation_AIO.cmd" %nul% +copy /y /b "%TSforge_Activation.cmd%" "!_dir!\TSforge_Activation.cmd" %nul% popd -call :export hwid_kms_setup +call :export hwid_ohook_tsforge_setup set _error= if not exist "!_dir!\HWID_Activation.cmd" set _error=1 -if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1 +if not exist "!_dir!\Ohook_Activation_AIO.cmd" set _error=1 +if not exist "!_dir!\TSforge_Activation.cmd" set _error=1 if not exist "!_dir!\SetupComplete.cmd" set _error=1 if defined _error goto errorfound -set oem=HWID [Windows] + Online KMS [Office] +set oem=HWID [Windows] + Ohook [Office] + TSforge [ESU] goto done -:hwid_kms_setup: +:hwid_ohook_tsforge_setup: @echo off fltmc >nul || exit /b @@ -560,80 +606,46 @@ setlocal call "%~dp0HWID_Activation.cmd" /HWID endlocal -setlocal -call "%~dp0Online_KMS_Activation.cmd" /K-Office -endlocal - -cd \ -(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") -:hwid_kms_setup: - -::======================================================================================================================================== - -:kms38_ohook - -cls -md "!desktop!\$OEM$\$$\Setup\Scripts" -pushd "!_work!" -copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul% -copy /y /b "%Ohook_Activation_AIO.cmd%" "!_dir!\Ohook_Activation_AIO.cmd" %nul% -popd -call :export kms38_ohook_setup - -set _error= -if not exist "!_dir!\KMS38_Activation.cmd" set _error=1 -if not exist "!_dir!\Ohook_Activation_AIO.cmd" set _error=1 -if not exist "!_dir!\SetupComplete.cmd" set _error=1 -if defined _error goto errorfound - -set oem=KMS38 [Windows] + Ohook [Office] -goto done - -:kms38_ohook_setup: -@echo off - -fltmc >nul || exit /b - -setlocal -call "%~dp0KMS38_Activation.cmd" /KMS38 -endlocal - setlocal call "%~dp0Ohook_Activation_AIO.cmd" /Ohook endlocal +setlocal +call "%~dp0TSforge_Activation.cmd" /Z-ESU +endlocal + cd \ (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") -:kms38_ohook_setup: +:hwid_ohook_tsforge_setup: ::======================================================================================================================================== -:kms38_kms +:tsforge_kms cls md "!desktop!\$OEM$\$$\Setup\Scripts" pushd "!_work!" -copy /y /b "%KMS38_Activation.cmd%" "!_dir!\KMS38_Activation.cmd" %nul% +copy /y /b "%TSforge_Activation.cmd%" "!_dir!\TSforge_Activation.cmd" %nul% copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul% popd -call :export kms38_kms_setup +call :export tsforge_kms_setup set _error= -if not exist "!_dir!\KMS38_Activation.cmd" set _error=1 +if not exist "!_dir!\TSforge_Activation.cmd" set _error=1 if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1 if not exist "!_dir!\SetupComplete.cmd" set _error=1 if defined _error goto errorfound -set oem=KMS38 [Windows] + Online KMS [Office] +set oem=TSforge [Windows] + Online KMS [Office] goto done -:kms38_kms_setup: +:tsforge_kms_setup: @echo off fltmc >nul || exit /b setlocal -call "%~dp0KMS38_Activation.cmd" /KMS38 +call "%~dp0TSforge_Activation.cmd" /Z-Windows endlocal setlocal @@ -642,45 +654,7 @@ endlocal cd \ (goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") -:kms38_kms_setup: - -::======================================================================================================================================== - -:kms_ohook - -cls -md "!desktop!\$OEM$\$$\Setup\Scripts" -pushd "!_work!" -copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul% -copy /y /b "%Ohook_Activation_AIO.cmd%" "!_dir!\Ohook_Activation_AIO.cmd" %nul% -popd -call :export kms_ohook_setup - -set _error= -if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1 -if not exist "!_dir!\Ohook_Activation_AIO.cmd" set _error=1 -if not exist "!_dir!\SetupComplete.cmd" set _error=1 -if defined _error goto errorfound - -set oem=Online KMS [Windows] + Ohook [Office] -goto done - -:kms_ohook_setup: -@echo off - -fltmc >nul || exit /b - -setlocal -call "%~dp0Online_KMS_Activation.cmd" /K-Windows -endlocal - -setlocal -call "%~dp0Ohook_Activation_AIO.cmd" /Ohook -endlocal - -cd \ -(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0") -:kms_ohook_setup: +:tsforge_kms_setup: ::======================================================================================================================================== @@ -698,7 +672,7 @@ call :dk_color %Blue% "%oem%" call :dk_color %Green% "$OEM$ folder was successfully created on your Desktop." echo "%oem%" | find /i "38" %nul% && ( echo: -echo To KMS38 activate Server Cor/Acor editions ^(No GUI Versions^), +echo To KMS38 activate Server Cor/Acor editions [No GUI Versions], echo Check this page %mas%oem-folder ) echo ______________________________________________________________ diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index ad55e92..fb32306 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1,4 +1,4 @@ -@set masver=2.9 +@set masver=3.0 @echo off @@ -123,6 +123,16 @@ set "line=______________________________________________________________________ ::======================================================================================================================================== +if %winbuild% EQU 1 ( +%eline% +echo Failed to detect Windows build number. +echo: +setlocal EnableDelayedExpansion +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + if %winbuild% LSS 7600 ( %nceline% echo Unsupported OS version detected [%winbuild%]. @@ -247,9 +257,13 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck.mass%-%grave.dev') do ( -if not "%%#"=="" (echo "%%#" | find "127.69" %nul1% && (echo "%%#" | find "127.69.%masver%" %nul1% || set old=1)) +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( +if not "%%#"=="" set old=1 +for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( +if not "%%#"=="" set old= +) ) if defined old ( @@ -265,7 +279,7 @@ echo: call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :" choice /C:10 /N if !errorlevel!==2 rem -if !errorlevel!==1 (start ht%-%tps://github.com/mass%-%gravel/Microsoft-Acti%-%vation-Scripts & start %mas% & exit /b) +if !errorlevel!==1 (start %mas% & exit /b) ) ) diff --git a/README.md b/README.md index 8a1dc4f..0fca6c6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

Microsoft Activation Scripts (MAS)

-

Open-source Windows and Office activator featuring HWID, Ohook, KMS38, and Online KMS activation methods, along with advanced troubleshooting.

+

Open-source Windows and Office activator featuring HWID, Ohook, TSforge, KMS38, and Online KMS activation methods, along with advanced troubleshooting.


@@ -15,19 +15,12 @@ ``` irm https://get.activated.win | iex ``` -3. You will see the activation options. Choose (1) HWID for Windows activation. Choose (2) Ohook for Office activation. -4. That's all. - -
- More options - -- Alternatively, you can use the following (It will be deprecated in the future.) +Alternatively, you can use the following (It will be deprecated in the future.) ``` irm https://massgrave.dev/get | iex ``` -- The URL `get.activated.win` might be blocked by some DNS services because it is a new domain. - -
+3. You will see the activation options. Choose (1) HWID for Windows activation. Choose (2) Ohook for Office activation. +4. That's all. --- @@ -50,6 +43,14 @@ or --- +### Not working ❓ + +- If you are **unable to launch MAS** using the PowerShell method, please refer to **Method 2** listed above. +- If MAS is launched and the script shows any errors, check for any troubleshooting steps mentioned in blue color and try to follow those. +- If you have any issues, please feel free to reach out to us [here](https://massgrave.dev/troubleshoot). + +--- + > [!NOTE] > > - The IRM command in PowerShell downloads a script from a specified URL, and the IEX command executes it. @@ -61,8 +62,8 @@ or To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches). ``` -Latest Version: 2.9 -Release date: 20-Dec-2024 +Latest Version: 3.0 +Release date: 14-Feb-2025 ``` ### [Troubleshooting / Help](https://massgrave.dev/troubleshoot) From 9765e7d05f585fc2966547d75550841b17f52248 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 13 Feb 2025 23:17:18 +0530 Subject: [PATCH 083/132] Revert-export-ignore --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index de5bd3d..8749e12 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -MAS export-ignore -LICENSE export-ignore -README.md export-ignore +# MAS export-ignore +# LICENSE export-ignore +# README.md export-ignore .gitattributes export-ignore From 6c8732dd06e8ea604232b8fbd17218526c6f9552 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 18 Feb 2025 03:35:32 +0530 Subject: [PATCH 084/132] Correct the chart link in readme --- MAS/Separate-Files-Version/Activators/_ReadMe.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MAS/Separate-Files-Version/Activators/_ReadMe.txt b/MAS/Separate-Files-Version/Activators/_ReadMe.txt index 2473884..058a628 100644 --- a/MAS/Separate-Files-Version/Activators/_ReadMe.txt +++ b/MAS/Separate-Files-Version/Activators/_ReadMe.txt @@ -10,4 +10,5 @@ Online KMS - Windows / Office - 180 Days. Lifetime With Renewal -------------------------------------------------------------------------------------- -For more details, check https://massgrave.dev/activations_comparison \ No newline at end of file +Check the below link for more details: +https://massgrave.dev/chart \ No newline at end of file From 6adb247334ed7cff17cc7ce2089fd2d4e77771bf Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 18 Feb 2025 03:42:42 +0530 Subject: [PATCH 085/132] Update W10 ESU editions list as per 19045.5552 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 8 ++++---- .../Activators/TSforge_Activation.cmd | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index dfb8b2f..f67809e 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -4037,10 +4037,10 @@ REM Windows8.1 REM WindowsServer2012/2012R2 55b1dd2d-2209-4ea0-a805-06298bad25b3_Server-ESU-Year3[1-3y]_-ServerDatacenter-ServerDatacenterCore-ServerDatacenterV-ServerDatacenterVCore-ServerStandard-ServerStandardCore-ServerStandardV-ServerStandardVCore- REM Windows10 -83d49986-add3-41d7-ba33-87c7bfb5c0fb_Client-ESU-Year3[1-3y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN- -0b533b5e-08b6-44f9-b885-c2de291ba456_Client-ESU-Year6[4-6y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN- -4dac5a0c-5709-4595-a32c-14a56a4a6b31_Client-IoT-ESU-Year3[1-3y]_-IoTEnterprise- REM Removed IoTEnterpriseS because it already has longer support -f69e2d51-3bbd-4ddf-8da7-a145e9dca597_Client-IoT-ESU-Year6[4-6y]_-IoTEnterprise- REM Removed IoTEnterpriseS because it already has longer support +83d49986-add3-41d7-ba33-87c7bfb5c0fb_Client-ESU-Year3[1-3y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- +0b533b5e-08b6-44f9-b885-c2de291ba456_Client-ESU-Year6[4-6y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- +4dac5a0c-5709-4595-a32c-14a56a4a6b31_Client-IoT-ESU-Year3[1-3y]_-IoTEnterprise- +f69e2d51-3bbd-4ddf-8da7-a145e9dca597_Client-IoT-ESU-Year6[4-6y]_-IoTEnterprise- ) do ( for /f "tokens=1-3 delims=_" %%A in ("%%#") do ( echo "%allapps%" | find /i "%%A" %nul1% && ( diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 030e406..23b88b4 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -735,10 +735,10 @@ REM Windows8.1 REM WindowsServer2012/2012R2 55b1dd2d-2209-4ea0-a805-06298bad25b3_Server-ESU-Year3[1-3y]_-ServerDatacenter-ServerDatacenterCore-ServerDatacenterV-ServerDatacenterVCore-ServerStandard-ServerStandardCore-ServerStandardV-ServerStandardVCore- REM Windows10 -83d49986-add3-41d7-ba33-87c7bfb5c0fb_Client-ESU-Year3[1-3y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN- -0b533b5e-08b6-44f9-b885-c2de291ba456_Client-ESU-Year6[4-6y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN- -4dac5a0c-5709-4595-a32c-14a56a4a6b31_Client-IoT-ESU-Year3[1-3y]_-IoTEnterprise- REM Removed IoTEnterpriseS because it already has longer support -f69e2d51-3bbd-4ddf-8da7-a145e9dca597_Client-IoT-ESU-Year6[4-6y]_-IoTEnterprise- REM Removed IoTEnterpriseS because it already has longer support +83d49986-add3-41d7-ba33-87c7bfb5c0fb_Client-ESU-Year3[1-3y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- +0b533b5e-08b6-44f9-b885-c2de291ba456_Client-ESU-Year6[4-6y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- +4dac5a0c-5709-4595-a32c-14a56a4a6b31_Client-IoT-ESU-Year3[1-3y]_-IoTEnterprise- +f69e2d51-3bbd-4ddf-8da7-a145e9dca597_Client-IoT-ESU-Year6[4-6y]_-IoTEnterprise- ) do ( for /f "tokens=1-3 delims=_" %%A in ("%%#") do ( echo "%allapps%" | find /i "%%A" %nul1% && ( From 8d67d62c1590a0e6808557ff32c5325462a16879 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 18 Feb 2025 04:44:35 +0530 Subject: [PATCH 086/132] Update esu info --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index f67809e..a2c8dee 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -4699,13 +4699,13 @@ set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) else ( echo "%tsids%" | find /i "7e94be23-b161-4956-a682-146ab291774c" %nul1% && ( -call :dk_color %Gray% "Windows Update can receive 1-3 years of ESU. 4-6 year ESU is not officially supported, but you can manually install updates." +call :dk_color %Gray% "Windows Update can receive 1-3 years of ESU. 4-6 years ESU is not officially supported, but you can manually install updates." ) echo "%tsids%" | findstr /i "4afc620f-12a4-48ad-8015-2aebfbd6e47c 11be7019-a309-4763-9a09-091d1722ffe3" %nul1% && ( call :dk_color %Gray% "ESU is not officially supported on Windows 8.1, but you can manually install updates until Jan-2024." ) echo "%tsids%" | findstr /i "0b533b5e-08b6-44f9-b885-c2de291ba456 f69e2d51-3bbd-4ddf-8da7-a145e9dca597" %nul1% && ( -call :dk_color %Gray% "Windows Update can receive 1-3 years of ESU. 4-6 year ESU license is added just as a placeholder." +call :dk_color %Gray% "Windows Update can receive 1-3 years of ESU. 4-6 years ESU is not officially supported, but it might be useful." ) ) diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 23b88b4..03fddba 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -1397,13 +1397,13 @@ set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) else ( echo "%tsids%" | find /i "7e94be23-b161-4956-a682-146ab291774c" %nul1% && ( -call :dk_color %Gray% "Windows Update can receive 1-3 years of ESU. 4-6 year ESU is not officially supported, but you can manually install updates." +call :dk_color %Gray% "Windows Update can receive 1-3 years of ESU. 4-6 years ESU is not officially supported, but you can manually install updates." ) echo "%tsids%" | findstr /i "4afc620f-12a4-48ad-8015-2aebfbd6e47c 11be7019-a309-4763-9a09-091d1722ffe3" %nul1% && ( call :dk_color %Gray% "ESU is not officially supported on Windows 8.1, but you can manually install updates until Jan-2024." ) echo "%tsids%" | findstr /i "0b533b5e-08b6-44f9-b885-c2de291ba456 f69e2d51-3bbd-4ddf-8da7-a145e9dca597" %nul1% && ( -call :dk_color %Gray% "Windows Update can receive 1-3 years of ESU. 4-6 year ESU license is added just as a placeholder." +call :dk_color %Gray% "Windows Update can receive 1-3 years of ESU. 4-6 years ESU is not officially supported, but it might be useful." ) ) From a5bcfdd3e66db80694b44f323e1f7e40e30364a4 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 22 Feb 2025 19:50:37 +0530 Subject: [PATCH 087/132] Update info in tsforge uninstall section --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 3 +-- MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index a2c8dee..6ad1a46 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -4740,8 +4740,7 @@ mode 100, 30 title Remove TSforge Activation %masver% echo: -echo TSforge activation doesn't modify any Windows component. -echo TSforge activation doesn't install any new file in the system. +echo TSforge activation doesn't modify any Windows components and doesn't install any new files. echo: echo Instead, it appends data to one of data files used by Software Protection Platform. echo: diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 03fddba..be410b2 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -1438,8 +1438,7 @@ mode 100, 30 title Remove TSforge Activation %masver% echo: -echo TSforge activation doesn't modify any Windows component. -echo TSforge activation doesn't install any new file in the system. +echo TSforge activation doesn't modify any Windows components and doesn't install any new files. echo: echo Instead, it appends data to one of data files used by Software Protection Platform. echo: From a9eda8f572653ae1459757018f8a9691411635ef Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 22 Feb 2025 20:13:09 +0530 Subject: [PATCH 088/132] Select 1 and 2Y ESU as well instead of only 3Y, just to be sure --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 8 ++++++-- .../Activators/TSforge_Activation.cmd | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 6ad1a46..45bd294 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -4037,9 +4037,13 @@ REM Windows8.1 REM WindowsServer2012/2012R2 55b1dd2d-2209-4ea0-a805-06298bad25b3_Server-ESU-Year3[1-3y]_-ServerDatacenter-ServerDatacenterCore-ServerDatacenterV-ServerDatacenterVCore-ServerStandard-ServerStandardCore-ServerStandardV-ServerStandardVCore- REM Windows10 -83d49986-add3-41d7-ba33-87c7bfb5c0fb_Client-ESU-Year3[1-3y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- +f520e45e-7413-4a34-a497-d2765967d094_Client-ESU-Year1_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- +1043add5-23b1-4afb-9a0f-64343c8f3f8d_Client-ESU-Year2_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- +83d49986-add3-41d7-ba33-87c7bfb5c0fb_Client-ESU-Year3_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- 0b533b5e-08b6-44f9-b885-c2de291ba456_Client-ESU-Year6[4-6y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- -4dac5a0c-5709-4595-a32c-14a56a4a6b31_Client-IoT-ESU-Year3[1-3y]_-IoTEnterprise- +b8527af1-5389-447c-9a88-2d1691ea33d3_Client-IoT-ESU-Year1_-IoTEnterprise- +7b76ee02-0a75-4f08-85d5-bd0feadad0c0_Client-IoT-ESU-Year2_-IoTEnterprise- +4dac5a0c-5709-4595-a32c-14a56a4a6b31_Client-IoT-ESU-Year3_-IoTEnterprise- f69e2d51-3bbd-4ddf-8da7-a145e9dca597_Client-IoT-ESU-Year6[4-6y]_-IoTEnterprise- ) do ( for /f "tokens=1-3 delims=_" %%A in ("%%#") do ( diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index be410b2..e04677d 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -735,9 +735,13 @@ REM Windows8.1 REM WindowsServer2012/2012R2 55b1dd2d-2209-4ea0-a805-06298bad25b3_Server-ESU-Year3[1-3y]_-ServerDatacenter-ServerDatacenterCore-ServerDatacenterV-ServerDatacenterVCore-ServerStandard-ServerStandardCore-ServerStandardV-ServerStandardVCore- REM Windows10 -83d49986-add3-41d7-ba33-87c7bfb5c0fb_Client-ESU-Year3[1-3y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- +f520e45e-7413-4a34-a497-d2765967d094_Client-ESU-Year1_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- +1043add5-23b1-4afb-9a0f-64343c8f3f8d_Client-ESU-Year2_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- +83d49986-add3-41d7-ba33-87c7bfb5c0fb_Client-ESU-Year3_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- 0b533b5e-08b6-44f9-b885-c2de291ba456_Client-ESU-Year6[4-6y]_-Education-EducationN-Enterprise-EnterpriseN-Professional-ProfessionalEducation-ProfessionalEducationN-ProfessionalN-ProfessionalWorkstation-ProfessionalWorkstationN-ServerRdsh- -4dac5a0c-5709-4595-a32c-14a56a4a6b31_Client-IoT-ESU-Year3[1-3y]_-IoTEnterprise- +b8527af1-5389-447c-9a88-2d1691ea33d3_Client-IoT-ESU-Year1_-IoTEnterprise- +7b76ee02-0a75-4f08-85d5-bd0feadad0c0_Client-IoT-ESU-Year2_-IoTEnterprise- +4dac5a0c-5709-4595-a32c-14a56a4a6b31_Client-IoT-ESU-Year3_-IoTEnterprise- f69e2d51-3bbd-4ddf-8da7-a145e9dca597_Client-IoT-ESU-Year6[4-6y]_-IoTEnterprise- ) do ( for /f "tokens=1-3 delims=_" %%A in ("%%#") do ( From 5e7e42a44655993b4975e9616b20ff2b8c8d0b59 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 22 Feb 2025 20:52:26 +0530 Subject: [PATCH 089/132] Add a backup url in update check --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 14 ++++++++++---- .../Activators/HWID_Activation.cmd | 14 ++++++++++---- .../Activators/KMS38_Activation.cmd | 14 ++++++++++---- .../Activators/Ohook_Activation_AIO.cmd | 14 ++++++++++---- .../Activators/Online_KMS_Activation.cmd | 14 ++++++++++---- .../Activators/TSforge_Activation.cmd | 14 ++++++++++---- .../Change_Office_Edition.cmd | 14 ++++++++++---- .../Change_Windows_Edition.cmd | 14 ++++++++++---- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 14 ++++++++++---- MAS/Separate-Files-Version/Troubleshoot.cmd | 14 ++++++++++---- 10 files changed, 100 insertions(+), 40 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 45bd294..a043b38 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -265,12 +265,18 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set pingp= set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( -if not "%%#"=="" set old=1 -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( -if not "%%#"=="" set old= +for %%A in ( +activ%-%ated.win +mass%-%grave.dev +) do if not defined pingp ( +for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do ( +if not "%%B"=="" (set old=1& set pingp=1) +for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do ( +if not "%%C"=="" set old= +) ) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 6b960f8..1989d51 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -304,12 +304,18 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set pingp= set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( -if not "%%#"=="" set old=1 -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( -if not "%%#"=="" set old= +for %%A in ( +activ%-%ated.win +mass%-%grave.dev +) do if not defined pingp ( +for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do ( +if not "%%B"=="" (set old=1& set pingp=1) +for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do ( +if not "%%C"=="" set old= +) ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 7ae669d..17fae23 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -307,12 +307,18 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set pingp= set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( -if not "%%#"=="" set old=1 -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( -if not "%%#"=="" set old= +for %%A in ( +activ%-%ated.win +mass%-%grave.dev +) do if not defined pingp ( +for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do ( +if not "%%B"=="" (set old=1& set pingp=1) +for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do ( +if not "%%C"=="" set old= +) ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 454644c..980cb50 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -297,12 +297,18 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set pingp= set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( -if not "%%#"=="" set old=1 -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( -if not "%%#"=="" set old= +for %%A in ( +activ%-%ated.win +mass%-%grave.dev +) do if not defined pingp ( +for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do ( +if not "%%B"=="" (set old=1& set pingp=1) +for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do ( +if not "%%C"=="" set old= +) ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 519c1bd..70632ce 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -326,12 +326,18 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set pingp= set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( -if not "%%#"=="" set old=1 -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( -if not "%%#"=="" set old= +for %%A in ( +activ%-%ated.win +mass%-%grave.dev +) do if not defined pingp ( +for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do ( +if not "%%B"=="" (set old=1& set pingp=1) +for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do ( +if not "%%C"=="" set old= +) ) ) diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index e04677d..1af9408 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -332,12 +332,18 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set pingp= set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( -if not "%%#"=="" set old=1 -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( -if not "%%#"=="" set old= +for %%A in ( +activ%-%ated.win +mass%-%grave.dev +) do if not defined pingp ( +for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do ( +if not "%%B"=="" (set old=1& set pingp=1) +for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do ( +if not "%%C"=="" set old= +) ) ) diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 05d4410..29fec81 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -257,12 +257,18 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set pingp= set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( -if not "%%#"=="" set old=1 -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( -if not "%%#"=="" set old= +for %%A in ( +activ%-%ated.win +mass%-%grave.dev +) do if not defined pingp ( +for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do ( +if not "%%B"=="" (set old=1& set pingp=1) +for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do ( +if not "%%C"=="" set old= +) ) ) diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index fa4f62f..3c954d7 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -262,12 +262,18 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set pingp= set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( -if not "%%#"=="" set old=1 -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( -if not "%%#"=="" set old= +for %%A in ( +activ%-%ated.win +mass%-%grave.dev +) do if not defined pingp ( +for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do ( +if not "%%B"=="" (set old=1& set pingp=1) +for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do ( +if not "%%C"=="" set old= +) ) ) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index bae7818..2b70d33 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -256,12 +256,18 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set pingp= set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( -if not "%%#"=="" set old=1 -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( -if not "%%#"=="" set old= +for %%A in ( +activ%-%ated.win +mass%-%grave.dev +) do if not defined pingp ( +for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do ( +if not "%%B"=="" (set old=1& set pingp=1) +for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do ( +if not "%%C"=="" set old= +) ) ) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index fb32306..1884358 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -257,12 +257,18 @@ set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080) set -= set old= +set pingp= set upver=%masver:.=% -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 activ%-%ated.win') do ( -if not "%%#"=="" set old=1 -for /f "delims=[] tokens=2" %%# in ('ping -4 -n 1 updatecheck%upver%.activ%-%ated.win') do ( -if not "%%#"=="" set old= +for %%A in ( +activ%-%ated.win +mass%-%grave.dev +) do if not defined pingp ( +for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do ( +if not "%%B"=="" (set old=1& set pingp=1) +for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do ( +if not "%%C"=="" set old= +) ) ) From 55afa30fcd9147fe54ad1a85193e9777df2bb63b Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 23 Feb 2025 20:36:55 +0530 Subject: [PATCH 090/132] Improve powershell test --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 57 ++++++++++--------- .../Activators/HWID_Activation.cmd | 57 ++++++++++--------- .../Activators/KMS38_Activation.cmd | 57 ++++++++++--------- .../Activators/Ohook_Activation_AIO.cmd | 57 ++++++++++--------- .../Activators/Online_KMS_Activation.cmd | 57 ++++++++++--------- .../Activators/TSforge_Activation.cmd | 57 ++++++++++--------- .../Change_Office_Edition.cmd | 57 ++++++++++--------- .../Change_Windows_Edition.cmd | 57 ++++++++++--------- .../Extract_OEM_Folder.cmd | 57 ++++++++++--------- MAS/Separate-Files-Version/Troubleshoot.cmd | 57 ++++++++++--------- 10 files changed, 300 insertions(+), 270 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index a043b38..11b8ec9 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -180,33 +180,6 @@ goto dk_done ::======================================================================================================================================== -:: Check PowerShell - -REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: - -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( -%eline% -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" -echo: -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( -echo Failed to run Powershell command but Powershell is working. -echo: -cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" -echo: -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) || ( -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" -) -goto dk_done -) - -::======================================================================================================================================== - :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( @@ -219,6 +192,36 @@ goto dk_done ::======================================================================================================================================== +:: Check PowerShell + +::pstst $ExecutionContext.SessionState.LanguageMode :pstst + +for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) + +if /i "%tstresult%"=="ConstrainedLanguage" ( +%eline% +echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +goto dk_done +) + +if /i not "%tstresult%"=="FullLanguage" ( +%eline% +echo "%tstresult%" +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo PowerShell is not working properly. Aborting... +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 1989d51..fa3786a 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -219,33 +219,6 @@ goto dk_done ::======================================================================================================================================== -:: Check PowerShell - -REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: - -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( -%eline% -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" -echo: -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( -echo Failed to run Powershell command but Powershell is working. -echo: -cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" -echo: -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) || ( -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" -) -goto dk_done -) - -::======================================================================================================================================== - :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( @@ -258,6 +231,36 @@ goto dk_done ::======================================================================================================================================== +:: Check PowerShell + +::pstst $ExecutionContext.SessionState.LanguageMode :pstst + +for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) + +if /i "%tstresult%"=="ConstrainedLanguage" ( +%eline% +echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +goto dk_done +) + +if /i not "%tstresult%"=="FullLanguage" ( +%eline% +echo "%tstresult%" +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo PowerShell is not working properly. Aborting... +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 17fae23..eeee718 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -222,33 +222,6 @@ goto dk_done ::======================================================================================================================================== -:: Check PowerShell - -REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: - -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( -%eline% -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" -echo: -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( -echo Failed to run Powershell command but Powershell is working. -echo: -cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" -echo: -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) || ( -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" -) -goto dk_done -) - -::======================================================================================================================================== - :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( @@ -261,6 +234,36 @@ goto dk_done ::======================================================================================================================================== +:: Check PowerShell + +::pstst $ExecutionContext.SessionState.LanguageMode :pstst + +for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) + +if /i "%tstresult%"=="ConstrainedLanguage" ( +%eline% +echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +goto dk_done +) + +if /i not "%tstresult%"=="FullLanguage" ( +%eline% +echo "%tstresult%" +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo PowerShell is not working properly. Aborting... +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 980cb50..a1679e1 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -212,33 +212,6 @@ goto dk_done ::======================================================================================================================================== -:: Check PowerShell - -REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: - -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( -%eline% -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" -echo: -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( -echo Failed to run Powershell command but Powershell is working. -echo: -cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" -echo: -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) || ( -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" -) -goto dk_done -) - -::======================================================================================================================================== - :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( @@ -251,6 +224,36 @@ goto dk_done ::======================================================================================================================================== +:: Check PowerShell + +::pstst $ExecutionContext.SessionState.LanguageMode :pstst + +for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) + +if /i "%tstresult%"=="ConstrainedLanguage" ( +%eline% +echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +goto dk_done +) + +if /i not "%tstresult%"=="FullLanguage" ( +%eline% +echo "%tstresult%" +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo PowerShell is not working properly. Aborting... +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 70632ce..e14f24b 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -241,33 +241,6 @@ goto dk_done ::======================================================================================================================================== -:: Check PowerShell - -REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: - -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( -%eline% -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" -echo: -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( -echo Failed to run Powershell command but Powershell is working. -echo: -cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" -echo: -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) || ( -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" -) -goto dk_done -) - -::======================================================================================================================================== - :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( @@ -280,6 +253,36 @@ goto dk_done ::======================================================================================================================================== +:: Check PowerShell + +::pstst $ExecutionContext.SessionState.LanguageMode :pstst + +for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) + +if /i "%tstresult%"=="ConstrainedLanguage" ( +%eline% +echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +goto dk_done +) + +if /i not "%tstresult%"=="FullLanguage" ( +%eline% +echo "%tstresult%" +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo PowerShell is not working properly. Aborting... +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 1af9408..96a273c 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -247,33 +247,6 @@ goto dk_done ::======================================================================================================================================== -:: Check PowerShell - -REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: - -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( -%eline% -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" -echo: -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( -echo Failed to run Powershell command but Powershell is working. -echo: -cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" -echo: -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) || ( -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" -) -goto dk_done -) - -::======================================================================================================================================== - :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( @@ -286,6 +259,36 @@ goto dk_done ::======================================================================================================================================== +:: Check PowerShell + +::pstst $ExecutionContext.SessionState.LanguageMode :pstst + +for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) + +if /i "%tstresult%"=="ConstrainedLanguage" ( +%eline% +echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +goto dk_done +) + +if /i not "%tstresult%"=="FullLanguage" ( +%eline% +echo "%tstresult%" +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo PowerShell is not working properly. Aborting... +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 29fec81..6ec47b5 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -172,33 +172,6 @@ goto dk_done ::======================================================================================================================================== -:: Check PowerShell - -REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: - -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( -%eline% -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" -echo: -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( -echo Failed to run Powershell command but Powershell is working. -echo: -cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" -echo: -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) || ( -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" -) -goto dk_done -) - -::======================================================================================================================================== - :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( @@ -211,6 +184,36 @@ goto dk_done ::======================================================================================================================================== +:: Check PowerShell + +::pstst $ExecutionContext.SessionState.LanguageMode :pstst + +for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) + +if /i "%tstresult%"=="ConstrainedLanguage" ( +%eline% +echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +goto dk_done +) + +if /i not "%tstresult%"=="FullLanguage" ( +%eline% +echo "%tstresult%" +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo PowerShell is not working properly. Aborting... +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 3c954d7..19c1c3a 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -177,33 +177,6 @@ goto dk_done ::======================================================================================================================================== -:: Check PowerShell - -REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: - -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( -%eline% -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" -echo: -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( -echo Failed to run Powershell command but Powershell is working. -echo: -cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" -echo: -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) || ( -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" -) -goto dk_done -) - -::======================================================================================================================================== - :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( @@ -216,6 +189,36 @@ goto dk_done ::======================================================================================================================================== +:: Check PowerShell + +::pstst $ExecutionContext.SessionState.LanguageMode :pstst + +for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) + +if /i "%tstresult%"=="ConstrainedLanguage" ( +%eline% +echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +goto dk_done +) + +if /i not "%tstresult%"=="FullLanguage" ( +%eline% +echo "%tstresult%" +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo PowerShell is not working properly. Aborting... +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 2b70d33..c1b78c1 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -171,33 +171,6 @@ goto done2 ::======================================================================================================================================== -:: Check PowerShell - -REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: - -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( -%eline% -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" -echo: -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( -echo Failed to run Powershell command but Powershell is working. -echo: -cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" -echo: -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) || ( -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" -) -goto done2 -) - -::======================================================================================================================================== - :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( @@ -210,6 +183,36 @@ goto done2 ::======================================================================================================================================== +:: Check PowerShell + +::pstst $ExecutionContext.SessionState.LanguageMode :pstst + +for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) + +if /i "%tstresult%"=="ConstrainedLanguage" ( +%eline% +echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +goto done2 +) + +if /i not "%tstresult%"=="FullLanguage" ( +%eline% +echo "%tstresult%" +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo PowerShell is not working properly. Aborting... +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto done2 +) + +::======================================================================================================================================== + :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 1884358..73cb0c4 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -172,33 +172,6 @@ goto dk_done ::======================================================================================================================================== -:: Check PowerShell - -REM :PStest: $ExecutionContext.SessionState.LanguageMode :PStest: - -cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PStest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( -%eline% -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" -echo: -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( -echo Failed to run Powershell command but Powershell is working. -echo: -cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" -echo: -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" -) || ( -echo PowerShell is not working. Aborting... -echo If you have applied restrictions on Powershell then undo those changes. -echo: -set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" -) -goto dk_done -) - -::======================================================================================================================================== - :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( @@ -211,6 +184,36 @@ goto dk_done ::======================================================================================================================================== +:: Check PowerShell + +::pstst $ExecutionContext.SessionState.LanguageMode :pstst + +for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) + +if /i "%tstresult%"=="ConstrainedLanguage" ( +%eline% +echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo If you have applied restrictions on Powershell then undo those changes. +echo: +set fixes=%fixes% %mas%fix_powershell +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +goto dk_done +) + +if /i not "%tstresult%"=="FullLanguage" ( +%eline% +echo "%tstresult%" +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +echo PowerShell is not working properly. Aborting... +cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" +echo: +set fixes=%fixes% %mas%troubleshoot +call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +goto dk_done +) + +::======================================================================================================================================== + :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( From ab0cd24f89f5b16a35cc7a685b59d5fe5460289d Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 24 Feb 2025 00:36:35 +0530 Subject: [PATCH 091/132] Add more checks for powershell --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 26 ++++++++++++++----- .../Activators/HWID_Activation.cmd | 26 ++++++++++++++----- .../Activators/KMS38_Activation.cmd | 26 ++++++++++++++----- .../Activators/Ohook_Activation_AIO.cmd | 26 ++++++++++++++----- .../Activators/Online_KMS_Activation.cmd | 26 ++++++++++++++----- .../Activators/TSforge_Activation.cmd | 26 ++++++++++++++----- .../Change_Office_Edition.cmd | 26 ++++++++++++++----- .../Change_Windows_Edition.cmd | 26 ++++++++++++++----- .../Extract_OEM_Folder.cmd | 26 ++++++++++++++----- MAS/Separate-Files-Version/Troubleshoot.cmd | 26 ++++++++++++++----- 10 files changed, 190 insertions(+), 70 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 11b8ec9..06e4d83 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -196,11 +196,18 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) -if /i "%tstresult%"=="ConstrainedLanguage" ( +if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo %tstresult% +cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" + +REM check LanguageMode + +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( +%eline% +echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell @@ -208,10 +215,15 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) -if /i not "%tstresult%"=="FullLanguage" ( -%eline% -echo "%tstresult%" -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +REM check Powershell core version + +cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && ( +echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting... +goto dk_done +) + +REM check antivirus and other errors + echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index fa3786a..2730ec6 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -235,11 +235,18 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) -if /i "%tstresult%"=="ConstrainedLanguage" ( +if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo %tstresult% +cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" + +REM check LanguageMode + +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( +%eline% +echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell @@ -247,10 +254,15 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) -if /i not "%tstresult%"=="FullLanguage" ( -%eline% -echo "%tstresult%" -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +REM check Powershell core version + +cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && ( +echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting... +goto dk_done +) + +REM check antivirus and other errors + echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index eeee718..19586c1 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -238,11 +238,18 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) -if /i "%tstresult%"=="ConstrainedLanguage" ( +if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo %tstresult% +cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" + +REM check LanguageMode + +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( +%eline% +echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell @@ -250,10 +257,15 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) -if /i not "%tstresult%"=="FullLanguage" ( -%eline% -echo "%tstresult%" -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +REM check Powershell core version + +cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && ( +echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting... +goto dk_done +) + +REM check antivirus and other errors + echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index a1679e1..53860bd 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -228,11 +228,18 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) -if /i "%tstresult%"=="ConstrainedLanguage" ( +if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo %tstresult% +cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" + +REM check LanguageMode + +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( +%eline% +echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell @@ -240,10 +247,15 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) -if /i not "%tstresult%"=="FullLanguage" ( -%eline% -echo "%tstresult%" -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +REM check Powershell core version + +cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && ( +echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting... +goto dk_done +) + +REM check antivirus and other errors + echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index e14f24b..2a15a50 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -257,11 +257,18 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) -if /i "%tstresult%"=="ConstrainedLanguage" ( +if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo %tstresult% +cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" + +REM check LanguageMode + +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( +%eline% +echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell @@ -269,10 +276,15 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) -if /i not "%tstresult%"=="FullLanguage" ( -%eline% -echo "%tstresult%" -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +REM check Powershell core version + +cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && ( +echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting... +goto dk_done +) + +REM check antivirus and other errors + echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 96a273c..3067851 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -263,11 +263,18 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) -if /i "%tstresult%"=="ConstrainedLanguage" ( +if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo %tstresult% +cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" + +REM check LanguageMode + +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( +%eline% +echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell @@ -275,10 +282,15 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) -if /i not "%tstresult%"=="FullLanguage" ( -%eline% -echo "%tstresult%" -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +REM check Powershell core version + +cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && ( +echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting... +goto dk_done +) + +REM check antivirus and other errors + echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 6ec47b5..95d4044 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -188,11 +188,18 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) -if /i "%tstresult%"=="ConstrainedLanguage" ( +if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo %tstresult% +cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" + +REM check LanguageMode + +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( +%eline% +echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell @@ -200,10 +207,15 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) -if /i not "%tstresult%"=="FullLanguage" ( -%eline% -echo "%tstresult%" -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +REM check Powershell core version + +cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && ( +echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting... +goto dk_done +) + +REM check antivirus and other errors + echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 19c1c3a..10a1559 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -193,11 +193,18 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) -if /i "%tstresult%"=="ConstrainedLanguage" ( +if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo %tstresult% +cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" + +REM check LanguageMode + +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( +%eline% +echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell @@ -205,10 +212,15 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) -if /i not "%tstresult%"=="FullLanguage" ( -%eline% -echo "%tstresult%" -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +REM check Powershell core version + +cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && ( +echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting... +goto dk_done +) + +REM check antivirus and other errors + echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index c1b78c1..7c8c3d4 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -187,11 +187,18 @@ goto done2 ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) -if /i "%tstresult%"=="ConstrainedLanguage" ( +if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo %tstresult% +cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" + +REM check LanguageMode + +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( +%eline% +echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell @@ -199,10 +206,15 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" goto done2 ) -if /i not "%tstresult%"=="FullLanguage" ( -%eline% -echo "%tstresult%" -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +REM check Powershell core version + +cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && ( +echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting... +goto done2 +) + +REM check antivirus and other errors + echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 73cb0c4..8ce62b7 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -188,11 +188,18 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) -if /i "%tstresult%"=="ConstrainedLanguage" ( +if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo ConstrainedLanguage mode found in PowerShell. Aborting... +echo %tstresult% +cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" + +REM check LanguageMode + +cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( +%eline% +echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell @@ -200,10 +207,15 @@ call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) -if /i not "%tstresult%"=="FullLanguage" ( -%eline% -echo "%tstresult%" -cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" +REM check Powershell core version + +cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && ( +echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting... +goto dk_done +) + +REM check antivirus and other errors + echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: From 69f1a206fb17d2d101954ed221094295d8dc5d59 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 14 Mar 2025 15:27:57 +0530 Subject: [PATCH 092/132] Change file hash --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 06e4d83..f8cda8c 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1,4 +1,4 @@ -@::u78r-random +@::63489fhty3-random @set masver=3.0 @setlocal DisableDelayedExpansion @echo off From 313f240448953cd5fe3c5631f4e4de502f23fc9a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Fri, 14 Mar 2025 15:27:57 +0530 Subject: [PATCH 093/132] Change file hash --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index dfb8b2f..9a9a90c 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1,4 +1,4 @@ -@::u78r-random +@::63489fhty3-random @set masver=3.0 @setlocal DisableDelayedExpansion @echo off From c4f33e96c472484b89b81d6b29cb995ea8148bf1 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 16 Mar 2025 02:34:10 +0530 Subject: [PATCH 094/132] Update WPA keys check code --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 6 +++--- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 6 +++--- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 6 +++--- .../Activators/Ohook_Activation_AIO.cmd | 6 +++--- .../Activators/Online_KMS_Activation.cmd | 6 +++--- .../Activators/TSforge_Activation.cmd | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index f8cda8c..bdcee26 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1879,7 +1879,7 @@ exit /b $wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") $count = 0 foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $count++ } } @@ -1888,7 +1888,7 @@ $minBuildNumber = 14393 if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $keyNumber = $subkeyName -replace '.*-', '' $subkeyHashTable[$keyNumber] = $true } @@ -1902,7 +1902,7 @@ if ($osVersion.Build -ge $minBuildNumber) { } } $wpaKey.GetSubKeyNames() | ForEach-Object { - if ($_ -match '.*-.*-.*-.*-.*-') { + if ($_ -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { if ($PSVersionTable.PSVersion.Major -lt 3) { cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" if ($LASTEXITCODE -ne 0) { diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 2730ec6..6a379f7 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1594,7 +1594,7 @@ exit /b $wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") $count = 0 foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $count++ } } @@ -1603,7 +1603,7 @@ $minBuildNumber = 14393 if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $keyNumber = $subkeyName -replace '.*-', '' $subkeyHashTable[$keyNumber] = $true } @@ -1617,7 +1617,7 @@ if ($osVersion.Build -ge $minBuildNumber) { } } $wpaKey.GetSubKeyNames() | ForEach-Object { - if ($_ -match '.*-.*-.*-.*-.*-') { + if ($_ -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { if ($PSVersionTable.PSVersion.Major -lt 3) { cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" if ($LASTEXITCODE -ne 0) { diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 19586c1..ff6e59d 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1743,7 +1743,7 @@ exit /b $wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") $count = 0 foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $count++ } } @@ -1752,7 +1752,7 @@ $minBuildNumber = 14393 if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $keyNumber = $subkeyName -replace '.*-', '' $subkeyHashTable[$keyNumber] = $true } @@ -1766,7 +1766,7 @@ if ($osVersion.Build -ge $minBuildNumber) { } } $wpaKey.GetSubKeyNames() | ForEach-Object { - if ($_ -match '.*-.*-.*-.*-.*-') { + if ($_ -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { if ($PSVersionTable.PSVersion.Major -lt 3) { cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" if ($LASTEXITCODE -ne 0) { diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 53860bd..ce9ad93 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2013,7 +2013,7 @@ exit /b $wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") $count = 0 foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $count++ } } @@ -2022,7 +2022,7 @@ $minBuildNumber = 14393 if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $keyNumber = $subkeyName -replace '.*-', '' $subkeyHashTable[$keyNumber] = $true } @@ -2036,7 +2036,7 @@ if ($osVersion.Build -ge $minBuildNumber) { } } $wpaKey.GetSubKeyNames() | ForEach-Object { - if ($_ -match '.*-.*-.*-.*-.*-') { + if ($_ -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { if ($PSVersionTable.PSVersion.Major -lt 3) { cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" if ($LASTEXITCODE -ne 0) { diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 2a15a50..f1576e0 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3167,7 +3167,7 @@ exit /b $wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") $count = 0 foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $count++ } } @@ -3176,7 +3176,7 @@ $minBuildNumber = 14393 if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $keyNumber = $subkeyName -replace '.*-', '' $subkeyHashTable[$keyNumber] = $true } @@ -3190,7 +3190,7 @@ if ($osVersion.Build -ge $minBuildNumber) { } } $wpaKey.GetSubKeyNames() | ForEach-Object { - if ($_ -match '.*-.*-.*-.*-.*-') { + if ($_ -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { if ($PSVersionTable.PSVersion.Major -lt 3) { cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" if ($LASTEXITCODE -ne 0) { diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 3067851..1cf85e9 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -2722,7 +2722,7 @@ exit /b $wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") $count = 0 foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $count++ } } @@ -2731,7 +2731,7 @@ $minBuildNumber = 14393 if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { - if ($subkeyName -match '.*-.*-.*-.*-.*-') { + if ($subkeyName -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { $keyNumber = $subkeyName -replace '.*-', '' $subkeyHashTable[$keyNumber] = $true } @@ -2745,7 +2745,7 @@ if ($osVersion.Build -ge $minBuildNumber) { } } $wpaKey.GetSubKeyNames() | ForEach-Object { - if ($_ -match '.*-.*-.*-.*-.*-') { + if ($_ -match '8DEC0AF1-0341-4b93-85CD-72606C2DF94C.*') { if ($PSVersionTable.PSVersion.Major -lt 3) { cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" if ($LASTEXITCODE -ne 0) { From fe001e6c39777cce8d059c0da35ea48a109ac929 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 16 Mar 2025 03:04:40 +0530 Subject: [PATCH 095/132] Elaborate help message --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 120 +++++++++--------- .../Activators/HWID_Activation.cmd | 36 +++--- .../Activators/KMS38_Activation.cmd | 38 +++--- .../Activators/Ohook_Activation_AIO.cmd | 26 ++-- .../Activators/Online_KMS_Activation.cmd | 30 ++--- .../Activators/TSforge_Activation.cmd | 46 +++---- .../Change_Office_Edition.cmd | 30 ++--- .../Change_Windows_Edition.cmd | 26 ++-- .../Extract_OEM_Folder.cmd | 10 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 10 +- 10 files changed, 186 insertions(+), 186 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index bdcee26..6581baf 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -76,7 +76,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%fix_service +echo Check this webpage for help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -91,7 +91,7 @@ echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul @@ -137,7 +137,7 @@ echo Failed to detect Windows build number. echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -211,7 +211,7 @@ echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) @@ -228,7 +228,7 @@ echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -642,7 +642,7 @@ if not exist %SysPath%\%%# ( echo [%SysPath%\%%#] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) @@ -688,7 +688,7 @@ echo Evaluation editions cannot be activated outside of their evaluation period. call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." echo: set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" goto dk_done ) ) @@ -775,7 +775,7 @@ echo %mas% ) else ( echo Required license files not found in %SysPath%\spp\tokens\skus\ set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) echo: goto dk_done @@ -954,7 +954,7 @@ findstr /i "%%#" "%SysPath%\drivers\etc\hosts" %nul1% && set "hosfail= [%%# Bloc ) call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]!hosfail!" set fixes=%fixes% %mas%licensing-servers-issue -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%licensing-servers-issue" ) ::========================================================================================================================================== @@ -991,7 +991,7 @@ call :dk_color %Red% "Checking Windows Update Registry [Corruption Found] if !wcount! GTR 2 ( call :dk_color %Red% "Windows seems to be infected with Mal%w%ware." set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" ) else ( call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it." ) @@ -1016,7 +1016,7 @@ if not defined wucorrupt if not defined wublock if not defined wuerror if not de echo "%error_code%" | findstr /i "0x80072e 0x80072f 0x800704cf 0x87e10bcf 0x800705b4" %nul% && ( call :dk_color %Red% "Checking Internet Issues [Found] %error_code%" set fixes=%fixes% %mas%licensing-servers-issue -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%licensing-servers-issue" ) ) ) @@ -1034,7 +1034,7 @@ call :dk_color %Blue% "Use TSforge activation option from the main menu instead. ) else ( if not defined error call :dk_color %Blue% "%_fixmsg%" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) ) @@ -1356,7 +1356,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1432,7 +1432,7 @@ if defined pupfound call :dk_color %Gray% "Checking PUP Activators if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." if defined results call :dk_color %Red% "%results%" set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) @@ -1552,7 +1552,7 @@ set showfix=1 ) echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( set fixes=%fixes% %mas%fix_service -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service" set showfix=1 ) ) @@ -1609,7 +1609,7 @@ if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Win reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" ) ) @@ -1739,7 +1739,7 @@ call :dk_color %Red% "Checking SkipRearm [Default 0 Value N reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1754,7 +1754,7 @@ set error=1 set showfix=1 call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) @@ -2189,7 +2189,7 @@ if not exist %SysPath%\sppsvc.exe ( echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -2468,7 +2468,7 @@ call :dk_color %Red% "Some errors were detected." if not defined ierror if not defined showfix if not defined serv_cor if not defined serv_cste call :dk_color %Blue% "%_fixmsg%" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) goto :dk_done @@ -3759,7 +3759,7 @@ if not exist %SysPath%\sppsvc.exe ( echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -3772,7 +3772,7 @@ echo Install .NET Framework 4.8 and Windows Management Framework 5.1 ) echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) @@ -3786,7 +3786,7 @@ echo Evaluation WLMS service is running, sppsvc service can not be stopped. Abor echo Install Non-Eval version for Windows build %winbuild%. echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) @@ -3825,7 +3825,7 @@ call :dk_errorcheck if defined error ( call :dk_color %Red% "Some errors were detected. Aborting the operation..." set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto :dk_done ) @@ -3833,7 +3833,7 @@ call :ts_getedition if not defined tsedition ( call :dk_color %Red% "Checking Windows Edition ID [Not found in installed licenses, aborting...]" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto :dk_done ) @@ -4114,7 +4114,7 @@ if %winbuild% EQU 9600 set esuavail=1 if defined esuavail ( call :dk_color %Red% "Checking Activation ID [ESU license is not found, make sure Windows is fully updated]" set fixes=%fixes% %mas%tsforge#windows-esu -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%tsforge#windows-esu" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%tsforge#windows-esu" ) else ( call :dk_color %Gray% "Checking Activation ID [ESU is not available for %winos%]" ) @@ -4478,7 +4478,7 @@ echo Checking Activation ID [%%A] [%%B] if not defined ohostexist ( call :dk_color %Gray% "Checking Activation ID [Not found for Office %KS% Host]" -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%tsforge#office-kms-host" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%tsforge#office-kms-host" ) echo: @@ -4544,7 +4544,7 @@ set resetstuff=1 if %errorlevel%==3 ( call :dk_color %Red% "Reset Failed." set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) else ( call :dk_color %Green% "Reset process has been successfully done." ) @@ -4708,7 +4708,7 @@ call :dk_color %Gray% "To activate, check your internet connection and ensure th call :dk_color %Blue% "This Windows version is known to not activate due to MS Windows/Server issues." ) set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) ) @@ -4721,7 +4721,7 @@ echo: if !errorlevel!==3 ( if %_actman%==0 call :dk_color %Blue% "%_fixmsg%" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) else ( echo "%tsids%" | find /i "7e94be23-b161-4956-a682-146ab291774c" %nul1% && ( call :dk_color %Gray% "Windows Update can receive 1-3 years of ESU. 4-6 years ESU is not officially supported, but you can manually install updates." @@ -4749,7 +4749,7 @@ call :dk_reeval %nul% if not defined tsids if defined error if not defined showfix ( set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) goto :dk_done @@ -4864,7 +4864,7 @@ call :dk_color %Red% "Checking Activation ID [Office %oVer%.0 ! set error=1 set showfix=1 set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) echo %%# | find /i "2024" %nul% && ( @@ -9681,7 +9681,7 @@ if defined _fmiss ( echo [%_fmiss%] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -9738,7 +9738,7 @@ echo Evaluation editions cannot be activated outside of their evaluation period. call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." echo: set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" ) goto dk_done ) @@ -9754,7 +9754,7 @@ if not exist "!_work!\clipup.exe" ( echo clipup.exe doesn't exist in Server Cor/Acor [No GUI] versions. echo The file is required for KMS38 activation. echo Check the below page for instructions on how to activate it. -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%kms38" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%kms38" goto dk_done ) ) @@ -9766,7 +9766,7 @@ if defined a_cor ( if !errorlevel!==3 ( %eline% echo Valid digital signature not found in clipup.exe file. -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) @@ -9834,13 +9834,13 @@ if exist "%SysPath%\spp\tokens\skus\%osedition%\*GVLK*.xrm-ms" set sppks=1 if defined skunotfound ( call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) if defined sppks ( call :dk_color %Red% "KMS38 activation is supported but failed to find the key." set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) if not defined skunotfound if not defined sppks ( @@ -9890,7 +9890,7 @@ if %_wmic% EQU 0 for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELE if not defined app ( call :dk_color %Red% "Checking Installed GVLK Activation ID [Not Found] Aborting..." set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto :dk_done ) @@ -10058,7 +10058,7 @@ goto :k_final call :dk_color %Red% "Activation Failed" if not defined error call :dk_color %Blue% "%_fixmsg%" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ::======================================================================================================================================== @@ -10513,7 +10513,7 @@ if not exist %SysPath%\sppsvc.exe ( echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -10606,7 +10606,7 @@ call :dk_color %Blue% "Go back to main menu and use [Change Edition] option." ) else ( call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" ) goto :ks_office @@ -10656,13 +10656,13 @@ if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Componen if defined skunotfound ( call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) if defined sppks ( call :dk_color %Red% "%KS% activation is supported but failed to find the %KS% key." set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) if not defined skunotfound if not defined sppks ( @@ -14728,7 +14728,7 @@ if not exist %SysPath%\%%# ( echo [%SysPath%\%%#] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) @@ -14761,7 +14761,7 @@ if not defined allapps ( echo Failed to find activation IDs. Aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -14784,7 +14784,7 @@ if not defined osedition ( echo Failed to detect OS edition, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -14946,7 +14946,7 @@ echo [%targetedition% ^| %winbuild%] echo Failed to get product key from pkeyhelper.dll. echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -15001,7 +15001,7 @@ call :dk_color %Gray% "Reboot is required to fully change the edition." call :dk_color %Red% "[Unsuccessful] [Error Code: !keyerror!]" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) ) @@ -15082,7 +15082,7 @@ echo [%targetedition% ^| %winbuild%] echo Failed to get product key from pkeyhelper.dll. echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -15158,7 +15158,7 @@ echo: call :dk_color %Blue% "In case there are errors, you should restart the system before trying again." echo: set fixes=%fixes% %mas%change_edition_issues -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%change_edition_issues" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%change_edition_issues" exit /b ::======================================================================================================================================== @@ -15581,7 +15581,7 @@ if not exist %SysPath%\sppsvc.exe ( echo [%SysPath%\sppsvc.exe] file is missing. Aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -15619,7 +15619,7 @@ if %osedition%==0 ( echo Failed to detect OS Edition. Aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -15692,7 +15692,7 @@ echo which is not officially supported on your Windows build version %winbuild%. echo Aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -15706,7 +15706,7 @@ echo Unsupported Office %verchk% is installed on your Windows build version %win echo Aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -15812,7 +15812,7 @@ if not exist %SystemRoot%\Temp\%list%.txt ( echo Failed to generate available editions list. echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto :oe_goback ) @@ -15877,7 +15877,7 @@ if not exist %SystemRoot%\Temp\getAppIds.txt ( echo Failed to generate available apps list. echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto :oe_goback ) ) @@ -16059,7 +16059,7 @@ if %errorcode% EQU 0 ( call :dk_color %Gray% "Now run the Office activation option from the main menu." ) else ( set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) call :oe_tempcleanup @@ -16202,7 +16202,7 @@ echo %c2rcommand% if %errorlevel% NEQ 0 ( echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) goto :oe_goback @@ -16350,7 +16350,7 @@ echo: echo %updcommand% %updcommand% echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot goto :oe_goback ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 6a379f7..50512c5 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -109,7 +109,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%fix_service +echo Check this webpage for help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -124,7 +124,7 @@ echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul @@ -167,7 +167,7 @@ echo Failed to detect Windows build number. echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -250,7 +250,7 @@ echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) @@ -267,7 +267,7 @@ echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -373,7 +373,7 @@ if not exist %SysPath%\%%# ( echo [%SysPath%\%%#] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) @@ -419,7 +419,7 @@ echo Evaluation editions cannot be activated outside of their evaluation period. call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." echo: set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" goto dk_done ) ) @@ -506,7 +506,7 @@ echo %mas% ) else ( echo Required license files not found in %SysPath%\spp\tokens\skus\ set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) echo: goto dk_done @@ -685,7 +685,7 @@ findstr /i "%%#" "%SysPath%\drivers\etc\hosts" %nul1% && set "hosfail= [%%# Bloc ) call :dk_color %Red% "Checking Licensing Servers [Failed to Connect]!hosfail!" set fixes=%fixes% %mas%licensing-servers-issue -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%licensing-servers-issue" ) ::========================================================================================================================================== @@ -722,7 +722,7 @@ call :dk_color %Red% "Checking Windows Update Registry [Corruption Found] if !wcount! GTR 2 ( call :dk_color %Red% "Windows seems to be infected with Mal%w%ware." set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" ) else ( call :dk_color %Blue% "HWID activation needs working Windows updates, if you have used any tool to block updates, undo it." ) @@ -747,7 +747,7 @@ if not defined wucorrupt if not defined wublock if not defined wuerror if not de echo "%error_code%" | findstr /i "0x80072e 0x80072f 0x800704cf 0x87e10bcf 0x800705b4" %nul% && ( call :dk_color %Red% "Checking Internet Issues [Found] %error_code%" set fixes=%fixes% %mas%licensing-servers-issue -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%licensing-servers-issue" ) ) ) @@ -765,7 +765,7 @@ call :dk_color %Blue% "Use TSforge activation option from the main menu instead. ) else ( if not defined error call :dk_color %Blue% "%_fixmsg%" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) ) @@ -1071,7 +1071,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1147,7 +1147,7 @@ if defined pupfound call :dk_color %Gray% "Checking PUP Activators if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." if defined results call :dk_color %Red% "%results%" set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) @@ -1267,7 +1267,7 @@ set showfix=1 ) echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( set fixes=%fixes% %mas%fix_service -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service" set showfix=1 ) ) @@ -1324,7 +1324,7 @@ if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Win reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" ) ) @@ -1454,7 +1454,7 @@ call :dk_color %Red% "Checking SkipRearm [Default 0 Value N reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1469,7 +1469,7 @@ set error=1 set showfix=1 call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index ff6e59d..e5ed725 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -112,7 +112,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%fix_service +echo Check this webpage for help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -127,7 +127,7 @@ echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul @@ -173,7 +173,7 @@ echo Failed to detect Windows build number. echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -253,7 +253,7 @@ echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) @@ -270,7 +270,7 @@ echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -413,7 +413,7 @@ if defined _fmiss ( echo [%_fmiss%] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -470,7 +470,7 @@ echo Evaluation editions cannot be activated outside of their evaluation period. call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." echo: set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" ) goto dk_done ) @@ -486,7 +486,7 @@ if not exist "!_work!\clipup.exe" ( echo clipup.exe doesn't exist in Server Cor/Acor [No GUI] versions. echo The file is required for KMS38 activation. echo Check the below page for instructions on how to activate it. -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%kms38" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%kms38" goto dk_done ) ) @@ -498,7 +498,7 @@ if defined a_cor ( if !errorlevel!==3 ( %eline% echo Valid digital signature not found in clipup.exe file. -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) @@ -566,13 +566,13 @@ if exist "%SysPath%\spp\tokens\skus\%osedition%\*GVLK*.xrm-ms" set sppks=1 if defined skunotfound ( call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) if defined sppks ( call :dk_color %Red% "KMS38 activation is supported but failed to find the key." set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) if not defined skunotfound if not defined sppks ( @@ -622,7 +622,7 @@ if %_wmic% EQU 0 for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELE if not defined app ( call :dk_color %Red% "Checking Installed GVLK Activation ID [Not Found] Aborting..." set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto :dk_done ) @@ -790,7 +790,7 @@ goto :k_final call :dk_color %Red% "Activation Failed" if not defined error call :dk_color %Blue% "%_fixmsg%" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ::======================================================================================================================================== @@ -1175,7 +1175,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1296,7 +1296,7 @@ if defined pupfound call :dk_color %Gray% "Checking PUP Activators if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." if defined results call :dk_color %Red% "%results%" set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) @@ -1416,7 +1416,7 @@ set showfix=1 ) echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( set fixes=%fixes% %mas%fix_service -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service" set showfix=1 ) ) @@ -1473,7 +1473,7 @@ if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Win reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" ) ) @@ -1603,7 +1603,7 @@ call :dk_color %Red% "Checking SkipRearm [Default 0 Value N reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1618,7 +1618,7 @@ set error=1 set showfix=1 call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index ce9ad93..2f41448 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -109,7 +109,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%fix_service +echo Check this webpage for help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -124,7 +124,7 @@ echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul @@ -167,7 +167,7 @@ echo Failed to detect Windows build number. echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -243,7 +243,7 @@ echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) @@ -260,7 +260,7 @@ echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -404,7 +404,7 @@ if not exist %SysPath%\sppsvc.exe ( echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -683,7 +683,7 @@ call :dk_color %Red% "Some errors were detected." if not defined ierror if not defined showfix if not defined serv_cor if not defined serv_cste call :dk_color %Blue% "%_fixmsg%" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) goto :dk_done @@ -1506,7 +1506,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1566,7 +1566,7 @@ if defined pupfound call :dk_color %Gray% "Checking PUP Activators if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." if defined results call :dk_color %Red% "%results%" set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) @@ -1686,7 +1686,7 @@ set showfix=1 ) echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( set fixes=%fixes% %mas%fix_service -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service" set showfix=1 ) ) @@ -1743,7 +1743,7 @@ if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Win reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" ) ) @@ -1873,7 +1873,7 @@ call :dk_color %Red% "Checking SkipRearm [Default 0 Value N reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -1888,7 +1888,7 @@ set error=1 set showfix=1 call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index f1576e0..61d6f1c 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -134,7 +134,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%fix_service +echo Check this webpage for help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -149,7 +149,7 @@ echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul @@ -198,7 +198,7 @@ echo Failed to detect Windows build number. echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -272,7 +272,7 @@ echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) @@ -289,7 +289,7 @@ echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -464,7 +464,7 @@ if not exist %SysPath%\sppsvc.exe ( echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -557,7 +557,7 @@ call :dk_color %Blue% "Go back to main menu and use [Change Edition] option." ) else ( call :dk_color %Blue% "Use TSforge activation option from the main menu to reset evaluation period." set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" ) goto :ks_office @@ -607,13 +607,13 @@ if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Componen if defined skunotfound ( call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) if defined sppks ( call :dk_color %Red% "%KS% activation is supported but failed to find the %KS% key." set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) if not defined skunotfound if not defined sppks ( @@ -2599,7 +2599,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -2720,7 +2720,7 @@ if defined pupfound call :dk_color %Gray% "Checking PUP Activators if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." if defined results call :dk_color %Red% "%results%" set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) @@ -2840,7 +2840,7 @@ set showfix=1 ) echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( set fixes=%fixes% %mas%fix_service -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service" set showfix=1 ) ) @@ -2897,7 +2897,7 @@ if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Win reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" ) ) @@ -3027,7 +3027,7 @@ call :dk_color %Red% "Checking SkipRearm [Default 0 Value N reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -3042,7 +3042,7 @@ set error=1 set showfix=1 call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 1cf85e9..d6bfc9a 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -138,7 +138,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%fix_service +echo Check this webpage for help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -153,7 +153,7 @@ echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul @@ -204,7 +204,7 @@ echo Failed to detect Windows build number. echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -278,7 +278,7 @@ echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) @@ -295,7 +295,7 @@ echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -457,7 +457,7 @@ if not exist %SysPath%\sppsvc.exe ( echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -470,7 +470,7 @@ echo Install .NET Framework 4.8 and Windows Management Framework 5.1 ) echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) @@ -484,7 +484,7 @@ echo Evaluation WLMS service is running, sppsvc service can not be stopped. Abor echo Install Non-Eval version for Windows build %winbuild%. echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) @@ -523,7 +523,7 @@ call :dk_errorcheck if defined error ( call :dk_color %Red% "Some errors were detected. Aborting the operation..." set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto :dk_done ) @@ -531,7 +531,7 @@ call :ts_getedition if not defined tsedition ( call :dk_color %Red% "Checking Windows Edition ID [Not found in installed licenses, aborting...]" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto :dk_done ) @@ -812,7 +812,7 @@ if %winbuild% EQU 9600 set esuavail=1 if defined esuavail ( call :dk_color %Red% "Checking Activation ID [ESU license is not found, make sure Windows is fully updated]" set fixes=%fixes% %mas%tsforge#windows-esu -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%tsforge#windows-esu" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%tsforge#windows-esu" ) else ( call :dk_color %Gray% "Checking Activation ID [ESU is not available for %winos%]" ) @@ -1176,7 +1176,7 @@ echo Checking Activation ID [%%A] [%%B] if not defined ohostexist ( call :dk_color %Gray% "Checking Activation ID [Not found for Office %KS% Host]" -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%tsforge#office-kms-host" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%tsforge#office-kms-host" ) echo: @@ -1242,7 +1242,7 @@ set resetstuff=1 if %errorlevel%==3 ( call :dk_color %Red% "Reset Failed." set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) else ( call :dk_color %Green% "Reset process has been successfully done." ) @@ -1406,7 +1406,7 @@ call :dk_color %Gray% "To activate, check your internet connection and ensure th call :dk_color %Blue% "This Windows version is known to not activate due to MS Windows/Server issues." ) set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) ) @@ -1419,7 +1419,7 @@ echo: if !errorlevel!==3 ( if %_actman%==0 call :dk_color %Blue% "%_fixmsg%" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) else ( echo "%tsids%" | find /i "7e94be23-b161-4956-a682-146ab291774c" %nul1% && ( call :dk_color %Gray% "Windows Update can receive 1-3 years of ESU. 4-6 years ESU is not officially supported, but you can manually install updates." @@ -1447,7 +1447,7 @@ call :dk_reeval %nul% if not defined tsids if defined error if not defined showfix ( set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) goto :dk_done @@ -1622,7 +1622,7 @@ call :dk_color %Red% "Checking Activation ID [Office %oVer%.0 ! set error=1 set showfix=1 set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) echo %%# | find /i "2024" %nul% && ( @@ -2199,7 +2199,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -2275,7 +2275,7 @@ if defined pupfound call :dk_color %Gray% "Checking PUP Activators if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection..." if defined results call :dk_color %Red% "%results%" set fixes=%fixes% %mas%remove_mal%w%ware -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) @@ -2395,7 +2395,7 @@ set showfix=1 ) echo %serv_e% | findstr /i "sppsvc-1060" %nul% && ( set fixes=%fixes% %mas%fix_service -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_service" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_service" set showfix=1 ) ) @@ -2452,7 +2452,7 @@ if not defined notwinact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Win reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%evaluation_editions" ) ) @@ -2582,7 +2582,7 @@ call :dk_color %Red% "Checking SkipRearm [Default 0 Value N reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers -call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" +call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) @@ -2597,7 +2597,7 @@ set error=1 set showfix=1 call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 95d4044..32a8727 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -69,7 +69,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%fix_service +echo Check this webpage for help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -84,7 +84,7 @@ echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul @@ -129,7 +129,7 @@ echo Failed to detect Windows build number. echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -203,7 +203,7 @@ echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) @@ -220,7 +220,7 @@ echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -319,7 +319,7 @@ if not exist %SysPath%\sppsvc.exe ( echo [%SysPath%\sppsvc.exe] file is missing. Aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -357,7 +357,7 @@ if %osedition%==0 ( echo Failed to detect OS Edition. Aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -430,7 +430,7 @@ echo which is not officially supported on your Windows build version %winbuild%. echo Aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -444,7 +444,7 @@ echo Unsupported Office %verchk% is installed on your Windows build version %win echo Aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -550,7 +550,7 @@ if not exist %SystemRoot%\Temp\%list%.txt ( echo Failed to generate available editions list. echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto :oe_goback ) @@ -615,7 +615,7 @@ if not exist %SystemRoot%\Temp\getAppIds.txt ( echo Failed to generate available apps list. echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto :oe_goback ) ) @@ -797,7 +797,7 @@ if %errorcode% EQU 0 ( call :dk_color %Gray% "Now run the Office activation option from the main menu." ) else ( set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) call :oe_tempcleanup @@ -940,7 +940,7 @@ echo %c2rcommand% if %errorlevel% NEQ 0 ( echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) goto :oe_goback @@ -1088,7 +1088,7 @@ echo: echo %updcommand% %updcommand% echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot goto :oe_goback ::======================================================================================================================================== @@ -1412,7 +1412,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Common lines used in PowerShell reflection code diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 10a1559..2c0dbb8 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -74,7 +74,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%fix_service +echo Check this webpage for help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -89,7 +89,7 @@ echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul @@ -134,7 +134,7 @@ echo Failed to detect Windows build number. echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -208,7 +208,7 @@ echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) @@ -225,7 +225,7 @@ echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -346,7 +346,7 @@ if not exist %SysPath%\%%# ( echo [%SysPath%\%%#] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) @@ -379,7 +379,7 @@ if not defined allapps ( echo Failed to find activation IDs. Aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -402,7 +402,7 @@ if not defined osedition ( echo Failed to detect OS edition, aborting... echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -564,7 +564,7 @@ echo [%targetedition% ^| %winbuild%] echo Failed to get product key from pkeyhelper.dll. echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -619,7 +619,7 @@ call :dk_color %Gray% "Reboot is required to fully change the edition." call :dk_color %Red% "[Unsuccessful] [Error Code: !keyerror!]" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) ) @@ -700,7 +700,7 @@ echo [%targetedition% ^| %winbuild%] echo Failed to get product key from pkeyhelper.dll. echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -776,7 +776,7 @@ echo: call :dk_color %Blue% "In case there are errors, you should restart the system before trying again." echo: set fixes=%fixes% %mas%change_edition_issues -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%change_edition_issues" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%change_edition_issues" exit /b :compresslog @@ -911,7 +911,7 @@ echo sc start sppsvc [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Common lines used in PowerShell reflection code diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 7c8c3d4..735941d 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -69,7 +69,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%fix_service +echo Check this webpage for help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -84,7 +84,7 @@ echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul @@ -128,7 +128,7 @@ echo Failed to detect Windows build number. echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -202,7 +202,7 @@ echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell" goto done2 ) @@ -219,7 +219,7 @@ echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto done2 ) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 8ce62b7..1c12499 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -69,7 +69,7 @@ echo: echo Null service is not running, script may crash... echo: echo: -echo Help - %mas%fix_service +echo Check this webpage for help - %mas%fix_service echo: echo: ping 127.0.0.1 -n 20 @@ -84,7 +84,7 @@ echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: -echo Help - %mas%troubleshoot +echo Check this webpage for help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul @@ -129,7 +129,7 @@ echo Failed to detect Windows build number. echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) @@ -203,7 +203,7 @@ echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell" goto dk_done ) @@ -220,7 +220,7 @@ echo PowerShell is not working properly. Aborting... cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { if ($i.displayName -notlike '*windows*') { $n += $i.displayName } }; if ($n) { Write-Host ('Installed 3rd party Antivirus might be blocking the script - ' + ($n -join ', ')) -ForegroundColor White -BackgroundColor Blue }""" echo: set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) From 1e3c0aaedfab33362007458996f38ba5de4c7192 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 12 Apr 2025 19:00:48 +0530 Subject: [PATCH 096/132] Fix MSI Office detection for Visio and few other products --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 449 +++++++----------- .../Activators/Ohook_Activation_AIO.cmd | 146 +++++- .../Activators/Online_KMS_Activation.cmd | 293 +++++++----- .../Activators/TSforge_Activation.cmd | 234 ++++----- 4 files changed, 613 insertions(+), 509 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 6581baf..39f3b77 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2856,7 +2856,7 @@ set "_common2=%CommonProgramFiles(x86)%" for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" -call :ohookdata getmsiprod %2 +call :msiofficedata %2 echo: echo Activating Office... [MSI ^| %_version% ^| %_oArch%] @@ -3343,17 +3343,6 @@ if %oVer%==16 (echo "%%D" | find /i "Subscription" %nul% && set _sublic=1) ) ) -if %1==getmsiprod if %oVer%==%%A ( -for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" -set prodId=!prodId:"/>=! -set prodId=!prodId:~-4! -reg query "%2\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( -reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( -if defined _oIds (set _oIds=!_oIds! %%E) else (set _oIds=%%E) -) -) -) - ) ) exit /b @@ -4921,7 +4910,7 @@ set "pkeypath=%_common%\Microsoft Shared\OFFICE%oVer%\Office Setup Controller\pk set "pkeypath=%_common2%\Microsoft Shared\OFFICE%oVer%\Office Setup Controller\pkeyconfig-office.xrm-ms" ) -call :ts_msiofficedata %2 +call :msiofficedata %2 echo: echo Processing Office... [MSI ^| %_version% ^| %_oArch%] @@ -9177,147 +9166,6 @@ Office-ActID -pkeypath "$env:pkeypath" -edition "$env:_License" -keytype "$env:k ::======================================================================================================================================== -:: 1st column = Office version number -:: 2nd column = Activation ID -:: 3rd column = Edition -:: Separator = "_" - -:ts_msiofficedata - -for %%# in ( -:: Office 2013 -15_ab4d047b-97cf-4126-a69f-34df08e2f254_AccessRetail -15_259de5be-492b-44b3-9d78-9645f848f7b0_AccessRuntimeRetail -15_4374022d-56b8-48c1-9bb7-d8f2fc726343_AccessVolume -15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_ExcelRetail -15_ac1ae7fd-b949-4e04-a330-849bc40638cf_ExcelVolume -15_cfaf5356-49e3-48a8-ab3c-e729ab791250_GrooveRetail -15_4825ac28-ce41-45a7-9e6e-1fed74057601_GrooveVolume -15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail -15_a2b90e7a-a797-4713-af90-f0becf52a1dd_HomeBusinessRetail -15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_HomeStudentARMRetail -15_ebef9f05-5273-404a-9253-c5e252f50555_HomeStudentPlusARMRetail -15_f2de350d-3028-410a-bfae-283e00b44d0e_HomeStudentRetail -15_44984381-406e-4a35-b1c3-e54f499556e2_InfoPathRetail -15_9e016989-4007-42a6-8051-64eb97110cf2_InfoPathVolume -15_9103f3ce-1084-447a-827e-d6097f68c895_LyncAcademicRetail -15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_LyncEntryRetail -15_fada6658-bfc6-4c4e-825a-59a89822cda8_LyncRetail -15_e1264e10-afaf-4439-a98b-256df8bb156f_LyncVolume -15_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail -15_f33485a0-310b-4b72-9a0e-b1d605510dbd_MondoVolume -15_3391e125-f6e4-4b1e-899c-a25e6092d40d_OneNoteFreeRetail -15_8b524bcc-67ea-4876-a509-45e46f6347e8_OneNoteRetail -15_b067e965-7521-455b-b9f7-c740204578a2_OneNoteVolume -15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_OutlookRetail -15_8d577c50-ae5e-47fd-a240-24986f73d503_OutlookVolume -15_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail -15_17e9df2d-ed91-4382-904b-4fed6a12caf0_PersonalRetail -15_31743b82-bfbc-44b6-aa12-85d42e644d5b_PowerPointRetail -15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_PowerPointVolume -15_064383fa-1538-491c-859b-0ecab169a0ab_ProPlusRetail -15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_ProPlusVolume -15_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail -15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_ProfessionalRetail -15_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail -15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_ProjectProVolume -15_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail -15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_ProjectStdVolume -15_c3a0814a-70a4-471f-af37-2313a6331111_PublisherRetail -15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_PublisherVolume -15_ba3e3833-6a7e-445a-89d0-7802a9a68588_SPDRetail -15_32255c0a-16b4-4ce2-b388-8a4267e219eb_StandardRetail -15_a24cca51-3d54-4c41-8a76-4031f5338cb2_StandardVolume -15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail -15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_VisioProVolume -15_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail -15_44a1f6ff-0876-4edb-9169-dbb43101ee89_VisioStdVolume -15_191509f2-6977-456f-ab30-cf0492b1e93a_WordRetail -15_9cedef15-be37-4ff0-a08a-13a045540641_WordVolume -:: Office 365 - 15.0 version -15_742178ed-6b28-42dd-b3d7-b7c0ea78741b_O365BusinessRetail -15_a96f8dae-da54-4fad-bdc6-108da592707a_O365HomePremRetail -15_e3dacc06-3bc2-4e13-8e59-8e05f3232325_O365ProPlusRetail -15_0bc1dae4-6158-4a1c-a893-807665b934b2_O365SmallBusPremRetail -:: Office 365 - 16.0 version -16_742178ed-6b28-42dd-b3d7-b7c0ea78741b_O365BusinessRetail -16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_O365EduCloudRetail -16_a96f8dae-da54-4fad-bdc6-108da592707a_O365HomePremRetail -16_e3dacc06-3bc2-4e13-8e59-8e05f3232325_O365ProPlusRetail -16_0bc1dae4-6158-4a1c-a893-807665b934b2_O365SmallBusPremRetail -:: Office 2016 -16_bfa358b0-98f1-4125-842e-585fa13032e6_AccessRetail -16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_AccessRuntimeRetail -16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_AccessVolume -16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_ExcelRetail -16_685062a7-6024-42e7-8c5f-6bb9e63e697f_ExcelVolume -16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail -16_86834d00-7896-4a38-8fae-32f20b86fa2b_HomeBusinessRetail -16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_HomeStudentARMRetail -16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_HomeStudentPlusARMRetail -16_c28acdb8-d8b3-4199-baa4-024d09e97c99_HomeStudentRetail -16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_HomeStudentVNextRetail -16_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail -16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_MondoVolume -16_436366de-5579-4f24-96db-3893e4400030_OneNoteFreeRetail -16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_OneNoteRetail -16_23b672da-a456-4860-a8f3-e062a501d7e8_OneNoteVolume -16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_OutlookRetail -16_50059979-ac6f-4458-9e79-710bcb41721a_OutlookVolume -16_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail -16_a9f645a1-0d6a-4978-926a-abcb363b72a6_PersonalRetail -16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_PowerPointRetail -16_9b4060c9-a7f5-4a66-b732-faf248b7240f_PowerPointVolume -16_de52bd50-9564-4adc-8fcb-a345c17f84f9_ProPlusRetail -16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_ProPlusVolume -16_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail -16_d64edc00-7453-4301-8428-197343fafb16_ProfessionalRetail -16_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail -16_82f502b5-b0b0-4349-bd2c-c560df85b248_ProjectProVolume -16_16728639-a9ab-4994-b6d8-f81051e69833_ProjectProXVolume -16_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail -16_82e6b314-2a62-4e51-9220-61358dd230e6_ProjectStdVolume -16_431058f0-c059-44c5-b9e7-ed2dd46b6789_ProjectStdXVolume -16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_PublisherRetail -16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_PublisherVolume -16_9103f3ce-1084-447a-827e-d6097f68c895_SkypeServiceBypassRetail -16_971cd368-f2e1-49c1-aedd-330909ce18b6_SkypeforBusinessEntryRetail -16_418d2b9f-b491-4d7f-84f1-49e27cc66597_SkypeforBusinessRetail -16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_SkypeforBusinessVolume -16_4a31c291-3a12-4c64-b8ab-cd79212be45e_StandardRetail -16_0ed94aac-2234-4309-ba29-74bdbb887083_StandardVolume -16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail -16_295b2c03-4b1c-4221-b292-1411f468bd02_VisioProVolume -16_0594dc12-8444-4912-936a-747ca742dbdb_VisioProXVolume -16_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail -16_44151c2d-c398-471f-946f-7660542e3369_VisioStdVolume -16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_VisioStdXVolume -16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_WordRetail -16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_WordVolume -) do ( -for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( - -if "%oVer%"=="%%A" ( -for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" -set prodId=!prodId:"/>=! -set prodId=!prodId:~-4! -if "%oVer%"=="14" ( -REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml -echo %%C | find /i "Visio" %nul% && set prodId=0057 -) -reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( -reg query "%1\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( -if defined _oIds (set _oIds=!_oIds! %%C) else (set _oIds=%%C) -) -) -) - -) -) -exit /b - -::======================================================================================================================================== - :ts_getedition set tsedition= @@ -11247,7 +11095,7 @@ for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if ex if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" call :ksdata getmsiprod %2 -call :ks_msiretaildata getmsiret %2 +call :msiofficedata %2 getmsiret echo: echo Processing Office... [MSI ^| %_version% ^| %_oArch%] @@ -12097,132 +11945,195 @@ exit /b :: 1st column = Office version number :: 2nd column = Activation ID -:: 3rd column = Edition -:: 4th column = Other Edition IDs if they are part of the same primary product (For reference only) +:: 3rd column = Product ID from branding.xml +:: 4th column = Edition +:: 5th column = Other Edition IDs if they are part of the same primary product (For reference only) :: Separator = "_" -:ks_msiretaildata +:: EditionID Notes: +:: For Office 2013 and later, all Edition IDs are clearly defined, and each ID corresponds to its specific licensing. + +:: In Office 2010, the situation is a bit more complicated. +:: Products typically fall into two separate categories: Volume License (VL) and Non-VL. This is because a single installation cannot include both Retail and VL licensing types. +:: Some Edition IDs share the same primary product ID. For example, installing ProPlusVL also installs ProPlusAcadVL licenses, as both use 0011 as the primary product ID. +:: Therefore, in the script, we grouped VL and Non-VL versions by primary product ID and selected the highest Edition ID when multiple Edition IDs existed for the same primary product ID. + +:: There are a few exceptions to this 2010 rule: Visio (Premium, Pro, Standard) and OEM-SingleImage. + +:: For Visio, the issue is that branding.xml lists incorrect primary product IDs. The correct primary product ID for all three Visio variants is 0057. Based on the criteria above, we chose Visio-Premium as the representative Edition ID among the three. +:: For OEM-SingleImage, it installs multiple Edition IDs and uses 003D as the primary product ID. Following our method, we selected the highest available Edition ID—ProfessionalR in this case. + +:msiofficedata for %%# in ( -:: Office 2010 -14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_AccessR -14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_AccessRuntimeR -14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_ExcelR -14_7004b7f0-6407-4f45-8eac-966e5f868bde_GrooveR -14_7b7d1f17-fdcb-4820-9789-9bec6e377821_HomeBusinessR_[HomeBusinessDemoR] -14_19316117-30a8-4773-8fd9-7f7231f4e060_HomeBusinessSubR -14_09e2d37e-474b-4121-8626-58ad9be5776f_HomeStudentR_[HomeStudentDemoR] -14_c3ae020c-5a71-4cc5-a27a-2a97c2d46860_HSExcelR -14_25fe4611-b44d-49cc-ae87-2143d299194e_HSOneNoteR -14_d652ad8d-da5c-4358-b928-7fb1b4de7a7c_HSPowerPointR -14_a963d7ae-7a88-41a7-94da-8bb5635a8af9_HSWordR -14_ef1da464-01c8-43a6-91af-e4e5713744f9_InfoPathR -14_14f5946a-debc-4716-babc-7e2c240fec08_MondoR -14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_OEM -14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_OneNoteR -14_fbf4ac36-31c8-4340-8666-79873129cf40_OutlookR -14_acb51361-c0db-4895-9497-1831c41f31a6_PersonalR_[PersonalDemoR,PersonalPrepaidR] -14_133c8359-4e93-4241-8118-30bb18737ea0_PowerPointR -14_8b559c37-0117-413e-921b-b853aeb6e210_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR] -14_725714d7-d58f-4d12-9fa8-35873c6f7215_ProjectProR_[ProjectProMSDNR] -14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_ProjectProSubR -14_688f6589-2bd9-424e-a152-b13f36aa6de1_ProjectStdR -14_71af7e84-93e6-4363-9b69-699e04e74071_ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] -14_e98ef0c0-71c4-42ce-8305-287d8721e26c_ProPlusSubR -14_98677603-a668-4fa4-9980-3f1f05f78f69_PublisherR -14_dbe3aee0-5183-4ff7-8142-66050173cb01_SmallBusBasicsR_[SmallBusBasicsMSDNR] -14_b78df69e-0966-40b1-ae85-30a5134dedd0_SPDR -14_d3422cfb-8d8b-4ead-99f9-eab0ccd990d7_StandardR -14_2745e581-565a-4670-ae90-6bf7c57ffe43_StarterR -14_66cad568-c2dc-459d-93ec-2f3cb967ee34_VisioSIR_Prem[Pro,Std] -14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_WordR +14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_0015_AccessR +14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_001C_AccessRuntimeR +14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_0015_AccessVL +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR +14_71dc86ff-f056-40d0-8ffb-9592705c9b76_0016_ExcelVL +14_7004b7f0-6407-4f45-8eac-966e5f868bde_00BA_GrooveR +14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_00BA_GrooveVL +14_7b7d1f17-fdcb-4820-9789-9bec6e377821_0013_HomeBusinessR_[HomeBusinessDemoR] +14_19316117-30a8-4773-8fd9-7f7231f4e060_011E_HomeBusinessSubR +14_09e2d37e-474b-4121-8626-58ad9be5776f_002F_HomeStudentR_[HomeStudentDemoR] +14_c3ae020c-5a71-4cc5-a27a-2a97c2d46860_0029_HSExcelR +14_25fe4611-b44d-49cc-ae87-2143d299194e_00A3_HSOneNoteR +14_d652ad8d-da5c-4358-b928-7fb1b4de7a7c_0037_HSPowerPointR +14_a963d7ae-7a88-41a7-94da-8bb5635a8af9_002B_HSWordR +14_ef1da464-01c8-43a6-91af-e4e5713744f9_0044_InfoPathR +14_85e22450-b741-430c-a172-a37962c938af_0044_InfoPathVL +14_14f5946a-debc-4716-babc-7e2c240fec08_000F_MondoR +14_533b656a-4425-480b-8e30-1a2358898350_000F_MondoVL +14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_003D_ProfessionalR_[OEM-SingleImage]Exception +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR +14_6860b31f-6a67-48b8-84b9-e312b3485c4b_00A1_OneNoteVL +14_fbf4ac36-31c8-4340-8666-79873129cf40_001A_OutlookR +14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_001A_OutlookVL +14_acb51361-c0db-4895-9497-1831c41f31a6_0033_PersonalR_[PersonalDemoR,PersonalPrepaidR] +14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR +14_38252940-718c-4aa6-81a4-135398e53851_0018_PowerPointVL +14_8b559c37-0117-413e-921b-b853aeb6e210_0014_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR] +14_725714d7-d58f-4d12-9fa8-35873c6f7215_003B_ProjectProR_[ProjectProMSDNR] +14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_011F_ProjectProSubR +14_1cf57a59-c532-4e56-9a7d-ffa2fe94b474_003B_ProjectProVL +14_688f6589-2bd9-424e-a152-b13f36aa6de1_003A_ProjectStdR +14_11b39439-6b93-4642-9570-f2eb81be2238_003A_ProjectStdVL +14_71af7e84-93e6-4363-9b69-699e04e74071_0011_ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] +14_e98ef0c0-71c4-42ce-8305-287d8721e26c_011D_ProPlusSubR +14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_0011_ProPlusVL_[ProPlusAcadVL] +14_98677603-a668-4fa4-9980-3f1f05f78f69_0019_PublisherR +14_3d014759-b128-4466-9018-e80f6320d9d0_0019_PublisherVL +14_dbe3aee0-5183-4ff7-8142-66050173cb01_008B_SmallBusBasicsR_[SmallBusBasicsMSDNR] +14_8090771e-d41a-4482-929e-de87f1f47e46_008B_SmallBusBasicsVL +14_b78df69e-0966-40b1-ae85-30a5134dedd0_0017_SPDR +14_d3422cfb-8d8b-4ead-99f9-eab0ccd990d7_0012_StandardR +14_1f76e346-e0be-49bc-9954-70ec53a4fcfe_0012_StandardVL_[StandardAcadVL] +14_2745e581-565a-4670-ae90-6bf7c57ffe43_0066_StarterR +14_66cad568-c2dc-459d-93ec-2f3cb967ee34_0057_VisioSIR_Prem[Pro,Std]Exception +14_36756cb8-8e69-4d11-9522-68899507cd6a_0057_VisioSIVL_Prem[Pro,Std]Exception +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR +14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_001B_WordVL :: Office 2013 -15_ab4d047b-97cf-4126-a69f-34df08e2f254_AccessRetail -15_259de5be-492b-44b3-9d78-9645f848f7b0_AccessRuntimeRetail -15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_ExcelRetail -15_cfaf5356-49e3-48a8-ab3c-e729ab791250_GrooveRetail -15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail -15_a2b90e7a-a797-4713-af90-f0becf52a1dd_HomeBusinessRetail -15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_HomeStudentARMRetail -15_ebef9f05-5273-404a-9253-c5e252f50555_HomeStudentPlusARMRetail -15_f2de350d-3028-410a-bfae-283e00b44d0e_HomeStudentRetail -15_44984381-406e-4a35-b1c3-e54f499556e2_InfoPathRetail -15_9103f3ce-1084-447a-827e-d6097f68c895_LyncAcademicRetail -15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_LyncEntryRetail -15_fada6658-bfc6-4c4e-825a-59a89822cda8_LyncRetail -15_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail -15_3391e125-f6e4-4b1e-899c-a25e6092d40d_OneNoteFreeRetail -15_8b524bcc-67ea-4876-a509-45e46f6347e8_OneNoteRetail -15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_OutlookRetail -15_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail -15_17e9df2d-ed91-4382-904b-4fed6a12caf0_PersonalRetail -15_31743b82-bfbc-44b6-aa12-85d42e644d5b_PowerPointRetail -15_064383fa-1538-491c-859b-0ecab169a0ab_ProPlusRetail -15_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail -15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_ProfessionalRetail -15_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail -15_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail -15_c3a0814a-70a4-471f-af37-2313a6331111_PublisherRetail -15_ba3e3833-6a7e-445a-89d0-7802a9a68588_SPDRetail -15_32255c0a-16b4-4ce2-b388-8a4267e219eb_StandardRetail -15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail -15_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail -15_191509f2-6977-456f-ab30-cf0492b1e93a_WordRetail +15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail +15_259de5be-492b-44b3-9d78-9645f848f7b0_001C_AccessRuntimeRetail +15_4374022d-56b8-48c1-9bb7-d8f2fc726343_0015_AccessVolume +15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_0016_ExcelRetail +15_ac1ae7fd-b949-4e04-a330-849bc40638cf_0016_ExcelVolume +15_cfaf5356-49e3-48a8-ab3c-e729ab791250_00BA_GrooveRetail +15_4825ac28-ce41-45a7-9e6e-1fed74057601_00BA_GrooveVolume +15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail +15_cd256150-a898-441f-aac0-9f8f33390e45_0013_HomeBusinessRetail +15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_00CE_HomeStudentARMRetail +15_ebef9f05-5273-404a-9253-c5e252f50555_00DA_HomeStudentPlusARMRetail +15_98685d21-78bd-4c62-bc4f-653344a63035_002F_HomeStudentRetail +15_44984381-406e-4a35-b1c3-e54f499556e2_0044_InfoPathRetail +15_9e016989-4007-42a6-8051-64eb97110cf2_0044_InfoPathVolume +15_9103f3ce-1084-447a-827e-d6097f68c895_00EA_LyncAcademicRetail +15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_012D_LyncEntryRetail +15_fada6658-bfc6-4c4e-825a-59a89822cda8_012C_LyncRetail +15_e1264e10-afaf-4439-a98b-256df8bb156f_012C_LyncVolume +15_3169c8df-f659-4f95-9cc6-3115e6596e83_000F_MondoRetail +15_f33485a0-310b-4b72-9a0e-b1d605510dbd_000F_MondoVolume +15_3391e125-f6e4-4b1e-899c-a25e6092d40d_00A1_OneNoteFreeRetail +15_8b524bcc-67ea-4876-a509-45e46f6347e8_00A1_OneNoteRetail +15_b067e965-7521-455b-b9f7-c740204578a2_00A1_OneNoteVolume +15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_001A_OutlookRetail +15_8d577c50-ae5e-47fd-a240-24986f73d503_001A_OutlookVolume +15_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail +15_17e9df2d-ed91-4382-904b-4fed6a12caf0_0033_PersonalRetail +15_31743b82-bfbc-44b6-aa12-85d42e644d5b_0018_PowerPointRetail +15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_0018_PowerPointVolume +15_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail +15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_0014_ProfessionalRetail +15_f2435de4-5fc0-4e5b-ac97-34f515ec5ee7_003B_ProjectProRetail +15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_003B_ProjectProVolume +15_5517e6a2-739b-4822-946f-7f0f1c5934b1_003A_ProjectStdRetail +15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_003A_ProjectStdVolume +15_064383fa-1538-491c-859b-0ecab169a0ab_0011_ProPlusRetail +15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_0011_ProPlusVolume +15_c3a0814a-70a4-471f-af37-2313a6331111_0019_PublisherRetail +15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_0019_PublisherVolume +15_ba3e3833-6a7e-445a-89d0-7802a9a68588_0017_SPDRetail +15_32255c0a-16b4-4ce2-b388-8a4267e219eb_0012_StandardRetail +15_a24cca51-3d54-4c41-8a76-4031f5338cb2_0012_StandardVolume +15_15d12ad4-622d-4257-976c-5eb3282fb93d_0051_VisioProRetail +15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_0051_VisioProVolume +15_dae597ce-5823-4c77-9580-7268b93a4b23_0053_VisioStdRetail +15_44a1f6ff-0876-4edb-9169-dbb43101ee89_0053_VisioStdVolume +15_191509f2-6977-456f-ab30-cf0492b1e93a_001B_WordRetail +15_9cedef15-be37-4ff0-a08a-13a045540641_001B_WordVolume :: Office 365 - 15.0 version -15_6337137e-7c07-4197-8986-bece6a76fc33_O365BusinessRetail -15_537ea5b5-7d50-4876-bd38-a53a77caca32_O365HomePremRetail -15_149dbce7-a48e-44db-8364-a53386cd4580_O365ProPlusRetail -15_bacd4614-5bef-4a5e-bafc-de4c788037a2_O365SmallBusPremRetail +15_befee371-a2f5-4648-85db-a2c55fdf324c_00E9_O365BusinessRetail +15_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail +15_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail +15_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail :: Office 365 - 16.0 version -16_6337137e-7c07-4197-8986-bece6a76fc33_O365BusinessRetail -16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_O365EduCloudRetail -16_537ea5b5-7d50-4876-bd38-a53a77caca32_O365HomePremRetail -16_149dbce7-a48e-44db-8364-a53386cd4580_O365ProPlusRetail -16_bacd4614-5bef-4a5e-bafc-de4c788037a2_O365SmallBusPremRetail +16_6337137e-7c07-4197-8986-bece6a76fc33_00E9_O365BusinessRetail +16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_00D6_O365EduCloudRetail +16_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail +16_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail +16_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail :: Office 2016 -16_bfa358b0-98f1-4125-842e-585fa13032e6_AccessRetail -16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_AccessRuntimeRetail -16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_ExcelRetail -16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail -16_86834d00-7896-4a38-8fae-32f20b86fa2b_HomeBusinessRetail -16_c28acdb8-d8b3-4199-baa4-024d09e97c99_HomeStudentRetail -16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_HomeStudentARMRetail -16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_HomeStudentPlusARMRetail -16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_HomeStudentVNextRetail -16_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail -16_436366de-5579-4f24-96db-3893e4400030_OneNoteFreeRetail -16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_OneNoteRetail -16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_OutlookRetail -16_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail -16_a9f645a1-0d6a-4978-926a-abcb363b72a6_PersonalRetail -16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_PowerPointRetail -16_de52bd50-9564-4adc-8fcb-a345c17f84f9_ProPlusRetail -16_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail -16_d64edc00-7453-4301-8428-197343fafb16_ProfessionalRetail -16_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail -16_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail -16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_PublisherRetail -16_9103f3ce-1084-447a-827e-d6097f68c895_SkypeServiceBypassRetail -16_971cd368-f2e1-49c1-aedd-330909ce18b6_SkypeforBusinessEntryRetail -16_418d2b9f-b491-4d7f-84f1-49e27cc66597_SkypeforBusinessRetail -16_4a31c291-3a12-4c64-b8ab-cd79212be45e_StandardRetail -16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail -16_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail -16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_WordRetail +16_bfa358b0-98f1-4125-842e-585fa13032e6_0015_AccessRetail +16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_001C_AccessRuntimeRetail +16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_0015_AccessVolume +16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_0016_ExcelRetail +16_685062a7-6024-42e7-8c5f-6bb9e63e697f_0016_ExcelVolume +16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail +16_86834d00-7896-4a38-8fae-32f20b86fa2b_0013_HomeBusinessRetail +16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_00CE_HomeStudentARMRetail +16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_00DA_HomeStudentPlusARMRetail +16_c28acdb8-d8b3-4199-baa4-024d09e97c99_002F_HomeStudentRetail +16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_002F_HomeStudentVNextRetail +16_b21367df-9545-4f02-9f24-240691da0e58_000F_MondoRetail +16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_000F_MondoVolume +16_436366de-5579-4f24-96db-3893e4400030_00A3_OneNoteFreeRetail +16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_00A1_OneNoteRetail +16_23b672da-a456-4860-a8f3-e062a501d7e8_00A1_OneNoteVolume +16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_001A_OutlookRetail +16_50059979-ac6f-4458-9e79-710bcb41721a_001A_OutlookVolume +16_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail +16_a9f645a1-0d6a-4978-926a-abcb363b72a6_0033_PersonalRetail +16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_0018_PowerPointRetail +16_9b4060c9-a7f5-4a66-b732-faf248b7240f_0018_PowerPointVolume +16_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail +16_d64edc00-7453-4301-8428-197343fafb16_0014_ProfessionalRetail +16_0f42f316-00b1-48c5-ada4-2f52b5720ad0_003B_ProjectProRetail +16_82f502b5-b0b0-4349-bd2c-c560df85b248_003B_ProjectProVolume +16_16728639-a9ab-4994-b6d8-f81051e69833_003B_ProjectProXVolume +16_e9f0b3fc-962f-4944-ad06-05c10b6bcd5e_003A_ProjectStdRetail +16_82e6b314-2a62-4e51-9220-61358dd230e6_003A_ProjectStdVolume +16_431058f0-c059-44c5-b9e7-ed2dd46b6789_003A_ProjectStdXVolume +16_de52bd50-9564-4adc-8fcb-a345c17f84f9_0011_ProPlusRetail +16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_0011_ProPlusVolume +16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_0019_PublisherRetail +16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_0019_PublisherVolume +16_971cd368-f2e1-49c1-aedd-330909ce18b6_012D_SkypeforBusinessEntryRetail +16_418d2b9f-b491-4d7f-84f1-49e27cc66597_012C_SkypeforBusinessRetail +16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_012C_SkypeforBusinessVolume +16_9103f3ce-1084-447a-827e-d6097f68c895_012C_SkypeServiceBypassRetail +16_4a31c291-3a12-4c64-b8ab-cd79212be45e_0012_StandardRetail +16_0ed94aac-2234-4309-ba29-74bdbb887083_0012_StandardVolume +16_2dfe2075-2d04-4e43-816a-eb60bbb77574_0051_VisioProRetail +16_295b2c03-4b1c-4221-b292-1411f468bd02_0051_VisioProVolume +16_0594dc12-8444-4912-936a-747ca742dbdb_0051_VisioProXVolume +16_c76dbcbc-d71b-4f45-b5b3-b7494cb4e23e_0053_VisioStdRetail +16_44151c2d-c398-471f-946f-7660542e3369_0053_VisioStdVolume +16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_0053_VisioStdXVolume +16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_001B_WordRetail +16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_001B_WordVolume ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( -if %1==getmsiret if "%oVer%"=="%%A" ( -for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" -set prodId=!prodId:"/>=! -set prodId=!prodId:~-4! -if "%oVer%"=="14" ( -REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml -echo %%C | find /i "Visio" %nul% && set prodId=0057 +set getIds=1 +if "%oVer%"=="%%A" ( +if /i "%2"=="getmsiret" (echo %%D | findstr /i "Volume VL" %nul% && set getIds=) + +if defined getIds ( +reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( +reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) ) -reg query "%2\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( -reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( -if defined _oIds (set _oIds=!_oIds! %%C) else (set _oIds=%%C) ) ) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 2f41448..8a3ccb0 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1071,7 +1071,7 @@ set "_common2=%CommonProgramFiles(x86)%" for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" -call :ohookdata getmsiprod %2 +call :msiofficedata %2 echo: echo Activating Office... [MSI ^| %_version% ^| %_oArch%] @@ -2338,13 +2338,143 @@ if %oVer%==16 (echo "%%D" | find /i "Subscription" %nul% && set _sublic=1) ) ) -if %1==getmsiprod if %oVer%==%%A ( -for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" -set prodId=!prodId:"/>=! -set prodId=!prodId:~-4! -reg query "%2\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( -reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( -if defined _oIds (set _oIds=!_oIds! %%E) else (set _oIds=%%E) +) +) +exit /b + +::======================================================================================================================================== + +:: 1st column = Office version number +:: 2nd column = Activation ID +:: 3rd column = Product ID from branding.xml +:: 4th column = Edition +:: 5th column = Other Edition IDs if they are part of the same primary product (For reference only) +:: Separator = "_" + +:msiofficedata + +for %%# in ( +:: Office 2013 +15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail +15_259de5be-492b-44b3-9d78-9645f848f7b0_001C_AccessRuntimeRetail +15_4374022d-56b8-48c1-9bb7-d8f2fc726343_0015_AccessVolume +15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_0016_ExcelRetail +15_ac1ae7fd-b949-4e04-a330-849bc40638cf_0016_ExcelVolume +15_cfaf5356-49e3-48a8-ab3c-e729ab791250_00BA_GrooveRetail +15_4825ac28-ce41-45a7-9e6e-1fed74057601_00BA_GrooveVolume +15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail +15_cd256150-a898-441f-aac0-9f8f33390e45_0013_HomeBusinessRetail +15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_00CE_HomeStudentARMRetail +15_ebef9f05-5273-404a-9253-c5e252f50555_00DA_HomeStudentPlusARMRetail +15_98685d21-78bd-4c62-bc4f-653344a63035_002F_HomeStudentRetail +15_44984381-406e-4a35-b1c3-e54f499556e2_0044_InfoPathRetail +15_9e016989-4007-42a6-8051-64eb97110cf2_0044_InfoPathVolume +15_9103f3ce-1084-447a-827e-d6097f68c895_00EA_LyncAcademicRetail +15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_012D_LyncEntryRetail +15_fada6658-bfc6-4c4e-825a-59a89822cda8_012C_LyncRetail +15_e1264e10-afaf-4439-a98b-256df8bb156f_012C_LyncVolume +15_3169c8df-f659-4f95-9cc6-3115e6596e83_000F_MondoRetail +15_f33485a0-310b-4b72-9a0e-b1d605510dbd_000F_MondoVolume +15_3391e125-f6e4-4b1e-899c-a25e6092d40d_00A1_OneNoteFreeRetail +15_8b524bcc-67ea-4876-a509-45e46f6347e8_00A1_OneNoteRetail +15_b067e965-7521-455b-b9f7-c740204578a2_00A1_OneNoteVolume +15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_001A_OutlookRetail +15_8d577c50-ae5e-47fd-a240-24986f73d503_001A_OutlookVolume +15_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail +15_17e9df2d-ed91-4382-904b-4fed6a12caf0_0033_PersonalRetail +15_31743b82-bfbc-44b6-aa12-85d42e644d5b_0018_PowerPointRetail +15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_0018_PowerPointVolume +15_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail +15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_0014_ProfessionalRetail +15_f2435de4-5fc0-4e5b-ac97-34f515ec5ee7_003B_ProjectProRetail +15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_003B_ProjectProVolume +15_5517e6a2-739b-4822-946f-7f0f1c5934b1_003A_ProjectStdRetail +15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_003A_ProjectStdVolume +15_064383fa-1538-491c-859b-0ecab169a0ab_0011_ProPlusRetail +15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_0011_ProPlusVolume +15_c3a0814a-70a4-471f-af37-2313a6331111_0019_PublisherRetail +15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_0019_PublisherVolume +15_ba3e3833-6a7e-445a-89d0-7802a9a68588_0017_SPDRetail +15_32255c0a-16b4-4ce2-b388-8a4267e219eb_0012_StandardRetail +15_a24cca51-3d54-4c41-8a76-4031f5338cb2_0012_StandardVolume +15_15d12ad4-622d-4257-976c-5eb3282fb93d_0051_VisioProRetail +15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_0051_VisioProVolume +15_dae597ce-5823-4c77-9580-7268b93a4b23_0053_VisioStdRetail +15_44a1f6ff-0876-4edb-9169-dbb43101ee89_0053_VisioStdVolume +15_191509f2-6977-456f-ab30-cf0492b1e93a_001B_WordRetail +15_9cedef15-be37-4ff0-a08a-13a045540641_001B_WordVolume +:: Office 365 - 15.0 version +15_befee371-a2f5-4648-85db-a2c55fdf324c_00E9_O365BusinessRetail +15_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail +15_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail +15_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail +:: Office 365 - 16.0 version +16_6337137e-7c07-4197-8986-bece6a76fc33_00E9_O365BusinessRetail +16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_00D6_O365EduCloudRetail +16_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail +16_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail +16_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail +:: Office 2016 +16_bfa358b0-98f1-4125-842e-585fa13032e6_0015_AccessRetail +16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_001C_AccessRuntimeRetail +16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_0015_AccessVolume +16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_0016_ExcelRetail +16_685062a7-6024-42e7-8c5f-6bb9e63e697f_0016_ExcelVolume +16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail +16_86834d00-7896-4a38-8fae-32f20b86fa2b_0013_HomeBusinessRetail +16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_00CE_HomeStudentARMRetail +16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_00DA_HomeStudentPlusARMRetail +16_c28acdb8-d8b3-4199-baa4-024d09e97c99_002F_HomeStudentRetail +16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_002F_HomeStudentVNextRetail +16_b21367df-9545-4f02-9f24-240691da0e58_000F_MondoRetail +16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_000F_MondoVolume +16_436366de-5579-4f24-96db-3893e4400030_00A3_OneNoteFreeRetail +16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_00A1_OneNoteRetail +16_23b672da-a456-4860-a8f3-e062a501d7e8_00A1_OneNoteVolume +16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_001A_OutlookRetail +16_50059979-ac6f-4458-9e79-710bcb41721a_001A_OutlookVolume +16_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail +16_a9f645a1-0d6a-4978-926a-abcb363b72a6_0033_PersonalRetail +16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_0018_PowerPointRetail +16_9b4060c9-a7f5-4a66-b732-faf248b7240f_0018_PowerPointVolume +16_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail +16_d64edc00-7453-4301-8428-197343fafb16_0014_ProfessionalRetail +16_0f42f316-00b1-48c5-ada4-2f52b5720ad0_003B_ProjectProRetail +16_82f502b5-b0b0-4349-bd2c-c560df85b248_003B_ProjectProVolume +16_16728639-a9ab-4994-b6d8-f81051e69833_003B_ProjectProXVolume +16_e9f0b3fc-962f-4944-ad06-05c10b6bcd5e_003A_ProjectStdRetail +16_82e6b314-2a62-4e51-9220-61358dd230e6_003A_ProjectStdVolume +16_431058f0-c059-44c5-b9e7-ed2dd46b6789_003A_ProjectStdXVolume +16_de52bd50-9564-4adc-8fcb-a345c17f84f9_0011_ProPlusRetail +16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_0011_ProPlusVolume +16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_0019_PublisherRetail +16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_0019_PublisherVolume +16_971cd368-f2e1-49c1-aedd-330909ce18b6_012D_SkypeforBusinessEntryRetail +16_418d2b9f-b491-4d7f-84f1-49e27cc66597_012C_SkypeforBusinessRetail +16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_012C_SkypeforBusinessVolume +16_9103f3ce-1084-447a-827e-d6097f68c895_012C_SkypeServiceBypassRetail +16_4a31c291-3a12-4c64-b8ab-cd79212be45e_0012_StandardRetail +16_0ed94aac-2234-4309-ba29-74bdbb887083_0012_StandardVolume +16_2dfe2075-2d04-4e43-816a-eb60bbb77574_0051_VisioProRetail +16_295b2c03-4b1c-4221-b292-1411f468bd02_0051_VisioProVolume +16_0594dc12-8444-4912-936a-747ca742dbdb_0051_VisioProXVolume +16_c76dbcbc-d71b-4f45-b5b3-b7494cb4e23e_0053_VisioStdRetail +16_44151c2d-c398-471f-946f-7660542e3369_0053_VisioStdVolume +16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_0053_VisioStdXVolume +16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_001B_WordRetail +16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_001B_WordVolume +) do ( +for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( + +set getIds=1 +if "%oVer%"=="%%A" ( +if /i "%2"=="getmsiret" (echo %%D | findstr /i "Volume VL" %nul% && set getIds=) + +if defined getIds ( +reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( +reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) +) ) ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 61d6f1c..8dd961b 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1230,7 +1230,7 @@ for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if ex if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" call :ksdata getmsiprod %2 -call :ks_msiretaildata getmsiret %2 +call :msiofficedata %2 getmsiret echo: echo Processing Office... [MSI ^| %_version% ^| %_oArch%] @@ -3261,132 +3261,195 @@ exit /b :: 1st column = Office version number :: 2nd column = Activation ID -:: 3rd column = Edition -:: 4th column = Other Edition IDs if they are part of the same primary product (For reference only) +:: 3rd column = Product ID from branding.xml +:: 4th column = Edition +:: 5th column = Other Edition IDs if they are part of the same primary product (For reference only) :: Separator = "_" -:ks_msiretaildata +:: EditionID Notes: +:: For Office 2013 and later, all Edition IDs are clearly defined, and each ID corresponds to its specific licensing. + +:: In Office 2010, the situation is a bit more complicated. +:: Products typically fall into two separate categories: Volume License (VL) and Non-VL. This is because a single installation cannot include both Retail and VL licensing types. +:: Some Edition IDs share the same primary product ID. For example, installing ProPlusVL also installs ProPlusAcadVL licenses, as both use 0011 as the primary product ID. +:: Therefore, in the script, we grouped VL and Non-VL versions by primary product ID and selected the highest Edition ID when multiple Edition IDs existed for the same primary product ID. + +:: There are a few exceptions to this 2010 rule: Visio (Premium, Pro, Standard) and OEM-SingleImage. + +:: For Visio, the issue is that branding.xml lists incorrect primary product IDs. The correct primary product ID for all three Visio variants is 0057. Based on the criteria above, we chose Visio-Premium as the representative Edition ID among the three. +:: For OEM-SingleImage, it installs multiple Edition IDs and uses 003D as the primary product ID. Following our method, we selected the highest available Edition ID—ProfessionalR in this case. + +:msiofficedata for %%# in ( -:: Office 2010 -14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_AccessR -14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_AccessRuntimeR -14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_ExcelR -14_7004b7f0-6407-4f45-8eac-966e5f868bde_GrooveR -14_7b7d1f17-fdcb-4820-9789-9bec6e377821_HomeBusinessR_[HomeBusinessDemoR] -14_19316117-30a8-4773-8fd9-7f7231f4e060_HomeBusinessSubR -14_09e2d37e-474b-4121-8626-58ad9be5776f_HomeStudentR_[HomeStudentDemoR] -14_c3ae020c-5a71-4cc5-a27a-2a97c2d46860_HSExcelR -14_25fe4611-b44d-49cc-ae87-2143d299194e_HSOneNoteR -14_d652ad8d-da5c-4358-b928-7fb1b4de7a7c_HSPowerPointR -14_a963d7ae-7a88-41a7-94da-8bb5635a8af9_HSWordR -14_ef1da464-01c8-43a6-91af-e4e5713744f9_InfoPathR -14_14f5946a-debc-4716-babc-7e2c240fec08_MondoR -14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_OEM -14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_OneNoteR -14_fbf4ac36-31c8-4340-8666-79873129cf40_OutlookR -14_acb51361-c0db-4895-9497-1831c41f31a6_PersonalR_[PersonalDemoR,PersonalPrepaidR] -14_133c8359-4e93-4241-8118-30bb18737ea0_PowerPointR -14_8b559c37-0117-413e-921b-b853aeb6e210_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR] -14_725714d7-d58f-4d12-9fa8-35873c6f7215_ProjectProR_[ProjectProMSDNR] -14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_ProjectProSubR -14_688f6589-2bd9-424e-a152-b13f36aa6de1_ProjectStdR -14_71af7e84-93e6-4363-9b69-699e04e74071_ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] -14_e98ef0c0-71c4-42ce-8305-287d8721e26c_ProPlusSubR -14_98677603-a668-4fa4-9980-3f1f05f78f69_PublisherR -14_dbe3aee0-5183-4ff7-8142-66050173cb01_SmallBusBasicsR_[SmallBusBasicsMSDNR] -14_b78df69e-0966-40b1-ae85-30a5134dedd0_SPDR -14_d3422cfb-8d8b-4ead-99f9-eab0ccd990d7_StandardR -14_2745e581-565a-4670-ae90-6bf7c57ffe43_StarterR -14_66cad568-c2dc-459d-93ec-2f3cb967ee34_VisioSIR_Prem[Pro,Std] -14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_WordR +14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_0015_AccessR +14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_001C_AccessRuntimeR +14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_0015_AccessVL +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR +14_71dc86ff-f056-40d0-8ffb-9592705c9b76_0016_ExcelVL +14_7004b7f0-6407-4f45-8eac-966e5f868bde_00BA_GrooveR +14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_00BA_GrooveVL +14_7b7d1f17-fdcb-4820-9789-9bec6e377821_0013_HomeBusinessR_[HomeBusinessDemoR] +14_19316117-30a8-4773-8fd9-7f7231f4e060_011E_HomeBusinessSubR +14_09e2d37e-474b-4121-8626-58ad9be5776f_002F_HomeStudentR_[HomeStudentDemoR] +14_c3ae020c-5a71-4cc5-a27a-2a97c2d46860_0029_HSExcelR +14_25fe4611-b44d-49cc-ae87-2143d299194e_00A3_HSOneNoteR +14_d652ad8d-da5c-4358-b928-7fb1b4de7a7c_0037_HSPowerPointR +14_a963d7ae-7a88-41a7-94da-8bb5635a8af9_002B_HSWordR +14_ef1da464-01c8-43a6-91af-e4e5713744f9_0044_InfoPathR +14_85e22450-b741-430c-a172-a37962c938af_0044_InfoPathVL +14_14f5946a-debc-4716-babc-7e2c240fec08_000F_MondoR +14_533b656a-4425-480b-8e30-1a2358898350_000F_MondoVL +14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_003D_ProfessionalR_[OEM-SingleImage]Exception +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR +14_6860b31f-6a67-48b8-84b9-e312b3485c4b_00A1_OneNoteVL +14_fbf4ac36-31c8-4340-8666-79873129cf40_001A_OutlookR +14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_001A_OutlookVL +14_acb51361-c0db-4895-9497-1831c41f31a6_0033_PersonalR_[PersonalDemoR,PersonalPrepaidR] +14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR +14_38252940-718c-4aa6-81a4-135398e53851_0018_PowerPointVL +14_8b559c37-0117-413e-921b-b853aeb6e210_0014_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR] +14_725714d7-d58f-4d12-9fa8-35873c6f7215_003B_ProjectProR_[ProjectProMSDNR] +14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_011F_ProjectProSubR +14_1cf57a59-c532-4e56-9a7d-ffa2fe94b474_003B_ProjectProVL +14_688f6589-2bd9-424e-a152-b13f36aa6de1_003A_ProjectStdR +14_11b39439-6b93-4642-9570-f2eb81be2238_003A_ProjectStdVL +14_71af7e84-93e6-4363-9b69-699e04e74071_0011_ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] +14_e98ef0c0-71c4-42ce-8305-287d8721e26c_011D_ProPlusSubR +14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_0011_ProPlusVL_[ProPlusAcadVL] +14_98677603-a668-4fa4-9980-3f1f05f78f69_0019_PublisherR +14_3d014759-b128-4466-9018-e80f6320d9d0_0019_PublisherVL +14_dbe3aee0-5183-4ff7-8142-66050173cb01_008B_SmallBusBasicsR_[SmallBusBasicsMSDNR] +14_8090771e-d41a-4482-929e-de87f1f47e46_008B_SmallBusBasicsVL +14_b78df69e-0966-40b1-ae85-30a5134dedd0_0017_SPDR +14_d3422cfb-8d8b-4ead-99f9-eab0ccd990d7_0012_StandardR +14_1f76e346-e0be-49bc-9954-70ec53a4fcfe_0012_StandardVL_[StandardAcadVL] +14_2745e581-565a-4670-ae90-6bf7c57ffe43_0066_StarterR +14_66cad568-c2dc-459d-93ec-2f3cb967ee34_0057_VisioSIR_Prem[Pro,Std]Exception +14_36756cb8-8e69-4d11-9522-68899507cd6a_0057_VisioSIVL_Prem[Pro,Std]Exception +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR +14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_001B_WordVL :: Office 2013 -15_ab4d047b-97cf-4126-a69f-34df08e2f254_AccessRetail -15_259de5be-492b-44b3-9d78-9645f848f7b0_AccessRuntimeRetail -15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_ExcelRetail -15_cfaf5356-49e3-48a8-ab3c-e729ab791250_GrooveRetail -15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail -15_a2b90e7a-a797-4713-af90-f0becf52a1dd_HomeBusinessRetail -15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_HomeStudentARMRetail -15_ebef9f05-5273-404a-9253-c5e252f50555_HomeStudentPlusARMRetail -15_f2de350d-3028-410a-bfae-283e00b44d0e_HomeStudentRetail -15_44984381-406e-4a35-b1c3-e54f499556e2_InfoPathRetail -15_9103f3ce-1084-447a-827e-d6097f68c895_LyncAcademicRetail -15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_LyncEntryRetail -15_fada6658-bfc6-4c4e-825a-59a89822cda8_LyncRetail -15_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail -15_3391e125-f6e4-4b1e-899c-a25e6092d40d_OneNoteFreeRetail -15_8b524bcc-67ea-4876-a509-45e46f6347e8_OneNoteRetail -15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_OutlookRetail -15_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail -15_17e9df2d-ed91-4382-904b-4fed6a12caf0_PersonalRetail -15_31743b82-bfbc-44b6-aa12-85d42e644d5b_PowerPointRetail -15_064383fa-1538-491c-859b-0ecab169a0ab_ProPlusRetail -15_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail -15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_ProfessionalRetail -15_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail -15_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail -15_c3a0814a-70a4-471f-af37-2313a6331111_PublisherRetail -15_ba3e3833-6a7e-445a-89d0-7802a9a68588_SPDRetail -15_32255c0a-16b4-4ce2-b388-8a4267e219eb_StandardRetail -15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail -15_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail -15_191509f2-6977-456f-ab30-cf0492b1e93a_WordRetail +15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail +15_259de5be-492b-44b3-9d78-9645f848f7b0_001C_AccessRuntimeRetail +15_4374022d-56b8-48c1-9bb7-d8f2fc726343_0015_AccessVolume +15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_0016_ExcelRetail +15_ac1ae7fd-b949-4e04-a330-849bc40638cf_0016_ExcelVolume +15_cfaf5356-49e3-48a8-ab3c-e729ab791250_00BA_GrooveRetail +15_4825ac28-ce41-45a7-9e6e-1fed74057601_00BA_GrooveVolume +15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail +15_cd256150-a898-441f-aac0-9f8f33390e45_0013_HomeBusinessRetail +15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_00CE_HomeStudentARMRetail +15_ebef9f05-5273-404a-9253-c5e252f50555_00DA_HomeStudentPlusARMRetail +15_98685d21-78bd-4c62-bc4f-653344a63035_002F_HomeStudentRetail +15_44984381-406e-4a35-b1c3-e54f499556e2_0044_InfoPathRetail +15_9e016989-4007-42a6-8051-64eb97110cf2_0044_InfoPathVolume +15_9103f3ce-1084-447a-827e-d6097f68c895_00EA_LyncAcademicRetail +15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_012D_LyncEntryRetail +15_fada6658-bfc6-4c4e-825a-59a89822cda8_012C_LyncRetail +15_e1264e10-afaf-4439-a98b-256df8bb156f_012C_LyncVolume +15_3169c8df-f659-4f95-9cc6-3115e6596e83_000F_MondoRetail +15_f33485a0-310b-4b72-9a0e-b1d605510dbd_000F_MondoVolume +15_3391e125-f6e4-4b1e-899c-a25e6092d40d_00A1_OneNoteFreeRetail +15_8b524bcc-67ea-4876-a509-45e46f6347e8_00A1_OneNoteRetail +15_b067e965-7521-455b-b9f7-c740204578a2_00A1_OneNoteVolume +15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_001A_OutlookRetail +15_8d577c50-ae5e-47fd-a240-24986f73d503_001A_OutlookVolume +15_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail +15_17e9df2d-ed91-4382-904b-4fed6a12caf0_0033_PersonalRetail +15_31743b82-bfbc-44b6-aa12-85d42e644d5b_0018_PowerPointRetail +15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_0018_PowerPointVolume +15_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail +15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_0014_ProfessionalRetail +15_f2435de4-5fc0-4e5b-ac97-34f515ec5ee7_003B_ProjectProRetail +15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_003B_ProjectProVolume +15_5517e6a2-739b-4822-946f-7f0f1c5934b1_003A_ProjectStdRetail +15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_003A_ProjectStdVolume +15_064383fa-1538-491c-859b-0ecab169a0ab_0011_ProPlusRetail +15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_0011_ProPlusVolume +15_c3a0814a-70a4-471f-af37-2313a6331111_0019_PublisherRetail +15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_0019_PublisherVolume +15_ba3e3833-6a7e-445a-89d0-7802a9a68588_0017_SPDRetail +15_32255c0a-16b4-4ce2-b388-8a4267e219eb_0012_StandardRetail +15_a24cca51-3d54-4c41-8a76-4031f5338cb2_0012_StandardVolume +15_15d12ad4-622d-4257-976c-5eb3282fb93d_0051_VisioProRetail +15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_0051_VisioProVolume +15_dae597ce-5823-4c77-9580-7268b93a4b23_0053_VisioStdRetail +15_44a1f6ff-0876-4edb-9169-dbb43101ee89_0053_VisioStdVolume +15_191509f2-6977-456f-ab30-cf0492b1e93a_001B_WordRetail +15_9cedef15-be37-4ff0-a08a-13a045540641_001B_WordVolume :: Office 365 - 15.0 version -15_6337137e-7c07-4197-8986-bece6a76fc33_O365BusinessRetail -15_537ea5b5-7d50-4876-bd38-a53a77caca32_O365HomePremRetail -15_149dbce7-a48e-44db-8364-a53386cd4580_O365ProPlusRetail -15_bacd4614-5bef-4a5e-bafc-de4c788037a2_O365SmallBusPremRetail +15_befee371-a2f5-4648-85db-a2c55fdf324c_00E9_O365BusinessRetail +15_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail +15_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail +15_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail :: Office 365 - 16.0 version -16_6337137e-7c07-4197-8986-bece6a76fc33_O365BusinessRetail -16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_O365EduCloudRetail -16_537ea5b5-7d50-4876-bd38-a53a77caca32_O365HomePremRetail -16_149dbce7-a48e-44db-8364-a53386cd4580_O365ProPlusRetail -16_bacd4614-5bef-4a5e-bafc-de4c788037a2_O365SmallBusPremRetail +16_6337137e-7c07-4197-8986-bece6a76fc33_00E9_O365BusinessRetail +16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_00D6_O365EduCloudRetail +16_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail +16_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail +16_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail :: Office 2016 -16_bfa358b0-98f1-4125-842e-585fa13032e6_AccessRetail -16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_AccessRuntimeRetail -16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_ExcelRetail -16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail -16_86834d00-7896-4a38-8fae-32f20b86fa2b_HomeBusinessRetail -16_c28acdb8-d8b3-4199-baa4-024d09e97c99_HomeStudentRetail -16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_HomeStudentARMRetail -16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_HomeStudentPlusARMRetail -16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_HomeStudentVNextRetail -16_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail -16_436366de-5579-4f24-96db-3893e4400030_OneNoteFreeRetail -16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_OneNoteRetail -16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_OutlookRetail -16_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail -16_a9f645a1-0d6a-4978-926a-abcb363b72a6_PersonalRetail -16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_PowerPointRetail -16_de52bd50-9564-4adc-8fcb-a345c17f84f9_ProPlusRetail -16_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail -16_d64edc00-7453-4301-8428-197343fafb16_ProfessionalRetail -16_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail -16_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail -16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_PublisherRetail -16_9103f3ce-1084-447a-827e-d6097f68c895_SkypeServiceBypassRetail -16_971cd368-f2e1-49c1-aedd-330909ce18b6_SkypeforBusinessEntryRetail -16_418d2b9f-b491-4d7f-84f1-49e27cc66597_SkypeforBusinessRetail -16_4a31c291-3a12-4c64-b8ab-cd79212be45e_StandardRetail -16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail -16_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail -16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_WordRetail +16_bfa358b0-98f1-4125-842e-585fa13032e6_0015_AccessRetail +16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_001C_AccessRuntimeRetail +16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_0015_AccessVolume +16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_0016_ExcelRetail +16_685062a7-6024-42e7-8c5f-6bb9e63e697f_0016_ExcelVolume +16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail +16_86834d00-7896-4a38-8fae-32f20b86fa2b_0013_HomeBusinessRetail +16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_00CE_HomeStudentARMRetail +16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_00DA_HomeStudentPlusARMRetail +16_c28acdb8-d8b3-4199-baa4-024d09e97c99_002F_HomeStudentRetail +16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_002F_HomeStudentVNextRetail +16_b21367df-9545-4f02-9f24-240691da0e58_000F_MondoRetail +16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_000F_MondoVolume +16_436366de-5579-4f24-96db-3893e4400030_00A3_OneNoteFreeRetail +16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_00A1_OneNoteRetail +16_23b672da-a456-4860-a8f3-e062a501d7e8_00A1_OneNoteVolume +16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_001A_OutlookRetail +16_50059979-ac6f-4458-9e79-710bcb41721a_001A_OutlookVolume +16_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail +16_a9f645a1-0d6a-4978-926a-abcb363b72a6_0033_PersonalRetail +16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_0018_PowerPointRetail +16_9b4060c9-a7f5-4a66-b732-faf248b7240f_0018_PowerPointVolume +16_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail +16_d64edc00-7453-4301-8428-197343fafb16_0014_ProfessionalRetail +16_0f42f316-00b1-48c5-ada4-2f52b5720ad0_003B_ProjectProRetail +16_82f502b5-b0b0-4349-bd2c-c560df85b248_003B_ProjectProVolume +16_16728639-a9ab-4994-b6d8-f81051e69833_003B_ProjectProXVolume +16_e9f0b3fc-962f-4944-ad06-05c10b6bcd5e_003A_ProjectStdRetail +16_82e6b314-2a62-4e51-9220-61358dd230e6_003A_ProjectStdVolume +16_431058f0-c059-44c5-b9e7-ed2dd46b6789_003A_ProjectStdXVolume +16_de52bd50-9564-4adc-8fcb-a345c17f84f9_0011_ProPlusRetail +16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_0011_ProPlusVolume +16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_0019_PublisherRetail +16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_0019_PublisherVolume +16_971cd368-f2e1-49c1-aedd-330909ce18b6_012D_SkypeforBusinessEntryRetail +16_418d2b9f-b491-4d7f-84f1-49e27cc66597_012C_SkypeforBusinessRetail +16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_012C_SkypeforBusinessVolume +16_9103f3ce-1084-447a-827e-d6097f68c895_012C_SkypeServiceBypassRetail +16_4a31c291-3a12-4c64-b8ab-cd79212be45e_0012_StandardRetail +16_0ed94aac-2234-4309-ba29-74bdbb887083_0012_StandardVolume +16_2dfe2075-2d04-4e43-816a-eb60bbb77574_0051_VisioProRetail +16_295b2c03-4b1c-4221-b292-1411f468bd02_0051_VisioProVolume +16_0594dc12-8444-4912-936a-747ca742dbdb_0051_VisioProXVolume +16_c76dbcbc-d71b-4f45-b5b3-b7494cb4e23e_0053_VisioStdRetail +16_44151c2d-c398-471f-946f-7660542e3369_0053_VisioStdVolume +16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_0053_VisioStdXVolume +16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_001B_WordRetail +16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_001B_WordVolume ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( -if %1==getmsiret if "%oVer%"=="%%A" ( -for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" -set prodId=!prodId:"/>=! -set prodId=!prodId:~-4! -if "%oVer%"=="14" ( -REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml -echo %%C | find /i "Visio" %nul% && set prodId=0057 +set getIds=1 +if "%oVer%"=="%%A" ( +if /i "%2"=="getmsiret" (echo %%D | findstr /i "Volume VL" %nul% && set getIds=) + +if defined getIds ( +reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( +reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) ) -reg query "%2\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( -reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( -if defined _oIds (set _oIds=!_oIds! %%C) else (set _oIds=%%C) ) ) ) diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index d6bfc9a..3c62eb3 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -1679,7 +1679,7 @@ set "pkeypath=%_common%\Microsoft Shared\OFFICE%oVer%\Office Setup Controller\pk set "pkeypath=%_common2%\Microsoft Shared\OFFICE%oVer%\Office Setup Controller\pkeyconfig-office.xrm-ms" ) -call :ts_msiofficedata %2 +call :msiofficedata %2 echo: echo Processing Office... [MSI ^| %_version% ^| %_oArch%] @@ -7041,135 +7041,135 @@ Office-ActID -pkeypath "$env:pkeypath" -edition "$env:_License" -keytype "$env:k :: 1st column = Office version number :: 2nd column = Activation ID -:: 3rd column = Edition +:: 3rd column = Product ID from branding.xml +:: 4th column = Edition +:: 5th column = Other Edition IDs if they are part of the same primary product (For reference only) :: Separator = "_" -:ts_msiofficedata +:msiofficedata for %%# in ( :: Office 2013 -15_ab4d047b-97cf-4126-a69f-34df08e2f254_AccessRetail -15_259de5be-492b-44b3-9d78-9645f848f7b0_AccessRuntimeRetail -15_4374022d-56b8-48c1-9bb7-d8f2fc726343_AccessVolume -15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_ExcelRetail -15_ac1ae7fd-b949-4e04-a330-849bc40638cf_ExcelVolume -15_cfaf5356-49e3-48a8-ab3c-e729ab791250_GrooveRetail -15_4825ac28-ce41-45a7-9e6e-1fed74057601_GrooveVolume -15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail -15_a2b90e7a-a797-4713-af90-f0becf52a1dd_HomeBusinessRetail -15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_HomeStudentARMRetail -15_ebef9f05-5273-404a-9253-c5e252f50555_HomeStudentPlusARMRetail -15_f2de350d-3028-410a-bfae-283e00b44d0e_HomeStudentRetail -15_44984381-406e-4a35-b1c3-e54f499556e2_InfoPathRetail -15_9e016989-4007-42a6-8051-64eb97110cf2_InfoPathVolume -15_9103f3ce-1084-447a-827e-d6097f68c895_LyncAcademicRetail -15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_LyncEntryRetail -15_fada6658-bfc6-4c4e-825a-59a89822cda8_LyncRetail -15_e1264e10-afaf-4439-a98b-256df8bb156f_LyncVolume -15_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail -15_f33485a0-310b-4b72-9a0e-b1d605510dbd_MondoVolume -15_3391e125-f6e4-4b1e-899c-a25e6092d40d_OneNoteFreeRetail -15_8b524bcc-67ea-4876-a509-45e46f6347e8_OneNoteRetail -15_b067e965-7521-455b-b9f7-c740204578a2_OneNoteVolume -15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_OutlookRetail -15_8d577c50-ae5e-47fd-a240-24986f73d503_OutlookVolume -15_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail -15_17e9df2d-ed91-4382-904b-4fed6a12caf0_PersonalRetail -15_31743b82-bfbc-44b6-aa12-85d42e644d5b_PowerPointRetail -15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_PowerPointVolume -15_064383fa-1538-491c-859b-0ecab169a0ab_ProPlusRetail -15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_ProPlusVolume -15_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail -15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_ProfessionalRetail -15_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail -15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_ProjectProVolume -15_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail -15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_ProjectStdVolume -15_c3a0814a-70a4-471f-af37-2313a6331111_PublisherRetail -15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_PublisherVolume -15_ba3e3833-6a7e-445a-89d0-7802a9a68588_SPDRetail -15_32255c0a-16b4-4ce2-b388-8a4267e219eb_StandardRetail -15_a24cca51-3d54-4c41-8a76-4031f5338cb2_StandardVolume -15_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail -15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_VisioProVolume -15_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail -15_44a1f6ff-0876-4edb-9169-dbb43101ee89_VisioStdVolume -15_191509f2-6977-456f-ab30-cf0492b1e93a_WordRetail -15_9cedef15-be37-4ff0-a08a-13a045540641_WordVolume +15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail +15_259de5be-492b-44b3-9d78-9645f848f7b0_001C_AccessRuntimeRetail +15_4374022d-56b8-48c1-9bb7-d8f2fc726343_0015_AccessVolume +15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_0016_ExcelRetail +15_ac1ae7fd-b949-4e04-a330-849bc40638cf_0016_ExcelVolume +15_cfaf5356-49e3-48a8-ab3c-e729ab791250_00BA_GrooveRetail +15_4825ac28-ce41-45a7-9e6e-1fed74057601_00BA_GrooveVolume +15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail +15_cd256150-a898-441f-aac0-9f8f33390e45_0013_HomeBusinessRetail +15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_00CE_HomeStudentARMRetail +15_ebef9f05-5273-404a-9253-c5e252f50555_00DA_HomeStudentPlusARMRetail +15_98685d21-78bd-4c62-bc4f-653344a63035_002F_HomeStudentRetail +15_44984381-406e-4a35-b1c3-e54f499556e2_0044_InfoPathRetail +15_9e016989-4007-42a6-8051-64eb97110cf2_0044_InfoPathVolume +15_9103f3ce-1084-447a-827e-d6097f68c895_00EA_LyncAcademicRetail +15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_012D_LyncEntryRetail +15_fada6658-bfc6-4c4e-825a-59a89822cda8_012C_LyncRetail +15_e1264e10-afaf-4439-a98b-256df8bb156f_012C_LyncVolume +15_3169c8df-f659-4f95-9cc6-3115e6596e83_000F_MondoRetail +15_f33485a0-310b-4b72-9a0e-b1d605510dbd_000F_MondoVolume +15_3391e125-f6e4-4b1e-899c-a25e6092d40d_00A1_OneNoteFreeRetail +15_8b524bcc-67ea-4876-a509-45e46f6347e8_00A1_OneNoteRetail +15_b067e965-7521-455b-b9f7-c740204578a2_00A1_OneNoteVolume +15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_001A_OutlookRetail +15_8d577c50-ae5e-47fd-a240-24986f73d503_001A_OutlookVolume +15_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail +15_17e9df2d-ed91-4382-904b-4fed6a12caf0_0033_PersonalRetail +15_31743b82-bfbc-44b6-aa12-85d42e644d5b_0018_PowerPointRetail +15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_0018_PowerPointVolume +15_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail +15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_0014_ProfessionalRetail +15_f2435de4-5fc0-4e5b-ac97-34f515ec5ee7_003B_ProjectProRetail +15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_003B_ProjectProVolume +15_5517e6a2-739b-4822-946f-7f0f1c5934b1_003A_ProjectStdRetail +15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_003A_ProjectStdVolume +15_064383fa-1538-491c-859b-0ecab169a0ab_0011_ProPlusRetail +15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_0011_ProPlusVolume +15_c3a0814a-70a4-471f-af37-2313a6331111_0019_PublisherRetail +15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_0019_PublisherVolume +15_ba3e3833-6a7e-445a-89d0-7802a9a68588_0017_SPDRetail +15_32255c0a-16b4-4ce2-b388-8a4267e219eb_0012_StandardRetail +15_a24cca51-3d54-4c41-8a76-4031f5338cb2_0012_StandardVolume +15_15d12ad4-622d-4257-976c-5eb3282fb93d_0051_VisioProRetail +15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_0051_VisioProVolume +15_dae597ce-5823-4c77-9580-7268b93a4b23_0053_VisioStdRetail +15_44a1f6ff-0876-4edb-9169-dbb43101ee89_0053_VisioStdVolume +15_191509f2-6977-456f-ab30-cf0492b1e93a_001B_WordRetail +15_9cedef15-be37-4ff0-a08a-13a045540641_001B_WordVolume :: Office 365 - 15.0 version -15_742178ed-6b28-42dd-b3d7-b7c0ea78741b_O365BusinessRetail -15_a96f8dae-da54-4fad-bdc6-108da592707a_O365HomePremRetail -15_e3dacc06-3bc2-4e13-8e59-8e05f3232325_O365ProPlusRetail -15_0bc1dae4-6158-4a1c-a893-807665b934b2_O365SmallBusPremRetail +15_befee371-a2f5-4648-85db-a2c55fdf324c_00E9_O365BusinessRetail +15_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail +15_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail +15_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail :: Office 365 - 16.0 version -16_742178ed-6b28-42dd-b3d7-b7c0ea78741b_O365BusinessRetail -16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_O365EduCloudRetail -16_a96f8dae-da54-4fad-bdc6-108da592707a_O365HomePremRetail -16_e3dacc06-3bc2-4e13-8e59-8e05f3232325_O365ProPlusRetail -16_0bc1dae4-6158-4a1c-a893-807665b934b2_O365SmallBusPremRetail +16_6337137e-7c07-4197-8986-bece6a76fc33_00E9_O365BusinessRetail +16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_00D6_O365EduCloudRetail +16_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail +16_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail +16_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail :: Office 2016 -16_bfa358b0-98f1-4125-842e-585fa13032e6_AccessRetail -16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_AccessRuntimeRetail -16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_AccessVolume -16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_ExcelRetail -16_685062a7-6024-42e7-8c5f-6bb9e63e697f_ExcelVolume -16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_HomeBusinessPipcRetail -16_86834d00-7896-4a38-8fae-32f20b86fa2b_HomeBusinessRetail -16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_HomeStudentARMRetail -16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_HomeStudentPlusARMRetail -16_c28acdb8-d8b3-4199-baa4-024d09e97c99_HomeStudentRetail -16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_HomeStudentVNextRetail -16_69ec9152-153b-471a-bf35-77ec88683eae_MondoRetail -16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_MondoVolume -16_436366de-5579-4f24-96db-3893e4400030_OneNoteFreeRetail -16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_OneNoteRetail -16_23b672da-a456-4860-a8f3-e062a501d7e8_OneNoteVolume -16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_OutlookRetail -16_50059979-ac6f-4458-9e79-710bcb41721a_OutlookVolume -16_5aab8561-1686-43f7-9ff5-2c861da58d17_PersonalPipcRetail -16_a9f645a1-0d6a-4978-926a-abcb363b72a6_PersonalRetail -16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_PowerPointRetail -16_9b4060c9-a7f5-4a66-b732-faf248b7240f_PowerPointVolume -16_de52bd50-9564-4adc-8fcb-a345c17f84f9_ProPlusRetail -16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_ProPlusVolume -16_4e26cac1-e15a-4467-9069-cb47b67fe191_ProfessionalPipcRetail -16_d64edc00-7453-4301-8428-197343fafb16_ProfessionalRetail -16_2f72340c-b555-418d-8b46-355944fe66b8_ProjectProRetail -16_82f502b5-b0b0-4349-bd2c-c560df85b248_ProjectProVolume -16_16728639-a9ab-4994-b6d8-f81051e69833_ProjectProXVolume -16_58d95b09-6af6-453d-a976-8ef0ae0316b1_ProjectStdRetail -16_82e6b314-2a62-4e51-9220-61358dd230e6_ProjectStdVolume -16_431058f0-c059-44c5-b9e7-ed2dd46b6789_ProjectStdXVolume -16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_PublisherRetail -16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_PublisherVolume -16_9103f3ce-1084-447a-827e-d6097f68c895_SkypeServiceBypassRetail -16_971cd368-f2e1-49c1-aedd-330909ce18b6_SkypeforBusinessEntryRetail -16_418d2b9f-b491-4d7f-84f1-49e27cc66597_SkypeforBusinessRetail -16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_SkypeforBusinessVolume -16_4a31c291-3a12-4c64-b8ab-cd79212be45e_StandardRetail -16_0ed94aac-2234-4309-ba29-74bdbb887083_StandardVolume -16_a56a3b37-3a35-4bbb-a036-eee5f1898eee_VisioProRetail -16_295b2c03-4b1c-4221-b292-1411f468bd02_VisioProVolume -16_0594dc12-8444-4912-936a-747ca742dbdb_VisioProXVolume -16_980f9e3e-f5a8-41c8-8596-61404addf677_VisioStdRetail -16_44151c2d-c398-471f-946f-7660542e3369_VisioStdVolume -16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_VisioStdXVolume -16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_WordRetail -16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_WordVolume +16_bfa358b0-98f1-4125-842e-585fa13032e6_0015_AccessRetail +16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_001C_AccessRuntimeRetail +16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_0015_AccessVolume +16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_0016_ExcelRetail +16_685062a7-6024-42e7-8c5f-6bb9e63e697f_0016_ExcelVolume +16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail +16_86834d00-7896-4a38-8fae-32f20b86fa2b_0013_HomeBusinessRetail +16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_00CE_HomeStudentARMRetail +16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_00DA_HomeStudentPlusARMRetail +16_c28acdb8-d8b3-4199-baa4-024d09e97c99_002F_HomeStudentRetail +16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_002F_HomeStudentVNextRetail +16_b21367df-9545-4f02-9f24-240691da0e58_000F_MondoRetail +16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_000F_MondoVolume +16_436366de-5579-4f24-96db-3893e4400030_00A3_OneNoteFreeRetail +16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_00A1_OneNoteRetail +16_23b672da-a456-4860-a8f3-e062a501d7e8_00A1_OneNoteVolume +16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_001A_OutlookRetail +16_50059979-ac6f-4458-9e79-710bcb41721a_001A_OutlookVolume +16_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail +16_a9f645a1-0d6a-4978-926a-abcb363b72a6_0033_PersonalRetail +16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_0018_PowerPointRetail +16_9b4060c9-a7f5-4a66-b732-faf248b7240f_0018_PowerPointVolume +16_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail +16_d64edc00-7453-4301-8428-197343fafb16_0014_ProfessionalRetail +16_0f42f316-00b1-48c5-ada4-2f52b5720ad0_003B_ProjectProRetail +16_82f502b5-b0b0-4349-bd2c-c560df85b248_003B_ProjectProVolume +16_16728639-a9ab-4994-b6d8-f81051e69833_003B_ProjectProXVolume +16_e9f0b3fc-962f-4944-ad06-05c10b6bcd5e_003A_ProjectStdRetail +16_82e6b314-2a62-4e51-9220-61358dd230e6_003A_ProjectStdVolume +16_431058f0-c059-44c5-b9e7-ed2dd46b6789_003A_ProjectStdXVolume +16_de52bd50-9564-4adc-8fcb-a345c17f84f9_0011_ProPlusRetail +16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_0011_ProPlusVolume +16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_0019_PublisherRetail +16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_0019_PublisherVolume +16_971cd368-f2e1-49c1-aedd-330909ce18b6_012D_SkypeforBusinessEntryRetail +16_418d2b9f-b491-4d7f-84f1-49e27cc66597_012C_SkypeforBusinessRetail +16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_012C_SkypeforBusinessVolume +16_9103f3ce-1084-447a-827e-d6097f68c895_012C_SkypeServiceBypassRetail +16_4a31c291-3a12-4c64-b8ab-cd79212be45e_0012_StandardRetail +16_0ed94aac-2234-4309-ba29-74bdbb887083_0012_StandardVolume +16_2dfe2075-2d04-4e43-816a-eb60bbb77574_0051_VisioProRetail +16_295b2c03-4b1c-4221-b292-1411f468bd02_0051_VisioProVolume +16_0594dc12-8444-4912-936a-747ca742dbdb_0051_VisioProXVolume +16_c76dbcbc-d71b-4f45-b5b3-b7494cb4e23e_0053_VisioStdRetail +16_44151c2d-c398-471f-946f-7660542e3369_0053_VisioStdVolume +16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_0053_VisioStdXVolume +16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_001B_WordRetail +16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_001B_WordVolume ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( +set getIds=1 if "%oVer%"=="%%A" ( -for /f "tokens=*" %%x in ('findstr /i /c:"%%B" "%_oBranding%"') do set "prodId=%%x" -set prodId=!prodId:"/>=! -set prodId=!prodId:~-4! -if "%oVer%"=="14" ( -REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml -echo %%C | find /i "Visio" %nul% && set prodId=0057 +if /i "%2"=="getmsiret" (echo %%D | findstr /i "Volume VL" %nul% && set getIds=) + +if defined getIds ( +reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( +reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( +if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) ) -reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( -reg query "%1\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( -if defined _oIds (set _oIds=!_oIds! %%C) else (set _oIds=%%C) ) ) ) From 60dd549a4982c39f972271b638f3af2ab98c776e Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 12 Apr 2025 20:07:24 +0530 Subject: [PATCH 097/132] Don't add SharedComputerLicensing registry on Server for old Office versions --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- .../Activators/Ohook_Activation_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 39f3b77..b630bcd 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2812,7 +2812,7 @@ call :dk_color %_Yellow% "%mas%" :: Add SharedComputerLicensing registry key if Retail Office C2R is installed on Windows Server :: https://learn.microsoft.com/en-us/office/troubleshoot/office-suite-issues/click-to-run-office-on-terminal-server -if defined winserver if defined _config ( +if defined winserver if defined _config if exist "%_oLPath%\Word2019VL_KMS_Client_AE*.xrm-ms" ( echo %_oIds% | find /i "Retail" %nul1% && ( set scaIsNeeded=1 reg add %_config% /v SharedComputerLicensing /t REG_SZ /d "1" /f %nul1% @@ -4869,7 +4869,7 @@ echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic :: Add SharedComputerLicensing registry key if Retail Office C2R is installed on Windows Server :: https://learn.microsoft.com/en-us/office/troubleshoot/office-suite-issues/click-to-run-office-on-terminal-server -if defined winserver if defined _config ( +if defined winserver if defined _config if exist "%_oLPath%\Word2019VL_KMS_Client_AE*.xrm-ms" ( echo %_oIds% | find /i "Retail" %nul1% && ( set scaIsNeeded=1 reg add %_config% /v SharedComputerLicensing /t REG_SZ /d "1" /f %nul1% diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 8a3ccb0..b037146 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1027,7 +1027,7 @@ call :dk_color %_Yellow% "%mas%" :: Add SharedComputerLicensing registry key if Retail Office C2R is installed on Windows Server :: https://learn.microsoft.com/en-us/office/troubleshoot/office-suite-issues/click-to-run-office-on-terminal-server -if defined winserver if defined _config ( +if defined winserver if defined _config if exist "%_oLPath%\Word2019VL_KMS_Client_AE*.xrm-ms" ( echo %_oIds% | find /i "Retail" %nul1% && ( set scaIsNeeded=1 reg add %_config% /v SharedComputerLicensing /t REG_SZ /d "1" /f %nul1% diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 3c62eb3..37b6232 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -1638,7 +1638,7 @@ echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic :: Add SharedComputerLicensing registry key if Retail Office C2R is installed on Windows Server :: https://learn.microsoft.com/en-us/office/troubleshoot/office-suite-issues/click-to-run-office-on-terminal-server -if defined winserver if defined _config ( +if defined winserver if defined _config if exist "%_oLPath%\Word2019VL_KMS_Client_AE*.xrm-ms" ( echo %_oIds% | find /i "Retail" %nul1% && ( set scaIsNeeded=1 reg add %_config% /v SharedComputerLicensing /t REG_SZ /d "1" /f %nul1% From 8673fbbfdabf9fdf34823c4e276ed3a4ef4095ba Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 13 Apr 2025 03:45:34 +0530 Subject: [PATCH 098/132] Add -nop -c with Powershell --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 6 +++--- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 4 ++-- .../Activators/Ohook_Activation_AIO.cmd | 4 ++-- .../Activators/Online_KMS_Activation.cmd | 6 +++--- .../Activators/TSforge_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 4 ++-- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 4 ++-- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 4 ++-- MAS/Separate-Files-Version/Troubleshoot.cmd | 4 ++-- 10 files changed, 22 insertions(+), 22 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index b630bcd..0effebc 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -200,7 +200,7 @@ for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Cor if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo %tstresult% +echo: %tstresult% cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode @@ -1068,7 +1068,7 @@ goto :dk_done :dk_setvar -set psc=powershell.exe +set psc=powershell.exe -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G @@ -11261,7 +11261,7 @@ set _tserror= set winbuild=1 set "nul=>nul 2>&1" for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G -set psc=powershell.exe +set psc=powershell.exe -nop -c set run_once= set t_name=Renewal Task diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 50512c5..8e8f039 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -239,7 +239,7 @@ for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Cor if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo %tstresult% +echo: %tstresult% cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode @@ -799,7 +799,7 @@ goto :dk_done :dk_setvar -set psc=powershell.exe +set psc=powershell.exe -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index e5ed725..f352fc1 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -242,7 +242,7 @@ for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Cor if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo %tstresult% +echo: %tstresult% cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode @@ -905,7 +905,7 @@ $key.SetAccessControl($acl) :dk_setvar -set psc=powershell.exe +set psc=powershell.exe -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index b037146..602e142 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -232,7 +232,7 @@ for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Cor if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo %tstresult% +echo: %tstresult% cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode @@ -1327,7 +1327,7 @@ exit /b :dk_setvar -set psc=powershell.exe +set psc=powershell.exe -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 8dd961b..fe3370a 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -261,7 +261,7 @@ for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Cor if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo %tstresult% +echo: %tstresult% cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode @@ -1646,7 +1646,7 @@ set _tserror= set winbuild=1 set "nul=>nul 2>&1" for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G -set psc=powershell.exe +set psc=powershell.exe -nop -c set run_once= set t_name=Renewal Task @@ -2332,7 +2332,7 @@ exit /b :dk_setvar -set psc=powershell.exe +set psc=powershell.exe -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 37b6232..24077db 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -267,7 +267,7 @@ for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Cor if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo %tstresult% +echo: %tstresult% cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode @@ -1955,7 +1955,7 @@ exit /b :dk_setvar -set psc=powershell.exe +set psc=powershell.exe -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 32a8727..05f0639 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -192,7 +192,7 @@ for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Cor if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo %tstresult% +echo: %tstresult% cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode @@ -1343,7 +1343,7 @@ if ($appIdsList.Count -gt 0) { :dk_setvar -set psc=powershell.exe +set psc=powershell.exe -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 2c0dbb8..7524407 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -197,7 +197,7 @@ for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Cor if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo %tstresult% +echo: %tstresult% cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode @@ -815,7 +815,7 @@ exit /b :dk_setvar -set psc=powershell.exe +set psc=powershell.exe -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 735941d..d5db12e 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -191,7 +191,7 @@ for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Cor if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo %tstresult% +echo: %tstresult% cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode @@ -723,7 +723,7 @@ exit /b :dk_setvar -set psc=powershell.exe +set psc=powershell.exe -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 1c12499..a3d3b8b 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -192,7 +192,7 @@ for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Cor if /i not "%tstresult%"=="FullLanguage" ( %eline% -echo %tstresult% +echo: %tstresult% cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode @@ -1460,7 +1460,7 @@ exit /b :dk_setvar -set psc=powershell.exe +set psc=powershell.exe -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G From 3b739d7e2bac5ac01c0dac87855ca1fb72c6b54b Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 13 Apr 2025 04:25:10 +0530 Subject: [PATCH 099/132] Add malware check in Powershell test --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 12 +++++++++++- .../Activators/HWID_Activation.cmd | 12 +++++++++++- .../Activators/KMS38_Activation.cmd | 12 +++++++++++- .../Activators/Ohook_Activation_AIO.cmd | 12 +++++++++++- .../Activators/Online_KMS_Activation.cmd | 12 +++++++++++- .../Activators/TSforge_Activation.cmd | 12 +++++++++++- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 12 +++++++++++- .../Change_Windows_Edition.cmd | 12 +++++++++++- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 12 +++++++++++- MAS/Separate-Files-Version/Troubleshoot.cmd | 12 +++++++++++- 10 files changed, 110 insertions(+), 10 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 0effebc..d7a91d5 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -206,7 +206,6 @@ cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( -%eline% echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: @@ -222,6 +221,17 @@ echo Windows Powershell is needed for MAS but it seems to be replaced with Power goto dk_done ) +REM check for Mal-ware that may cause issues with Powershell + +for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" ( +echo "%%f" +echo Mal%blank%ware found, PowerShell is not working properly. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" +goto dk_done +) + REM check antivirus and other errors echo PowerShell is not working properly. Aborting... diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 8e8f039..61515a9 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -245,7 +245,6 @@ cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( -%eline% echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: @@ -261,6 +260,17 @@ echo Windows Powershell is needed for MAS but it seems to be replaced with Power goto dk_done ) +REM check for Mal-ware that may cause issues with Powershell + +for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" ( +echo "%%f" +echo Mal%blank%ware found, PowerShell is not working properly. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" +goto dk_done +) + REM check antivirus and other errors echo PowerShell is not working properly. Aborting... diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index f352fc1..31e5bb0 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -248,7 +248,6 @@ cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( -%eline% echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: @@ -264,6 +263,17 @@ echo Windows Powershell is needed for MAS but it seems to be replaced with Power goto dk_done ) +REM check for Mal-ware that may cause issues with Powershell + +for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" ( +echo "%%f" +echo Mal%blank%ware found, PowerShell is not working properly. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" +goto dk_done +) + REM check antivirus and other errors echo PowerShell is not working properly. Aborting... diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 602e142..186365e 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -238,7 +238,6 @@ cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( -%eline% echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: @@ -254,6 +253,17 @@ echo Windows Powershell is needed for MAS but it seems to be replaced with Power goto dk_done ) +REM check for Mal-ware that may cause issues with Powershell + +for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" ( +echo "%%f" +echo Mal%blank%ware found, PowerShell is not working properly. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" +goto dk_done +) + REM check antivirus and other errors echo PowerShell is not working properly. Aborting... diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index fe3370a..e1e40b3 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -267,7 +267,6 @@ cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( -%eline% echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: @@ -283,6 +282,17 @@ echo Windows Powershell is needed for MAS but it seems to be replaced with Power goto dk_done ) +REM check for Mal-ware that may cause issues with Powershell + +for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" ( +echo "%%f" +echo Mal%blank%ware found, PowerShell is not working properly. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" +goto dk_done +) + REM check antivirus and other errors echo PowerShell is not working properly. Aborting... diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 24077db..d3559ee 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -273,7 +273,6 @@ cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( -%eline% echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: @@ -289,6 +288,17 @@ echo Windows Powershell is needed for MAS but it seems to be replaced with Power goto dk_done ) +REM check for Mal-ware that may cause issues with Powershell + +for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" ( +echo "%%f" +echo Mal%blank%ware found, PowerShell is not working properly. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" +goto dk_done +) + REM check antivirus and other errors echo PowerShell is not working properly. Aborting... diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 05f0639..0e71bb4 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -198,7 +198,6 @@ cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( -%eline% echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: @@ -214,6 +213,17 @@ echo Windows Powershell is needed for MAS but it seems to be replaced with Power goto dk_done ) +REM check for Mal-ware that may cause issues with Powershell + +for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" ( +echo "%%f" +echo Mal%blank%ware found, PowerShell is not working properly. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" +goto dk_done +) + REM check antivirus and other errors echo PowerShell is not working properly. Aborting... diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 7524407..c9a5155 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -203,7 +203,6 @@ cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( -%eline% echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: @@ -219,6 +218,17 @@ echo Windows Powershell is needed for MAS but it seems to be replaced with Power goto dk_done ) +REM check for Mal-ware that may cause issues with Powershell + +for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" ( +echo "%%f" +echo Mal%blank%ware found, PowerShell is not working properly. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" +goto dk_done +) + REM check antivirus and other errors echo PowerShell is not working properly. Aborting... diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index d5db12e..e9db519 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -197,7 +197,6 @@ cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( -%eline% echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: @@ -213,6 +212,17 @@ echo Windows Powershell is needed for MAS but it seems to be replaced with Power goto done2 ) +REM check for Mal-ware that may cause issues with Powershell + +for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" ( +echo "%%f" +echo Mal%blank%ware found, PowerShell is not working properly. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" +goto done2 +) + REM check antivirus and other errors echo PowerShell is not working properly. Aborting... diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index a3d3b8b..818091f 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -198,7 +198,6 @@ cmd /c "%psc% $ExecutionContext.SessionState.LanguageMode" REM check LanguageMode cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && ( -%eline% echo FullLanguage mode not found in PowerShell. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: @@ -214,6 +213,17 @@ echo Windows Powershell is needed for MAS but it seems to be replaced with Power goto dk_done ) +REM check for Mal-ware that may cause issues with Powershell + +for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" ( +echo "%%f" +echo Mal%blank%ware found, PowerShell is not working properly. +echo: +set fixes=%fixes% %mas%remove_mal%w%ware +call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware" +goto dk_done +) + REM check antivirus and other errors echo PowerShell is not working properly. Aborting... From c316b42e5cd166aa5c10a54d03ca0c5e5d63f4cd Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 14 Apr 2025 04:10:58 +0530 Subject: [PATCH 100/132] Simplify the code related to "disable quickedit and avoid Terminal app" --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 37 +++++++++---------- .../Activators/HWID_Activation.cmd | 37 +++++++++---------- .../Activators/KMS38_Activation.cmd | 37 +++++++++---------- .../Activators/Ohook_Activation_AIO.cmd | 37 +++++++++---------- .../Activators/Online_KMS_Activation.cmd | 37 +++++++++---------- .../Activators/TSforge_Activation.cmd | 37 +++++++++---------- .../Change_Office_Edition.cmd | 37 +++++++++---------- .../Change_Windows_Edition.cmd | 37 +++++++++---------- .../Extract_OEM_Folder.cmd | 37 +++++++++---------- MAS/Separate-Files-Version/Troubleshoot.cmd | 37 +++++++++---------- 10 files changed, 180 insertions(+), 190 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index d7a91d5..2a42c2b 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -254,34 +254,33 @@ set terminal= :: Check if script is running in Terminal app -set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); -set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); -set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); -set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); -set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); - if defined terminal ( -%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +set lines=0 +for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A +if !lines! GEQ 100 set terminal= ) -if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) +:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app +:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes +:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error + +set resetQE=1 +reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0 +reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1% + if defined terminal ( -set "launchcmd=start conhost.exe %psc%" -) else ( -set "launchcmd=%psc%" +start conhost.exe "!_batf!" %_args% -qedit +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b +) else if %resetQE% EQU 1 ( +start cmd.exe /c ""!_batf!" %_args% -qedit" +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b ) -:: Disable QuickEdit in current session - -set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" -set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" -set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" -set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" - -%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 61515a9..8f65bbd 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -293,34 +293,33 @@ set terminal= :: Check if script is running in Terminal app -set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); -set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); -set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); -set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); -set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); - if defined terminal ( -%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +set lines=0 +for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A +if !lines! GEQ 100 set terminal= ) -if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) +:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app +:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes +:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error + +set resetQE=1 +reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0 +reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1% + if defined terminal ( -set "launchcmd=start conhost.exe %psc%" -) else ( -set "launchcmd=%psc%" +start conhost.exe "!_batf!" %_args% -qedit +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b +) else if %resetQE% EQU 1 ( +start cmd.exe /c ""!_batf!" %_args% -qedit" +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b ) -:: Disable QuickEdit in current session - -set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" -set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" -set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" -set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" - -%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 31e5bb0..bcac266 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -296,34 +296,33 @@ set terminal= :: Check if script is running in Terminal app -set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); -set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); -set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); -set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); -set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); - if defined terminal ( -%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +set lines=0 +for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A +if !lines! GEQ 100 set terminal= ) -if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) +:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app +:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes +:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error + +set resetQE=1 +reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0 +reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1% + if defined terminal ( -set "launchcmd=start conhost.exe %psc%" -) else ( -set "launchcmd=%psc%" +start conhost.exe "!_batf!" %_args% -qedit +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b +) else if %resetQE% EQU 1 ( +start cmd.exe /c ""!_batf!" %_args% -qedit" +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b ) -:: Disable QuickEdit in current session - -set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" -set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" -set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" -set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" - -%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 186365e..e97586c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -286,34 +286,33 @@ set terminal= :: Check if script is running in Terminal app -set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); -set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); -set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); -set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); -set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); - if defined terminal ( -%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +set lines=0 +for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A +if !lines! GEQ 100 set terminal= ) -if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) +:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app +:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes +:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error + +set resetQE=1 +reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0 +reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1% + if defined terminal ( -set "launchcmd=start conhost.exe %psc%" -) else ( -set "launchcmd=%psc%" +start conhost.exe "!_batf!" %_args% -qedit +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b +) else if %resetQE% EQU 1 ( +start cmd.exe /c ""!_batf!" %_args% -qedit" +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b ) -:: Disable QuickEdit in current session - -set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" -set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" -set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" -set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" - -%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index e1e40b3..6c652a2 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -315,34 +315,33 @@ set terminal= :: Check if script is running in Terminal app -set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); -set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); -set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); -set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); -set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); - if defined terminal ( -%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +set lines=0 +for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A +if !lines! GEQ 100 set terminal= ) -if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) +:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app +:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes +:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error + +set resetQE=1 +reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0 +reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1% + if defined terminal ( -set "launchcmd=start conhost.exe %psc%" -) else ( -set "launchcmd=%psc%" +start conhost.exe "!_batf!" %_args% -qedit +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b +) else if %resetQE% EQU 1 ( +start cmd.exe /c ""!_batf!" %_args% -qedit" +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b ) -:: Disable QuickEdit in current session - -set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" -set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" -set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" -set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" - -%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index d3559ee..4a9af9c 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -321,34 +321,33 @@ set terminal= :: Check if script is running in Terminal app -set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); -set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); -set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); -set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); -set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); - if defined terminal ( -%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +set lines=0 +for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A +if !lines! GEQ 100 set terminal= ) -if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) +:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app +:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes +:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error + +set resetQE=1 +reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0 +reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1% + if defined terminal ( -set "launchcmd=start conhost.exe %psc%" -) else ( -set "launchcmd=%psc%" +start conhost.exe "!_batf!" %_args% -qedit +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b +) else if %resetQE% EQU 1 ( +start cmd.exe /c ""!_batf!" %_args% -qedit" +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b ) -:: Disable QuickEdit in current session - -set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" -set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" -set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" -set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" - -%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 0e71bb4..264a58e 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -246,34 +246,33 @@ set terminal= :: Check if script is running in Terminal app -set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); -set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); -set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); -set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); -set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); - if defined terminal ( -%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +set lines=0 +for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A +if !lines! GEQ 100 set terminal= ) -if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) +:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app +:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes +:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error + +set resetQE=1 +reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0 +reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1% + if defined terminal ( -set "launchcmd=start conhost.exe %psc%" -) else ( -set "launchcmd=%psc%" +start conhost.exe "!_batf!" %_args% -qedit +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b +) else if %resetQE% EQU 1 ( +start cmd.exe /c ""!_batf!" %_args% -qedit" +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b ) -:: Disable QuickEdit in current session - -set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" -set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" -set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" -set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" - -%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index c9a5155..37b02c1 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -251,34 +251,33 @@ set terminal= :: Check if script is running in Terminal app -set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); -set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); -set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); -set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); -set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); - if defined terminal ( -%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +set lines=0 +for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A +if !lines! GEQ 100 set terminal= ) -if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) +:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app +:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes +:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error + +set resetQE=1 +reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0 +reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1% + if defined terminal ( -set "launchcmd=start conhost.exe %psc%" -) else ( -set "launchcmd=%psc%" +start conhost.exe "!_batf!" %_args% -qedit +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b +) else if %resetQE% EQU 1 ( +start cmd.exe /c ""!_batf!" %_args% -qedit" +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b ) -:: Disable QuickEdit in current session - -set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" -set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" -set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" -set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" - -%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index e9db519..df142d4 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -245,34 +245,33 @@ set terminal= :: Check if script is running in Terminal app -set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); -set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); -set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); -set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); -set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); - if defined terminal ( -%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +set lines=0 +for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A +if !lines! GEQ 100 set terminal= ) -if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) +:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app +:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes +:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error + +set resetQE=1 +reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0 +reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1% + if defined terminal ( -set "launchcmd=start conhost.exe %psc%" -) else ( -set "launchcmd=%psc%" +start conhost.exe "!_batf!" %_args% -qedit +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b +) else if %resetQE% EQU 1 ( +start cmd.exe /c ""!_batf!" %_args% -qedit" +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b ) -:: Disable QuickEdit in current session - -set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" -set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" -set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" -set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" - -%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 818091f..483f6da 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -246,34 +246,33 @@ set terminal= :: Check if script is running in Terminal app -set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); -set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); -set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); -set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); -set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); - if defined terminal ( -%psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= +set lines=0 +for /f "skip=2 tokens=2 delims=: " %%A in ('mode con') do if "!lines!"=="0" set lines=%%A +if !lines! GEQ 100 set terminal= ) -if defined ps32onArm goto :skipQE if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) +:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app +:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes +:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error + +set resetQE=1 +reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0 +reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1% + if defined terminal ( -set "launchcmd=start conhost.exe %psc%" -) else ( -set "launchcmd=%psc%" +start conhost.exe "!_batf!" %_args% -qedit +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b +) else if %resetQE% EQU 1 ( +start cmd.exe /c ""!_batf!" %_args% -qedit" +start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1% +exit /b ) -:: Disable QuickEdit in current session - -set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" -set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" -set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" -set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" - -%launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== From 0d61475468de80b7f711038384e754331a14c7d8 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 15 Apr 2025 07:02:19 +0530 Subject: [PATCH 101/132] Fix an issue where Office doesn't need activation but TSforge would show phone license missing error --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 25 +++++++++++++++++++ .../Activators/TSforge_Activation.cmd | 25 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 2a42c2b..4410980 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -8874,6 +8874,24 @@ function Get-WmiInfo { } } +function slGetSkuInfo($SkuId) { + $t = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0) + $t.DefinePInvokeMethod('SLOpen', 'slc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $t.DefinePInvokeMethod('SLClose', 'slc.dll', 22, 1, [IntPtr], @([IntPtr]), 1, 3).SetImplementationFlags(128) + $t.DefinePInvokeMethod('SLGetProductSkuInformation', 'slc.dll', 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $w = $t.CreateType() + $hSLC = 0 + try { + [void]$w::SLOpen([ref]$hSLC) + $c = 0; $b = 0 + $r = $w::SLGetProductSkuInformation($hSLC, [ref][Guid]$SkuId, "msft:sl/EUL/PHONE/PUBLIC", [ref]$null, [ref]$c, [ref]$b) + return ($r -eq 0) + } + finally { + [void]$w::SLClose($hSLC) + } +} + if ($env:resetstuff -eq $null) { foreach ($tsactid in $tsactids) { try { @@ -8884,6 +8902,13 @@ if ($env:resetstuff -eq $null) { $prodName = if ($nameParts.Count -gt 1) { ($nameParts[1].Trim() -split '[ ,]')[0] } else { $null } } [LibTSforge.Modifiers.GenPKeyInstall]::InstallGenPKey($ver, $prod, $tsactid) + if ($prodName -match 'Office' -and -not (slGetSkuInfo($tsactid))) { + $licenseStatus = Get-WmiInfo -tsactid $tsactid -property "LicenseStatus" + if ($licenseStatus -eq 1) { + Write-Host "[$prodName] is already permanently activated." -ForegroundColor White -BackgroundColor DarkGreen + continue + } + } [LibTSforge.Activators.ZeroCID]::Activate($ver, $prod, $tsactid) $licenseStatus = Get-WmiInfo -tsactid $tsactid -property "LicenseStatus" if ($licenseStatus -eq 1) { diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 4a9af9c..3330a77 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -6747,6 +6747,24 @@ function Get-WmiInfo { } } +function slGetSkuInfo($SkuId) { + $t = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0) + $t.DefinePInvokeMethod('SLOpen', 'slc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $t.DefinePInvokeMethod('SLClose', 'slc.dll', 22, 1, [IntPtr], @([IntPtr]), 1, 3).SetImplementationFlags(128) + $t.DefinePInvokeMethod('SLGetProductSkuInformation', 'slc.dll', 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $w = $t.CreateType() + $hSLC = 0 + try { + [void]$w::SLOpen([ref]$hSLC) + $c = 0; $b = 0 + $r = $w::SLGetProductSkuInformation($hSLC, [ref][Guid]$SkuId, "msft:sl/EUL/PHONE/PUBLIC", [ref]$null, [ref]$c, [ref]$b) + return ($r -eq 0) + } + finally { + [void]$w::SLClose($hSLC) + } +} + if ($env:resetstuff -eq $null) { foreach ($tsactid in $tsactids) { try { @@ -6757,6 +6775,13 @@ if ($env:resetstuff -eq $null) { $prodName = if ($nameParts.Count -gt 1) { ($nameParts[1].Trim() -split '[ ,]')[0] } else { $null } } [LibTSforge.Modifiers.GenPKeyInstall]::InstallGenPKey($ver, $prod, $tsactid) + if ($prodName -match 'Office' -and -not (slGetSkuInfo($tsactid))) { + $licenseStatus = Get-WmiInfo -tsactid $tsactid -property "LicenseStatus" + if ($licenseStatus -eq 1) { + Write-Host "[$prodName] is already permanently activated." -ForegroundColor White -BackgroundColor DarkGreen + continue + } + } [LibTSforge.Activators.ZeroCID]::Activate($ver, $prod, $tsactid) $licenseStatus = Get-WmiInfo -tsactid $tsactid -property "LicenseStatus" if ($licenseStatus -eq 1) { From f5a0a63165d9e6b57719f48322baac60e29a2e6a Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 15 Apr 2025 08:39:39 +0530 Subject: [PATCH 102/132] Cleanup leftover branding.xml related code --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 61 ++----------------- .../Activators/Ohook_Activation_AIO.cmd | 15 ----- .../Activators/Online_KMS_Activation.cmd | 41 ++----------- .../Activators/TSforge_Activation.cmd | 15 ----- 4 files changed, 12 insertions(+), 120 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 4410980..fc5db47 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2608,7 +2608,6 @@ set _prids= set _config= set _version= set _License= -set _oBranding= exit /b ::======================================================================================================================================== @@ -2862,20 +2861,11 @@ set "_common=%CommonProgramFiles%" if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" set "_common2=%CommonProgramFiles(x86)%" -for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" -if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" - call :msiofficedata %2 echo: echo Activating Office... [MSI ^| %_version% ^| %_oArch%] -if not defined _oBranding ( -set error=1 -call :dk_color %Red% "Checking BRANDING.XML [Not Found, aborting activation...]" -exit /b -) - if not defined _oIds ( set error=1 call :dk_color %Red% "Checking Installed Products [Product IDs not found, aborting activation...]" @@ -4790,7 +4780,6 @@ set _prids= set _config= set _version= set _License= -set _oBranding= exit /b ::======================================================================================================================================== @@ -4910,9 +4899,6 @@ set "_common=%CommonProgramFiles%" if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" set "_common2=%CommonProgramFiles(x86)%" -for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" -if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" - if exist "%_common%\Microsoft Shared\OFFICE%oVer%\Office Setup Controller\pkeyconfig-office.xrm-ms" ( set "pkeypath=%_common%\Microsoft Shared\OFFICE%oVer%\Office Setup Controller\pkeyconfig-office.xrm-ms" ) else if exist "%_common2%\Microsoft Shared\OFFICE%oVer%\Office Setup Controller\pkeyconfig-office.xrm-ms" ( @@ -4924,12 +4910,6 @@ call :msiofficedata %2 echo: echo Processing Office... [MSI ^| %_version% ^| %_oArch%] -if not defined _oBranding ( -set error=1 -call :dk_color %Red% "Checking BRANDING.XML [Not Found. Aborting activation...]" -exit /b -) - if not defined _oIds ( set error=1 call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" @@ -10951,7 +10931,7 @@ set _prids= set _config= set _version= set _License= -set _oBranding= +set _oMSI= exit /b ::======================================================================================================================================== @@ -11033,7 +11013,7 @@ exit /b for %%# in (%_oIds%) do ( set skipprocess= -if %_NoEditionChange%==1 if not defined _oBranding ( +if %_NoEditionChange%==1 if not defined _oMSI ( set foundprod= call :ksdata chkprod %%# if not defined foundprod ( @@ -11082,7 +11062,7 @@ if not "!key!"=="" ( echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic call :dk_inskey "[!key!] [!_prod!]" ) else ( -if not defined _oBranding ( +if not defined _oMSI ( set error=1 call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! not found in script]" call :dk_color %Blue% "Make sure you are using Latest MAS script." @@ -11105,6 +11085,7 @@ exit /b :: Process Office MSI Version call :ks_reset +set _oMSI=1 if "%1"=="14" ( call :dk_actids 59a52881-a989-479d-af46-f275c6370663 @@ -11125,21 +11106,11 @@ set "_common=%CommonProgramFiles%" if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" set "_common2=%CommonProgramFiles(x86)%" -for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" -if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" - -call :ksdata getmsiprod %2 -call :msiofficedata %2 getmsiret +call :msiofficedata %2 echo: echo Processing Office... [MSI ^| %_version% ^| %_oArch%] -if not defined _oBranding ( -set error=1 -call :dk_color %Red% "Checking BRANDING.XML [Not Found. Aborting activation...]" -exit /b -) - if not defined _oIds ( set error=1 call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" @@ -12159,18 +12130,13 @@ for %%# in ( ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( -set getIds=1 if "%oVer%"=="%%A" ( -if /i "%2"=="getmsiret" (echo %%D | findstr /i "Volume VL" %nul% && set getIds=) - -if defined getIds ( reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) ) ) ) -) ) ) @@ -12443,7 +12409,7 @@ if /i "%2"=="%%D" ( set key=%%B set _actid=%%A set _allactid=!_allactid! %%A -) else if not defined _oBranding if %_NoEditionChange%==0 ( +) else if not defined _oMSI if %_NoEditionChange%==0 ( echo: %%E | find /i "-%2-" %nul% && ( set key=%%B set _altoffid=%%D @@ -12453,21 +12419,6 @@ set _allactid=!_allactid! %%A ) ) -if %1==getmsiprod if "%oVer%"=="%%C" ( -for /f "tokens=*" %%x in ('findstr /i /c:"%%A" "%_oBranding%"') do set "prodId=%%x" -set prodId=!prodId:"/>=! -set prodId=!prodId:~-4! -if "%oVer%"=="14" ( -REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml -echo %%D | find /i "Visio" %nul% && set prodId=0057 -) -reg query "%2\Registration\{%%A}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( -reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( -if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) -) -) -) - ) ) exit /b diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index e97586c..04b78db 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -823,7 +823,6 @@ set _prids= set _config= set _version= set _License= -set _oBranding= exit /b ::======================================================================================================================================== @@ -1077,20 +1076,11 @@ set "_common=%CommonProgramFiles%" if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" set "_common2=%CommonProgramFiles(x86)%" -for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" -if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" - call :msiofficedata %2 echo: echo Activating Office... [MSI ^| %_version% ^| %_oArch%] -if not defined _oBranding ( -set error=1 -call :dk_color %Red% "Checking BRANDING.XML [Not Found, aborting activation...]" -exit /b -) - if not defined _oIds ( set error=1 call :dk_color %Red% "Checking Installed Products [Product IDs not found, aborting activation...]" @@ -2475,18 +2465,13 @@ for %%# in ( ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( -set getIds=1 if "%oVer%"=="%%A" ( -if /i "%2"=="getmsiret" (echo %%D | findstr /i "Volume VL" %nul% && set getIds=) - -if defined getIds ( reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) ) ) ) -) ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 6c652a2..d8759e2 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1029,7 +1029,7 @@ set _prids= set _config= set _version= set _License= -set _oBranding= +set _oMSI= exit /b ::======================================================================================================================================== @@ -1143,7 +1143,7 @@ exit /b for %%# in (%_oIds%) do ( set skipprocess= -if %_NoEditionChange%==1 if not defined _oBranding ( +if %_NoEditionChange%==1 if not defined _oMSI ( set foundprod= call :ksdata chkprod %%# if not defined foundprod ( @@ -1192,7 +1192,7 @@ if not "!key!"=="" ( echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic call :dk_inskey "[!key!] [!_prod!]" ) else ( -if not defined _oBranding ( +if not defined _oMSI ( set error=1 call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! not found in script]" call :dk_color %Blue% "Make sure you are using Latest MAS script." @@ -1215,6 +1215,7 @@ exit /b :: Process Office MSI Version call :ks_reset +set _oMSI=1 if "%1"=="14" ( call :dk_actids 59a52881-a989-479d-af46-f275c6370663 @@ -1235,21 +1236,11 @@ set "_common=%CommonProgramFiles%" if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" set "_common2=%CommonProgramFiles(x86)%" -for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" -if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" - -call :ksdata getmsiprod %2 -call :msiofficedata %2 getmsiret +call :msiofficedata %2 echo: echo Processing Office... [MSI ^| %_version% ^| %_oArch%] -if not defined _oBranding ( -set error=1 -call :dk_color %Red% "Checking BRANDING.XML [Not Found. Aborting activation...]" -exit /b -) - if not defined _oIds ( set error=1 call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" @@ -3450,18 +3441,13 @@ for %%# in ( ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( -set getIds=1 if "%oVer%"=="%%A" ( -if /i "%2"=="getmsiret" (echo %%D | findstr /i "Volume VL" %nul% && set getIds=) - -if defined getIds ( reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) ) ) ) -) ) ) @@ -3734,7 +3720,7 @@ if /i "%2"=="%%D" ( set key=%%B set _actid=%%A set _allactid=!_allactid! %%A -) else if not defined _oBranding if %_NoEditionChange%==0 ( +) else if not defined _oMSI if %_NoEditionChange%==0 ( echo: %%E | find /i "-%2-" %nul% && ( set key=%%B set _altoffid=%%D @@ -3744,21 +3730,6 @@ set _allactid=!_allactid! %%A ) ) -if %1==getmsiprod if "%oVer%"=="%%C" ( -for /f "tokens=*" %%x in ('findstr /i /c:"%%A" "%_oBranding%"') do set "prodId=%%x" -set prodId=!prodId:"/>=! -set prodId=!prodId:~-4! -if "%oVer%"=="14" ( -REM Exception case for Visio because wrong primary product ID is mentioned in Branding.xml -echo %%D | find /i "Visio" %nul% && set prodId=0057 -) -reg query "%2\Registration\{%%A}" /v ProductCode %nul2% | find /i "-!prodId!-" %nul% && ( -reg query "%2\Common\InstalledPackages" %nul2% | find /i "-!prodId!-" %nul% && ( -if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) -) -) -) - ) ) exit /b diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 3330a77..7da980b 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -1499,7 +1499,6 @@ set _prids= set _config= set _version= set _License= -set _oBranding= exit /b ::======================================================================================================================================== @@ -1679,9 +1678,6 @@ set "_common=%CommonProgramFiles%" if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" set "_common2=%CommonProgramFiles(x86)%" -for /r "%_common%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" -if not defined _oBranding for /r "%_common2%\Microsoft Shared\OFFICE%oVer%\" %%f in (BRANDING.XML) do if exist "%%f" set "_oBranding=%%f" - if exist "%_common%\Microsoft Shared\OFFICE%oVer%\Office Setup Controller\pkeyconfig-office.xrm-ms" ( set "pkeypath=%_common%\Microsoft Shared\OFFICE%oVer%\Office Setup Controller\pkeyconfig-office.xrm-ms" ) else if exist "%_common2%\Microsoft Shared\OFFICE%oVer%\Office Setup Controller\pkeyconfig-office.xrm-ms" ( @@ -1693,12 +1689,6 @@ call :msiofficedata %2 echo: echo Processing Office... [MSI ^| %_version% ^| %_oArch%] -if not defined _oBranding ( -set error=1 -call :dk_color %Red% "Checking BRANDING.XML [Not Found. Aborting activation...]" -exit /b -) - if not defined _oIds ( set error=1 call :dk_color %Red% "Checking Installed Products [Product IDs not found. Aborting activation...]" @@ -7195,18 +7185,13 @@ for %%# in ( ) do ( for /f "tokens=1-5 delims=_" %%A in ("%%#") do ( -set getIds=1 if "%oVer%"=="%%A" ( -if /i "%2"=="getmsiret" (echo %%D | findstr /i "Volume VL" %nul% && set getIds=) - -if defined getIds ( reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) ) ) ) -) ) ) From 294837dfe0eed177b177954e7ba8b5841af55264 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 16 Apr 2025 03:47:15 +0530 Subject: [PATCH 103/132] Add the updated CAS by abbodi1406 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 1013 ++++++++++++----- .../Check_Activation_Status.cmd | 1013 ++++++++++++----- 2 files changed, 1514 insertions(+), 512 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index fc5db47..b5a94e7 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -12508,6 +12508,7 @@ $IID = $IID.IsPresent -Or $Dlv.IsPresent $NT6 = $winbuild -GE 6000 $NT7 = $winbuild -GE 7600 +$NT8 = $winbuild -GE 9200 $NT9 = $winbuild -GE 9600 $Admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) @@ -12583,55 +12584,375 @@ function CheckOhook & $noAll } -#region WMI -function DetectID($strSLP, $strAppId) -{ - $ppk = (" AND PartialProductKey <> NULL)", ")")[$All.IsPresent] - $fltr = "SELECT ID FROM $strSLP WHERE (ApplicationID='$strAppId'" - $clause = $fltr + $ppk - $sWmi = [wmisearcher]$clause - $sWmi.Options.Rewindable = $false - return ($sWmi.Get().Count -GT 0) +#region SSSS +function BoolToWStr($bVal) { + ("TRUE", "FALSE")[!$bVal] } -function GetID($strSLP, $strAppId) -{ - $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) - $IDs = [Collections.ArrayList]@() - $isAdd = (" AND LicenseDependsOn <> NULL)", ")")[$NT5] - $noAdd = " AND LicenseDependsOn IS NULL)" - $query = "SELECT ID FROM $strSLP WHERE (ApplicationID='$strAppId' AND PartialProductKey" +function InitializePInvoke($LaDll, $bOffice) { + $Marshal = [System.Runtime.InteropServices.Marshal] + $Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 'Run').DefineDynamicModule((Get-Random), $False) + $SLApp = $NT7 -Or $bOffice -Or ($LaDll -EQ 'sppc.dll' -And [Diagnostics.FileVersionInfo]::GetVersionInfo("$SysPath\sppc.dll").FilePrivatePart -GE 16501) - if ($All.IsPresent) { - $fltr = $query + " IS NULL" - $clause = $fltr + $isAdd - $sWmi = [wmisearcher]$clause - $sWmi.Options.Rewindable = $false - try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} - if (-Not $NT5) { - $clause = $fltr + $noAdd - $sWmi = [wmisearcher]$clause - $sWmi.Options.Rewindable = $false - try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} + $Win32 = $null + $Class = $Module.DefineType((Get-Random), 'Public, Abstract, Sealed, BeforeFieldInit', [Object], 0) + $Class.DefinePInvokeMethod('SLClose', $LaDll, 22, 1, [Int32], @([IntPtr]), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLOpen', $LaDll, 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGenerateOfflineInstallationId', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetSLIDList', $LaDll, 22, 1, [Int32], @([IntPtr], [UInt32], [Guid].MakeByRefType(), [UInt32], [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetLicensingStatusInformation', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [Guid].MakeByRefType(), [IntPtr], [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetPKeyInformation', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetProductSkuInformation', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetServiceInformation', $LaDll, 22, 1, [Int32], @([IntPtr], [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + if ($SLApp) { + $Class.DefinePInvokeMethod('SLGetApplicationInformation', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + } + if ($bOffice) { + $Win32 = $Class.CreateType() + return + } + if ($NT6) { + $Class.DefinePInvokeMethod('SLGetWindowsInformation', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLIsGenuineLocal', 'slwga.dll', 22, 1, [Int32], @([Guid].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr]), 1, 3).SetImplementationFlags(128) + } + if ($NT7) { + $Class.DefinePInvokeMethod('SLIsWindowsGenuineLocal', 'slc.dll', 'Public, Static', 'Standard', [Int32], @([UInt32].MakeByRefType()), 'Winapi', 'Unicode').SetImplementationFlags('PreserveSig') + } + + if ($DllSubscription) { + $Class.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Struct = $Class.DefineNestedType('SubStatus', 'NestedPublic, SequentialLayout, Sealed, BeforeFieldInit', [ValueType], 0) + [void]$Struct.DefineField('dwEnabled', [UInt32], 'Public') + [void]$Struct.DefineField('dwSku', [UInt32], 6) + [void]$Struct.DefineField('dwState', [UInt32], 6) + $SubStatus = $Struct.CreateType() + } + + $Win32 = $Class.CreateType() +} + +function SlGetInfoIID($SkuId) +{ + $bData = 0 + + if ($Win32::SLGenerateOfflineInstallationId( + $hSLC, + [ref][Guid]$SkuId, + [ref]$bData + )) + { + return $null + } + + $rData = $Marshal::PtrToStringUni($bData) + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoSku($SkuId, $Value) +{ + $tData = 0 + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetProductSkuInformation( + $hSLC, + [ref][Guid]$SkuId, + $Value, + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData) + { + return $null + } + + if ($tData -EQ 1) + { + $rData = $Marshal::PtrToStringUni($bData) + } + elseif ($tData -EQ 4) + { + $rData = $Marshal::ReadInt32($bData) + } + elseif ($tData -EQ 3 -And $cData -EQ 8) + { + $rData = $Marshal::ReadInt64($bData) + } + else + { + $rData = $null + } + + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoService($Value) +{ + $tData = 0 + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetServiceInformation( + $hSLC, + $Value, + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData) + { + return $null + } + + if ($tData -EQ 1) + { + $rData = $Marshal::PtrToStringUni($bData) + } + elseif ($tData -EQ 4) + { + $rData = $Marshal::ReadInt32($bData) + } + elseif ($tData -EQ 3 -And $cData -EQ 8) + { + $rData = $Marshal::ReadInt64($bData) + } + else + { + $rData = $null + } + + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoApp($AppId, $Value) +{ + $tData = 0 + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetApplicationInformation( + $hSLC, + [ref][Guid]$AppId, + $Value, + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData) + { + return $null + } + + if ($tData -EQ 1) + { + $rData = $Marshal::PtrToStringUni($bData) + } + elseif ($tData -EQ 4) + { + $rData = $Marshal::ReadInt32($bData) + } + elseif ($tData -EQ 3 -And $cData -EQ 8) + { + $rData = $Marshal::ReadInt64($bData) + } + else + { + $rData = $null + } + + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoSvcApp($strApp, $Value) +{ + if ($SLApp) + { + $rData = SlGetInfoApp $strApp $Value + } + else + { + $rData = SlGetInfoService $Value + } + return $rData +} + +function SlGetInfoPKey($PkeyId, $Value) +{ + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetPKeyInformation( + $hSLC, + [ref][Guid]$PKeyId, + $Value, + [ref]$null, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData) + { + return $null + } + + $rData = $Marshal::PtrToStringUni($bData) + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoLicensing($AppId, $SkuId) +{ + $LicenseStatus = 0 + $GracePeriodRemaining = 0 + $hrReason = 0 + $EvaluationEndDate = 0 + + $cStatus = 0 + $pStatus = 0 + + $ret = $Win32::SLGetLicensingStatusInformation( + $hSLC, + [ref][Guid]$AppId, + [ref][Guid]$SkuId, + 0, + [ref]$cStatus, + [ref]$pStatus + ) + + if ($ret -Or !$cStatus) + { + return + } + + [IntPtr]$ppStatus = [Int64]$pStatus + [Int64]40 * ($cStatus - 1) + $eStatus = $Marshal::ReadInt32($ppStatus, 16) + $GracePeriodRemaining = $Marshal::ReadInt32($ppStatus, 20) + $hrReason = $Marshal::ReadInt32($ppStatus, 28) + $EvaluationEndDate = $Marshal::ReadInt64($ppStatus, 32) + + if ($eStatus -EQ 3) + { + $eStatus = 5 + } + if ($eStatus -EQ 2) + { + if ($hrReason -EQ 0x4004F00D) + { + $eStatus = 3 + } + elseif ($hrReason -EQ 0x4004F065) + { + $eStatus = 4 + } + elseif ($hrReason -EQ 0x4004FC06) + { + $eStatus = 6 } } + $LicenseStatus = $eStatus - $fltr = $query + " <> NULL" - $clause = $fltr + $isAdd - $sWmi = [wmisearcher]$clause - $sWmi.Options.Rewindable = $false - try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} - if (-Not $NT5) { - $clause = $fltr + $noAdd - $sWmi = [wmisearcher]$clause - $sWmi.Options.Rewindable = $false - try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} + $Marshal::FreeHGlobal($pStatus) + return +} + +function SlCheckInfo($SkuId, $Value) +{ + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetProductSkuInformation( + $hSLC, + [ref][Guid]$SkuId, + $Value, + [ref]$null, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData) + { + return $false } - return $IDs + if ($Value -EQ "pkeyId") + { + $rData = $Marshal::PtrToStringUni($bData) + } + else + { + $rData = $true + } + + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoSLID($AppId) +{ + $cReturnIds = 0 + $pReturnIds = 0 + + $ret = $Win32::SLGetSLIDList( + $hSLC, + 0, + [ref][Guid]$AppId, + 1, + [ref]$cReturnIds, + [ref]$pReturnIds + ) + + if ($ret -Or !$cReturnIds) + { + return + } + + $a1List = @() + $a2List = @() + $a3List = @() + $a4List = @() + + foreach ($i in 0..($cReturnIds - 1)) + { + $bytes = New-Object byte[] 16 + $Marshal::Copy([Int64]$pReturnIds + [Int64]16 * $i, $bytes, 0, 16) + $actid = ([Guid]$bytes).Guid + $gPPK = SlCheckInfo $actid "pkeyId" + $gAdd = SlCheckInfo $actid "DependsOn" + if ($All.IsPresent) { + if (!$gPPK -And $gAdd) { $a1List += @{id = $actid; pk = $null; ex = $true} } + if (!$gPPK -And !$gAdd) { $a2List += @{id = $actid; pk = $null; ex = $false} } + } + if ($gPPK -And $gAdd) { $a3List += @{id = $actid; pk = $gPPK; ex = $true} } + if ($gPPK -And !$gAdd) { $a4List += @{id = $actid; pk = $gPPK; ex = $false} } + } + + $Marshal::FreeHGlobal($pReturnIds) + return ($a1List + $a2List + $a3List + $a4List) } function DetectSubscription { + try + { + $objSvc = New-Object PSObject + $wmiSvc = [wmisearcher]"SELECT SubscriptionType, SubscriptionStatus, SubscriptionEdition, SubscriptionExpiry FROM SoftwareLicensingService" + $wmiSvc.Options.Rewindable = $false + $wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { $objSvc | Add-Member 8 $_.Name $_.Value } + $wmiSvc.Dispose() + } + catch + { + return + } + if ($null -EQ $objSvc.SubscriptionType -Or $objSvc.SubscriptionType -EQ 120) { return } @@ -12663,161 +12984,188 @@ function DetectSubscription { } CONOUT "`nSubscription information:" - CONOUT " Edition: $SubMsgEdition" CONOUT " Type : $SubMsgType" CONOUT " Status : $SubMsgStatus" + CONOUT " Edition: $SubMsgEdition" CONOUT " Expiry : $SubMsgExpiry" } function DetectAdbaClient { + $propADBA | foreach { set $_ (SlGetInfoSku $ID $_) } CONOUT "`nAD Activation client information:" CONOUT " Object Name: $ADActivationObjectName" CONOUT " Domain Name: $ADActivationObjectDN" - CONOUT " CSVLK Extended PID: $ADActivationCsvlkPid" - CONOUT " CSVLK Activation ID: $ADActivationCsvlkSkuId" + CONOUT " CSVLK Extended PID: $ADActivationCsvlkPID" + CONOUT " CSVLK Activation ID: $ADActivationCsvlkSkuID" } function DetectAvmClient { + $propAVMA | foreach { set $_ (SlGetInfoSku $ID $_) } CONOUT "`nAutomatic VM Activation client information:" - if (-Not [String]::IsNullOrEmpty($IAID)) { - CONOUT " Guest IAID: $IAID" + if (-Not [String]::IsNullOrEmpty($InheritedActivationId)) { + CONOUT " Guest IAID: $InheritedActivationId" } else { CONOUT " Guest IAID: Not Available" } - if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostMachineName)) { - CONOUT " Host machine name: $AutomaticVMActivationHostMachineName" + if (-Not [String]::IsNullOrEmpty($InheritedActivationHostMachineName)) { + CONOUT " Host machine name: $InheritedActivationHostMachineName" } else { CONOUT " Host machine name: Not Available" } - if ($AutomaticVMActivationLastActivationTime.Substring(0,4) -NE "1601") { - $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($AutomaticVMActivationLastActivationTime),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') - CONOUT " Activation time: $EED UTC" - } else { - CONOUT " Activation time: Not Available" - } - if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostDigitalPid2)) { - CONOUT " Host Digital PID2: $AutomaticVMActivationHostDigitalPid2" + if (-Not [String]::IsNullOrEmpty($InheritedActivationHostDigitalPid2)) { + CONOUT " Host Digital PID2: $InheritedActivationHostDigitalPid2" } else { CONOUT " Host Digital PID2: Not Available" } + if ($InheritedActivationActivationTime) { + $IAAT = [DateTime]::FromFileTime($InheritedActivationActivationTime).ToString('yyyy-MM-dd hh:mm:ss tt') + CONOUT " Activation time: $IAAT" + } else { + CONOUT " Activation time: Not Available" + } } function DetectKmsHost { + $IsKeyManagementService = SlGetInfoSvcApp $strApp 'IsKeyManagementService' + if (-Not $IsKeyManagementService) { + return + } + if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} + if ($Vista -Or $NT5) { - $KeyManagementServiceListeningPort = strGetRegistry $SLKeyPath "KeyManagementServiceListeningPort" - $KeyManagementServiceDnsPublishing = strGetRegistry $SLKeyPath "DisableDnsPublishing" - $KeyManagementServiceLowPriority = strGetRegistry $SLKeyPath "EnableKmsLowPriority" - if (-Not $KeyManagementServiceDnsPublishing) {$KeyManagementServiceDnsPublishing = "TRUE"} - if (-Not $KeyManagementServiceLowPriority) {$KeyManagementServiceLowPriority = "FALSE"} + $regk = $SLKeyPath + } elseif ($strSLP -EQ $oslp) { + $regk = $OPKeyPath } else { - $KeyManagementServiceListeningPort = $objSvc.KeyManagementServiceListeningPort - $KeyManagementServiceDnsPublishing = $objSvc.KeyManagementServiceDnsPublishing - $KeyManagementServiceLowPriority = $objSvc.KeyManagementServiceLowPriority + $regk = $SPKeyPath + } + $KMSListening = strGetRegistry $regk "KeyManagementServiceListeningPort" + $KMSPublishing = strGetRegistry $regk "DisableDnsPublishing" + $KMSPriority = strGetRegistry $regk "EnableKmsLowPriority" + + if (-Not $KMSListening) {$KMSListening = 1688} + if (-Not $KMSPublishing) {$KMSPublishing = "TRUE"} else {$KMSPublishing = BoolToWStr (!$KMSPublishing)} + if (-Not $KMSPriority) {$KMSPriority = "FALSE"} else {$KMSPriority = BoolToWStr $KMSPriority} + + if ($KMSPublishing -EQ "TRUE") {$KMSPublishing = "Enabled"} else {$KMSPublishing = "Disabled"} + if ($KMSPriority -EQ "TRUE") {$KMSPriority = "Low"} else {$KMSPriority = "Normal"} + + if ($SLApp) + { + $propKMSServer | foreach { set $_ (SlGetInfoApp $strApp $_) } + } + else + { + $propKMSServer | foreach { set $_ (SlGetInfoService $_) } } - if (-Not $KeyManagementServiceListeningPort) {$KeyManagementServiceListeningPort = 1688} - if ($KeyManagementServiceDnsPublishing -EQ "TRUE") { - $KeyManagementServiceDnsPublishing = "Enabled" - } else { - $KeyManagementServiceDnsPublishing = "Disabled" - } - if ($KeyManagementServiceLowPriority -EQ "TRUE") { - $KeyManagementServiceLowPriority = "Low" - } else { - $KeyManagementServiceLowPriority = "Normal" - } + $KMSRequests = $KeyManagementServiceTotalRequests + $NoRequests = ($null -EQ $KMSRequests) -Or ($KMSRequests -EQ -1) -Or ($KMSRequests -EQ 4294967295) CONOUT "`nKey Management Service host information:" CONOUT " Current count: $KeyManagementServiceCurrentCount" - CONOUT " Listening on Port: $KeyManagementServiceListeningPort" - CONOUT " DNS publishing: $KeyManagementServiceDnsPublishing" - CONOUT " KMS priority: $KeyManagementServiceLowPriority" - if (-Not [String]::IsNullOrEmpty($KeyManagementServiceTotalRequests)) { - CONOUT "`nKey Management Service cumulative requests received from clients:" - CONOUT " Total: $KeyManagementServiceTotalRequests" - CONOUT " Failed: $KeyManagementServiceFailedRequests" - CONOUT " Unlicensed: $KeyManagementServiceUnlicensedRequests" - CONOUT " Licensed: $KeyManagementServiceLicensedRequests" - CONOUT " Initial grace period: $KeyManagementServiceOOBGraceRequests" - CONOUT " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests" - CONOUT " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests" - if ($null -NE $KeyManagementServiceNotificationRequests) {CONOUT " Notification: $KeyManagementServiceNotificationRequests"} + CONOUT " Listening on Port: $KMSListening" + CONOUT " DNS publishing: $KMSPublishing" + CONOUT " KMS priority: $KMSPriority" + if ($NoRequests) { + return } + CONOUT "`nKey Management Service cumulative requests received from clients:" + CONOUT " Total: $KeyManagementServiceTotalRequests" + CONOUT " Failed: $KeyManagementServiceFailedRequests" + CONOUT " Unlicensed: $KeyManagementServiceUnlicensedRequests" + CONOUT " Licensed: $KeyManagementServiceLicensedRequests" + CONOUT " Initial grace period: $KeyManagementServiceOOBGraceRequests" + CONOUT " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests" + CONOUT " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests" + if ($null -NE $KeyManagementServiceNotificationRequests) {CONOUT " Notification: $KeyManagementServiceNotificationRequests"} } function DetectKmsClient { - if ($null -NE $VLActivationTypeEnabled) {CONOUT "Configured Activation Type: $($VLActTypes[$VLActivationTypeEnabled])"} + if ($strSLP -EQ $wslp -And $NT8) + { + $VLType = strGetRegistry ($SPKeyPath + '\' + $strApp + '\' + $ID) "VLActivationType" + if ($null -EQ $VLType) {$VLType = strGetRegistry ($SPKeyPath + '\' + $strApp) "VLActivationType"} + if ($null -EQ $VLType) {$VLType = strGetRegistry ($SPKeyPath) "VLActivationType"} + if ($null -EQ $VLType -Or $VLType -GT 3) {$VLType = 0} + } + if ($null -NE $VLType) {CONOUT "Configured Activation Type: $($VLActTypes[$VLType])"} + CONOUT "`r" if ($LicenseStatus -NE 1) { CONOUT "Please activate the product in order to update KMS client information values." return } - if ($Vista) { - $KeyManagementServicePort = strGetRegistry $SLKeyPath "KeyManagementServicePort" - $DiscoveredKeyManagementServiceMachineName = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServiceName" - $DiscoveredKeyManagementServiceMachinePort = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServicePort" + if ($NT7 -Or $strSLP -EQ $oslp) { + $propKMSClient | foreach { set $_ (SlGetInfoSku $ID $_) } + if ($strSLP -EQ $oslp) {$regk = $OPKeyPath} else {$regk = $SPKeyPath} + $KMSCaching = strGetRegistry $regk "DisableKeyManagementServiceHostCaching" + if (-Not $KMSCaching) {$KMSCaching = "TRUE"} else {$KMSCaching = BoolToWStr (!$KMSCaching)} } - if ([String]::IsNullOrEmpty($KeyManagementServiceMachine)) { + "ClientMachineID" | foreach { set $_ (SlGetInfoService $_) } + + if ($Vista) { + $propKMSVista | foreach { set $_ (SlGetInfoService $_) } + $KeyManagementServicePort = strGetRegistry $SLKeyPath "KeyManagementServicePort" + $DiscoveredKeyManagementServiceName = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServiceName" + $DiscoveredKeyManagementServicePort = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServicePort" + } + + if ([String]::IsNullOrEmpty($KeyManagementServiceName)) { $KmsReg = $null } else { if (-Not $KeyManagementServicePort) {$KeyManagementServicePort = 1688} - $KmsReg = "Registered KMS machine name: ${KeyManagementServiceMachine}:${KeyManagementServicePort}" + $KmsReg = "Registered KMS machine name: ${KeyManagementServiceName}:${KeyManagementServicePort}" } - if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceMachineName)) { + if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceName)) { $KmsDns = "DNS auto-discovery: KMS name not available" if ($Vista -And -Not $Admin) {$KmsDns = "DNS auto-discovery: Run the script as administrator to retrieve info"} } else { - if (-Not $DiscoveredKeyManagementServiceMachinePort) {$DiscoveredKeyManagementServiceMachinePort = 1688} - $KmsDns = "KMS machine name from DNS: ${DiscoveredKeyManagementServiceMachineName}:${DiscoveredKeyManagementServiceMachinePort}" + if (-Not $DiscoveredKeyManagementServicePort) {$DiscoveredKeyManagementServicePort = 1688} + $KmsDns = "KMS machine name from DNS: ${DiscoveredKeyManagementServiceName}:${DiscoveredKeyManagementServicePort}" } - if ($null -NE $objSvc.KeyManagementServiceHostCaching) { - if ($objSvc.KeyManagementServiceHostCaching -EQ "TRUE") { - $KeyManagementServiceHostCaching = "Enabled" - } else { - $KeyManagementServiceHostCaching = "Disabled" + if ($null -NE $KMSCaching) { + if ($KMSCaching -EQ "TRUE") {$KMSCaching = "Enabled"} else {$KMSCaching = "Disabled"} + } + + if ($strSLP -EQ $wslp -And $NT9) { + if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceIpAddress)) { + $DiscoveredKeyManagementServiceIpAddress = "not available" } } CONOUT "Key Management Service client information:" - CONOUT " Client Machine ID (CMID): $($objSvc.ClientMachineID)" + CONOUT " Client Machine ID (CMID): $ClientMachineID" if ($null -EQ $KmsReg) { CONOUT " $KmsDns" CONOUT " Registered KMS machine name: KMS name not available" } else { CONOUT " $KmsReg" } - if ($null -NE $DiscoveredKeyManagementServiceMachineIpAddress) {CONOUT " KMS machine IP address: $DiscoveredKeyManagementServiceMachineIpAddress"} - CONOUT " KMS machine extended PID: $KeyManagementServiceProductKeyID" + if ($null -NE $DiscoveredKeyManagementServiceIpAddress) {CONOUT " KMS machine IP address: $DiscoveredKeyManagementServiceIpAddress"} + CONOUT " KMS machine extended PID: $CustomerPID" CONOUT " Activation interval: $VLActivationInterval minutes" CONOUT " Renewal interval: $VLRenewalInterval minutes" - if ($null -NE $KeyManagementServiceHostCaching) {CONOUT " KMS host caching: $KeyManagementServiceHostCaching"} + if ($null -NE $KMSCaching) {CONOUT " KMS host caching: $KMSCaching"} if (-Not [String]::IsNullOrEmpty($KeyManagementServiceLookupDomain)) {CONOUT " KMS SRV record lookup domain: $KeyManagementServiceLookupDomain"} } -function GetResult($strSLP, $strSLS, $strID) +function GetResult($strSLP, $strApp, $entry) { - try - { - $objPrd = [wmisearcher]"SELECT * FROM $strSLP WHERE ID='$strID'" - $objPrd.Options.Rewindable = $false - $objPrd.Get() | select -Expand Properties -EA 0 | foreach { if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} } - $objPrd.Dispose() - } - catch - { - return - } + $ID = $entry.id + $propPrd | foreach { set $_ (SlGetInfoSku $ID $_) } + . SlGetInfoLicensing $strApp $ID - $winID = ($ApplicationID -EQ $winApp) - $winPR = ($winID -And -Not $LicenseIsAddon) + $winID = ($strApp -EQ $winApp) + $winPR = ($winID -And -Not $entry.ex) $Vista = ($winID -And $NT6 -And -Not $NT7) $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) $reapp = ("Windows", "App")[!$winID] @@ -12827,16 +13175,15 @@ function GetResult($strSLP, $strSLS, $strID) if ($Description | Select-String "TIMEBASED_") {$cTblClient = 1; $_mTag = "Timebased"} if ($Description | Select-String "VIRTUAL_MACHINE_ACTIVATION") {$cAvmClient = 1; $_mTag = "Automatic VM"} if ($null -EQ $cKmsClient) { - if ($Description | Select-String "VOLUME_KMS") {$cKmsHost = 1} + if ($Description | Select-String "VOLUME_KMS") {$cKmsServer = 1} } $_gpr = [Math]::Round($GracePeriodRemaining/1440) if ($_gpr -GT 0) { - $_xpr = [DateTime]::Now.addMinutes($GracePeriodRemaining).ToString('yyyy-MM-dd hh:mm:ss tt') + $_xpr = [DateTime]::Now.AddMinutes($GracePeriodRemaining).ToString('yyyy-MM-dd hh:mm:ss tt') } - if ($null -EQ $LicenseStatusReason) {$LicenseStatusReason = -1} - $LicenseReason = '0x{0:X}' -f $LicenseStatusReason + $LicenseReason = '0x{0:X}' -f $hrReason $LicenseMsg = "Time remaining: $GracePeriodRemaining minute(s) ($_gpr day(s))" if ($LicenseStatus -EQ 0) { $LicenseInf = "Unlicensed" @@ -12844,8 +13191,8 @@ function GetResult($strSLP, $strSLS, $strID) } if ($LicenseStatus -EQ 1) { $LicenseInf = "Licensed" - $LicenseMsg = $null if ($GracePeriodRemaining -EQ 0) { + $LicenseMsg = $null $ExpireMsg = "The $prmnt is permanently activated." } else { $LicenseMsg = "$_mTag activation expiration: $GracePeriodRemaining minute(s) ($_gpr day(s))" @@ -12880,24 +13227,54 @@ function GetResult($strSLP, $strSLS, $strID) if ($null -NE $_xpr) {$ExpireMsg = "Extended grace period ends $_xpr"} } - if ($winPR -And $PartialProductKey -And -Not $NT9) { - $dp4 = strGetRegistry "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" "DigitalProductId4" - if ($null -NE $dp4) { - $ProductKeyChannel = ([System.Text.Encoding]::Unicode.GetString($dp4, 1016, 128)).Trim([char]$null) + $pkid = $entry.pk + if ($null -NE $pkid) { + $propPkey | foreach { set $_ (SlGetInfoPKey $pkid $_) } + } + + if ($winPR -And $null -NE $PartialProductKey -And -Not $NT8) { + $uxd = SlGetInfoSku $ID 'UXDifferentiator' + $script:primary += @{ + aid = $ID; + ppk = $PartialProductKey; + chn = $Channel; + lst = $LicenseStatus; + lcr = $hrReason; + ged = $GracePeriodRemaining; + evl = $EvaluationEndDate; + dff = $uxd } } - if ($winPR -And $Dlv -And $NT7 -And $null -EQ $RemainingAppReArmCount) { - try + if ($IID -And $null -NE $PartialProductKey) { + $OfflineInstallationId = SlGetInfoIID $ID + } + + if ($Dlv) { + if ($strSLP -EQ $wslp -And $NT8) { - $tmp = [wmisearcher]"SELECT RemainingWindowsReArmCount FROM $strSLS" - $tmp.Options.Rewindable = $false - $tmp.Get() | select -Expand Properties -EA 0 | foreach {set $_.Name $_.Value} - $tmp.Dispose() + $RemainingSkuReArmCount = SlGetInfoSku $ID 'RemainingRearmCount' + $RemainingAppReArmCount = SlGetInfoApp $strApp 'RemainingRearmCount' } - catch + else { + if (($winID -And $NT7) -Or $strSLP -EQ $oslp) + { + $RemainingSLReArmCount = SlGetInfoApp $strApp 'RemainingRearmCount' + } + else + { + $RemainingSLReArmCount = SlGetInfoService 'RearmCount' + } } + if ($null -EQ $TrustedTime) + { + $TrustedTime = SlGetInfoSvcApp $strApp 'TrustedTime' + } + } + + if ($Dlv -Or $All.IsPresent) { + $gPHN = SlCheckInfo $ID "msft:sl/EUL/PHONE/PUBLIC" } $add_on = $Name.IndexOf("add-on for", 5) @@ -12906,73 +13283,56 @@ function GetResult($strSLP, $strSLS, $strID) if ($add_on -EQ -1) {CONOUT "Name: $Name"} else {CONOUT "Name: $($Name.Substring(0, $add_on + 7))"} CONOUT "Description: $Description" CONOUT "Activation ID: $ID" - if ($null -NE $ProductKeyID) {CONOUT "Extended PID: $ProductKeyID"} - if ($null -NE $ProductKeyID2 -And $Dlv) {CONOUT "Product ID: $ProductKeyID2"} + if ($null -NE $DigitalPID) {CONOUT "Extended PID: $DigitalPID"} + if ($null -NE $DigitalPID2 -And $Dlv) {CONOUT "Product ID: $DigitalPID2"} if ($null -NE $OfflineInstallationId -And $IID) {CONOUT "Installation ID: $OfflineInstallationId"} - if ($null -NE $ProductKeyChannel) {CONOUT "Product Key Channel: $ProductKeyChannel"} + if ($null -NE $Channel) {CONOUT "Product Key Channel: $Channel"} if ($null -NE $PartialProductKey) {CONOUT "Partial Product Key: $PartialProductKey"} CONOUT "License Status: $LicenseInf" if ($null -NE $LicenseMsg) {CONOUT "$LicenseMsg"} - if ($LicenseStatus -NE 0 -And $EvaluationEndDate.Substring(0,4) -NE "1601") { - $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($EvaluationEndDate),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') + if ($LicenseStatus -NE 0 -And $EvaluationEndDate) { + $EED = [DateTime]::FromFileTimeUtc($EvaluationEndDate).ToString('yyyy-MM-dd hh:mm:ss tt') CONOUT "Evaluation End Date: $EED UTC" } + if ($LicenseStatus -NE 1 -And $null -NE $gPHN) { + $gPHN = $gPHN.ToString() + CONOUT "Phone activatable: $gPHN" + } if ($Dlv) { - if ($null -NE $RemainingWindowsReArmCount) { - CONOUT "Remaining Windows rearm count: $RemainingWindowsReArmCount" + if ($null -NE $RemainingSLReArmCount) { + CONOUT "Remaining $reapp rearm count: $RemainingSLReArmCount" } - if ($null -NE $RemainingSkuReArmCount -And $RemainingSkuReArmCount -NE 4294967295) { + if ($null -NE $RemainingSkuReArmCount) { CONOUT "Remaining $reapp rearm count: $RemainingAppReArmCount" CONOUT "Remaining SKU rearm count: $RemainingSkuReArmCount" } - if ($null -NE $TrustedTime -And $LicenseStatus -NE 0) { - $TTD = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($TrustedTime),$null,32).ToString('yyyy-MM-dd hh:mm:ss tt') + if ($LicenseStatus -NE 0 -And $TrustedTime) { + $TTD = [DateTime]::FromFileTime($TrustedTime).ToString('yyyy-MM-dd hh:mm:ss tt') CONOUT "Trusted time: $TTD" } } - if ($LicenseStatus -EQ 0) { + if ($null -EQ $PartialProductKey) { return } - if ($strSLP -EQ $wslp -And $null -NE $PartialProductKey -And $null -NE $ADActivationObjectName -And $VLActivationType -EQ 1) { + if ($strSLP -EQ $wslp -And $NT8 -And $VLActivationType -EQ 1) { DetectAdbaClient } - if ($winID -And $null -NE $cAvmClient -And $null -NE $PartialProductKey) { + if ($winID -And $null -NE $cAvmClient) { DetectAvmClient } $chkSub = ($winPR -And $cSub) - $chkSLS = ($null -NE $PartialProductKey) -And ($null -NE $cKmsClient -Or $null -NE $cKmsHost -Or $chkSub) + $chkSLS = ($null -NE $cKmsClient -Or $null -NE $cKmsServer -Or $chkSub) if (!$chkSLS) { if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} return } - try - { - $objSvc = New-Object PSObject - $wmiSvc = [wmisearcher]"SELECT * FROM $strSLS" - $wmiSvc.Options.Rewindable = $false - $wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { if (-Not [String]::IsNullOrEmpty($_.Value)) {$objSvc | Add-Member 8 $_.Name $_.Value} } - $wmiSvc.Dispose() - if ($null -EQ $IsKeyManagementServiceMachine) {$objSvc.PSObject.Properties | foreach {set $_.Name $_.Value}} - } - catch - { - return - } - - if ($strSLS -EQ $wsls -And $NT9) { - if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceMachineIpAddress)) { - $DiscoveredKeyManagementServiceMachineIpAddress = "not available" - } - } - - if ($null -NE $cKmsHost -And $IsKeyManagementServiceMachine -GT 0) { - if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} + if ($null -NE $cKmsServer) { DetectKmsHost } @@ -12980,7 +13340,7 @@ function GetResult($strSLP, $strSLS, $strID) DetectKmsClient } - if ($null -EQ $cKmsHost) { + if ($null -EQ $cKmsServer) { if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} } @@ -12989,6 +13349,16 @@ function GetResult($strSLP, $strSLS, $strID) } } + +function ParseList($strSLP, $strApp, $arrList) +{ + foreach ($entry in $arrList) + { + GetResult $strSLP $strApp $entry + CONOUT "$line3" + & $noAll + } +} #endregion #region vNextDiag @@ -13207,31 +13577,6 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #> -function BoolToWStr($bVal) { - ("TRUE", "FALSE")[!$bVal] -} - -function InitializePInvoke { - $Marshal = [System.Runtime.InteropServices.Marshal] - $Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 'Run').DefineDynamicModule((Get-Random)) - - $Class = $Module.DefineType('NativeMethods', 'Public, Abstract, Sealed, BeforeFieldInit', [Object], 0) - $Class.DefinePInvokeMethod('SLIsWindowsGenuineLocal', 'slc.dll', 'Public, Static', 'Standard', [Int32], @([UInt32].MakeByRefType()), 'Winapi', 'Unicode').SetImplementationFlags('PreserveSig') - $Class.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType()), 1, 3).SetImplementationFlags(128) - $Class.DefinePInvokeMethod('SLGetWindowsInformation', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) - - if ($DllSubscription) { - $Class.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) - $Struct = $Class.DefineNestedType('SubStatus', 'NestedPublic, SequentialLayout, Sealed, BeforeFieldInit', [ValueType], 0) - [void]$Struct.DefineField('dwEnabled', [UInt32], 'Public') - [void]$Struct.DefineField('dwSku', [UInt32], 6) - [void]$Struct.DefineField('dwState', [UInt32], 6) - $SubStatus = $Struct.CreateType() - } - - $Win32 = $Class.CreateType() -} - function InitializeDigitalLicenseCheck { $CAB = [System.Reflection.Emit.CustomAttributeBuilder] @@ -13286,36 +13631,29 @@ function PrintLastActivationHResult { } function PrintLastActivationTime { - $pdwLastTime = 0 + $pqwLastTime = 0 $cbSize = 0 if ($Win32::SLGetWindowsInformation( "Security-SPP-LastWindowsActivationTime", [ref]$null, [ref]$cbSize, - [ref]$pdwLastTime + [ref]$pqwLastTime )) { return $FALSE } - $actTime = $Marshal::ReadInt64($pdwLastTime) + $actTime = $Marshal::ReadInt64($pqwLastTime) if ($actTime -ne 0) { CONOUT (" LastActivationTime={0}" -f [DateTime]::FromFileTimeUtc($actTime).ToString("yyyy/MM/dd:HH:mm:ss")) } - $Marshal::FreeHGlobal($pdwLastTime) + $Marshal::FreeHGlobal($pqwLastTime) return $TRUE } function PrintIsWindowsGenuine { $dwGenuine = 0 - $ppwszGenuineStates = @( - "SL_GEN_STATE_IS_GENUINE", - "SL_GEN_STATE_INVALID_LICENSE", - "SL_GEN_STATE_TAMPERED", - "SL_GEN_STATE_OFFLINE", - "SL_GEN_STATE_LAST" - ) if ($Win32::SLIsWindowsGenuineLocal([ref]$dwGenuine)) { return $FALSE @@ -13412,6 +13750,126 @@ function ClicRun } #endregion +#region clc +function clcGetExpireKrn +{ + $tData = 0 + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetWindowsInformation( + "Kernel-ExpirationDate", + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData -Or $tData -NE 3) + { + return $null + } + + $year = $Marshal::ReadInt16($bData, 0) + if ($year -EQ 0 -Or $year -EQ 1601) + { + $rData = $null + } + else + { + $rData = '{0}/{1}/{2}:{3}:{4}:{5}' -f $year, $Marshal::ReadInt16($bData, 2), $Marshal::ReadInt16($bData, 4), $Marshal::ReadInt16($bData, 6), $Marshal::ReadInt16($bData, 8), $Marshal::ReadInt16($bData, 10) + } + + $Marshal::FreeHGlobal($bData) + return $rData +} + +function clcGetExpireSys +{ + $kuser = $Marshal::ReadInt64((New-Object IntPtr(0x7FFE02C8))) + + if ($kuser -EQ 0) + { + return $null + } + + $rData = [DateTime]::FromFileTimeUTC($kuser).ToString('yyyy/MM/dd:HH:mm:ss') + return $rData +} + +function clcGetLicensingState($dwState) +{ + if ($dwState -EQ 5) { + $dwState = 3 + } elseif ($dwState -EQ 3 -Or $dwState -EQ 4 -Or $dwState -EQ 6) { + $dwState = 2 + } elseif ($dwState -GT 6) { + $dwState = 4 + } + + $rData = '{0}' -f $ppwszLicensingStates[$dwState] + return $rData +} + +function clcGetGenuineState($AppId) +{ + $dwGenuine = 0 + + if ($NT7) { + $ret = $Win32::SLIsWindowsGenuineLocal([ref]$dwGenuine) + } else { + $ret = $Win32::SLIsGenuineLocal([ref][Guid]$AppId, [ref]$dwGenuine, 0) + } + + if ($ret) + { + $dwGenuine = 4 + } + + if ($dwGenuine -LT 5) { + $rData = '{0}' -f $ppwszGenuineStates[$dwGenuine] + } else { + $rData = $dwGenuine + } + return $rData +} + +function ClcRun +{ + $prs = $script:primary[0] + if ($null -EQ $prs) { + return + } + + $lState = clcGetLicensingState $prs.lst + $uState = clcGetGenuineState $winApp + $TbbKrn = clcGetExpireKrn + $TbbSys = clcGetExpireSys + if ($null -NE $TbbKrn) { + $ked = $TbbKrn + } elseif ($null -NE $TbbSys) { + $ked = $TbbSys + } + + & $isAll + CONOUT "Client Licensing Check information:" + + CONOUT (" AppId={0}" -f $winApp) + if ($prs.ged) { CONOUT (" GraceEndDate={0}" -f ([DateTime]::UtcNow.AddMinutes($prs.ged).ToString('yyyy/MM/dd:HH:mm:ss'))) } + if ($null -NE $ked) { CONOUT (" KernelTimebombDate={0}" -f $ked) } + CONOUT (" LastConsumptionReason=0x{0:x8}" -f $prs.lcr) + if ($prs.evl) { CONOUT (" LicenseExpirationDate={0}" -f ([DateTime]::FromFileTimeUtc($prs.evl).ToString('yyyy/MM/dd:HH:mm:ss'))) } + CONOUT (" LicenseState={0}" -f $lState) + CONOUT (" PartialProductKey={0}" -f $prs.ppk) + CONOUT (" ProductKeyType={0}" -f $prs.chn) + CONOUT (" SkuId={0}" -f $prs.aid) + CONOUT (" uxDifferentiator={0}" -f $prs.dff) + CONOUT (" IsWindowsGenuine={0}" -f $uState) + + CONOUT "$line3" + & $noAll +} +#endregion + $Host.UI.RawUI.WindowTitle = "Check Activation Status" if ($All.IsPresent) { $B=$Host.UI.RawUI.BufferSize;$B.Height=3000;$Host.UI.RawUI.BufferSize=$B; @@ -13430,14 +13888,38 @@ $osls = "OfficeSoftwareProtectionService" $winApp = "55c92734-d682-4d71-983e-d6ec3f16059f" $o14App = "59a52881-a989-479d-af46-f275c6370663" $o15App = "0ff1ce15-a989-479d-af46-f275c6370663" -$cSub = ($winbuild -GE 19041) -And (Select-String -Path "$SysPath\wbem\sppwmi.mof" -Encoding unicode -Pattern "SubscriptionType") +$cSub = ($winbuild -GE 26000) -And (Select-String -Path "$SysPath\wbem\sppwmi.mof" -Encoding unicode -Pattern "SubscriptionType") $DllDigital = ($winbuild -GE 14393) -And (Test-Path "$SysPath\EditionUpgradeManagerObj.dll") $DllSubscription = ($winbuild -GE 14393) -And (Test-Path "$SysPath\Clipc.dll") $VLActTypes = @("All", "AD", "KMS", "Token") +$OPKeyPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" +$SPKeyPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" $SLKeyPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" $NSKeyPath = "HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" +$propPrd = 'Name', 'Description', 'TrustedTime', 'VLActivationType' +$propPkey = 'PartialProductKey', 'Channel', 'DigitalPID', 'DigitalPID2' +$propKMSServer = 'KeyManagementServiceCurrentCount', 'KeyManagementServiceTotalRequests', 'KeyManagementServiceFailedRequests', 'KeyManagementServiceUnlicensedRequests', 'KeyManagementServiceLicensedRequests', 'KeyManagementServiceOOBGraceRequests', 'KeyManagementServiceOOTGraceRequests', 'KeyManagementServiceNonGenuineGraceRequests', 'KeyManagementServiceNotificationRequests' +$propKMSClient = 'CustomerPID', 'KeyManagementServiceName', 'KeyManagementServicePort', 'DiscoveredKeyManagementServiceName', 'DiscoveredKeyManagementServicePort', 'DiscoveredKeyManagementServiceIpAddress', 'VLActivationInterval', 'VLRenewalInterval', 'KeyManagementServiceLookupDomain' +$propKMSVista = 'CustomerPID', 'KeyManagementServiceName', 'VLActivationInterval', 'VLRenewalInterval' +$propADBA = 'ADActivationObjectName', 'ADActivationObjectDN', 'ADActivationCsvlkPID', 'ADActivationCsvlkSkuID' +$propAVMA = 'InheritedActivationId', 'InheritedActivationHostMachineName', 'InheritedActivationHostDigitalPid2', 'InheritedActivationActivationTime' +$primary = @() +$ppwszGenuineStates = @( + "SL_GEN_STATE_IS_GENUINE", + "SL_GEN_STATE_INVALID_LICENSE", + "SL_GEN_STATE_TAMPERED", + "SL_GEN_STATE_OFFLINE", + "SL_GEN_STATE_LAST" +) +$ppwszLicensingStates = @( + "SL_LICENSING_STATUS_UNLICENSED", + "SL_LICENSING_STATUS_LICENSED", + "SL_LICENSING_STATUS_IN_GRACE_PERIOD", + "SL_LICENSING_STATUS_NOTIFICATION", + "SL_LICENSING_STATUS_LAST" +) -'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ $false} +'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ @()} $offsvc = "osppsvc" if ($NT7 -Or -Not $NT6) {$winsvc = "sppsvc"} else {$winsvc = "slsvc"} @@ -13445,83 +13927,102 @@ if ($NT7 -Or -Not $NT6) {$winsvc = "sppsvc"} else {$winsvc = "slsvc"} try {gsv $winsvc -EA 1 | Out-Null; $WsppHook = 1} catch {$WsppHook = 0} try {gsv $offsvc -EA 1 | Out-Null; $OsppHook = 1} catch {$OsppHook = 0} -if ($WsppHook -NE 0) { - try {sasv $winsvc -EA 1} catch {} - $cW1nd0ws = DetectID $wslp $winApp - $c0ff1ce15 = DetectID $wslp $o15App - $c0ff1ce14 = DetectID $wslp $o14App +if (Test-Path "$SysPath\sppc.dll") { + $SLdll = 'sppc.dll' +} elseif (Test-Path "$SysPath\slc.dll") { + $SLdll = 'slc.dll' +} else { + $WsppHook = 0 } if ($OsppHook -NE 0) { - try {sasv $offsvc -EA 1} catch {} - $ospp15 = DetectID $oslp $o15App - $ospp14 = DetectID $oslp $o14App + $OLdll = (strGetRegistry $OPKeyPath "Path") + 'osppc.dll' + if (!(Test-Path "$OLdll")) {$OsppHook = 0} } -if ($cW1nd0ws) +if ($WsppHook -NE 0) { + if ($NT6 -And -Not $NT7 -And -Not $Admin) { + if ($null -EQ [Diagnostics.Process]::GetProcessesByName("$winsvc")[0].ProcessName) {$WsppHook = 0; CONOUT "`nError: failed to start $winsvc Service.`n"} + } else { + try {sasv $winsvc -EA 1} catch {$WsppHook = 0; CONOUT "`nError: failed to start $winsvc Service.`n"} + } +} + +if ($WsppHook -NE 0) { + . InitializePInvoke $SLdll $false + $hSLC = 0 + [void]$Win32::SLOpen([ref]$hSLC) + + $cW1nd0ws = SlGetInfoSLID $winApp + $c0ff1ce15 = SlGetInfoSLID $o15App + $c0ff1ce14 = SlGetInfoSLID $o14App +} + +if ($cW1nd0ws.Count -GT 0) { echoWindows - GetID $wslp $winApp | foreach -EA 1 { - GetResult $wslp $wsls $_ - CONOUT "$line3" - & $noAll - } + ParseList $wslp $winApp $cW1nd0ws } elseif ($NT6) { echoWindows - CONOUT "`nError: product key not found." + CONOUT "Error: product key not found.`n" } -if ($winbuild -GE 9200) { - . InitializePInvoke +if ($NT6 -And -Not $NT8) { + ClcRun +} + +if ($NT8) { ClicRun } -if ($c0ff1ce15 -Or $ospp15) { - CheckOhook -} - $doMSG = 1 -if ($c0ff1ce15) +if ($c0ff1ce15.Count -GT 0) { + CheckOhook echoOffice - GetID $wslp $o15App | foreach -EA 1 { - GetResult $wslp $wsls $_ - CONOUT "$line3" - & $noAll - } + ParseList $wslp $o15App $c0ff1ce15 } -if ($c0ff1ce14) +if ($c0ff1ce14.Count -GT 0) { echoOffice - GetID $wslp $o14App | foreach -EA 1 { - GetResult $wslp $wsls $_ - CONOUT "$line3" - & $noAll - } + ParseList $wslp $o14App $c0ff1ce14 } -if ($ospp15) -{ - echoOffice - GetID $oslp $o15App | foreach -EA 1 { - GetResult $oslp $osls $_ - CONOUT "$line3" - & $noAll - } +if ($hSLC) { + [void]$Win32::SLClose($hSLC) } -if ($ospp14) +if ($OsppHook -NE 0) { + try {sasv $offsvc -EA 1} catch {$OsppHook = 0; CONOUT "`nError: failed to start $offsvc Service.`n"} +} + +if ($OsppHook -NE 0) { + . InitializePInvoke "$OLdll" $true + $hSLC = 0 + [void]$Win32::SLOpen([ref]$hSLC) + + $ospp15 = SlGetInfoSLID $o15App + $ospp14 = SlGetInfoSLID $o14App +} + +if ($ospp15.Count -GT 0) { echoOffice - GetID $oslp $o14App | foreach -EA 1 { - GetResult $oslp $osls $_ - CONOUT "$line3" - & $noAll - } + ParseList $oslp $o15App $ospp15 +} + +if ($ospp14.Count -GT 0) +{ + echoOffice + ParseList $oslp $o14App $ospp14 +} + +if ($hSLC) { + [void]$Win32::SLClose($hSLC) } if ($NT7) { diff --git a/MAS/Separate-Files-Version/Check_Activation_Status.cmd b/MAS/Separate-Files-Version/Check_Activation_Status.cmd index f15f36e..fd72a3f 100644 --- a/MAS/Separate-Files-Version/Check_Activation_Status.cmd +++ b/MAS/Separate-Files-Version/Check_Activation_Status.cmd @@ -118,6 +118,7 @@ $IID = $IID.IsPresent -Or $Dlv.IsPresent $NT6 = $winbuild -GE 6000 $NT7 = $winbuild -GE 7600 +$NT8 = $winbuild -GE 9200 $NT9 = $winbuild -GE 9600 $Admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) @@ -193,55 +194,375 @@ function CheckOhook & $noAll } -#region WMI -function DetectID($strSLP, $strAppId) -{ - $ppk = (" AND PartialProductKey <> NULL)", ")")[$All.IsPresent] - $fltr = "SELECT ID FROM $strSLP WHERE (ApplicationID='$strAppId'" - $clause = $fltr + $ppk - $sWmi = [wmisearcher]$clause - $sWmi.Options.Rewindable = $false - return ($sWmi.Get().Count -GT 0) +#region SSSS +function BoolToWStr($bVal) { + ("TRUE", "FALSE")[!$bVal] } -function GetID($strSLP, $strAppId) -{ - $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) - $IDs = [Collections.ArrayList]@() - $isAdd = (" AND LicenseDependsOn <> NULL)", ")")[$NT5] - $noAdd = " AND LicenseDependsOn IS NULL)" - $query = "SELECT ID FROM $strSLP WHERE (ApplicationID='$strAppId' AND PartialProductKey" +function InitializePInvoke($LaDll, $bOffice) { + $Marshal = [System.Runtime.InteropServices.Marshal] + $Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 'Run').DefineDynamicModule((Get-Random), $False) + $SLApp = $NT7 -Or $bOffice -Or ($LaDll -EQ 'sppc.dll' -And [Diagnostics.FileVersionInfo]::GetVersionInfo("$SysPath\sppc.dll").FilePrivatePart -GE 16501) - if ($All.IsPresent) { - $fltr = $query + " IS NULL" - $clause = $fltr + $isAdd - $sWmi = [wmisearcher]$clause - $sWmi.Options.Rewindable = $false - try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} - if (-Not $NT5) { - $clause = $fltr + $noAdd - $sWmi = [wmisearcher]$clause - $sWmi.Options.Rewindable = $false - try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} + $Win32 = $null + $Class = $Module.DefineType((Get-Random), 'Public, Abstract, Sealed, BeforeFieldInit', [Object], 0) + $Class.DefinePInvokeMethod('SLClose', $LaDll, 22, 1, [Int32], @([IntPtr]), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLOpen', $LaDll, 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGenerateOfflineInstallationId', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetSLIDList', $LaDll, 22, 1, [Int32], @([IntPtr], [UInt32], [Guid].MakeByRefType(), [UInt32], [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetLicensingStatusInformation', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [Guid].MakeByRefType(), [IntPtr], [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetPKeyInformation', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetProductSkuInformation', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetServiceInformation', $LaDll, 22, 1, [Int32], @([IntPtr], [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + if ($SLApp) { + $Class.DefinePInvokeMethod('SLGetApplicationInformation', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + } + if ($bOffice) { + $Win32 = $Class.CreateType() + return + } + if ($NT6) { + $Class.DefinePInvokeMethod('SLGetWindowsInformation', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Class.DefinePInvokeMethod('SLIsGenuineLocal', 'slwga.dll', 22, 1, [Int32], @([Guid].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr]), 1, 3).SetImplementationFlags(128) + } + if ($NT7) { + $Class.DefinePInvokeMethod('SLIsWindowsGenuineLocal', 'slc.dll', 'Public, Static', 'Standard', [Int32], @([UInt32].MakeByRefType()), 'Winapi', 'Unicode').SetImplementationFlags('PreserveSig') + } + + if ($DllSubscription) { + $Class.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) + $Struct = $Class.DefineNestedType('SubStatus', 'NestedPublic, SequentialLayout, Sealed, BeforeFieldInit', [ValueType], 0) + [void]$Struct.DefineField('dwEnabled', [UInt32], 'Public') + [void]$Struct.DefineField('dwSku', [UInt32], 6) + [void]$Struct.DefineField('dwState', [UInt32], 6) + $SubStatus = $Struct.CreateType() + } + + $Win32 = $Class.CreateType() +} + +function SlGetInfoIID($SkuId) +{ + $bData = 0 + + if ($Win32::SLGenerateOfflineInstallationId( + $hSLC, + [ref][Guid]$SkuId, + [ref]$bData + )) + { + return $null + } + + $rData = $Marshal::PtrToStringUni($bData) + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoSku($SkuId, $Value) +{ + $tData = 0 + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetProductSkuInformation( + $hSLC, + [ref][Guid]$SkuId, + $Value, + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData) + { + return $null + } + + if ($tData -EQ 1) + { + $rData = $Marshal::PtrToStringUni($bData) + } + elseif ($tData -EQ 4) + { + $rData = $Marshal::ReadInt32($bData) + } + elseif ($tData -EQ 3 -And $cData -EQ 8) + { + $rData = $Marshal::ReadInt64($bData) + } + else + { + $rData = $null + } + + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoService($Value) +{ + $tData = 0 + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetServiceInformation( + $hSLC, + $Value, + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData) + { + return $null + } + + if ($tData -EQ 1) + { + $rData = $Marshal::PtrToStringUni($bData) + } + elseif ($tData -EQ 4) + { + $rData = $Marshal::ReadInt32($bData) + } + elseif ($tData -EQ 3 -And $cData -EQ 8) + { + $rData = $Marshal::ReadInt64($bData) + } + else + { + $rData = $null + } + + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoApp($AppId, $Value) +{ + $tData = 0 + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetApplicationInformation( + $hSLC, + [ref][Guid]$AppId, + $Value, + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData) + { + return $null + } + + if ($tData -EQ 1) + { + $rData = $Marshal::PtrToStringUni($bData) + } + elseif ($tData -EQ 4) + { + $rData = $Marshal::ReadInt32($bData) + } + elseif ($tData -EQ 3 -And $cData -EQ 8) + { + $rData = $Marshal::ReadInt64($bData) + } + else + { + $rData = $null + } + + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoSvcApp($strApp, $Value) +{ + if ($SLApp) + { + $rData = SlGetInfoApp $strApp $Value + } + else + { + $rData = SlGetInfoService $Value + } + return $rData +} + +function SlGetInfoPKey($PkeyId, $Value) +{ + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetPKeyInformation( + $hSLC, + [ref][Guid]$PKeyId, + $Value, + [ref]$null, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData) + { + return $null + } + + $rData = $Marshal::PtrToStringUni($bData) + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoLicensing($AppId, $SkuId) +{ + $LicenseStatus = 0 + $GracePeriodRemaining = 0 + $hrReason = 0 + $EvaluationEndDate = 0 + + $cStatus = 0 + $pStatus = 0 + + $ret = $Win32::SLGetLicensingStatusInformation( + $hSLC, + [ref][Guid]$AppId, + [ref][Guid]$SkuId, + 0, + [ref]$cStatus, + [ref]$pStatus + ) + + if ($ret -Or !$cStatus) + { + return + } + + [IntPtr]$ppStatus = [Int64]$pStatus + [Int64]40 * ($cStatus - 1) + $eStatus = $Marshal::ReadInt32($ppStatus, 16) + $GracePeriodRemaining = $Marshal::ReadInt32($ppStatus, 20) + $hrReason = $Marshal::ReadInt32($ppStatus, 28) + $EvaluationEndDate = $Marshal::ReadInt64($ppStatus, 32) + + if ($eStatus -EQ 3) + { + $eStatus = 5 + } + if ($eStatus -EQ 2) + { + if ($hrReason -EQ 0x4004F00D) + { + $eStatus = 3 + } + elseif ($hrReason -EQ 0x4004F065) + { + $eStatus = 4 + } + elseif ($hrReason -EQ 0x4004FC06) + { + $eStatus = 6 } } + $LicenseStatus = $eStatus - $fltr = $query + " <> NULL" - $clause = $fltr + $isAdd - $sWmi = [wmisearcher]$clause - $sWmi.Options.Rewindable = $false - try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} - if (-Not $NT5) { - $clause = $fltr + $noAdd - $sWmi = [wmisearcher]$clause - $sWmi.Options.Rewindable = $false - try {$sWmi.Get() | select -Expand Properties -EA 0 | foreach {$IDs += $_.Value}} catch {} + $Marshal::FreeHGlobal($pStatus) + return +} + +function SlCheckInfo($SkuId, $Value) +{ + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetProductSkuInformation( + $hSLC, + [ref][Guid]$SkuId, + $Value, + [ref]$null, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData) + { + return $false } - return $IDs + if ($Value -EQ "pkeyId") + { + $rData = $Marshal::PtrToStringUni($bData) + } + else + { + $rData = $true + } + + $Marshal::FreeHGlobal($bData) + return $rData +} + +function SlGetInfoSLID($AppId) +{ + $cReturnIds = 0 + $pReturnIds = 0 + + $ret = $Win32::SLGetSLIDList( + $hSLC, + 0, + [ref][Guid]$AppId, + 1, + [ref]$cReturnIds, + [ref]$pReturnIds + ) + + if ($ret -Or !$cReturnIds) + { + return + } + + $a1List = @() + $a2List = @() + $a3List = @() + $a4List = @() + + foreach ($i in 0..($cReturnIds - 1)) + { + $bytes = New-Object byte[] 16 + $Marshal::Copy([Int64]$pReturnIds + [Int64]16 * $i, $bytes, 0, 16) + $actid = ([Guid]$bytes).Guid + $gPPK = SlCheckInfo $actid "pkeyId" + $gAdd = SlCheckInfo $actid "DependsOn" + if ($All.IsPresent) { + if (!$gPPK -And $gAdd) { $a1List += @{id = $actid; pk = $null; ex = $true} } + if (!$gPPK -And !$gAdd) { $a2List += @{id = $actid; pk = $null; ex = $false} } + } + if ($gPPK -And $gAdd) { $a3List += @{id = $actid; pk = $gPPK; ex = $true} } + if ($gPPK -And !$gAdd) { $a4List += @{id = $actid; pk = $gPPK; ex = $false} } + } + + $Marshal::FreeHGlobal($pReturnIds) + return ($a1List + $a2List + $a3List + $a4List) } function DetectSubscription { + try + { + $objSvc = New-Object PSObject + $wmiSvc = [wmisearcher]"SELECT SubscriptionType, SubscriptionStatus, SubscriptionEdition, SubscriptionExpiry FROM SoftwareLicensingService" + $wmiSvc.Options.Rewindable = $false + $wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { $objSvc | Add-Member 8 $_.Name $_.Value } + $wmiSvc.Dispose() + } + catch + { + return + } + if ($null -EQ $objSvc.SubscriptionType -Or $objSvc.SubscriptionType -EQ 120) { return } @@ -273,161 +594,188 @@ function DetectSubscription { } CONOUT "`nSubscription information:" - CONOUT " Edition: $SubMsgEdition" CONOUT " Type : $SubMsgType" CONOUT " Status : $SubMsgStatus" + CONOUT " Edition: $SubMsgEdition" CONOUT " Expiry : $SubMsgExpiry" } function DetectAdbaClient { + $propADBA | foreach { set $_ (SlGetInfoSku $ID $_) } CONOUT "`nAD Activation client information:" CONOUT " Object Name: $ADActivationObjectName" CONOUT " Domain Name: $ADActivationObjectDN" - CONOUT " CSVLK Extended PID: $ADActivationCsvlkPid" - CONOUT " CSVLK Activation ID: $ADActivationCsvlkSkuId" + CONOUT " CSVLK Extended PID: $ADActivationCsvlkPID" + CONOUT " CSVLK Activation ID: $ADActivationCsvlkSkuID" } function DetectAvmClient { + $propAVMA | foreach { set $_ (SlGetInfoSku $ID $_) } CONOUT "`nAutomatic VM Activation client information:" - if (-Not [String]::IsNullOrEmpty($IAID)) { - CONOUT " Guest IAID: $IAID" + if (-Not [String]::IsNullOrEmpty($InheritedActivationId)) { + CONOUT " Guest IAID: $InheritedActivationId" } else { CONOUT " Guest IAID: Not Available" } - if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostMachineName)) { - CONOUT " Host machine name: $AutomaticVMActivationHostMachineName" + if (-Not [String]::IsNullOrEmpty($InheritedActivationHostMachineName)) { + CONOUT " Host machine name: $InheritedActivationHostMachineName" } else { CONOUT " Host machine name: Not Available" } - if ($AutomaticVMActivationLastActivationTime.Substring(0,4) -NE "1601") { - $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($AutomaticVMActivationLastActivationTime),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') - CONOUT " Activation time: $EED UTC" - } else { - CONOUT " Activation time: Not Available" - } - if (-Not [String]::IsNullOrEmpty($AutomaticVMActivationHostDigitalPid2)) { - CONOUT " Host Digital PID2: $AutomaticVMActivationHostDigitalPid2" + if (-Not [String]::IsNullOrEmpty($InheritedActivationHostDigitalPid2)) { + CONOUT " Host Digital PID2: $InheritedActivationHostDigitalPid2" } else { CONOUT " Host Digital PID2: Not Available" } + if ($InheritedActivationActivationTime) { + $IAAT = [DateTime]::FromFileTime($InheritedActivationActivationTime).ToString('yyyy-MM-dd hh:mm:ss tt') + CONOUT " Activation time: $IAAT" + } else { + CONOUT " Activation time: Not Available" + } } function DetectKmsHost { + $IsKeyManagementService = SlGetInfoSvcApp $strApp 'IsKeyManagementService' + if (-Not $IsKeyManagementService) { + return + } + if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} + if ($Vista -Or $NT5) { - $KeyManagementServiceListeningPort = strGetRegistry $SLKeyPath "KeyManagementServiceListeningPort" - $KeyManagementServiceDnsPublishing = strGetRegistry $SLKeyPath "DisableDnsPublishing" - $KeyManagementServiceLowPriority = strGetRegistry $SLKeyPath "EnableKmsLowPriority" - if (-Not $KeyManagementServiceDnsPublishing) {$KeyManagementServiceDnsPublishing = "TRUE"} - if (-Not $KeyManagementServiceLowPriority) {$KeyManagementServiceLowPriority = "FALSE"} + $regk = $SLKeyPath + } elseif ($strSLP -EQ $oslp) { + $regk = $OPKeyPath } else { - $KeyManagementServiceListeningPort = $objSvc.KeyManagementServiceListeningPort - $KeyManagementServiceDnsPublishing = $objSvc.KeyManagementServiceDnsPublishing - $KeyManagementServiceLowPriority = $objSvc.KeyManagementServiceLowPriority + $regk = $SPKeyPath + } + $KMSListening = strGetRegistry $regk "KeyManagementServiceListeningPort" + $KMSPublishing = strGetRegistry $regk "DisableDnsPublishing" + $KMSPriority = strGetRegistry $regk "EnableKmsLowPriority" + + if (-Not $KMSListening) {$KMSListening = 1688} + if (-Not $KMSPublishing) {$KMSPublishing = "TRUE"} else {$KMSPublishing = BoolToWStr (!$KMSPublishing)} + if (-Not $KMSPriority) {$KMSPriority = "FALSE"} else {$KMSPriority = BoolToWStr $KMSPriority} + + if ($KMSPublishing -EQ "TRUE") {$KMSPublishing = "Enabled"} else {$KMSPublishing = "Disabled"} + if ($KMSPriority -EQ "TRUE") {$KMSPriority = "Low"} else {$KMSPriority = "Normal"} + + if ($SLApp) + { + $propKMSServer | foreach { set $_ (SlGetInfoApp $strApp $_) } + } + else + { + $propKMSServer | foreach { set $_ (SlGetInfoService $_) } } - if (-Not $KeyManagementServiceListeningPort) {$KeyManagementServiceListeningPort = 1688} - if ($KeyManagementServiceDnsPublishing -EQ "TRUE") { - $KeyManagementServiceDnsPublishing = "Enabled" - } else { - $KeyManagementServiceDnsPublishing = "Disabled" - } - if ($KeyManagementServiceLowPriority -EQ "TRUE") { - $KeyManagementServiceLowPriority = "Low" - } else { - $KeyManagementServiceLowPriority = "Normal" - } + $KMSRequests = $KeyManagementServiceTotalRequests + $NoRequests = ($null -EQ $KMSRequests) -Or ($KMSRequests -EQ -1) -Or ($KMSRequests -EQ 4294967295) CONOUT "`nKey Management Service host information:" CONOUT " Current count: $KeyManagementServiceCurrentCount" - CONOUT " Listening on Port: $KeyManagementServiceListeningPort" - CONOUT " DNS publishing: $KeyManagementServiceDnsPublishing" - CONOUT " KMS priority: $KeyManagementServiceLowPriority" - if (-Not [String]::IsNullOrEmpty($KeyManagementServiceTotalRequests)) { - CONOUT "`nKey Management Service cumulative requests received from clients:" - CONOUT " Total: $KeyManagementServiceTotalRequests" - CONOUT " Failed: $KeyManagementServiceFailedRequests" - CONOUT " Unlicensed: $KeyManagementServiceUnlicensedRequests" - CONOUT " Licensed: $KeyManagementServiceLicensedRequests" - CONOUT " Initial grace period: $KeyManagementServiceOOBGraceRequests" - CONOUT " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests" - CONOUT " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests" - if ($null -NE $KeyManagementServiceNotificationRequests) {CONOUT " Notification: $KeyManagementServiceNotificationRequests"} + CONOUT " Listening on Port: $KMSListening" + CONOUT " DNS publishing: $KMSPublishing" + CONOUT " KMS priority: $KMSPriority" + if ($NoRequests) { + return } + CONOUT "`nKey Management Service cumulative requests received from clients:" + CONOUT " Total: $KeyManagementServiceTotalRequests" + CONOUT " Failed: $KeyManagementServiceFailedRequests" + CONOUT " Unlicensed: $KeyManagementServiceUnlicensedRequests" + CONOUT " Licensed: $KeyManagementServiceLicensedRequests" + CONOUT " Initial grace period: $KeyManagementServiceOOBGraceRequests" + CONOUT " Expired or Hardware out of tolerance: $KeyManagementServiceOOTGraceRequests" + CONOUT " Non-genuine grace period: $KeyManagementServiceNonGenuineGraceRequests" + if ($null -NE $KeyManagementServiceNotificationRequests) {CONOUT " Notification: $KeyManagementServiceNotificationRequests"} } function DetectKmsClient { - if ($null -NE $VLActivationTypeEnabled) {CONOUT "Configured Activation Type: $($VLActTypes[$VLActivationTypeEnabled])"} + if ($strSLP -EQ $wslp -And $NT8) + { + $VLType = strGetRegistry ($SPKeyPath + '\' + $strApp + '\' + $ID) "VLActivationType" + if ($null -EQ $VLType) {$VLType = strGetRegistry ($SPKeyPath + '\' + $strApp) "VLActivationType"} + if ($null -EQ $VLType) {$VLType = strGetRegistry ($SPKeyPath) "VLActivationType"} + if ($null -EQ $VLType -Or $VLType -GT 3) {$VLType = 0} + } + if ($null -NE $VLType) {CONOUT "Configured Activation Type: $($VLActTypes[$VLType])"} + CONOUT "`r" if ($LicenseStatus -NE 1) { CONOUT "Please activate the product in order to update KMS client information values." return } - if ($Vista) { - $KeyManagementServicePort = strGetRegistry $SLKeyPath "KeyManagementServicePort" - $DiscoveredKeyManagementServiceMachineName = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServiceName" - $DiscoveredKeyManagementServiceMachinePort = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServicePort" + if ($NT7 -Or $strSLP -EQ $oslp) { + $propKMSClient | foreach { set $_ (SlGetInfoSku $ID $_) } + if ($strSLP -EQ $oslp) {$regk = $OPKeyPath} else {$regk = $SPKeyPath} + $KMSCaching = strGetRegistry $regk "DisableKeyManagementServiceHostCaching" + if (-Not $KMSCaching) {$KMSCaching = "TRUE"} else {$KMSCaching = BoolToWStr (!$KMSCaching)} } - if ([String]::IsNullOrEmpty($KeyManagementServiceMachine)) { + "ClientMachineID" | foreach { set $_ (SlGetInfoService $_) } + + if ($Vista) { + $propKMSVista | foreach { set $_ (SlGetInfoService $_) } + $KeyManagementServicePort = strGetRegistry $SLKeyPath "KeyManagementServicePort" + $DiscoveredKeyManagementServiceName = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServiceName" + $DiscoveredKeyManagementServicePort = strGetRegistry $NSKeyPath "DiscoveredKeyManagementServicePort" + } + + if ([String]::IsNullOrEmpty($KeyManagementServiceName)) { $KmsReg = $null } else { if (-Not $KeyManagementServicePort) {$KeyManagementServicePort = 1688} - $KmsReg = "Registered KMS machine name: ${KeyManagementServiceMachine}:${KeyManagementServicePort}" + $KmsReg = "Registered KMS machine name: ${KeyManagementServiceName}:${KeyManagementServicePort}" } - if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceMachineName)) { + if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceName)) { $KmsDns = "DNS auto-discovery: KMS name not available" if ($Vista -And -Not $Admin) {$KmsDns = "DNS auto-discovery: Run the script as administrator to retrieve info"} } else { - if (-Not $DiscoveredKeyManagementServiceMachinePort) {$DiscoveredKeyManagementServiceMachinePort = 1688} - $KmsDns = "KMS machine name from DNS: ${DiscoveredKeyManagementServiceMachineName}:${DiscoveredKeyManagementServiceMachinePort}" + if (-Not $DiscoveredKeyManagementServicePort) {$DiscoveredKeyManagementServicePort = 1688} + $KmsDns = "KMS machine name from DNS: ${DiscoveredKeyManagementServiceName}:${DiscoveredKeyManagementServicePort}" } - if ($null -NE $objSvc.KeyManagementServiceHostCaching) { - if ($objSvc.KeyManagementServiceHostCaching -EQ "TRUE") { - $KeyManagementServiceHostCaching = "Enabled" - } else { - $KeyManagementServiceHostCaching = "Disabled" + if ($null -NE $KMSCaching) { + if ($KMSCaching -EQ "TRUE") {$KMSCaching = "Enabled"} else {$KMSCaching = "Disabled"} + } + + if ($strSLP -EQ $wslp -And $NT9) { + if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceIpAddress)) { + $DiscoveredKeyManagementServiceIpAddress = "not available" } } CONOUT "Key Management Service client information:" - CONOUT " Client Machine ID (CMID): $($objSvc.ClientMachineID)" + CONOUT " Client Machine ID (CMID): $ClientMachineID" if ($null -EQ $KmsReg) { CONOUT " $KmsDns" CONOUT " Registered KMS machine name: KMS name not available" } else { CONOUT " $KmsReg" } - if ($null -NE $DiscoveredKeyManagementServiceMachineIpAddress) {CONOUT " KMS machine IP address: $DiscoveredKeyManagementServiceMachineIpAddress"} - CONOUT " KMS machine extended PID: $KeyManagementServiceProductKeyID" + if ($null -NE $DiscoveredKeyManagementServiceIpAddress) {CONOUT " KMS machine IP address: $DiscoveredKeyManagementServiceIpAddress"} + CONOUT " KMS machine extended PID: $CustomerPID" CONOUT " Activation interval: $VLActivationInterval minutes" CONOUT " Renewal interval: $VLRenewalInterval minutes" - if ($null -NE $KeyManagementServiceHostCaching) {CONOUT " KMS host caching: $KeyManagementServiceHostCaching"} + if ($null -NE $KMSCaching) {CONOUT " KMS host caching: $KMSCaching"} if (-Not [String]::IsNullOrEmpty($KeyManagementServiceLookupDomain)) {CONOUT " KMS SRV record lookup domain: $KeyManagementServiceLookupDomain"} } -function GetResult($strSLP, $strSLS, $strID) +function GetResult($strSLP, $strApp, $entry) { - try - { - $objPrd = [wmisearcher]"SELECT * FROM $strSLP WHERE ID='$strID'" - $objPrd.Options.Rewindable = $false - $objPrd.Get() | select -Expand Properties -EA 0 | foreach { if (-Not [String]::IsNullOrEmpty($_.Value)) {set $_.Name $_.Value} } - $objPrd.Dispose() - } - catch - { - return - } + $ID = $entry.id + $propPrd | foreach { set $_ (SlGetInfoSku $ID $_) } + . SlGetInfoLicensing $strApp $ID - $winID = ($ApplicationID -EQ $winApp) - $winPR = ($winID -And -Not $LicenseIsAddon) + $winID = ($strApp -EQ $winApp) + $winPR = ($winID -And -Not $entry.ex) $Vista = ($winID -And $NT6 -And -Not $NT7) $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) $reapp = ("Windows", "App")[!$winID] @@ -437,16 +785,15 @@ function GetResult($strSLP, $strSLS, $strID) if ($Description | Select-String "TIMEBASED_") {$cTblClient = 1; $_mTag = "Timebased"} if ($Description | Select-String "VIRTUAL_MACHINE_ACTIVATION") {$cAvmClient = 1; $_mTag = "Automatic VM"} if ($null -EQ $cKmsClient) { - if ($Description | Select-String "VOLUME_KMS") {$cKmsHost = 1} + if ($Description | Select-String "VOLUME_KMS") {$cKmsServer = 1} } $_gpr = [Math]::Round($GracePeriodRemaining/1440) if ($_gpr -GT 0) { - $_xpr = [DateTime]::Now.addMinutes($GracePeriodRemaining).ToString('yyyy-MM-dd hh:mm:ss tt') + $_xpr = [DateTime]::Now.AddMinutes($GracePeriodRemaining).ToString('yyyy-MM-dd hh:mm:ss tt') } - if ($null -EQ $LicenseStatusReason) {$LicenseStatusReason = -1} - $LicenseReason = '0x{0:X}' -f $LicenseStatusReason + $LicenseReason = '0x{0:X}' -f $hrReason $LicenseMsg = "Time remaining: $GracePeriodRemaining minute(s) ($_gpr day(s))" if ($LicenseStatus -EQ 0) { $LicenseInf = "Unlicensed" @@ -454,8 +801,8 @@ function GetResult($strSLP, $strSLS, $strID) } if ($LicenseStatus -EQ 1) { $LicenseInf = "Licensed" - $LicenseMsg = $null if ($GracePeriodRemaining -EQ 0) { + $LicenseMsg = $null $ExpireMsg = "The $prmnt is permanently activated." } else { $LicenseMsg = "$_mTag activation expiration: $GracePeriodRemaining minute(s) ($_gpr day(s))" @@ -490,24 +837,54 @@ function GetResult($strSLP, $strSLS, $strID) if ($null -NE $_xpr) {$ExpireMsg = "Extended grace period ends $_xpr"} } - if ($winPR -And $PartialProductKey -And -Not $NT9) { - $dp4 = strGetRegistry "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" "DigitalProductId4" - if ($null -NE $dp4) { - $ProductKeyChannel = ([System.Text.Encoding]::Unicode.GetString($dp4, 1016, 128)).Trim([char]$null) + $pkid = $entry.pk + if ($null -NE $pkid) { + $propPkey | foreach { set $_ (SlGetInfoPKey $pkid $_) } + } + + if ($winPR -And $null -NE $PartialProductKey -And -Not $NT8) { + $uxd = SlGetInfoSku $ID 'UXDifferentiator' + $script:primary += @{ + aid = $ID; + ppk = $PartialProductKey; + chn = $Channel; + lst = $LicenseStatus; + lcr = $hrReason; + ged = $GracePeriodRemaining; + evl = $EvaluationEndDate; + dff = $uxd } } - if ($winPR -And $Dlv -And $NT7 -And $null -EQ $RemainingAppReArmCount) { - try + if ($IID -And $null -NE $PartialProductKey) { + $OfflineInstallationId = SlGetInfoIID $ID + } + + if ($Dlv) { + if ($strSLP -EQ $wslp -And $NT8) { - $tmp = [wmisearcher]"SELECT RemainingWindowsReArmCount FROM $strSLS" - $tmp.Options.Rewindable = $false - $tmp.Get() | select -Expand Properties -EA 0 | foreach {set $_.Name $_.Value} - $tmp.Dispose() + $RemainingSkuReArmCount = SlGetInfoSku $ID 'RemainingRearmCount' + $RemainingAppReArmCount = SlGetInfoApp $strApp 'RemainingRearmCount' } - catch + else { + if (($winID -And $NT7) -Or $strSLP -EQ $oslp) + { + $RemainingSLReArmCount = SlGetInfoApp $strApp 'RemainingRearmCount' + } + else + { + $RemainingSLReArmCount = SlGetInfoService 'RearmCount' + } } + if ($null -EQ $TrustedTime) + { + $TrustedTime = SlGetInfoSvcApp $strApp 'TrustedTime' + } + } + + if ($Dlv -Or $All.IsPresent) { + $gPHN = SlCheckInfo $ID "msft:sl/EUL/PHONE/PUBLIC" } $add_on = $Name.IndexOf("add-on for", 5) @@ -516,73 +893,56 @@ function GetResult($strSLP, $strSLS, $strID) if ($add_on -EQ -1) {CONOUT "Name: $Name"} else {CONOUT "Name: $($Name.Substring(0, $add_on + 7))"} CONOUT "Description: $Description" CONOUT "Activation ID: $ID" - if ($null -NE $ProductKeyID) {CONOUT "Extended PID: $ProductKeyID"} - if ($null -NE $ProductKeyID2 -And $Dlv) {CONOUT "Product ID: $ProductKeyID2"} + if ($null -NE $DigitalPID) {CONOUT "Extended PID: $DigitalPID"} + if ($null -NE $DigitalPID2 -And $Dlv) {CONOUT "Product ID: $DigitalPID2"} if ($null -NE $OfflineInstallationId -And $IID) {CONOUT "Installation ID: $OfflineInstallationId"} - if ($null -NE $ProductKeyChannel) {CONOUT "Product Key Channel: $ProductKeyChannel"} + if ($null -NE $Channel) {CONOUT "Product Key Channel: $Channel"} if ($null -NE $PartialProductKey) {CONOUT "Partial Product Key: $PartialProductKey"} CONOUT "License Status: $LicenseInf" if ($null -NE $LicenseMsg) {CONOUT "$LicenseMsg"} - if ($LicenseStatus -NE 0 -And $EvaluationEndDate.Substring(0,4) -NE "1601") { - $EED = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($EvaluationEndDate),$null,48).ToString('yyyy-MM-dd hh:mm:ss tt') + if ($LicenseStatus -NE 0 -And $EvaluationEndDate) { + $EED = [DateTime]::FromFileTimeUtc($EvaluationEndDate).ToString('yyyy-MM-dd hh:mm:ss tt') CONOUT "Evaluation End Date: $EED UTC" } + if ($LicenseStatus -NE 1 -And $null -NE $gPHN) { + $gPHN = $gPHN.ToString() + CONOUT "Phone activatable: $gPHN" + } if ($Dlv) { - if ($null -NE $RemainingWindowsReArmCount) { - CONOUT "Remaining Windows rearm count: $RemainingWindowsReArmCount" + if ($null -NE $RemainingSLReArmCount) { + CONOUT "Remaining $reapp rearm count: $RemainingSLReArmCount" } - if ($null -NE $RemainingSkuReArmCount -And $RemainingSkuReArmCount -NE 4294967295) { + if ($null -NE $RemainingSkuReArmCount) { CONOUT "Remaining $reapp rearm count: $RemainingAppReArmCount" CONOUT "Remaining SKU rearm count: $RemainingSkuReArmCount" } - if ($null -NE $TrustedTime -And $LicenseStatus -NE 0) { - $TTD = [DateTime]::Parse([Management.ManagementDateTimeConverter]::ToDateTime($TrustedTime),$null,32).ToString('yyyy-MM-dd hh:mm:ss tt') + if ($LicenseStatus -NE 0 -And $TrustedTime) { + $TTD = [DateTime]::FromFileTime($TrustedTime).ToString('yyyy-MM-dd hh:mm:ss tt') CONOUT "Trusted time: $TTD" } } - if ($LicenseStatus -EQ 0) { + if ($null -EQ $PartialProductKey) { return } - if ($strSLP -EQ $wslp -And $null -NE $PartialProductKey -And $null -NE $ADActivationObjectName -And $VLActivationType -EQ 1) { + if ($strSLP -EQ $wslp -And $NT8 -And $VLActivationType -EQ 1) { DetectAdbaClient } - if ($winID -And $null -NE $cAvmClient -And $null -NE $PartialProductKey) { + if ($winID -And $null -NE $cAvmClient) { DetectAvmClient } $chkSub = ($winPR -And $cSub) - $chkSLS = ($null -NE $PartialProductKey) -And ($null -NE $cKmsClient -Or $null -NE $cKmsHost -Or $chkSub) + $chkSLS = ($null -NE $cKmsClient -Or $null -NE $cKmsServer -Or $chkSub) if (!$chkSLS) { if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} return } - try - { - $objSvc = New-Object PSObject - $wmiSvc = [wmisearcher]"SELECT * FROM $strSLS" - $wmiSvc.Options.Rewindable = $false - $wmiSvc.Get() | select -Expand Properties -EA 0 | foreach { if (-Not [String]::IsNullOrEmpty($_.Value)) {$objSvc | Add-Member 8 $_.Name $_.Value} } - $wmiSvc.Dispose() - if ($null -EQ $IsKeyManagementServiceMachine) {$objSvc.PSObject.Properties | foreach {set $_.Name $_.Value}} - } - catch - { - return - } - - if ($strSLS -EQ $wsls -And $NT9) { - if ([String]::IsNullOrEmpty($DiscoveredKeyManagementServiceMachineIpAddress)) { - $DiscoveredKeyManagementServiceMachineIpAddress = "not available" - } - } - - if ($null -NE $cKmsHost -And $IsKeyManagementServiceMachine -GT 0) { - if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} + if ($null -NE $cKmsServer) { DetectKmsHost } @@ -590,7 +950,7 @@ function GetResult($strSLP, $strSLS, $strID) DetectKmsClient } - if ($null -EQ $cKmsHost) { + if ($null -EQ $cKmsServer) { if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} } @@ -599,6 +959,16 @@ function GetResult($strSLP, $strSLS, $strID) } } + +function ParseList($strSLP, $strApp, $arrList) +{ + foreach ($entry in $arrList) + { + GetResult $strSLP $strApp $entry + CONOUT "$line3" + & $noAll + } +} #endregion #region vNextDiag @@ -817,31 +1187,6 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #> -function BoolToWStr($bVal) { - ("TRUE", "FALSE")[!$bVal] -} - -function InitializePInvoke { - $Marshal = [System.Runtime.InteropServices.Marshal] - $Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 'Run').DefineDynamicModule((Get-Random)) - - $Class = $Module.DefineType('NativeMethods', 'Public, Abstract, Sealed, BeforeFieldInit', [Object], 0) - $Class.DefinePInvokeMethod('SLIsWindowsGenuineLocal', 'slc.dll', 'Public, Static', 'Standard', [Int32], @([UInt32].MakeByRefType()), 'Winapi', 'Unicode').SetImplementationFlags('PreserveSig') - $Class.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType()), 1, 3).SetImplementationFlags(128) - $Class.DefinePInvokeMethod('SLGetWindowsInformation', 'slc.dll', 22, 1, [Int32], @([String], [UInt32].MakeByRefType(), [UInt32].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) - - if ($DllSubscription) { - $Class.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) - $Struct = $Class.DefineNestedType('SubStatus', 'NestedPublic, SequentialLayout, Sealed, BeforeFieldInit', [ValueType], 0) - [void]$Struct.DefineField('dwEnabled', [UInt32], 'Public') - [void]$Struct.DefineField('dwSku', [UInt32], 6) - [void]$Struct.DefineField('dwState', [UInt32], 6) - $SubStatus = $Struct.CreateType() - } - - $Win32 = $Class.CreateType() -} - function InitializeDigitalLicenseCheck { $CAB = [System.Reflection.Emit.CustomAttributeBuilder] @@ -896,36 +1241,29 @@ function PrintLastActivationHResult { } function PrintLastActivationTime { - $pdwLastTime = 0 + $pqwLastTime = 0 $cbSize = 0 if ($Win32::SLGetWindowsInformation( "Security-SPP-LastWindowsActivationTime", [ref]$null, [ref]$cbSize, - [ref]$pdwLastTime + [ref]$pqwLastTime )) { return $FALSE } - $actTime = $Marshal::ReadInt64($pdwLastTime) + $actTime = $Marshal::ReadInt64($pqwLastTime) if ($actTime -ne 0) { CONOUT (" LastActivationTime={0}" -f [DateTime]::FromFileTimeUtc($actTime).ToString("yyyy/MM/dd:HH:mm:ss")) } - $Marshal::FreeHGlobal($pdwLastTime) + $Marshal::FreeHGlobal($pqwLastTime) return $TRUE } function PrintIsWindowsGenuine { $dwGenuine = 0 - $ppwszGenuineStates = @( - "SL_GEN_STATE_IS_GENUINE", - "SL_GEN_STATE_INVALID_LICENSE", - "SL_GEN_STATE_TAMPERED", - "SL_GEN_STATE_OFFLINE", - "SL_GEN_STATE_LAST" - ) if ($Win32::SLIsWindowsGenuineLocal([ref]$dwGenuine)) { return $FALSE @@ -1022,6 +1360,126 @@ function ClicRun } #endregion +#region clc +function clcGetExpireKrn +{ + $tData = 0 + $cData = 0 + $bData = 0 + + $ret = $Win32::SLGetWindowsInformation( + "Kernel-ExpirationDate", + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + if ($ret -Or !$cData -Or $tData -NE 3) + { + return $null + } + + $year = $Marshal::ReadInt16($bData, 0) + if ($year -EQ 0 -Or $year -EQ 1601) + { + $rData = $null + } + else + { + $rData = '{0}/{1}/{2}:{3}:{4}:{5}' -f $year, $Marshal::ReadInt16($bData, 2), $Marshal::ReadInt16($bData, 4), $Marshal::ReadInt16($bData, 6), $Marshal::ReadInt16($bData, 8), $Marshal::ReadInt16($bData, 10) + } + + $Marshal::FreeHGlobal($bData) + return $rData +} + +function clcGetExpireSys +{ + $kuser = $Marshal::ReadInt64((New-Object IntPtr(0x7FFE02C8))) + + if ($kuser -EQ 0) + { + return $null + } + + $rData = [DateTime]::FromFileTimeUTC($kuser).ToString('yyyy/MM/dd:HH:mm:ss') + return $rData +} + +function clcGetLicensingState($dwState) +{ + if ($dwState -EQ 5) { + $dwState = 3 + } elseif ($dwState -EQ 3 -Or $dwState -EQ 4 -Or $dwState -EQ 6) { + $dwState = 2 + } elseif ($dwState -GT 6) { + $dwState = 4 + } + + $rData = '{0}' -f $ppwszLicensingStates[$dwState] + return $rData +} + +function clcGetGenuineState($AppId) +{ + $dwGenuine = 0 + + if ($NT7) { + $ret = $Win32::SLIsWindowsGenuineLocal([ref]$dwGenuine) + } else { + $ret = $Win32::SLIsGenuineLocal([ref][Guid]$AppId, [ref]$dwGenuine, 0) + } + + if ($ret) + { + $dwGenuine = 4 + } + + if ($dwGenuine -LT 5) { + $rData = '{0}' -f $ppwszGenuineStates[$dwGenuine] + } else { + $rData = $dwGenuine + } + return $rData +} + +function ClcRun +{ + $prs = $script:primary[0] + if ($null -EQ $prs) { + return + } + + $lState = clcGetLicensingState $prs.lst + $uState = clcGetGenuineState $winApp + $TbbKrn = clcGetExpireKrn + $TbbSys = clcGetExpireSys + if ($null -NE $TbbKrn) { + $ked = $TbbKrn + } elseif ($null -NE $TbbSys) { + $ked = $TbbSys + } + + & $isAll + CONOUT "Client Licensing Check information:" + + CONOUT (" AppId={0}" -f $winApp) + if ($prs.ged) { CONOUT (" GraceEndDate={0}" -f ([DateTime]::UtcNow.AddMinutes($prs.ged).ToString('yyyy/MM/dd:HH:mm:ss'))) } + if ($null -NE $ked) { CONOUT (" KernelTimebombDate={0}" -f $ked) } + CONOUT (" LastConsumptionReason=0x{0:x8}" -f $prs.lcr) + if ($prs.evl) { CONOUT (" LicenseExpirationDate={0}" -f ([DateTime]::FromFileTimeUtc($prs.evl).ToString('yyyy/MM/dd:HH:mm:ss'))) } + CONOUT (" LicenseState={0}" -f $lState) + CONOUT (" PartialProductKey={0}" -f $prs.ppk) + CONOUT (" ProductKeyType={0}" -f $prs.chn) + CONOUT (" SkuId={0}" -f $prs.aid) + CONOUT (" uxDifferentiator={0}" -f $prs.dff) + CONOUT (" IsWindowsGenuine={0}" -f $uState) + + CONOUT "$line3" + & $noAll +} +#endregion + $Host.UI.RawUI.WindowTitle = "Check Activation Status" if ($All.IsPresent) { $B=$Host.UI.RawUI.BufferSize;$B.Height=3000;$Host.UI.RawUI.BufferSize=$B; @@ -1040,14 +1498,38 @@ $osls = "OfficeSoftwareProtectionService" $winApp = "55c92734-d682-4d71-983e-d6ec3f16059f" $o14App = "59a52881-a989-479d-af46-f275c6370663" $o15App = "0ff1ce15-a989-479d-af46-f275c6370663" -$cSub = ($winbuild -GE 19041) -And (Select-String -Path "$SysPath\wbem\sppwmi.mof" -Encoding unicode -Pattern "SubscriptionType") +$cSub = ($winbuild -GE 26000) -And (Select-String -Path "$SysPath\wbem\sppwmi.mof" -Encoding unicode -Pattern "SubscriptionType") $DllDigital = ($winbuild -GE 14393) -And (Test-Path "$SysPath\EditionUpgradeManagerObj.dll") $DllSubscription = ($winbuild -GE 14393) -And (Test-Path "$SysPath\Clipc.dll") $VLActTypes = @("All", "AD", "KMS", "Token") +$OPKeyPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" +$SPKeyPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" $SLKeyPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" $NSKeyPath = "HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" +$propPrd = 'Name', 'Description', 'TrustedTime', 'VLActivationType' +$propPkey = 'PartialProductKey', 'Channel', 'DigitalPID', 'DigitalPID2' +$propKMSServer = 'KeyManagementServiceCurrentCount', 'KeyManagementServiceTotalRequests', 'KeyManagementServiceFailedRequests', 'KeyManagementServiceUnlicensedRequests', 'KeyManagementServiceLicensedRequests', 'KeyManagementServiceOOBGraceRequests', 'KeyManagementServiceOOTGraceRequests', 'KeyManagementServiceNonGenuineGraceRequests', 'KeyManagementServiceNotificationRequests' +$propKMSClient = 'CustomerPID', 'KeyManagementServiceName', 'KeyManagementServicePort', 'DiscoveredKeyManagementServiceName', 'DiscoveredKeyManagementServicePort', 'DiscoveredKeyManagementServiceIpAddress', 'VLActivationInterval', 'VLRenewalInterval', 'KeyManagementServiceLookupDomain' +$propKMSVista = 'CustomerPID', 'KeyManagementServiceName', 'VLActivationInterval', 'VLRenewalInterval' +$propADBA = 'ADActivationObjectName', 'ADActivationObjectDN', 'ADActivationCsvlkPID', 'ADActivationCsvlkSkuID' +$propAVMA = 'InheritedActivationId', 'InheritedActivationHostMachineName', 'InheritedActivationHostDigitalPid2', 'InheritedActivationActivationTime' +$primary = @() +$ppwszGenuineStates = @( + "SL_GEN_STATE_IS_GENUINE", + "SL_GEN_STATE_INVALID_LICENSE", + "SL_GEN_STATE_TAMPERED", + "SL_GEN_STATE_OFFLINE", + "SL_GEN_STATE_LAST" +) +$ppwszLicensingStates = @( + "SL_LICENSING_STATUS_UNLICENSED", + "SL_LICENSING_STATUS_LICENSED", + "SL_LICENSING_STATUS_IN_GRACE_PERIOD", + "SL_LICENSING_STATUS_NOTIFICATION", + "SL_LICENSING_STATUS_LAST" +) -'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ $false} +'cW1nd0ws', 'c0ff1ce15', 'c0ff1ce14', 'ospp14', 'ospp15' | foreach {set $_ @()} $offsvc = "osppsvc" if ($NT7 -Or -Not $NT6) {$winsvc = "sppsvc"} else {$winsvc = "slsvc"} @@ -1055,83 +1537,102 @@ if ($NT7 -Or -Not $NT6) {$winsvc = "sppsvc"} else {$winsvc = "slsvc"} try {gsv $winsvc -EA 1 | Out-Null; $WsppHook = 1} catch {$WsppHook = 0} try {gsv $offsvc -EA 1 | Out-Null; $OsppHook = 1} catch {$OsppHook = 0} -if ($WsppHook -NE 0) { - try {sasv $winsvc -EA 1} catch {} - $cW1nd0ws = DetectID $wslp $winApp - $c0ff1ce15 = DetectID $wslp $o15App - $c0ff1ce14 = DetectID $wslp $o14App +if (Test-Path "$SysPath\sppc.dll") { + $SLdll = 'sppc.dll' +} elseif (Test-Path "$SysPath\slc.dll") { + $SLdll = 'slc.dll' +} else { + $WsppHook = 0 } if ($OsppHook -NE 0) { - try {sasv $offsvc -EA 1} catch {} - $ospp15 = DetectID $oslp $o15App - $ospp14 = DetectID $oslp $o14App + $OLdll = (strGetRegistry $OPKeyPath "Path") + 'osppc.dll' + if (!(Test-Path "$OLdll")) {$OsppHook = 0} } -if ($cW1nd0ws) +if ($WsppHook -NE 0) { + if ($NT6 -And -Not $NT7 -And -Not $Admin) { + if ($null -EQ [Diagnostics.Process]::GetProcessesByName("$winsvc")[0].ProcessName) {$WsppHook = 0; CONOUT "`nError: failed to start $winsvc Service.`n"} + } else { + try {sasv $winsvc -EA 1} catch {$WsppHook = 0; CONOUT "`nError: failed to start $winsvc Service.`n"} + } +} + +if ($WsppHook -NE 0) { + . InitializePInvoke $SLdll $false + $hSLC = 0 + [void]$Win32::SLOpen([ref]$hSLC) + + $cW1nd0ws = SlGetInfoSLID $winApp + $c0ff1ce15 = SlGetInfoSLID $o15App + $c0ff1ce14 = SlGetInfoSLID $o14App +} + +if ($cW1nd0ws.Count -GT 0) { echoWindows - GetID $wslp $winApp | foreach -EA 1 { - GetResult $wslp $wsls $_ - CONOUT "$line3" - & $noAll - } + ParseList $wslp $winApp $cW1nd0ws } elseif ($NT6) { echoWindows - CONOUT "`nError: product key not found." + CONOUT "Error: product key not found.`n" } -if ($winbuild -GE 9200) { - . InitializePInvoke +if ($NT6 -And -Not $NT8) { + ClcRun +} + +if ($NT8) { ClicRun } -if ($c0ff1ce15 -Or $ospp15) { - CheckOhook -} - $doMSG = 1 -if ($c0ff1ce15) +if ($c0ff1ce15.Count -GT 0) { + CheckOhook echoOffice - GetID $wslp $o15App | foreach -EA 1 { - GetResult $wslp $wsls $_ - CONOUT "$line3" - & $noAll - } + ParseList $wslp $o15App $c0ff1ce15 } -if ($c0ff1ce14) +if ($c0ff1ce14.Count -GT 0) { echoOffice - GetID $wslp $o14App | foreach -EA 1 { - GetResult $wslp $wsls $_ - CONOUT "$line3" - & $noAll - } + ParseList $wslp $o14App $c0ff1ce14 } -if ($ospp15) -{ - echoOffice - GetID $oslp $o15App | foreach -EA 1 { - GetResult $oslp $osls $_ - CONOUT "$line3" - & $noAll - } +if ($hSLC) { + [void]$Win32::SLClose($hSLC) } -if ($ospp14) +if ($OsppHook -NE 0) { + try {sasv $offsvc -EA 1} catch {$OsppHook = 0; CONOUT "`nError: failed to start $offsvc Service.`n"} +} + +if ($OsppHook -NE 0) { + . InitializePInvoke "$OLdll" $true + $hSLC = 0 + [void]$Win32::SLOpen([ref]$hSLC) + + $ospp15 = SlGetInfoSLID $o15App + $ospp14 = SlGetInfoSLID $o14App +} + +if ($ospp15.Count -GT 0) { echoOffice - GetID $oslp $o14App | foreach -EA 1 { - GetResult $oslp $osls $_ - CONOUT "$line3" - & $noAll - } + ParseList $oslp $o15App $ospp15 +} + +if ($ospp14.Count -GT 0) +{ + echoOffice + ParseList $oslp $o14App $ospp14 +} + +if ($hSLC) { + [void]$Win32::SLClose($hSLC) } if ($NT7) { From 70162c413026ec938f1049b1e4011ac64945e31e Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 16 Apr 2025 05:30:31 +0530 Subject: [PATCH 104/132] Add support for external LibTSforge.dll if found in BIN folder --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 28 +++++++++++++------ .../Activators/TSforge_Activation.cmd | 28 +++++++++++++------ 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index b5a94e7..7f7bb7a 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -154,6 +154,7 @@ goto dk_done set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" +set "_workp=%_work:'=''%" set "_batf=%~f0" set "_batp=%_batf:'=''%" @@ -8826,17 +8827,26 @@ namespace LibTSforge.PhysicalStore } '@ $ErrorActionPreference = 'Stop' -$cp = [CodeDom.Compiler.CompilerParameters] [string[]]@("System.dll", "System.Core.dll", "System.ServiceProcess.dll", "System.Xml.dll") -$cp.CompilerOptions = "/unsafe" -$lang = If ((Get-Host).Version.Major -gt 2) { "CSharp" } Else { "CSharpVersion3" } +$binPath = Join-Path -Path $env:_workp -ChildPath "BIN\LibTSforge.dll" -$ctemp = "$env:SystemRoot\Temp\" -if (-Not (Test-Path -Path $ctemp)) { New-Item -Path $ctemp -ItemType Directory > $null } -$env:TMP = $ctemp -$env:TEMP = $ctemp +if (Test-Path -Path $binPath) { + Write-Host "LibTSforge.dll found in BIN folder. Loading the DLL..." + Add-Type -Path $binPath +} +else { + $cp = [CodeDom.Compiler.CompilerParameters] [string[]]@("System.dll", "System.Core.dll", "System.ServiceProcess.dll", "System.Xml.dll") + $cp.CompilerOptions = "/unsafe" + $lang = If ((Get-Host).Version.Major -gt 2) { "CSharp" } Else { "CSharpVersion3" } + + $ctemp = "$env:SystemRoot\Temp\" + if (-Not (Test-Path -Path $ctemp)) { New-Item -Path $ctemp -ItemType Directory > $null } + $env:TMP = $ctemp + $env:TEMP = $ctemp + + $cp.GenerateInMemory = $true + Add-Type -Language $lang -TypeDefinition $src -CompilerParameters $cp +} -$cp.GenerateInMemory = $true -Add-Type -Language $lang -TypeDefinition $src -CompilerParameters $cp if ($env:_debug -eq '0') { [LibTSforge.Logger]::HideOutput = $true } diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 7da980b..8d79784 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -221,6 +221,7 @@ goto dk_done set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" +set "_workp=%_work:'=''%" set "_batf=%~f0" set "_batp=%_batf:'=''%" @@ -6709,17 +6710,26 @@ namespace LibTSforge.PhysicalStore } '@ $ErrorActionPreference = 'Stop' -$cp = [CodeDom.Compiler.CompilerParameters] [string[]]@("System.dll", "System.Core.dll", "System.ServiceProcess.dll", "System.Xml.dll") -$cp.CompilerOptions = "/unsafe" -$lang = If ((Get-Host).Version.Major -gt 2) { "CSharp" } Else { "CSharpVersion3" } +$binPath = Join-Path -Path $env:_workp -ChildPath "BIN\LibTSforge.dll" -$ctemp = "$env:SystemRoot\Temp\" -if (-Not (Test-Path -Path $ctemp)) { New-Item -Path $ctemp -ItemType Directory > $null } -$env:TMP = $ctemp -$env:TEMP = $ctemp +if (Test-Path -Path $binPath) { + Write-Host "LibTSforge.dll found in BIN folder. Loading the DLL..." + Add-Type -Path $binPath +} +else { + $cp = [CodeDom.Compiler.CompilerParameters] [string[]]@("System.dll", "System.Core.dll", "System.ServiceProcess.dll", "System.Xml.dll") + $cp.CompilerOptions = "/unsafe" + $lang = If ((Get-Host).Version.Major -gt 2) { "CSharp" } Else { "CSharpVersion3" } + + $ctemp = "$env:SystemRoot\Temp\" + if (-Not (Test-Path -Path $ctemp)) { New-Item -Path $ctemp -ItemType Directory > $null } + $env:TMP = $ctemp + $env:TEMP = $ctemp + + $cp.GenerateInMemory = $true + Add-Type -Language $lang -TypeDefinition $src -CompilerParameters $cp +} -$cp.GenerateInMemory = $true -Add-Type -Language $lang -TypeDefinition $src -CompilerParameters $cp if ($env:_debug -eq '0') { [LibTSforge.Logger]::HideOutput = $true } From e8bf344f745358e140b75dff677bb745e4a8cafa Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 16 Apr 2025 06:14:40 +0530 Subject: [PATCH 105/132] Add support for O365 15.0 in TSforge because phone license exist --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 6 +++++- .../Activators/TSforge_Activation.cmd | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 7f7bb7a..c9946e9 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -4832,7 +4832,11 @@ call :dk_color %Gray% "Skipping Because Project/Visio Mode [%%#]" if not defined skipprocess ( -echo %%# | findstr /i "O365" %nul% && ( +set no365= +if "%oVer%"=="15" (echo %%# | findstr /i "O365HomePremRetail" %nul% && set no365=1) +if "%oVer%"=="16" (echo %%# | findstr /i "O365" %nul% && set no365=1) + +if defined no365 ( set _License=MondoRetail set _altoffid=MondoRetail call :ks_osppready diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 8d79784..a4131f8 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -1611,7 +1611,11 @@ call :dk_color %Gray% "Skipping Because Project/Visio Mode [%%#]" if not defined skipprocess ( -echo %%# | findstr /i "O365" %nul% && ( +set no365= +if "%oVer%"=="15" (echo %%# | findstr /i "O365HomePremRetail" %nul% && set no365=1) +if "%oVer%"=="16" (echo %%# | findstr /i "O365" %nul% && set no365=1) + +if defined no365 ( set _License=MondoRetail set _altoffid=MondoRetail call :ks_osppready From a1614e128348a8e6953e318cc5f6522a1fa2621d Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Wed, 16 Apr 2025 08:03:58 +0530 Subject: [PATCH 106/132] Convert HomeStudentARM IDs to Mondo because phone license isn't available for them --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 11 +++++++++++ .../Activators/TSforge_Activation.cmd | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index c9946e9..cce246a 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -4781,6 +4781,7 @@ set _prids= set _config= set _version= set _License= +set _oMSI= exit /b ::======================================================================================================================================== @@ -4843,6 +4844,15 @@ call :ks_osppready echo Converting Unsupported O365 Office [%%# To MondoRetail] ) +if not defined _oMSI ( +echo %%# | findstr /i "ARM" %nul% && ( +set _License=MondoRetail +set _altoffid=MondoRetail +call :ks_osppready +echo Converting Unsupported OEM-ARM Office [%%# To MondoRetail] +) +) + set keytype=zero for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':offtsid\:.*';iex ($f[1])" %nul6%') do ( echo "%%a" | findstr /r ".*-.*-.*-.*-.*" %nul1% && (set tsids=!tsids! %%a& set _actid=%%a) @@ -4891,6 +4901,7 @@ exit /b call :ts_reset call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +set _oMSI=1 set oVer=%1 for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\InstallRoot /v Path" %nul6%') do (set "_oRoot=%%b") for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\ProductVersion /v LastProduct" %nul6%') do (set "_version=%%b") diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index a4131f8..641f92d 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -1500,6 +1500,7 @@ set _prids= set _config= set _version= set _License= +set _oMSI= exit /b ::======================================================================================================================================== @@ -1622,6 +1623,15 @@ call :ks_osppready echo Converting Unsupported O365 Office [%%# To MondoRetail] ) +if not defined _oMSI ( +echo %%# | findstr /i "ARM" %nul% && ( +set _License=MondoRetail +set _altoffid=MondoRetail +call :ks_osppready +echo Converting Unsupported OEM-ARM Office [%%# To MondoRetail] +) +) + set keytype=zero for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':offtsid\:.*';iex ($f[1])" %nul6%') do ( echo "%%a" | findstr /r ".*-.*-.*-.*-.*" %nul1% && (set tsids=!tsids! %%a& set _actid=%%a) @@ -1670,6 +1680,7 @@ exit /b call :ts_reset call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +set _oMSI=1 set oVer=%1 for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\InstallRoot /v Path" %nul6%') do (set "_oRoot=%%b") for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\ProductVersion /v LastProduct" %nul6%') do (set "_version=%%b") From 372eb73a02260cf4bc6fd424bcc6216fa8a15be2 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 17 Apr 2025 01:47:13 +0530 Subject: [PATCH 107/132] Add updated TSforge code --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 1953 ++++++++++++----- .../Activators/TSforge_Activation.cmd | 1953 ++++++++++++----- 2 files changed, 2844 insertions(+), 1062 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index cce246a..f180db7 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -4951,23 +4951,16 @@ $src = @' // Common.cs namespace LibTSforge { - using Microsoft.Win32; using System; using System.IO; using System.Linq; using System.Runtime.InteropServices; - using System.ServiceProcess; using System.Text; - using LibTSforge.Crypto; - using LibTSforge.PhysicalStore; - using LibTSforge.SPP; - using LibTSforge.TokenStore; public enum PSVersion { Vista, Win7, - Win8Early, Win8, WinBlue, WinModern @@ -5038,8 +5031,8 @@ namespace LibTSforge 0x92, 0xA6, 0x56, 0x96 }; - // 2^31 - 1 minutes - public static ulong TimerMax = (ulong)TimeSpan.FromMinutes(2147483647).Ticks; + // 2^31 - 8 minutes + public static readonly ulong TimerMax = (ulong)TimeSpan.FromMinutes(2147483640).Ticks; public static readonly string ZeroCID = new string('0', 48); } @@ -5107,20 +5100,6 @@ namespace LibTSforge } return result; } - - public static T CastToStruct(this byte[] data) where T : struct - { - GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); - try - { - IntPtr ptr = handle.AddrOfPinnedObject(); - return (T)Marshal.PtrToStructure(ptr, typeof(T)); - } - finally - { - handle.Free(); - } - } } public static class FileStreamExt @@ -5141,6 +5120,12 @@ namespace LibTSforge public static class Utils { + [DllImport("kernel32.dll")] + public static extern uint GetSystemDefaultLCID(); + + [DllImport("kernel32.dll")] + public static extern bool Wow64EnableWow64FsRedirection(bool Wow64FsEnableRedirection); + public static string DecodeString(byte[] data) { return Encoding.Unicode.GetString(data).Trim('\0'); @@ -5151,9 +5136,6 @@ namespace LibTSforge return Encoding.Unicode.GetBytes(str + '\0'); } - [DllImport("kernel32.dll")] - public static extern uint GetSystemDefaultLCID(); - public static uint CRC32(byte[] data) { const uint polynomial = 0x04C11DB7; @@ -5177,157 +5159,6 @@ namespace LibTSforge return ~crc; } - public static void KillSPP() - { - ServiceController sc; - - try - { - sc = new ServiceController("sppsvc"); - - if (sc.Status == ServiceControllerStatus.Stopped) - return; - } - catch (InvalidOperationException ex) - { - throw new InvalidOperationException("Unable to access sppsvc: " + ex.Message); - } - - Logger.WriteLine("Stopping sppsvc..."); - - bool stopped = false; - - for (int i = 0; stopped == false && i < 60; i++) - { - try - { - if (sc.Status != ServiceControllerStatus.StopPending) - sc.Stop(); - - sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromMilliseconds(500)); - } - catch (System.ServiceProcess.TimeoutException) - { - continue; - } - catch (InvalidOperationException) - { - System.Threading.Thread.Sleep(500); - continue; - } - - stopped = true; - } - - if (!stopped) - throw new System.TimeoutException("Failed to stop sppsvc"); - - Logger.WriteLine("sppsvc stopped successfully."); - } - - public static string GetPSPath(PSVersion version) - { - switch (version) - { - case PSVersion.Win7: - return Directory.GetFiles( - Environment.GetFolderPath(Environment.SpecialFolder.System), - "7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-8115-601632D005A0") - .FirstOrDefault() ?? ""; - case PSVersion.Win8Early: - case PSVersion.WinBlue: - case PSVersion.Win8: - case PSVersion.WinModern: - return Path.Combine( - Environment.ExpandEnvironmentVariables( - (string)Registry.GetValue( - @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", - "TokenStore", - string.Empty - ) - ), - "data.dat" - ); - default: - return ""; - } - } - - public static string GetTokensPath(PSVersion version) - { - switch (version) - { - case PSVersion.Win7: - return Path.Combine( - Environment.ExpandEnvironmentVariables("%WINDIR%"), - @"ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat" - ); - case PSVersion.Win8Early: - case PSVersion.WinBlue: - case PSVersion.Win8: - case PSVersion.WinModern: - return Path.Combine( - Environment.ExpandEnvironmentVariables( - (string)Registry.GetValue( - @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", - "TokenStore", - string.Empty - ) - ), - "tokens.dat" - ); - default: - return ""; - } - } - - public static IPhysicalStore GetStore(PSVersion version, bool production) - { - string psPath; - - try - { - psPath = GetPSPath(version); - } - catch - { - throw new FileNotFoundException("Failed to get path of physical store."); - } - - if (string.IsNullOrEmpty(psPath) || !File.Exists(psPath)) - { - throw new FileNotFoundException(string.Format("Physical store not found at expected path {0}.", psPath)); - } - - if (version == PSVersion.Vista) - { - throw new NotSupportedException("Physical store editing is not supported for Windows Vista."); - } - - return version == PSVersion.Win7 ? new PhysicalStoreWin7(psPath, production) : (IPhysicalStore)new PhysicalStoreModern(psPath, production, version); - } - - public static ITokenStore GetTokenStore(PSVersion version) - { - string tokPath; - - try - { - tokPath = GetTokensPath(version); - } - catch - { - throw new FileNotFoundException("Failed to get path of physical store."); - } - - if (string.IsNullOrEmpty(tokPath) || !File.Exists(tokPath)) - { - throw new FileNotFoundException(string.Format("Token store not found at expected path {0}.", tokPath)); - } - - return new TokenStoreModern(tokPath); - } - public static string GetArchitecture() { string arch = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE", EnvironmentVariableTarget.Machine).ToUpperInvariant(); @@ -5343,65 +5174,7 @@ namespace LibTSforge if (build >= 7600 && build <= 7602) return PSVersion.Win7; if (build == 9200) return PSVersion.Win8; - throw new NotSupportedException("Unable to auto-detect version info, please specify one manually using the /ver argument."); - } - - public static bool DetectCurrentKey() - { - SLApi.RefreshLicenseStatus(); - - using (RegistryKey wpaKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\WPA")) - { - foreach (string subKey in wpaKey.GetSubKeyNames()) - { - if (subKey.StartsWith("8DEC0AF1") && subKey.EndsWith("-1")) - { - return subKey.Contains("P"); - } - } - } - - throw new FileNotFoundException("Failed to autodetect key type, specify physical store key with /prod or /test arguments."); - } - - public static void DumpStore(PSVersion version, bool production, string filePath, string encrFilePath) - { - if (encrFilePath == null) - { - encrFilePath = GetPSPath(version); - } - - if (string.IsNullOrEmpty(encrFilePath) || !File.Exists(encrFilePath)) - { - throw new FileNotFoundException("Store does not exist at expected path '" + encrFilePath + "'."); - } - - KillSPP(); - - using (FileStream fs = File.Open(encrFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)) - { - byte[] encrData = fs.ReadAllBytes(); - File.WriteAllBytes(filePath, PhysStoreCrypto.DecryptPhysicalStore(encrData, production)); - } - - Logger.WriteLine("Store dumped successfully to '" + filePath + "'."); - } - - public static void LoadStore(PSVersion version, bool production, string filePath) - { - if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) - { - throw new FileNotFoundException("Store file '" + filePath + "' does not exist."); - } - - KillSPP(); - - using (IPhysicalStore store = GetStore(version, production)) - { - store.WriteRaw(File.ReadAllBytes(filePath)); - } - - Logger.WriteLine("Loaded store file succesfully."); + throw new NotSupportedException("Unable to auto-detect version info"); } } @@ -5494,8 +5267,8 @@ namespace LibTSforge.SPP public class PKeyConfig { - public Dictionary Products = new Dictionary(); - private List loadedPkeyConfigs = new List(); + public readonly Dictionary Products = new Dictionary(); + private readonly List loadedPkeyConfigs = new List(); public void LoadConfig(Guid actId) { @@ -5556,12 +5329,14 @@ namespace LibTSforge.SPP ranges[refActIdStr] = new List(); } - KeyRange keyRange = new KeyRange(); - keyRange.Start = int.Parse(rangeNode.SelectSingleNode("./p:Start", nsmgr).InnerText); - keyRange.End = int.Parse(rangeNode.SelectSingleNode("./p:End", nsmgr).InnerText); - keyRange.EulaType = rangeNode.SelectSingleNode("./p:EulaType", nsmgr).InnerText; - keyRange.PartNumber = rangeNode.SelectSingleNode("./p:PartNumber", nsmgr).InnerText; - keyRange.Valid = rangeNode.SelectSingleNode("./p:IsValid", nsmgr).InnerText.ToLower() == "true"; + KeyRange keyRange = new KeyRange + { + Start = int.Parse(rangeNode.SelectSingleNode("./p:Start", nsmgr).InnerText), + End = int.Parse(rangeNode.SelectSingleNode("./p:End", nsmgr).InnerText), + EulaType = rangeNode.SelectSingleNode("./p:EulaType", nsmgr).InnerText, + PartNumber = rangeNode.SelectSingleNode("./p:PartNumber", nsmgr).InnerText, + Valid = rangeNode.SelectSingleNode("./p:IsValid", nsmgr).InnerText.ToLower() == "true" + }; ranges[refActIdStr].Add(keyRange); } @@ -5575,15 +5350,17 @@ namespace LibTSforge.SPP if (keyRanges.Count > 0 && !Products.ContainsKey(refActId)) { - ProductConfig productConfig = new ProductConfig(); - productConfig.GroupId = group; - productConfig.Edition = configNode.SelectSingleNode("./p:EditionId", nsmgr).InnerText; - productConfig.Description = configNode.SelectSingleNode("./p:ProductDescription", nsmgr).InnerText; - productConfig.Channel = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText; - productConfig.Randomized = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText.ToLower() == "true"; - productConfig.Algorithm = algorithms[group]; - productConfig.Ranges = keyRanges; - productConfig.ActivationId = refActId; + ProductConfig productConfig = new ProductConfig + { + GroupId = group, + Edition = configNode.SelectSingleNode("./p:EditionId", nsmgr).InnerText, + Description = configNode.SelectSingleNode("./p:ProductDescription", nsmgr).InnerText, + Channel = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText, + Randomized = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText.ToLower() == "true", + Algorithm = algorithms[group], + Ranges = keyRanges, + ActivationId = refActId + }; Products[refActId] = productConfig; } @@ -5626,11 +5403,6 @@ namespace LibTSforge.SPP } } } - - public PKeyConfig() - { - - } } } @@ -5641,8 +5413,8 @@ namespace LibTSforge.SPP using System; using System.IO; using System.Linq; - using LibTSforge.Crypto; - using LibTSforge.PhysicalStore; + using Crypto; + using PhysicalStore; public class ProductKey { @@ -5656,11 +5428,11 @@ namespace LibTSforge.SPP public ulong Security; public bool Upgrade; public PKeyAlgorithm Algorithm; - public string EulaType; - public string PartNumber; - public string Edition; - public string Channel; - public Guid ActivationId; + public readonly string EulaType; + public readonly string PartNumber; + public readonly string Edition; + public readonly string Channel; + public readonly Guid ActivationId; private string mpc; private string pid2; @@ -5670,6 +5442,11 @@ namespace LibTSforge.SPP get { return BitConverter.GetBytes(klow).Concat(BitConverter.GetBytes(khigh)).ToArray(); } } + public ProductKey() + { + + } + public ProductKey(int serial, ulong security, bool upgrade, PKeyAlgorithm algorithm, ProductConfig config, KeyRange range) { Group = config.GroupId; @@ -5698,22 +5475,22 @@ namespace LibTSforge.SPP public Guid GetPkeyId() { - VariableBag pkb = new VariableBag(); - pkb.Blocks.AddRange(new CRCBlock[] + VariableBag pkb = new VariableBag(PSVersion.WinModern); + pkb.Blocks.AddRange(new[] { - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyBindingProductKey", ValueAsStr = ToString() }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = "SppPkeyBindingMiscData", Value = new byte[] { } }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyBindingAlgorithm", @@ -5724,16 +5501,6 @@ namespace LibTSforge.SPP return new Guid(CryptoUtils.SHA256Hash(pkb.Serialize()).Take(16).ToArray()); } - public string GetDefaultMPC() - { - int build = Environment.OSVersion.Version.Build; - string defaultMPC = build >= 10240 ? "03612" : - build >= 9600 ? "06401" : - build >= 9200 ? "05426" : - "55041"; - return defaultMPC; - } - public string GetMPC() { if (mpc != null) @@ -5741,10 +5508,15 @@ namespace LibTSforge.SPP return mpc; } - mpc = GetDefaultMPC(); + int build = Environment.OSVersion.Version.Build; + + mpc = build >= 10240 ? "03612" : + build >= 9600 ? "06401" : + build >= 9200 ? "05426" : + "55041"; // setup.cfg doesn't exist in Windows 8+ - string setupcfg = string.Format("{0}\\oobe\\{1}", Environment.SystemDirectory, "setup.cfg"); + string setupcfg = string.Format(@"{0}\oobe\{1}", Environment.SystemDirectory, "setup.cfg"); if (!File.Exists(setupcfg) || Edition.Contains(";")) { @@ -5882,17 +5654,17 @@ namespace LibTSforge.SPP { if (version == PSVersion.Win7) { - Random rnd = new Random(Group * 1000000000 + Serial); - byte[] data = new byte[8]; - rnd.NextBytes(data); - return data; + ulong shortauth = ((ulong)Group << 41) | (Security << 31) | ((ulong)Serial << 1) | (Upgrade ? (ulong)1 : 0); + return BitConverter.GetBytes(shortauth); } int serialHigh = Serial / 1000000; int serialLow = Serial % 1000000; BinaryWriter writer = new BinaryWriter(new MemoryStream()); - writer.Write(new Guid("B8731595-A2F6-430B-A799-FBFFB81A8D73").ToByteArray()); + string algoId = Algorithm == PKeyAlgorithm.PKEY2005 ? "B8731595-A2F6-430B-A799-FBFFB81A8D73" : "660672EF-7809-4CFD-8D54-41B7FB738988"; + + writer.Write(new Guid(algoId).ToByteArray()); writer.Write(Group); writer.Write(serialHigh); writer.Write(serialLow); @@ -5998,40 +5770,40 @@ namespace LibTSforge.SPP public static readonly Guid WINDOWS_APP_ID = new Guid("55c92734-d682-4d71-983e-d6ec3f16059f"); - [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + [DllImport("slc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] private static extern void SLOpen(out IntPtr hSLC); - [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + [DllImport("slc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] private static extern void SLClose(IntPtr hSLC); [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetWindowsInformationDWORD(string ValueName, ref int Value); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLInstallProofOfPurchase(IntPtr hSLC, string pwszPKeyAlgorithm, string pwszPKeyString, uint cbPKeySpecificData, byte[] pbPKeySpecificData, ref Guid PKeyId); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLUninstallProofOfPurchase(IntPtr hSLC, ref Guid PKeyId); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetPKeyInformation(IntPtr hSLC, ref Guid pPKeyId, string pwszValueName, out SLDATATYPE peDataType, out uint pcbValue, out IntPtr ppbValue); - [DllImport("sppcext.dll", CharSet = CharSet.Unicode)] + [DllImport("slcext.dll", CharSet = CharSet.Unicode)] private static extern uint SLActivateProduct(IntPtr hSLC, ref Guid pProductSkuId, byte[] cbAppSpecificData, byte[] pvAppSpecificData, byte[] pActivationInfo, string pwszProxyServer, ushort wProxyPort); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGenerateOfflineInstallationId(IntPtr hSLC, ref Guid pProductSkuId, ref string ppwszInstallationId); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLDepositOfflineConfirmationId(IntPtr hSLC, ref Guid pProductSkuId, string pwszInstallationId, string pwszConfirmationId); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetSLIDList(IntPtr hSLC, SLIDTYPE eQueryIdType, ref Guid pQueryId, SLIDTYPE eReturnIdType, out uint pnReturnIds, out IntPtr ppReturnIds); - [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + [DllImport("slc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] private static extern void SLGetLicensingStatusInformation(IntPtr hSLC, ref Guid pAppID, IntPtr pProductSkuId, string pwszRightName, out uint pnStatusCount, out IntPtr ppLicensingStatus); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetInstalledProductKeyIds(IntPtr hSLC, ref Guid pProductSkuId, out uint pnProductKeyIds, out IntPtr ppProductKeyIds); [DllImport("slc.dll", CharSet = CharSet.Unicode)] @@ -6040,9 +5812,6 @@ namespace LibTSforge.SPP [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetProductSkuInformation(IntPtr hSLC, ref Guid pProductSkuId, string pwszValueName, out SLDATATYPE peDataType, out uint pcbValue, out IntPtr ppbValue); - [DllImport("slc.dll", CharSet = CharSet.Unicode)] - private static extern uint SLGetProductSkuInformation(IntPtr hSLC, ref Guid pProductSkuId, string pwszValueName, IntPtr peDataType, out uint pcbValue, out IntPtr ppbValue); - [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetLicense(IntPtr hSLC, ref Guid pLicenseFileId, out uint pcbLicenseFile, out IntPtr ppbLicenseFile); @@ -6052,7 +5821,7 @@ namespace LibTSforge.SPP [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLFireEvent(IntPtr hSLC, string pwszEventId, ref Guid pApplicationId); - public class SLContext : IDisposable + private class SLContext : IDisposable { public readonly IntPtr Handle; @@ -6115,11 +5884,10 @@ namespace LibTSforge.SPP { using (SLContext sl = new SLContext()) { - uint status; uint count; IntPtr pProductKeyIds; - status = SLGetInstalledProductKeyIds(sl.Handle, ref actId, out count, out pProductKeyIds); + uint status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_PKEY, out count, out pProductKeyIds); if (status != 0 || count == 0) { @@ -6143,7 +5911,7 @@ namespace LibTSforge.SPP SLConsumeWindowsRight(0); } - public static bool RefreshTrustedTime(Guid actId) + public static void RefreshTrustedTime(Guid actId) { using (SLContext sl = new SLContext()) { @@ -6151,8 +5919,7 @@ namespace LibTSforge.SPP uint count; IntPtr ppbValue; - uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "TrustedTime", out type, out count, out ppbValue); - return (int)status >= 0 && status != 0xC004F012; + SLGetProductSkuInformation(sl.Handle, ref actId, "TrustedTime", out type, out count, out ppbValue); } } @@ -6168,11 +5935,10 @@ namespace LibTSforge.SPP { using (SLContext sl = new SLContext()) { - uint status; uint count; IntPtr pAppIds; - status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_APPLICATION, out count, out pAppIds); + uint status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_APPLICATION, out count, out pAppIds); if (status != 0 || count == 0) { @@ -6200,11 +5966,10 @@ namespace LibTSforge.SPP { using (SLContext sl = new SLContext()) { - uint status; uint count; IntPtr ppReturnLics; - status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_LICENSE, ref licId, SLIDTYPE.SL_ID_LICENSE_FILE, out count, out ppReturnLics); + uint status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_LICENSE, ref licId, SLIDTYPE.SL_ID_LICENSE_FILE, out count, out ppReturnLics); if (status != 0 || count == 0) { @@ -6266,7 +6031,7 @@ namespace LibTSforge.SPP IntPtr ppbValue; uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "msft:sl/EUL/PHONE/PUBLIC", out type, out count, out ppbValue); - return status >= 0 && status != 0xC004F012; + return status != 0xC004F012; } } @@ -6349,11 +6114,11 @@ namespace LibTSforge.SPP } } - public static uint UninstallProductKey(Guid pkeyId) + public static void UninstallProductKey(Guid pkeyId) { using (SLContext sl = new SLContext()) { - return SLUninstallProofOfPurchase(sl.Handle, ref pkeyId); + SLUninstallProofOfPurchase(sl.Handle, ref pkeyId); } } @@ -6371,6 +6136,390 @@ namespace LibTSforge.SPP } +// SPP/SPPUtils.cs +namespace LibTSforge.SPP +{ + using Microsoft.Win32; + using System; + using System.IO; + using System.Linq; + using System.ServiceProcess; + using Crypto; + using PhysicalStore; + using TokenStore; + + public static class SPPUtils + { + public static void KillSPP(PSVersion version) + { + ServiceController sc; + + string svcName = version == PSVersion.Vista ? "slsvc" : "sppsvc"; + + try + { + sc = new ServiceController(svcName); + + if (sc.Status == ServiceControllerStatus.Stopped) + return; + } + catch (InvalidOperationException ex) + { + throw new InvalidOperationException(string.Format("Unable to access {0}: ", svcName) + ex.Message); + } + + Logger.WriteLine(string.Format("Stopping {0}...", svcName)); + + bool stopped = false; + + for (int i = 0; stopped == false && i < 1080; i++) + { + try + { + if (sc.Status != ServiceControllerStatus.StopPending) + sc.Stop(); + + sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromMilliseconds(500)); + } + catch (System.ServiceProcess.TimeoutException) + { + continue; + } + catch (InvalidOperationException ex) + { + Logger.WriteLine("Warning: Stopping sppsvc failed, retrying. Details: " + ex.Message); + System.Threading.Thread.Sleep(500); + continue; + } + + stopped = true; + } + + if (!stopped) + throw new System.TimeoutException(string.Format("Failed to stop {0}", svcName)); + + Logger.WriteLine(string.Format("{0} stopped successfully.", svcName)); + + if (version == PSVersion.Vista && SPSys.IsSpSysRunning()) + { + Logger.WriteLine("Unloading spsys..."); + + int status = SPSys.ControlSpSys(false); + + if (status < 0) + { + throw new IOException("Failed to unload spsys"); + } + + Logger.WriteLine("spsys unloaded successfully."); + } + } + + public static void RestartSPP(PSVersion version) + { + if (version == PSVersion.Vista) + { + ServiceController sc; + + try + { + sc = new ServiceController("slsvc"); + + if (sc.Status == ServiceControllerStatus.Running) + return; + } + catch (InvalidOperationException ex) + { + throw new InvalidOperationException("Unable to access slsvc: " + ex.Message); + } + + Logger.WriteLine("Starting slsvc..."); + + bool started = false; + + for (int i = 0; started == false && i < 360; i++) + { + try + { + if (sc.Status != ServiceControllerStatus.StartPending) + sc.Start(); + + sc.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromMilliseconds(500)); + } + catch (System.ServiceProcess.TimeoutException) + { + continue; + } + catch (InvalidOperationException ex) + { + Logger.WriteLine("Warning: Starting slsvc failed, retrying. Details: " + ex.Message); + System.Threading.Thread.Sleep(500); + continue; + } + + started = true; + } + + if (!started) + throw new System.TimeoutException("Failed to start slsvc"); + + Logger.WriteLine("slsvc started successfully."); + } + + SLApi.RefreshLicenseStatus(); + } + + public static bool DetectCurrentKey() + { + SLApi.RefreshLicenseStatus(); + + using (RegistryKey wpaKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\WPA")) + { + foreach (string subKey in wpaKey.GetSubKeyNames()) + { + if (subKey.StartsWith("8DEC0AF1")) + { + return subKey.Contains("P"); + } + } + } + + throw new FileNotFoundException("Failed to autodetect key type, specify physical store key with /prod or /test arguments."); + } + + public static string GetPSPath(PSVersion version) + { + switch (version) + { + case PSVersion.Vista: + case PSVersion.Win7: + return Directory.GetFiles( + Environment.GetFolderPath(Environment.SpecialFolder.System), + "7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-8115-601632D005A0") + .FirstOrDefault() ?? ""; + default: + string psDir = Environment.ExpandEnvironmentVariables( + (string)Registry.GetValue( + @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", + "TokenStore", + "" + ) + ); + string psPath = Path.Combine(psDir, "data.dat"); + + if (string.IsNullOrEmpty(psDir) || !File.Exists(psPath)) + { + string[] psDirs = + { + @"spp\store", + @"spp\store\2.0", + @"spp\store_test", + @"spp\store_test\2.0" + }; + + foreach (string dir in psDirs) + { + psPath = Path.Combine( + Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.System), + dir + ), + "data.dat" + ); + + if (File.Exists(psPath)) return psPath; + } + } + else + { + return psPath; + } + + throw new FileNotFoundException("Failed to locate physical store."); + } + } + + public static string GetTokensPath(PSVersion version) + { + switch (version) + { + case PSVersion.Vista: + return Path.Combine( + Environment.ExpandEnvironmentVariables("%WINDIR%"), + @"ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareLicensing\tokens.dat" + ); + case PSVersion.Win7: + return Path.Combine( + Environment.ExpandEnvironmentVariables("%WINDIR%"), + @"ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat" + ); + default: + string tokDir = Environment.ExpandEnvironmentVariables( + (string)Registry.GetValue( + @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", + "TokenStore", + "" + ) + ); + string tokPath = Path.Combine(tokDir, "tokens.dat"); + + if (string.IsNullOrEmpty(tokDir) || !File.Exists(tokPath)) + { + string[] tokDirs = + { + @"spp\store", + @"spp\store\2.0", + @"spp\store_test", + @"spp\store_test\2.0" + }; + + foreach (string dir in tokDirs) + { + tokPath = Path.Combine( + Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.System), + dir + ), + "tokens.dat" + ); + + if (File.Exists(tokPath)) return tokPath; + } + } + else + { + return tokPath; + } + + throw new FileNotFoundException("Failed to locate token store."); + } + } + + public static IPhysicalStore GetStore(PSVersion version, bool production) + { + string psPath = GetPSPath(version); + + switch (version) + { + case PSVersion.Vista: + return new PhysicalStoreVista(psPath, production); + case PSVersion.Win7: + return new PhysicalStoreWin7(psPath, production); + default: + return new PhysicalStoreModern(psPath, production, version); + } + } + + public static ITokenStore GetTokenStore(PSVersion version) + { + string tokPath = GetTokensPath(version); + + return new TokenStoreModern(tokPath); + } + + public static void DumpStore(PSVersion version, bool production, string filePath, string encrFilePath) + { + bool manageSpp = false; + + if (encrFilePath == null) + { + encrFilePath = GetPSPath(version); + manageSpp = true; + KillSPP(version); + } + + if (string.IsNullOrEmpty(encrFilePath) || !File.Exists(encrFilePath)) + { + throw new FileNotFoundException("Store does not exist at expected path '" + encrFilePath + "'."); + } + + try + { + using (FileStream fs = File.Open(encrFilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + byte[] encrData = fs.ReadAllBytes(); + File.WriteAllBytes(filePath, PhysStoreCrypto.DecryptPhysicalStore(encrData, production, version)); + } + Logger.WriteLine("Store dumped successfully to '" + filePath + "'."); + } + finally + { + if (manageSpp) + { + RestartSPP(version); + } + } + } + + public static void LoadStore(PSVersion version, bool production, string filePath) + { + if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) + { + throw new FileNotFoundException("Store file '" + filePath + "' does not exist."); + } + + KillSPP(version); + + using (IPhysicalStore store = GetStore(version, production)) + { + store.WriteRaw(File.ReadAllBytes(filePath)); + } + + RestartSPP(version); + + Logger.WriteLine("Loaded store file successfully."); + } + } +} + + +// SPP/SPSys.cs +namespace LibTSforge.SPP +{ + using Microsoft.Win32.SafeHandles; + using System; + using System.Runtime.InteropServices; + + public class SPSys + { + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile); + private static SafeFileHandle CreateFileSafe(string device) + { + return new SafeFileHandle(CreateFile(device, 0xC0000000, 0, IntPtr.Zero, 3, 0, IntPtr.Zero), true); + } + + [return: MarshalAs(UnmanagedType.Bool)] + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern bool DeviceIoControl([In] SafeFileHandle hDevice, [In] uint dwIoControlCode, [In] IntPtr lpInBuffer, [In] int nInBufferSize, [Out] IntPtr lpOutBuffer, [In] int nOutBufferSize, out int lpBytesReturned, [In] IntPtr lpOverlapped); + + public static bool IsSpSysRunning() + { + SafeFileHandle file = CreateFileSafe(@"\\.\SpDevice"); + IntPtr buffer = Marshal.AllocHGlobal(1); + int bytesReturned; + DeviceIoControl(file, 0x80006008, IntPtr.Zero, 0, buffer, 1, out bytesReturned, IntPtr.Zero); + bool running = Marshal.ReadByte(buffer) != 0; + Marshal.FreeHGlobal(buffer); + file.Close(); + return running; + } + + public static int ControlSpSys(bool start) + { + SafeFileHandle file = CreateFileSafe(@"\\.\SpDevice"); + IntPtr buffer = Marshal.AllocHGlobal(4); + int bytesReturned; + DeviceIoControl(file, start ? 0x8000a000 : 0x8000a004, IntPtr.Zero, 0, buffer, 4, out bytesReturned, IntPtr.Zero); + int result = Marshal.ReadInt32(buffer); + Marshal.FreeHGlobal(buffer); + file.Close(); + return result; + } + } +} + + // Crypto/CryptoUtils.cs namespace LibTSforge.Crypto { @@ -6480,10 +6629,21 @@ namespace LibTSforge.Crypto public static bool HMACVerify(byte[] key, byte[] data, byte[] signature) { - HMACSHA1 hmac = new HMACSHA1(key); return Enumerable.SequenceEqual(signature, HMACSign(key, data)); } + public static byte[] SaltSHASum(byte[] salt, byte[] data) + { + SHA1 sha1 = SHA1.Create(); + byte[] sha_data = salt.Concat(data).ToArray(); + return sha1.ComputeHash(sha_data); + } + + public static bool SaltSHAVerify(byte[] salt, byte[] data, byte[] checksum) + { + return Enumerable.SequenceEqual(checksum, SaltSHASum(salt, data)); + } + public static byte[] SHA256Hash(byte[] data) { using (SHA256 sha256 = SHA256.Create()) @@ -6596,7 +6756,7 @@ namespace LibTSforge.Crypto public static class PhysStoreCrypto { - public static byte[] DecryptPhysicalStore(byte[] data, bool production) + public static byte[] DecryptPhysicalStore(byte[] data, bool production, PSVersion version) { byte[] rsaKey = production ? Keys.PRODUCTION : Keys.TEST; BinaryReader br = new BinaryReader(new MemoryStream(data)); @@ -6604,29 +6764,40 @@ namespace LibTSforge.Crypto byte[] aesKeySig = br.ReadBytes(0x80); byte[] encAesKey = br.ReadBytes(0x80); - if (CryptoUtils.RSAVerifySignature(rsaKey, encAesKey, aesKeySig)) + if (!CryptoUtils.RSAVerifySignature(rsaKey, encAesKey, aesKeySig)) { - byte[] aesKey = CryptoUtils.RSADecrypt(rsaKey, encAesKey); - byte[] decData = CryptoUtils.AESDecrypt(br.ReadBytes((int)br.BaseStream.Length - 0x110), aesKey); - byte[] hmacKey = decData.Take(0x10).ToArray(); - byte[] hmacSig = decData.Skip(0x10).Take(0x14).ToArray(); - byte[] psData = decData.Skip(0x28).ToArray(); - - if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig)) - { - Logger.WriteLine("Warning: Failed to verify HMAC. Physical store is either corrupt or in Vista format."); - } - - return psData; + throw new Exception("Failed to decrypt physical store."); } - throw new Exception("Failed to decrypt physical store."); + byte[] aesKey = CryptoUtils.RSADecrypt(rsaKey, encAesKey); + byte[] decData = CryptoUtils.AESDecrypt(br.ReadBytes((int)br.BaseStream.Length - 0x110), aesKey); + byte[] hmacKey = decData.Take(0x10).ToArray(); // SHA-1 salt on Vista + byte[] hmacSig = decData.Skip(0x10).Take(0x14).ToArray(); // SHA-1 hash on Vista + byte[] psData = decData.Skip(0x28).ToArray(); + + if (version != PSVersion.Vista) + { + if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig)) + { + throw new InvalidDataException("Failed to verify HMAC. Physical store is corrupt."); + } + } + else + { + if (!CryptoUtils.SaltSHAVerify(hmacKey, psData, hmacSig)) + { + throw new InvalidDataException("Failed to verify checksum. Physical store is corrupt."); + } + } + + return psData; } public static byte[] EncryptPhysicalStore(byte[] data, bool production, PSVersion version) { Dictionary versionTable = new Dictionary { + {PSVersion.Vista, 2}, {PSVersion.Win7, 5}, {PSVersion.Win8, 1}, {PSVersion.WinBlue, 2}, @@ -6640,9 +6811,9 @@ namespace LibTSforge.Crypto byte[] encAesKey = CryptoUtils.RSAEncrypt(rsaKey, aesKey); byte[] aesKeySig = CryptoUtils.RSASign(rsaKey, encAesKey); - byte[] hmacSig = CryptoUtils.HMACSign(hmacKey, data); + byte[] hmacSig = version != PSVersion.Vista ? CryptoUtils.HMACSign(hmacKey, data) : CryptoUtils.SaltSHASum(hmacKey, data); - byte[] decData = new byte[] { }; + byte[] decData = { }; decData = decData.Concat(hmacKey).Concat(hmacSig).Concat(BitConverter.GetBytes(0)).Concat(data).ToArray(); byte[] encData = CryptoUtils.AESEncrypt(decData, aesKey); @@ -6665,9 +6836,9 @@ namespace LibTSforge.Modifiers using System; using System.IO; using Microsoft.Win32; - using LibTSforge.PhysicalStore; - using LibTSforge.SPP; - using LibTSforge.TokenStore; + using PhysicalStore; + using SPP; + using TokenStore; public static class GenPKeyInstall { @@ -6693,6 +6864,7 @@ namespace LibTSforge.Modifiers public static void InstallGenPKey(PSVersion version, bool production, Guid actId) { + if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008."); if (actId == Guid.Empty) throw new ArgumentException("Activation ID must be specified for generated product key install."); PKeyConfig pkc = new PKeyConfig(); @@ -6719,7 +6891,7 @@ namespace LibTSforge.Modifiers if (pkey.Algorithm == PKeyAlgorithm.PKEY2009) { uint status = SLApi.InstallProductKey(pkey); - Logger.WriteLine(string.Format("Installing generated product key {0} status {1:X}", pkey.ToString(), status)); + Logger.WriteLine(string.Format("Installing generated product key {0} status {1:X}", pkey, status)); if ((int)status < 0) { @@ -6734,57 +6906,57 @@ namespace LibTSforge.Modifiers if (pkey.Channel == "Volume:GVLK" && version == PSVersion.Win7) throw new NotSupportedException("Fake GVLK generation is not supported on Windows 7."); - VariableBag pkb = new VariableBag(); - pkb.Blocks.AddRange(new CRCBlock[] + VariableBag pkb = new VariableBag(version); + pkb.Blocks.AddRange(new[] { - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyBindingProductKey", ValueAsStr = pkey.ToString() }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyBindingMPC", ValueAsStr = pkey.GetMPC() }, - new CRCBlock { + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = "SppPkeyBindingPid2", ValueAsStr = pkey.GetPid2() }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = "SppPkeyBindingPid3", Value = pkey.GetPid3() }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = "SppPkeyBindingPid4", Value = pkey.GetPid4() }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyChannelId", ValueAsStr = pkey.Channel }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyBindingEditionId", ValueAsStr = pkey.Edition }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = (version == PSVersion.Win7) ? "SppPkeyShortAuthenticator" : "SppPkeyPhoneActivationData", Value = pkey.GetPhoneData(version) }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = "SppPkeyBindingMiscData", @@ -6802,11 +6974,11 @@ namespace LibTSforge.Modifiers SLApi.UninstallAllProductKeys(appId); } - Utils.KillSPP(); + SPPUtils.KillSPP(version); - using (IPhysicalStore ps = Utils.GetStore(version, production)) + using (IPhysicalStore ps = SPPUtils.GetStore(version, production)) { - using (ITokenStore tks = Utils.GetTokenStore(version)) + using (ITokenStore tks = SPPUtils.GetTokenStore(version)) { Logger.WriteLine("Writing to physical store and token store..."); @@ -6830,7 +7002,7 @@ namespace LibTSforge.Modifiers uriMap.Data[pkeyId] = pkey.GetAlgoUri(); tks.SetEntry(uriMapName, "xml", uriMap.Serialize()); - string skuMetaName = actId.ToString() + metSuffix; + string skuMetaName = actId + metSuffix; TokenMeta skuMeta = tks.GetMetaEntry(skuMetaName); foreach (string k in skuMeta.Data.Keys) @@ -6857,7 +7029,7 @@ namespace LibTSforge.Modifiers Data = pkb.Serialize() }); - string cachePath = Utils.GetTokensPath(version).Replace("tokens.dat", @"cache\cache.dat"); + string cachePath = SPPUtils.GetTokensPath(version).Replace("tokens.dat", @"cache\cache.dat"); if (File.Exists(cachePath)) File.Delete(cachePath); } } @@ -6872,19 +7044,19 @@ namespace LibTSforge.Modifiers // Modifiers/GracePeriodReset.cs namespace LibTSforge.Modifiers { - using System; using System.Collections.Generic; using System.Linq; - using LibTSforge.PhysicalStore; + using PhysicalStore; + using SPP; public static class GracePeriodReset { public static void Reset(PSVersion version, bool production) { - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { string value = "msft:sl/timer"; List blocks = store.FindBlocks(value).ToList(); @@ -6895,6 +7067,7 @@ namespace LibTSforge.Modifiers } } + SPPUtils.RestartSPP(version); Logger.WriteLine("Successfully reset all grace and evaluation period timers."); } } @@ -6906,15 +7079,19 @@ namespace LibTSforge.Modifiers { using System.Collections.Generic; using System.Linq; - using LibTSforge.PhysicalStore; - using LibTSforge; + using PhysicalStore; + using SPP; + using System; + public static class KeyChangeLockDelete { public static void Delete(PSVersion version, bool production) { - Utils.KillSPP(); + if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008."); + + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { List values = new List { @@ -6942,12 +7119,12 @@ namespace LibTSforge.Modifiers { using System; using System.IO; - using LibTSforge.PhysicalStore; - using LibTSforge.SPP; + using PhysicalStore; + using SPP; public static class KMSHostCharge { - public static void Charge(PSVersion version, Guid actId, bool production) + public static void Charge(PSVersion version, bool production, Guid actId) { if (actId == Guid.Empty) { @@ -6971,76 +7148,113 @@ namespace LibTSforge.Modifiers string key = string.Format("SPPSVC\\{0}", appId); long ldapTimestamp = DateTime.Now.ToFileTime(); + byte[] cmidGuids = { }; + byte[] reqCounts = { }; + byte[] kmsChargeData = { }; + BinaryWriter writer = new BinaryWriter(new MemoryStream()); - for (int i = 0; i < currClients; i++) + if (version == PSVersion.Vista) { - writer.Write(ldapTimestamp - (10 * (i + 1))); - writer.Write(Guid.NewGuid().ToByteArray()); + writer.Write(new byte[44]); + writer.Seek(0, SeekOrigin.Begin); + + writer.Write(totalClients); + writer.Write(43200); + writer.Write(32); + + writer.Seek(20, SeekOrigin.Begin); + writer.Write((byte)currClients); + + writer.Seek(32, SeekOrigin.Begin); + writer.Write((byte)currClients); + + writer.Seek(0, SeekOrigin.End); + + for (int i = 0; i < currClients; i++) + { + writer.Write(Guid.NewGuid().ToByteArray()); + writer.Write(ldapTimestamp - (10 * (i + 1))); + } + + kmsChargeData = writer.GetBytes(); + } + else + { + for (int i = 0; i < currClients; i++) + { + writer.Write(ldapTimestamp - (10 * (i + 1))); + writer.Write(Guid.NewGuid().ToByteArray()); + } + + cmidGuids = writer.GetBytes(); + + writer = new BinaryWriter(new MemoryStream()); + + writer.Write(new byte[40]); + + writer.Seek(4, SeekOrigin.Begin); + writer.Write((byte)currClients); + + writer.Seek(24, SeekOrigin.Begin); + writer.Write((byte)currClients); + + reqCounts = writer.GetBytes(); } - byte[] cmidGuids = writer.GetBytes(); - - writer = new BinaryWriter(new MemoryStream()); - - writer.Write(new byte[40]); - - writer.Seek(4, SeekOrigin.Begin); - writer.Write((byte)currClients); - - writer.Seek(24, SeekOrigin.Begin); - writer.Write((byte)currClients); - byte[] reqCounts = writer.GetBytes(); - - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { - VariableBag kmsCountData = new VariableBag(); - kmsCountData.Blocks.AddRange(new CRCBlock[] + if (version != PSVersion.Vista) { - new CRCBlock + VariableBag kmsCountData = new VariableBag(version); + kmsCountData.Blocks.AddRange(new[] { - DataType = CRCBlockType.BINARY, - KeyAsStr = "SppBindingLicenseData", - Value = hwidBlock - }, - new CRCBlock - { - DataType = CRCBlockType.UINT, - Key = new byte[] { }, - ValueAsInt = (uint)totalClients - }, - new CRCBlock - { - DataType = CRCBlockType.UINT, - Key = new byte[] { }, - ValueAsInt = 1051200000 - }, - new CRCBlock - { - DataType = CRCBlockType.UINT, - Key = new byte[] { }, - ValueAsInt = (uint)currClients - }, - new CRCBlock - { - DataType = CRCBlockType.BINARY, - Key = new byte[] { }, - Value = cmidGuids - }, - new CRCBlock - { - DataType = CRCBlockType.BINARY, - Key = new byte[] { }, - Value = reqCounts - } - }); + new CRCBlockModern + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppBindingLicenseData", + Value = hwidBlock + }, + new CRCBlockModern + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = (uint)totalClients + }, + new CRCBlockModern + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = 1051200000 + }, + new CRCBlockModern + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = (uint)currClients + }, + new CRCBlockModern + { + DataType = CRCBlockType.BINARY, + Key = new byte[] { }, + Value = cmidGuids + }, + new CRCBlockModern + { + DataType = CRCBlockType.BINARY, + Key = new byte[] { }, + Value = reqCounts + } + }); - byte[] kmsChargeData = kmsCountData.Serialize(); - string countVal = string.Format("msft:spp/kms/host/2.0/store/counters/{0}", appId); + kmsChargeData = kmsCountData.Serialize(); + } + + string countVal = version == PSVersion.Vista ? "C8F6FFF1-79CE-404C-B150-F97991273DF1" : string.Format("msft:spp/kms/host/2.0/store/counters/{0}", appId); store.DeleteBlock(key, countVal); store.AddBlock(new PSBlock @@ -7054,6 +7268,8 @@ namespace LibTSforge.Modifiers Logger.WriteLine(string.Format("Set charge count to {0} successfully.", currClients)); } + + SPPUtils.RestartSPP(version); } } } @@ -7062,24 +7278,28 @@ namespace LibTSforge.Modifiers // Modifiers/RearmReset.cs namespace LibTSforge.Modifiers { - using System; using System.Collections.Generic; using System.Linq; - using LibTSforge.PhysicalStore; + using PhysicalStore; + using SPP; public static class RearmReset { public static void Reset(PSVersion version, bool production) { - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { List blocks; - if (version == PSVersion.Win7) + if (version == PSVersion.Vista) + { + blocks = store.FindBlocks("740D70D8-6448-4b2f-9063-4A7A463600C5").ToList(); + } + else if (version == PSVersion.Win7) { blocks = store.FindBlocks(0xA0000).ToList(); } @@ -7090,7 +7310,11 @@ namespace LibTSforge.Modifiers foreach (PSBlock block in blocks) { - if (version == PSVersion.Win7) + if (version == PSVersion.Vista) + { + store.DeleteBlock(block.KeyAsStr, block.ValueAsStr); + } + else if (version == PSVersion.Win7) { store.SetBlock(block.KeyAsStr, block.ValueAsInt, new byte[8]); } @@ -7107,38 +7331,110 @@ namespace LibTSforge.Modifiers } +// Modifiers/SetIIDParams.cs +namespace LibTSforge.Modifiers +{ + using PhysicalStore; + using SPP; + using System.IO; + using System; + + public static class SetIIDParams + { + public static void SetParams(PSVersion version, bool production, Guid actId, PKeyAlgorithm algorithm, int group, int serial, ulong security) + { + if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008."); + + Guid appId; + + if (actId == Guid.Empty) + { + appId = SLApi.WINDOWS_APP_ID; + actId = SLApi.GetDefaultActivationID(appId, true); + + if (actId == Guid.Empty) + { + throw new Exception("No applicable activation IDs found."); + } + } + else + { + appId = SLApi.GetAppId(actId); + } + + Guid pkeyId = SLApi.GetInstalledPkeyID(actId); + + SPPUtils.KillSPP(version); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) + { + string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId); + PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString()); + + if (keyBlock == null) + { + throw new InvalidDataException("Failed to get product key data for activation ID " + actId + "."); + } + + VariableBag pkb = new VariableBag(keyBlock.Data, version); + + ProductKey pkey = new ProductKey + { + Group = group, + Serial = serial, + Security = security, + Algorithm = algorithm, + Upgrade = false + }; + + string blockName = version == PSVersion.Win7 ? "SppPkeyShortAuthenticator" : "SppPkeyPhoneActivationData"; + pkb.SetBlock(blockName, pkey.GetPhoneData(version)); + store.SetBlock(key, pkeyId.ToString(), pkb.Serialize()); + } + + Logger.WriteLine("Successfully set IID parameters."); + } + } +} + + // Modifiers/TamperedFlagsDelete.cs namespace LibTSforge.Modifiers { - using System; using System.Linq; - using LibTSforge.PhysicalStore; + using PhysicalStore; + using SPP; public static class TamperedFlagsDelete { public static void DeleteTamperFlags(PSVersion version, bool production) { - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { - if (version != PSVersion.Win7) + if (version == PSVersion.Vista) { - string recreatedFlag = "__##USERSEP-RESERVED##__$$RECREATED-FLAG$$"; - string recoveredFlag = "__##USERSEP-RESERVED##__$$RECOVERED-FLAG$$"; - - DeleteFlag(store, recreatedFlag); - DeleteFlag(store, recoveredFlag); + DeleteFlag(store, "6BE8425B-E3CF-4e86-A6AF-5863E3DCB606"); + } + else if (version == PSVersion.Win7) + { + SetFlag(store, 0xA0001); } else { - SetFlag(store, 0xA0001); + DeleteFlag(store, "__##USERSEP-RESERVED##__$$RECREATED-FLAG$$"); + DeleteFlag(store, "__##USERSEP-RESERVED##__$$RECOVERED-FLAG$$"); } Logger.WriteLine("Successfully cleared the tamper state."); } + + SPPUtils.RestartSPP(version); } private static void DeleteFlag(IPhysicalStore store, string flag) @@ -7158,13 +7454,15 @@ namespace LibTSforge.Modifiers namespace LibTSforge.Modifiers { using System; - using LibTSforge.PhysicalStore; - using LibTSforge.SPP; + using PhysicalStore; + using SPP; public static class UniqueIdDelete { public static void DeleteUniqueId(PSVersion version, bool production, Guid actId) { + if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008."); + Guid appId; if (actId == Guid.Empty) @@ -7182,14 +7480,13 @@ namespace LibTSforge.Modifiers appId = SLApi.GetAppId(actId); } - string instId = SLApi.GetInstallationID(actId); Guid pkeyId = SLApi.GetInstalledPkeyID(actId); - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId); PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString()); @@ -7199,7 +7496,7 @@ namespace LibTSforge.Modifiers throw new Exception("No product key found."); } - VariableBag pkb = new VariableBag(keyBlock.Data); + VariableBag pkb = new VariableBag(keyBlock.Data, version); pkb.DeleteBlock("SppPkeyUniqueIdToken"); @@ -7212,18 +7509,143 @@ namespace LibTSforge.Modifiers } +// Activators/AVMA4K.cs +namespace LibTSforge.Activators +{ + using System; + using PhysicalStore; + using SPP; + + public static class AVMA4k + { + public static void Activate(PSVersion version, bool production, Guid actId) + { + if (version != PSVersion.WinModern && version != PSVersion.WinBlue) + { + throw new NotSupportedException("AVMA licenses are not available for this product."); + } + + Guid appId; + if (actId == Guid.Empty) + { + appId = SLApi.WINDOWS_APP_ID; + actId = SLApi.GetDefaultActivationID(appId, false); + + if (actId == Guid.Empty) + { + throw new NotSupportedException("No applicable activation IDs found."); + } + } + else + { + appId = SLApi.GetAppId(actId); + } + + if (SLApi.GetPKeyChannel(SLApi.GetInstalledPkeyID(actId)) != "VT:IA") + { + throw new NotSupportedException("Non-VT:IA product key installed."); + } + + SPPUtils.KillSPP(version); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) + { + string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId); + + long creationTime = BitConverter.ToInt64(store.GetBlock("__##USERSEP##\\$$_RESERVED_$$\\NAMESPACE__", "__##USERSEP-RESERVED##__$$GLOBAL-CREATION-TIME$$").Data, 0); + long tickCount = BitConverter.ToInt64(store.GetBlock("__##USERSEP##\\$$_RESERVED_$$\\NAMESPACE__", "__##USERSEP-RESERVED##__$$GLOBAL-TICKCOUNT-UPTIME$$").Data, 0); + long deltaTime = BitConverter.ToInt64(store.GetBlock(key, "__##USERSEP-RESERVED##__$$UP-TIME-DELTA$$").Data, 0); + + const ulong unknown = 0; + ulong time1 = (ulong)(creationTime + tickCount + deltaTime); + ulong crcBindTime = (ulong)DateTime.UtcNow.ToFileTime(); + ulong timerTime = crcBindTime / 10000; + ulong expiry = Constants.TimerMax / 10000; + + VariableBag avmaBinding = new VariableBag(version); + + avmaBinding.Blocks.AddRange(new[] + { + new CRCBlockModern + { + DataType = CRCBlockType.BINARY, + Key = new byte[] { }, + Value = BitConverter.GetBytes(crcBindTime), + }, + new CRCBlockModern + { + DataType = CRCBlockType.STRING, + Key = new byte[] { }, + ValueAsStr = "AVMA4K", + }, + new CRCBlockModern + { + DataType = CRCBlockType.STRING, + Key = new byte[] { }, + ValueAsStr = "00491-50000-00001-AA666", + } + }); + + byte[] avmaBindingData = avmaBinding.Serialize(); + + Timer avmaTimer = new Timer + { + Unknown = unknown, + Time1 = time1, + Time2 = timerTime, + Expiry = expiry + }; + + string storeVal = string.Format("msft:spp/ia/bind/1.0/store/{0}/{1}", appId, actId); + string timerVal = string.Format("msft:spp/ia/bind/1.0/timer/{0}/{1}", appId, actId); + + store.DeleteBlock(key, storeVal); + store.DeleteBlock(key, timerVal); + + store.AddBlocks(new[] + { + new PSBlock + { + Type = BlockType.NAMED, + Flags = 0x400, + KeyAsStr = key, + ValueAsStr = storeVal, + Data = avmaBindingData, + }, + new PSBlock + { + Type = BlockType.TIMER, + Flags = 0x4, + KeyAsStr = key, + ValueAsStr = timerVal, + Data = avmaTimer.CastToArray() + } + }); + } + + SLApi.RefreshLicenseStatus(); + SLApi.FireStateChangedEvent(appId); + Logger.WriteLine("Activated using AVMA4k successfully."); + } + } +} + + // Activators/ZeroCID.cs namespace LibTSforge.Activators { using System; using System.IO; - using LibTSforge.Crypto; - using LibTSforge.PhysicalStore; - using LibTSforge.SPP; + using System.Linq; + using Crypto; + using PhysicalStore; + using SPP; public static class ZeroCID { - public static void Deposit(Guid actId, string instId) + private static void Deposit(Guid actId, string instId) { uint status = SLApi.DepositConfirmationID(actId, instId, Constants.ZeroCID); Logger.WriteLine(string.Format("Depositing fake CID status {0:X}", status)); @@ -7261,16 +7683,16 @@ namespace LibTSforge.Activators string instId = SLApi.GetInstallationID(actId); Guid pkeyId = SLApi.GetInstalledPkeyID(actId); - if (version == PSVersion.Win7) + if (version == PSVersion.Vista || version == PSVersion.Win7) { Deposit(actId, instId); } - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { byte[] hwidBlock = Constants.UniversalHWIDBlock; @@ -7280,7 +7702,11 @@ namespace LibTSforge.Activators byte[] iidHash; - if (version == PSVersion.Win7) + if (version == PSVersion.Vista) + { + iidHash = CryptoUtils.SHA256Hash(Utils.EncodeString(instId)).Take(0x10).ToArray(); + } + else if (version == PSVersion.Win7) { iidHash = CryptoUtils.SHA256Hash(Utils.EncodeString(instId)); } @@ -7297,11 +7723,39 @@ namespace LibTSforge.Activators throw new InvalidDataException("Failed to get product key data for activation ID " + actId + "."); } - VariableBag pkb = new VariableBag(keyBlock.Data); + VariableBag pkb = new VariableBag(keyBlock.Data, version); byte[] pkeyData; - if (version == PSVersion.Win7) + if (version == PSVersion.Vista) + { + pkeyData = pkb.GetBlock("PKeyBasicInfo").Value; + string uniqueId = Utils.DecodeString(pkeyData.Skip(0x120).Take(0x80).ToArray()); + string extPid = Utils.DecodeString(pkeyData.Skip(0x1A0).Take(0x80).ToArray()); + + uint group; + uint.TryParse(extPid.Split('-')[1], out group); + + if (group == 0) + { + throw new FormatException("Extended PID has invalid format."); + } + + ulong shortauth; + + try + { + shortauth = BitConverter.ToUInt64(Convert.FromBase64String(uniqueId.Split('&')[1]), 0); + } + catch + { + throw new FormatException("Key Unique ID has invalid format."); + } + + shortauth |= (ulong)group << 41; + pkeyData = BitConverter.GetBytes(shortauth); + } + else if (version == PSVersion.Win7) { pkeyData = pkb.GetBlock("SppPkeyShortAuthenticator").Value; } @@ -7314,26 +7768,34 @@ namespace LibTSforge.Activators store.SetBlock(key, pkeyId.ToString(), pkb.Serialize()); BinaryWriter writer = new BinaryWriter(new MemoryStream()); - writer.Write(0x20); + writer.Write(iidHash.Length); writer.Write(iidHash); writer.Write(hwidBlock.Length); writer.Write(hwidBlock); byte[] tsHwidData = writer.GetBytes(); writer = new BinaryWriter(new MemoryStream()); - writer.Write(0x20); + writer.Write(iidHash.Length); writer.Write(iidHash); writer.Write(pkeyData.Length); writer.Write(pkeyData); byte[] tsPkeyInfoData = writer.GetBytes(); - store.AddBlocks(new PSBlock[] { + string phoneVersion = version == PSVersion.Vista ? "6.0" : "7.0"; + Guid indexSlid = version == PSVersion.Vista ? actId : pkeyId; + string hwidBlockName = string.Format("msft:Windows/{0}/Phone/Cached/HwidBlock/{1}", phoneVersion, indexSlid); + string pkeyInfoName = string.Format("msft:Windows/{0}/Phone/Cached/PKeyInfo/{1}", phoneVersion, indexSlid); + + store.DeleteBlock(key, hwidBlockName); + store.DeleteBlock(key, pkeyInfoName); + + store.AddBlocks(new[] { new PSBlock { Type = BlockType.NAMED, Flags = 0, KeyAsStr = key, - ValueAsStr = "msft:Windows/7.0/Phone/Cached/HwidBlock/" + pkeyId, + ValueAsStr = hwidBlockName, Data = tsHwidData }, new PSBlock @@ -7341,18 +7803,18 @@ namespace LibTSforge.Activators Type = BlockType.NAMED, Flags = 0, KeyAsStr = key, - ValueAsStr = "msft:Windows/7.0/Phone/Cached/PKeyInfo/" + pkeyId, + ValueAsStr = pkeyInfoName, Data = tsPkeyInfoData } }); } - if (version != PSVersion.Win7) + if (version != PSVersion.Vista && version != PSVersion.Win7) { Deposit(actId, instId); } - SLApi.RefreshLicenseStatus(); + SPPUtils.RestartSPP(version); SLApi.FireStateChangedEvent(appId); Logger.WriteLine("Activated using ZeroCID successfully."); } @@ -7377,7 +7839,7 @@ namespace LibTSforge.TokenStore public class TokenMeta { public string Name; - public Dictionary Data = new Dictionary(); + public readonly Dictionary Data = new Dictionary(); public byte[] Serialize() { @@ -7400,7 +7862,7 @@ namespace LibTSforge.TokenStore return writer.GetBytes(); } - public void Deserialize(byte[] data) + private void Deserialize(byte[] data) { BinaryReader reader = new BinaryReader(new MemoryStream(data)); reader.ReadInt32(); @@ -7457,7 +7919,7 @@ namespace LibTSforge.TokenStore using System.Collections.Generic; using System.IO; using System.Linq; - using LibTSforge.Crypto; + using Crypto; public class TokenStoreModern : ITokenStore { @@ -7471,29 +7933,29 @@ namespace LibTSforge.TokenStore private static readonly byte[] CONTS_FOOTER = Enumerable.Repeat((byte)0xAA, 0x20).ToArray(); private List Entries = new List(); - public FileStream TokensFile; + private readonly FileStream TokensFile; public void Deserialize() { if (TokensFile.Length < BLOCK_SIZE) return; TokensFile.Seek(0x24, SeekOrigin.Begin); - uint nextBlock = 0; + uint nextBlock; BinaryReader reader = new BinaryReader(TokensFile); do { - uint curOffset = reader.ReadUInt32(); + reader.ReadUInt32(); nextBlock = reader.ReadUInt32(); for (int i = 0; i < ENTRIES_PER_BLOCK; i++) { - curOffset = reader.ReadUInt32(); + uint curOffset = reader.ReadUInt32(); bool populated = reader.ReadUInt32() == 1; uint contentOffset = reader.ReadUInt32(); uint contentLength = reader.ReadUInt32(); uint allocLength = reader.ReadUInt32(); - byte[] contentData = new byte[] { }; + byte[] contentData = { }; if (populated) { @@ -7593,11 +8055,10 @@ namespace LibTSforge.TokenStore writer.WritePadding(BLOCK_PAD_SIZE); writer.BaseStream.Seek(curBlockOffset, SeekOrigin.Begin); - byte[] blockHash; byte[] blockData = new byte[BLOCK_SIZE - 0x20]; tokens.Read(blockData, 0, BLOCK_SIZE - 0x20); - blockHash = CryptoUtils.SHA256Hash(blockData); + byte[] blockHash = CryptoUtils.SHA256Hash(blockData); writer.BaseStream.Seek(curBlockOffset + BLOCK_SIZE - 0x20, SeekOrigin.Begin); writer.Write(blockHash); @@ -7728,11 +8189,6 @@ namespace LibTSforge.TokenStore Deserialize(); } - public TokenStoreModern() - { - - } - public void Dispose() { Serialize(); @@ -7763,6 +8219,13 @@ namespace LibTSforge.PhysicalStore public ulong Time2; public ulong Expiry; } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct VistaTimer + { + public ulong Time; + public ulong Expiry; + } } @@ -7867,7 +8330,7 @@ namespace LibTSforge.PhysicalStore using System; using System.Collections.Generic; using System.IO; - using LibTSforge.Crypto; + using Crypto; public class ModernBlock { @@ -7957,7 +8420,7 @@ namespace LibTSforge.PhysicalStore public sealed class PhysicalStoreModern : IPhysicalStore { - private byte[] PreHeaderBytes = new byte[] { }; + private byte[] PreHeaderBytes = { }; private readonly Dictionary> Data = new Dictionary>(); private readonly FileStream TSFile; private readonly PSVersion Version; @@ -8145,46 +8608,50 @@ namespace LibTSforge.PhysicalStore public void DeleteBlock(string key, string value) { - if (Data.ContainsKey(key)) + if (!Data.ContainsKey(key)) { - List blocks = Data[key]; - - foreach (ModernBlock block in blocks) - { - if (block.ValueAsStr == value) - { - blocks.Remove(block); - break; - } - } - - Data[key] = blocks; + return; } + + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsStr == value) + { + blocks.Remove(block); + break; + } + } + + Data[key] = blocks; } public void DeleteBlock(string key, uint value) { - if (Data.ContainsKey(key)) + if (!Data.ContainsKey(key)) { - List blocks = Data[key]; - - foreach (ModernBlock block in blocks) - { - if (block.ValueAsInt == value) - { - blocks.Remove(block); - break; - } - } - - Data[key] = blocks; + return; } + + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsInt == value) + { + blocks.Remove(block); + break; + } + } + + Data[key] = blocks; } public PhysicalStoreModern(string tsPath, bool production, PSVersion version) { TSFile = File.Open(tsPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); - Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), production)); + Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), production, version)); TSFile.Seek(0, SeekOrigin.Begin); Version = version; Production = production; @@ -8204,7 +8671,7 @@ namespace LibTSforge.PhysicalStore public byte[] ReadRaw() { - byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), Production); + byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), Production, Version); TSFile.Seek(0, SeekOrigin.Begin); return data; } @@ -8275,13 +8742,372 @@ namespace LibTSforge.PhysicalStore } +// PhysicalStore/PhysicalStoreVista.cs +namespace LibTSforge.PhysicalStore +{ + using System; + using System.Collections.Generic; + using System.IO; + using Crypto; + + public class VistaBlock + { + public BlockType Type; + public uint Flags; + public byte[] Value; + public string ValueAsStr + { + get + { + return Utils.DecodeString(Value); + } + set + { + Value = Utils.EncodeString(value); + } + } + public uint ValueAsInt + { + get + { + return BitConverter.ToUInt32(Value, 0); + } + set + { + Value = BitConverter.GetBytes(value); + } + } + public byte[] Data; + public string DataAsStr + { + get + { + return Utils.DecodeString(Data); + } + set + { + Data = Utils.EncodeString(value); + } + } + public uint DataAsInt + { + get + { + return BitConverter.ToUInt32(Data, 0); + } + set + { + Data = BitConverter.GetBytes(value); + } + } + + internal void Encode(BinaryWriter writer) + { + writer.Write((uint)Type); + writer.Write(Flags); + writer.Write(Value.Length); + writer.Write(Data.Length); + writer.Write(Value); + writer.Write(Data); + } + + internal static VistaBlock Decode(BinaryReader reader) + { + uint type = reader.ReadUInt32(); + uint flags = reader.ReadUInt32(); + + int valueLen = reader.ReadInt32(); + int dataLen = reader.ReadInt32(); + + byte[] value = reader.ReadBytes(valueLen); + byte[] data = reader.ReadBytes(dataLen); + return new VistaBlock + { + Type = (BlockType)type, + Flags = flags, + Value = value, + Data = data, + }; + } + } + + public sealed class PhysicalStoreVista : IPhysicalStore + { + private byte[] PreHeaderBytes = { }; + private readonly List Blocks = new List(); + private readonly FileStream TSPrimary; + private readonly FileStream TSSecondary; + private readonly bool Production; + + public byte[] Serialize() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(PreHeaderBytes); + + foreach (VistaBlock block in Blocks) + { + block.Encode(writer); + writer.Align(4); + } + + return writer.GetBytes(); + } + + public void Deserialize(byte[] data) + { + int len = data.Length; + + BinaryReader reader = new BinaryReader(new MemoryStream(data)); + PreHeaderBytes = reader.ReadBytes(8); + + while (reader.BaseStream.Position < len - 0x14) + { + Blocks.Add(VistaBlock.Decode(reader)); + reader.Align(4); + } + } + + public void AddBlock(PSBlock block) + { + Blocks.Add(new VistaBlock + { + Type = block.Type, + Flags = block.Flags, + Value = block.Value, + Data = block.Data + }); + } + + public void AddBlocks(IEnumerable blocks) + { + foreach (PSBlock block in blocks) + { + AddBlock(block); + } + } + + public PSBlock GetBlock(string key, string value) + { + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsStr == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = new byte[0], + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public PSBlock GetBlock(string key, uint value) + { + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsInt == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = new byte[0], + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public void SetBlock(string key, string value, byte[] data) + { + for (int i = 0; i < Blocks.Count; i++) + { + VistaBlock block = Blocks[i]; + + if (block.ValueAsStr == value) + { + block.Data = data; + Blocks[i] = block; + break; + } + } + } + + public void SetBlock(string key, uint value, byte[] data) + { + for (int i = 0; i < Blocks.Count; i++) + { + VistaBlock block = Blocks[i]; + + if (block.ValueAsInt == value) + { + block.Data = data; + Blocks[i] = block; + break; + } + } + } + + public void SetBlock(string key, string value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, string value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void SetBlock(string key, uint value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, uint value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void DeleteBlock(string key, string value) + { + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsStr == value) + { + Blocks.Remove(block); + return; + } + } + } + + public void DeleteBlock(string key, uint value) + { + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsInt == value) + { + Blocks.Remove(block); + return; + } + } + } + + public PhysicalStoreVista(string primaryPath, bool production) + { + TSPrimary = File.Open(primaryPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + TSSecondary = File.Open(primaryPath.Replace("-0.", "-1."), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + Production = production; + + Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), production, PSVersion.Vista)); + TSPrimary.Seek(0, SeekOrigin.Begin); + } + + public void Dispose() + { + if (TSPrimary.CanWrite && TSSecondary.CanWrite) + { + byte[] data = PhysStoreCrypto.EncryptPhysicalStore(Serialize(), Production, PSVersion.Vista); + + TSPrimary.SetLength(data.LongLength); + TSSecondary.SetLength(data.LongLength); + + TSPrimary.Seek(0, SeekOrigin.Begin); + TSSecondary.Seek(0, SeekOrigin.Begin); + + TSPrimary.WriteAllBytes(data); + TSSecondary.WriteAllBytes(data); + + TSPrimary.Close(); + TSSecondary.Close(); + } + } + + public byte[] ReadRaw() + { + byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), Production, PSVersion.Vista); + TSPrimary.Seek(0, SeekOrigin.Begin); + return data; + } + + public void WriteRaw(byte[] data) + { + byte[] encrData = PhysStoreCrypto.EncryptPhysicalStore(data, Production, PSVersion.Vista); + + TSPrimary.SetLength(encrData.LongLength); + TSSecondary.SetLength(encrData.LongLength); + + TSPrimary.Seek(0, SeekOrigin.Begin); + TSSecondary.Seek(0, SeekOrigin.Begin); + + TSPrimary.WriteAllBytes(encrData); + TSSecondary.WriteAllBytes(encrData); + + TSPrimary.Close(); + TSSecondary.Close(); + } + + public IEnumerable FindBlocks(string valueSearch) + { + List results = new List(); + + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsStr.Contains(valueSearch)) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = new byte[0], + Value = block.Value, + Data = block.Data + }); + } + } + + return results; + } + + public IEnumerable FindBlocks(uint valueSearch) + { + List results = new List(); + + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsInt == valueSearch) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = new byte[0], + Value = block.Value, + Data = block.Data + }); + } + } + + return results; + } + } +} + + // PhysicalStore/PhysicalStoreWin7.cs namespace LibTSforge.PhysicalStore { using System; using System.Collections.Generic; using System.IO; - using LibTSforge.Crypto; + using Crypto; public class Win7Block { @@ -8383,7 +9209,7 @@ namespace LibTSforge.PhysicalStore public sealed class PhysicalStoreWin7 : IPhysicalStore { - private byte[] PreHeaderBytes = new byte[] { }; + private byte[] PreHeaderBytes = { }; private readonly List Blocks = new List(); private readonly FileStream TSPrimary; private readonly FileStream TSSecondary; @@ -8557,7 +9383,7 @@ namespace LibTSforge.PhysicalStore TSSecondary = File.Open(primaryPath.Replace("-0.", "-1."), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); Production = production; - Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), production)); + Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), production, PSVersion.Win7)); TSPrimary.Seek(0, SeekOrigin.Begin); } @@ -8583,7 +9409,7 @@ namespace LibTSforge.PhysicalStore public byte[] ReadRaw() { - byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), Production); + byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), Production, PSVersion.Win7); TSPrimary.Seek(0, SeekOrigin.Begin); return data; } @@ -8666,7 +9492,7 @@ namespace LibTSforge.PhysicalStore BINARY = 1 << 2 } - public class CRCBlock + public abstract class CRCBlock { public CRCBlockType DataType; public byte[] Key; @@ -8705,7 +9531,57 @@ namespace LibTSforge.PhysicalStore } } - public void Encode(BinaryWriter writer) + public abstract void Encode(BinaryWriter writer); + public abstract void Decode(BinaryReader reader); + public abstract uint CRC(); + } + + public class CRCBlockVista : CRCBlock + { + public override void Encode(BinaryWriter writer) + { + uint crc = CRC(); + writer.Write((uint)DataType); + writer.Write(0); + writer.Write(Key.Length); + writer.Write(Value.Length); + writer.Write(crc); + + writer.Write(Key); + + writer.Write(Value); + } + + public override void Decode(BinaryReader reader) + { + uint type = reader.ReadUInt32(); + reader.ReadUInt32(); + uint lenName = reader.ReadUInt32(); + uint lenVal = reader.ReadUInt32(); + uint crc = reader.ReadUInt32(); + + byte[] key = reader.ReadBytes((int)lenName); + byte[] value = reader.ReadBytes((int)lenVal); + + DataType = (CRCBlockType)type; + Key = key; + Value = value; + + if (CRC() != crc) + { + throw new InvalidDataException("Invalid CRC in variable bag."); + } + } + + public override uint CRC() + { + return Utils.CRC32(Value); + } + } + + public class CRCBlockModern : CRCBlock + { + public override void Encode(BinaryWriter writer) { uint crc = CRC(); writer.Write(crc); @@ -8720,7 +9596,7 @@ namespace LibTSforge.PhysicalStore writer.Align(8); } - public static CRCBlock Decode(BinaryReader reader) + public override void Decode(BinaryReader reader) { uint crc = reader.ReadUInt32(); uint type = reader.ReadUInt32(); @@ -8733,22 +9609,17 @@ namespace LibTSforge.PhysicalStore byte[] value = reader.ReadBytes((int)lenVal); reader.Align(8); - CRCBlock block = new CRCBlock - { - DataType = (CRCBlockType)type, - Key = key, - Value = value, - }; + DataType = (CRCBlockType)type; + Key = key; + Value = value; - if (block.CRC() != crc) + if (CRC() != crc) { throw new InvalidDataException("Invalid CRC in variable bag."); } - - return block; } - public uint CRC() + public override uint CRC() { BinaryWriter wtemp = new BinaryWriter(new MemoryStream()); wtemp.Write(0); @@ -8764,8 +9635,9 @@ namespace LibTSforge.PhysicalStore public class VariableBag { public List Blocks = new List(); + private readonly PSVersion Version; - public void Deserialize(byte[] data) + private void Deserialize(byte[] data) { int len = data.Length; @@ -8773,7 +9645,19 @@ namespace LibTSforge.PhysicalStore while (reader.BaseStream.Position < len - 0x10) { - Blocks.Add(CRCBlock.Decode(reader)); + CRCBlock block; + + if (Version == PSVersion.Vista) + { + block = new CRCBlockVista(); + } + else + { + block = new CRCBlockModern(); + } + + block.Decode(reader); + Blocks.Add(block); } } @@ -8783,7 +9667,13 @@ namespace LibTSforge.PhysicalStore foreach (CRCBlock block in Blocks) { - block.Encode(writer); + if (Version == PSVersion.Vista) + { + ((CRCBlockVista)block).Encode(writer); + } else + { + ((CRCBlockModern)block).Encode(writer); + } } return writer.GetBytes(); @@ -8829,14 +9719,15 @@ namespace LibTSforge.PhysicalStore } } - public VariableBag(byte[] data) + public VariableBag(byte[] data, PSVersion version) { + Version = version; Deserialize(data); } - public VariableBag() + public VariableBag(PSVersion version) { - + Version = version; } } } @@ -8866,7 +9757,7 @@ if ($env:_debug -eq '0') { [LibTSforge.Logger]::HideOutput = $true } $ver = [LibTSforge.Utils]::DetectVersion() -$prod = [LibTSforge.Utils]::DetectCurrentKey() +$prod = [LibTSforge.SPP.SPPUtils]::DetectCurrentKey() $tsactids = @($args) function Get-WmiInfo { @@ -8918,7 +9809,7 @@ if ($env:resetstuff -eq $null) { $licenseStatus = Get-WmiInfo -tsactid $tsactid -property "LicenseStatus" if ($licenseStatus -eq 1) { if ($prodDes -match 'KMS' -and $prodDes -notmatch 'CLIENT') { - [LibTSforge.Modifiers.KMSHostCharge]::Charge($ver, $tsactid, $prod) + [LibTSforge.Modifiers.KMSHostCharge]::Charge($ver, $prod, $tsactid) Write-Host "[$prodName] CSVLK is permanently activated with ZeroCID." -ForegroundColor White -BackgroundColor DarkGreen Write-Host "[$prodName] CSVLK is charged with 25 clients for 30 days." -ForegroundColor White -BackgroundColor DarkGreen } diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 641f92d..350ae2a 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -2834,23 +2834,16 @@ $src = @' // Common.cs namespace LibTSforge { - using Microsoft.Win32; using System; using System.IO; using System.Linq; using System.Runtime.InteropServices; - using System.ServiceProcess; using System.Text; - using LibTSforge.Crypto; - using LibTSforge.PhysicalStore; - using LibTSforge.SPP; - using LibTSforge.TokenStore; public enum PSVersion { Vista, Win7, - Win8Early, Win8, WinBlue, WinModern @@ -2921,8 +2914,8 @@ namespace LibTSforge 0x92, 0xA6, 0x56, 0x96 }; - // 2^31 - 1 minutes - public static ulong TimerMax = (ulong)TimeSpan.FromMinutes(2147483647).Ticks; + // 2^31 - 8 minutes + public static readonly ulong TimerMax = (ulong)TimeSpan.FromMinutes(2147483640).Ticks; public static readonly string ZeroCID = new string('0', 48); } @@ -2990,20 +2983,6 @@ namespace LibTSforge } return result; } - - public static T CastToStruct(this byte[] data) where T : struct - { - GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); - try - { - IntPtr ptr = handle.AddrOfPinnedObject(); - return (T)Marshal.PtrToStructure(ptr, typeof(T)); - } - finally - { - handle.Free(); - } - } } public static class FileStreamExt @@ -3024,6 +3003,12 @@ namespace LibTSforge public static class Utils { + [DllImport("kernel32.dll")] + public static extern uint GetSystemDefaultLCID(); + + [DllImport("kernel32.dll")] + public static extern bool Wow64EnableWow64FsRedirection(bool Wow64FsEnableRedirection); + public static string DecodeString(byte[] data) { return Encoding.Unicode.GetString(data).Trim('\0'); @@ -3034,9 +3019,6 @@ namespace LibTSforge return Encoding.Unicode.GetBytes(str + '\0'); } - [DllImport("kernel32.dll")] - public static extern uint GetSystemDefaultLCID(); - public static uint CRC32(byte[] data) { const uint polynomial = 0x04C11DB7; @@ -3060,157 +3042,6 @@ namespace LibTSforge return ~crc; } - public static void KillSPP() - { - ServiceController sc; - - try - { - sc = new ServiceController("sppsvc"); - - if (sc.Status == ServiceControllerStatus.Stopped) - return; - } - catch (InvalidOperationException ex) - { - throw new InvalidOperationException("Unable to access sppsvc: " + ex.Message); - } - - Logger.WriteLine("Stopping sppsvc..."); - - bool stopped = false; - - for (int i = 0; stopped == false && i < 60; i++) - { - try - { - if (sc.Status != ServiceControllerStatus.StopPending) - sc.Stop(); - - sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromMilliseconds(500)); - } - catch (System.ServiceProcess.TimeoutException) - { - continue; - } - catch (InvalidOperationException) - { - System.Threading.Thread.Sleep(500); - continue; - } - - stopped = true; - } - - if (!stopped) - throw new System.TimeoutException("Failed to stop sppsvc"); - - Logger.WriteLine("sppsvc stopped successfully."); - } - - public static string GetPSPath(PSVersion version) - { - switch (version) - { - case PSVersion.Win7: - return Directory.GetFiles( - Environment.GetFolderPath(Environment.SpecialFolder.System), - "7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-8115-601632D005A0") - .FirstOrDefault() ?? ""; - case PSVersion.Win8Early: - case PSVersion.WinBlue: - case PSVersion.Win8: - case PSVersion.WinModern: - return Path.Combine( - Environment.ExpandEnvironmentVariables( - (string)Registry.GetValue( - @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", - "TokenStore", - string.Empty - ) - ), - "data.dat" - ); - default: - return ""; - } - } - - public static string GetTokensPath(PSVersion version) - { - switch (version) - { - case PSVersion.Win7: - return Path.Combine( - Environment.ExpandEnvironmentVariables("%WINDIR%"), - @"ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat" - ); - case PSVersion.Win8Early: - case PSVersion.WinBlue: - case PSVersion.Win8: - case PSVersion.WinModern: - return Path.Combine( - Environment.ExpandEnvironmentVariables( - (string)Registry.GetValue( - @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", - "TokenStore", - string.Empty - ) - ), - "tokens.dat" - ); - default: - return ""; - } - } - - public static IPhysicalStore GetStore(PSVersion version, bool production) - { - string psPath; - - try - { - psPath = GetPSPath(version); - } - catch - { - throw new FileNotFoundException("Failed to get path of physical store."); - } - - if (string.IsNullOrEmpty(psPath) || !File.Exists(psPath)) - { - throw new FileNotFoundException(string.Format("Physical store not found at expected path {0}.", psPath)); - } - - if (version == PSVersion.Vista) - { - throw new NotSupportedException("Physical store editing is not supported for Windows Vista."); - } - - return version == PSVersion.Win7 ? new PhysicalStoreWin7(psPath, production) : (IPhysicalStore)new PhysicalStoreModern(psPath, production, version); - } - - public static ITokenStore GetTokenStore(PSVersion version) - { - string tokPath; - - try - { - tokPath = GetTokensPath(version); - } - catch - { - throw new FileNotFoundException("Failed to get path of physical store."); - } - - if (string.IsNullOrEmpty(tokPath) || !File.Exists(tokPath)) - { - throw new FileNotFoundException(string.Format("Token store not found at expected path {0}.", tokPath)); - } - - return new TokenStoreModern(tokPath); - } - public static string GetArchitecture() { string arch = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE", EnvironmentVariableTarget.Machine).ToUpperInvariant(); @@ -3226,65 +3057,7 @@ namespace LibTSforge if (build >= 7600 && build <= 7602) return PSVersion.Win7; if (build == 9200) return PSVersion.Win8; - throw new NotSupportedException("Unable to auto-detect version info, please specify one manually using the /ver argument."); - } - - public static bool DetectCurrentKey() - { - SLApi.RefreshLicenseStatus(); - - using (RegistryKey wpaKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\WPA")) - { - foreach (string subKey in wpaKey.GetSubKeyNames()) - { - if (subKey.StartsWith("8DEC0AF1") && subKey.EndsWith("-1")) - { - return subKey.Contains("P"); - } - } - } - - throw new FileNotFoundException("Failed to autodetect key type, specify physical store key with /prod or /test arguments."); - } - - public static void DumpStore(PSVersion version, bool production, string filePath, string encrFilePath) - { - if (encrFilePath == null) - { - encrFilePath = GetPSPath(version); - } - - if (string.IsNullOrEmpty(encrFilePath) || !File.Exists(encrFilePath)) - { - throw new FileNotFoundException("Store does not exist at expected path '" + encrFilePath + "'."); - } - - KillSPP(); - - using (FileStream fs = File.Open(encrFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)) - { - byte[] encrData = fs.ReadAllBytes(); - File.WriteAllBytes(filePath, PhysStoreCrypto.DecryptPhysicalStore(encrData, production)); - } - - Logger.WriteLine("Store dumped successfully to '" + filePath + "'."); - } - - public static void LoadStore(PSVersion version, bool production, string filePath) - { - if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) - { - throw new FileNotFoundException("Store file '" + filePath + "' does not exist."); - } - - KillSPP(); - - using (IPhysicalStore store = GetStore(version, production)) - { - store.WriteRaw(File.ReadAllBytes(filePath)); - } - - Logger.WriteLine("Loaded store file succesfully."); + throw new NotSupportedException("Unable to auto-detect version info"); } } @@ -3377,8 +3150,8 @@ namespace LibTSforge.SPP public class PKeyConfig { - public Dictionary Products = new Dictionary(); - private List loadedPkeyConfigs = new List(); + public readonly Dictionary Products = new Dictionary(); + private readonly List loadedPkeyConfigs = new List(); public void LoadConfig(Guid actId) { @@ -3439,12 +3212,14 @@ namespace LibTSforge.SPP ranges[refActIdStr] = new List(); } - KeyRange keyRange = new KeyRange(); - keyRange.Start = int.Parse(rangeNode.SelectSingleNode("./p:Start", nsmgr).InnerText); - keyRange.End = int.Parse(rangeNode.SelectSingleNode("./p:End", nsmgr).InnerText); - keyRange.EulaType = rangeNode.SelectSingleNode("./p:EulaType", nsmgr).InnerText; - keyRange.PartNumber = rangeNode.SelectSingleNode("./p:PartNumber", nsmgr).InnerText; - keyRange.Valid = rangeNode.SelectSingleNode("./p:IsValid", nsmgr).InnerText.ToLower() == "true"; + KeyRange keyRange = new KeyRange + { + Start = int.Parse(rangeNode.SelectSingleNode("./p:Start", nsmgr).InnerText), + End = int.Parse(rangeNode.SelectSingleNode("./p:End", nsmgr).InnerText), + EulaType = rangeNode.SelectSingleNode("./p:EulaType", nsmgr).InnerText, + PartNumber = rangeNode.SelectSingleNode("./p:PartNumber", nsmgr).InnerText, + Valid = rangeNode.SelectSingleNode("./p:IsValid", nsmgr).InnerText.ToLower() == "true" + }; ranges[refActIdStr].Add(keyRange); } @@ -3458,15 +3233,17 @@ namespace LibTSforge.SPP if (keyRanges.Count > 0 && !Products.ContainsKey(refActId)) { - ProductConfig productConfig = new ProductConfig(); - productConfig.GroupId = group; - productConfig.Edition = configNode.SelectSingleNode("./p:EditionId", nsmgr).InnerText; - productConfig.Description = configNode.SelectSingleNode("./p:ProductDescription", nsmgr).InnerText; - productConfig.Channel = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText; - productConfig.Randomized = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText.ToLower() == "true"; - productConfig.Algorithm = algorithms[group]; - productConfig.Ranges = keyRanges; - productConfig.ActivationId = refActId; + ProductConfig productConfig = new ProductConfig + { + GroupId = group, + Edition = configNode.SelectSingleNode("./p:EditionId", nsmgr).InnerText, + Description = configNode.SelectSingleNode("./p:ProductDescription", nsmgr).InnerText, + Channel = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText, + Randomized = configNode.SelectSingleNode("./p:ProductKeyType", nsmgr).InnerText.ToLower() == "true", + Algorithm = algorithms[group], + Ranges = keyRanges, + ActivationId = refActId + }; Products[refActId] = productConfig; } @@ -3509,11 +3286,6 @@ namespace LibTSforge.SPP } } } - - public PKeyConfig() - { - - } } } @@ -3524,8 +3296,8 @@ namespace LibTSforge.SPP using System; using System.IO; using System.Linq; - using LibTSforge.Crypto; - using LibTSforge.PhysicalStore; + using Crypto; + using PhysicalStore; public class ProductKey { @@ -3539,11 +3311,11 @@ namespace LibTSforge.SPP public ulong Security; public bool Upgrade; public PKeyAlgorithm Algorithm; - public string EulaType; - public string PartNumber; - public string Edition; - public string Channel; - public Guid ActivationId; + public readonly string EulaType; + public readonly string PartNumber; + public readonly string Edition; + public readonly string Channel; + public readonly Guid ActivationId; private string mpc; private string pid2; @@ -3553,6 +3325,11 @@ namespace LibTSforge.SPP get { return BitConverter.GetBytes(klow).Concat(BitConverter.GetBytes(khigh)).ToArray(); } } + public ProductKey() + { + + } + public ProductKey(int serial, ulong security, bool upgrade, PKeyAlgorithm algorithm, ProductConfig config, KeyRange range) { Group = config.GroupId; @@ -3581,22 +3358,22 @@ namespace LibTSforge.SPP public Guid GetPkeyId() { - VariableBag pkb = new VariableBag(); - pkb.Blocks.AddRange(new CRCBlock[] + VariableBag pkb = new VariableBag(PSVersion.WinModern); + pkb.Blocks.AddRange(new[] { - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyBindingProductKey", ValueAsStr = ToString() }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = "SppPkeyBindingMiscData", Value = new byte[] { } }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyBindingAlgorithm", @@ -3607,16 +3384,6 @@ namespace LibTSforge.SPP return new Guid(CryptoUtils.SHA256Hash(pkb.Serialize()).Take(16).ToArray()); } - public string GetDefaultMPC() - { - int build = Environment.OSVersion.Version.Build; - string defaultMPC = build >= 10240 ? "03612" : - build >= 9600 ? "06401" : - build >= 9200 ? "05426" : - "55041"; - return defaultMPC; - } - public string GetMPC() { if (mpc != null) @@ -3624,10 +3391,15 @@ namespace LibTSforge.SPP return mpc; } - mpc = GetDefaultMPC(); + int build = Environment.OSVersion.Version.Build; + + mpc = build >= 10240 ? "03612" : + build >= 9600 ? "06401" : + build >= 9200 ? "05426" : + "55041"; // setup.cfg doesn't exist in Windows 8+ - string setupcfg = string.Format("{0}\\oobe\\{1}", Environment.SystemDirectory, "setup.cfg"); + string setupcfg = string.Format(@"{0}\oobe\{1}", Environment.SystemDirectory, "setup.cfg"); if (!File.Exists(setupcfg) || Edition.Contains(";")) { @@ -3765,17 +3537,17 @@ namespace LibTSforge.SPP { if (version == PSVersion.Win7) { - Random rnd = new Random(Group * 1000000000 + Serial); - byte[] data = new byte[8]; - rnd.NextBytes(data); - return data; + ulong shortauth = ((ulong)Group << 41) | (Security << 31) | ((ulong)Serial << 1) | (Upgrade ? (ulong)1 : 0); + return BitConverter.GetBytes(shortauth); } int serialHigh = Serial / 1000000; int serialLow = Serial % 1000000; BinaryWriter writer = new BinaryWriter(new MemoryStream()); - writer.Write(new Guid("B8731595-A2F6-430B-A799-FBFFB81A8D73").ToByteArray()); + string algoId = Algorithm == PKeyAlgorithm.PKEY2005 ? "B8731595-A2F6-430B-A799-FBFFB81A8D73" : "660672EF-7809-4CFD-8D54-41B7FB738988"; + + writer.Write(new Guid(algoId).ToByteArray()); writer.Write(Group); writer.Write(serialHigh); writer.Write(serialLow); @@ -3881,40 +3653,40 @@ namespace LibTSforge.SPP public static readonly Guid WINDOWS_APP_ID = new Guid("55c92734-d682-4d71-983e-d6ec3f16059f"); - [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + [DllImport("slc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] private static extern void SLOpen(out IntPtr hSLC); - [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + [DllImport("slc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] private static extern void SLClose(IntPtr hSLC); [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetWindowsInformationDWORD(string ValueName, ref int Value); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLInstallProofOfPurchase(IntPtr hSLC, string pwszPKeyAlgorithm, string pwszPKeyString, uint cbPKeySpecificData, byte[] pbPKeySpecificData, ref Guid PKeyId); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLUninstallProofOfPurchase(IntPtr hSLC, ref Guid PKeyId); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetPKeyInformation(IntPtr hSLC, ref Guid pPKeyId, string pwszValueName, out SLDATATYPE peDataType, out uint pcbValue, out IntPtr ppbValue); - [DllImport("sppcext.dll", CharSet = CharSet.Unicode)] + [DllImport("slcext.dll", CharSet = CharSet.Unicode)] private static extern uint SLActivateProduct(IntPtr hSLC, ref Guid pProductSkuId, byte[] cbAppSpecificData, byte[] pvAppSpecificData, byte[] pActivationInfo, string pwszProxyServer, ushort wProxyPort); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGenerateOfflineInstallationId(IntPtr hSLC, ref Guid pProductSkuId, ref string ppwszInstallationId); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLDepositOfflineConfirmationId(IntPtr hSLC, ref Guid pProductSkuId, string pwszInstallationId, string pwszConfirmationId); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetSLIDList(IntPtr hSLC, SLIDTYPE eQueryIdType, ref Guid pQueryId, SLIDTYPE eReturnIdType, out uint pnReturnIds, out IntPtr ppReturnIds); - [DllImport("sppc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + [DllImport("slc.dll", CharSet = CharSet.Unicode, PreserveSig = false)] private static extern void SLGetLicensingStatusInformation(IntPtr hSLC, ref Guid pAppID, IntPtr pProductSkuId, string pwszRightName, out uint pnStatusCount, out IntPtr ppLicensingStatus); - [DllImport("sppc.dll", CharSet = CharSet.Unicode)] + [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetInstalledProductKeyIds(IntPtr hSLC, ref Guid pProductSkuId, out uint pnProductKeyIds, out IntPtr ppProductKeyIds); [DllImport("slc.dll", CharSet = CharSet.Unicode)] @@ -3923,9 +3695,6 @@ namespace LibTSforge.SPP [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetProductSkuInformation(IntPtr hSLC, ref Guid pProductSkuId, string pwszValueName, out SLDATATYPE peDataType, out uint pcbValue, out IntPtr ppbValue); - [DllImport("slc.dll", CharSet = CharSet.Unicode)] - private static extern uint SLGetProductSkuInformation(IntPtr hSLC, ref Guid pProductSkuId, string pwszValueName, IntPtr peDataType, out uint pcbValue, out IntPtr ppbValue); - [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLGetLicense(IntPtr hSLC, ref Guid pLicenseFileId, out uint pcbLicenseFile, out IntPtr ppbLicenseFile); @@ -3935,7 +3704,7 @@ namespace LibTSforge.SPP [DllImport("slc.dll", CharSet = CharSet.Unicode)] private static extern uint SLFireEvent(IntPtr hSLC, string pwszEventId, ref Guid pApplicationId); - public class SLContext : IDisposable + private class SLContext : IDisposable { public readonly IntPtr Handle; @@ -3998,11 +3767,10 @@ namespace LibTSforge.SPP { using (SLContext sl = new SLContext()) { - uint status; uint count; IntPtr pProductKeyIds; - status = SLGetInstalledProductKeyIds(sl.Handle, ref actId, out count, out pProductKeyIds); + uint status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_PKEY, out count, out pProductKeyIds); if (status != 0 || count == 0) { @@ -4026,7 +3794,7 @@ namespace LibTSforge.SPP SLConsumeWindowsRight(0); } - public static bool RefreshTrustedTime(Guid actId) + public static void RefreshTrustedTime(Guid actId) { using (SLContext sl = new SLContext()) { @@ -4034,8 +3802,7 @@ namespace LibTSforge.SPP uint count; IntPtr ppbValue; - uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "TrustedTime", out type, out count, out ppbValue); - return (int)status >= 0 && status != 0xC004F012; + SLGetProductSkuInformation(sl.Handle, ref actId, "TrustedTime", out type, out count, out ppbValue); } } @@ -4051,11 +3818,10 @@ namespace LibTSforge.SPP { using (SLContext sl = new SLContext()) { - uint status; uint count; IntPtr pAppIds; - status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_APPLICATION, out count, out pAppIds); + uint status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_APPLICATION, out count, out pAppIds); if (status != 0 || count == 0) { @@ -4083,11 +3849,10 @@ namespace LibTSforge.SPP { using (SLContext sl = new SLContext()) { - uint status; uint count; IntPtr ppReturnLics; - status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_LICENSE, ref licId, SLIDTYPE.SL_ID_LICENSE_FILE, out count, out ppReturnLics); + uint status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_LICENSE, ref licId, SLIDTYPE.SL_ID_LICENSE_FILE, out count, out ppReturnLics); if (status != 0 || count == 0) { @@ -4149,7 +3914,7 @@ namespace LibTSforge.SPP IntPtr ppbValue; uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "msft:sl/EUL/PHONE/PUBLIC", out type, out count, out ppbValue); - return status >= 0 && status != 0xC004F012; + return status != 0xC004F012; } } @@ -4232,11 +3997,11 @@ namespace LibTSforge.SPP } } - public static uint UninstallProductKey(Guid pkeyId) + public static void UninstallProductKey(Guid pkeyId) { using (SLContext sl = new SLContext()) { - return SLUninstallProofOfPurchase(sl.Handle, ref pkeyId); + SLUninstallProofOfPurchase(sl.Handle, ref pkeyId); } } @@ -4254,6 +4019,390 @@ namespace LibTSforge.SPP } +// SPP/SPPUtils.cs +namespace LibTSforge.SPP +{ + using Microsoft.Win32; + using System; + using System.IO; + using System.Linq; + using System.ServiceProcess; + using Crypto; + using PhysicalStore; + using TokenStore; + + public static class SPPUtils + { + public static void KillSPP(PSVersion version) + { + ServiceController sc; + + string svcName = version == PSVersion.Vista ? "slsvc" : "sppsvc"; + + try + { + sc = new ServiceController(svcName); + + if (sc.Status == ServiceControllerStatus.Stopped) + return; + } + catch (InvalidOperationException ex) + { + throw new InvalidOperationException(string.Format("Unable to access {0}: ", svcName) + ex.Message); + } + + Logger.WriteLine(string.Format("Stopping {0}...", svcName)); + + bool stopped = false; + + for (int i = 0; stopped == false && i < 1080; i++) + { + try + { + if (sc.Status != ServiceControllerStatus.StopPending) + sc.Stop(); + + sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromMilliseconds(500)); + } + catch (System.ServiceProcess.TimeoutException) + { + continue; + } + catch (InvalidOperationException ex) + { + Logger.WriteLine("Warning: Stopping sppsvc failed, retrying. Details: " + ex.Message); + System.Threading.Thread.Sleep(500); + continue; + } + + stopped = true; + } + + if (!stopped) + throw new System.TimeoutException(string.Format("Failed to stop {0}", svcName)); + + Logger.WriteLine(string.Format("{0} stopped successfully.", svcName)); + + if (version == PSVersion.Vista && SPSys.IsSpSysRunning()) + { + Logger.WriteLine("Unloading spsys..."); + + int status = SPSys.ControlSpSys(false); + + if (status < 0) + { + throw new IOException("Failed to unload spsys"); + } + + Logger.WriteLine("spsys unloaded successfully."); + } + } + + public static void RestartSPP(PSVersion version) + { + if (version == PSVersion.Vista) + { + ServiceController sc; + + try + { + sc = new ServiceController("slsvc"); + + if (sc.Status == ServiceControllerStatus.Running) + return; + } + catch (InvalidOperationException ex) + { + throw new InvalidOperationException("Unable to access slsvc: " + ex.Message); + } + + Logger.WriteLine("Starting slsvc..."); + + bool started = false; + + for (int i = 0; started == false && i < 360; i++) + { + try + { + if (sc.Status != ServiceControllerStatus.StartPending) + sc.Start(); + + sc.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromMilliseconds(500)); + } + catch (System.ServiceProcess.TimeoutException) + { + continue; + } + catch (InvalidOperationException ex) + { + Logger.WriteLine("Warning: Starting slsvc failed, retrying. Details: " + ex.Message); + System.Threading.Thread.Sleep(500); + continue; + } + + started = true; + } + + if (!started) + throw new System.TimeoutException("Failed to start slsvc"); + + Logger.WriteLine("slsvc started successfully."); + } + + SLApi.RefreshLicenseStatus(); + } + + public static bool DetectCurrentKey() + { + SLApi.RefreshLicenseStatus(); + + using (RegistryKey wpaKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\WPA")) + { + foreach (string subKey in wpaKey.GetSubKeyNames()) + { + if (subKey.StartsWith("8DEC0AF1")) + { + return subKey.Contains("P"); + } + } + } + + throw new FileNotFoundException("Failed to autodetect key type, specify physical store key with /prod or /test arguments."); + } + + public static string GetPSPath(PSVersion version) + { + switch (version) + { + case PSVersion.Vista: + case PSVersion.Win7: + return Directory.GetFiles( + Environment.GetFolderPath(Environment.SpecialFolder.System), + "7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-8115-601632D005A0") + .FirstOrDefault() ?? ""; + default: + string psDir = Environment.ExpandEnvironmentVariables( + (string)Registry.GetValue( + @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", + "TokenStore", + "" + ) + ); + string psPath = Path.Combine(psDir, "data.dat"); + + if (string.IsNullOrEmpty(psDir) || !File.Exists(psPath)) + { + string[] psDirs = + { + @"spp\store", + @"spp\store\2.0", + @"spp\store_test", + @"spp\store_test\2.0" + }; + + foreach (string dir in psDirs) + { + psPath = Path.Combine( + Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.System), + dir + ), + "data.dat" + ); + + if (File.Exists(psPath)) return psPath; + } + } + else + { + return psPath; + } + + throw new FileNotFoundException("Failed to locate physical store."); + } + } + + public static string GetTokensPath(PSVersion version) + { + switch (version) + { + case PSVersion.Vista: + return Path.Combine( + Environment.ExpandEnvironmentVariables("%WINDIR%"), + @"ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareLicensing\tokens.dat" + ); + case PSVersion.Win7: + return Path.Combine( + Environment.ExpandEnvironmentVariables("%WINDIR%"), + @"ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat" + ); + default: + string tokDir = Environment.ExpandEnvironmentVariables( + (string)Registry.GetValue( + @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform", + "TokenStore", + "" + ) + ); + string tokPath = Path.Combine(tokDir, "tokens.dat"); + + if (string.IsNullOrEmpty(tokDir) || !File.Exists(tokPath)) + { + string[] tokDirs = + { + @"spp\store", + @"spp\store\2.0", + @"spp\store_test", + @"spp\store_test\2.0" + }; + + foreach (string dir in tokDirs) + { + tokPath = Path.Combine( + Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.System), + dir + ), + "tokens.dat" + ); + + if (File.Exists(tokPath)) return tokPath; + } + } + else + { + return tokPath; + } + + throw new FileNotFoundException("Failed to locate token store."); + } + } + + public static IPhysicalStore GetStore(PSVersion version, bool production) + { + string psPath = GetPSPath(version); + + switch (version) + { + case PSVersion.Vista: + return new PhysicalStoreVista(psPath, production); + case PSVersion.Win7: + return new PhysicalStoreWin7(psPath, production); + default: + return new PhysicalStoreModern(psPath, production, version); + } + } + + public static ITokenStore GetTokenStore(PSVersion version) + { + string tokPath = GetTokensPath(version); + + return new TokenStoreModern(tokPath); + } + + public static void DumpStore(PSVersion version, bool production, string filePath, string encrFilePath) + { + bool manageSpp = false; + + if (encrFilePath == null) + { + encrFilePath = GetPSPath(version); + manageSpp = true; + KillSPP(version); + } + + if (string.IsNullOrEmpty(encrFilePath) || !File.Exists(encrFilePath)) + { + throw new FileNotFoundException("Store does not exist at expected path '" + encrFilePath + "'."); + } + + try + { + using (FileStream fs = File.Open(encrFilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + byte[] encrData = fs.ReadAllBytes(); + File.WriteAllBytes(filePath, PhysStoreCrypto.DecryptPhysicalStore(encrData, production, version)); + } + Logger.WriteLine("Store dumped successfully to '" + filePath + "'."); + } + finally + { + if (manageSpp) + { + RestartSPP(version); + } + } + } + + public static void LoadStore(PSVersion version, bool production, string filePath) + { + if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) + { + throw new FileNotFoundException("Store file '" + filePath + "' does not exist."); + } + + KillSPP(version); + + using (IPhysicalStore store = GetStore(version, production)) + { + store.WriteRaw(File.ReadAllBytes(filePath)); + } + + RestartSPP(version); + + Logger.WriteLine("Loaded store file successfully."); + } + } +} + + +// SPP/SPSys.cs +namespace LibTSforge.SPP +{ + using Microsoft.Win32.SafeHandles; + using System; + using System.Runtime.InteropServices; + + public class SPSys + { + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile); + private static SafeFileHandle CreateFileSafe(string device) + { + return new SafeFileHandle(CreateFile(device, 0xC0000000, 0, IntPtr.Zero, 3, 0, IntPtr.Zero), true); + } + + [return: MarshalAs(UnmanagedType.Bool)] + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern bool DeviceIoControl([In] SafeFileHandle hDevice, [In] uint dwIoControlCode, [In] IntPtr lpInBuffer, [In] int nInBufferSize, [Out] IntPtr lpOutBuffer, [In] int nOutBufferSize, out int lpBytesReturned, [In] IntPtr lpOverlapped); + + public static bool IsSpSysRunning() + { + SafeFileHandle file = CreateFileSafe(@"\\.\SpDevice"); + IntPtr buffer = Marshal.AllocHGlobal(1); + int bytesReturned; + DeviceIoControl(file, 0x80006008, IntPtr.Zero, 0, buffer, 1, out bytesReturned, IntPtr.Zero); + bool running = Marshal.ReadByte(buffer) != 0; + Marshal.FreeHGlobal(buffer); + file.Close(); + return running; + } + + public static int ControlSpSys(bool start) + { + SafeFileHandle file = CreateFileSafe(@"\\.\SpDevice"); + IntPtr buffer = Marshal.AllocHGlobal(4); + int bytesReturned; + DeviceIoControl(file, start ? 0x8000a000 : 0x8000a004, IntPtr.Zero, 0, buffer, 4, out bytesReturned, IntPtr.Zero); + int result = Marshal.ReadInt32(buffer); + Marshal.FreeHGlobal(buffer); + file.Close(); + return result; + } + } +} + + // Crypto/CryptoUtils.cs namespace LibTSforge.Crypto { @@ -4363,10 +4512,21 @@ namespace LibTSforge.Crypto public static bool HMACVerify(byte[] key, byte[] data, byte[] signature) { - HMACSHA1 hmac = new HMACSHA1(key); return Enumerable.SequenceEqual(signature, HMACSign(key, data)); } + public static byte[] SaltSHASum(byte[] salt, byte[] data) + { + SHA1 sha1 = SHA1.Create(); + byte[] sha_data = salt.Concat(data).ToArray(); + return sha1.ComputeHash(sha_data); + } + + public static bool SaltSHAVerify(byte[] salt, byte[] data, byte[] checksum) + { + return Enumerable.SequenceEqual(checksum, SaltSHASum(salt, data)); + } + public static byte[] SHA256Hash(byte[] data) { using (SHA256 sha256 = SHA256.Create()) @@ -4479,7 +4639,7 @@ namespace LibTSforge.Crypto public static class PhysStoreCrypto { - public static byte[] DecryptPhysicalStore(byte[] data, bool production) + public static byte[] DecryptPhysicalStore(byte[] data, bool production, PSVersion version) { byte[] rsaKey = production ? Keys.PRODUCTION : Keys.TEST; BinaryReader br = new BinaryReader(new MemoryStream(data)); @@ -4487,29 +4647,40 @@ namespace LibTSforge.Crypto byte[] aesKeySig = br.ReadBytes(0x80); byte[] encAesKey = br.ReadBytes(0x80); - if (CryptoUtils.RSAVerifySignature(rsaKey, encAesKey, aesKeySig)) + if (!CryptoUtils.RSAVerifySignature(rsaKey, encAesKey, aesKeySig)) { - byte[] aesKey = CryptoUtils.RSADecrypt(rsaKey, encAesKey); - byte[] decData = CryptoUtils.AESDecrypt(br.ReadBytes((int)br.BaseStream.Length - 0x110), aesKey); - byte[] hmacKey = decData.Take(0x10).ToArray(); - byte[] hmacSig = decData.Skip(0x10).Take(0x14).ToArray(); - byte[] psData = decData.Skip(0x28).ToArray(); - - if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig)) - { - Logger.WriteLine("Warning: Failed to verify HMAC. Physical store is either corrupt or in Vista format."); - } - - return psData; + throw new Exception("Failed to decrypt physical store."); } - throw new Exception("Failed to decrypt physical store."); + byte[] aesKey = CryptoUtils.RSADecrypt(rsaKey, encAesKey); + byte[] decData = CryptoUtils.AESDecrypt(br.ReadBytes((int)br.BaseStream.Length - 0x110), aesKey); + byte[] hmacKey = decData.Take(0x10).ToArray(); // SHA-1 salt on Vista + byte[] hmacSig = decData.Skip(0x10).Take(0x14).ToArray(); // SHA-1 hash on Vista + byte[] psData = decData.Skip(0x28).ToArray(); + + if (version != PSVersion.Vista) + { + if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig)) + { + throw new InvalidDataException("Failed to verify HMAC. Physical store is corrupt."); + } + } + else + { + if (!CryptoUtils.SaltSHAVerify(hmacKey, psData, hmacSig)) + { + throw new InvalidDataException("Failed to verify checksum. Physical store is corrupt."); + } + } + + return psData; } public static byte[] EncryptPhysicalStore(byte[] data, bool production, PSVersion version) { Dictionary versionTable = new Dictionary { + {PSVersion.Vista, 2}, {PSVersion.Win7, 5}, {PSVersion.Win8, 1}, {PSVersion.WinBlue, 2}, @@ -4523,9 +4694,9 @@ namespace LibTSforge.Crypto byte[] encAesKey = CryptoUtils.RSAEncrypt(rsaKey, aesKey); byte[] aesKeySig = CryptoUtils.RSASign(rsaKey, encAesKey); - byte[] hmacSig = CryptoUtils.HMACSign(hmacKey, data); + byte[] hmacSig = version != PSVersion.Vista ? CryptoUtils.HMACSign(hmacKey, data) : CryptoUtils.SaltSHASum(hmacKey, data); - byte[] decData = new byte[] { }; + byte[] decData = { }; decData = decData.Concat(hmacKey).Concat(hmacSig).Concat(BitConverter.GetBytes(0)).Concat(data).ToArray(); byte[] encData = CryptoUtils.AESEncrypt(decData, aesKey); @@ -4548,9 +4719,9 @@ namespace LibTSforge.Modifiers using System; using System.IO; using Microsoft.Win32; - using LibTSforge.PhysicalStore; - using LibTSforge.SPP; - using LibTSforge.TokenStore; + using PhysicalStore; + using SPP; + using TokenStore; public static class GenPKeyInstall { @@ -4576,6 +4747,7 @@ namespace LibTSforge.Modifiers public static void InstallGenPKey(PSVersion version, bool production, Guid actId) { + if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008."); if (actId == Guid.Empty) throw new ArgumentException("Activation ID must be specified for generated product key install."); PKeyConfig pkc = new PKeyConfig(); @@ -4602,7 +4774,7 @@ namespace LibTSforge.Modifiers if (pkey.Algorithm == PKeyAlgorithm.PKEY2009) { uint status = SLApi.InstallProductKey(pkey); - Logger.WriteLine(string.Format("Installing generated product key {0} status {1:X}", pkey.ToString(), status)); + Logger.WriteLine(string.Format("Installing generated product key {0} status {1:X}", pkey, status)); if ((int)status < 0) { @@ -4617,57 +4789,57 @@ namespace LibTSforge.Modifiers if (pkey.Channel == "Volume:GVLK" && version == PSVersion.Win7) throw new NotSupportedException("Fake GVLK generation is not supported on Windows 7."); - VariableBag pkb = new VariableBag(); - pkb.Blocks.AddRange(new CRCBlock[] + VariableBag pkb = new VariableBag(version); + pkb.Blocks.AddRange(new[] { - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyBindingProductKey", ValueAsStr = pkey.ToString() }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyBindingMPC", ValueAsStr = pkey.GetMPC() }, - new CRCBlock { + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = "SppPkeyBindingPid2", ValueAsStr = pkey.GetPid2() }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = "SppPkeyBindingPid3", Value = pkey.GetPid3() }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = "SppPkeyBindingPid4", Value = pkey.GetPid4() }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyChannelId", ValueAsStr = pkey.Channel }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.STRING, KeyAsStr = "SppPkeyBindingEditionId", ValueAsStr = pkey.Edition }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = (version == PSVersion.Win7) ? "SppPkeyShortAuthenticator" : "SppPkeyPhoneActivationData", Value = pkey.GetPhoneData(version) }, - new CRCBlock + new CRCBlockModern { DataType = CRCBlockType.BINARY, KeyAsStr = "SppPkeyBindingMiscData", @@ -4685,11 +4857,11 @@ namespace LibTSforge.Modifiers SLApi.UninstallAllProductKeys(appId); } - Utils.KillSPP(); + SPPUtils.KillSPP(version); - using (IPhysicalStore ps = Utils.GetStore(version, production)) + using (IPhysicalStore ps = SPPUtils.GetStore(version, production)) { - using (ITokenStore tks = Utils.GetTokenStore(version)) + using (ITokenStore tks = SPPUtils.GetTokenStore(version)) { Logger.WriteLine("Writing to physical store and token store..."); @@ -4713,7 +4885,7 @@ namespace LibTSforge.Modifiers uriMap.Data[pkeyId] = pkey.GetAlgoUri(); tks.SetEntry(uriMapName, "xml", uriMap.Serialize()); - string skuMetaName = actId.ToString() + metSuffix; + string skuMetaName = actId + metSuffix; TokenMeta skuMeta = tks.GetMetaEntry(skuMetaName); foreach (string k in skuMeta.Data.Keys) @@ -4740,7 +4912,7 @@ namespace LibTSforge.Modifiers Data = pkb.Serialize() }); - string cachePath = Utils.GetTokensPath(version).Replace("tokens.dat", @"cache\cache.dat"); + string cachePath = SPPUtils.GetTokensPath(version).Replace("tokens.dat", @"cache\cache.dat"); if (File.Exists(cachePath)) File.Delete(cachePath); } } @@ -4755,19 +4927,19 @@ namespace LibTSforge.Modifiers // Modifiers/GracePeriodReset.cs namespace LibTSforge.Modifiers { - using System; using System.Collections.Generic; using System.Linq; - using LibTSforge.PhysicalStore; + using PhysicalStore; + using SPP; public static class GracePeriodReset { public static void Reset(PSVersion version, bool production) { - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { string value = "msft:sl/timer"; List blocks = store.FindBlocks(value).ToList(); @@ -4778,6 +4950,7 @@ namespace LibTSforge.Modifiers } } + SPPUtils.RestartSPP(version); Logger.WriteLine("Successfully reset all grace and evaluation period timers."); } } @@ -4789,15 +4962,19 @@ namespace LibTSforge.Modifiers { using System.Collections.Generic; using System.Linq; - using LibTSforge.PhysicalStore; - using LibTSforge; + using PhysicalStore; + using SPP; + using System; + public static class KeyChangeLockDelete { public static void Delete(PSVersion version, bool production) { - Utils.KillSPP(); + if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008."); + + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { List values = new List { @@ -4825,12 +5002,12 @@ namespace LibTSforge.Modifiers { using System; using System.IO; - using LibTSforge.PhysicalStore; - using LibTSforge.SPP; + using PhysicalStore; + using SPP; public static class KMSHostCharge { - public static void Charge(PSVersion version, Guid actId, bool production) + public static void Charge(PSVersion version, bool production, Guid actId) { if (actId == Guid.Empty) { @@ -4854,76 +5031,113 @@ namespace LibTSforge.Modifiers string key = string.Format("SPPSVC\\{0}", appId); long ldapTimestamp = DateTime.Now.ToFileTime(); + byte[] cmidGuids = { }; + byte[] reqCounts = { }; + byte[] kmsChargeData = { }; + BinaryWriter writer = new BinaryWriter(new MemoryStream()); - for (int i = 0; i < currClients; i++) + if (version == PSVersion.Vista) { - writer.Write(ldapTimestamp - (10 * (i + 1))); - writer.Write(Guid.NewGuid().ToByteArray()); + writer.Write(new byte[44]); + writer.Seek(0, SeekOrigin.Begin); + + writer.Write(totalClients); + writer.Write(43200); + writer.Write(32); + + writer.Seek(20, SeekOrigin.Begin); + writer.Write((byte)currClients); + + writer.Seek(32, SeekOrigin.Begin); + writer.Write((byte)currClients); + + writer.Seek(0, SeekOrigin.End); + + for (int i = 0; i < currClients; i++) + { + writer.Write(Guid.NewGuid().ToByteArray()); + writer.Write(ldapTimestamp - (10 * (i + 1))); + } + + kmsChargeData = writer.GetBytes(); + } + else + { + for (int i = 0; i < currClients; i++) + { + writer.Write(ldapTimestamp - (10 * (i + 1))); + writer.Write(Guid.NewGuid().ToByteArray()); + } + + cmidGuids = writer.GetBytes(); + + writer = new BinaryWriter(new MemoryStream()); + + writer.Write(new byte[40]); + + writer.Seek(4, SeekOrigin.Begin); + writer.Write((byte)currClients); + + writer.Seek(24, SeekOrigin.Begin); + writer.Write((byte)currClients); + + reqCounts = writer.GetBytes(); } - byte[] cmidGuids = writer.GetBytes(); - - writer = new BinaryWriter(new MemoryStream()); - - writer.Write(new byte[40]); - - writer.Seek(4, SeekOrigin.Begin); - writer.Write((byte)currClients); - - writer.Seek(24, SeekOrigin.Begin); - writer.Write((byte)currClients); - byte[] reqCounts = writer.GetBytes(); - - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { - VariableBag kmsCountData = new VariableBag(); - kmsCountData.Blocks.AddRange(new CRCBlock[] + if (version != PSVersion.Vista) { - new CRCBlock + VariableBag kmsCountData = new VariableBag(version); + kmsCountData.Blocks.AddRange(new[] { - DataType = CRCBlockType.BINARY, - KeyAsStr = "SppBindingLicenseData", - Value = hwidBlock - }, - new CRCBlock - { - DataType = CRCBlockType.UINT, - Key = new byte[] { }, - ValueAsInt = (uint)totalClients - }, - new CRCBlock - { - DataType = CRCBlockType.UINT, - Key = new byte[] { }, - ValueAsInt = 1051200000 - }, - new CRCBlock - { - DataType = CRCBlockType.UINT, - Key = new byte[] { }, - ValueAsInt = (uint)currClients - }, - new CRCBlock - { - DataType = CRCBlockType.BINARY, - Key = new byte[] { }, - Value = cmidGuids - }, - new CRCBlock - { - DataType = CRCBlockType.BINARY, - Key = new byte[] { }, - Value = reqCounts - } - }); + new CRCBlockModern + { + DataType = CRCBlockType.BINARY, + KeyAsStr = "SppBindingLicenseData", + Value = hwidBlock + }, + new CRCBlockModern + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = (uint)totalClients + }, + new CRCBlockModern + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = 1051200000 + }, + new CRCBlockModern + { + DataType = CRCBlockType.UINT, + Key = new byte[] { }, + ValueAsInt = (uint)currClients + }, + new CRCBlockModern + { + DataType = CRCBlockType.BINARY, + Key = new byte[] { }, + Value = cmidGuids + }, + new CRCBlockModern + { + DataType = CRCBlockType.BINARY, + Key = new byte[] { }, + Value = reqCounts + } + }); - byte[] kmsChargeData = kmsCountData.Serialize(); - string countVal = string.Format("msft:spp/kms/host/2.0/store/counters/{0}", appId); + kmsChargeData = kmsCountData.Serialize(); + } + + string countVal = version == PSVersion.Vista ? "C8F6FFF1-79CE-404C-B150-F97991273DF1" : string.Format("msft:spp/kms/host/2.0/store/counters/{0}", appId); store.DeleteBlock(key, countVal); store.AddBlock(new PSBlock @@ -4937,6 +5151,8 @@ namespace LibTSforge.Modifiers Logger.WriteLine(string.Format("Set charge count to {0} successfully.", currClients)); } + + SPPUtils.RestartSPP(version); } } } @@ -4945,24 +5161,28 @@ namespace LibTSforge.Modifiers // Modifiers/RearmReset.cs namespace LibTSforge.Modifiers { - using System; using System.Collections.Generic; using System.Linq; - using LibTSforge.PhysicalStore; + using PhysicalStore; + using SPP; public static class RearmReset { public static void Reset(PSVersion version, bool production) { - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { List blocks; - if (version == PSVersion.Win7) + if (version == PSVersion.Vista) + { + blocks = store.FindBlocks("740D70D8-6448-4b2f-9063-4A7A463600C5").ToList(); + } + else if (version == PSVersion.Win7) { blocks = store.FindBlocks(0xA0000).ToList(); } @@ -4973,7 +5193,11 @@ namespace LibTSforge.Modifiers foreach (PSBlock block in blocks) { - if (version == PSVersion.Win7) + if (version == PSVersion.Vista) + { + store.DeleteBlock(block.KeyAsStr, block.ValueAsStr); + } + else if (version == PSVersion.Win7) { store.SetBlock(block.KeyAsStr, block.ValueAsInt, new byte[8]); } @@ -4990,38 +5214,110 @@ namespace LibTSforge.Modifiers } +// Modifiers/SetIIDParams.cs +namespace LibTSforge.Modifiers +{ + using PhysicalStore; + using SPP; + using System.IO; + using System; + + public static class SetIIDParams + { + public static void SetParams(PSVersion version, bool production, Guid actId, PKeyAlgorithm algorithm, int group, int serial, ulong security) + { + if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008."); + + Guid appId; + + if (actId == Guid.Empty) + { + appId = SLApi.WINDOWS_APP_ID; + actId = SLApi.GetDefaultActivationID(appId, true); + + if (actId == Guid.Empty) + { + throw new Exception("No applicable activation IDs found."); + } + } + else + { + appId = SLApi.GetAppId(actId); + } + + Guid pkeyId = SLApi.GetInstalledPkeyID(actId); + + SPPUtils.KillSPP(version); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) + { + string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId); + PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString()); + + if (keyBlock == null) + { + throw new InvalidDataException("Failed to get product key data for activation ID " + actId + "."); + } + + VariableBag pkb = new VariableBag(keyBlock.Data, version); + + ProductKey pkey = new ProductKey + { + Group = group, + Serial = serial, + Security = security, + Algorithm = algorithm, + Upgrade = false + }; + + string blockName = version == PSVersion.Win7 ? "SppPkeyShortAuthenticator" : "SppPkeyPhoneActivationData"; + pkb.SetBlock(blockName, pkey.GetPhoneData(version)); + store.SetBlock(key, pkeyId.ToString(), pkb.Serialize()); + } + + Logger.WriteLine("Successfully set IID parameters."); + } + } +} + + // Modifiers/TamperedFlagsDelete.cs namespace LibTSforge.Modifiers { - using System; using System.Linq; - using LibTSforge.PhysicalStore; + using PhysicalStore; + using SPP; public static class TamperedFlagsDelete { public static void DeleteTamperFlags(PSVersion version, bool production) { - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { - if (version != PSVersion.Win7) + if (version == PSVersion.Vista) { - string recreatedFlag = "__##USERSEP-RESERVED##__$$RECREATED-FLAG$$"; - string recoveredFlag = "__##USERSEP-RESERVED##__$$RECOVERED-FLAG$$"; - - DeleteFlag(store, recreatedFlag); - DeleteFlag(store, recoveredFlag); + DeleteFlag(store, "6BE8425B-E3CF-4e86-A6AF-5863E3DCB606"); + } + else if (version == PSVersion.Win7) + { + SetFlag(store, 0xA0001); } else { - SetFlag(store, 0xA0001); + DeleteFlag(store, "__##USERSEP-RESERVED##__$$RECREATED-FLAG$$"); + DeleteFlag(store, "__##USERSEP-RESERVED##__$$RECOVERED-FLAG$$"); } Logger.WriteLine("Successfully cleared the tamper state."); } + + SPPUtils.RestartSPP(version); } private static void DeleteFlag(IPhysicalStore store, string flag) @@ -5041,13 +5337,15 @@ namespace LibTSforge.Modifiers namespace LibTSforge.Modifiers { using System; - using LibTSforge.PhysicalStore; - using LibTSforge.SPP; + using PhysicalStore; + using SPP; public static class UniqueIdDelete { public static void DeleteUniqueId(PSVersion version, bool production, Guid actId) { + if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008."); + Guid appId; if (actId == Guid.Empty) @@ -5065,14 +5363,13 @@ namespace LibTSforge.Modifiers appId = SLApi.GetAppId(actId); } - string instId = SLApi.GetInstallationID(actId); Guid pkeyId = SLApi.GetInstalledPkeyID(actId); - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId); PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString()); @@ -5082,7 +5379,7 @@ namespace LibTSforge.Modifiers throw new Exception("No product key found."); } - VariableBag pkb = new VariableBag(keyBlock.Data); + VariableBag pkb = new VariableBag(keyBlock.Data, version); pkb.DeleteBlock("SppPkeyUniqueIdToken"); @@ -5095,18 +5392,143 @@ namespace LibTSforge.Modifiers } +// Activators/AVMA4K.cs +namespace LibTSforge.Activators +{ + using System; + using PhysicalStore; + using SPP; + + public static class AVMA4k + { + public static void Activate(PSVersion version, bool production, Guid actId) + { + if (version != PSVersion.WinModern && version != PSVersion.WinBlue) + { + throw new NotSupportedException("AVMA licenses are not available for this product."); + } + + Guid appId; + if (actId == Guid.Empty) + { + appId = SLApi.WINDOWS_APP_ID; + actId = SLApi.GetDefaultActivationID(appId, false); + + if (actId == Guid.Empty) + { + throw new NotSupportedException("No applicable activation IDs found."); + } + } + else + { + appId = SLApi.GetAppId(actId); + } + + if (SLApi.GetPKeyChannel(SLApi.GetInstalledPkeyID(actId)) != "VT:IA") + { + throw new NotSupportedException("Non-VT:IA product key installed."); + } + + SPPUtils.KillSPP(version); + + Logger.WriteLine("Writing TrustedStore data..."); + + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) + { + string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId); + + long creationTime = BitConverter.ToInt64(store.GetBlock("__##USERSEP##\\$$_RESERVED_$$\\NAMESPACE__", "__##USERSEP-RESERVED##__$$GLOBAL-CREATION-TIME$$").Data, 0); + long tickCount = BitConverter.ToInt64(store.GetBlock("__##USERSEP##\\$$_RESERVED_$$\\NAMESPACE__", "__##USERSEP-RESERVED##__$$GLOBAL-TICKCOUNT-UPTIME$$").Data, 0); + long deltaTime = BitConverter.ToInt64(store.GetBlock(key, "__##USERSEP-RESERVED##__$$UP-TIME-DELTA$$").Data, 0); + + const ulong unknown = 0; + ulong time1 = (ulong)(creationTime + tickCount + deltaTime); + ulong crcBindTime = (ulong)DateTime.UtcNow.ToFileTime(); + ulong timerTime = crcBindTime / 10000; + ulong expiry = Constants.TimerMax / 10000; + + VariableBag avmaBinding = new VariableBag(version); + + avmaBinding.Blocks.AddRange(new[] + { + new CRCBlockModern + { + DataType = CRCBlockType.BINARY, + Key = new byte[] { }, + Value = BitConverter.GetBytes(crcBindTime), + }, + new CRCBlockModern + { + DataType = CRCBlockType.STRING, + Key = new byte[] { }, + ValueAsStr = "AVMA4K", + }, + new CRCBlockModern + { + DataType = CRCBlockType.STRING, + Key = new byte[] { }, + ValueAsStr = "00491-50000-00001-AA666", + } + }); + + byte[] avmaBindingData = avmaBinding.Serialize(); + + Timer avmaTimer = new Timer + { + Unknown = unknown, + Time1 = time1, + Time2 = timerTime, + Expiry = expiry + }; + + string storeVal = string.Format("msft:spp/ia/bind/1.0/store/{0}/{1}", appId, actId); + string timerVal = string.Format("msft:spp/ia/bind/1.0/timer/{0}/{1}", appId, actId); + + store.DeleteBlock(key, storeVal); + store.DeleteBlock(key, timerVal); + + store.AddBlocks(new[] + { + new PSBlock + { + Type = BlockType.NAMED, + Flags = 0x400, + KeyAsStr = key, + ValueAsStr = storeVal, + Data = avmaBindingData, + }, + new PSBlock + { + Type = BlockType.TIMER, + Flags = 0x4, + KeyAsStr = key, + ValueAsStr = timerVal, + Data = avmaTimer.CastToArray() + } + }); + } + + SLApi.RefreshLicenseStatus(); + SLApi.FireStateChangedEvent(appId); + Logger.WriteLine("Activated using AVMA4k successfully."); + } + } +} + + // Activators/ZeroCID.cs namespace LibTSforge.Activators { using System; using System.IO; - using LibTSforge.Crypto; - using LibTSforge.PhysicalStore; - using LibTSforge.SPP; + using System.Linq; + using Crypto; + using PhysicalStore; + using SPP; public static class ZeroCID { - public static void Deposit(Guid actId, string instId) + private static void Deposit(Guid actId, string instId) { uint status = SLApi.DepositConfirmationID(actId, instId, Constants.ZeroCID); Logger.WriteLine(string.Format("Depositing fake CID status {0:X}", status)); @@ -5144,16 +5566,16 @@ namespace LibTSforge.Activators string instId = SLApi.GetInstallationID(actId); Guid pkeyId = SLApi.GetInstalledPkeyID(actId); - if (version == PSVersion.Win7) + if (version == PSVersion.Vista || version == PSVersion.Win7) { Deposit(actId, instId); } - Utils.KillSPP(); + SPPUtils.KillSPP(version); Logger.WriteLine("Writing TrustedStore data..."); - using (IPhysicalStore store = Utils.GetStore(version, production)) + using (IPhysicalStore store = SPPUtils.GetStore(version, production)) { byte[] hwidBlock = Constants.UniversalHWIDBlock; @@ -5163,7 +5585,11 @@ namespace LibTSforge.Activators byte[] iidHash; - if (version == PSVersion.Win7) + if (version == PSVersion.Vista) + { + iidHash = CryptoUtils.SHA256Hash(Utils.EncodeString(instId)).Take(0x10).ToArray(); + } + else if (version == PSVersion.Win7) { iidHash = CryptoUtils.SHA256Hash(Utils.EncodeString(instId)); } @@ -5180,11 +5606,39 @@ namespace LibTSforge.Activators throw new InvalidDataException("Failed to get product key data for activation ID " + actId + "."); } - VariableBag pkb = new VariableBag(keyBlock.Data); + VariableBag pkb = new VariableBag(keyBlock.Data, version); byte[] pkeyData; - if (version == PSVersion.Win7) + if (version == PSVersion.Vista) + { + pkeyData = pkb.GetBlock("PKeyBasicInfo").Value; + string uniqueId = Utils.DecodeString(pkeyData.Skip(0x120).Take(0x80).ToArray()); + string extPid = Utils.DecodeString(pkeyData.Skip(0x1A0).Take(0x80).ToArray()); + + uint group; + uint.TryParse(extPid.Split('-')[1], out group); + + if (group == 0) + { + throw new FormatException("Extended PID has invalid format."); + } + + ulong shortauth; + + try + { + shortauth = BitConverter.ToUInt64(Convert.FromBase64String(uniqueId.Split('&')[1]), 0); + } + catch + { + throw new FormatException("Key Unique ID has invalid format."); + } + + shortauth |= (ulong)group << 41; + pkeyData = BitConverter.GetBytes(shortauth); + } + else if (version == PSVersion.Win7) { pkeyData = pkb.GetBlock("SppPkeyShortAuthenticator").Value; } @@ -5197,26 +5651,34 @@ namespace LibTSforge.Activators store.SetBlock(key, pkeyId.ToString(), pkb.Serialize()); BinaryWriter writer = new BinaryWriter(new MemoryStream()); - writer.Write(0x20); + writer.Write(iidHash.Length); writer.Write(iidHash); writer.Write(hwidBlock.Length); writer.Write(hwidBlock); byte[] tsHwidData = writer.GetBytes(); writer = new BinaryWriter(new MemoryStream()); - writer.Write(0x20); + writer.Write(iidHash.Length); writer.Write(iidHash); writer.Write(pkeyData.Length); writer.Write(pkeyData); byte[] tsPkeyInfoData = writer.GetBytes(); - store.AddBlocks(new PSBlock[] { + string phoneVersion = version == PSVersion.Vista ? "6.0" : "7.0"; + Guid indexSlid = version == PSVersion.Vista ? actId : pkeyId; + string hwidBlockName = string.Format("msft:Windows/{0}/Phone/Cached/HwidBlock/{1}", phoneVersion, indexSlid); + string pkeyInfoName = string.Format("msft:Windows/{0}/Phone/Cached/PKeyInfo/{1}", phoneVersion, indexSlid); + + store.DeleteBlock(key, hwidBlockName); + store.DeleteBlock(key, pkeyInfoName); + + store.AddBlocks(new[] { new PSBlock { Type = BlockType.NAMED, Flags = 0, KeyAsStr = key, - ValueAsStr = "msft:Windows/7.0/Phone/Cached/HwidBlock/" + pkeyId, + ValueAsStr = hwidBlockName, Data = tsHwidData }, new PSBlock @@ -5224,18 +5686,18 @@ namespace LibTSforge.Activators Type = BlockType.NAMED, Flags = 0, KeyAsStr = key, - ValueAsStr = "msft:Windows/7.0/Phone/Cached/PKeyInfo/" + pkeyId, + ValueAsStr = pkeyInfoName, Data = tsPkeyInfoData } }); } - if (version != PSVersion.Win7) + if (version != PSVersion.Vista && version != PSVersion.Win7) { Deposit(actId, instId); } - SLApi.RefreshLicenseStatus(); + SPPUtils.RestartSPP(version); SLApi.FireStateChangedEvent(appId); Logger.WriteLine("Activated using ZeroCID successfully."); } @@ -5260,7 +5722,7 @@ namespace LibTSforge.TokenStore public class TokenMeta { public string Name; - public Dictionary Data = new Dictionary(); + public readonly Dictionary Data = new Dictionary(); public byte[] Serialize() { @@ -5283,7 +5745,7 @@ namespace LibTSforge.TokenStore return writer.GetBytes(); } - public void Deserialize(byte[] data) + private void Deserialize(byte[] data) { BinaryReader reader = new BinaryReader(new MemoryStream(data)); reader.ReadInt32(); @@ -5340,7 +5802,7 @@ namespace LibTSforge.TokenStore using System.Collections.Generic; using System.IO; using System.Linq; - using LibTSforge.Crypto; + using Crypto; public class TokenStoreModern : ITokenStore { @@ -5354,29 +5816,29 @@ namespace LibTSforge.TokenStore private static readonly byte[] CONTS_FOOTER = Enumerable.Repeat((byte)0xAA, 0x20).ToArray(); private List Entries = new List(); - public FileStream TokensFile; + private readonly FileStream TokensFile; public void Deserialize() { if (TokensFile.Length < BLOCK_SIZE) return; TokensFile.Seek(0x24, SeekOrigin.Begin); - uint nextBlock = 0; + uint nextBlock; BinaryReader reader = new BinaryReader(TokensFile); do { - uint curOffset = reader.ReadUInt32(); + reader.ReadUInt32(); nextBlock = reader.ReadUInt32(); for (int i = 0; i < ENTRIES_PER_BLOCK; i++) { - curOffset = reader.ReadUInt32(); + uint curOffset = reader.ReadUInt32(); bool populated = reader.ReadUInt32() == 1; uint contentOffset = reader.ReadUInt32(); uint contentLength = reader.ReadUInt32(); uint allocLength = reader.ReadUInt32(); - byte[] contentData = new byte[] { }; + byte[] contentData = { }; if (populated) { @@ -5476,11 +5938,10 @@ namespace LibTSforge.TokenStore writer.WritePadding(BLOCK_PAD_SIZE); writer.BaseStream.Seek(curBlockOffset, SeekOrigin.Begin); - byte[] blockHash; byte[] blockData = new byte[BLOCK_SIZE - 0x20]; tokens.Read(blockData, 0, BLOCK_SIZE - 0x20); - blockHash = CryptoUtils.SHA256Hash(blockData); + byte[] blockHash = CryptoUtils.SHA256Hash(blockData); writer.BaseStream.Seek(curBlockOffset + BLOCK_SIZE - 0x20, SeekOrigin.Begin); writer.Write(blockHash); @@ -5611,11 +6072,6 @@ namespace LibTSforge.TokenStore Deserialize(); } - public TokenStoreModern() - { - - } - public void Dispose() { Serialize(); @@ -5646,6 +6102,13 @@ namespace LibTSforge.PhysicalStore public ulong Time2; public ulong Expiry; } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct VistaTimer + { + public ulong Time; + public ulong Expiry; + } } @@ -5750,7 +6213,7 @@ namespace LibTSforge.PhysicalStore using System; using System.Collections.Generic; using System.IO; - using LibTSforge.Crypto; + using Crypto; public class ModernBlock { @@ -5840,7 +6303,7 @@ namespace LibTSforge.PhysicalStore public sealed class PhysicalStoreModern : IPhysicalStore { - private byte[] PreHeaderBytes = new byte[] { }; + private byte[] PreHeaderBytes = { }; private readonly Dictionary> Data = new Dictionary>(); private readonly FileStream TSFile; private readonly PSVersion Version; @@ -6028,46 +6491,50 @@ namespace LibTSforge.PhysicalStore public void DeleteBlock(string key, string value) { - if (Data.ContainsKey(key)) + if (!Data.ContainsKey(key)) { - List blocks = Data[key]; - - foreach (ModernBlock block in blocks) - { - if (block.ValueAsStr == value) - { - blocks.Remove(block); - break; - } - } - - Data[key] = blocks; + return; } + + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsStr == value) + { + blocks.Remove(block); + break; + } + } + + Data[key] = blocks; } public void DeleteBlock(string key, uint value) { - if (Data.ContainsKey(key)) + if (!Data.ContainsKey(key)) { - List blocks = Data[key]; - - foreach (ModernBlock block in blocks) - { - if (block.ValueAsInt == value) - { - blocks.Remove(block); - break; - } - } - - Data[key] = blocks; + return; } + + List blocks = Data[key]; + + foreach (ModernBlock block in blocks) + { + if (block.ValueAsInt == value) + { + blocks.Remove(block); + break; + } + } + + Data[key] = blocks; } public PhysicalStoreModern(string tsPath, bool production, PSVersion version) { TSFile = File.Open(tsPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); - Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), production)); + Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), production, version)); TSFile.Seek(0, SeekOrigin.Begin); Version = version; Production = production; @@ -6087,7 +6554,7 @@ namespace LibTSforge.PhysicalStore public byte[] ReadRaw() { - byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), Production); + byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSFile.ReadAllBytes(), Production, Version); TSFile.Seek(0, SeekOrigin.Begin); return data; } @@ -6158,13 +6625,372 @@ namespace LibTSforge.PhysicalStore } +// PhysicalStore/PhysicalStoreVista.cs +namespace LibTSforge.PhysicalStore +{ + using System; + using System.Collections.Generic; + using System.IO; + using Crypto; + + public class VistaBlock + { + public BlockType Type; + public uint Flags; + public byte[] Value; + public string ValueAsStr + { + get + { + return Utils.DecodeString(Value); + } + set + { + Value = Utils.EncodeString(value); + } + } + public uint ValueAsInt + { + get + { + return BitConverter.ToUInt32(Value, 0); + } + set + { + Value = BitConverter.GetBytes(value); + } + } + public byte[] Data; + public string DataAsStr + { + get + { + return Utils.DecodeString(Data); + } + set + { + Data = Utils.EncodeString(value); + } + } + public uint DataAsInt + { + get + { + return BitConverter.ToUInt32(Data, 0); + } + set + { + Data = BitConverter.GetBytes(value); + } + } + + internal void Encode(BinaryWriter writer) + { + writer.Write((uint)Type); + writer.Write(Flags); + writer.Write(Value.Length); + writer.Write(Data.Length); + writer.Write(Value); + writer.Write(Data); + } + + internal static VistaBlock Decode(BinaryReader reader) + { + uint type = reader.ReadUInt32(); + uint flags = reader.ReadUInt32(); + + int valueLen = reader.ReadInt32(); + int dataLen = reader.ReadInt32(); + + byte[] value = reader.ReadBytes(valueLen); + byte[] data = reader.ReadBytes(dataLen); + return new VistaBlock + { + Type = (BlockType)type, + Flags = flags, + Value = value, + Data = data, + }; + } + } + + public sealed class PhysicalStoreVista : IPhysicalStore + { + private byte[] PreHeaderBytes = { }; + private readonly List Blocks = new List(); + private readonly FileStream TSPrimary; + private readonly FileStream TSSecondary; + private readonly bool Production; + + public byte[] Serialize() + { + BinaryWriter writer = new BinaryWriter(new MemoryStream()); + writer.Write(PreHeaderBytes); + + foreach (VistaBlock block in Blocks) + { + block.Encode(writer); + writer.Align(4); + } + + return writer.GetBytes(); + } + + public void Deserialize(byte[] data) + { + int len = data.Length; + + BinaryReader reader = new BinaryReader(new MemoryStream(data)); + PreHeaderBytes = reader.ReadBytes(8); + + while (reader.BaseStream.Position < len - 0x14) + { + Blocks.Add(VistaBlock.Decode(reader)); + reader.Align(4); + } + } + + public void AddBlock(PSBlock block) + { + Blocks.Add(new VistaBlock + { + Type = block.Type, + Flags = block.Flags, + Value = block.Value, + Data = block.Data + }); + } + + public void AddBlocks(IEnumerable blocks) + { + foreach (PSBlock block in blocks) + { + AddBlock(block); + } + } + + public PSBlock GetBlock(string key, string value) + { + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsStr == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = new byte[0], + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public PSBlock GetBlock(string key, uint value) + { + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsInt == value) + { + return new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = new byte[0], + Value = block.Value, + Data = block.Data + }; + } + } + + return null; + } + + public void SetBlock(string key, string value, byte[] data) + { + for (int i = 0; i < Blocks.Count; i++) + { + VistaBlock block = Blocks[i]; + + if (block.ValueAsStr == value) + { + block.Data = data; + Blocks[i] = block; + break; + } + } + } + + public void SetBlock(string key, uint value, byte[] data) + { + for (int i = 0; i < Blocks.Count; i++) + { + VistaBlock block = Blocks[i]; + + if (block.ValueAsInt == value) + { + block.Data = data; + Blocks[i] = block; + break; + } + } + } + + public void SetBlock(string key, string value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, string value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void SetBlock(string key, uint value, string data) + { + SetBlock(key, value, Utils.EncodeString(data)); + } + + public void SetBlock(string key, uint value, uint data) + { + SetBlock(key, value, BitConverter.GetBytes(data)); + } + + public void DeleteBlock(string key, string value) + { + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsStr == value) + { + Blocks.Remove(block); + return; + } + } + } + + public void DeleteBlock(string key, uint value) + { + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsInt == value) + { + Blocks.Remove(block); + return; + } + } + } + + public PhysicalStoreVista(string primaryPath, bool production) + { + TSPrimary = File.Open(primaryPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + TSSecondary = File.Open(primaryPath.Replace("-0.", "-1."), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + Production = production; + + Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), production, PSVersion.Vista)); + TSPrimary.Seek(0, SeekOrigin.Begin); + } + + public void Dispose() + { + if (TSPrimary.CanWrite && TSSecondary.CanWrite) + { + byte[] data = PhysStoreCrypto.EncryptPhysicalStore(Serialize(), Production, PSVersion.Vista); + + TSPrimary.SetLength(data.LongLength); + TSSecondary.SetLength(data.LongLength); + + TSPrimary.Seek(0, SeekOrigin.Begin); + TSSecondary.Seek(0, SeekOrigin.Begin); + + TSPrimary.WriteAllBytes(data); + TSSecondary.WriteAllBytes(data); + + TSPrimary.Close(); + TSSecondary.Close(); + } + } + + public byte[] ReadRaw() + { + byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), Production, PSVersion.Vista); + TSPrimary.Seek(0, SeekOrigin.Begin); + return data; + } + + public void WriteRaw(byte[] data) + { + byte[] encrData = PhysStoreCrypto.EncryptPhysicalStore(data, Production, PSVersion.Vista); + + TSPrimary.SetLength(encrData.LongLength); + TSSecondary.SetLength(encrData.LongLength); + + TSPrimary.Seek(0, SeekOrigin.Begin); + TSSecondary.Seek(0, SeekOrigin.Begin); + + TSPrimary.WriteAllBytes(encrData); + TSSecondary.WriteAllBytes(encrData); + + TSPrimary.Close(); + TSSecondary.Close(); + } + + public IEnumerable FindBlocks(string valueSearch) + { + List results = new List(); + + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsStr.Contains(valueSearch)) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = new byte[0], + Value = block.Value, + Data = block.Data + }); + } + } + + return results; + } + + public IEnumerable FindBlocks(uint valueSearch) + { + List results = new List(); + + foreach (VistaBlock block in Blocks) + { + if (block.ValueAsInt == valueSearch) + { + results.Add(new PSBlock + { + Type = block.Type, + Flags = block.Flags, + Key = new byte[0], + Value = block.Value, + Data = block.Data + }); + } + } + + return results; + } + } +} + + // PhysicalStore/PhysicalStoreWin7.cs namespace LibTSforge.PhysicalStore { using System; using System.Collections.Generic; using System.IO; - using LibTSforge.Crypto; + using Crypto; public class Win7Block { @@ -6266,7 +7092,7 @@ namespace LibTSforge.PhysicalStore public sealed class PhysicalStoreWin7 : IPhysicalStore { - private byte[] PreHeaderBytes = new byte[] { }; + private byte[] PreHeaderBytes = { }; private readonly List Blocks = new List(); private readonly FileStream TSPrimary; private readonly FileStream TSSecondary; @@ -6440,7 +7266,7 @@ namespace LibTSforge.PhysicalStore TSSecondary = File.Open(primaryPath.Replace("-0.", "-1."), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); Production = production; - Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), production)); + Deserialize(PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), production, PSVersion.Win7)); TSPrimary.Seek(0, SeekOrigin.Begin); } @@ -6466,7 +7292,7 @@ namespace LibTSforge.PhysicalStore public byte[] ReadRaw() { - byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), Production); + byte[] data = PhysStoreCrypto.DecryptPhysicalStore(TSPrimary.ReadAllBytes(), Production, PSVersion.Win7); TSPrimary.Seek(0, SeekOrigin.Begin); return data; } @@ -6549,7 +7375,7 @@ namespace LibTSforge.PhysicalStore BINARY = 1 << 2 } - public class CRCBlock + public abstract class CRCBlock { public CRCBlockType DataType; public byte[] Key; @@ -6588,7 +7414,57 @@ namespace LibTSforge.PhysicalStore } } - public void Encode(BinaryWriter writer) + public abstract void Encode(BinaryWriter writer); + public abstract void Decode(BinaryReader reader); + public abstract uint CRC(); + } + + public class CRCBlockVista : CRCBlock + { + public override void Encode(BinaryWriter writer) + { + uint crc = CRC(); + writer.Write((uint)DataType); + writer.Write(0); + writer.Write(Key.Length); + writer.Write(Value.Length); + writer.Write(crc); + + writer.Write(Key); + + writer.Write(Value); + } + + public override void Decode(BinaryReader reader) + { + uint type = reader.ReadUInt32(); + reader.ReadUInt32(); + uint lenName = reader.ReadUInt32(); + uint lenVal = reader.ReadUInt32(); + uint crc = reader.ReadUInt32(); + + byte[] key = reader.ReadBytes((int)lenName); + byte[] value = reader.ReadBytes((int)lenVal); + + DataType = (CRCBlockType)type; + Key = key; + Value = value; + + if (CRC() != crc) + { + throw new InvalidDataException("Invalid CRC in variable bag."); + } + } + + public override uint CRC() + { + return Utils.CRC32(Value); + } + } + + public class CRCBlockModern : CRCBlock + { + public override void Encode(BinaryWriter writer) { uint crc = CRC(); writer.Write(crc); @@ -6603,7 +7479,7 @@ namespace LibTSforge.PhysicalStore writer.Align(8); } - public static CRCBlock Decode(BinaryReader reader) + public override void Decode(BinaryReader reader) { uint crc = reader.ReadUInt32(); uint type = reader.ReadUInt32(); @@ -6616,22 +7492,17 @@ namespace LibTSforge.PhysicalStore byte[] value = reader.ReadBytes((int)lenVal); reader.Align(8); - CRCBlock block = new CRCBlock - { - DataType = (CRCBlockType)type, - Key = key, - Value = value, - }; + DataType = (CRCBlockType)type; + Key = key; + Value = value; - if (block.CRC() != crc) + if (CRC() != crc) { throw new InvalidDataException("Invalid CRC in variable bag."); } - - return block; } - public uint CRC() + public override uint CRC() { BinaryWriter wtemp = new BinaryWriter(new MemoryStream()); wtemp.Write(0); @@ -6647,8 +7518,9 @@ namespace LibTSforge.PhysicalStore public class VariableBag { public List Blocks = new List(); + private readonly PSVersion Version; - public void Deserialize(byte[] data) + private void Deserialize(byte[] data) { int len = data.Length; @@ -6656,7 +7528,19 @@ namespace LibTSforge.PhysicalStore while (reader.BaseStream.Position < len - 0x10) { - Blocks.Add(CRCBlock.Decode(reader)); + CRCBlock block; + + if (Version == PSVersion.Vista) + { + block = new CRCBlockVista(); + } + else + { + block = new CRCBlockModern(); + } + + block.Decode(reader); + Blocks.Add(block); } } @@ -6666,7 +7550,13 @@ namespace LibTSforge.PhysicalStore foreach (CRCBlock block in Blocks) { - block.Encode(writer); + if (Version == PSVersion.Vista) + { + ((CRCBlockVista)block).Encode(writer); + } else + { + ((CRCBlockModern)block).Encode(writer); + } } return writer.GetBytes(); @@ -6712,14 +7602,15 @@ namespace LibTSforge.PhysicalStore } } - public VariableBag(byte[] data) + public VariableBag(byte[] data, PSVersion version) { + Version = version; Deserialize(data); } - public VariableBag() + public VariableBag(PSVersion version) { - + Version = version; } } } @@ -6749,7 +7640,7 @@ if ($env:_debug -eq '0') { [LibTSforge.Logger]::HideOutput = $true } $ver = [LibTSforge.Utils]::DetectVersion() -$prod = [LibTSforge.Utils]::DetectCurrentKey() +$prod = [LibTSforge.SPP.SPPUtils]::DetectCurrentKey() $tsactids = @($args) function Get-WmiInfo { @@ -6801,7 +7692,7 @@ if ($env:resetstuff -eq $null) { $licenseStatus = Get-WmiInfo -tsactid $tsactid -property "LicenseStatus" if ($licenseStatus -eq 1) { if ($prodDes -match 'KMS' -and $prodDes -notmatch 'CLIENT') { - [LibTSforge.Modifiers.KMSHostCharge]::Charge($ver, $tsactid, $prod) + [LibTSforge.Modifiers.KMSHostCharge]::Charge($ver, $prod, $tsactid) Write-Host "[$prodName] CSVLK is permanently activated with ZeroCID." -ForegroundColor White -BackgroundColor DarkGreen Write-Host "[$prodName] CSVLK is charged with 25 clients for 30 days." -ForegroundColor White -BackgroundColor DarkGreen } From 172fd7b1c521e84d721653e4c57bec2e321493ad Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Thu, 17 Apr 2025 03:11:21 +0530 Subject: [PATCH 108/132] Fix crash issue when scripts are running under a path with special characters --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 7 +++---- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- .../Activators/Ohook_Activation_AIO.cmd | 2 +- .../Activators/Online_KMS_Activation.cmd | 2 +- .../Activators/TSforge_Activation.cmd | 7 +++---- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 2 +- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 10 files changed, 14 insertions(+), 16 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index f180db7..4eb0dce 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -154,7 +154,6 @@ goto dk_done set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" -set "_workp=%_work:'=''%" set "_batf=%~f0" set "_batp=%_batf:'=''%" @@ -197,7 +196,7 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}" %nul6%') do (set tstresult=%%a) if /i not "%tstresult%"=="FullLanguage" ( %eline% @@ -9733,9 +9732,9 @@ namespace LibTSforge.PhysicalStore } '@ $ErrorActionPreference = 'Stop' -$binPath = Join-Path -Path $env:_workp -ChildPath "BIN\LibTSforge.dll" +$binPath = "$env:_work\BIN\LibTSforge.dll" -if (Test-Path -Path $binPath) { +if (Test-Path -LiteralPath $binPath) { Write-Host "LibTSforge.dll found in BIN folder. Loading the DLL..." Add-Type -Path $binPath } diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 8f65bbd..bb694f4 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -235,7 +235,7 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}" %nul6%') do (set tstresult=%%a) if /i not "%tstresult%"=="FullLanguage" ( %eline% diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index bcac266..206ac83 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -238,7 +238,7 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}" %nul6%') do (set tstresult=%%a) if /i not "%tstresult%"=="FullLanguage" ( %eline% diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 04b78db..6de8e0c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -228,7 +228,7 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}" %nul6%') do (set tstresult=%%a) if /i not "%tstresult%"=="FullLanguage" ( %eline% diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index d8759e2..9f4bed2 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -257,7 +257,7 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}" %nul6%') do (set tstresult=%%a) if /i not "%tstresult%"=="FullLanguage" ( %eline% diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 350ae2a..ebc1399 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -221,7 +221,6 @@ goto dk_done set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" -set "_workp=%_work:'=''%" set "_batf=%~f0" set "_batp=%_batf:'=''%" @@ -264,7 +263,7 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}" %nul6%') do (set tstresult=%%a) if /i not "%tstresult%"=="FullLanguage" ( %eline% @@ -7616,9 +7615,9 @@ namespace LibTSforge.PhysicalStore } '@ $ErrorActionPreference = 'Stop' -$binPath = Join-Path -Path $env:_workp -ChildPath "BIN\LibTSforge.dll" +$binPath = "$env:_work\BIN\LibTSforge.dll" -if (Test-Path -Path $binPath) { +if (Test-Path -LiteralPath $binPath) { Write-Host "LibTSforge.dll found in BIN folder. Loading the DLL..." Add-Type -Path $binPath } diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 264a58e..708689b 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -188,7 +188,7 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}" %nul6%') do (set tstresult=%%a) if /i not "%tstresult%"=="FullLanguage" ( %eline% diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 37b02c1..594f857 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -193,7 +193,7 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}" %nul6%') do (set tstresult=%%a) if /i not "%tstresult%"=="FullLanguage" ( %eline% diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index df142d4..34ba8d0 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -187,7 +187,7 @@ goto done2 ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}" %nul6%') do (set tstresult=%%a) if /i not "%tstresult%"=="FullLanguage" ( %eline% diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 483f6da..487b496 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -188,7 +188,7 @@ goto dk_done ::pstst $ExecutionContext.SessionState.LanguageMode :pstst -for /f "delims=" %%a in ('cmd /c "%psc% ""if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}""" %nul6%') do (set tstresult=%%a) +for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[io.file]::ReadAllText('!_batp!') -split ':pstst';iex ($f[1])}" %nul6%') do (set tstresult=%%a) if /i not "%tstresult%"=="FullLanguage" ( %eline% From 98ef9db3ceffd5fdb49e3a4433be4a76a9a986ca Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 20 Apr 2025 19:35:53 +0530 Subject: [PATCH 109/132] Add TSforge and Online KMS support for Vista/Server2008 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 529 +++++++++++++++--- .../Activators/HWID_Activation.cmd | 64 ++- .../Activators/KMS38_Activation.cmd | 64 ++- .../Activators/Ohook_Activation_AIO.cmd | 55 +- .../Activators/Online_KMS_Activation.cmd | 249 +++++++-- .../Activators/TSforge_Activation.cmd | 321 +++++++++-- .../Change_Office_Edition.cmd | 26 +- .../Change_Windows_Edition.cmd | 26 +- .../Check_Activation_Status.cmd | 5 +- .../Extract_OEM_Folder.cmd | 39 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 114 ++-- 11 files changed, 1211 insertions(+), 281 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 4eb0dce..fd2f429 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -141,10 +141,27 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble goto dk_done ) -if %winbuild% LSS 7600 ( +if %winbuild% LSS 6001 ( %nceline% echo Unsupported OS version detected [%winbuild%]. -echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents. +if %winbuild% EQU 6000 ( +echo: +echo Windows Vista RTM is not supported because Powershell cannot be installed. +echo Upgrade to Windows Vista SP1 or SP2. +) +goto dk_done +) + +if not exist %ps% ( +%nceline% +echo PowerShell is not installed in your system. +if %winbuild% LSS 7600 ( +echo Install PowerShell using the following URL. +echo: +echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +) goto dk_done ) @@ -1077,10 +1094,16 @@ goto :dk_done :dk_setvar -set psc=powershell.exe -nop -c +set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe +set psc=%ps% -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) @@ -1287,6 +1310,8 @@ exit /b :dk_reeval +if %winbuild% LSS 7600 exit /b + :: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" @@ -1332,13 +1357,13 @@ function InstallLicenseArr($Str) { ForEach ($x in $a) {InstallLicenseFile "$x"} } function InstallLicenseDir($Loc) { - dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} + Get-ChildItem $Loc -Recurse -Filter *.xrm-ms | ForEach-Object {InstallLicenseFile $_.FullName} } function ReinstallLicenses() { - $Oem = "$env:SysPath\oem" - $Spp = "$env:SysPath\spp\tokens" - InstallLicenseDir "$Spp" - If (Test-Path $Oem) {InstallLicenseDir "$Oem"} + $Paths = @("$env:SysPath\oem", "$env:SysPath\licensing", "$env:SysPath\spp\tokens") + foreach ($Path in $Paths) { + if (Test-Path $Path) { InstallLicenseDir "$Path" } + } } :xrm: @@ -1356,16 +1381,16 @@ exit /b :dk_sppissue -sc start sppsvc %nul% +sc start %_slser% %nul% set spperror=%errorlevel% if %spperror% NEQ 1056 if %spperror% NEQ 0 ( %eline% -echo sc start sppsvc [Error Code: %spperror%] +echo sc start %_slser% [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host '%_slser% is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1383,6 +1408,10 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) +if %winbuild% LSS 7600 ( +set "winos=!winos:VistaT=Vista!" +set "winos=!winos:Serverr=Server!" +) if not defined winsub exit /b @@ -1429,11 +1458,11 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -sc start sppsvc %nul% +sc start %_slser% %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" ) || ( -if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +if not exist %SysPath%\%_slexe% if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") ) if not "%results%%pupfound%"=="" ( @@ -1513,6 +1542,7 @@ 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 %%#==SLsvc sc config %%# start= auto %nul% if /i %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% @@ -1642,7 +1672,7 @@ if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( -if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" if not exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) @@ -1724,7 +1754,7 @@ call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %m ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +for %%# in (SppEx%w%tComObj.exe SLsvc.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) ) if defined _sppint ( @@ -1738,14 +1768,14 @@ echo Checking SPP In IFEO [%_sppint%] ) -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') do if /i %%b NEQ 0x0 ( +if %winbuild% GEQ 7600 for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" ) -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( +if %winbuild% GEQ 7600 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" @@ -1755,21 +1785,22 @@ set showfix=1 set tokenstore= +if %winbuild% GEQ 7600 ( for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" -if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +if %winbuild% GEQ 9200 if /i not "!tokenstore!"=="%SysPath%\spp\store" if /i not "!tokenstore!"=="%SysPath%\spp\store\2.0" if /i not "!tokenstore!"=="%SysPath%\spp\store_test\2.0" ( set toerr=1 set error=1 set showfix=1 -call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [!tokenstore!]" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) - +) :: This code creates token folder only if it's missing and sets default permission for it -if not defined toerr if not exist "%tokenstore%\" ( +if %winbuild% GEQ 7600 if not defined toerr if not exist "%tokenstore%\" ( mkdir "%tokenstore%" %nul% if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" if %winbuild% GEQ 9200 set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';" @@ -1790,7 +1821,7 @@ set showfix=1 if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "if (-not $env:_vis) {Start-Job { Stop-Service %_slser% -force } | Wait-Job -Timeout 20 | Out-Null}; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" @@ -1805,7 +1836,7 @@ call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) -if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( +if %winbuild% GEQ 7600 if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( set error=1 call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" ) @@ -1940,8 +1971,10 @@ $wpaKey.Close() if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' +) else if not exist %ps% ( +echo %~3 ) exit /b @@ -1949,8 +1982,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) else if not exist %ps% ( +echo %~3 %~6 ) exit /b @@ -3669,6 +3704,18 @@ if /i "%%A"=="/Z-Reset" (set _resall=1) if not defined tsids set _actman=0 for %%A in (%_actwin% %_actesu% %_actoff% %_actprojvis% %_actwinesuoff% %_actwinhost% %_actoffhost% %_actappx% %_actman% %_resall%) do (if "%%A"=="1" set _unattended=1) +if %winbuild% LSS 7600 ( +reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /v Install %nul2% | find /i "0x1" %nul1% || ( +%eline% +echo .NET 3.5 Framework is not installed in your system. +echo Install it using the following URL. +echo: +echo https://www.microsoft.com/download/details.aspx?id=25150 +start https://www.microsoft.com/download/details.aspx?id=25150 +goto dk_done +) +) + ::======================================================================================================================================== :ts_menu @@ -3696,7 +3743,11 @@ echo [A] Activate - Windows %KS% Host echo [B] Activate - Office %KS% Host echo [C] Activate - Windows 8/8.1 APPX Sideloading echo [D] Activate - Manually Select Products +if defined _vis ( +echo [E] Reset - Rearm/Timers +) else ( echo [E] Reset - Rearm/Timers/Tamper/Lock +) echo _______________________________________________ echo: echo [6] Remove TSforge Activation @@ -3742,9 +3793,9 @@ echo: echo Initializing... call :dk_chkmal -if not exist %SysPath%\sppsvc.exe ( +if not exist %SysPath%\%_slexe% ( %eline% -echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo [%SysPath%\%_slexe%] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" @@ -3767,10 +3818,10 @@ goto dk_done if %winbuild% LSS 9200 if exist "%SysPath%\wlms\wlms.exe" ( sc query wlms | find /i "RUNNING" %nul% && ( -sc stop sppsvc %nul% +sc stop %_slser% %nul% if !errorlevel! EQU 1051 ( %eline% -echo Evaluation WLMS service is running, sppsvc service can not be stopped. Aborting... +echo Evaluation WLMS service is running, %_slser% service can not be stopped. Aborting... echo Install Non-Eval version for Windows build %winbuild%. echo: set fixes=%fixes% %mas%troubleshoot @@ -3803,7 +3854,7 @@ call :dk_showosinfo echo Initiating Diagnostic Tests... -set "_serv=sppsvc Winmgmt" +set "_serv=%_slser% Winmgmt" :: Software Protection :: Windows Management Instrumentation @@ -3852,6 +3903,8 @@ call :dk_color %Gray% "Checking OS Activation [Windows is alrea goto :ts_esu ) +if defined _vis goto :ts_winvista + set tempid= set keytype=zero for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wintsid\:.*';iex ($f[1])" %nul6%') do ( @@ -3874,6 +3927,86 @@ goto :ts_esu ::======================================================================================================================================== +:ts_winvista + +:: Process Windows Vista + +:: 1st column = Activation ID +:: 2nd column = Generic key +:: 3rd column = Key channel +:: 4th column = Edition ID +:: Separator = _ + +:: Keys aren't available for these editions, but since these editions aren't publicly available, it doesn't matter +:: a797d61e-1475-470b-86c8-f737a72c188d StarterN +:: 5e9f548a-c8a9-44e6-a6c2-3f8d0a7a99dd ServerComputeClusterV + +set f= +set key= +set tempid= +if not defined allapps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f + +for %%# in ( +:: WindowsVista +9de9abe2-d01d-4538-af84-4498bdbc2ba3_4D2XH-PRBMM-8Q22B-K8BM3-MR%f%W4W_____Retail_Business +db442be4-81ed-4ab3-9d66-2417e8a5c81c_76884-QXFY2-6Q2WX-2QTQ8-QX%f%X44_____Retail_BusinessN +b51791c2-b562-4b73-97b0-735a0e4429a6_YQPQV-RW8R3-XMPFG-RXG9R-JG%f%TVF_____Retail_Enterprise +58c37517-42f8-4723-bb44-30b05791ff2a_Q7J9R-G63R4-BFMHF-FWM9R-RW%f%DMV_____Retail_EnterpriseN +95c6e80a-0ff8-4bd0-95f2-c4a39b79d09e_RCG7P-TX42D-HM8FM-TCFCW-3V%f%4VD_____Retail_HomeBasic +d0333dad-c14e-46f2-b62a-8b47a1b9768b_HY2VV-XC6FF-MD6WV-FPYBQ-GF%f%JBT_____Retail_HomeBasicN +9e042223-03bf-49ae-808f-ff37f128d40d_X9HTF-MKJQQ-XK376-TJ7T4-76%f%PKF_____Retail_HomePremium +92d8977c-d506-4e63-b500-6d39283b6cd5_KJ6TP-PF9W2-23T3Q-XTV7M-PX%f%DT2_____Retail_HomePremiumN +89e51a3c-76c0-4beb-a650-53d34c8f8186_X9PYV-YBQRV-9BXWV-TQDMK-QD%f%WK4_____Retail_Starter +30fab9cc-8614-4339-989f-7ce61fb7a5c4_VMCB9-FDRV6-6CDQM-RV23K-RP%f%8F7_____Retail_Ultimate +1eefed20-8ac0-478c-8774-70cd44782ea1_CVX38-P27B4-2X8BT-RXD4J-V7%f%CKX_____Retail_UltimateN +:: WindowsServer2008 +c9ad502b-ef48-41d1-a2a0-38a38e82fed0_24FV9-H7JW8-C8Q6X-BQKMK-K9%f%77J_____Retail_ServerComputeCluster +866e924e-c2a3-4872-aca1-6b48c13962d5_6QBHY-DXTPJ-T9W3P-DTJXX-4V%f%QMB_____Retail_ServerDatacenter +d020c729-07f0-4f8f-87ce-bf803275c786_83TWG-TD3TC-HRDP2-K93FJ-Y3%f%4YC_OEM:NONSLP_ServerDatacenterV +32b40e5e-0c6d-4c6f-ab12-a031933fd2c6_MRB7H-QJRHG-FXTBR-B2Q2M-8W%f%MTJ_____Retail_ServerEnterprise +256cc990-1692-4ea8-965c-2d423d5dd24e_H4VB6-QPRWH-VDCYM-996P8-MH%f%KFY_OEM:NONSLP_ServerEnterpriseIA64 +1ba5e036-e386-42c4-b7eb-16bdb4fa1945_H8H7M-HDPQT-PJHQF-M7B83-9C%f%VGV_____Retail_ServerEnterpriseV +8df04457-07c8-4301-bce9-d61eb76cb2d6_RGBMC-PQBVF-94Q9K-HD63B-VY%f%6MP_____Retail_ServerHomePremium +5bd23b19-aa71-4a5b-8b68-c8801c2baff6_6C8KR-MD3QK-9GWFW-44CY2-W9%f%CBM_____Retail_ServerHomeStandard +b86c7736-91ff-4de9-bfa9-b32b8a09acac_7XRBY-6MP2K-VQPT8-F37JV-YY%f%Q83_____Retail_ServerMediumBusinessManagement +d3f5642f-081d-40b2-a4b9-efd3054d4584_6PDTD-JK48J-662TF-8J2QV-R4%f%CRB_____Retail_ServerMediumBusinessMessaging +c6936a36-69f3-4994-9857-3069c7b9ec7a_D694V-CMWKH-PY92X-PFQKQ-JC%f%B69_____Retail_ServerMediumBusinessSecurity +cc4c2cf8-ef29-4d8e-b168-2b65a3db3309_MRDK3-YYQF3-88BQJ-D6FJG-69%f%YJY_____Retail_ServerSBSPremium +b3827b27-bd38-4284-98af-e4f4d1c051a0_2KB23-GJRBD-W3T9C-6CH2W-39%f%B7V_____Retail_ServerSBSPrime +5dad0eff-3f6f-4310-8844-422f9dc7c84b_H4XDD-B27GY-667P6-XWVV7-GY%f%G8J_____Retail_ServerSBSStandard +603504f9-109f-49f0-9271-8c66f7878f58_8YVM4-YQBDH-7WDQM-R27WR-WV%f%CWG_____Retail_ServerStandard +65ab7338-9ad0-43fe-af1b-190b577495e2_H9MW3-6V7GK-94P9G-7FTPJ-VK%f%CKF_____Retail_ServerStandardV +2be204da-24a0-4943-b66c-81e8464acd7e_2264C-TD9T8-P8HPW-CC9GH-MH%f%M2V_____Retail_ServerStorageEnterprise +60207eba-8b4a-486c-a013-023b4b742c2f_RCYMT-YX342-8T6YY-XYHYC-3D%f%D7X_____Retail_ServerStorageExpress +368856e9-43f7-4601-8358-e561f36c7dd8_FKFT2-WXYY9-WBPY7-6YMY4-X4%f%8JF_____Retail_ServerStorageStandard +4bf433fa-ab04-4c6c-b55b-00170e14b8cd_8X9J7-HCJ7J-3WDJT-QM7D8-46%f%4YH_____Retail_ServerStorageWorkgroup +a77a6806-f59e-4953-97d7-229317b8e6a6_BGT39-9FYH7-X2CYD-T628F-QP%f%QPW_____Retail_ServerWeb +f92f836d-4d3e-4e90-a08f-2d612d65e716_HPH76-FHFPP-DRW9D-7W2V4-HW%f%GKT_____Retail_ServerWinSB +3059a9fd-b068-4f0d-acaf-66324dca67ac_2V8G6-KRXYR-MMGXJ-6RWM3-GX%f%CCG_____Retail_ServerWinSBV +) do ( +for /f "tokens=1-4 delims=_" %%A in ("%%#") do if %tsedition%==%%D if not defined key ( +echo "%allapps%" | find /i "%%A" %nul1% && ( +set key=%%B +set tempid=%%A +) +) +) + +if not defined key ( +set error=1 +call :dk_color %Red% "Checking Activation ID [%tsedition% SKU-%osSKU% not found in the system]" +call :dk_color %Blue% "%_fixmsg%" +goto :ts_esu +) + +echo Checking Activation ID [%tempid%] [%tsedition%] + +call :ts_inskey "[%key%]" +if not defined error set tsids=%tsids% %tempid% +goto :ts_esu + +::======================================================================================================================================== + :ts_wineval call :dk_color %Gray% "Checking OS Edition [%tsedition%] [Evaluation edition found]" @@ -3990,19 +4123,7 @@ goto :ts_esu echo Resetting Rearm / GracePeriod [Successful] ) -%psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% -set keyerror=%errorlevel% -cmd /c exit /b %keyerror% -if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" - -if %keyerror% EQU 0 ( -call :dk_refresh -echo Installing Activable Evaluation Key [%key%] [Successful] -) else ( -set error=1 -call :dk_color %Red% "Installing Activable Evaluation Key [%key%] [Failed] %keyerror%" -call :dk_color %Blue% "%_fixmsg%" -) +call :ts_inskey "[%key%]" ::======================================================================================================================================== @@ -4038,7 +4159,7 @@ REM Windows7EmbeddedPOSReady7 4f1f646c-1e66-4908-acc7-d1606229b29e_POS-ESU-Year3[1-3y]_-Embedded[POS]- REM Windows7EmbeddedStandard 6aaf1c7d-527f-4ed5-b908-9fc039dfc654_WES-ESU-Year3[1-3y]_-Embedded[Standard]- -REM WindowsServer2008R2 +REM WindowsServer2008/WindowsServer2008R2 8e7bfb1e-acc1-4f56-abae-b80fce56cd4b_Server-ESU-PA[1-6y]_-ServerDatacenter-ServerDatacenterCore-ServerDatacenterV-ServerDatacenterVCore-ServerStandard-ServerStandardCore-ServerStandardV-ServerStandardVCore-ServerEnterprise-ServerEnterpriseCore-ServerEnterpriseV-ServerEnterpriseVCore- REM Windows8.1 4afc620f-12a4-48ad-8015-2aebfbd6e47c_Client-ESU-Year3[1-3y]_-Enterprise-EnterpriseN-Professional-ProfessionalN- @@ -4072,6 +4193,13 @@ set esuexistbutnosup=1 ) ) +if defined esuexistsup if defined _vis ( +set key=9FPV7-MWGT8-7XPDF-JC23W-WT7TW +REM This is a non-generic blocked MAK key for Server-ESU-PA +call :ts_inskey "[!key!]" +goto :ts_off +) + if defined esuexistsup ( echo "%tsids%" | find /i "4220f546-f522-46df-8202-4d07afd26454" %nul1% && ( echo "%tsids%" | find /i "7e94be23-b161-4956-a682-146ab291774c" %nul1% || ( @@ -4094,7 +4222,8 @@ goto :ts_off ) set esuavail= -if %winbuild% LEQ 7602 if not defined isThinpc set esuavail=1 +if defined _vis if defined isServer set esuavail=1 +if %winbuild% LEQ 7602 if not defined _vis if not defined isThinpc set esuavail=1 if %winbuild% GTR 7602 if %winbuild% LSS 10240 if defined isServer set esuavail=1 if %winbuild% GEQ 10240 if %winbuild% LEQ 19045 if not defined isServer set esuavail=1 if %winbuild% EQU 9600 set esuavail=1 @@ -4116,7 +4245,7 @@ if not %_actoff%==1 goto :ts_act if %winbuild% LSS 9200 ( echo: call :dk_color %Gray% "Checking Supported Office [TSforge for Office is supported on Windows 8 and later versions]" -call :dk_color %Blue% "On Windows 7 build, use Online %KS% activation option for Office instead." +call :dk_color %Blue% "On Windows Vista / 7, use Online %KS% activation option for Office instead." goto :ts_act ) @@ -4389,7 +4518,7 @@ echo: if %winbuild% GEQ 10586 ( call :dk_color %Gray% "With %KS% Host license, system may randomly change Windows Edition later. It is a Windows issue and can be safely ignored." ) -call :dk_color %Gray% "%KS% Host [Not to be confused with %KS% Client] license causes the sppsvc service to run continuously." +call :dk_color %Gray% "%KS% Host [Not to be confused with %KS% Client] license causes the %_slser% service to run continuously." call :dk_color %Blue% "Only use this activation when necessary, you can revert to normal activation from the previous menu." if %_unattended%==0 ( @@ -4403,6 +4532,8 @@ set _arr= set tempid= set keytype=kmshost +if defined _vis goto :ts_whost_vista + :: Install current edition csvlk license so that correct edition can reflect for csvlk if %winbuild% GEQ 10586 ( @@ -4434,6 +4565,53 @@ goto :ts_act ::======================================================================================================================================== +:ts_whost_vista + +:: Process Windows K-M-S host for Vista + +:: 1st column = Activation ID +:: 2nd column = CSVLK key +:: 3rd column = Edition IDs +:: Separator = _ + +set f= +set key= +set tempid= +if not defined allapps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f + +for %%# in ( +:: WindowsVista +212a64dc-43b1-4d3d-a30c-2fc69d2095c6_TWVG3-9Q4P8-W9XJF-Y76FJ-DW%f%Q4R_-Business-BusinessN-Enterprise-EnterpriseN- +:: WindowsServer2008 +c90d1b4e-8aa8-439e-8b9e-b6d6b6a6d975_BHC4Q-6D7B7-QMVH7-4MKQH-Y9%f%VK7_-ServerComputeCluster-ServerDatacenter-ServerDatacenterV-ServerEnterprise-ServerEnterpriseIA64-ServerEnterpriseV-ServerStandard-ServerStandardV-ServerWeb- +56df4151-1f9f-41bf-acaa-2941c071872b_PVGKG-2R7XQ-7WTFD-FXTJR-DQ%f%BQ3_-ServerComputeCluster-ServerEnterprise-ServerEnterpriseV-ServerStandard-ServerStandardV-ServerWeb- +c448fa06-49d1-44ec-82bb-0085545c3b51_KH4PC-KJFX6-XFVHQ-GDK2G-JC%f%JY9_-ServerComputeCluster-ServerWeb- +) do ( +for /f "tokens=1-3 delims=_" %%A in ("%%#") do if not defined key ( +echo "%allapps%" | find /i "%%A" %nul1% && ( +echo "%%C" | find /i "-%tsedition%-" %nul1% && ( +set key=%%B +set tempid=%%A +) +) +) +) + +if defined key ( +echo Checking Activation ID [%tempid%] [%tsedition%] +) else ( +call :dk_color %Red% "Checking Activation ID [Not Found] [%tsedition%] [%osSKU%]" +call :dk_color %Blue% "%KS% Host license is not found on your system. It is available for the below editions." +call :dk_color %Blue% "Business, BusinessN, Enterprise, EnterpriseN, and Server editions, etc." +goto :ts_act +) + +call :ts_inskey "[%key%]" +if not defined error set tsids=%tsids% %tempid% +goto :ts_act + +::======================================================================================================================================== + :ts_ohost :: Process Office K-M-S host @@ -4441,6 +4619,12 @@ goto :ts_act echo: echo Processing Office %KS% Host... +if defined _vis ( +echo: +call :dk_color %Blue% "Windows Vista and Server 2008 do not support the installation of Office KMS Host." +goto :ts_act +) + set ohostexist= call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 set ohostids=%allapps% @@ -4523,7 +4707,11 @@ goto :ts_act :ts_resetall echo: +if defined _vis ( +echo Processing Reset of Rearm / Timers... +) else ( echo Processing Reset of Rearm / Timers / Tamper / Lock... +) echo: set resetstuff=1 @@ -4572,6 +4760,10 @@ goto :dk_done for /f "delims=" %%a in ('%psc% "$ids = Get-WmiObject -Query 'SELECT ID FROM SoftwareLicensingProduct' | Select-Object -ExpandProperty ID; $ids" %nul6%') do call set "allactids= %%a !allactids! " +if defined _vis ( +echo: +call :dk_color %Blue% "On Windows Vista and Server 2008, you must manually install the key before activating it." +) echo: call :dk_color %Gray% "Enter / Paste the Activation ID shown in first column in the opened text file, or just press Enter to return:" echo Add space after each Activation ID if you are adding multiple: @@ -4702,7 +4894,7 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble if defined tsids ( echo: -echo Installing Forged Product Key Data... +if not defined _vis Installing Forged Product Key Data... echo Depositing Zero Confirmation ID... echo: %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':tsforge\:.*';& ([ScriptBlock]::Create($f[1])) %tsids%" @@ -4940,7 +5132,28 @@ exit /b :ts_checkwinperm -%psc% "Get-WmiObject -Query 'SELECT Name, Description FROM SoftwareLicensingProduct WHERE LicenseStatus=''1'' AND GracePeriodRemaining=''0'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Where-Object { $_.Description -notmatch 'KMS_' } | Select-Object -Property Name" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +%psc% "Get-WmiObject -Query 'SELECT Name, Description FROM SoftwareLicensingProduct WHERE LicenseStatus=''1'' AND GracePeriodRemaining=''0'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Where-Object { $_.Description -notmatch 'KMS' } | Select-Object -Property Name" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +exit /b + +:: Install Key + +:ts_inskey + +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% +if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=%errorlevel% +cmd /c exit /b %keyerror% +if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" + +if %keyerror% EQU 0 ( +if %sps%==SoftwareLicensingService call :dk_refresh +echo Installing Product Key %~1 [Successful] +) else ( +set error=1 +call :dk_color %Red% "Installing Product Key %~1 [Failed] %keyerror%" +call :dk_color %Blue% "%_fixmsg%" +) + exit /b ::======================================================================================================================================== @@ -9787,7 +10000,7 @@ function slGetSkuInfo($SkuId) { } } -if ($env:resetstuff -eq $null) { +if (-not $env:resetstuff) { foreach ($tsactid in $tsactids) { try { $prodDes = Get-WmiInfo -tsactid $tsactid -property "Description" @@ -9796,7 +10009,9 @@ if ($env:resetstuff -eq $null) { $nameParts = $prodName -split ',', 2 $prodName = if ($nameParts.Count -gt 1) { ($nameParts[1].Trim() -split '[ ,]')[0] } else { $null } } + if (-not $env:_vis) { [LibTSforge.Modifiers.GenPKeyInstall]::InstallGenPKey($ver, $prod, $tsactid) + } if ($prodName -match 'Office' -and -not (slGetSkuInfo($tsactid))) { $licenseStatus = Get-WmiInfo -tsactid $tsactid -property "LicenseStatus" if ($licenseStatus -eq 1) { @@ -9829,13 +10044,13 @@ if ($env:resetstuff -eq $null) { } } -if ($env:resetstuff -eq '1') { +if ($env:resetstuff) { try { - [LibTSforge.Modifiers.TamperedFlagsDelete]::DeleteTamperFlags($ver, $prod) + if (-not $env:_vis) {[LibTSforge.Modifiers.TamperedFlagsDelete]::DeleteTamperFlags($ver, $prod)} [LibTSforge.SPP.SLApi]::RefreshLicenseStatus() [LibTSforge.Modifiers.RearmReset]::Reset($ver, $prod) [LibTSforge.Modifiers.GracePeriodReset]::Reset($ver, $prod) - [LibTSforge.Modifiers.KeyChangeLockDelete]::Delete($ver, $prod) + if (-not $env:_vis) {[LibTSforge.Modifiers.KeyChangeLockDelete]::Delete($ver, $prod)} } catch { $errcode = 3 @@ -11285,9 +11500,9 @@ echo: echo Initializing... call :dk_chkmal -if not exist %SysPath%\sppsvc.exe ( +if not exist %SysPath%\%_slexe% ( %eline% -echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo [%SysPath%\%_slexe%] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" @@ -11339,7 +11554,7 @@ call :dk_color %Blue% "Internet is required for Online %KS% Activation." echo Initiating Diagnostic Tests... -set "_serv=sppsvc Winmgmt" +set "_serv=%_slser% Winmgmt" :: Software Protection :: Windows Management Instrumentation @@ -11429,9 +11644,11 @@ echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] if %winbuild% GEQ 9200 if exist "%SysPath%\spp\tokens\skus\%osedition%\*GVLK*.xrm-ms" set sppks=1 if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*VLKMS*.xrm-ms" set sppks=1 if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*VL-BYPASS*.xrm-ms" set sppks=1 +if %winbuild% LSS 7600 if exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*KMS*.xrm-ms" set sppks=1 +if %winbuild% LSS 7600 if exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*VL-BYPASS*.xrm-ms" set sppks=1 if defined skunotfound ( -call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\" +call :dk_color %Red% "Required license files not found." set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) @@ -12183,6 +12400,11 @@ set "nul=>nul 2>&1" for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G set psc=powershell.exe -nop -c +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set run_once= set t_name=Renewal Task reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Run_Once" >nul && ( @@ -12246,7 +12468,7 @@ call :_taskclear-cache :: Check WMI and sppsvc Errors set applist= -net start sppsvc /y %nul% +net start %_slser% /y %nul% if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %slp% where (ApplicationID='%_wApp%') get ID /VALUE" 2^>nul')" if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %slp% WHERE ApplicationID=''%_wApp%''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')" %chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) @@ -12548,12 +12770,20 @@ exit /b :_taskclear-cache set w= -for %%# in (SppE%w%xtComObj.exe sppsvc.exe) do ( +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" @@ -12669,10 +12899,11 @@ for /f %%G in ('%psc% "[Guid]::NewGuid().Guid"') do set "randguid=%%G" set "_temp=%SystemRoot%\Temp\%Random%%randguid%" set nil= +if %winbuild% LSS 7600 (set _vista=_vista) if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul% md "%_temp%\" %nul% -call :ks_RenExport renewal "%_temp%\Renewal.xml" Unicode -if not defined _int (call :ks_RenExport run_once "%_temp%\Run_Once.xml" Unicode) +call :ks_RenExport renewal%_vista% "%_temp%\Renewal.xml" Unicode +if not defined _int (call :ks_RenExport run_once%_vista% "%_temp%\Run_Once.xml" Unicode) s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Renewal" /ru "SYS%nil%TEM" /xml "%_temp%\Renewal.xml" %nul% if not defined _int (s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Run_Once" /ru "SYS%nil%TEM" /xml "%_temp%\Run_Once.xml" %nul%) if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul% @@ -12861,6 +13092,121 @@ exit /b :run_once: +:renewal_vista: + + + + 1999-01-01T12:00:00.34375 + WindowsAddict + Online K-M-S Activation-Renewal - Weekly Task + + + + 1999-01-01T12:00:00.34375 + true + + + + + 1 + + + + + + S-1-5-18 + HighestAvailable + + + + + PT10M + PT1H + true + false + + IgnoreNew + false + true + true + true + true + + true + true + false + false + false + PT10M + 7 + + PT5M + 3 + + + + + %ProgramFiles%\Activation-Renewal\Activation_task.cmd + Task + + + +:renewal_vista: + +:run_once_vista: + + + + 1999-01-01T12:00:00.34375 + WindowsAddict + Online K-M-S Activation Run Once - Run and Delete itself on first Internet Contact + + + + true + + + + + S-1-5-18 + HighestAvailable + + + + + PT10M + PT1H + true + false + + IgnoreNew + false + true + true + true + true + + true + true + false + false + false + PT10M + 7 + + PT5M + 3 + + + + + %ProgramFiles%\Activation-Renewal\Activation_task.cmd + Task + + + +:run_once_vista: + ::======================================================================================================================================== :: 1st column = Office version number @@ -13192,7 +13538,22 @@ a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__17_Server cda18cf3-c196-46ad-b289-60c072869994_TT8MH-CG224-D3D7Q-498W2-9Q%f%CTX__18_ServerHPC a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__29_ServerWebCore f772515c-0e87-48d5-a676-e6962c3e1195_736RG-XDKJK-V34PF-BHK87-J6%f%X3K__56_ServerEmbeddedSolution -::======================================================================================================================================== +:: Windows Vista +cfd8ff08-c0d7-452b-9f60-ef5c70c32094_VKK3X-68KWM-X2YGT-QR4M6-4B%f%WMV___4_Enterprise +4f3d1606-3fea-4c01-be3c-8d671c401e3b_YFKBB-PQJJV-G996G-VWGXY-2V%f%3X8___6_Business +2c682dc2-8b68-4f63-a165-ae291d4cf138_HMBQG-8H2RH-C77VX-27R82-VM%f%QBT__16_BusinessN +d4f54950-26f2-4fb4-ba21-ffab16afcade_VTC42-BM838-43QHV-84HX6-XJ%f%XKV__27_EnterpriseN +:: Windows Server 2008 +ad2542d4-9154-4c6d-8a44-30f11ee96989_TM24T-X9RMF-VWXK6-X8JC9-BF%f%GM2___7_ServerStandard +68b6e220-cf09-466b-92d3-45cd964b9509_7M67G-PC374-GR742-YH8V4-TC%f%BY3___8_ServerDatacenter +c1af4d90-d1bc-44ca-85d4-003ba33db3b9_YQGMW-MPWTJ-34KDK-48M3W-X4%f%Q6V__10_ServerEnterprise +01ef176b-3e0d-422a-b4f8-4ea880035e8f_4DWFP-JF3DJ-B7DTH-78FJB-PD%f%RHK__15_ServerEnterpriseIA64 +ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b_WYR28-R7TFJ-3X2YQ-YCY4H-M2%f%49D__17_ServerWeb +7afb1156-2c1d-40fc-b260-aab7442b62fe_RCTX3-KWVHP-BR6TB-RB6DM-6X%f%7HP__18_ServerComputeCluster +2401e3d0-c50a-4b58-87b2-7e794b7d2607_W7VD6-7JFBR-RX26B-YKQ3Y-6F%f%FFJ__36_ServerStandardV +fd09ef77-5647-4eff-809c-af2b64659a45_22XQ2-VRXRG-P8D42-K34TD-G3%f%QQC__37_ServerDatacenterV +8198490a-add0-47b2-b3ba-316b12d647b4_39BXF-X8Q23-P2WWT-38T2F-G3%f%FPG__38_ServerEnterpriseV +::======================================================================================================================================= :: Office 2010 8ce7e872-188c-4b98-9d90-f8f90b7aad02_V7Y44-9T38C-R2VJK-666HK-T7%f%DDX__14_AccessVL cee5d470-6e3b-4fcc-8c2b-d17428568a9f_H62QG-HXVKF-PP4HP-66KMR-CW%f%9BM__14_ExcelVL @@ -15134,6 +15495,13 @@ mode 125, 32 ) title Fix Licensing ^(ClipSVC ^+ SPP ^+ OSPP^) +if %winbuild% EQU 6001 ( +%eline% +echo This option is not supported on Windows Vista SP1. +echo Upgrade to Windows Vista SP2. +goto :at_back +) + echo: echo %line% echo: @@ -15150,7 +15518,7 @@ echo - Clear ClipSVC, SPP and OSPP licenses. echo - Fix permissions of SPP tokens folder and registries. echo - Trigger the repair option for Office. echo: -call :dk_color2 %_White% " - " %Red% "Apply this option only when it is necessary." +call :dk_color2 %_White% " - " %Blue% "Apply this option only when it is necessary." echo: echo %line% echo: @@ -15314,19 +15682,19 @@ echo [No Error Found] ) echo: -echo Stopping sppsvc service... -%psc% Stop-Service sppsvc -force %nul% +echo Stopping %_slser% service... +%psc% Stop-Service %_slser% -force %nul% set w= set _sppint= -for %%# in (SppEx%w%tComObj.exe sppsvc.exe) do (reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (set _sppint=1)) +for %%# in (SppEx%w%tComObj.exe %_slexe%) do (reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (set _sppint=1)) if defined _sppint ( echo: echo Removing SPP IFEO registry keys... -for %%# in (SppE%w%xtComObj.exe sppsvc.exe) do (reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul%) +for %%# in (SppE%w%xtComObj.exe %_slexe%) do (reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul%) ) -if %winbuild% LSS 9200 ( +if %winbuild% LSS 9200 if not defined _vis ( REM Fix issues caused by Update KB971033 in Windows 7 REM https://support.microsoft.com/help/4487266 echo: @@ -15345,6 +15713,7 @@ del /f /q %SysPath%\7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-81 :: Delete registry keys that are not deleted by activation scripts +if not defined _vis ( echo: echo Cleaning some licensing-related registry keys... %nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "ServiceSessionId" /f @@ -15352,6 +15721,7 @@ echo Cleaning some licensing-related registry keys... %nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "PolicyValuesArray" /f %nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% reg delete "HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform\data" /f +) echo: call :scandat delete @@ -15363,9 +15733,13 @@ call :dk_color %Red% "Failed to delete .dat files." echo: ) +if defined _vis ( +%psc% Start-Service %_slser% %nul% +) + echo: echo Reinstalling system licenses... -%psc% "Stop-Service sppsvc -force; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% if %errorlevel% NEQ 0 %psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% if %errorlevel% EQU 0 ( echo [Successful] @@ -15382,7 +15756,7 @@ call :dk_color %Red% "Failed to rebuild tokens.dat file." echo tokens.dat file was rebuilt successfully. ) -if %winbuild% LSS 9200 ( +if %winbuild% LSS 9200 if not defined _vis ( sc config sppuinotify start= demand ) @@ -15941,6 +16315,7 @@ for %%# in ( %SysPath%\spp\store\ %SysPath%\spp\store\2.0\ %Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\ +%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareLicensing\ ) do ( if %1==check ( @@ -16027,6 +16402,13 @@ cls if not defined terminal mode 98, 30 title Change Windows Edition %masver% +if %winbuild% LSS 7600 ( +%eline% +echo Unsupported OS version detected [%winbuild%]. +echo This option is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +goto dk_done +) + echo: echo Initializing... echo: @@ -16884,6 +17266,13 @@ cls if not defined terminal mode 98, 30 title Change Office Edition %masver% +if %winbuild% LSS 7600 ( +%eline% +echo Unsupported OS version detected [%winbuild%]. +echo This option is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +goto dk_done +) + echo: echo Initializing... echo: diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index bb694f4..006b184 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -808,10 +808,16 @@ goto :dk_done :dk_setvar -set psc=powershell.exe -nop -c +set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe +set psc=%ps% -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) @@ -1002,6 +1008,8 @@ exit /b :dk_reeval +if %winbuild% LSS 7600 exit /b + :: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" @@ -1047,13 +1055,13 @@ function InstallLicenseArr($Str) { ForEach ($x in $a) {InstallLicenseFile "$x"} } function InstallLicenseDir($Loc) { - dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} + Get-ChildItem $Loc -Recurse -Filter *.xrm-ms | ForEach-Object {InstallLicenseFile $_.FullName} } function ReinstallLicenses() { - $Oem = "$env:SysPath\oem" - $Spp = "$env:SysPath\spp\tokens" - InstallLicenseDir "$Spp" - If (Test-Path $Oem) {InstallLicenseDir "$Oem"} + $Paths = @("$env:SysPath\oem", "$env:SysPath\licensing", "$env:SysPath\spp\tokens") + foreach ($Path in $Paths) { + if (Test-Path $Path) { InstallLicenseDir "$Path" } + } } :xrm: @@ -1071,16 +1079,16 @@ exit /b :dk_sppissue -sc start sppsvc %nul% +sc start %_slser% %nul% set spperror=%errorlevel% if %spperror% NEQ 1056 if %spperror% NEQ 0 ( %eline% -echo sc start sppsvc [Error Code: %spperror%] +echo sc start %_slser% [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host '%_slser% is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1098,6 +1106,10 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) +if %winbuild% LSS 7600 ( +set "winos=!winos:VistaT=Vista!" +set "winos=!winos:Serverr=Server!" +) if not defined winsub exit /b @@ -1144,11 +1156,11 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -sc start sppsvc %nul% +sc start %_slser% %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" ) || ( -if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +if not exist %SysPath%\%_slexe% if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") ) if not "%results%%pupfound%"=="" ( @@ -1228,6 +1240,7 @@ 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 %%#==SLsvc sc config %%# start= auto %nul% if /i %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% @@ -1357,7 +1370,7 @@ if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( -if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" if not exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) @@ -1439,7 +1452,7 @@ call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %m ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +for %%# in (SppEx%w%tComObj.exe SLsvc.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) ) if defined _sppint ( @@ -1453,14 +1466,14 @@ echo Checking SPP In IFEO [%_sppint%] ) -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') do if /i %%b NEQ 0x0 ( +if %winbuild% GEQ 7600 for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" ) -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( +if %winbuild% GEQ 7600 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" @@ -1470,21 +1483,22 @@ set showfix=1 set tokenstore= +if %winbuild% GEQ 7600 ( for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" -if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +if %winbuild% GEQ 9200 if /i not "!tokenstore!"=="%SysPath%\spp\store" if /i not "!tokenstore!"=="%SysPath%\spp\store\2.0" if /i not "!tokenstore!"=="%SysPath%\spp\store_test\2.0" ( set toerr=1 set error=1 set showfix=1 -call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [!tokenstore!]" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) - +) :: This code creates token folder only if it's missing and sets default permission for it -if not defined toerr if not exist "%tokenstore%\" ( +if %winbuild% GEQ 7600 if not defined toerr if not exist "%tokenstore%\" ( mkdir "%tokenstore%" %nul% if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" if %winbuild% GEQ 9200 set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';" @@ -1505,7 +1519,7 @@ set showfix=1 if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "if (-not $env:_vis) {Start-Job { Stop-Service %_slser% -force } | Wait-Job -Timeout 20 | Out-Null}; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" @@ -1520,7 +1534,7 @@ call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) -if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( +if %winbuild% GEQ 7600 if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( set error=1 call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" ) @@ -1655,8 +1669,10 @@ $wpaKey.Close() if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' +) else if not exist %ps% ( +echo %~3 ) exit /b @@ -1664,8 +1680,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) else if not exist %ps% ( +echo %~3 %~6 ) exit /b diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 206ac83..4610158 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -914,10 +914,16 @@ $key.SetAccessControl($acl) :dk_setvar -set psc=powershell.exe -nop -c +set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe +set psc=%ps% -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) @@ -1124,6 +1130,8 @@ exit /b :dk_reeval +if %winbuild% LSS 7600 exit /b + :: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" @@ -1151,13 +1159,13 @@ function InstallLicenseArr($Str) { ForEach ($x in $a) {InstallLicenseFile "$x"} } function InstallLicenseDir($Loc) { - dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} + Get-ChildItem $Loc -Recurse -Filter *.xrm-ms | ForEach-Object {InstallLicenseFile $_.FullName} } function ReinstallLicenses() { - $Oem = "$env:SysPath\oem" - $Spp = "$env:SysPath\spp\tokens" - InstallLicenseDir "$Spp" - If (Test-Path $Oem) {InstallLicenseDir "$Oem"} + $Paths = @("$env:SysPath\oem", "$env:SysPath\licensing", "$env:SysPath\spp\tokens") + foreach ($Path in $Paths) { + if (Test-Path $Path) { InstallLicenseDir "$Path" } + } } :xrm: @@ -1175,16 +1183,16 @@ exit /b :dk_sppissue -sc start sppsvc %nul% +sc start %_slser% %nul% set spperror=%errorlevel% if %spperror% NEQ 1056 if %spperror% NEQ 0 ( %eline% -echo sc start sppsvc [Error Code: %spperror%] +echo sc start %_slser% [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host '%_slser% is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1202,6 +1210,10 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) +if %winbuild% LSS 7600 ( +set "winos=!winos:VistaT=Vista!" +set "winos=!winos:Serverr=Server!" +) if not defined winsub exit /b @@ -1293,11 +1305,11 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -sc start sppsvc %nul% +sc start %_slser% %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" ) || ( -if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +if not exist %SysPath%\%_slexe% if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") ) if not "%results%%pupfound%"=="" ( @@ -1377,6 +1389,7 @@ 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 %%#==SLsvc sc config %%# start= auto %nul% if /i %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% @@ -1506,7 +1519,7 @@ if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( -if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" if not exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) @@ -1588,7 +1601,7 @@ call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %m ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +for %%# in (SppEx%w%tComObj.exe SLsvc.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) ) if defined _sppint ( @@ -1602,14 +1615,14 @@ echo Checking SPP In IFEO [%_sppint%] ) -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') do if /i %%b NEQ 0x0 ( +if %winbuild% GEQ 7600 for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" ) -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( +if %winbuild% GEQ 7600 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" @@ -1619,21 +1632,22 @@ set showfix=1 set tokenstore= +if %winbuild% GEQ 7600 ( for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" -if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +if %winbuild% GEQ 9200 if /i not "!tokenstore!"=="%SysPath%\spp\store" if /i not "!tokenstore!"=="%SysPath%\spp\store\2.0" if /i not "!tokenstore!"=="%SysPath%\spp\store_test\2.0" ( set toerr=1 set error=1 set showfix=1 -call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [!tokenstore!]" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) - +) :: This code creates token folder only if it's missing and sets default permission for it -if not defined toerr if not exist "%tokenstore%\" ( +if %winbuild% GEQ 7600 if not defined toerr if not exist "%tokenstore%\" ( mkdir "%tokenstore%" %nul% if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" if %winbuild% GEQ 9200 set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';" @@ -1654,7 +1668,7 @@ set showfix=1 if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "if (-not $env:_vis) {Start-Job { Stop-Service %_slser% -force } | Wait-Job -Timeout 20 | Out-Null}; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" @@ -1669,7 +1683,7 @@ call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) -if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( +if %winbuild% GEQ 7600 if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( set error=1 call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" ) @@ -1804,8 +1818,10 @@ $wpaKey.Close() if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' +) else if not exist %ps% ( +echo %~3 ) exit /b @@ -1813,8 +1829,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) else if not exist %ps% ( +echo %~3 %~6 ) exit /b diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 6de8e0c..7fe95f3 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1326,10 +1326,16 @@ exit /b :dk_setvar -set psc=powershell.exe -nop -c +set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe +set psc=%ps% -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) @@ -1472,7 +1478,7 @@ function InstallLicenseArr($Str) { ForEach ($x in $a) {InstallLicenseFile "$x"} } function InstallLicenseDir($Loc) { - dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} + Get-ChildItem $Loc -Recurse -Filter *.xrm-ms | ForEach-Object {InstallLicenseFile $_.FullName} } function ReinstallLicenses() { $Oem = "$env:SysPath\oem" @@ -1496,16 +1502,16 @@ exit /b :dk_sppissue -sc start sppsvc %nul% +sc start %_slser% %nul% set spperror=%errorlevel% if %spperror% NEQ 1056 if %spperror% NEQ 0 ( %eline% -echo sc start sppsvc [Error Code: %spperror%] +echo sc start %_slser% [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host '%_slser% is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -1523,6 +1529,11 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) +if %winbuild% LSS 7600 ( +set "winos=!winos:VistaT=Vista!" +set "winos=!winos:Serverr=Server!" +) + exit /b :: Common lines used in PowerShell reflection code @@ -1553,11 +1564,11 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -sc start sppsvc %nul% +sc start %_slser% %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" ) || ( -if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +if not exist %SysPath%\%_slexe% if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") ) if not "%results%%pupfound%"=="" ( @@ -1637,6 +1648,7 @@ 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 %%#==SLsvc sc config %%# start= auto %nul% if /i %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% @@ -1766,7 +1778,7 @@ if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( -if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" if not exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) @@ -1848,7 +1860,7 @@ call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %m ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +for %%# in (SppEx%w%tComObj.exe SLsvc.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) ) if defined _sppint ( @@ -1862,14 +1874,14 @@ echo Checking SPP In IFEO [%_sppint%] ) -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') do if /i %%b NEQ 0x0 ( +if %winbuild% GEQ 7600 for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" ) -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( +if %winbuild% GEQ 7600 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" @@ -1879,21 +1891,22 @@ set showfix=1 set tokenstore= +if %winbuild% GEQ 7600 ( for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" -if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +if %winbuild% GEQ 9200 if /i not "!tokenstore!"=="%SysPath%\spp\store" if /i not "!tokenstore!"=="%SysPath%\spp\store\2.0" if /i not "!tokenstore!"=="%SysPath%\spp\store_test\2.0" ( set toerr=1 set error=1 set showfix=1 -call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [!tokenstore!]" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) - +) :: This code creates token folder only if it's missing and sets default permission for it -if not defined toerr if not exist "%tokenstore%\" ( +if %winbuild% GEQ 7600 if not defined toerr if not exist "%tokenstore%\" ( mkdir "%tokenstore%" %nul% if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" if %winbuild% GEQ 9200 set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';" @@ -1914,7 +1927,7 @@ set showfix=1 if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "if (-not $env:_vis) {Start-Job { Stop-Service %_slser% -force } | Wait-Job -Timeout 20 | Out-Null}; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" @@ -1929,7 +1942,7 @@ call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) -if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( +if %winbuild% GEQ 7600 if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( set error=1 call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" ) @@ -2064,8 +2077,10 @@ $wpaKey.Close() if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' +) else if not exist %ps% ( +echo %~3 ) exit /b @@ -2073,8 +2088,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) else if not exist %ps% ( +echo %~3 %~6 ) exit /b diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 9f4bed2..940c217 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -202,10 +202,27 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble goto dk_done ) -if %winbuild% LSS 7600 ( +if %winbuild% LSS 6001 ( %nceline% echo Unsupported OS version detected [%winbuild%]. -echo MAS only supports Windows 7/8/8.1/10/11 and their Server equivalents. +echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents. +if %winbuild% EQU 6000 ( +echo: +echo Windows Vista RTM is not supported because Powershell cannot be installed. +echo Upgrade to Windows Vista SP1 or SP2. +) +goto dk_done +) + +if not exist %ps% ( +%nceline% +echo PowerShell is not installed in your system. +if %winbuild% LSS 7600 ( +echo Install PowerShell using the following URL. +echo: +echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +) goto dk_done ) @@ -468,9 +485,9 @@ echo: echo Initializing... call :dk_chkmal -if not exist %SysPath%\sppsvc.exe ( +if not exist %SysPath%\%_slexe% ( %eline% -echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo [%SysPath%\%_slexe%] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" @@ -522,7 +539,7 @@ call :dk_color %Blue% "Internet is required for Online %KS% Activation." echo Initiating Diagnostic Tests... -set "_serv=sppsvc Winmgmt" +set "_serv=%_slser% Winmgmt" :: Software Protection :: Windows Management Instrumentation @@ -612,9 +629,11 @@ echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] if %winbuild% GEQ 9200 if exist "%SysPath%\spp\tokens\skus\%osedition%\*GVLK*.xrm-ms" set sppks=1 if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*VLKMS*.xrm-ms" set sppks=1 if %winbuild% LSS 9200 if exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*VL-BYPASS*.xrm-ms" set sppks=1 +if %winbuild% LSS 7600 if exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*KMS*.xrm-ms" set sppks=1 +if %winbuild% LSS 7600 if exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*VL-BYPASS*.xrm-ms" set sppks=1 if defined skunotfound ( -call :dk_color %Red% "Required license files not found in %SysPath%\spp\tokens\skus\" +call :dk_color %Red% "Required license files not found." set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) @@ -1648,6 +1667,11 @@ set "nul=>nul 2>&1" for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G set psc=powershell.exe -nop -c +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set run_once= set t_name=Renewal Task reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "\Activation-Run_Once" >nul && ( @@ -1711,7 +1735,7 @@ call :_taskclear-cache :: Check WMI and sppsvc Errors set applist= -net start sppsvc /y %nul% +net start %_slser% /y %nul% if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %slp% where (ApplicationID='%_wApp%') get ID /VALUE" 2^>nul')" if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %slp% WHERE ApplicationID=''%_wApp%''').Get()).ID ^| %% {echo ('ID='+$_)}" 2^>nul')" %chkapp% do (if defined applist (call set "applist=!applist! %%a") else (call set "applist=%%a")) @@ -2013,12 +2037,20 @@ exit /b :_taskclear-cache set w= -for %%# in (SppE%w%xtComObj.exe sppsvc.exe) do ( +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" @@ -2134,10 +2166,11 @@ for /f %%G in ('%psc% "[Guid]::NewGuid().Guid"') do set "randguid=%%G" set "_temp=%SystemRoot%\Temp\%Random%%randguid%" set nil= +if %winbuild% LSS 7600 (set _vista=_vista) if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul% md "%_temp%\" %nul% -call :ks_RenExport renewal "%_temp%\Renewal.xml" Unicode -if not defined _int (call :ks_RenExport run_once "%_temp%\Run_Once.xml" Unicode) +call :ks_RenExport renewal%_vista% "%_temp%\Renewal.xml" Unicode +if not defined _int (call :ks_RenExport run_once%_vista% "%_temp%\Run_Once.xml" Unicode) s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Renewal" /ru "SYS%nil%TEM" /xml "%_temp%\Renewal.xml" %nul% if not defined _int (s%nil%cht%nil%asks /cre%nil%ate /tn "Activation-Run_Once" /ru "SYS%nil%TEM" /xml "%_temp%\Run_Once.xml" %nul%) if exist "%_temp%\.*" rmdir /s /q "%_temp%\" %nul% @@ -2326,16 +2359,137 @@ exit /b :run_once: +:renewal_vista: + + + + 1999-01-01T12:00:00.34375 + WindowsAddict + Online K-M-S Activation-Renewal - Weekly Task + + + + 1999-01-01T12:00:00.34375 + true + + + + + 1 + + + + + + S-1-5-18 + HighestAvailable + + + + + PT10M + PT1H + true + false + + IgnoreNew + false + true + true + true + true + + true + true + false + false + false + PT10M + 7 + + PT5M + 3 + + + + + %ProgramFiles%\Activation-Renewal\Activation_task.cmd + Task + + + +:renewal_vista: + +:run_once_vista: + + + + 1999-01-01T12:00:00.34375 + WindowsAddict + Online K-M-S Activation Run Once - Run and Delete itself on first Internet Contact + + + + true + + + + + S-1-5-18 + HighestAvailable + + + + + PT10M + PT1H + true + false + + IgnoreNew + false + true + true + true + true + + true + true + false + false + false + PT10M + 7 + + PT5M + 3 + + + + + %ProgramFiles%\Activation-Renewal\Activation_task.cmd + Task + + + +:run_once_vista: + ::======================================================================================================================================== :: Set variables :dk_setvar -set psc=powershell.exe -nop -c +set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe +set psc=%ps% -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) @@ -2539,6 +2693,8 @@ exit /b :dk_reeval +if %winbuild% LSS 7600 exit /b + :: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" @@ -2566,13 +2722,13 @@ function InstallLicenseArr($Str) { ForEach ($x in $a) {InstallLicenseFile "$x"} } function InstallLicenseDir($Loc) { - dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} + Get-ChildItem $Loc -Recurse -Filter *.xrm-ms | ForEach-Object {InstallLicenseFile $_.FullName} } function ReinstallLicenses() { - $Oem = "$env:SysPath\oem" - $Spp = "$env:SysPath\spp\tokens" - InstallLicenseDir "$Spp" - If (Test-Path $Oem) {InstallLicenseDir "$Oem"} + $Paths = @("$env:SysPath\oem", "$env:SysPath\licensing", "$env:SysPath\spp\tokens") + foreach ($Path in $Paths) { + if (Test-Path $Path) { InstallLicenseDir "$Path" } + } } :xrm: @@ -2590,16 +2746,16 @@ exit /b :dk_sppissue -sc start sppsvc %nul% +sc start %_slser% %nul% set spperror=%errorlevel% if %spperror% NEQ 1056 if %spperror% NEQ 0 ( %eline% -echo sc start sppsvc [Error Code: %spperror%] +echo sc start %_slser% [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host '%_slser% is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -2617,6 +2773,10 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) +if %winbuild% LSS 7600 ( +set "winos=!winos:VistaT=Vista!" +set "winos=!winos:Serverr=Server!" +) if not defined winsub exit /b @@ -2708,11 +2868,11 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -sc start sppsvc %nul% +sc start %_slser% %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" ) || ( -if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +if not exist %SysPath%\%_slexe% if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") ) if not "%results%%pupfound%"=="" ( @@ -2792,6 +2952,7 @@ 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 %%#==SLsvc sc config %%# start= auto %nul% if /i %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% @@ -2921,7 +3082,7 @@ if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( -if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" if not exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) @@ -3003,7 +3164,7 @@ call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %m ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +for %%# in (SppEx%w%tComObj.exe SLsvc.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) ) if defined _sppint ( @@ -3017,14 +3178,14 @@ echo Checking SPP In IFEO [%_sppint%] ) -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') do if /i %%b NEQ 0x0 ( +if %winbuild% GEQ 7600 for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" ) -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( +if %winbuild% GEQ 7600 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" @@ -3034,21 +3195,22 @@ set showfix=1 set tokenstore= +if %winbuild% GEQ 7600 ( for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" -if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +if %winbuild% GEQ 9200 if /i not "!tokenstore!"=="%SysPath%\spp\store" if /i not "!tokenstore!"=="%SysPath%\spp\store\2.0" if /i not "!tokenstore!"=="%SysPath%\spp\store_test\2.0" ( set toerr=1 set error=1 set showfix=1 -call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [!tokenstore!]" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) - +) :: This code creates token folder only if it's missing and sets default permission for it -if not defined toerr if not exist "%tokenstore%\" ( +if %winbuild% GEQ 7600 if not defined toerr if not exist "%tokenstore%\" ( mkdir "%tokenstore%" %nul% if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" if %winbuild% GEQ 9200 set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';" @@ -3069,7 +3231,7 @@ set showfix=1 if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "if (-not $env:_vis) {Start-Job { Stop-Service %_slser% -force } | Wait-Job -Timeout 20 | Out-Null}; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" @@ -3084,7 +3246,7 @@ call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) -if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( +if %winbuild% GEQ 7600 if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( set error=1 call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" ) @@ -3219,8 +3381,10 @@ $wpaKey.Close() if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' +) else if not exist %ps% ( +echo %~3 ) exit /b @@ -3228,8 +3392,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) else if not exist %ps% ( +echo %~3 %~6 ) exit /b @@ -3588,7 +3754,22 @@ a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__17_Server cda18cf3-c196-46ad-b289-60c072869994_TT8MH-CG224-D3D7Q-498W2-9Q%f%CTX__18_ServerHPC a78b8bd9-8017-4df5-b86a-09f756affa7c_6TPJF-RBVHG-WBW2R-86QPH-6R%f%TM4__29_ServerWebCore f772515c-0e87-48d5-a676-e6962c3e1195_736RG-XDKJK-V34PF-BHK87-J6%f%X3K__56_ServerEmbeddedSolution -::======================================================================================================================================== +:: Windows Vista +cfd8ff08-c0d7-452b-9f60-ef5c70c32094_VKK3X-68KWM-X2YGT-QR4M6-4B%f%WMV___4_Enterprise +4f3d1606-3fea-4c01-be3c-8d671c401e3b_YFKBB-PQJJV-G996G-VWGXY-2V%f%3X8___6_Business +2c682dc2-8b68-4f63-a165-ae291d4cf138_HMBQG-8H2RH-C77VX-27R82-VM%f%QBT__16_BusinessN +d4f54950-26f2-4fb4-ba21-ffab16afcade_VTC42-BM838-43QHV-84HX6-XJ%f%XKV__27_EnterpriseN +:: Windows Server 2008 +ad2542d4-9154-4c6d-8a44-30f11ee96989_TM24T-X9RMF-VWXK6-X8JC9-BF%f%GM2___7_ServerStandard +68b6e220-cf09-466b-92d3-45cd964b9509_7M67G-PC374-GR742-YH8V4-TC%f%BY3___8_ServerDatacenter +c1af4d90-d1bc-44ca-85d4-003ba33db3b9_YQGMW-MPWTJ-34KDK-48M3W-X4%f%Q6V__10_ServerEnterprise +01ef176b-3e0d-422a-b4f8-4ea880035e8f_4DWFP-JF3DJ-B7DTH-78FJB-PD%f%RHK__15_ServerEnterpriseIA64 +ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b_WYR28-R7TFJ-3X2YQ-YCY4H-M2%f%49D__17_ServerWeb +7afb1156-2c1d-40fc-b260-aab7442b62fe_RCTX3-KWVHP-BR6TB-RB6DM-6X%f%7HP__18_ServerComputeCluster +2401e3d0-c50a-4b58-87b2-7e794b7d2607_W7VD6-7JFBR-RX26B-YKQ3Y-6F%f%FFJ__36_ServerStandardV +fd09ef77-5647-4eff-809c-af2b64659a45_22XQ2-VRXRG-P8D42-K34TD-G3%f%QQC__37_ServerDatacenterV +8198490a-add0-47b2-b3ba-316b12d647b4_39BXF-X8Q23-P2WWT-38T2F-G3%f%FPG__38_ServerEnterpriseV +::======================================================================================================================================= :: Office 2010 8ce7e872-188c-4b98-9d90-f8f90b7aad02_V7Y44-9T38C-R2VJK-666HK-T7%f%DDX__14_AccessVL cee5d470-6e3b-4fcc-8c2b-d17428568a9f_H62QG-HXVKF-PP4HP-66KMR-CW%f%9BM__14_ExcelVL diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index ebc1399..e5228bb 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -208,13 +208,42 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble goto dk_done ) -if %winbuild% LSS 7600 ( +if %winbuild% LSS 6001 ( %nceline% echo Unsupported OS version detected [%winbuild%]. -echo MAS only supports Windows 7/8/8.1/10/11 and their Server equivalents. +echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents. +if %winbuild% EQU 6000 ( +echo: +echo Windows Vista RTM is not supported because Powershell cannot be installed. +echo Upgrade to Windows Vista SP1 or SP2. +) goto dk_done ) +if not exist %ps% ( +%nceline% +echo PowerShell is not installed in your system. +if %winbuild% LSS 7600 ( +echo Install PowerShell using the following URL. +echo: +echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +) +goto dk_done +) + +if %winbuild% LSS 7600 ( +reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /v Install %nul2% | find /i "0x1" %nul1% || ( +%eline% +echo .NET 3.5 Framework is not installed in your system. +echo Install it using the following URL. +echo: +echo https://www.microsoft.com/download/details.aspx?id=25150 +start https://www.microsoft.com/download/details.aspx?id=25150 +goto dk_done +) +) + ::======================================================================================================================================== :: Fix special character limitations in path name @@ -415,7 +444,11 @@ echo [A] Activate - Windows %KS% Host echo [B] Activate - Office %KS% Host echo [C] Activate - Windows 8/8.1 APPX Sideloading echo [D] Activate - Manually Select Products +if defined _vis ( +echo [E] Reset - Rearm/Timers +) else ( echo [E] Reset - Rearm/Timers/Tamper/Lock +) echo _______________________________________________ echo: echo [6] Remove TSforge Activation @@ -461,9 +494,9 @@ echo: echo Initializing... call :dk_chkmal -if not exist %SysPath%\sppsvc.exe ( +if not exist %SysPath%\%_slexe% ( %eline% -echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo [%SysPath%\%_slexe%] file is missing, aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" @@ -486,10 +519,10 @@ goto dk_done if %winbuild% LSS 9200 if exist "%SysPath%\wlms\wlms.exe" ( sc query wlms | find /i "RUNNING" %nul% && ( -sc stop sppsvc %nul% +sc stop %_slser% %nul% if !errorlevel! EQU 1051 ( %eline% -echo Evaluation WLMS service is running, sppsvc service can not be stopped. Aborting... +echo Evaluation WLMS service is running, %_slser% service can not be stopped. Aborting... echo Install Non-Eval version for Windows build %winbuild%. echo: set fixes=%fixes% %mas%troubleshoot @@ -522,7 +555,7 @@ call :dk_showosinfo echo Initiating Diagnostic Tests... -set "_serv=sppsvc Winmgmt" +set "_serv=%_slser% Winmgmt" :: Software Protection :: Windows Management Instrumentation @@ -571,6 +604,8 @@ call :dk_color %Gray% "Checking OS Activation [Windows is alrea goto :ts_esu ) +if defined _vis goto :ts_winvista + set tempid= set keytype=zero for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wintsid\:.*';iex ($f[1])" %nul6%') do ( @@ -593,6 +628,86 @@ goto :ts_esu ::======================================================================================================================================== +:ts_winvista + +:: Process Windows Vista + +:: 1st column = Activation ID +:: 2nd column = Generic key +:: 3rd column = Key channel +:: 4th column = Edition ID +:: Separator = _ + +:: Keys aren't available for these editions, but since these editions aren't publicly available, it doesn't matter +:: a797d61e-1475-470b-86c8-f737a72c188d StarterN +:: 5e9f548a-c8a9-44e6-a6c2-3f8d0a7a99dd ServerComputeClusterV + +set f= +set key= +set tempid= +if not defined allapps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f + +for %%# in ( +:: WindowsVista +9de9abe2-d01d-4538-af84-4498bdbc2ba3_4D2XH-PRBMM-8Q22B-K8BM3-MR%f%W4W_____Retail_Business +db442be4-81ed-4ab3-9d66-2417e8a5c81c_76884-QXFY2-6Q2WX-2QTQ8-QX%f%X44_____Retail_BusinessN +b51791c2-b562-4b73-97b0-735a0e4429a6_YQPQV-RW8R3-XMPFG-RXG9R-JG%f%TVF_____Retail_Enterprise +58c37517-42f8-4723-bb44-30b05791ff2a_Q7J9R-G63R4-BFMHF-FWM9R-RW%f%DMV_____Retail_EnterpriseN +95c6e80a-0ff8-4bd0-95f2-c4a39b79d09e_RCG7P-TX42D-HM8FM-TCFCW-3V%f%4VD_____Retail_HomeBasic +d0333dad-c14e-46f2-b62a-8b47a1b9768b_HY2VV-XC6FF-MD6WV-FPYBQ-GF%f%JBT_____Retail_HomeBasicN +9e042223-03bf-49ae-808f-ff37f128d40d_X9HTF-MKJQQ-XK376-TJ7T4-76%f%PKF_____Retail_HomePremium +92d8977c-d506-4e63-b500-6d39283b6cd5_KJ6TP-PF9W2-23T3Q-XTV7M-PX%f%DT2_____Retail_HomePremiumN +89e51a3c-76c0-4beb-a650-53d34c8f8186_X9PYV-YBQRV-9BXWV-TQDMK-QD%f%WK4_____Retail_Starter +30fab9cc-8614-4339-989f-7ce61fb7a5c4_VMCB9-FDRV6-6CDQM-RV23K-RP%f%8F7_____Retail_Ultimate +1eefed20-8ac0-478c-8774-70cd44782ea1_CVX38-P27B4-2X8BT-RXD4J-V7%f%CKX_____Retail_UltimateN +:: WindowsServer2008 +c9ad502b-ef48-41d1-a2a0-38a38e82fed0_24FV9-H7JW8-C8Q6X-BQKMK-K9%f%77J_____Retail_ServerComputeCluster +866e924e-c2a3-4872-aca1-6b48c13962d5_6QBHY-DXTPJ-T9W3P-DTJXX-4V%f%QMB_____Retail_ServerDatacenter +d020c729-07f0-4f8f-87ce-bf803275c786_83TWG-TD3TC-HRDP2-K93FJ-Y3%f%4YC_OEM:NONSLP_ServerDatacenterV +32b40e5e-0c6d-4c6f-ab12-a031933fd2c6_MRB7H-QJRHG-FXTBR-B2Q2M-8W%f%MTJ_____Retail_ServerEnterprise +256cc990-1692-4ea8-965c-2d423d5dd24e_H4VB6-QPRWH-VDCYM-996P8-MH%f%KFY_OEM:NONSLP_ServerEnterpriseIA64 +1ba5e036-e386-42c4-b7eb-16bdb4fa1945_H8H7M-HDPQT-PJHQF-M7B83-9C%f%VGV_____Retail_ServerEnterpriseV +8df04457-07c8-4301-bce9-d61eb76cb2d6_RGBMC-PQBVF-94Q9K-HD63B-VY%f%6MP_____Retail_ServerHomePremium +5bd23b19-aa71-4a5b-8b68-c8801c2baff6_6C8KR-MD3QK-9GWFW-44CY2-W9%f%CBM_____Retail_ServerHomeStandard +b86c7736-91ff-4de9-bfa9-b32b8a09acac_7XRBY-6MP2K-VQPT8-F37JV-YY%f%Q83_____Retail_ServerMediumBusinessManagement +d3f5642f-081d-40b2-a4b9-efd3054d4584_6PDTD-JK48J-662TF-8J2QV-R4%f%CRB_____Retail_ServerMediumBusinessMessaging +c6936a36-69f3-4994-9857-3069c7b9ec7a_D694V-CMWKH-PY92X-PFQKQ-JC%f%B69_____Retail_ServerMediumBusinessSecurity +cc4c2cf8-ef29-4d8e-b168-2b65a3db3309_MRDK3-YYQF3-88BQJ-D6FJG-69%f%YJY_____Retail_ServerSBSPremium +b3827b27-bd38-4284-98af-e4f4d1c051a0_2KB23-GJRBD-W3T9C-6CH2W-39%f%B7V_____Retail_ServerSBSPrime +5dad0eff-3f6f-4310-8844-422f9dc7c84b_H4XDD-B27GY-667P6-XWVV7-GY%f%G8J_____Retail_ServerSBSStandard +603504f9-109f-49f0-9271-8c66f7878f58_8YVM4-YQBDH-7WDQM-R27WR-WV%f%CWG_____Retail_ServerStandard +65ab7338-9ad0-43fe-af1b-190b577495e2_H9MW3-6V7GK-94P9G-7FTPJ-VK%f%CKF_____Retail_ServerStandardV +2be204da-24a0-4943-b66c-81e8464acd7e_2264C-TD9T8-P8HPW-CC9GH-MH%f%M2V_____Retail_ServerStorageEnterprise +60207eba-8b4a-486c-a013-023b4b742c2f_RCYMT-YX342-8T6YY-XYHYC-3D%f%D7X_____Retail_ServerStorageExpress +368856e9-43f7-4601-8358-e561f36c7dd8_FKFT2-WXYY9-WBPY7-6YMY4-X4%f%8JF_____Retail_ServerStorageStandard +4bf433fa-ab04-4c6c-b55b-00170e14b8cd_8X9J7-HCJ7J-3WDJT-QM7D8-46%f%4YH_____Retail_ServerStorageWorkgroup +a77a6806-f59e-4953-97d7-229317b8e6a6_BGT39-9FYH7-X2CYD-T628F-QP%f%QPW_____Retail_ServerWeb +f92f836d-4d3e-4e90-a08f-2d612d65e716_HPH76-FHFPP-DRW9D-7W2V4-HW%f%GKT_____Retail_ServerWinSB +3059a9fd-b068-4f0d-acaf-66324dca67ac_2V8G6-KRXYR-MMGXJ-6RWM3-GX%f%CCG_____Retail_ServerWinSBV +) do ( +for /f "tokens=1-4 delims=_" %%A in ("%%#") do if %tsedition%==%%D if not defined key ( +echo "%allapps%" | find /i "%%A" %nul1% && ( +set key=%%B +set tempid=%%A +) +) +) + +if not defined key ( +set error=1 +call :dk_color %Red% "Checking Activation ID [%tsedition% SKU-%osSKU% not found in the system]" +call :dk_color %Blue% "%_fixmsg%" +goto :ts_esu +) + +echo Checking Activation ID [%tempid%] [%tsedition%] + +call :ts_inskey "[%key%]" +if not defined error set tsids=%tsids% %tempid% +goto :ts_esu + +::======================================================================================================================================== + :ts_wineval call :dk_color %Gray% "Checking OS Edition [%tsedition%] [Evaluation edition found]" @@ -709,19 +824,7 @@ goto :ts_esu echo Resetting Rearm / GracePeriod [Successful] ) -%psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% -set keyerror=%errorlevel% -cmd /c exit /b %keyerror% -if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" - -if %keyerror% EQU 0 ( -call :dk_refresh -echo Installing Activable Evaluation Key [%key%] [Successful] -) else ( -set error=1 -call :dk_color %Red% "Installing Activable Evaluation Key [%key%] [Failed] %keyerror%" -call :dk_color %Blue% "%_fixmsg%" -) +call :ts_inskey "[%key%]" ::======================================================================================================================================== @@ -757,7 +860,7 @@ REM Windows7EmbeddedPOSReady7 4f1f646c-1e66-4908-acc7-d1606229b29e_POS-ESU-Year3[1-3y]_-Embedded[POS]- REM Windows7EmbeddedStandard 6aaf1c7d-527f-4ed5-b908-9fc039dfc654_WES-ESU-Year3[1-3y]_-Embedded[Standard]- -REM WindowsServer2008R2 +REM WindowsServer2008/WindowsServer2008R2 8e7bfb1e-acc1-4f56-abae-b80fce56cd4b_Server-ESU-PA[1-6y]_-ServerDatacenter-ServerDatacenterCore-ServerDatacenterV-ServerDatacenterVCore-ServerStandard-ServerStandardCore-ServerStandardV-ServerStandardVCore-ServerEnterprise-ServerEnterpriseCore-ServerEnterpriseV-ServerEnterpriseVCore- REM Windows8.1 4afc620f-12a4-48ad-8015-2aebfbd6e47c_Client-ESU-Year3[1-3y]_-Enterprise-EnterpriseN-Professional-ProfessionalN- @@ -791,6 +894,13 @@ set esuexistbutnosup=1 ) ) +if defined esuexistsup if defined _vis ( +set key=9FPV7-MWGT8-7XPDF-JC23W-WT7TW +REM This is a non-generic blocked MAK key for Server-ESU-PA +call :ts_inskey "[!key!]" +goto :ts_off +) + if defined esuexistsup ( echo "%tsids%" | find /i "4220f546-f522-46df-8202-4d07afd26454" %nul1% && ( echo "%tsids%" | find /i "7e94be23-b161-4956-a682-146ab291774c" %nul1% || ( @@ -813,7 +923,8 @@ goto :ts_off ) set esuavail= -if %winbuild% LEQ 7602 if not defined isThinpc set esuavail=1 +if defined _vis if defined isServer set esuavail=1 +if %winbuild% LEQ 7602 if not defined _vis if not defined isThinpc set esuavail=1 if %winbuild% GTR 7602 if %winbuild% LSS 10240 if defined isServer set esuavail=1 if %winbuild% GEQ 10240 if %winbuild% LEQ 19045 if not defined isServer set esuavail=1 if %winbuild% EQU 9600 set esuavail=1 @@ -835,7 +946,7 @@ if not %_actoff%==1 goto :ts_act if %winbuild% LSS 9200 ( echo: call :dk_color %Gray% "Checking Supported Office [TSforge for Office is supported on Windows 8 and later versions]" -call :dk_color %Blue% "On Windows 7 build, use Online %KS% activation option for Office instead." +call :dk_color %Blue% "On Windows Vista / 7, use Online %KS% activation option for Office instead." goto :ts_act ) @@ -1108,7 +1219,7 @@ echo: if %winbuild% GEQ 10586 ( call :dk_color %Gray% "With %KS% Host license, system may randomly change Windows Edition later. It is a Windows issue and can be safely ignored." ) -call :dk_color %Gray% "%KS% Host [Not to be confused with %KS% Client] license causes the sppsvc service to run continuously." +call :dk_color %Gray% "%KS% Host [Not to be confused with %KS% Client] license causes the %_slser% service to run continuously." call :dk_color %Blue% "Only use this activation when necessary, you can revert to normal activation from the previous menu." if %_unattended%==0 ( @@ -1122,6 +1233,8 @@ set _arr= set tempid= set keytype=kmshost +if defined _vis goto :ts_whost_vista + :: Install current edition csvlk license so that correct edition can reflect for csvlk if %winbuild% GEQ 10586 ( @@ -1153,6 +1266,53 @@ goto :ts_act ::======================================================================================================================================== +:ts_whost_vista + +:: Process Windows K-M-S host for Vista + +:: 1st column = Activation ID +:: 2nd column = CSVLK key +:: 3rd column = Edition IDs +:: Separator = _ + +set f= +set key= +set tempid= +if not defined allapps call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f + +for %%# in ( +:: WindowsVista +212a64dc-43b1-4d3d-a30c-2fc69d2095c6_TWVG3-9Q4P8-W9XJF-Y76FJ-DW%f%Q4R_-Business-BusinessN-Enterprise-EnterpriseN- +:: WindowsServer2008 +c90d1b4e-8aa8-439e-8b9e-b6d6b6a6d975_BHC4Q-6D7B7-QMVH7-4MKQH-Y9%f%VK7_-ServerComputeCluster-ServerDatacenter-ServerDatacenterV-ServerEnterprise-ServerEnterpriseIA64-ServerEnterpriseV-ServerStandard-ServerStandardV-ServerWeb- +56df4151-1f9f-41bf-acaa-2941c071872b_PVGKG-2R7XQ-7WTFD-FXTJR-DQ%f%BQ3_-ServerComputeCluster-ServerEnterprise-ServerEnterpriseV-ServerStandard-ServerStandardV-ServerWeb- +c448fa06-49d1-44ec-82bb-0085545c3b51_KH4PC-KJFX6-XFVHQ-GDK2G-JC%f%JY9_-ServerComputeCluster-ServerWeb- +) do ( +for /f "tokens=1-3 delims=_" %%A in ("%%#") do if not defined key ( +echo "%allapps%" | find /i "%%A" %nul1% && ( +echo "%%C" | find /i "-%tsedition%-" %nul1% && ( +set key=%%B +set tempid=%%A +) +) +) +) + +if defined key ( +echo Checking Activation ID [%tempid%] [%tsedition%] +) else ( +call :dk_color %Red% "Checking Activation ID [Not Found] [%tsedition%] [%osSKU%]" +call :dk_color %Blue% "%KS% Host license is not found on your system. It is available for the below editions." +call :dk_color %Blue% "Business, BusinessN, Enterprise, EnterpriseN, and Server editions, etc." +goto :ts_act +) + +call :ts_inskey "[%key%]" +if not defined error set tsids=%tsids% %tempid% +goto :ts_act + +::======================================================================================================================================== + :ts_ohost :: Process Office K-M-S host @@ -1160,6 +1320,12 @@ goto :ts_act echo: echo Processing Office %KS% Host... +if defined _vis ( +echo: +call :dk_color %Blue% "Windows Vista and Server 2008 do not support the installation of Office KMS Host." +goto :ts_act +) + set ohostexist= call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 set ohostids=%allapps% @@ -1242,7 +1408,11 @@ goto :ts_act :ts_resetall echo: +if defined _vis ( +echo Processing Reset of Rearm / Timers... +) else ( echo Processing Reset of Rearm / Timers / Tamper / Lock... +) echo: set resetstuff=1 @@ -1291,6 +1461,10 @@ goto :dk_done for /f "delims=" %%a in ('%psc% "$ids = Get-WmiObject -Query 'SELECT ID FROM SoftwareLicensingProduct' | Select-Object -ExpandProperty ID; $ids" %nul6%') do call set "allactids= %%a !allactids! " +if defined _vis ( +echo: +call :dk_color %Blue% "On Windows Vista and Server 2008, you must manually install the key before activating it." +) echo: call :dk_color %Gray% "Enter / Paste the Activation ID shown in first column in the opened text file, or just press Enter to return:" echo Add space after each Activation ID if you are adding multiple: @@ -1421,7 +1595,7 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble if defined tsids ( echo: -echo Installing Forged Product Key Data... +if not defined _vis echo Installing Forged Product Key Data... echo Depositing Zero Confirmation ID... echo: %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':tsforge\:.*';& ([ScriptBlock]::Create($f[1])) %tsids%" @@ -1969,10 +2143,16 @@ exit /b :dk_setvar -set psc=powershell.exe -nop -c +set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe +set psc=%ps% -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) @@ -2090,7 +2270,7 @@ if ($r -eq 0) { :ts_checkwinperm -%psc% "Get-WmiObject -Query 'SELECT Name, Description FROM SoftwareLicensingProduct WHERE LicenseStatus=''1'' AND GracePeriodRemaining=''0'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Where-Object { $_.Description -notmatch 'KMS_' } | Select-Object -Property Name" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= +%psc% "Get-WmiObject -Query 'SELECT Name, Description FROM SoftwareLicensingProduct WHERE LicenseStatus=''1'' AND GracePeriodRemaining=''0'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Where-Object { $_.Description -notmatch 'KMS' } | Select-Object -Property Name" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= exit /b :: Refresh license status @@ -2101,6 +2281,27 @@ if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call RefreshLicenseStatus if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'%sps%').GetInstances()).RefreshLicenseStatus()" %nul% exit /b +:: Install Key + +:ts_inskey + +if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% +if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +set keyerror=%errorlevel% +cmd /c exit /b %keyerror% +if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" + +if %keyerror% EQU 0 ( +if %sps%==SoftwareLicensingService call :dk_refresh +echo Installing Product Key %~1 [Successful] +) else ( +set error=1 +call :dk_color %Red% "Installing Product Key %~1 [Failed] %keyerror%" +call :dk_color %Blue% "%_fixmsg%" +) + +exit /b + :: Activation command :dk_act @@ -2153,6 +2354,8 @@ exit /b :dk_reeval +if %winbuild% LSS 7600 exit /b + :: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" @@ -2180,13 +2383,13 @@ function InstallLicenseArr($Str) { ForEach ($x in $a) {InstallLicenseFile "$x"} } function InstallLicenseDir($Loc) { - dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} + Get-ChildItem $Loc -Recurse -Filter *.xrm-ms | ForEach-Object {InstallLicenseFile $_.FullName} } function ReinstallLicenses() { - $Oem = "$env:SysPath\oem" - $Spp = "$env:SysPath\spp\tokens" - InstallLicenseDir "$Spp" - If (Test-Path $Oem) {InstallLicenseDir "$Oem"} + $Paths = @("$env:SysPath\oem", "$env:SysPath\licensing", "$env:SysPath\spp\tokens") + foreach ($Path in $Paths) { + if (Test-Path $Path) { InstallLicenseDir "$Path" } + } } :xrm: @@ -2204,16 +2407,16 @@ exit /b :dk_sppissue -sc start sppsvc %nul% +sc start %_slser% %nul% set spperror=%errorlevel% if %spperror% NEQ 1056 if %spperror% NEQ 0 ( %eline% -echo sc start sppsvc [Error Code: %spperror%] +echo sc start %_slser% [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host '%_slser% is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) @@ -2231,6 +2434,10 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) +if %winbuild% LSS 7600 ( +set "winos=!winos:VistaT=Vista!" +set "winos=!winos:Serverr=Server!" +) if not defined winsub exit /b @@ -2277,11 +2484,11 @@ for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[Antivirus URLs are blocked in hosts]" -sc start sppsvc %nul% +sc start %_slser% %nul% echo "%errorlevel%" | findstr "577 225" %nul% && ( set "results=%results%[Likely File Infector]" ) || ( -if not exist %SysPath%\sppsvc.exe if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") +if not exist %SysPath%\%_slexe% if not exist %SysPath%\alg.exe (set "results=%results%[Likely File Infector]") ) if not "%results%%pupfound%"=="" ( @@ -2361,6 +2568,7 @@ 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 %%#==SLsvc sc config %%# start= auto %nul% if /i %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% @@ -2490,7 +2698,7 @@ if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( -if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( +if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" if not exist "%SysPath%\licensing\skus\Security-Licensing-SLC-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) @@ -2572,7 +2780,7 @@ call :dk_color2 %Blue% "In case of activation issues, do this - " %_Yellow% " %m ) -for %%# in (SppEx%w%tComObj.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( +for %%# in (SppEx%w%tComObj.exe SLsvc.exe sppsvc.exe sppsvc.exe\PerfOptions) do ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) ) if defined _sppint ( @@ -2586,14 +2794,14 @@ echo Checking SPP In IFEO [%_sppint%] ) -for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') do if /i %%b NEQ 0x0 ( +if %winbuild% GEQ 7600 for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" ) -reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( +if %winbuild% GEQ 7600 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers call :dk_color2 %Blue% "Most likely caused by gaming spoofers. Check this webpage for help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" @@ -2603,21 +2811,22 @@ set showfix=1 set tokenstore= +if %winbuild% GEQ 7600 ( for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" -if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( +if %winbuild% GEQ 9200 if /i not "!tokenstore!"=="%SysPath%\spp\store" if /i not "!tokenstore!"=="%SysPath%\spp\store\2.0" if /i not "!tokenstore!"=="%SysPath%\spp\store_test\2.0" ( set toerr=1 set error=1 set showfix=1 -call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" +call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [!tokenstore!]" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" ) - +) :: This code creates token folder only if it's missing and sets default permission for it -if not defined toerr if not exist "%tokenstore%\" ( +if %winbuild% GEQ 7600 if not defined toerr if not exist "%tokenstore%\" ( mkdir "%tokenstore%" %nul% if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" if %winbuild% GEQ 9200 set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';" @@ -2638,7 +2847,7 @@ set showfix=1 if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "if (-not $env:_vis) {Start-Job { Stop-Service %_slser% -force } | Wait-Job -Timeout 20 | Out-Null}; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" @@ -2653,7 +2862,7 @@ call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) -if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( +if %winbuild% GEQ 7600 if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( set error=1 call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" ) @@ -2788,8 +2997,10 @@ $wpaKey.Close() if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' +) else if not exist %ps% ( +echo %~3 ) exit /b @@ -2797,8 +3008,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) else if not exist %ps% ( +echo %~3 %~6 ) exit /b @@ -7670,7 +7883,7 @@ function slGetSkuInfo($SkuId) { } } -if ($env:resetstuff -eq $null) { +if (-not $env:resetstuff) { foreach ($tsactid in $tsactids) { try { $prodDes = Get-WmiInfo -tsactid $tsactid -property "Description" @@ -7679,7 +7892,9 @@ if ($env:resetstuff -eq $null) { $nameParts = $prodName -split ',', 2 $prodName = if ($nameParts.Count -gt 1) { ($nameParts[1].Trim() -split '[ ,]')[0] } else { $null } } + if (-not $env:_vis) { [LibTSforge.Modifiers.GenPKeyInstall]::InstallGenPKey($ver, $prod, $tsactid) + } if ($prodName -match 'Office' -and -not (slGetSkuInfo($tsactid))) { $licenseStatus = Get-WmiInfo -tsactid $tsactid -property "LicenseStatus" if ($licenseStatus -eq 1) { @@ -7712,13 +7927,13 @@ if ($env:resetstuff -eq $null) { } } -if ($env:resetstuff -eq '1') { +if ($env:resetstuff) { try { - [LibTSforge.Modifiers.TamperedFlagsDelete]::DeleteTamperFlags($ver, $prod) + if (-not $env:_vis) {[LibTSforge.Modifiers.TamperedFlagsDelete]::DeleteTamperFlags($ver, $prod)} [LibTSforge.SPP.SLApi]::RefreshLicenseStatus() [LibTSforge.Modifiers.RearmReset]::Reset($ver, $prod) [LibTSforge.Modifiers.GracePeriodReset]::Reset($ver, $prod) - [LibTSforge.Modifiers.KeyChangeLockDelete]::Delete($ver, $prod) + if (-not $env:_vis) {[LibTSforge.Modifiers.KeyChangeLockDelete]::Delete($ver, $prod)} } catch { $errcode = 3 diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 708689b..7cd7548 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -134,9 +134,9 @@ goto dk_done ) if %winbuild% LSS 7600 ( -%nceline% +%eline% echo Unsupported OS version detected [%winbuild%]. -echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +echo This option is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. goto dk_done ) @@ -1352,10 +1352,16 @@ if ($appIdsList.Count -gt 0) { :dk_setvar -set psc=powershell.exe -nop -c +set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe +set psc=%ps% -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) @@ -1412,16 +1418,16 @@ exit /b :dk_sppissue -sc start sppsvc %nul% +sc start %_slser% %nul% set spperror=%errorlevel% if %spperror% NEQ 1056 if %spperror% NEQ 0 ( %eline% -echo sc start sppsvc [Error Code: %spperror%] +echo sc start %_slser% [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host '%_slser% is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Common lines used in PowerShell reflection code @@ -1439,8 +1445,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' +) else if not exist %ps% ( +echo %~3 ) exit /b @@ -1448,8 +1456,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) else if not exist %ps% ( +echo %~3 %~6 ) exit /b diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 594f857..eff01d7 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -139,9 +139,9 @@ goto dk_done ) if %winbuild% LSS 7600 ( -%nceline% +%eline% echo Unsupported OS version detected [%winbuild%]. -echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +echo This option is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. goto dk_done ) @@ -824,10 +824,16 @@ exit /b :dk_setvar -set psc=powershell.exe -nop -c +set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe +set psc=%ps% -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) @@ -911,16 +917,16 @@ exit /b :dk_sppissue -sc start sppsvc %nul% +sc start %_slser% %nul% set spperror=%errorlevel% if %spperror% NEQ 1056 if %spperror% NEQ 0 ( %eline% -echo sc start sppsvc [Error Code: %spperror%] +echo sc start %_slser% [Error Code: %spperror%] ) echo: -%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host 'sppsvc is not working correctly. Check this webpage for help - %mas%troubleshoot'}" +%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host '%_slser% is not working correctly. Check this webpage for help - %mas%troubleshoot'}" exit /b :: Common lines used in PowerShell reflection code @@ -1018,8 +1024,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' +) else if not exist %ps% ( +echo %~3 ) exit /b @@ -1027,8 +1035,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) else if not exist %ps% ( +echo %~3 %~6 ) exit /b diff --git a/MAS/Separate-Files-Version/Check_Activation_Status.cmd b/MAS/Separate-Files-Version/Check_Activation_Status.cmd index fd72a3f..104a856 100644 --- a/MAS/Separate-Files-Version/Check_Activation_Status.cmd +++ b/MAS/Separate-Files-Version/Check_Activation_Status.cmd @@ -23,10 +23,11 @@ set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%Syste set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" -set "_psc=powershell -nop -c" +set "ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe" +set "_psc=%ps% -nop -c" set "_err===== ERROR ====" set _pwsh=1 -for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" set _pwsh=0 +if not exist %ps% set _pwsh=0 cmd /c "%_psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" 1>nul || (set _pwsh=0) if %_pwsh% equ 0 ( echo %_err% diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 34ba8d0..469d01f 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -129,13 +129,30 @@ echo: setlocal EnableDelayedExpansion set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" -goto dk_done +goto done2 ) -if %winbuild% LSS 7600 ( +if %winbuild% LSS 6001 ( %nceline% echo Unsupported OS version detected [%winbuild%]. -echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents. +if %winbuild% EQU 6000 ( +echo: +echo Windows Vista RTM is not supported because Powershell cannot be installed. +echo Upgrade to Windows Vista SP1 or SP2. +) +goto done2 +) + +if not exist %ps% ( +%nceline% +echo PowerShell is not installed in your system. +if %winbuild% LSS 7600 ( +echo Install PowerShell using the following URL. +echo: +echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +) goto done2 ) @@ -732,10 +749,16 @@ exit /b :dk_setvar -set psc=powershell.exe -nop -c +set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe +set psc=%ps% -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) @@ -791,8 +814,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' +) else if not exist %ps% ( +echo %~3 ) exit /b @@ -800,8 +825,10 @@ exit /b if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( +) else if exist %ps% ( %psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) else if not exist %ps% ( +echo %~3 %~6 ) exit /b diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 487b496..461e866 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -133,10 +133,27 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble goto dk_done ) -if %winbuild% LSS 7600 ( +if %winbuild% LSS 6001 ( %nceline% echo Unsupported OS version detected [%winbuild%]. -echo Project is supported only for Windows 7/8/8.1/10/11 and their Server equivalents. +echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents. +if %winbuild% EQU 6000 ( +echo: +echo Windows Vista RTM is not supported because Powershell cannot be installed. +echo Upgrade to Windows Vista SP1 or SP2. +) +goto dk_done +) + +if not exist %ps% ( +%nceline% +echo PowerShell is not installed in your system. +if %winbuild% LSS 7600 ( +echo Install PowerShell using the following URL. +echo: +echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +) goto dk_done ) @@ -515,6 +532,13 @@ mode 125, 32 ) title Fix Licensing ^(ClipSVC ^+ SPP ^+ OSPP^) +if %winbuild% EQU 6001 ( +%eline% +echo This option is not supported on Windows Vista SP1. +echo Upgrade to Windows Vista SP2. +goto :at_back +) + echo: echo %line% echo: @@ -531,7 +555,7 @@ echo - Clear ClipSVC, SPP and OSPP licenses. echo - Fix permissions of SPP tokens folder and registries. echo - Trigger the repair option for Office. echo: -call :dk_color2 %_White% " - " %Red% "Apply this option only when it is necessary." +call :dk_color2 %_White% " - " %Blue% "Apply this option only when it is necessary." echo: echo %line% echo: @@ -695,19 +719,19 @@ echo [No Error Found] ) echo: -echo Stopping sppsvc service... -%psc% Stop-Service sppsvc -force %nul% +echo Stopping %_slser% service... +%psc% Stop-Service %_slser% -force %nul% set w= set _sppint= -for %%# in (SppEx%w%tComObj.exe sppsvc.exe) do (reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (set _sppint=1)) +for %%# in (SppEx%w%tComObj.exe %_slexe%) do (reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (set _sppint=1)) if defined _sppint ( echo: echo Removing SPP IFEO registry keys... -for %%# in (SppE%w%xtComObj.exe sppsvc.exe) do (reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul%) +for %%# in (SppE%w%xtComObj.exe %_slexe%) do (reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul%) ) -if %winbuild% LSS 9200 ( +if %winbuild% LSS 9200 if not defined _vis ( REM Fix issues caused by Update KB971033 in Windows 7 REM https://support.microsoft.com/help/4487266 echo: @@ -726,6 +750,7 @@ del /f /q %SysPath%\7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-81 :: Delete registry keys that are not deleted by activation scripts +if not defined _vis ( echo: echo Cleaning some licensing-related registry keys... %nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "ServiceSessionId" /f @@ -733,6 +758,7 @@ echo Cleaning some licensing-related registry keys... %nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "PolicyValuesArray" /f %nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% reg delete "HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform\data" /f +) echo: call :scandat delete @@ -744,9 +770,13 @@ call :dk_color %Red% "Failed to delete .dat files." echo: ) +if defined _vis ( +%psc% Start-Service %_slser% %nul% +) + echo: echo Reinstalling system licenses... -%psc% "Stop-Service sppsvc -force; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% +%psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% if %errorlevel% NEQ 0 %psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% if %errorlevel% EQU 0 ( echo [Successful] @@ -763,7 +793,7 @@ call :dk_color %Red% "Failed to rebuild tokens.dat file." echo tokens.dat file was rebuilt successfully. ) -if %winbuild% LSS 9200 ( +if %winbuild% LSS 9200 if not defined _vis ( sc config sppuinotify start= demand ) @@ -1329,13 +1359,13 @@ function InstallLicenseArr($Str) { ForEach ($x in $a) {InstallLicenseFile "$x"} } function InstallLicenseDir($Loc) { - dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} + Get-ChildItem $Loc -Recurse -Filter *.xrm-ms | ForEach-Object {InstallLicenseFile $_.FullName} } function ReinstallLicenses() { - $Oem = "$env:SysPath\oem" - $Spp = "$env:SysPath\spp\tokens" - InstallLicenseDir "$Spp" - If (Test-Path $Oem) {InstallLicenseDir "$Oem"} + $Paths = @("$env:SysPath\oem", "$env:SysPath\licensing", "$env:SysPath\spp\tokens") + foreach ($Path in $Paths) { + if (Test-Path $Path) { InstallLicenseDir "$Path" } + } } :xrm: @@ -1349,6 +1379,7 @@ for %%# in ( %SysPath%\spp\store\ %SysPath%\spp\store\2.0\ %Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\ +%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareLicensing\ ) do ( if %1==check ( @@ -1424,9 +1455,35 @@ $key.SetAccessControl($acl) ::======================================================================================================================================== +:dk_color + +if %_NCS% EQU 1 ( +echo %esc%[%~1%~2%esc%[0m +) else if exist %ps% ( +%psc% write-host -back '%1' -fore '%2' '%3' +) else if not exist %ps% ( +echo %~3 +) +exit /b + +:dk_color2 + +if %_NCS% EQU 1 ( +echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m +) else if exist %ps% ( +%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' +) else if not exist %ps% ( +echo %~3 %~6 +) +exit /b + +::======================================================================================================================================== + :dk_done echo: +if %_unattended%==1 timeout /t 2 & exit /b + if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" @@ -1441,26 +1498,7 @@ choice /c 0 /n call :dk_color %_Yellow% "Press any key to %_exitmsg%..." pause %nul1% ) -exit /b -::======================================================================================================================================== - -:dk_color - -if %_NCS% EQU 1 ( -echo %esc%[%~1%~2%esc%[0m -) else ( -%psc% write-host -back '%1' -fore '%2' '%3' -) -exit /b - -:dk_color2 - -if %_NCS% EQU 1 ( -echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m -) else ( -%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' -) exit /b ::======================================================================================================================================== @@ -1469,10 +1507,16 @@ exit /b :dk_setvar -set psc=powershell.exe -nop -c +set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe +set psc=%ps% -nop -c set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G +set _slexe=sppsvc.exe& set _slser=sppsvc +if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc) +if %_slexe%==SLsvc.exe set _vis=1 + set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) From 52ba9f138f2a256c4f95de464073fd2778595e56 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 21 Apr 2025 00:53:08 +0530 Subject: [PATCH 110/132] Ask to run DISM restore and SFC scan when system files are missing --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 18 ++++++++++++++++++ .../Activators/HWID_Activation.cmd | 3 +++ .../Activators/KMS38_Activation.cmd | 3 +++ .../Activators/Ohook_Activation_AIO.cmd | 3 +++ .../Activators/Online_KMS_Activation.cmd | 3 +++ .../Activators/TSforge_Activation.cmd | 3 +++ .../Change_Windows_Edition.cmd | 3 +++ 7 files changed, 36 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index fd2f429..59e6540 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -667,6 +667,9 @@ if not exist %SysPath%\%%# ( %eline% echo [%SysPath%\%%#] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done @@ -2232,6 +2235,9 @@ if not exist %SysPath%\sppsvc.exe ( %eline% echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done @@ -3797,6 +3803,9 @@ if not exist %SysPath%\%_slexe% ( %eline% echo [%SysPath%\%_slexe%] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done @@ -10672,6 +10681,9 @@ if defined _fmiss ( %eline% echo [%_fmiss%] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done @@ -11504,6 +11516,9 @@ if not exist %SysPath%\%_slexe% ( %eline% echo [%SysPath%\%_slexe%] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done @@ -16421,6 +16436,9 @@ if not exist %SysPath%\%%# ( %eline% echo [%SysPath%\%%#] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 006b184..6aa033b 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -381,6 +381,9 @@ if not exist %SysPath%\%%# ( %eline% echo [%SysPath%\%%#] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 4610158..890ac89 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -421,6 +421,9 @@ if defined _fmiss ( %eline% echo [%_fmiss%] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 7fe95f3..e2978a4 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -412,6 +412,9 @@ if not exist %SysPath%\sppsvc.exe ( %eline% echo [%SysPath%\sppsvc.exe] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 940c217..8e316c0 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -489,6 +489,9 @@ if not exist %SysPath%\%_slexe% ( %eline% echo [%SysPath%\%_slexe%] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index e5228bb..9c64be6 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -498,6 +498,9 @@ if not exist %SysPath%\%_slexe% ( %eline% echo [%SysPath%\%_slexe%] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index eff01d7..ad5083a 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -354,6 +354,9 @@ if not exist %SysPath%\%%# ( %eline% echo [%SysPath%\%%#] file is missing, aborting... echo: +call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." +call :dk_color %Blue% "After that, restart system and try activation again." +echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" goto dk_done From af18bd773c1b4bb4dd1c4e055ab154cccfa7782f Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 21 Apr 2025 02:29:22 +0530 Subject: [PATCH 111/132] Fix a missing echo --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 59e6540..bc8220d 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -4903,7 +4903,7 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble if defined tsids ( echo: -if not defined _vis Installing Forged Product Key Data... +if not defined _vis echo Installing Forged Product Key Data... echo Depositing Zero Confirmation ID... echo: %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':tsforge\:.*';& ([ScriptBlock]::Create($f[1])) %tsids%" From 5090cde0a04698521979d48f28f670827a69d74e Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 21 Apr 2025 18:01:09 +0530 Subject: [PATCH 112/132] Use wmic.exe on builds below 9200 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 11 ++++------- .../Activators/HWID_Activation.cmd | 4 +++- .../Activators/KMS38_Activation.cmd | 10 +++------- .../Activators/Ohook_Activation_AIO.cmd | 4 +++- .../Activators/Online_KMS_Activation.cmd | 5 ++++- .../Activators/TSforge_Activation.cmd | 7 ++++--- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 1 + MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 1 + 8 files changed, 23 insertions(+), 20 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index bc8220d..e5bc555 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1374,6 +1374,7 @@ function ReinstallLicenses() { :dk_ckeckwmic +if %winbuild% LSS 9200 (set _wmic=1&exit /b) set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 @@ -1687,7 +1688,8 @@ call :dk_color %Red% "Checking Package Files [Not Found] [%osed ) -%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +if %_wmic% EQU 1 wmic path %sps% get Version %nul% +if %_wmic% EQU 0 %psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" @@ -10978,12 +10980,6 @@ set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" -sc query sppsvc | find /i "STOPPED" %nul% && ( -echo Stopping sppsvc Service [Successful] -) || ( -call :dk_color %Gray% "Stopping sppsvc Service [Failed]" -) - %_xmlexist% ( %psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 20 | Out-Null" %_xmlexist% timeout /t 2 %nul% @@ -12431,6 +12427,7 @@ set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" 2>nul | find /i "computersystem" 1>nul && set _wmic=1 ) +if %winbuild% LSS 9200 set _wmic=1 setlocal EnableDelayedExpansion if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 6aa033b..6409cec 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1072,6 +1072,7 @@ function ReinstallLicenses() { :dk_ckeckwmic +if %winbuild% LSS 9200 (set _wmic=1&exit /b) set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 @@ -1385,7 +1386,8 @@ call :dk_color %Red% "Checking Package Files [Not Found] [%osed ) -%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +if %_wmic% EQU 1 wmic path %sps% get Version %nul% +if %_wmic% EQU 0 %psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 890ac89..bb2c624 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -718,12 +718,6 @@ set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 20 | Out-Null" -sc query sppsvc | find /i "STOPPED" %nul% && ( -echo Stopping sppsvc Service [Successful] -) || ( -call :dk_color %Gray% "Stopping sppsvc Service [Failed]" -) - %_xmlexist% ( %psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 20 | Out-Null" %_xmlexist% timeout /t 2 %nul% @@ -1176,6 +1170,7 @@ function ReinstallLicenses() { :dk_ckeckwmic +if %winbuild% LSS 9200 (set _wmic=1&exit /b) set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 @@ -1534,7 +1529,8 @@ call :dk_color %Red% "Checking Package Files [Not Found] [%osed ) -%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +if %_wmic% EQU 1 wmic path %sps% get Version %nul% +if %_wmic% EQU 0 %psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index e2978a4..5be9615 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1495,6 +1495,7 @@ function ReinstallLicenses() { :dk_ckeckwmic +if %winbuild% LSS 9200 (set _wmic=1&exit /b) set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 @@ -1793,7 +1794,8 @@ call :dk_color %Red% "Checking Package Files [Not Found] [%osed ) -%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +if %_wmic% EQU 1 wmic path %sps% get Version %nul% +if %_wmic% EQU 0 %psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 8e316c0..48e93ac 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1686,6 +1686,7 @@ set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" 2>nul | find /i "computersystem" 1>nul && set _wmic=1 ) +if %winbuild% LSS 9200 set _wmic=1 setlocal EnableDelayedExpansion if exist "%ProgramFiles%\Activation-Renewal\" call :_taskstart>>"%ProgramFiles%\Activation-Renewal\Logs.txt" @@ -2739,6 +2740,7 @@ function ReinstallLicenses() { :dk_ckeckwmic +if %winbuild% LSS 9200 (set _wmic=1&exit /b) set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 @@ -3097,7 +3099,8 @@ call :dk_color %Red% "Checking Package Files [Not Found] [%osed ) -%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +if %_wmic% EQU 1 wmic path %sps% get Version %nul% +if %_wmic% EQU 0 %psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 9c64be6..b4effe7 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -2400,6 +2400,7 @@ function ReinstallLicenses() { :dk_ckeckwmic +if %winbuild% LSS 9200 (set _wmic=1&exit /b) set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 @@ -2712,8 +2713,8 @@ call :dk_color %Red% "Checking Package Files [Not Found] [%osed ) ) - -%psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% +if %_wmic% EQU 1 wmic path %sps% get Version %nul% +if %_wmic% EQU 0 %psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 set "error_code=0x%=ExitCode%" @@ -2850,7 +2851,7 @@ set showfix=1 if not defined notwinact ( call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( -%psc% "if (-not $env:_vis) {Start-Job { Stop-Service %_slser% -force } | Wait-Job -Timeout 20 | Out-Null}; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" +%psc% "if (-not $env:_vis) {Start-Job { Stop-Service %_slser% -force } | Wait-Job -Timeout 20 | Out-Null}; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 7cd7548..a068afa 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1408,6 +1408,7 @@ exit /b :dk_ckeckwmic +if %winbuild% LSS 9200 (set _wmic=1&exit /b) set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index ad5083a..5c34093 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -910,6 +910,7 @@ exit /b :dk_ckeckwmic +if %winbuild% LSS 9200 (set _wmic=1&exit /b) set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1 From b8ad749bac256882fd5ec1c3b2924ff86e681c90 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 21 Apr 2025 20:22:13 +0530 Subject: [PATCH 113/132] Fix issue related to URL opening in unattended mode --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- .../Activators/Online_KMS_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd | 4 ++-- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index e5bc555..a67b39c 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -160,7 +160,7 @@ if %winbuild% LSS 7600 ( echo Install PowerShell using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 ) goto dk_done ) @@ -3719,7 +3719,7 @@ echo .NET 3.5 Framework is not installed in your system. echo Install it using the following URL. echo: echo https://www.microsoft.com/download/details.aspx?id=25150 -start https://www.microsoft.com/download/details.aspx?id=25150 +if %_unattended%==0 start https://www.microsoft.com/download/details.aspx?id=25150 goto dk_done ) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 48e93ac..07b7470 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -221,7 +221,7 @@ if %winbuild% LSS 7600 ( echo Install PowerShell using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 ) goto dk_done ) diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index b4effe7..2400e45 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -227,7 +227,7 @@ if %winbuild% LSS 7600 ( echo Install PowerShell using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 ) goto dk_done ) @@ -239,7 +239,7 @@ echo .NET 3.5 Framework is not installed in your system. echo Install it using the following URL. echo: echo https://www.microsoft.com/download/details.aspx?id=25150 -start https://www.microsoft.com/download/details.aspx?id=25150 +if %_unattended%==0 start https://www.microsoft.com/download/details.aspx?id=25150 goto dk_done ) ) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 469d01f..10030b1 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -151,7 +151,7 @@ if %winbuild% LSS 7600 ( echo Install PowerShell using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 ) goto done2 ) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 461e866..55a42ed 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -152,7 +152,7 @@ if %winbuild% LSS 7600 ( echo Install PowerShell using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 ) goto dk_done ) From 5872b7df53cb1d0e4316860897a0725695dc4864 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 29 Apr 2025 22:40:56 +0530 Subject: [PATCH 114/132] 3.1 Added Ohook support for OSPP based Office on Vista and later --- .gitattributes | 6 +- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 997 ++++++++++-------- .../Activators/HWID_Activation.cmd | 15 +- .../Activators/KMS38_Activation.cmd | 15 +- .../Activators/Ohook_Activation_AIO.cmd | 480 +++++++-- .../Activators/Online_KMS_Activation.cmd | 63 +- .../Activators/TSforge_Activation.cmd | 92 +- .../Change_Office_Edition.cmd | 2 +- .../Change_Windows_Edition.cmd | 2 +- .../Check_Activation_Status.cmd | 427 ++++---- .../Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- README.md | 45 +- 13 files changed, 1320 insertions(+), 828 deletions(-) diff --git a/.gitattributes b/.gitattributes index 8749e12..de5bd3d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -# MAS export-ignore -# LICENSE export-ignore -# README.md export-ignore +MAS export-ignore +LICENSE export-ignore +README.md export-ignore .gitattributes export-ignore diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index a67b39c..73ac408 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1,5 +1,5 @@ -@::63489fhty3-random -@set masver=3.0 +@::de62hd8-random +@set masver=3.1 @setlocal DisableDelayedExpansion @echo off @@ -386,8 +386,7 @@ if not defined terminal mode 76, 34 if %winbuild% GEQ 10240 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" set _hwidgo=1 if %winbuild% GTR 14393 if exist "%SysPath%\spp\tokens\skus\EnterpriseSN\" set _hwidgo= if not defined _hwidgo set _tsforgego=1 -if %winbuild% GEQ 9200 set _ohookgo=1 -if %winbuild% LSS 9200 set _okmsgo=1 +set _ohookgo=1 echo: echo: @@ -413,11 +412,7 @@ call :dk_color3 %_White% " [3] " %_Green% "TSforge" %_White% " echo: [3] TSforge - Windows / Office / ESU ) echo: [4] KMS38 - Windows -if defined _okmsgo ( -call :dk_color3 %_White% " [5] " %_Green% "Online KMS" %_White% " - Windows / Office" -) else ( echo: [5] Online KMS - Windows / Office -) echo: __________________________________________________ echo: echo: [6] Check Activation Status @@ -827,6 +822,7 @@ call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] detected. Script w echo: ) +set generickey=1 call :dk_inskey "[%key%]" ::======================================================================================================================================== @@ -1246,11 +1242,12 @@ set keyerror=%errorlevel% cmd /c exit /b %keyerror% if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" +if defined generickey (set "keyecho=Installing Generic Product Key ") else (set "keyecho=Installing Product Key ") if %keyerror% EQU 0 ( if %sps%==SoftwareLicensingService call :dk_refresh -echo Installing Generic Product Key %~1 [Successful] +echo %keyecho% %~1 [Successful] ) else ( -call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +call :dk_color %Red% "%keyecho% %~1 [Failed] %keyerror%" if not defined error ( if defined altapplist call :dk_color %Red% "Activation ID not found for this key." call :dk_color %Blue% "%_fixmsg%" @@ -1259,6 +1256,7 @@ set showfix=1 set error=1 ) +set generickey= exit /b :: Activation command @@ -1402,7 +1400,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) @@ -1412,10 +1410,6 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) -if %winbuild% LSS 7600 ( -set "winos=!winos:VistaT=Vista!" -set "winos=!winos:Serverr=Server!" -) if not defined winsub exit /b @@ -2170,12 +2164,27 @@ for %%A in (%_act% %_rem%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== -if %winbuild% LSS 9200 ( -%eline% +if %winbuild% LSS 6001 ( +%nceline% echo Unsupported OS version detected [%winbuild%]. -echo Ohook Activation is supported only on Windows 8/10/11 and their server equivalents. +echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents. +if %winbuild% EQU 6000 ( echo: -call :dk_color %Blue% "Use Online KMS activation option instead." +echo Windows Vista RTM is not supported because Powershell cannot be installed. +echo Upgrade to Windows Vista SP1 or SP2. +) +goto dk_done +) + +if not exist %ps% ( +%nceline% +echo PowerShell is not installed in your system. +if %winbuild% LSS 7600 ( +echo Install PowerShell using the following URL. +echo: +echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +) goto dk_done ) @@ -2223,8 +2232,8 @@ goto :oh_menu cls if not defined terminal ( -mode 130, 32 -if exist "%SysPath%\spp\store_test\" mode 134, 32 +mode 140, 32 +if exist "%SysPath%\spp\store_test\" mode 140, 32 %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% ) title Ohook Activation %masver% @@ -2233,9 +2242,9 @@ echo: echo Initializing... call :dk_chkmal -if not exist %SysPath%\sppsvc.exe ( +if not exist %SysPath%\%_slexe% ( %eline% -echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo [%SysPath%\%_slexe%] file is missing, aborting... echo: call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." @@ -2267,7 +2276,7 @@ call :dk_showosinfo echo Initiating Diagnostic Tests... -set "_serv=sppsvc Winmgmt" +set "_serv=%_slser% Winmgmt" :: Software Protection :: Windows Management Instrumentation @@ -2276,9 +2285,10 @@ set notwinact=1 set ohookact=1 call :dk_errorcheck +call :oh_setspp + :: Check unsupported office versions -set o14msi= set o14c2r= set o16uwp= @@ -2293,10 +2303,10 @@ if %winbuild% GEQ 10240 ( for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty InstallLocation)" %nul6%') do (if exist "%%a\Integration\Integrator.exe" set o16uwp=Office UWP ) ) -if not "%o14msi%%o14c2r%%o16uwp%"=="" ( +if not "%o14c2r%%o16uwp%"=="" ( echo: -call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%%o16uwp%]" -if not "%o14msi%%o16uwp%"=="" call :dk_color %Blue% "Use Online KMS option to activate it." +call :dk_color %Red% "Checking Unsupported Office Install [ %o14c2r%%o16uwp%]" +if not "%o16uwp%"=="" call :dk_color %Blue% "Use TSforge option to activate it." ) if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( @@ -2327,10 +2337,10 @@ set o15c2r= set error=1 ) -if "%o16c2r%%o15c2r%%o16msi%%o15msi%"=="" ( +if "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="" ( set error=1 echo: -if not "%o14msi%%o14c2r%%o16uwp%"=="" ( +if not "%o14c2r%%o16uwp%"=="" ( call :dk_color %Red% "Checking Supported Office Install [Not Found]" ) else ( call :dk_color %Red% "Checking Installed Office [Not Found]" @@ -2349,8 +2359,8 @@ goto dk_done ) set multioffice= -if not "%o16c2r%%o15c2r%%o16msi%%o15msi%"=="1" set multioffice=1 -if not "%o14msi%%o14c2r%%o16uwp%"=="" set multioffice=1 +if not "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="1" set multioffice=1 +if not "%o14c2r%%o16uwp%"=="" set multioffice=1 if defined multioffice ( call :dk_color %Gray% "Checking Multiple Office Install [Found, its recommended to install only one version]" @@ -2394,12 +2404,8 @@ set "_oIntegrator=%_oRoot%\integration\integrator.exe" if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") -if not "%osarch%"=="x86" ( -if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) + +call :oh_ppcpath echo: echo Activating Office... [C2R ^| %_version% ^| %_oArch%] @@ -2410,9 +2416,20 @@ set error=1 goto :starto16c2r ) +if defined noOsppc ( +call :dk_color %Red% "Checking OSPPC.DLL [Not found. Aborting activation...]" +call :dk_color %Blue% "%_fixmsg%" +set error=1 +goto :starto16c2r +) + call :oh_fixprids call :oh_process +if defined isOspp ( +call :oh_hookinstall_ospp +) else ( call :oh_hookinstall +) ::======================================================================================================================================== @@ -2444,12 +2461,8 @@ set "_oIntegrator=%_oRoot%\integration\integrator.exe" if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") -if not "%osarch%"=="x86" ( -if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) + +call :oh_ppcpath echo: echo Activating Office... [C2R ^| %_version% %_AudienceData%^| %_oArch%] @@ -2460,9 +2473,20 @@ set error=1 goto :startmsi ) +if defined noOsppc ( +call :dk_color %Red% "Checking OSPPC.DLL [Not found. Aborting activation...]" +call :dk_color %Blue% "%_fixmsg%" +set error=1 +goto :startmsi +) + call :oh_fixprids call :oh_process +if defined isOspp ( +call :oh_hookinstall_ospp +) else ( call :oh_hookinstall +) ::======================================================================================================================================== @@ -2499,6 +2523,9 @@ echo Adding a Registry to Prevent Banner [Successful] :startmsi +if defined o14msi call :oh_setspp 14 +if defined o14msi call :oh_processmsi 14 %o14msi_reg% +call :oh_setspp if defined o15msi call :oh_processmsi 15 %o15msi_reg% if defined o16msi call :oh_processmsi 16 %o16msi_reg% @@ -2530,7 +2557,7 @@ goto :dk_done :oh_uninstall cls -if not defined terminal mode 99, 32 +if not defined terminal mode 145, 32 title Uninstall Ohook Activation %masver% set _present= @@ -2546,6 +2573,7 @@ if defined o16c2r_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg if defined o15c2r_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_15CHook=%%b\root\vfs")) if defined o16msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o16msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_16MHook=%%b")) if defined o15msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o15msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_15MHook=%%b")) +if defined o14msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o14msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_14MHook=%%b")) if defined _16CHook (if exist "%_16CHook%\System\sppc*dll" (set _present=1& del /s /f /q "%_16CHook%\System\sppc*dll" & if exist "%_16CHook%\System\sppc*dll" set _unerror=1)) if defined _16CHook (if exist "%_16CHook%\SystemX86\sppc*dll" (set _present=1& del /s /f /q "%_16CHook%\SystemX86\sppc*dll" & if exist "%_16CHook%\SystemX86\sppc*dll" set _unerror=1)) @@ -2553,8 +2581,9 @@ if defined _15CHook (if exist "%_15CHook%\System\sppc*dll" (set _present=1& d if defined _15CHook (if exist "%_15CHook%\SystemX86\sppc*dll" (set _present=1& del /s /f /q "%_15CHook%\SystemX86\sppc*dll" & if exist "%_15CHook%\SystemX86\sppc*dll" set _unerror=1)) if defined _16MHook (if exist "%_16MHook%sppc*dll" (set _present=1& del /s /f /q "%_16MHook%sppc*dll" & if exist "%_16MHook%sppc*dll" set _unerror=1)) if defined _15MHook (if exist "%_15MHook%sppc*dll" (set _present=1& del /s /f /q "%_15MHook%sppc*dll" & if exist "%_15MHook%sppc*dll" set _unerror=1)) +if defined _14MHook (if exist "%_14MHook%sppc*dll" (set _present=1& del /s /f /q "%_14MHook%sppc*dll" & if exist "%_14MHook%sppc*dll" set _unerror=1)) -for %%# in (15 16) do ( +for %%# in (14 15 16) do ( for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do ( if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" (set _present=1& del /s /f /q "%%~A\Microsoft Office\Office%%#\sppc*dll" & if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" set _unerror=1) ) @@ -2568,6 +2597,31 @@ if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" (set _present=1& del /s /f ) ) +::================================== + +for %%# in (OSPPC.DLL sppcs.dll) do ( +for %%A in ("%CommonProgramFiles%" "%CommonProgramW6432%" "%CommonProgramFiles(x86)%") do ( +for %%G in ("%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\%%#") do ( +set size=0 +set size=%%~zG +if !size! GEQ 1 if !size! LSS 100000 ( +set _present=1 +del /f /q "%%~G" +if exist "%%~G" (move /y "%%~G" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%%~G" (set _unerror=1) else (echo Deleted file - %%~G) +) +if /i sppcs.dll==%%# if !size! GEQ 100000 ( +move /y "%%~G" "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL" %nul% +if exist "%%~G" (move /y "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL" "!_ttemp!\needsToBeDeleted%random%" %nul%) +move /y "%%~G" "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL" %nul% +if exist "%%~G" (set _unerror=1&echo Failed to rename sppcs.dll back to "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL") else (echo Renamed sppcs.dll back to "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL") +) +) +) +) + +::================================== + reg query HKCU\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && ( echo: echo Deleting - Registry keys for skipping license check @@ -2597,6 +2651,8 @@ reg unload HKU\%%# %nul% ) ) +::================================== + set "kmskey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" reg query "%kmskey%" %nul% && ( echo: @@ -2643,6 +2699,7 @@ set _oLPath= set _hookPath= set _hook= set _sppcPath= +set _osppPath= set _actid= set _prod= set _lic= @@ -2661,6 +2718,7 @@ set o16c2r= set o15c2r= set o16msi= set o15msi= +set o14msi= set _68=HKLM\SOFTWARE\Microsoft\Office set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office @@ -2674,6 +2732,52 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v P for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) + +exit /b + +::======================================================================================================================================== + +:oh_ppcpath + +if not defined isOspp ( +if not "%osarch%"=="x86" ( +if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +) else ( +set "_sppcPath=%SystemRoot%\System32\sppc.dll" +) +) + +set noOsppc= +set _hook68= +set _hook86= +set _osppPath68= +set _osppPath86= + +if defined isOspp ( +if not "%osarch%"=="x86" ( +if /i "%_oArch%"=="x64" ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath68=%%b") +if not exist "!_osppPath68!OSPPC.DLL" set noOsppc=1 +) +if /i "%_oArch%"=="x86" ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath68=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath86=%%b") +if not exist "!_osppPath68!OSPPC.DLL" set noOsppc=1 +if not exist "!_osppPath86!OSPPC.DLL" set noOsppc=1 +) +) else ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath86=%%b") +if not exist "!_osppPath86!OSPPC.DLL" set noOsppc=1 +) +if "!_osppPath68:~-1!"=="\" set "_osppPath68=!_osppPath68:~0,-1!" +if "!_osppPath86:~-1!"=="\" set "_osppPath86=!_osppPath86:~0,-1!" +) + +if defined _osppPath68 set _hook68=sppc64.dll +if defined _osppPath86 set _hook86=sppc32.dll exit /b @@ -2769,15 +2873,24 @@ set hasherror= if %_hook%==sppc32.dll set offset=2564 if %_hook%==sppc64.dll set offset=3076 -del /s /q "%_hookPath%\sppcs.dll" %nul% -del /s /q "%_hookPath%\sppc.dll" %nul% +::====================================== -if exist "%_hookPath%\sppcs.dll" set "ierror=Remove Previous Ohook Install" -if exist "%_hookPath%\sppc.dll" set "ierror=Remove Previous Ohook Install" +:: Remove previous Install + +for %%# in (sppcs.dll sppc.dll) do ( +del /f /q "%_hookPath%\%%#" %nul% +if exist "%_hookPath%\%%#" (move /y "%_hookPath%\%%#" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%_hookPath%\%%#" (set "ierror=Remove Previous Ohook Install [%%#]") +) + +if defined ierror goto :oh_hookinstall_error + +::====================================== mklink "%_hookPath%\sppcs.dll" "%_sppcPath%" %nul% -if not %errorlevel%==0 ( -if not defined ierror set ierror=mklink +if not exist "%_hookPath%\sppcs.dll" ( +set ierror=mklink sppcs.dll +goto :oh_hookinstall_error ) set exhook= @@ -2792,17 +2905,122 @@ popd call :oh_extractdll "%_hookPath%\sppc.dll" "%offset%" ) ) -if not exist "%_hookPath%\sppc.dll" (if not defined ierror set ierror=Copy) +if not exist "%_hookPath%\sppc.dll" ( +set ierror=Copy +goto :oh_hookinstall_error +) echo: -if not defined ierror ( -echo Symlinking System's sppc.dll to ["%_hookPath%\sppcs.dll"] [Successful] +echo Symlinking System's sppc.dll ["%_hookPath%\sppcs.dll"] [Successful] if defined exhook ( echo Copying Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] ) else ( echo Extracting Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] ) + +goto :oh_hookinstall_error + +::======================================================================================================================================== + +:oh_hookinstall_ospp + +set ierror= +set hasherror= + +if defined _hook86 set offset86=2564 +if defined _hook68 set offset68=3076 + +::====================================== + +:: Remove previous Install + +for %%# in (OSPPC.DLL sppcs.dll) do ( +for %%A in ("%_osppPath68%\%%#" "%_osppPath86%\%%#") do ( +set size=0 +set size=%%~zA +if !size! GEQ 1 if !size! LSS 100000 ( +del /f /q "%%~A" %nul% +if exist "%%~A" (move /y "%%~A" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%%~A" (set "ierror=Remove Previous Ohook Install [%%#]") +) +) +) + +if defined ierror goto :oh_hookinstall_error + +for %%A in ("%_osppPath68%" "%_osppPath86%") do ( +if exist "%%~A\sppcs.dll" (move /y "%%~A\sppcs.dll" "%%~A\OSPPC.DLL" %nul%) +if exist "%%~A\sppcs.dll" ( +move /y "%%~A\OSPPC.DLL" "!_ttemp!\needsToBeDeleted%random%" %nul% +move /y "%%~A\sppcs.dll" "%%~A\OSPPC.DLL" %nul% +) +if exist "%%~A\sppcs.dll" (set "ierror=Move sppcs.dll back to OSPPC.DLL") +) + +del /f /q "%_hookPath%\sppcs.dll" %nul% +if exist "%_hookPath%\sppcs.dll" (move /y "%_hookPath%\sppcs.dll" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%_hookPath%\sppcs.dll" (set "ierror=Remove Previous Ohook mklink sppcs.dll") + +if defined ierror goto :oh_hookinstall_error + +::====================================== + +if defined _osppPath68 (move /y "%_osppPath68%\OSPPC.DLL" "%_osppPath68%\sppcs.dll" %nul% & if not exist "%_osppPath68%\sppcs.dll" set ierror=1) +if defined _osppPath86 (move /y "%_osppPath86%\OSPPC.DLL" "%_osppPath86%\sppcs.dll" %nul% & if not exist "%_osppPath86%\sppcs.dll" set ierror=1) + +if defined ierror ( +set "ierror=Rename OSPPC.DLL" +goto :oh_hookinstall_error +) + +if defined _osppPath68 if defined _osppPath86 (mklink "%_hookPath%\sppcs.dll" "%_osppPath86%\sppcs.dll" %nul%) +if defined _osppPath68 if not defined _osppPath86 (mklink "%_hookPath%\sppcs.dll" "%_osppPath68%\sppcs.dll" %nul%) +if defined _osppPath86 if not defined _osppPath68 (mklink "%_hookPath%\sppcs.dll" "%_osppPath86%\sppcs.dll" %nul%) + +if not exist "%_hookPath%\sppcs.dll" ( +set ierror=mklink sppcs.dll +goto :oh_hookinstall_error +) + +set exhook= +if exist "!_work!\BIN\%_hook68%" if exist "!_work!\BIN\%_hook86%" set exhook=1 + +if defined exhook ( +pushd "!_work!\BIN\" +if defined _osppPath68 (copy /y /b "%_hook68%" "%_osppPath68%\OSPPC.DLL" %nul%) +if defined _osppPath86 (copy /y /b "%_hook86%" "%_osppPath86%\OSPPC.DLL" %nul%) +popd ) else ( +if defined _osppPath68 (set _hook=%_hook68%&call :oh_extractdll "%_osppPath68%\OSPPC.DLL" "%offset68%") +if defined _osppPath86 (set _hook=%_hook86%&call :oh_extractdll "%_osppPath86%\OSPPC.DLL" "%offset86%") +) + +if defined _osppPath68 (if not exist "%_osppPath68%\OSPPC.DLL" set ierror=1) +if defined _osppPath86 (if not exist "%_osppPath86%\OSPPC.DLL" set ierror=1) + +if defined ierror ( +set ierror=Copy +goto :oh_hookinstall_error +) + +echo: +if defined _osppPath68 (echo Renaming OSPPC.DLL to sppcs.dll ["%_osppPath68%\sppcs.dll"]) +if defined _osppPath86 (echo Renaming OSPPC.DLL to sppcs.dll ["%_osppPath86%\sppcs.dll"]) +if defined exhook ( +if defined _osppPath68 (echo Copying Custom %_hook68% to ["%_osppPath68%\OSPPC.DLL"]) +if defined _osppPath86 (echo Copying Custom %_hook86% to ["%_osppPath86%\OSPPC.DLL"]) +) else ( +if defined _osppPath68 (echo Extracting Custom %_hook68% to ["%_osppPath68%\OSPPC.DLL"]) +if defined _osppPath86 (echo Extracting Custom %_hook86% to ["%_osppPath86%\OSPPC.DLL"]) +) + +echo Symlinking Renamed sppcs.dll ["%_hookPath%\sppcs.dll"] + +::======================================================================================================================================== + +:oh_hookinstall_error + +if defined ierror ( set error=1 call :dk_color %Red% "Installing Ohook [Failed to %ierror%]" echo: @@ -2821,9 +3039,9 @@ if not defined exhook if not defined ierror ( if defined hasherror ( set error=1 set ierror=1 -call :dk_color %Red% "Modifying Hash of Custom %_hook% [Failed]" +call :dk_color %Red% "Modifying Hash of Custom sppcs.dll [Failed]" ) else ( -echo Modifying Hash of Custom %_hook% [Successful] +echo Modifying Hash of Custom sppcs.dll [Successful] ) ) @@ -2831,6 +3049,26 @@ exit /b ::======================================================================================================================================== +:oh_setspp + +set isOspp= +if %winbuild% GEQ 9200 ( +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService +) else ( +set isOspp=1 +set spp=OfficeSoftwareProtectionProduct +set sps=OfficeSoftwareProtectionService +) +if "%1"=="14" ( +set isOspp=1 +set spp=OfficeSoftwareProtectionProduct +set sps=OfficeSoftwareProtectionService +) +exit /b + +::======================================================================================================================================== + :oh_process for %%# in (%_oIds%) do ( @@ -2850,10 +3088,11 @@ call :ohookdata getinfo !_prod! if not "!key!"=="" ( echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic +if not %oVer%==14 set generickey=1 call :dk_inskey "[!key!] [!_prod!] [!_lic!]" ) else ( set error=1 -call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! not found in script]" +call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! key not found in script]" call :dk_color %Blue% "Make sure you are using the latest version of MAS." set fixes=%fixes% %mas% call :dk_color %_Yellow% "%mas%" @@ -2880,7 +3119,11 @@ exit /b :: Process Office MSI Version call :oh_reset +if "%1"=="14" ( +call :dk_actids 59a52881-a989-479d-af46-f275c6370663 +) else ( call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +) set oVer=%1 for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\InstallRoot /v Path" %nul6%') do (set "_oRoot=%%b") @@ -2893,16 +3136,8 @@ if "%osarch%"=="x86" set _oArch=x86 if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") -if not "%osarch%"=="x86" ( -if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) -set "_common=%CommonProgramFiles%" -if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" -set "_common2=%CommonProgramFiles(x86)%" +call :oh_ppcpath call :msiofficedata %2 @@ -2915,8 +3150,23 @@ call :dk_color %Red% "Checking Installed Products [Product IDs not f exit /b ) +if defined noOsppc ( +call :dk_color %Red% "Checking OSPPC.DLL [Not found. Aborting activation...]" +call :dk_color %Blue% "%_fixmsg%" +set error=1 +exit /b +) + +if %oVer%==14 if defined SingleImage ( +echo Checking Installed Products [SingleImage product found, Professional Retail key will be used for activation] +) + call :oh_process +if defined isOspp ( +call :oh_hookinstall_ospp +) else ( call :oh_hookinstall +) exit /b @@ -3154,15 +3404,69 @@ exit /b :: 1st column = Office version number :: 2nd column = Activation ID -:: 3rd column = Generic key. Preference is given in this order, Retail:TB:Sub > Retail > OEM:NONSLP > Volume:MAK > Volume:GVLK +:: 3rd column = For Office 2013 and later, the generated keys are listed. For Office 2010, the blocked keys sourced from the Internet are listed. +:: For Office 2013 and later, key preference is given in this order, Retail:TB:Sub > Retail > OEM:NONSLP > Volume:MAK > Volume:GVLK +:: For Office 2010, key preference is given in this order, Retail > Volume:MAK :: 4th column = Last part of license description :: 5th column = Edition +:: 6th column = Other Edition IDs if they are part of the same primary product (For reference only) :: Separator = "_" +::=============== + +:: We couldn't find any keys (blocked/generic doesn't matter) for these Office 2010 products. If you have them, please share with us. + +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_Retail________ExcelR_[HSExcelR] +14_7004b7f0-6407-4f45-8eac-966e5f868bde_Retail________GrooveR +14_fbf4ac36-31c8-4340-8666-79873129cf40_Retail________OutlookR +14_133c8359-4e93-4241-8118-30bb18737ea0_Retail________PowerPointR_[HSPowerPointR] +14_98677603-a668-4fa4-9980-3f1f05f78f69_Retail________PublisherR +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_Retail________WordR_[HSWordR] +14_dbe3aee0-5183-4ff7-8142-66050173cb01_Retail________SmallBusBasicsR_[SmallBusBasicsMSDNR] + +:: These installers are not publicly available, so it doesn't matter if we don't have their keys. + +14_19316117-30a8-4773-8fd9-7f7231f4e060_SubPrepid_____HomeBusinessSubR +14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_SubPrepid_____ProjectProSubR +14_e98ef0c0-71c4-42ce-8305-287d8721e26c_SubPrepid_____ProPlusSubR +14_14f5946a-debc-4716-babc-7e2c240fec08_Retail________MondoR +14_533b656a-4425-480b-8e30-1a2358898350_MAK___________MondoVL + :ohookdata set f= for %%# in ( +:: Office 2010 +14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_7KTYC-XR43P-C3MRW-BJKFD-XB%f%YPG_Retail________AccessR +14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_7XHPQ-BQMYG-YBP49-CY8B2-T8%f%CGQ_ByPass________AccessRuntimeR +14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_89RTQ-MT4GK-6CPTX-WWP7C-J9%f%KXR_MAK___________AccessVL +14_71dc86ff-f056-40d0-8ffb-9592705c9b76_39TRR-C2F37-9WYJ2-MJQXH-B9%f%38K_MAK___________ExcelVL +14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_RCGT3-FPQDV-H49CD-PPDBF-TH%f%47G_MAK___________GrooveVL +14_7b7d1f17-fdcb-4820-9789-9bec6e377821_3YR9B-D9W79-BY66R-R8XYP-QY%f%YYY_Retail________HomeBusinessR_[HomeBusinessDemoR] +14_09e2d37e-474b-4121-8626-58ad9be5776f_3X43R-HHHXX-FRHRW-2M2WJ-8V%f%PHD_Retail________HomeStudentR_[HomeStudentDemoR] +14_ef1da464-01c8-43a6-91af-e4e5713744f9_XDGJY-KFHW9-JWX9X-YM4GW-GC%f%8WR_Retail________InfoPathR +14_85e22450-b741-430c-a172-a37962c938af_6GKT2-KMJPK-4RRBF-8VQKB-JB%f%6G6_MAK___________InfoPathVL +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_2TG3P-9DB76-4YT99-8RXGD-CW%f%XBP_Retail________OneNoteR_[HSOneNoteR] +14_6860b31f-6a67-48b8-84b9-e312b3485c4b_CV64P-F4VRH-BJ33D-PH6MR-X6%f%9RY_MAK___________OneNoteVL +14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_J8C9M-YXMH2-9CX44-2C3YG-V7%f%692_MAK___________OutlookVL +14_acb51361-c0db-4895-9497-1831c41f31a6_GMBWM-WVX26-7WHV4-DB43D-WV%f%DY2_Retail________PersonalR_[PersonalDemoR,PersonalPrepaidR] +14_38252940-718c-4aa6-81a4-135398e53851_HPBQP-RJHDR-Q3472-PT9Q6-PB%f%B72_MAK___________PowerPointVL +14_8b559c37-0117-413e-921b-b853aeb6e210_367X9-9HP9R-TKHY6-DH4QH-K9%f%PY7_Retail________ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR,OEM-SingleImage] +14_725714d7-d58f-4d12-9fa8-35873c6f7215_6JD4G-KRW3J-48MGV-DM6FC-T9%f%WKR_Retail________ProjectProR_[ProjectProMSDNR] +14_1cf57a59-c532-4e56-9a7d-ffa2fe94b474_3XDTH-MMGJ6-F9MKX-THP8D-G9%f%BP7_MAK___________ProjectProVL +14_688f6589-2bd9-424e-a152-b13f36aa6de1_2W96V-RTQ9R-2BPVT-PT8H9-MV%f%68T_Retail________ProjectStdR +14_11b39439-6b93-4642-9570-f2eb81be2238_4DTT4-D4MKX-23KFH-JKR6T-YK%f%G2J_MAK___________ProjectStdVL +14_71af7e84-93e6-4363-9b69-699e04e74071_2J9H6-H4D3G-PCXD2-96XVM-TR%f%R73_Retail________ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] +14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_6CD6C-9R8PB-T2D9Y-8RKKX-W7%f%DFK_MAK___________ProPlusVL_[ProPlusAcadVL] +14_3d014759-b128-4466-9018-e80f6320d9d0_32YG9-3VX77-YXJVV-PRVFW-TT%f%8BV_MAK___________PublisherVL +14_8090771e-d41a-4482-929e-de87f1f47e46_7VKXH-9BWCG-RPTBB-JBRV3-GR%f%HYC_MAK___________SmallBusBasicsVL +14_b78df69e-0966-40b1-ae85-30a5134dedd0_H48K6-FB4Y6-P83GH-9J7XG-HD%f%KKX_ByPass________SPDR +14_b6d2565c-341d-4768-ad7d-addbe00bb5ce_W3BTX-H6BW7-Q6DFW-BXFFY-8R%f%VJP_Retail________StandardR_[StandardMSDNR][KeyisforMSDNR] +14_1f76e346-e0be-49bc-9954-70ec53a4fcfe_2XTQP-GDR7C-GTXPC-6W6PV-4R%f%XGC_MAK___________StandardVL_[StandardAcadVL] +14_2745e581-565a-4670-ae90-6bf7c57ffe43_VXHHB-W7HBD-7M342-RJ7P8-CH%f%BD6_ByPass________StarterR +14_66cad568-c2dc-459d-93ec-2f3cb967ee34_2RDPT-WPYQM-C2WXF-BTPDW-2J%f%2HM_Retail________VisioSIR_Prem[Pro,Std] +14_36756cb8-8e69-4d11-9522-68899507cd6a_7PKFT-X2MKQ-GT6X2-8CB2W-CH%f%C9K_MAK___________VisioSIVL_Prem[Pro,Std] +14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_6J3XK-DFKGK-X373V-QJHYM-V3%f%FC2_MAK___________WordVL :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_B7RFY-7NXPK-Q4342-Y9X2H-3J%f%X4X_Retail________AccessRetail 15_259de5be-492b-44b3-9d78-9645f848f7b0_X3XNB-HJB7K-66THH-8DWQ3-XH%f%GJP_Bypass________AccessRuntimeRetail @@ -3397,7 +3701,7 @@ exit /b :oh_extractdll set b= -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':%_hook%\:.*';$encoded = ($f[1]) -replace '-', 'A' -replace '_', 'a';$bytes = [Con%b%vert]::FromBas%b%e64String($encoded); $PePath='%1'; $offset='%2'; $m=[io.file]::ReadAllText('!_batp!') -split ':hexedit\:.*';iex ($m[1]);" %nul2% | find /i "Error found" %nul1% && set hasherror=1 +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':%_hook%\:.*';$encoded = ($f[1]) -replace '-', 'A' -replace '_', 'a';$bytes = [Con%b%vert]::FromBas%b%e64String($encoded); $PePath='%1'; $offset='%2'; $m=[io.file]::ReadAllText('!_batp!') -split ':hexedit\:.*';iex ($m[1])" %nul2% | find /i "Error found" %nul1% && set hasherror=1 exit /b :hexedit: @@ -3436,7 +3740,7 @@ $Writer.Write($unixTimestamp) $Writer.Flush() # Write the current state of the MemoryStream to a temporary file -$tempFilePath = [System.IO.Path]::Combine($env:windir, "Temp", [System.IO.Path]::GetRandomFileName()) +$tempFilePath = "$env:windir\Temp\$([System.IO.Path]::GetRandomFileName())" [System.IO.File]::WriteAllBytes($tempFilePath, $MemoryStream.ToArray()) # Update hash using the temporary file @@ -3693,8 +3997,6 @@ set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% -if defined _args set _args=%_args:re1=% -if defined _args set _args=%_args:re2=% if defined _args for %%A in (%_args%) do ( if /i "%%A"=="-el" (set _elev=1) if /i "%%A"=="/Z-Windows" (set _actwin=1) @@ -3739,9 +4041,9 @@ echo: echo ______________________________________________________________ echo: echo [1] Activate - Windows -echo [2] Activate - Windows [ESU] -echo [3] Activate - Office [All] -echo [4] Activate - Office [Project/Visio] +echo [2] Activate - ESU +echo [3] Activate - Office [All] +echo [4] Activate - Office [Project/Visio] echo [5] Activate - All echo _______________________________________________ echo: @@ -3872,13 +4174,6 @@ set "_serv=%_slser% Winmgmt" call :dk_errorcheck -if defined error ( -call :dk_color %Red% "Some errors were detected. Aborting the operation..." -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" -goto :dk_done -) - call :ts_getedition if not defined tsedition ( call :dk_color %Red% "Checking Windows Edition ID [Not found in installed licenses, aborting...]" @@ -4012,7 +4307,8 @@ goto :ts_esu echo Checking Activation ID [%tempid%] [%tsedition%] -call :ts_inskey "[%key%]" +set generickey=1 +call :dk_inskey "[%key%]" if not defined error set tsids=%tsids% %tempid% goto :ts_esu @@ -4134,7 +4430,8 @@ goto :ts_esu echo Resetting Rearm / GracePeriod [Successful] ) -call :ts_inskey "[%key%]" +set generickey=1 +call :dk_inskey "[%key%]" ::======================================================================================================================================== @@ -4207,7 +4504,7 @@ set esuexistbutnosup=1 if defined esuexistsup if defined _vis ( set key=9FPV7-MWGT8-7XPDF-JC23W-WT7TW REM This is a non-generic blocked MAK key for Server-ESU-PA -call :ts_inskey "[!key!]" +call :dk_inskey "[!key!]" goto :ts_off ) @@ -4256,7 +4553,7 @@ if not %_actoff%==1 goto :ts_act if %winbuild% LSS 9200 ( echo: call :dk_color %Gray% "Checking Supported Office [TSforge for Office is supported on Windows 8 and later versions]" -call :dk_color %Blue% "On Windows Vista / 7, use Online %KS% activation option for Office instead." +call :dk_color %Blue% "On Windows Vista / 7, use Ohook activation option for Office instead." goto :ts_act ) @@ -4297,6 +4594,7 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v P if not "%o14msi%%o14c2r%"=="" ( echo: call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%]" +if defined o14msi call :dk_color %Blue% "Use Ohook activation option for Office 2010." ) if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( @@ -4617,7 +4915,7 @@ call :dk_color %Blue% "Business, BusinessN, Enterprise, EnterpriseN, and Server goto :ts_act ) -call :ts_inskey "[%key%]" +call :dk_inskey "[%key%]" if not defined error set tsids=%tsids% %tempid% goto :ts_act @@ -5146,27 +5444,6 @@ exit /b %psc% "Get-WmiObject -Query 'SELECT Name, Description FROM SoftwareLicensingProduct WHERE LicenseStatus=''1'' AND GracePeriodRemaining=''0'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn IS NULL' | Where-Object { $_.Description -notmatch 'KMS' } | Select-Object -Property Name" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= exit /b -:: Install Key - -:ts_inskey - -if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% -if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% -set keyerror=%errorlevel% -cmd /c exit /b %keyerror% -if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" - -if %keyerror% EQU 0 ( -if %sps%==SoftwareLicensingService call :dk_refresh -echo Installing Product Key %~1 [Successful] -) else ( -set error=1 -call :dk_color %Red% "Installing Product Key %~1 [Failed] %keyerror%" -call :dk_color %Blue% "%_fixmsg%" -) - -exit /b - ::======================================================================================================================================== :tsforge: @@ -10651,7 +10928,7 @@ echo: echo [0] %_exitmsg% echo: ______________________________________________________ echo: -call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,0]" +call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,0]" choice /C:120 /N set _el=!errorlevel! if !_el!==3 exit /b @@ -10882,6 +11159,7 @@ call echo Checking Installed Product Key [Partial Key - %%_partial%%] [ ) if defined key ( +set generickey=1 call :dk_inskey "[%key%]" ) @@ -11700,6 +11978,7 @@ call echo Checking Installed Product Key [Partial Key - %%_partial%%] [ ) if defined key ( +set generickey=1 call :dk_inskey "[%key%]" ) @@ -11709,7 +11988,7 @@ call :dk_inskey "[%key%]" if not %_actoff%==1 goto :ks_activate -call :ks_setspp +call :oh_setspp :: Check ohook install @@ -11754,7 +12033,7 @@ set ohub=1 :: Check supported office versions -call :ks_getpath +call :oh_getpath set o16uwp= set o16uwp_path= @@ -11933,9 +12212,9 @@ call :ks_process :ks_startmsi -if defined o14msi call :ks_setspp 14 +if defined o14msi call :oh_setspp 14 if defined o14msi call :ks_processmsi 14 %o14msi_reg% -call :ks_setspp +call :oh_setspp if defined o15msi call :ks_processmsi 15 %o15msi_reg% if defined o16msi call :ks_processmsi 16 %o16msi_reg% @@ -12079,33 +12358,6 @@ exit /b ::======================================================================================================================================== -:ks_getpath - -set o16c2r= -set o15c2r= -set o16msi= -set o15msi= -set o14msi= - -set _68=HKLM\SOFTWARE\Microsoft\Office -set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office - -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_86%\ClickToRun) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_68%\ClickToRun) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_86%\15.0\ClickToRun) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_68%\15.0\ClickToRun) - -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) - -exit /b - -::======================================================================================================================================== - :: After retail to volume conversion, new product ID needs .OSPPReady key in registry, otherwise product info may not fully reflect :ks_osppready @@ -12134,16 +12386,19 @@ exit /b ::======================================================================================================================================== -:ks_setspp +:oh_setspp +set isOspp= if %winbuild% GEQ 9200 ( set spp=SoftwareLicensingProduct set sps=SoftwareLicensingService ) else ( +set isOspp=1 set spp=OfficeSoftwareProtectionProduct set sps=OfficeSoftwareProtectionService ) if "%1"=="14" ( +set isOspp=1 set spp=OfficeSoftwareProtectionProduct set sps=OfficeSoftwareProtectionService ) @@ -12203,6 +12458,7 @@ call :ks_osppready if not "!key!"=="" ( echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic +set generickey=1 call :dk_inskey "[!key!] [!_prod!]" ) else ( if not defined _oMSI ( @@ -12211,7 +12467,7 @@ call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 ! call :dk_color %Blue% "Make sure you are using Latest MAS script." ) else ( call :dk_color %Red% "Checking Product In Script [!_prod! MSI Retail is not supported]" -call :dk_color %Blue% "Uninstall this and Install C2R or MSI VL version of Office." +call :dk_color %Blue% "Use Ohook option to activate it." ) set fixes=%fixes% %mas%genuine-installation-media call :dk_color %_Yellow% "%mas%genuine-installation-media" @@ -12245,10 +12501,6 @@ echo "%2" | find /i "Wow6432Node" %nul1% && set _oArch=x86 if not "%osarch%"=="x86" if not defined _oArch set _oArch=x64 if "%osarch%"=="x86" set _oArch=x86 -set "_common=%CommonProgramFiles%" -if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" -set "_common2=%CommonProgramFiles(x86)%" - call :msiofficedata %2 echo: @@ -13228,47 +13480,30 @@ exit /b :: 5th column = Other Edition IDs if they are part of the same primary product (For reference only) :: Separator = "_" -:: EditionID Notes: -:: For Office 2013 and later, all Edition IDs are clearly defined, and each ID corresponds to its specific licensing. - -:: In Office 2010, the situation is a bit more complicated. -:: Products typically fall into two separate categories: Volume License (VL) and Non-VL. This is because a single installation cannot include both Retail and VL licensing types. -:: Some Edition IDs share the same primary product ID. For example, installing ProPlusVL also installs ProPlusAcadVL licenses, as both use 0011 as the primary product ID. -:: Therefore, in the script, we grouped VL and Non-VL versions by primary product ID and selected the highest Edition ID when multiple Edition IDs existed for the same primary product ID. - -:: There are a few exceptions to this 2010 rule: Visio (Premium, Pro, Standard) and OEM-SingleImage. - -:: For Visio, the issue is that branding.xml lists incorrect primary product IDs. The correct primary product ID for all three Visio variants is 0057. Based on the criteria above, we chose Visio-Premium as the representative Edition ID among the three. -:: For OEM-SingleImage, it installs multiple Edition IDs and uses 003D as the primary product ID. Following our method, we selected the highest available Edition ID—ProfessionalR in this case. - :msiofficedata for %%# in ( 14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_0015_AccessR 14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_001C_AccessRuntimeR 14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_0015_AccessVL -14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR_[HSExcelR] 14_71dc86ff-f056-40d0-8ffb-9592705c9b76_0016_ExcelVL 14_7004b7f0-6407-4f45-8eac-966e5f868bde_00BA_GrooveR 14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_00BA_GrooveVL 14_7b7d1f17-fdcb-4820-9789-9bec6e377821_0013_HomeBusinessR_[HomeBusinessDemoR] 14_19316117-30a8-4773-8fd9-7f7231f4e060_011E_HomeBusinessSubR 14_09e2d37e-474b-4121-8626-58ad9be5776f_002F_HomeStudentR_[HomeStudentDemoR] -14_c3ae020c-5a71-4cc5-a27a-2a97c2d46860_0029_HSExcelR -14_25fe4611-b44d-49cc-ae87-2143d299194e_00A3_HSOneNoteR -14_d652ad8d-da5c-4358-b928-7fb1b4de7a7c_0037_HSPowerPointR -14_a963d7ae-7a88-41a7-94da-8bb5635a8af9_002B_HSWordR 14_ef1da464-01c8-43a6-91af-e4e5713744f9_0044_InfoPathR 14_85e22450-b741-430c-a172-a37962c938af_0044_InfoPathVL 14_14f5946a-debc-4716-babc-7e2c240fec08_000F_MondoR 14_533b656a-4425-480b-8e30-1a2358898350_000F_MondoVL 14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_003D_ProfessionalR_[OEM-SingleImage]Exception -14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR_[HSOneNoteR] 14_6860b31f-6a67-48b8-84b9-e312b3485c4b_00A1_OneNoteVL 14_fbf4ac36-31c8-4340-8666-79873129cf40_001A_OutlookR 14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_001A_OutlookVL 14_acb51361-c0db-4895-9497-1831c41f31a6_0033_PersonalR_[PersonalDemoR,PersonalPrepaidR] -14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR +14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR_[HSPowerPointR] 14_38252940-718c-4aa6-81a4-135398e53851_0018_PowerPointVL 14_8b559c37-0117-413e-921b-b853aeb6e210_0014_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR] 14_725714d7-d58f-4d12-9fa8-35873c6f7215_003B_ProjectProR_[ProjectProMSDNR] @@ -13289,7 +13524,7 @@ for %%# in ( 14_2745e581-565a-4670-ae90-6bf7c57ffe43_0066_StarterR 14_66cad568-c2dc-459d-93ec-2f3cb967ee34_0057_VisioSIR_Prem[Pro,Std]Exception 14_36756cb8-8e69-4d11-9522-68899507cd6a_0057_VisioSIVL_Prem[Pro,Std]Exception -14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR_[HSWordR] 14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_001B_WordVL :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail @@ -13407,6 +13642,7 @@ if "%oVer%"=="%%A" ( reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) +if /i 003D==%%C set SingleImage=1 ) ) ) @@ -13878,12 +14114,14 @@ function BoolToWStr($bVal) { } function InitializePInvoke($LaDll, $bOffice) { - $Marshal = [System.Runtime.InteropServices.Marshal] - $Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 'Run').DefineDynamicModule((Get-Random), $False) - $SLApp = $NT7 -Or $bOffice -Or ($LaDll -EQ 'sppc.dll' -And [Diagnostics.FileVersionInfo]::GetVersionInfo("$SysPath\sppc.dll").FilePrivatePart -GE 16501) - + $LaName = [IO.Path]::GetFileNameWithoutExtension($LaDll) + $SLApp = $NT7 -Or $bOffice -Or ($LaName -EQ 'sppc' -And [Diagnostics.FileVersionInfo]::GetVersionInfo("$SysPath\sppc.dll").FilePrivatePart -GE 16501) $Win32 = $null - $Class = $Module.DefineType((Get-Random), 'Public, Abstract, Sealed, BeforeFieldInit', [Object], 0) + + $Marshal = [System.Runtime.InteropServices.Marshal] + $Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly(($LaName+"_Assembly"), 'Run').DefineDynamicModule(($LaName+"_Module"), $False) + $Class = $Module.DefineType(($LaName+"_Methods"), 'Public, Abstract, Sealed, BeforeFieldInit', [Object], 0) + $Class.DefinePInvokeMethod('SLClose', $LaDll, 22, 1, [Int32], @([IntPtr]), 1, 3).SetImplementationFlags(128) $Class.DefinePInvokeMethod('SLOpen', $LaDll, 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) $Class.DefinePInvokeMethod('SLGenerateOfflineInstallationId', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) @@ -13932,10 +14170,51 @@ function SlGetInfoIID($SkuId) { return $null } + else + { + return $Marshal::PtrToStringUni($bData) + } +} - $rData = $Marshal::PtrToStringUni($bData) - $Marshal::FreeHGlobal($bData) - return $rData +function SlReturnData($hrRet, $tData, $cData, $bData) { + if ($hrRet -NE 0 -Or $cData -EQ 0) + { + return $null + } + if ($tData -EQ 1) + { + return $Marshal::PtrToStringUni($bData) + } + elseif ($tData -EQ 4) + { + return $Marshal::ReadInt32($bData) + } + elseif ($tData -EQ 3 -And $cData -EQ 8) + { + return $Marshal::ReadInt64($bData) + } + else + { + return $null + } +} + +function SlGetInfoPKey($PkeyId, $Value) +{ + $tData = 0 + $cData = 0 + $bData = 0 + + $hrRet = $Win32::SLGetPKeyInformation( + $hSLC, + [ref][Guid]$PkeyId, + $Value, + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + return SlReturnData $hrRet $tData $cData $bData } function SlGetInfoSku($SkuId, $Value) @@ -13944,7 +14223,7 @@ function SlGetInfoSku($SkuId, $Value) $cData = 0 $bData = 0 - $ret = $Win32::SLGetProductSkuInformation( + $hrRet = $Win32::SLGetProductSkuInformation( $hSLC, [ref][Guid]$SkuId, $Value, @@ -13953,70 +14232,7 @@ function SlGetInfoSku($SkuId, $Value) [ref]$bData ) - if ($ret -Or !$cData) - { - return $null - } - - if ($tData -EQ 1) - { - $rData = $Marshal::PtrToStringUni($bData) - } - elseif ($tData -EQ 4) - { - $rData = $Marshal::ReadInt32($bData) - } - elseif ($tData -EQ 3 -And $cData -EQ 8) - { - $rData = $Marshal::ReadInt64($bData) - } - else - { - $rData = $null - } - - $Marshal::FreeHGlobal($bData) - return $rData -} - -function SlGetInfoService($Value) -{ - $tData = 0 - $cData = 0 - $bData = 0 - - $ret = $Win32::SLGetServiceInformation( - $hSLC, - $Value, - [ref]$tData, - [ref]$cData, - [ref]$bData - ) - - if ($ret -Or !$cData) - { - return $null - } - - if ($tData -EQ 1) - { - $rData = $Marshal::PtrToStringUni($bData) - } - elseif ($tData -EQ 4) - { - $rData = $Marshal::ReadInt32($bData) - } - elseif ($tData -EQ 3 -And $cData -EQ 8) - { - $rData = $Marshal::ReadInt64($bData) - } - else - { - $rData = $null - } - - $Marshal::FreeHGlobal($bData) - return $rData + return SlReturnData $hrRet $tData $cData $bData } function SlGetInfoApp($AppId, $Value) @@ -14025,7 +14241,7 @@ function SlGetInfoApp($AppId, $Value) $cData = 0 $bData = 0 - $ret = $Win32::SLGetApplicationInformation( + $hrRet = $Win32::SLGetApplicationInformation( $hSLC, [ref][Guid]$AppId, $Value, @@ -14034,80 +14250,49 @@ function SlGetInfoApp($AppId, $Value) [ref]$bData ) - if ($ret -Or !$cData) - { - return $null - } + return SlReturnData $hrRet $tData $cData $bData +} - if ($tData -EQ 1) - { - $rData = $Marshal::PtrToStringUni($bData) - } - elseif ($tData -EQ 4) - { - $rData = $Marshal::ReadInt32($bData) - } - elseif ($tData -EQ 3 -And $cData -EQ 8) - { - $rData = $Marshal::ReadInt64($bData) - } - else - { - $rData = $null - } +function SlGetInfoService($Value) +{ + $tData = 0 + $cData = 0 + $bData = 0 - $Marshal::FreeHGlobal($bData) - return $rData + $hrRet = $Win32::SLGetServiceInformation( + $hSLC, + $Value, + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + return SlReturnData $hrRet $tData $cData $bData } function SlGetInfoSvcApp($strApp, $Value) { if ($SLApp) { - $rData = SlGetInfoApp $strApp $Value + return SlGetInfoApp $strApp $Value } else { - $rData = SlGetInfoService $Value + return SlGetInfoService $Value } - return $rData -} - -function SlGetInfoPKey($PkeyId, $Value) -{ - $cData = 0 - $bData = 0 - - $ret = $Win32::SLGetPKeyInformation( - $hSLC, - [ref][Guid]$PKeyId, - $Value, - [ref]$null, - [ref]$cData, - [ref]$bData - ) - - if ($ret -Or !$cData) - { - return $null - } - - $rData = $Marshal::PtrToStringUni($bData) - $Marshal::FreeHGlobal($bData) - return $rData } function SlGetInfoLicensing($AppId, $SkuId) { - $LicenseStatus = 0 - $GracePeriodRemaining = 0 + $dwStatus = 0 + $dwGrace = 0 $hrReason = 0 - $EvaluationEndDate = 0 + $qwValidity = 0 $cStatus = 0 $pStatus = 0 - $ret = $Win32::SLGetLicensingStatusInformation( + $hrRet = $Win32::SLGetLicensingStatusInformation( $hSLC, [ref][Guid]$AppId, [ref][Guid]$SkuId, @@ -14116,80 +14301,46 @@ function SlGetInfoLicensing($AppId, $SkuId) [ref]$pStatus ) - if ($ret -Or !$cStatus) + if ($hrRet -NE 0 -Or $cStatus -EQ 0) { return } [IntPtr]$ppStatus = [Int64]$pStatus + [Int64]40 * ($cStatus - 1) - $eStatus = $Marshal::ReadInt32($ppStatus, 16) - $GracePeriodRemaining = $Marshal::ReadInt32($ppStatus, 20) + $dwStatus = $Marshal::ReadInt32($ppStatus, 16) + $dwGrace = $Marshal::ReadInt32($ppStatus, 20) $hrReason = $Marshal::ReadInt32($ppStatus, 28) - $EvaluationEndDate = $Marshal::ReadInt64($ppStatus, 32) + $qwValidity = $Marshal::ReadInt64($ppStatus, 32) - if ($eStatus -EQ 3) + if ($dwStatus -EQ 3) { - $eStatus = 5 + $dwStatus = 5 } - if ($eStatus -EQ 2) + if ($dwStatus -EQ 2) { if ($hrReason -EQ 0x4004F00D) { - $eStatus = 3 + $dwStatus = 3 } elseif ($hrReason -EQ 0x4004F065) { - $eStatus = 4 + $dwStatus = 4 } elseif ($hrReason -EQ 0x4004FC06) { - $eStatus = 6 + $dwStatus = 6 } } - $LicenseStatus = $eStatus - $Marshal::FreeHGlobal($pStatus) return } -function SlCheckInfo($SkuId, $Value) -{ - $cData = 0 - $bData = 0 - - $ret = $Win32::SLGetProductSkuInformation( - $hSLC, - [ref][Guid]$SkuId, - $Value, - [ref]$null, - [ref]$cData, - [ref]$bData - ) - - if ($ret -Or !$cData) - { - return $false - } - - if ($Value -EQ "pkeyId") - { - $rData = $Marshal::PtrToStringUni($bData) - } - else - { - $rData = $true - } - - $Marshal::FreeHGlobal($bData) - return $rData -} - function SlGetInfoSLID($AppId) { $cReturnIds = 0 $pReturnIds = 0 - $ret = $Win32::SLGetSLIDList( + $hrRet = $Win32::SLGetSLIDList( $hSLC, 0, [ref][Guid]$AppId, @@ -14198,7 +14349,7 @@ function SlGetInfoSLID($AppId) [ref]$pReturnIds ) - if ($ret -Or !$cReturnIds) + if ($hrRet -NE 0 -Or $cReturnIds -EQ 0) { return } @@ -14213,17 +14364,16 @@ function SlGetInfoSLID($AppId) $bytes = New-Object byte[] 16 $Marshal::Copy([Int64]$pReturnIds + [Int64]16 * $i, $bytes, 0, 16) $actid = ([Guid]$bytes).Guid - $gPPK = SlCheckInfo $actid "pkeyId" - $gAdd = SlCheckInfo $actid "DependsOn" + $gPPK = SlGetInfoSku $actid "pkeyId" + $gAdd = SlGetInfoSku $actid "DependsOn" if ($All.IsPresent) { - if (!$gPPK -And $gAdd) { $a1List += @{id = $actid; pk = $null; ex = $true} } - if (!$gPPK -And !$gAdd) { $a2List += @{id = $actid; pk = $null; ex = $false} } + if ($null -EQ $gPPK -And $null -NE $gAdd) { $a1List += @{id = $actid; pk = $null; ex = $true} } + if ($null -EQ $gPPK -And $null -EQ $gAdd) { $a2List += @{id = $actid; pk = $null; ex = $false} } } - if ($gPPK -And $gAdd) { $a3List += @{id = $actid; pk = $gPPK; ex = $true} } - if ($gPPK -And !$gAdd) { $a4List += @{id = $actid; pk = $gPPK; ex = $false} } + if ($null -NE $gPPK -And $null -NE $gAdd) { $a3List += @{id = $actid; pk = $gPPK; ex = $true} } + if ($null -NE $gPPK -And $null -EQ $gAdd) { $a4List += @{id = $actid; pk = $gPPK; ex = $false} } } - $Marshal::FreeHGlobal($pReturnIds) return ($a1List + $a2List + $a3List + $a4List) } @@ -14280,7 +14430,7 @@ function DetectSubscription { function DetectAdbaClient { - $propADBA | foreach { set $_ (SlGetInfoSku $ID $_) } + $propADBA | foreach { set $_ (SlGetInfoSku $licID $_) } CONOUT "`nAD Activation client information:" CONOUT " Object Name: $ADActivationObjectName" CONOUT " Domain Name: $ADActivationObjectDN" @@ -14290,7 +14440,7 @@ function DetectAdbaClient function DetectAvmClient { - $propAVMA | foreach { set $_ (SlGetInfoSku $ID $_) } + $propAVMA | foreach { set $_ (SlGetInfoSku $licID $_) } CONOUT "`nAutomatic VM Activation client information:" if (-Not [String]::IsNullOrEmpty($InheritedActivationId)) { CONOUT " Guest IAID: $InheritedActivationId" @@ -14321,7 +14471,6 @@ function DetectKmsHost if (-Not $IsKeyManagementService) { return } - if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} if ($Vista -Or $NT5) { $regk = $SLKeyPath @@ -14374,9 +14523,9 @@ function DetectKmsHost function DetectKmsClient { - if ($strSLP -EQ $wslp -And $NT8) + if ($win8) { - $VLType = strGetRegistry ($SPKeyPath + '\' + $strApp + '\' + $ID) "VLActivationType" + $VLType = strGetRegistry ($SPKeyPath + '\' + $strApp + '\' + $licID) "VLActivationType" if ($null -EQ $VLType) {$VLType = strGetRegistry ($SPKeyPath + '\' + $strApp) "VLActivationType"} if ($null -EQ $VLType) {$VLType = strGetRegistry ($SPKeyPath) "VLActivationType"} if ($null -EQ $VLType -Or $VLType -GT 3) {$VLType = 0} @@ -14390,7 +14539,7 @@ function DetectKmsClient } if ($NT7 -Or $strSLP -EQ $oslp) { - $propKMSClient | foreach { set $_ (SlGetInfoSku $ID $_) } + $propKMSClient | foreach { set $_ (SlGetInfoSku $licID $_) } if ($strSLP -EQ $oslp) {$regk = $OPKeyPath} else {$regk = $SPKeyPath} $KMSCaching = strGetRegistry $regk "DisableKeyManagementServiceHostCaching" if (-Not $KMSCaching) {$KMSCaching = "TRUE"} else {$KMSCaching = BoolToWStr (!$KMSCaching)} @@ -14448,58 +14597,90 @@ function DetectKmsClient function GetResult($strSLP, $strApp, $entry) { - $ID = $entry.id - $propPrd | foreach { set $_ (SlGetInfoSku $ID $_) } - . SlGetInfoLicensing $strApp $ID + $licID = $entry.id + $propPrd | foreach { set $_ (SlGetInfoSku $licID $_) } + . SlGetInfoLicensing $strApp $licID + $LicenseStatus = $dwStatus + $LicReason = $hrReason + $EvaluationEndDate = $qwValidity + $gprMnt = $dwGrace + + $pkid = $entry.pk + $isPPK = $null -NE $pkid + + $add_on = $Name.IndexOf("add-on for", 5) + if ($add_on -NE -1) { + $Name = $Name.Substring(0, $add_on + 7) + } + + $licPHN = "empty" + if ($Dlv -Or $All.IsPresent) { + $licPHN = SlGetInfoSku $licID "msft:sl/EUL/PHONE/PUBLIC" + } + + if ($LicenseStatus -EQ 0 -And !$isPPK) { + & $isAll + CONOUT "Name: $Name" + CONOUT "Description: $Description" + CONOUT "Activation ID: $licID" + CONOUT "License Status: Unlicensed" + if ($licPHN -NE "empty") { + $gPHN = [String]::IsNullOrEmpty($licPHN) -NE $true + CONOUT "Phone activatable: $($gPHN.ToString())" + } + return + } $winID = ($strApp -EQ $winApp) $winPR = ($winID -And -Not $entry.ex) $Vista = ($winID -And $NT6 -And -Not $NT7) $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) + $win8 = ($strSLP -EQ $wslp -And $NT8) $reapp = ("Windows", "App")[!$winID] $prmnt = ("machine", "product")[!$winPR] - if ($Description | Select-String "VOLUME_KMSCLIENT") {$cKmsClient = 1; $_mTag = "Volume"} - if ($Description | Select-String "TIMEBASED_") {$cTblClient = 1; $_mTag = "Timebased"} - if ($Description | Select-String "VIRTUAL_MACHINE_ACTIVATION") {$cAvmClient = 1; $_mTag = "Automatic VM"} - if ($null -EQ $cKmsClient) { - if ($Description | Select-String "VOLUME_KMS") {$cKmsServer = 1} + if ($Description.Contains("VOLUME_KMSCLIENT")) {$cKmsClient = 1; $actTag = "Volume"} + if ($Description.Contains("TIMEBASED_")) {$cTblClient = 1; $actTag = "Timebased"} + if ($Description.Contains("VIRTUAL_MACHINE_ACTIVATION")) {$cAvmClient = 1; $actTag = "Automatic VM"} + if ($null -EQ $cKmsClient -And $Description.Contains("VOLUME_KMS")) {$cKmsServer = 1} + + $gprDay = [Math]::Round($gprMnt/1440) + $_xpr = "" + $inGrace = $false + if ($gprMnt -GT 0) { + $_xpr = [DateTime]::Now.AddMinutes($gprMnt).ToString('yyyy-MM-dd hh:mm:ss tt') + $inGrace = $true } - $_gpr = [Math]::Round($GracePeriodRemaining/1440) - if ($_gpr -GT 0) { - $_xpr = [DateTime]::Now.AddMinutes($GracePeriodRemaining).ToString('yyyy-MM-dd hh:mm:ss tt') - } - - $LicenseReason = '0x{0:X}' -f $hrReason - $LicenseMsg = "Time remaining: $GracePeriodRemaining minute(s) ($_gpr day(s))" + $LicenseMsg = "Time remaining: $gprMnt minute(s) ($gprDay day(s))" if ($LicenseStatus -EQ 0) { $LicenseInf = "Unlicensed" $LicenseMsg = $null } if ($LicenseStatus -EQ 1) { $LicenseInf = "Licensed" - if ($GracePeriodRemaining -EQ 0) { + if ($gprMnt -EQ 0) { $LicenseMsg = $null $ExpireMsg = "The $prmnt is permanently activated." } else { - $LicenseMsg = "$_mTag activation expiration: $GracePeriodRemaining minute(s) ($_gpr day(s))" - if ($null -NE $_xpr) {$ExpireMsg = "$_mTag activation will expire $_xpr"} + $LicenseMsg = "$actTag activation expiration: $gprMnt minute(s) ($gprDay day(s))" + if ($inGrace) {$ExpireMsg = "$actTag activation will expire $_xpr"} } } if ($LicenseStatus -EQ 2) { $LicenseInf = "Initial grace period" - if ($null -NE $_xpr) {$ExpireMsg = "Initial grace period ends $_xpr"} + if ($inGrace) {$ExpireMsg = "$LicenseInf ends $_xpr"} } if ($LicenseStatus -EQ 3) { $LicenseInf = "Additional grace period (KMS license expired or hardware out of tolerance)" - if ($null -NE $_xpr) {$ExpireMsg = "Additional grace period ends $_xpr"} + if ($inGrace) {$ExpireMsg = "Additional grace period ends $_xpr"} } if ($LicenseStatus -EQ 4) { $LicenseInf = "Non-genuine grace period" - if ($null -NE $_xpr) {$ExpireMsg = "Non-genuine grace period ends $_xpr"} + if ($inGrace) {$ExpireMsg = "$LicenseInf ends $_xpr"} } if ($LicenseStatus -EQ 5 -And -Not $NT5) { + $LicenseReason = '0x{0:X}' -f $LicReason $LicenseInf = "Notification" $LicenseMsg = "Notification Reason: $LicenseReason" if ($LicenseReason -EQ "0xC004F00F") {if ($null -NE $cKmsClient) {$LicenseMsg = $LicenseMsg + " (KMS license expired)."} else {$LicenseMsg = $LicenseMsg + " (hardware out of tolerance)."}} @@ -14512,36 +14693,35 @@ function GetResult($strSLP, $strApp, $entry) } if ($LicenseStatus -EQ 6 -And -Not $Vista -And -Not $NT5) { $LicenseInf = "Extended grace period" - if ($null -NE $_xpr) {$ExpireMsg = "Extended grace period ends $_xpr"} + if ($inGrace) {$ExpireMsg = "$LicenseInf ends $_xpr"} } - $pkid = $entry.pk - if ($null -NE $pkid) { + if ($isPPK) { $propPkey | foreach { set $_ (SlGetInfoPKey $pkid $_) } } - if ($winPR -And $null -NE $PartialProductKey -And -Not $NT8) { - $uxd = SlGetInfoSku $ID 'UXDifferentiator' + if ($winPR -And $isPPK -And -Not $NT8) { + $uxd = SlGetInfoSku $licID 'UXDifferentiator' $script:primary += @{ - aid = $ID; + aid = $licID; ppk = $PartialProductKey; chn = $Channel; lst = $LicenseStatus; - lcr = $hrReason; - ged = $GracePeriodRemaining; + lcr = $LicReason; + ged = $gprMnt; evl = $EvaluationEndDate; dff = $uxd } } - if ($IID -And $null -NE $PartialProductKey) { - $OfflineInstallationId = SlGetInfoIID $ID + if ($IID -And $isPPK) { + $OfflineInstallationId = SlGetInfoIID $licID } if ($Dlv) { - if ($strSLP -EQ $wslp -And $NT8) + if ($win8) { - $RemainingSkuReArmCount = SlGetInfoSku $ID 'RemainingRearmCount' + $RemainingSkuReArmCount = SlGetInfoSku $licID 'RemainingRearmCount' $RemainingAppReArmCount = SlGetInfoApp $strApp 'RemainingRearmCount' } else @@ -14561,16 +14741,10 @@ function GetResult($strSLP, $strApp, $entry) } } - if ($Dlv -Or $All.IsPresent) { - $gPHN = SlCheckInfo $ID "msft:sl/EUL/PHONE/PUBLIC" - } - - $add_on = $Name.IndexOf("add-on for", 5) - & $isAll - if ($add_on -EQ -1) {CONOUT "Name: $Name"} else {CONOUT "Name: $($Name.Substring(0, $add_on + 7))"} + CONOUT "Name: $Name" CONOUT "Description: $Description" - CONOUT "Activation ID: $ID" + CONOUT "Activation ID: $licID" if ($null -NE $DigitalPID) {CONOUT "Extended PID: $DigitalPID"} if ($null -NE $DigitalPID2 -And $Dlv) {CONOUT "Product ID: $DigitalPID2"} if ($null -NE $OfflineInstallationId -And $IID) {CONOUT "Installation ID: $OfflineInstallationId"} @@ -14582,9 +14756,9 @@ function GetResult($strSLP, $strApp, $entry) $EED = [DateTime]::FromFileTimeUtc($EvaluationEndDate).ToString('yyyy-MM-dd hh:mm:ss tt') CONOUT "Evaluation End Date: $EED UTC" } - if ($LicenseStatus -NE 1 -And $null -NE $gPHN) { - $gPHN = $gPHN.ToString() - CONOUT "Phone activatable: $gPHN" + if ($LicenseStatus -NE 1 -And $licPHN -NE "empty") { + $gPHN = [String]::IsNullOrEmpty($licPHN) -NE $true + CONOUT "Phone activatable: $($gPHN.ToString())" } if ($Dlv) { if ($null -NE $RemainingSLReArmCount) { @@ -14599,11 +14773,11 @@ function GetResult($strSLP, $strApp, $entry) CONOUT "Trusted time: $TTD" } } - if ($null -EQ $PartialProductKey) { + if (!$isPPK) { return } - if ($strSLP -EQ $wslp -And $NT8 -And $VLActivationType -EQ 1) { + if ($win8 -And $VLActivationType -EQ 1) { DetectAdbaClient } @@ -14611,7 +14785,7 @@ function GetResult($strSLP, $strApp, $entry) DetectAvmClient } - $chkSub = ($winPR -And $cSub) + $chkSub = ($winPR -And $isSub) $chkSLS = ($null -NE $cKmsClient -Or $null -NE $cKmsServer -Or $chkSub) @@ -14620,15 +14794,14 @@ function GetResult($strSLP, $strApp, $entry) return } - if ($null -NE $cKmsServer) { - DetectKmsHost - } - if ($null -NE $cKmsClient) { DetectKmsClient } - if ($null -EQ $cKmsServer) { + if ($null -NE $cKmsServer) { + if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} + DetectKmsHost + } else { if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} } @@ -15045,14 +15218,14 @@ function clcGetExpireKrn $cData = 0 $bData = 0 - $ret = $Win32::SLGetWindowsInformation( + $hrRet = $Win32::SLGetWindowsInformation( "Kernel-ExpirationDate", [ref]$tData, [ref]$cData, [ref]$bData ) - if ($ret -Or !$cData -Or $tData -NE 3) + if ($hrRet -Or !$cData -Or $tData -NE 3) { return $null } @@ -15067,7 +15240,7 @@ function clcGetExpireKrn $rData = '{0}/{1}/{2}:{3}:{4}:{5}' -f $year, $Marshal::ReadInt16($bData, 2), $Marshal::ReadInt16($bData, 4), $Marshal::ReadInt16($bData, 6), $Marshal::ReadInt16($bData, 8), $Marshal::ReadInt16($bData, 10) } - $Marshal::FreeHGlobal($bData) + #$Marshal::FreeHGlobal($bData) return $rData } @@ -15103,12 +15276,12 @@ function clcGetGenuineState($AppId) $dwGenuine = 0 if ($NT7) { - $ret = $Win32::SLIsWindowsGenuineLocal([ref]$dwGenuine) + $hrRet = $Win32::SLIsWindowsGenuineLocal([ref]$dwGenuine) } else { - $ret = $Win32::SLIsGenuineLocal([ref][Guid]$AppId, [ref]$dwGenuine, 0) + $hrRet = $Win32::SLIsGenuineLocal([ref][Guid]$AppId, [ref]$dwGenuine, 0) } - if ($ret) + if ($hrRet) { $dwGenuine = 4 } @@ -15176,7 +15349,7 @@ $osls = "OfficeSoftwareProtectionService" $winApp = "55c92734-d682-4d71-983e-d6ec3f16059f" $o14App = "59a52881-a989-479d-af46-f275c6370663" $o15App = "0ff1ce15-a989-479d-af46-f275c6370663" -$cSub = ($winbuild -GE 26000) -And (Select-String -Path "$SysPath\wbem\sppwmi.mof" -Encoding unicode -Pattern "SubscriptionType") +$isSub = ($winbuild -GE 26000) -And (Select-String -Path "$SysPath\wbem\sppwmi.mof" -Encoding unicode -Pattern "SubscriptionType") $DllDigital = ($winbuild -GE 14393) -And (Test-Path "$SysPath\EditionUpgradeManagerObj.dll") $DllSubscription = ($winbuild -GE 14393) -And (Test-Path "$SysPath\Clipc.dll") $VLActTypes = @("All", "AD", "KMS", "Token") diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 6409cec..340c2a8 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=3.0 +@set masver=3.1 @echo off @@ -541,6 +541,7 @@ call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] detected. Script w echo: ) +set generickey=1 call :dk_inskey "[%key%]" ::======================================================================================================================================== @@ -960,11 +961,12 @@ set keyerror=%errorlevel% cmd /c exit /b %keyerror% if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" +if defined generickey (set "keyecho=Installing Generic Product Key ") else (set "keyecho=Installing Product Key ") if %keyerror% EQU 0 ( if %sps%==SoftwareLicensingService call :dk_refresh -echo Installing Generic Product Key %~1 [Successful] +echo %keyecho% %~1 [Successful] ) else ( -call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +call :dk_color %Red% "%keyecho% %~1 [Failed] %keyerror%" if not defined error ( if defined altapplist call :dk_color %Red% "Activation ID not found for this key." call :dk_color %Blue% "%_fixmsg%" @@ -973,6 +975,7 @@ set showfix=1 set error=1 ) +set generickey= exit /b :: Activation command @@ -1100,7 +1103,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) @@ -1110,10 +1113,6 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) -if %winbuild% LSS 7600 ( -set "winos=!winos:VistaT=Vista!" -set "winos=!winos:Serverr=Server!" -) if not defined winsub exit /b diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index bb2c624..3f99aee 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=3.0 +@set masver=3.1 @echo off @@ -620,6 +620,7 @@ call echo Checking Installed Product Key [Partial Key - %%_partial%%] [ ) if defined key ( +set generickey=1 call :dk_inskey "[%key%]" ) @@ -1079,11 +1080,12 @@ set keyerror=%errorlevel% cmd /c exit /b %keyerror% if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" +if defined generickey (set "keyecho=Installing Generic Product Key ") else (set "keyecho=Installing Product Key ") if %keyerror% EQU 0 ( if %sps%==SoftwareLicensingService call :dk_refresh -echo Installing Generic Product Key %~1 [Successful] +echo %keyecho% %~1 [Successful] ) else ( -call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +call :dk_color %Red% "%keyecho% %~1 [Failed] %keyerror%" if not defined error ( if defined altapplist call :dk_color %Red% "Activation ID not found for this key." call :dk_color %Blue% "%_fixmsg%" @@ -1092,6 +1094,7 @@ set showfix=1 set error=1 ) +set generickey= exit /b :: Get Windows installed key channel @@ -1198,7 +1201,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) @@ -1208,10 +1211,6 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) -if %winbuild% LSS 7600 ( -set "winos=!winos:VistaT=Vista!" -set "winos=!winos:Serverr=Server!" -) if not defined winsub exit /b diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 5be9615..ca9a308 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1,4 +1,4 @@ -@set masver=3.0 +@set masver=3.1 @echo off @@ -171,12 +171,27 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble goto dk_done ) -if %winbuild% LSS 9200 ( -%eline% +if %winbuild% LSS 6001 ( +%nceline% echo Unsupported OS version detected [%winbuild%]. -echo Ohook Activation is supported only on Windows 8/10/11 and their server equivalents. +echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents. +if %winbuild% EQU 6000 ( echo: -call :dk_color %Blue% "Use Online KMS activation option instead." +echo Windows Vista RTM is not supported because Powershell cannot be installed. +echo Upgrade to Windows Vista SP1 or SP2. +) +goto dk_done +) + +if not exist %ps% ( +%nceline% +echo PowerShell is not installed in your system. +if %winbuild% LSS 7600 ( +echo Install PowerShell using the following URL. +echo: +echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +) goto dk_done ) @@ -398,8 +413,8 @@ goto :oh_menu cls if not defined terminal ( -mode 130, 32 -if exist "%SysPath%\spp\store_test\" mode 134, 32 +mode 140, 32 +if exist "%SysPath%\spp\store_test\" mode 140, 32 %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% ) title Ohook Activation %masver% @@ -408,9 +423,9 @@ echo: echo Initializing... call :dk_chkmal -if not exist %SysPath%\sppsvc.exe ( +if not exist %SysPath%\%_slexe% ( %eline% -echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo [%SysPath%\%_slexe%] file is missing, aborting... echo: call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." @@ -442,7 +457,7 @@ call :dk_showosinfo echo Initiating Diagnostic Tests... -set "_serv=sppsvc Winmgmt" +set "_serv=%_slser% Winmgmt" :: Software Protection :: Windows Management Instrumentation @@ -451,16 +466,15 @@ set notwinact=1 set ohookact=1 call :dk_errorcheck +call :oh_setspp + :: Check unsupported office versions -set o14msi= set o14c2r= set o16uwp= set _68=HKLM\SOFTWARE\Microsoft\Office set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) %nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R %nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R @@ -468,10 +482,10 @@ if %winbuild% GEQ 10240 ( for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty InstallLocation)" %nul6%') do (if exist "%%a\Integration\Integrator.exe" set o16uwp=Office UWP ) ) -if not "%o14msi%%o14c2r%%o16uwp%"=="" ( +if not "%o14c2r%%o16uwp%"=="" ( echo: -call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%%o16uwp%]" -if not "%o14msi%%o16uwp%"=="" call :dk_color %Blue% "Use Online KMS option to activate it." +call :dk_color %Red% "Checking Unsupported Office Install [ %o14c2r%%o16uwp%]" +if not "%o16uwp%"=="" call :dk_color %Blue% "Use TSforge option to activate it." ) if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( @@ -502,10 +516,10 @@ set o15c2r= set error=1 ) -if "%o16c2r%%o15c2r%%o16msi%%o15msi%"=="" ( +if "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="" ( set error=1 echo: -if not "%o14msi%%o14c2r%%o16uwp%"=="" ( +if not "%o14c2r%%o16uwp%"=="" ( call :dk_color %Red% "Checking Supported Office Install [Not Found]" ) else ( call :dk_color %Red% "Checking Installed Office [Not Found]" @@ -524,8 +538,8 @@ goto dk_done ) set multioffice= -if not "%o16c2r%%o15c2r%%o16msi%%o15msi%"=="1" set multioffice=1 -if not "%o14msi%%o14c2r%%o16uwp%"=="" set multioffice=1 +if not "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="1" set multioffice=1 +if not "%o14c2r%%o16uwp%"=="" set multioffice=1 if defined multioffice ( call :dk_color %Gray% "Checking Multiple Office Install [Found, its recommended to install only one version]" @@ -569,12 +583,8 @@ set "_oIntegrator=%_oRoot%\integration\integrator.exe" if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") -if not "%osarch%"=="x86" ( -if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) + +call :oh_ppcpath echo: echo Activating Office... [C2R ^| %_version% ^| %_oArch%] @@ -585,9 +595,20 @@ set error=1 goto :starto16c2r ) +if defined noOsppc ( +call :dk_color %Red% "Checking OSPPC.DLL [Not found. Aborting activation...]" +call :dk_color %Blue% "%_fixmsg%" +set error=1 +goto :starto16c2r +) + call :oh_fixprids call :oh_process +if defined isOspp ( +call :oh_hookinstall_ospp +) else ( call :oh_hookinstall +) ::======================================================================================================================================== @@ -619,12 +640,8 @@ set "_oIntegrator=%_oRoot%\integration\integrator.exe" if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") -if not "%osarch%"=="x86" ( -if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) + +call :oh_ppcpath echo: echo Activating Office... [C2R ^| %_version% %_AudienceData%^| %_oArch%] @@ -635,9 +652,20 @@ set error=1 goto :startmsi ) +if defined noOsppc ( +call :dk_color %Red% "Checking OSPPC.DLL [Not found. Aborting activation...]" +call :dk_color %Blue% "%_fixmsg%" +set error=1 +goto :startmsi +) + call :oh_fixprids call :oh_process +if defined isOspp ( +call :oh_hookinstall_ospp +) else ( call :oh_hookinstall +) ::======================================================================================================================================== @@ -674,6 +702,9 @@ echo Adding a Registry to Prevent Banner [Successful] :startmsi +if defined o14msi call :oh_setspp 14 +if defined o14msi call :oh_processmsi 14 %o14msi_reg% +call :oh_setspp if defined o15msi call :oh_processmsi 15 %o15msi_reg% if defined o16msi call :oh_processmsi 16 %o16msi_reg% @@ -705,7 +736,7 @@ goto :dk_done :oh_uninstall cls -if not defined terminal mode 99, 32 +if not defined terminal mode 145, 32 title Uninstall Ohook Activation %masver% set _present= @@ -721,6 +752,7 @@ if defined o16c2r_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg if defined o15c2r_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_15CHook=%%b\root\vfs")) if defined o16msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o16msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_16MHook=%%b")) if defined o15msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o15msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_15MHook=%%b")) +if defined o14msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o14msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_14MHook=%%b")) if defined _16CHook (if exist "%_16CHook%\System\sppc*dll" (set _present=1& del /s /f /q "%_16CHook%\System\sppc*dll" & if exist "%_16CHook%\System\sppc*dll" set _unerror=1)) if defined _16CHook (if exist "%_16CHook%\SystemX86\sppc*dll" (set _present=1& del /s /f /q "%_16CHook%\SystemX86\sppc*dll" & if exist "%_16CHook%\SystemX86\sppc*dll" set _unerror=1)) @@ -728,8 +760,9 @@ if defined _15CHook (if exist "%_15CHook%\System\sppc*dll" (set _present=1& d if defined _15CHook (if exist "%_15CHook%\SystemX86\sppc*dll" (set _present=1& del /s /f /q "%_15CHook%\SystemX86\sppc*dll" & if exist "%_15CHook%\SystemX86\sppc*dll" set _unerror=1)) if defined _16MHook (if exist "%_16MHook%sppc*dll" (set _present=1& del /s /f /q "%_16MHook%sppc*dll" & if exist "%_16MHook%sppc*dll" set _unerror=1)) if defined _15MHook (if exist "%_15MHook%sppc*dll" (set _present=1& del /s /f /q "%_15MHook%sppc*dll" & if exist "%_15MHook%sppc*dll" set _unerror=1)) +if defined _14MHook (if exist "%_14MHook%sppc*dll" (set _present=1& del /s /f /q "%_14MHook%sppc*dll" & if exist "%_14MHook%sppc*dll" set _unerror=1)) -for %%# in (15 16) do ( +for %%# in (14 15 16) do ( for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do ( if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" (set _present=1& del /s /f /q "%%~A\Microsoft Office\Office%%#\sppc*dll" & if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" set _unerror=1) ) @@ -743,6 +776,31 @@ if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" (set _present=1& del /s /f ) ) +::================================== + +for %%# in (OSPPC.DLL sppcs.dll) do ( +for %%A in ("%CommonProgramFiles%" "%CommonProgramW6432%" "%CommonProgramFiles(x86)%") do ( +for %%G in ("%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\%%#") do ( +set size=0 +set size=%%~zG +if !size! GEQ 1 if !size! LSS 100000 ( +set _present=1 +del /f /q "%%~G" +if exist "%%~G" (move /y "%%~G" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%%~G" (set _unerror=1) else (echo Deleted file - %%~G) +) +if /i sppcs.dll==%%# if !size! GEQ 100000 ( +move /y "%%~G" "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL" %nul% +if exist "%%~G" (move /y "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL" "!_ttemp!\needsToBeDeleted%random%" %nul%) +move /y "%%~G" "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL" %nul% +if exist "%%~G" (set _unerror=1&echo Failed to rename sppcs.dll back to "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL") else (echo Renamed sppcs.dll back to "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL") +) +) +) +) + +::================================== + reg query HKCU\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && ( echo: echo Deleting - Registry keys for skipping license check @@ -772,6 +830,8 @@ reg unload HKU\%%# %nul% ) ) +::================================== + set "kmskey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" reg query "%kmskey%" %nul% && ( echo: @@ -818,6 +878,7 @@ set _oLPath= set _hookPath= set _hook= set _sppcPath= +set _osppPath= set _actid= set _prod= set _lic= @@ -836,6 +897,7 @@ set o16c2r= set o15c2r= set o16msi= set o15msi= +set o14msi= set _68=HKLM\SOFTWARE\Microsoft\Office set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office @@ -849,6 +911,52 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v P for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) + +exit /b + +::======================================================================================================================================== + +:oh_ppcpath + +if not defined isOspp ( +if not "%osarch%"=="x86" ( +if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +) else ( +set "_sppcPath=%SystemRoot%\System32\sppc.dll" +) +) + +set noOsppc= +set _hook68= +set _hook86= +set _osppPath68= +set _osppPath86= + +if defined isOspp ( +if not "%osarch%"=="x86" ( +if /i "%_oArch%"=="x64" ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath68=%%b") +if not exist "!_osppPath68!OSPPC.DLL" set noOsppc=1 +) +if /i "%_oArch%"=="x86" ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath68=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath86=%%b") +if not exist "!_osppPath68!OSPPC.DLL" set noOsppc=1 +if not exist "!_osppPath86!OSPPC.DLL" set noOsppc=1 +) +) else ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath86=%%b") +if not exist "!_osppPath86!OSPPC.DLL" set noOsppc=1 +) +if "!_osppPath68:~-1!"=="\" set "_osppPath68=!_osppPath68:~0,-1!" +if "!_osppPath86:~-1!"=="\" set "_osppPath86=!_osppPath86:~0,-1!" +) + +if defined _osppPath68 set _hook68=sppc64.dll +if defined _osppPath86 set _hook86=sppc32.dll exit /b @@ -944,15 +1052,24 @@ set hasherror= if %_hook%==sppc32.dll set offset=2564 if %_hook%==sppc64.dll set offset=3076 -del /s /q "%_hookPath%\sppcs.dll" %nul% -del /s /q "%_hookPath%\sppc.dll" %nul% +::====================================== -if exist "%_hookPath%\sppcs.dll" set "ierror=Remove Previous Ohook Install" -if exist "%_hookPath%\sppc.dll" set "ierror=Remove Previous Ohook Install" +:: Remove previous Install + +for %%# in (sppcs.dll sppc.dll) do ( +del /f /q "%_hookPath%\%%#" %nul% +if exist "%_hookPath%\%%#" (move /y "%_hookPath%\%%#" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%_hookPath%\%%#" (set "ierror=Remove Previous Ohook Install [%%#]") +) + +if defined ierror goto :oh_hookinstall_error + +::====================================== mklink "%_hookPath%\sppcs.dll" "%_sppcPath%" %nul% -if not %errorlevel%==0 ( -if not defined ierror set ierror=mklink +if not exist "%_hookPath%\sppcs.dll" ( +set ierror=mklink sppcs.dll +goto :oh_hookinstall_error ) set exhook= @@ -967,17 +1084,122 @@ popd call :oh_extractdll "%_hookPath%\sppc.dll" "%offset%" ) ) -if not exist "%_hookPath%\sppc.dll" (if not defined ierror set ierror=Copy) +if not exist "%_hookPath%\sppc.dll" ( +set ierror=Copy +goto :oh_hookinstall_error +) echo: -if not defined ierror ( -echo Symlinking System's sppc.dll to ["%_hookPath%\sppcs.dll"] [Successful] +echo Symlinking System's sppc.dll ["%_hookPath%\sppcs.dll"] [Successful] if defined exhook ( echo Copying Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] ) else ( echo Extracting Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] ) + +goto :oh_hookinstall_error + +::======================================================================================================================================== + +:oh_hookinstall_ospp + +set ierror= +set hasherror= + +if defined _hook86 set offset86=2564 +if defined _hook68 set offset68=3076 + +::====================================== + +:: Remove previous Install + +for %%# in (OSPPC.DLL sppcs.dll) do ( +for %%A in ("%_osppPath68%\%%#" "%_osppPath86%\%%#") do ( +set size=0 +set size=%%~zA +if !size! GEQ 1 if !size! LSS 100000 ( +del /f /q "%%~A" %nul% +if exist "%%~A" (move /y "%%~A" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%%~A" (set "ierror=Remove Previous Ohook Install [%%#]") +) +) +) + +if defined ierror goto :oh_hookinstall_error + +for %%A in ("%_osppPath68%" "%_osppPath86%") do ( +if exist "%%~A\sppcs.dll" (move /y "%%~A\sppcs.dll" "%%~A\OSPPC.DLL" %nul%) +if exist "%%~A\sppcs.dll" ( +move /y "%%~A\OSPPC.DLL" "!_ttemp!\needsToBeDeleted%random%" %nul% +move /y "%%~A\sppcs.dll" "%%~A\OSPPC.DLL" %nul% +) +if exist "%%~A\sppcs.dll" (set "ierror=Move sppcs.dll back to OSPPC.DLL") +) + +del /f /q "%_hookPath%\sppcs.dll" %nul% +if exist "%_hookPath%\sppcs.dll" (move /y "%_hookPath%\sppcs.dll" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%_hookPath%\sppcs.dll" (set "ierror=Remove Previous Ohook mklink sppcs.dll") + +if defined ierror goto :oh_hookinstall_error + +::====================================== + +if defined _osppPath68 (move /y "%_osppPath68%\OSPPC.DLL" "%_osppPath68%\sppcs.dll" %nul% & if not exist "%_osppPath68%\sppcs.dll" set ierror=1) +if defined _osppPath86 (move /y "%_osppPath86%\OSPPC.DLL" "%_osppPath86%\sppcs.dll" %nul% & if not exist "%_osppPath86%\sppcs.dll" set ierror=1) + +if defined ierror ( +set "ierror=Rename OSPPC.DLL" +goto :oh_hookinstall_error +) + +if defined _osppPath68 if defined _osppPath86 (mklink "%_hookPath%\sppcs.dll" "%_osppPath86%\sppcs.dll" %nul%) +if defined _osppPath68 if not defined _osppPath86 (mklink "%_hookPath%\sppcs.dll" "%_osppPath68%\sppcs.dll" %nul%) +if defined _osppPath86 if not defined _osppPath68 (mklink "%_hookPath%\sppcs.dll" "%_osppPath86%\sppcs.dll" %nul%) + +if not exist "%_hookPath%\sppcs.dll" ( +set ierror=mklink sppcs.dll +goto :oh_hookinstall_error +) + +set exhook= +if exist "!_work!\BIN\%_hook68%" if exist "!_work!\BIN\%_hook86%" set exhook=1 + +if defined exhook ( +pushd "!_work!\BIN\" +if defined _osppPath68 (copy /y /b "%_hook68%" "%_osppPath68%\OSPPC.DLL" %nul%) +if defined _osppPath86 (copy /y /b "%_hook86%" "%_osppPath86%\OSPPC.DLL" %nul%) +popd ) else ( +if defined _osppPath68 (set _hook=%_hook68%&call :oh_extractdll "%_osppPath68%\OSPPC.DLL" "%offset68%") +if defined _osppPath86 (set _hook=%_hook86%&call :oh_extractdll "%_osppPath86%\OSPPC.DLL" "%offset86%") +) + +if defined _osppPath68 (if not exist "%_osppPath68%\OSPPC.DLL" set ierror=1) +if defined _osppPath86 (if not exist "%_osppPath86%\OSPPC.DLL" set ierror=1) + +if defined ierror ( +set ierror=Copy +goto :oh_hookinstall_error +) + +echo: +if defined _osppPath68 (echo Renaming OSPPC.DLL to sppcs.dll ["%_osppPath68%\sppcs.dll"]) +if defined _osppPath86 (echo Renaming OSPPC.DLL to sppcs.dll ["%_osppPath86%\sppcs.dll"]) +if defined exhook ( +if defined _osppPath68 (echo Copying Custom %_hook68% to ["%_osppPath68%\OSPPC.DLL"]) +if defined _osppPath86 (echo Copying Custom %_hook86% to ["%_osppPath86%\OSPPC.DLL"]) +) else ( +if defined _osppPath68 (echo Extracting Custom %_hook68% to ["%_osppPath68%\OSPPC.DLL"]) +if defined _osppPath86 (echo Extracting Custom %_hook86% to ["%_osppPath86%\OSPPC.DLL"]) +) + +echo Symlinking Renamed sppcs.dll ["%_hookPath%\sppcs.dll"] + +::======================================================================================================================================== + +:oh_hookinstall_error + +if defined ierror ( set error=1 call :dk_color %Red% "Installing Ohook [Failed to %ierror%]" echo: @@ -996,9 +1218,9 @@ if not defined exhook if not defined ierror ( if defined hasherror ( set error=1 set ierror=1 -call :dk_color %Red% "Modifying Hash of Custom %_hook% [Failed]" +call :dk_color %Red% "Modifying Hash of Custom sppcs.dll [Failed]" ) else ( -echo Modifying Hash of Custom %_hook% [Successful] +echo Modifying Hash of Custom sppcs.dll [Successful] ) ) @@ -1006,6 +1228,26 @@ exit /b ::======================================================================================================================================== +:oh_setspp + +set isOspp= +if %winbuild% GEQ 9200 ( +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService +) else ( +set isOspp=1 +set spp=OfficeSoftwareProtectionProduct +set sps=OfficeSoftwareProtectionService +) +if "%1"=="14" ( +set isOspp=1 +set spp=OfficeSoftwareProtectionProduct +set sps=OfficeSoftwareProtectionService +) +exit /b + +::======================================================================================================================================== + :oh_process for %%# in (%_oIds%) do ( @@ -1025,10 +1267,11 @@ call :ohookdata getinfo !_prod! if not "!key!"=="" ( echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic +if not %oVer%==14 set generickey=1 call :dk_inskey "[!key!] [!_prod!] [!_lic!]" ) else ( set error=1 -call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! not found in script]" +call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! key not found in script]" call :dk_color %Blue% "Make sure you are using the latest version of MAS." set fixes=%fixes% %mas% call :dk_color %_Yellow% "%mas%" @@ -1055,7 +1298,11 @@ exit /b :: Process Office MSI Version call :oh_reset +if "%1"=="14" ( +call :dk_actids 59a52881-a989-479d-af46-f275c6370663 +) else ( call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +) set oVer=%1 for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\InstallRoot /v Path" %nul6%') do (set "_oRoot=%%b") @@ -1068,16 +1315,8 @@ if "%osarch%"=="x86" set _oArch=x86 if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") -if not "%osarch%"=="x86" ( -if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) -set "_common=%CommonProgramFiles%" -if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" -set "_common2=%CommonProgramFiles(x86)%" +call :oh_ppcpath call :msiofficedata %2 @@ -1090,8 +1329,23 @@ call :dk_color %Red% "Checking Installed Products [Product IDs not f exit /b ) +if defined noOsppc ( +call :dk_color %Red% "Checking OSPPC.DLL [Not found. Aborting activation...]" +call :dk_color %Blue% "%_fixmsg%" +set error=1 +exit /b +) + +if %oVer%==14 if defined SingleImage ( +echo Checking Installed Products [SingleImage product found, Professional Retail key will be used for activation] +) + call :oh_process +if defined isOspp ( +call :oh_hookinstall_ospp +) else ( call :oh_hookinstall +) exit /b @@ -1415,11 +1669,12 @@ set keyerror=%errorlevel% cmd /c exit /b %keyerror% if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" +if defined generickey (set "keyecho=Installing Generic Product Key ") else (set "keyecho=Installing Product Key ") if %keyerror% EQU 0 ( if %sps%==SoftwareLicensingService call :dk_refresh -echo Installing Generic Product Key %~1 [Successful] +echo %keyecho% %~1 [Successful] ) else ( -call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +call :dk_color %Red% "%keyecho% %~1 [Failed] %keyerror%" if not defined error ( if defined altapplist call :dk_color %Red% "Activation ID not found for this key." call :dk_color %Blue% "%_fixmsg%" @@ -1428,6 +1683,7 @@ set showfix=1 set error=1 ) +set generickey= exit /b :: Get all products Activation IDs @@ -1523,7 +1779,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) @@ -1533,10 +1789,6 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) -if %winbuild% LSS 7600 ( -set "winos=!winos:VistaT=Vista!" -set "winos=!winos:Serverr=Server!" -) exit /b @@ -2128,15 +2380,69 @@ exit /b :: 1st column = Office version number :: 2nd column = Activation ID -:: 3rd column = Generic key. Preference is given in this order, Retail:TB:Sub > Retail > OEM:NONSLP > Volume:MAK > Volume:GVLK +:: 3rd column = For Office 2013 and later, the generated keys are listed. For Office 2010, the blocked keys sourced from the Internet are listed. +:: For Office 2013 and later, key preference is given in this order, Retail:TB:Sub > Retail > OEM:NONSLP > Volume:MAK > Volume:GVLK +:: For Office 2010, key preference is given in this order, Retail > Volume:MAK :: 4th column = Last part of license description :: 5th column = Edition +:: 6th column = Other Edition IDs if they are part of the same primary product (For reference only) :: Separator = "_" +::=============== + +:: We couldn't find any keys (blocked/generic doesn't matter) for these Office 2010 products. If you have them, please share with us. + +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_Retail________ExcelR_[HSExcelR] +14_7004b7f0-6407-4f45-8eac-966e5f868bde_Retail________GrooveR +14_fbf4ac36-31c8-4340-8666-79873129cf40_Retail________OutlookR +14_133c8359-4e93-4241-8118-30bb18737ea0_Retail________PowerPointR_[HSPowerPointR] +14_98677603-a668-4fa4-9980-3f1f05f78f69_Retail________PublisherR +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_Retail________WordR_[HSWordR] +14_dbe3aee0-5183-4ff7-8142-66050173cb01_Retail________SmallBusBasicsR_[SmallBusBasicsMSDNR] + +:: These installers are not publicly available, so it doesn't matter if we don't have their keys. + +14_19316117-30a8-4773-8fd9-7f7231f4e060_SubPrepid_____HomeBusinessSubR +14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_SubPrepid_____ProjectProSubR +14_e98ef0c0-71c4-42ce-8305-287d8721e26c_SubPrepid_____ProPlusSubR +14_14f5946a-debc-4716-babc-7e2c240fec08_Retail________MondoR +14_533b656a-4425-480b-8e30-1a2358898350_MAK___________MondoVL + :ohookdata set f= for %%# in ( +:: Office 2010 +14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_7KTYC-XR43P-C3MRW-BJKFD-XB%f%YPG_Retail________AccessR +14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_7XHPQ-BQMYG-YBP49-CY8B2-T8%f%CGQ_ByPass________AccessRuntimeR +14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_89RTQ-MT4GK-6CPTX-WWP7C-J9%f%KXR_MAK___________AccessVL +14_71dc86ff-f056-40d0-8ffb-9592705c9b76_39TRR-C2F37-9WYJ2-MJQXH-B9%f%38K_MAK___________ExcelVL +14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_RCGT3-FPQDV-H49CD-PPDBF-TH%f%47G_MAK___________GrooveVL +14_7b7d1f17-fdcb-4820-9789-9bec6e377821_3YR9B-D9W79-BY66R-R8XYP-QY%f%YYY_Retail________HomeBusinessR_[HomeBusinessDemoR] +14_09e2d37e-474b-4121-8626-58ad9be5776f_3X43R-HHHXX-FRHRW-2M2WJ-8V%f%PHD_Retail________HomeStudentR_[HomeStudentDemoR] +14_ef1da464-01c8-43a6-91af-e4e5713744f9_XDGJY-KFHW9-JWX9X-YM4GW-GC%f%8WR_Retail________InfoPathR +14_85e22450-b741-430c-a172-a37962c938af_6GKT2-KMJPK-4RRBF-8VQKB-JB%f%6G6_MAK___________InfoPathVL +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_2TG3P-9DB76-4YT99-8RXGD-CW%f%XBP_Retail________OneNoteR_[HSOneNoteR] +14_6860b31f-6a67-48b8-84b9-e312b3485c4b_CV64P-F4VRH-BJ33D-PH6MR-X6%f%9RY_MAK___________OneNoteVL +14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_J8C9M-YXMH2-9CX44-2C3YG-V7%f%692_MAK___________OutlookVL +14_acb51361-c0db-4895-9497-1831c41f31a6_GMBWM-WVX26-7WHV4-DB43D-WV%f%DY2_Retail________PersonalR_[PersonalDemoR,PersonalPrepaidR] +14_38252940-718c-4aa6-81a4-135398e53851_HPBQP-RJHDR-Q3472-PT9Q6-PB%f%B72_MAK___________PowerPointVL +14_8b559c37-0117-413e-921b-b853aeb6e210_367X9-9HP9R-TKHY6-DH4QH-K9%f%PY7_Retail________ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR,OEM-SingleImage] +14_725714d7-d58f-4d12-9fa8-35873c6f7215_6JD4G-KRW3J-48MGV-DM6FC-T9%f%WKR_Retail________ProjectProR_[ProjectProMSDNR] +14_1cf57a59-c532-4e56-9a7d-ffa2fe94b474_3XDTH-MMGJ6-F9MKX-THP8D-G9%f%BP7_MAK___________ProjectProVL +14_688f6589-2bd9-424e-a152-b13f36aa6de1_2W96V-RTQ9R-2BPVT-PT8H9-MV%f%68T_Retail________ProjectStdR +14_11b39439-6b93-4642-9570-f2eb81be2238_4DTT4-D4MKX-23KFH-JKR6T-YK%f%G2J_MAK___________ProjectStdVL +14_71af7e84-93e6-4363-9b69-699e04e74071_2J9H6-H4D3G-PCXD2-96XVM-TR%f%R73_Retail________ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] +14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_6CD6C-9R8PB-T2D9Y-8RKKX-W7%f%DFK_MAK___________ProPlusVL_[ProPlusAcadVL] +14_3d014759-b128-4466-9018-e80f6320d9d0_32YG9-3VX77-YXJVV-PRVFW-TT%f%8BV_MAK___________PublisherVL +14_8090771e-d41a-4482-929e-de87f1f47e46_7VKXH-9BWCG-RPTBB-JBRV3-GR%f%HYC_MAK___________SmallBusBasicsVL +14_b78df69e-0966-40b1-ae85-30a5134dedd0_H48K6-FB4Y6-P83GH-9J7XG-HD%f%KKX_ByPass________SPDR +14_b6d2565c-341d-4768-ad7d-addbe00bb5ce_W3BTX-H6BW7-Q6DFW-BXFFY-8R%f%VJP_Retail________StandardR_[StandardMSDNR][KeyisforMSDNR] +14_1f76e346-e0be-49bc-9954-70ec53a4fcfe_2XTQP-GDR7C-GTXPC-6W6PV-4R%f%XGC_MAK___________StandardVL_[StandardAcadVL] +14_2745e581-565a-4670-ae90-6bf7c57ffe43_VXHHB-W7HBD-7M342-RJ7P8-CH%f%BD6_ByPass________StarterR +14_66cad568-c2dc-459d-93ec-2f3cb967ee34_2RDPT-WPYQM-C2WXF-BTPDW-2J%f%2HM_Retail________VisioSIR_Prem[Pro,Std] +14_36756cb8-8e69-4d11-9522-68899507cd6a_7PKFT-X2MKQ-GT6X2-8CB2W-CH%f%C9K_MAK___________VisioSIVL_Prem[Pro,Std] +14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_6J3XK-DFKGK-X373V-QJHYM-V3%f%FC2_MAK___________WordVL :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_B7RFY-7NXPK-Q4342-Y9X2H-3J%f%X4X_Retail________AccessRetail 15_259de5be-492b-44b3-9d78-9645f848f7b0_X3XNB-HJB7K-66THH-8DWQ3-XH%f%GJP_Bypass________AccessRuntimeRetail @@ -2375,6 +2681,49 @@ exit /b :msiofficedata for %%# in ( +14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_0015_AccessR +14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_001C_AccessRuntimeR +14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_0015_AccessVL +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR_[HSExcelR] +14_71dc86ff-f056-40d0-8ffb-9592705c9b76_0016_ExcelVL +14_7004b7f0-6407-4f45-8eac-966e5f868bde_00BA_GrooveR +14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_00BA_GrooveVL +14_7b7d1f17-fdcb-4820-9789-9bec6e377821_0013_HomeBusinessR_[HomeBusinessDemoR] +14_19316117-30a8-4773-8fd9-7f7231f4e060_011E_HomeBusinessSubR +14_09e2d37e-474b-4121-8626-58ad9be5776f_002F_HomeStudentR_[HomeStudentDemoR] +14_ef1da464-01c8-43a6-91af-e4e5713744f9_0044_InfoPathR +14_85e22450-b741-430c-a172-a37962c938af_0044_InfoPathVL +14_14f5946a-debc-4716-babc-7e2c240fec08_000F_MondoR +14_533b656a-4425-480b-8e30-1a2358898350_000F_MondoVL +14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_003D_ProfessionalR_[OEM-SingleImage]Exception +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR_[HSOneNoteR] +14_6860b31f-6a67-48b8-84b9-e312b3485c4b_00A1_OneNoteVL +14_fbf4ac36-31c8-4340-8666-79873129cf40_001A_OutlookR +14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_001A_OutlookVL +14_acb51361-c0db-4895-9497-1831c41f31a6_0033_PersonalR_[PersonalDemoR,PersonalPrepaidR] +14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR_[HSPowerPointR] +14_38252940-718c-4aa6-81a4-135398e53851_0018_PowerPointVL +14_8b559c37-0117-413e-921b-b853aeb6e210_0014_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR] +14_725714d7-d58f-4d12-9fa8-35873c6f7215_003B_ProjectProR_[ProjectProMSDNR] +14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_011F_ProjectProSubR +14_1cf57a59-c532-4e56-9a7d-ffa2fe94b474_003B_ProjectProVL +14_688f6589-2bd9-424e-a152-b13f36aa6de1_003A_ProjectStdR +14_11b39439-6b93-4642-9570-f2eb81be2238_003A_ProjectStdVL +14_71af7e84-93e6-4363-9b69-699e04e74071_0011_ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] +14_e98ef0c0-71c4-42ce-8305-287d8721e26c_011D_ProPlusSubR +14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_0011_ProPlusVL_[ProPlusAcadVL] +14_98677603-a668-4fa4-9980-3f1f05f78f69_0019_PublisherR +14_3d014759-b128-4466-9018-e80f6320d9d0_0019_PublisherVL +14_dbe3aee0-5183-4ff7-8142-66050173cb01_008B_SmallBusBasicsR_[SmallBusBasicsMSDNR] +14_8090771e-d41a-4482-929e-de87f1f47e46_008B_SmallBusBasicsVL +14_b78df69e-0966-40b1-ae85-30a5134dedd0_0017_SPDR +14_d3422cfb-8d8b-4ead-99f9-eab0ccd990d7_0012_StandardR +14_1f76e346-e0be-49bc-9954-70ec53a4fcfe_0012_StandardVL_[StandardAcadVL] +14_2745e581-565a-4670-ae90-6bf7c57ffe43_0066_StarterR +14_66cad568-c2dc-459d-93ec-2f3cb967ee34_0057_VisioSIR_Prem[Pro,Std]Exception +14_36756cb8-8e69-4d11-9522-68899507cd6a_0057_VisioSIVL_Prem[Pro,Std]Exception +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR_[HSWordR] +14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_001B_WordVL :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail 15_259de5be-492b-44b3-9d78-9645f848f7b0_001C_AccessRuntimeRetail @@ -2491,6 +2840,7 @@ if "%oVer%"=="%%A" ( reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) +if /i 003D==%%C set SingleImage=1 ) ) ) @@ -2507,7 +2857,7 @@ exit /b :oh_extractdll set b= -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':%_hook%\:.*';$encoded = ($f[1]) -replace '-', 'A' -replace '_', 'a';$bytes = [Con%b%vert]::FromBas%b%e64String($encoded); $PePath='%1'; $offset='%2'; $m=[io.file]::ReadAllText('!_batp!') -split ':hexedit\:.*';iex ($m[1]);" %nul2% | find /i "Error found" %nul1% && set hasherror=1 +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':%_hook%\:.*';$encoded = ($f[1]) -replace '-', 'A' -replace '_', 'a';$bytes = [Con%b%vert]::FromBas%b%e64String($encoded); $PePath='%1'; $offset='%2'; $m=[io.file]::ReadAllText('!_batp!') -split ':hexedit\:.*';iex ($m[1])" %nul2% | find /i "Error found" %nul1% && set hasherror=1 exit /b :hexedit: @@ -2546,7 +2896,7 @@ $Writer.Write($unixTimestamp) $Writer.Flush() # Write the current state of the MemoryStream to a temporary file -$tempFilePath = [System.IO.Path]::Combine($env:windir, "Temp", [System.IO.Path]::GetRandomFileName()) +$tempFilePath = "$env:windir\Temp\$([System.IO.Path]::GetRandomFileName())" [System.IO.File]::WriteAllBytes($tempFilePath, $MemoryStream.ToArray()) # Update hash using the temporary file diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 07b7470..bb6fd92 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=3.0 +@set masver=3.1 @echo off @@ -677,6 +677,7 @@ call echo Checking Installed Product Key [Partial Key - %%_partial%%] [ ) if defined key ( +set generickey=1 call :dk_inskey "[%key%]" ) @@ -686,7 +687,7 @@ call :dk_inskey "[%key%]" if not %_actoff%==1 goto :ks_activate -call :ks_setspp +call :oh_setspp :: Check ohook install @@ -731,7 +732,7 @@ set ohub=1 :: Check supported office versions -call :ks_getpath +call :oh_getpath set o16uwp= set o16uwp_path= @@ -910,9 +911,9 @@ call :ks_process :ks_startmsi -if defined o14msi call :ks_setspp 14 +if defined o14msi call :oh_setspp 14 if defined o14msi call :ks_processmsi 14 %o14msi_reg% -call :ks_setspp +call :oh_setspp if defined o15msi call :ks_processmsi 15 %o15msi_reg% if defined o16msi call :ks_processmsi 16 %o16msi_reg% @@ -1056,7 +1057,7 @@ exit /b ::======================================================================================================================================== -:ks_getpath +:oh_getpath set o16c2r= set o15c2r= @@ -1143,16 +1144,19 @@ exit /b ::======================================================================================================================================== -:ks_setspp +:oh_setspp +set isOspp= if %winbuild% GEQ 9200 ( set spp=SoftwareLicensingProduct set sps=SoftwareLicensingService ) else ( +set isOspp=1 set spp=OfficeSoftwareProtectionProduct set sps=OfficeSoftwareProtectionService ) if "%1"=="14" ( +set isOspp=1 set spp=OfficeSoftwareProtectionProduct set sps=OfficeSoftwareProtectionService ) @@ -1212,6 +1216,7 @@ call :ks_osppready if not "!key!"=="" ( echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic +set generickey=1 call :dk_inskey "[!key!] [!_prod!]" ) else ( if not defined _oMSI ( @@ -1220,7 +1225,7 @@ call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 ! call :dk_color %Blue% "Make sure you are using Latest MAS script." ) else ( call :dk_color %Red% "Checking Product In Script [!_prod! MSI Retail is not supported]" -call :dk_color %Blue% "Uninstall this and Install C2R or MSI VL version of Office." +call :dk_color %Blue% "Use Ohook option to activate it." ) set fixes=%fixes% %mas%genuine-installation-media call :dk_color %_Yellow% "%mas%genuine-installation-media" @@ -1254,10 +1259,6 @@ echo "%2" | find /i "Wow6432Node" %nul1% && set _oArch=x86 if not "%osarch%"=="x86" if not defined _oArch set _oArch=x64 if "%osarch%"=="x86" set _oArch=x86 -set "_common=%CommonProgramFiles%" -if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" -set "_common2=%CommonProgramFiles(x86)%" - call :msiofficedata %2 echo: @@ -2633,11 +2634,12 @@ set keyerror=%errorlevel% cmd /c exit /b %keyerror% if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" +if defined generickey (set "keyecho=Installing Generic Product Key ") else (set "keyecho=Installing Product Key ") if %keyerror% EQU 0 ( if %sps%==SoftwareLicensingService call :dk_refresh -echo Installing Generic Product Key %~1 [Successful] +echo %keyecho% %~1 [Successful] ) else ( -call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +call :dk_color %Red% "%keyecho% %~1 [Failed] %keyerror%" if not defined error ( if defined altapplist call :dk_color %Red% "Activation ID not found for this key." call :dk_color %Blue% "%_fixmsg%" @@ -2646,6 +2648,7 @@ set showfix=1 set error=1 ) +set generickey= exit /b :: Get Windows installed key channel @@ -2768,7 +2771,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) @@ -2778,10 +2781,6 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) -if %winbuild% LSS 7600 ( -set "winos=!winos:VistaT=Vista!" -set "winos=!winos:Serverr=Server!" -) if not defined winsub exit /b @@ -3438,47 +3437,30 @@ exit /b :: 5th column = Other Edition IDs if they are part of the same primary product (For reference only) :: Separator = "_" -:: EditionID Notes: -:: For Office 2013 and later, all Edition IDs are clearly defined, and each ID corresponds to its specific licensing. - -:: In Office 2010, the situation is a bit more complicated. -:: Products typically fall into two separate categories: Volume License (VL) and Non-VL. This is because a single installation cannot include both Retail and VL licensing types. -:: Some Edition IDs share the same primary product ID. For example, installing ProPlusVL also installs ProPlusAcadVL licenses, as both use 0011 as the primary product ID. -:: Therefore, in the script, we grouped VL and Non-VL versions by primary product ID and selected the highest Edition ID when multiple Edition IDs existed for the same primary product ID. - -:: There are a few exceptions to this 2010 rule: Visio (Premium, Pro, Standard) and OEM-SingleImage. - -:: For Visio, the issue is that branding.xml lists incorrect primary product IDs. The correct primary product ID for all three Visio variants is 0057. Based on the criteria above, we chose Visio-Premium as the representative Edition ID among the three. -:: For OEM-SingleImage, it installs multiple Edition IDs and uses 003D as the primary product ID. Following our method, we selected the highest available Edition ID—ProfessionalR in this case. - :msiofficedata for %%# in ( 14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_0015_AccessR 14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_001C_AccessRuntimeR 14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_0015_AccessVL -14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR_[HSExcelR] 14_71dc86ff-f056-40d0-8ffb-9592705c9b76_0016_ExcelVL 14_7004b7f0-6407-4f45-8eac-966e5f868bde_00BA_GrooveR 14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_00BA_GrooveVL 14_7b7d1f17-fdcb-4820-9789-9bec6e377821_0013_HomeBusinessR_[HomeBusinessDemoR] 14_19316117-30a8-4773-8fd9-7f7231f4e060_011E_HomeBusinessSubR 14_09e2d37e-474b-4121-8626-58ad9be5776f_002F_HomeStudentR_[HomeStudentDemoR] -14_c3ae020c-5a71-4cc5-a27a-2a97c2d46860_0029_HSExcelR -14_25fe4611-b44d-49cc-ae87-2143d299194e_00A3_HSOneNoteR -14_d652ad8d-da5c-4358-b928-7fb1b4de7a7c_0037_HSPowerPointR -14_a963d7ae-7a88-41a7-94da-8bb5635a8af9_002B_HSWordR 14_ef1da464-01c8-43a6-91af-e4e5713744f9_0044_InfoPathR 14_85e22450-b741-430c-a172-a37962c938af_0044_InfoPathVL 14_14f5946a-debc-4716-babc-7e2c240fec08_000F_MondoR 14_533b656a-4425-480b-8e30-1a2358898350_000F_MondoVL 14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_003D_ProfessionalR_[OEM-SingleImage]Exception -14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR_[HSOneNoteR] 14_6860b31f-6a67-48b8-84b9-e312b3485c4b_00A1_OneNoteVL 14_fbf4ac36-31c8-4340-8666-79873129cf40_001A_OutlookR 14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_001A_OutlookVL 14_acb51361-c0db-4895-9497-1831c41f31a6_0033_PersonalR_[PersonalDemoR,PersonalPrepaidR] -14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR +14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR_[HSPowerPointR] 14_38252940-718c-4aa6-81a4-135398e53851_0018_PowerPointVL 14_8b559c37-0117-413e-921b-b853aeb6e210_0014_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR] 14_725714d7-d58f-4d12-9fa8-35873c6f7215_003B_ProjectProR_[ProjectProMSDNR] @@ -3499,7 +3481,7 @@ for %%# in ( 14_2745e581-565a-4670-ae90-6bf7c57ffe43_0066_StarterR 14_66cad568-c2dc-459d-93ec-2f3cb967ee34_0057_VisioSIR_Prem[Pro,Std]Exception 14_36756cb8-8e69-4d11-9522-68899507cd6a_0057_VisioSIVL_Prem[Pro,Std]Exception -14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR_[HSWordR] 14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_001B_WordVL :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail @@ -3617,6 +3599,7 @@ if "%oVer%"=="%%A" ( reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) +if /i 003D==%%C set SingleImage=1 ) ) ) diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 2400e45..40d9914 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=3.0 +@set masver=3.1 @echo off @@ -432,9 +432,9 @@ echo: echo ______________________________________________________________ echo: echo [1] Activate - Windows -echo [2] Activate - Windows [ESU] -echo [3] Activate - Office [All] -echo [4] Activate - Office [Project/Visio] +echo [2] Activate - ESU +echo [3] Activate - Office [All] +echo [4] Activate - Office [Project/Visio] echo [5] Activate - All echo _______________________________________________ echo: @@ -565,13 +565,6 @@ set "_serv=%_slser% Winmgmt" call :dk_errorcheck -if defined error ( -call :dk_color %Red% "Some errors were detected. Aborting the operation..." -set fixes=%fixes% %mas%troubleshoot -call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" -goto :dk_done -) - call :ts_getedition if not defined tsedition ( call :dk_color %Red% "Checking Windows Edition ID [Not found in installed licenses, aborting...]" @@ -705,7 +698,8 @@ goto :ts_esu echo Checking Activation ID [%tempid%] [%tsedition%] -call :ts_inskey "[%key%]" +set generickey=1 +call :dk_inskey "[%key%]" if not defined error set tsids=%tsids% %tempid% goto :ts_esu @@ -827,7 +821,8 @@ goto :ts_esu echo Resetting Rearm / GracePeriod [Successful] ) -call :ts_inskey "[%key%]" +set generickey=1 +call :dk_inskey "[%key%]" ::======================================================================================================================================== @@ -900,7 +895,7 @@ set esuexistbutnosup=1 if defined esuexistsup if defined _vis ( set key=9FPV7-MWGT8-7XPDF-JC23W-WT7TW REM This is a non-generic blocked MAK key for Server-ESU-PA -call :ts_inskey "[!key!]" +call :dk_inskey "[!key!]" goto :ts_off ) @@ -949,7 +944,7 @@ if not %_actoff%==1 goto :ts_act if %winbuild% LSS 9200 ( echo: call :dk_color %Gray% "Checking Supported Office [TSforge for Office is supported on Windows 8 and later versions]" -call :dk_color %Blue% "On Windows Vista / 7, use Online %KS% activation option for Office instead." +call :dk_color %Blue% "On Windows Vista / 7, use Ohook activation option for Office instead." goto :ts_act ) @@ -990,6 +985,7 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v P if not "%o14msi%%o14c2r%"=="" ( echo: call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%]" +if defined o14msi call :dk_color %Blue% "Use Ohook activation option for Office 2010." ) if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( @@ -1310,7 +1306,7 @@ call :dk_color %Blue% "Business, BusinessN, Enterprise, EnterpriseN, and Server goto :ts_act ) -call :ts_inskey "[%key%]" +call :dk_inskey "[%key%]" if not defined error set tsids=%tsids% %tempid% goto :ts_act @@ -2286,7 +2282,7 @@ exit /b :: Install Key -:ts_inskey +:dk_inskey if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% @@ -2294,15 +2290,21 @@ set keyerror=%errorlevel% cmd /c exit /b %keyerror% if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" +if defined generickey (set "keyecho=Installing Generic Product Key ") else (set "keyecho=Installing Product Key ") if %keyerror% EQU 0 ( if %sps%==SoftwareLicensingService call :dk_refresh -echo Installing Product Key %~1 [Successful] +echo %keyecho% %~1 [Successful] ) else ( -set error=1 -call :dk_color %Red% "Installing Product Key %~1 [Failed] %keyerror%" +call :dk_color %Red% "%keyecho% %~1 [Failed] %keyerror%" +if not defined error ( +if defined altapplist call :dk_color %Red% "Activation ID not found for this key." call :dk_color %Blue% "%_fixmsg%" +set showfix=1 +) +set error=1 ) +set generickey= exit /b :: Activation command @@ -2428,7 +2430,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) @@ -2438,10 +2440,6 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) -if %winbuild% LSS 7600 ( -set "winos=!winos:VistaT=Vista!" -set "winos=!winos:Serverr=Server!" -) if not defined winsub exit /b @@ -8207,6 +8205,49 @@ Office-ActID -pkeypath "$env:pkeypath" -edition "$env:_License" -keytype "$env:k :msiofficedata for %%# in ( +14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_0015_AccessR +14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_001C_AccessRuntimeR +14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_0015_AccessVL +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR_[HSExcelR] +14_71dc86ff-f056-40d0-8ffb-9592705c9b76_0016_ExcelVL +14_7004b7f0-6407-4f45-8eac-966e5f868bde_00BA_GrooveR +14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_00BA_GrooveVL +14_7b7d1f17-fdcb-4820-9789-9bec6e377821_0013_HomeBusinessR_[HomeBusinessDemoR] +14_19316117-30a8-4773-8fd9-7f7231f4e060_011E_HomeBusinessSubR +14_09e2d37e-474b-4121-8626-58ad9be5776f_002F_HomeStudentR_[HomeStudentDemoR] +14_ef1da464-01c8-43a6-91af-e4e5713744f9_0044_InfoPathR +14_85e22450-b741-430c-a172-a37962c938af_0044_InfoPathVL +14_14f5946a-debc-4716-babc-7e2c240fec08_000F_MondoR +14_533b656a-4425-480b-8e30-1a2358898350_000F_MondoVL +14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_003D_ProfessionalR_[OEM-SingleImage]Exception +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR_[HSOneNoteR] +14_6860b31f-6a67-48b8-84b9-e312b3485c4b_00A1_OneNoteVL +14_fbf4ac36-31c8-4340-8666-79873129cf40_001A_OutlookR +14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_001A_OutlookVL +14_acb51361-c0db-4895-9497-1831c41f31a6_0033_PersonalR_[PersonalDemoR,PersonalPrepaidR] +14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR_[HSPowerPointR] +14_38252940-718c-4aa6-81a4-135398e53851_0018_PowerPointVL +14_8b559c37-0117-413e-921b-b853aeb6e210_0014_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR] +14_725714d7-d58f-4d12-9fa8-35873c6f7215_003B_ProjectProR_[ProjectProMSDNR] +14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_011F_ProjectProSubR +14_1cf57a59-c532-4e56-9a7d-ffa2fe94b474_003B_ProjectProVL +14_688f6589-2bd9-424e-a152-b13f36aa6de1_003A_ProjectStdR +14_11b39439-6b93-4642-9570-f2eb81be2238_003A_ProjectStdVL +14_71af7e84-93e6-4363-9b69-699e04e74071_0011_ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] +14_e98ef0c0-71c4-42ce-8305-287d8721e26c_011D_ProPlusSubR +14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_0011_ProPlusVL_[ProPlusAcadVL] +14_98677603-a668-4fa4-9980-3f1f05f78f69_0019_PublisherR +14_3d014759-b128-4466-9018-e80f6320d9d0_0019_PublisherVL +14_dbe3aee0-5183-4ff7-8142-66050173cb01_008B_SmallBusBasicsR_[SmallBusBasicsMSDNR] +14_8090771e-d41a-4482-929e-de87f1f47e46_008B_SmallBusBasicsVL +14_b78df69e-0966-40b1-ae85-30a5134dedd0_0017_SPDR +14_d3422cfb-8d8b-4ead-99f9-eab0ccd990d7_0012_StandardR +14_1f76e346-e0be-49bc-9954-70ec53a4fcfe_0012_StandardVL_[StandardAcadVL] +14_2745e581-565a-4670-ae90-6bf7c57ffe43_0066_StarterR +14_66cad568-c2dc-459d-93ec-2f3cb967ee34_0057_VisioSIR_Prem[Pro,Std]Exception +14_36756cb8-8e69-4d11-9522-68899507cd6a_0057_VisioSIVL_Prem[Pro,Std]Exception +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR_[HSWordR] +14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_001B_WordVL :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail 15_259de5be-492b-44b3-9d78-9645f848f7b0_001C_AccessRuntimeRetail @@ -8323,6 +8364,7 @@ if "%oVer%"=="%%A" ( reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) +if /i 003D==%%C set SingleImage=1 ) ) ) diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index a068afa..951a5b9 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=3.0 +@set masver=3.1 @echo off diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 5c34093..6529adf 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=3.0 +@set masver=3.1 @echo off diff --git a/MAS/Separate-Files-Version/Check_Activation_Status.cmd b/MAS/Separate-Files-Version/Check_Activation_Status.cmd index 104a856..458b486 100644 --- a/MAS/Separate-Files-Version/Check_Activation_Status.cmd +++ b/MAS/Separate-Files-Version/Check_Activation_Status.cmd @@ -201,12 +201,14 @@ function BoolToWStr($bVal) { } function InitializePInvoke($LaDll, $bOffice) { - $Marshal = [System.Runtime.InteropServices.Marshal] - $Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly((Get-Random), 'Run').DefineDynamicModule((Get-Random), $False) - $SLApp = $NT7 -Or $bOffice -Or ($LaDll -EQ 'sppc.dll' -And [Diagnostics.FileVersionInfo]::GetVersionInfo("$SysPath\sppc.dll").FilePrivatePart -GE 16501) - + $LaName = [IO.Path]::GetFileNameWithoutExtension($LaDll) + $SLApp = $NT7 -Or $bOffice -Or ($LaName -EQ 'sppc' -And [Diagnostics.FileVersionInfo]::GetVersionInfo("$SysPath\sppc.dll").FilePrivatePart -GE 16501) $Win32 = $null - $Class = $Module.DefineType((Get-Random), 'Public, Abstract, Sealed, BeforeFieldInit', [Object], 0) + + $Marshal = [System.Runtime.InteropServices.Marshal] + $Module = [AppDomain]::CurrentDomain.DefineDynamicAssembly(($LaName+"_Assembly"), 'Run').DefineDynamicModule(($LaName+"_Module"), $False) + $Class = $Module.DefineType(($LaName+"_Methods"), 'Public, Abstract, Sealed, BeforeFieldInit', [Object], 0) + $Class.DefinePInvokeMethod('SLClose', $LaDll, 22, 1, [Int32], @([IntPtr]), 1, 3).SetImplementationFlags(128) $Class.DefinePInvokeMethod('SLOpen', $LaDll, 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) $Class.DefinePInvokeMethod('SLGenerateOfflineInstallationId', $LaDll, 22, 1, [Int32], @([IntPtr], [Guid].MakeByRefType(), [IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) @@ -255,10 +257,51 @@ function SlGetInfoIID($SkuId) { return $null } + else + { + return $Marshal::PtrToStringUni($bData) + } +} - $rData = $Marshal::PtrToStringUni($bData) - $Marshal::FreeHGlobal($bData) - return $rData +function SlReturnData($hrRet, $tData, $cData, $bData) { + if ($hrRet -NE 0 -Or $cData -EQ 0) + { + return $null + } + if ($tData -EQ 1) + { + return $Marshal::PtrToStringUni($bData) + } + elseif ($tData -EQ 4) + { + return $Marshal::ReadInt32($bData) + } + elseif ($tData -EQ 3 -And $cData -EQ 8) + { + return $Marshal::ReadInt64($bData) + } + else + { + return $null + } +} + +function SlGetInfoPKey($PkeyId, $Value) +{ + $tData = 0 + $cData = 0 + $bData = 0 + + $hrRet = $Win32::SLGetPKeyInformation( + $hSLC, + [ref][Guid]$PkeyId, + $Value, + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + return SlReturnData $hrRet $tData $cData $bData } function SlGetInfoSku($SkuId, $Value) @@ -267,7 +310,7 @@ function SlGetInfoSku($SkuId, $Value) $cData = 0 $bData = 0 - $ret = $Win32::SLGetProductSkuInformation( + $hrRet = $Win32::SLGetProductSkuInformation( $hSLC, [ref][Guid]$SkuId, $Value, @@ -276,70 +319,7 @@ function SlGetInfoSku($SkuId, $Value) [ref]$bData ) - if ($ret -Or !$cData) - { - return $null - } - - if ($tData -EQ 1) - { - $rData = $Marshal::PtrToStringUni($bData) - } - elseif ($tData -EQ 4) - { - $rData = $Marshal::ReadInt32($bData) - } - elseif ($tData -EQ 3 -And $cData -EQ 8) - { - $rData = $Marshal::ReadInt64($bData) - } - else - { - $rData = $null - } - - $Marshal::FreeHGlobal($bData) - return $rData -} - -function SlGetInfoService($Value) -{ - $tData = 0 - $cData = 0 - $bData = 0 - - $ret = $Win32::SLGetServiceInformation( - $hSLC, - $Value, - [ref]$tData, - [ref]$cData, - [ref]$bData - ) - - if ($ret -Or !$cData) - { - return $null - } - - if ($tData -EQ 1) - { - $rData = $Marshal::PtrToStringUni($bData) - } - elseif ($tData -EQ 4) - { - $rData = $Marshal::ReadInt32($bData) - } - elseif ($tData -EQ 3 -And $cData -EQ 8) - { - $rData = $Marshal::ReadInt64($bData) - } - else - { - $rData = $null - } - - $Marshal::FreeHGlobal($bData) - return $rData + return SlReturnData $hrRet $tData $cData $bData } function SlGetInfoApp($AppId, $Value) @@ -348,7 +328,7 @@ function SlGetInfoApp($AppId, $Value) $cData = 0 $bData = 0 - $ret = $Win32::SLGetApplicationInformation( + $hrRet = $Win32::SLGetApplicationInformation( $hSLC, [ref][Guid]$AppId, $Value, @@ -357,80 +337,49 @@ function SlGetInfoApp($AppId, $Value) [ref]$bData ) - if ($ret -Or !$cData) - { - return $null - } + return SlReturnData $hrRet $tData $cData $bData +} - if ($tData -EQ 1) - { - $rData = $Marshal::PtrToStringUni($bData) - } - elseif ($tData -EQ 4) - { - $rData = $Marshal::ReadInt32($bData) - } - elseif ($tData -EQ 3 -And $cData -EQ 8) - { - $rData = $Marshal::ReadInt64($bData) - } - else - { - $rData = $null - } +function SlGetInfoService($Value) +{ + $tData = 0 + $cData = 0 + $bData = 0 - $Marshal::FreeHGlobal($bData) - return $rData + $hrRet = $Win32::SLGetServiceInformation( + $hSLC, + $Value, + [ref]$tData, + [ref]$cData, + [ref]$bData + ) + + return SlReturnData $hrRet $tData $cData $bData } function SlGetInfoSvcApp($strApp, $Value) { if ($SLApp) { - $rData = SlGetInfoApp $strApp $Value + return SlGetInfoApp $strApp $Value } else { - $rData = SlGetInfoService $Value + return SlGetInfoService $Value } - return $rData -} - -function SlGetInfoPKey($PkeyId, $Value) -{ - $cData = 0 - $bData = 0 - - $ret = $Win32::SLGetPKeyInformation( - $hSLC, - [ref][Guid]$PKeyId, - $Value, - [ref]$null, - [ref]$cData, - [ref]$bData - ) - - if ($ret -Or !$cData) - { - return $null - } - - $rData = $Marshal::PtrToStringUni($bData) - $Marshal::FreeHGlobal($bData) - return $rData } function SlGetInfoLicensing($AppId, $SkuId) { - $LicenseStatus = 0 - $GracePeriodRemaining = 0 + $dwStatus = 0 + $dwGrace = 0 $hrReason = 0 - $EvaluationEndDate = 0 + $qwValidity = 0 $cStatus = 0 $pStatus = 0 - $ret = $Win32::SLGetLicensingStatusInformation( + $hrRet = $Win32::SLGetLicensingStatusInformation( $hSLC, [ref][Guid]$AppId, [ref][Guid]$SkuId, @@ -439,80 +388,46 @@ function SlGetInfoLicensing($AppId, $SkuId) [ref]$pStatus ) - if ($ret -Or !$cStatus) + if ($hrRet -NE 0 -Or $cStatus -EQ 0) { return } [IntPtr]$ppStatus = [Int64]$pStatus + [Int64]40 * ($cStatus - 1) - $eStatus = $Marshal::ReadInt32($ppStatus, 16) - $GracePeriodRemaining = $Marshal::ReadInt32($ppStatus, 20) + $dwStatus = $Marshal::ReadInt32($ppStatus, 16) + $dwGrace = $Marshal::ReadInt32($ppStatus, 20) $hrReason = $Marshal::ReadInt32($ppStatus, 28) - $EvaluationEndDate = $Marshal::ReadInt64($ppStatus, 32) + $qwValidity = $Marshal::ReadInt64($ppStatus, 32) - if ($eStatus -EQ 3) + if ($dwStatus -EQ 3) { - $eStatus = 5 + $dwStatus = 5 } - if ($eStatus -EQ 2) + if ($dwStatus -EQ 2) { if ($hrReason -EQ 0x4004F00D) { - $eStatus = 3 + $dwStatus = 3 } elseif ($hrReason -EQ 0x4004F065) { - $eStatus = 4 + $dwStatus = 4 } elseif ($hrReason -EQ 0x4004FC06) { - $eStatus = 6 + $dwStatus = 6 } } - $LicenseStatus = $eStatus - $Marshal::FreeHGlobal($pStatus) return } -function SlCheckInfo($SkuId, $Value) -{ - $cData = 0 - $bData = 0 - - $ret = $Win32::SLGetProductSkuInformation( - $hSLC, - [ref][Guid]$SkuId, - $Value, - [ref]$null, - [ref]$cData, - [ref]$bData - ) - - if ($ret -Or !$cData) - { - return $false - } - - if ($Value -EQ "pkeyId") - { - $rData = $Marshal::PtrToStringUni($bData) - } - else - { - $rData = $true - } - - $Marshal::FreeHGlobal($bData) - return $rData -} - function SlGetInfoSLID($AppId) { $cReturnIds = 0 $pReturnIds = 0 - $ret = $Win32::SLGetSLIDList( + $hrRet = $Win32::SLGetSLIDList( $hSLC, 0, [ref][Guid]$AppId, @@ -521,7 +436,7 @@ function SlGetInfoSLID($AppId) [ref]$pReturnIds ) - if ($ret -Or !$cReturnIds) + if ($hrRet -NE 0 -Or $cReturnIds -EQ 0) { return } @@ -536,17 +451,16 @@ function SlGetInfoSLID($AppId) $bytes = New-Object byte[] 16 $Marshal::Copy([Int64]$pReturnIds + [Int64]16 * $i, $bytes, 0, 16) $actid = ([Guid]$bytes).Guid - $gPPK = SlCheckInfo $actid "pkeyId" - $gAdd = SlCheckInfo $actid "DependsOn" + $gPPK = SlGetInfoSku $actid "pkeyId" + $gAdd = SlGetInfoSku $actid "DependsOn" if ($All.IsPresent) { - if (!$gPPK -And $gAdd) { $a1List += @{id = $actid; pk = $null; ex = $true} } - if (!$gPPK -And !$gAdd) { $a2List += @{id = $actid; pk = $null; ex = $false} } + if ($null -EQ $gPPK -And $null -NE $gAdd) { $a1List += @{id = $actid; pk = $null; ex = $true} } + if ($null -EQ $gPPK -And $null -EQ $gAdd) { $a2List += @{id = $actid; pk = $null; ex = $false} } } - if ($gPPK -And $gAdd) { $a3List += @{id = $actid; pk = $gPPK; ex = $true} } - if ($gPPK -And !$gAdd) { $a4List += @{id = $actid; pk = $gPPK; ex = $false} } + if ($null -NE $gPPK -And $null -NE $gAdd) { $a3List += @{id = $actid; pk = $gPPK; ex = $true} } + if ($null -NE $gPPK -And $null -EQ $gAdd) { $a4List += @{id = $actid; pk = $gPPK; ex = $false} } } - $Marshal::FreeHGlobal($pReturnIds) return ($a1List + $a2List + $a3List + $a4List) } @@ -603,7 +517,7 @@ function DetectSubscription { function DetectAdbaClient { - $propADBA | foreach { set $_ (SlGetInfoSku $ID $_) } + $propADBA | foreach { set $_ (SlGetInfoSku $licID $_) } CONOUT "`nAD Activation client information:" CONOUT " Object Name: $ADActivationObjectName" CONOUT " Domain Name: $ADActivationObjectDN" @@ -613,7 +527,7 @@ function DetectAdbaClient function DetectAvmClient { - $propAVMA | foreach { set $_ (SlGetInfoSku $ID $_) } + $propAVMA | foreach { set $_ (SlGetInfoSku $licID $_) } CONOUT "`nAutomatic VM Activation client information:" if (-Not [String]::IsNullOrEmpty($InheritedActivationId)) { CONOUT " Guest IAID: $InheritedActivationId" @@ -644,7 +558,6 @@ function DetectKmsHost if (-Not $IsKeyManagementService) { return } - if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} if ($Vista -Or $NT5) { $regk = $SLKeyPath @@ -697,9 +610,9 @@ function DetectKmsHost function DetectKmsClient { - if ($strSLP -EQ $wslp -And $NT8) + if ($win8) { - $VLType = strGetRegistry ($SPKeyPath + '\' + $strApp + '\' + $ID) "VLActivationType" + $VLType = strGetRegistry ($SPKeyPath + '\' + $strApp + '\' + $licID) "VLActivationType" if ($null -EQ $VLType) {$VLType = strGetRegistry ($SPKeyPath + '\' + $strApp) "VLActivationType"} if ($null -EQ $VLType) {$VLType = strGetRegistry ($SPKeyPath) "VLActivationType"} if ($null -EQ $VLType -Or $VLType -GT 3) {$VLType = 0} @@ -713,7 +626,7 @@ function DetectKmsClient } if ($NT7 -Or $strSLP -EQ $oslp) { - $propKMSClient | foreach { set $_ (SlGetInfoSku $ID $_) } + $propKMSClient | foreach { set $_ (SlGetInfoSku $licID $_) } if ($strSLP -EQ $oslp) {$regk = $OPKeyPath} else {$regk = $SPKeyPath} $KMSCaching = strGetRegistry $regk "DisableKeyManagementServiceHostCaching" if (-Not $KMSCaching) {$KMSCaching = "TRUE"} else {$KMSCaching = BoolToWStr (!$KMSCaching)} @@ -771,58 +684,90 @@ function DetectKmsClient function GetResult($strSLP, $strApp, $entry) { - $ID = $entry.id - $propPrd | foreach { set $_ (SlGetInfoSku $ID $_) } - . SlGetInfoLicensing $strApp $ID + $licID = $entry.id + $propPrd | foreach { set $_ (SlGetInfoSku $licID $_) } + . SlGetInfoLicensing $strApp $licID + $LicenseStatus = $dwStatus + $LicReason = $hrReason + $EvaluationEndDate = $qwValidity + $gprMnt = $dwGrace + + $pkid = $entry.pk + $isPPK = $null -NE $pkid + + $add_on = $Name.IndexOf("add-on for", 5) + if ($add_on -NE -1) { + $Name = $Name.Substring(0, $add_on + 7) + } + + $licPHN = "empty" + if ($Dlv -Or $All.IsPresent) { + $licPHN = SlGetInfoSku $licID "msft:sl/EUL/PHONE/PUBLIC" + } + + if ($LicenseStatus -EQ 0 -And !$isPPK) { + & $isAll + CONOUT "Name: $Name" + CONOUT "Description: $Description" + CONOUT "Activation ID: $licID" + CONOUT "License Status: Unlicensed" + if ($licPHN -NE "empty") { + $gPHN = [String]::IsNullOrEmpty($licPHN) -NE $true + CONOUT "Phone activatable: $($gPHN.ToString())" + } + return + } $winID = ($strApp -EQ $winApp) $winPR = ($winID -And -Not $entry.ex) $Vista = ($winID -And $NT6 -And -Not $NT7) $NT5 = ($strSLP -EQ $wslp -And $winbuild -LT 6001) + $win8 = ($strSLP -EQ $wslp -And $NT8) $reapp = ("Windows", "App")[!$winID] $prmnt = ("machine", "product")[!$winPR] - if ($Description | Select-String "VOLUME_KMSCLIENT") {$cKmsClient = 1; $_mTag = "Volume"} - if ($Description | Select-String "TIMEBASED_") {$cTblClient = 1; $_mTag = "Timebased"} - if ($Description | Select-String "VIRTUAL_MACHINE_ACTIVATION") {$cAvmClient = 1; $_mTag = "Automatic VM"} - if ($null -EQ $cKmsClient) { - if ($Description | Select-String "VOLUME_KMS") {$cKmsServer = 1} + if ($Description.Contains("VOLUME_KMSCLIENT")) {$cKmsClient = 1; $actTag = "Volume"} + if ($Description.Contains("TIMEBASED_")) {$cTblClient = 1; $actTag = "Timebased"} + if ($Description.Contains("VIRTUAL_MACHINE_ACTIVATION")) {$cAvmClient = 1; $actTag = "Automatic VM"} + if ($null -EQ $cKmsClient -And $Description.Contains("VOLUME_KMS")) {$cKmsServer = 1} + + $gprDay = [Math]::Round($gprMnt/1440) + $_xpr = "" + $inGrace = $false + if ($gprMnt -GT 0) { + $_xpr = [DateTime]::Now.AddMinutes($gprMnt).ToString('yyyy-MM-dd hh:mm:ss tt') + $inGrace = $true } - $_gpr = [Math]::Round($GracePeriodRemaining/1440) - if ($_gpr -GT 0) { - $_xpr = [DateTime]::Now.AddMinutes($GracePeriodRemaining).ToString('yyyy-MM-dd hh:mm:ss tt') - } - - $LicenseReason = '0x{0:X}' -f $hrReason - $LicenseMsg = "Time remaining: $GracePeriodRemaining minute(s) ($_gpr day(s))" + $LicenseMsg = "Time remaining: $gprMnt minute(s) ($gprDay day(s))" if ($LicenseStatus -EQ 0) { $LicenseInf = "Unlicensed" $LicenseMsg = $null } if ($LicenseStatus -EQ 1) { $LicenseInf = "Licensed" - if ($GracePeriodRemaining -EQ 0) { + if ($gprMnt -EQ 0) { $LicenseMsg = $null $ExpireMsg = "The $prmnt is permanently activated." } else { - $LicenseMsg = "$_mTag activation expiration: $GracePeriodRemaining minute(s) ($_gpr day(s))" - if ($null -NE $_xpr) {$ExpireMsg = "$_mTag activation will expire $_xpr"} + $LicenseMsg = "$actTag activation expiration: $gprMnt minute(s) ($gprDay day(s))" + if ($inGrace) {$ExpireMsg = "$actTag activation will expire $_xpr"} } } if ($LicenseStatus -EQ 2) { $LicenseInf = "Initial grace period" - if ($null -NE $_xpr) {$ExpireMsg = "Initial grace period ends $_xpr"} + if ($inGrace) {$ExpireMsg = "$LicenseInf ends $_xpr"} } if ($LicenseStatus -EQ 3) { $LicenseInf = "Additional grace period (KMS license expired or hardware out of tolerance)" - if ($null -NE $_xpr) {$ExpireMsg = "Additional grace period ends $_xpr"} + if ($inGrace) {$ExpireMsg = "Additional grace period ends $_xpr"} } if ($LicenseStatus -EQ 4) { $LicenseInf = "Non-genuine grace period" - if ($null -NE $_xpr) {$ExpireMsg = "Non-genuine grace period ends $_xpr"} + if ($inGrace) {$ExpireMsg = "$LicenseInf ends $_xpr"} } if ($LicenseStatus -EQ 5 -And -Not $NT5) { + $LicenseReason = '0x{0:X}' -f $LicReason $LicenseInf = "Notification" $LicenseMsg = "Notification Reason: $LicenseReason" if ($LicenseReason -EQ "0xC004F00F") {if ($null -NE $cKmsClient) {$LicenseMsg = $LicenseMsg + " (KMS license expired)."} else {$LicenseMsg = $LicenseMsg + " (hardware out of tolerance)."}} @@ -835,36 +780,35 @@ function GetResult($strSLP, $strApp, $entry) } if ($LicenseStatus -EQ 6 -And -Not $Vista -And -Not $NT5) { $LicenseInf = "Extended grace period" - if ($null -NE $_xpr) {$ExpireMsg = "Extended grace period ends $_xpr"} + if ($inGrace) {$ExpireMsg = "$LicenseInf ends $_xpr"} } - $pkid = $entry.pk - if ($null -NE $pkid) { + if ($isPPK) { $propPkey | foreach { set $_ (SlGetInfoPKey $pkid $_) } } - if ($winPR -And $null -NE $PartialProductKey -And -Not $NT8) { - $uxd = SlGetInfoSku $ID 'UXDifferentiator' + if ($winPR -And $isPPK -And -Not $NT8) { + $uxd = SlGetInfoSku $licID 'UXDifferentiator' $script:primary += @{ - aid = $ID; + aid = $licID; ppk = $PartialProductKey; chn = $Channel; lst = $LicenseStatus; - lcr = $hrReason; - ged = $GracePeriodRemaining; + lcr = $LicReason; + ged = $gprMnt; evl = $EvaluationEndDate; dff = $uxd } } - if ($IID -And $null -NE $PartialProductKey) { - $OfflineInstallationId = SlGetInfoIID $ID + if ($IID -And $isPPK) { + $OfflineInstallationId = SlGetInfoIID $licID } if ($Dlv) { - if ($strSLP -EQ $wslp -And $NT8) + if ($win8) { - $RemainingSkuReArmCount = SlGetInfoSku $ID 'RemainingRearmCount' + $RemainingSkuReArmCount = SlGetInfoSku $licID 'RemainingRearmCount' $RemainingAppReArmCount = SlGetInfoApp $strApp 'RemainingRearmCount' } else @@ -884,16 +828,10 @@ function GetResult($strSLP, $strApp, $entry) } } - if ($Dlv -Or $All.IsPresent) { - $gPHN = SlCheckInfo $ID "msft:sl/EUL/PHONE/PUBLIC" - } - - $add_on = $Name.IndexOf("add-on for", 5) - & $isAll - if ($add_on -EQ -1) {CONOUT "Name: $Name"} else {CONOUT "Name: $($Name.Substring(0, $add_on + 7))"} + CONOUT "Name: $Name" CONOUT "Description: $Description" - CONOUT "Activation ID: $ID" + CONOUT "Activation ID: $licID" if ($null -NE $DigitalPID) {CONOUT "Extended PID: $DigitalPID"} if ($null -NE $DigitalPID2 -And $Dlv) {CONOUT "Product ID: $DigitalPID2"} if ($null -NE $OfflineInstallationId -And $IID) {CONOUT "Installation ID: $OfflineInstallationId"} @@ -905,9 +843,9 @@ function GetResult($strSLP, $strApp, $entry) $EED = [DateTime]::FromFileTimeUtc($EvaluationEndDate).ToString('yyyy-MM-dd hh:mm:ss tt') CONOUT "Evaluation End Date: $EED UTC" } - if ($LicenseStatus -NE 1 -And $null -NE $gPHN) { - $gPHN = $gPHN.ToString() - CONOUT "Phone activatable: $gPHN" + if ($LicenseStatus -NE 1 -And $licPHN -NE "empty") { + $gPHN = [String]::IsNullOrEmpty($licPHN) -NE $true + CONOUT "Phone activatable: $($gPHN.ToString())" } if ($Dlv) { if ($null -NE $RemainingSLReArmCount) { @@ -922,11 +860,11 @@ function GetResult($strSLP, $strApp, $entry) CONOUT "Trusted time: $TTD" } } - if ($null -EQ $PartialProductKey) { + if (!$isPPK) { return } - if ($strSLP -EQ $wslp -And $NT8 -And $VLActivationType -EQ 1) { + if ($win8 -And $VLActivationType -EQ 1) { DetectAdbaClient } @@ -934,7 +872,7 @@ function GetResult($strSLP, $strApp, $entry) DetectAvmClient } - $chkSub = ($winPR -And $cSub) + $chkSub = ($winPR -And $isSub) $chkSLS = ($null -NE $cKmsClient -Or $null -NE $cKmsServer -Or $chkSub) @@ -943,15 +881,14 @@ function GetResult($strSLP, $strApp, $entry) return } - if ($null -NE $cKmsServer) { - DetectKmsHost - } - if ($null -NE $cKmsClient) { DetectKmsClient } - if ($null -EQ $cKmsServer) { + if ($null -NE $cKmsServer) { + if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} + DetectKmsHost + } else { if ($null -NE $ExpireMsg) {CONOUT "`n $ExpireMsg"} } @@ -1368,14 +1305,14 @@ function clcGetExpireKrn $cData = 0 $bData = 0 - $ret = $Win32::SLGetWindowsInformation( + $hrRet = $Win32::SLGetWindowsInformation( "Kernel-ExpirationDate", [ref]$tData, [ref]$cData, [ref]$bData ) - if ($ret -Or !$cData -Or $tData -NE 3) + if ($hrRet -Or !$cData -Or $tData -NE 3) { return $null } @@ -1390,7 +1327,7 @@ function clcGetExpireKrn $rData = '{0}/{1}/{2}:{3}:{4}:{5}' -f $year, $Marshal::ReadInt16($bData, 2), $Marshal::ReadInt16($bData, 4), $Marshal::ReadInt16($bData, 6), $Marshal::ReadInt16($bData, 8), $Marshal::ReadInt16($bData, 10) } - $Marshal::FreeHGlobal($bData) + #$Marshal::FreeHGlobal($bData) return $rData } @@ -1426,12 +1363,12 @@ function clcGetGenuineState($AppId) $dwGenuine = 0 if ($NT7) { - $ret = $Win32::SLIsWindowsGenuineLocal([ref]$dwGenuine) + $hrRet = $Win32::SLIsWindowsGenuineLocal([ref]$dwGenuine) } else { - $ret = $Win32::SLIsGenuineLocal([ref][Guid]$AppId, [ref]$dwGenuine, 0) + $hrRet = $Win32::SLIsGenuineLocal([ref][Guid]$AppId, [ref]$dwGenuine, 0) } - if ($ret) + if ($hrRet) { $dwGenuine = 4 } @@ -1499,7 +1436,7 @@ $osls = "OfficeSoftwareProtectionService" $winApp = "55c92734-d682-4d71-983e-d6ec3f16059f" $o14App = "59a52881-a989-479d-af46-f275c6370663" $o15App = "0ff1ce15-a989-479d-af46-f275c6370663" -$cSub = ($winbuild -GE 26000) -And (Select-String -Path "$SysPath\wbem\sppwmi.mof" -Encoding unicode -Pattern "SubscriptionType") +$isSub = ($winbuild -GE 26000) -And (Select-String -Path "$SysPath\wbem\sppwmi.mof" -Encoding unicode -Pattern "SubscriptionType") $DllDigital = ($winbuild -GE 14393) -And (Test-Path "$SysPath\EditionUpgradeManagerObj.dll") $DllSubscription = ($winbuild -GE 14393) -And (Test-Path "$SysPath\Clipc.dll") $VLActTypes = @("All", "AD", "KMS", "Token") diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 10030b1..7f6eb25 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -1,4 +1,4 @@ -@set masver=3.0 +@set masver=3.1 @echo off diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 55a42ed..bc4d49d 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1,4 +1,4 @@ -@set masver=3.0 +@set masver=3.1 @echo off diff --git a/README.md b/README.md index 0fca6c6..b3fdf00 100644 --- a/README.md +++ b/README.md @@ -6,43 +6,54 @@
-## Download / How to use it? +## How to Activate Windows / Office? ### Method 1 - PowerShell (Windows 8 and later) ❤️ -1. Open PowerShell (Not CMD). To do that, right-click on the Windows start menu and select PowerShell or Terminal. -2. Copy and paste the code below and press enter +1. **Open PowerShell** + To do that, press the Windows key + X, then select PowerShell or Terminal. + +2. **Copy and paste the code below, then press enter.** ``` irm https://get.activated.win | iex ``` -Alternatively, you can use the following (It will be deprecated in the future.) +Alternatively, you can use the following (this will be deprecated in the future): ``` irm https://massgrave.dev/get | iex ``` -3. You will see the activation options. Choose (1) HWID for Windows activation. Choose (2) Ohook for Office activation. -4. That's all. + +3. You will see the activation options. + Press 1 HWID for Windows activation. + Press 2 Ohook for Office activation. + +4. That's all --- -### Method 2 - Traditional (Windows 7 and later) +### Method 2 - Traditional (Windows Vista and later)
- Click here for info - -1. Download the file using the links provided below. + Click here to view + +1. Download the file using one of the links below: `https://github.com/massgravel/Microsoft-Activation-Scripts/archive/refs/heads/master.zip` or `https://git.activated.win/massgrave/Microsoft-Activation-Scripts/archive/master.zip` -2. Right-click on the downloaded zip file and extract -3. In the extracted folder, find the folder named `All-In-One-Version` -4. Run the file named `MAS_AIO.cmd` -5. You will see the activation options, follow the on-screen instructions. +2. Right-click on the downloaded zip file and extract it. +3. In the extracted folder, find the folder named `All-In-One-Version`. +4. Run the file named `MAS_AIO.cmd`. +5. You will see the activation options. Follow the on-screen instructions. 6. That's all.
--- +- **[Office for macOS](https://massgrave.dev/office_for_mac)** +- To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches). + +--- + ### Not working ❓ - If you are **unable to launch MAS** using the PowerShell method, please refer to **Method 2** listed above. @@ -59,11 +70,9 @@ or --- -To run the scripts in unattended mode, check [here](https://massgrave.dev/command_line_switches). - ``` -Latest Version: 3.0 -Release date: 14-Feb-2025 +Latest Version: 3.1 +Release date: 29-Apr-2025 ``` ### [Troubleshooting / Help](https://massgrave.dev/troubleshoot) From 4e702068bea2cd5372904389ac687c75bc13223f Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 29 Apr 2025 23:06:43 +0530 Subject: [PATCH 115/132] Revert export-ignore --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index de5bd3d..8749e12 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -MAS export-ignore -LICENSE export-ignore -README.md export-ignore +# MAS export-ignore +# LICENSE export-ignore +# README.md export-ignore .gitattributes export-ignore From 1bdee1ce6fd3ad64d1ae708daa7df65b54993ac2 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 4 May 2025 01:03:13 +0530 Subject: [PATCH 116/132] Improve edition package detection --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 ++ MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 ++ MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 ++ MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 ++ .../Activators/Online_KMS_Activation.cmd | 2 ++ MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd | 3 +++ 6 files changed, 13 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 73ac408..b2a1df0 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1676,10 +1676,12 @@ call :dk_color %Red% "Checking License Files [Not Found] [%osed ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( +if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-%osedition%Edition*.mum" ( call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) ) +) if %_wmic% EQU 1 wmic path %sps% get Version %nul% diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 340c2a8..7c0a550 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1379,10 +1379,12 @@ call :dk_color %Red% "Checking License Files [Not Found] [%osed ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( +if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-%osedition%Edition*.mum" ( call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) ) +) if %_wmic% EQU 1 wmic path %sps% get Version %nul% diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 3f99aee..426549b 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1522,10 +1522,12 @@ call :dk_color %Red% "Checking License Files [Not Found] [%osed ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( +if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-%osedition%Edition*.mum" ( call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) ) +) if %_wmic% EQU 1 wmic path %sps% get Version %nul% diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index ca9a308..d46343b 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2040,10 +2040,12 @@ call :dk_color %Red% "Checking License Files [Not Found] [%osed ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( +if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-%osedition%Edition*.mum" ( call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) ) +) if %_wmic% EQU 1 wmic path %sps% get Version %nul% diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index bb6fd92..4fd6303 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3092,10 +3092,12 @@ call :dk_color %Red% "Checking License Files [Not Found] [%osed ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( +if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-%osedition%Edition*.mum" ( call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) ) +) if %_wmic% EQU 1 wmic path %sps% get Version %nul% diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 40d9914..9bf5ba0 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -2706,10 +2706,13 @@ call :dk_color %Red% "Checking License Files [Not Found] [%osed ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( +if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-%osedition%Edition*.mum" ( call :dk_color %Red% "Checking Package Files [Not Found] [%osedition%]" ) ) ) +) + if %_wmic% EQU 1 wmic path %sps% get Version %nul% if %_wmic% EQU 0 %psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% From dfebdefebaf1b4ba3052b4ebe165482d7aaa13a4 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 4 May 2025 02:21:50 +0530 Subject: [PATCH 117/132] Add Office 2010 Publisher Retail key --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index b2a1df0..ecc78bc 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -3422,7 +3422,6 @@ exit /b 14_7004b7f0-6407-4f45-8eac-966e5f868bde_Retail________GrooveR 14_fbf4ac36-31c8-4340-8666-79873129cf40_Retail________OutlookR 14_133c8359-4e93-4241-8118-30bb18737ea0_Retail________PowerPointR_[HSPowerPointR] -14_98677603-a668-4fa4-9980-3f1f05f78f69_Retail________PublisherR 14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_Retail________WordR_[HSWordR] 14_dbe3aee0-5183-4ff7-8142-66050173cb01_Retail________SmallBusBasicsR_[SmallBusBasicsMSDNR] @@ -3460,6 +3459,7 @@ for %%# in ( 14_11b39439-6b93-4642-9570-f2eb81be2238_4DTT4-D4MKX-23KFH-JKR6T-YK%f%G2J_MAK___________ProjectStdVL 14_71af7e84-93e6-4363-9b69-699e04e74071_2J9H6-H4D3G-PCXD2-96XVM-TR%f%R73_Retail________ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] 14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_6CD6C-9R8PB-T2D9Y-8RKKX-W7%f%DFK_MAK___________ProPlusVL_[ProPlusAcadVL] +14_98677603-a668-4fa4-9980-3f1f05f78f69_CTRJP-P72VV-JBF8Y-4W6WW-HX%f%HVG_Retail________PublisherR 14_3d014759-b128-4466-9018-e80f6320d9d0_32YG9-3VX77-YXJVV-PRVFW-TT%f%8BV_MAK___________PublisherVL 14_8090771e-d41a-4482-929e-de87f1f47e46_7VKXH-9BWCG-RPTBB-JBRV3-GR%f%HYC_MAK___________SmallBusBasicsVL 14_b78df69e-0966-40b1-ae85-30a5134dedd0_H48K6-FB4Y6-P83GH-9J7XG-HD%f%KKX_ByPass________SPDR diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index d46343b..75115e8 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2398,7 +2398,6 @@ exit /b 14_7004b7f0-6407-4f45-8eac-966e5f868bde_Retail________GrooveR 14_fbf4ac36-31c8-4340-8666-79873129cf40_Retail________OutlookR 14_133c8359-4e93-4241-8118-30bb18737ea0_Retail________PowerPointR_[HSPowerPointR] -14_98677603-a668-4fa4-9980-3f1f05f78f69_Retail________PublisherR 14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_Retail________WordR_[HSWordR] 14_dbe3aee0-5183-4ff7-8142-66050173cb01_Retail________SmallBusBasicsR_[SmallBusBasicsMSDNR] @@ -2436,6 +2435,7 @@ for %%# in ( 14_11b39439-6b93-4642-9570-f2eb81be2238_4DTT4-D4MKX-23KFH-JKR6T-YK%f%G2J_MAK___________ProjectStdVL 14_71af7e84-93e6-4363-9b69-699e04e74071_2J9H6-H4D3G-PCXD2-96XVM-TR%f%R73_Retail________ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] 14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_6CD6C-9R8PB-T2D9Y-8RKKX-W7%f%DFK_MAK___________ProPlusVL_[ProPlusAcadVL] +14_98677603-a668-4fa4-9980-3f1f05f78f69_CTRJP-P72VV-JBF8Y-4W6WW-HX%f%HVG_Retail________PublisherR 14_3d014759-b128-4466-9018-e80f6320d9d0_32YG9-3VX77-YXJVV-PRVFW-TT%f%8BV_MAK___________PublisherVL 14_8090771e-d41a-4482-929e-de87f1f47e46_7VKXH-9BWCG-RPTBB-JBRV3-GR%f%HYC_MAK___________SmallBusBasicsVL 14_b78df69e-0966-40b1-ae85-30a5134dedd0_H48K6-FB4Y6-P83GH-9J7XG-HD%f%KKX_ByPass________SPDR From b24bb9bde121a2fea55ac6c634f1bc510cdf3265 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 4 May 2025 17:04:06 +0530 Subject: [PATCH 118/132] Remove () from product name --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index ecc78bc..ce5eecb 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1400,7 +1400,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '' -replace [string][char]0xae, '' -replace [string][char]0x2122, '' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 7c0a550..49f841e 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1103,7 +1103,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '' -replace [string][char]0xae, '' -replace [string][char]0x2122, '' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index 426549b..e4690df 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1201,7 +1201,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '' -replace [string][char]0xae, '' -replace [string][char]0x2122, '' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 75115e8..7b9488b 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1779,7 +1779,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '' -replace [string][char]0xae, '' -replace [string][char]0x2122, '' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 4fd6303..07c41ad 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -2771,7 +2771,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '' -replace [string][char]0xae, '' -replace [string][char]0x2122, '' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 9bf5ba0..13e9eb0 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -2430,7 +2430,7 @@ exit /b :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); -set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' +set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '' -replace [string][char]0xae, '' -replace [string][char]0x2122, '' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) From 9e80556df50d7273a6fbd4d28104ba635b7746a2 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 5 May 2025 22:25:54 +0530 Subject: [PATCH 119/132] Add O365AppsBasicRetail support --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 1 + MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 1 + 2 files changed, 2 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index ce5eecb..04a0245 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -3524,6 +3524,7 @@ for %%# in ( 15_e3dacc06-3bc2-4e13-8e59-8e05f3232325_H8DN8-Y2YP3-CR9JT-DHDR9-C7%f%GP3_Subscription2_O365ProPlusRetail 15_0bc1dae4-6158-4a1c-a893-807665b934b2_2QCNB-RMDKJ-GC8PB-7QGQV-7Q%f%TQJ_Subscription2_O365SmallBusPremRetail :: Office 365 - 16.0 version +16_dabaa1f2-109b-496d-bf49-1536cc862900_3HYJN-9KG99-F8VG9-V3DT8-JF%f%MHV_Subscription__O365AppsBasicRetail 16_742178ed-6b28-42dd-b3d7-b7c0ea78741b_Y9NF9-M2QWD-FF6RJ-QJW36-RR%f%F2T_SubTest_______O365BusinessRetail 16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_W62NQ-267QR-RTF74-PF2MH-JQ%f%MTH_Subscription__O365EduCloudRetail 16_a96f8dae-da54-4fad-bdc6-108da592707a_3NMDC-G7C3W-68RGP-CB4MH-4C%f%XCH_SubTest1______O365HomePremRetail diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 7b9488b..ae020f8 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2500,6 +2500,7 @@ for %%# in ( 15_e3dacc06-3bc2-4e13-8e59-8e05f3232325_H8DN8-Y2YP3-CR9JT-DHDR9-C7%f%GP3_Subscription2_O365ProPlusRetail 15_0bc1dae4-6158-4a1c-a893-807665b934b2_2QCNB-RMDKJ-GC8PB-7QGQV-7Q%f%TQJ_Subscription2_O365SmallBusPremRetail :: Office 365 - 16.0 version +16_dabaa1f2-109b-496d-bf49-1536cc862900_3HYJN-9KG99-F8VG9-V3DT8-JF%f%MHV_Subscription__O365AppsBasicRetail 16_742178ed-6b28-42dd-b3d7-b7c0ea78741b_Y9NF9-M2QWD-FF6RJ-QJW36-RR%f%F2T_SubTest_______O365BusinessRetail 16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_W62NQ-267QR-RTF74-PF2MH-JQ%f%MTH_Subscription__O365EduCloudRetail 16_a96f8dae-da54-4fad-bdc6-108da592707a_3NMDC-G7C3W-68RGP-CB4MH-4C%f%XCH_SubTest1______O365HomePremRetail From bcc4214e8ab8919d7cb81aad2ba1043b554f2cf0 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Mon, 5 May 2025 22:38:51 +0530 Subject: [PATCH 120/132] Add O365AppsBasicRetail conversion in KMS script --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 04a0245..a450c44 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -13851,7 +13851,7 @@ d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3_6Q7VD-NX8JD-WJ2VH-88V73-4G%f%BJ7__15_WordVo 67c0fc0c-deba-401b-bf8b-9c8ad8395804_GNH9Y-D2J4T-FJHGG-QRVH7-QP%f%FDW__16_AccessVolume_-AccessRetail- c3e65d36-141f-4d2f-a303-a842ee756a29_9C2PK-NWTVB-JMPW8-BFT28-7F%f%TBF__16_ExcelVolume_-ExcelRetail- e914ea6e-a5fa-4439-a394-a9bb3293ca09_DMTCJ-KNRKX-26982-JYCKT-P7%f%KB6__16_MondoRetail -9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce_HFTND-W9MK4-8B7MJ-B6C4G-XQ%f%BR2__16_MondoVolume_-O365BusinessRetail-O365EduCloudRetail-O365HomePremRetail-O365ProPlusRetail-O365SmallBusPremRetail- +9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce_HFTND-W9MK4-8B7MJ-B6C4G-XQ%f%BR2__16_MondoVolume_-O365AppsBasicRetail-O365BusinessRetail-O365EduCloudRetail-O365HomePremRetail-O365ProPlusRetail-O365SmallBusPremRetail- 436366de-5579-4f24-96db-3893e4400030_XYNTG-R96FY-369HX-YFPHY-F9%f%CPM__16_OneNoteFreeRetail_[Bypass] d8cace59-33d2-4ac7-9b1b-9b72339c51c8_DR92N-9HTF2-97XKM-XW2WJ-XW%f%3J6__16_OneNoteVolume_-OneNoteRetail-OneNote2021Retail- ec9d9265-9d1e-4ed0-838a-cdc20f2551a1_R69KK-NTPKF-7M3Q4-QYBHW-6M%f%T9B__16_OutlookVolume_-OutlookRetail- diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 07c41ad..d15779f 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3807,7 +3807,7 @@ d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3_6Q7VD-NX8JD-WJ2VH-88V73-4G%f%BJ7__15_WordVo 67c0fc0c-deba-401b-bf8b-9c8ad8395804_GNH9Y-D2J4T-FJHGG-QRVH7-QP%f%FDW__16_AccessVolume_-AccessRetail- c3e65d36-141f-4d2f-a303-a842ee756a29_9C2PK-NWTVB-JMPW8-BFT28-7F%f%TBF__16_ExcelVolume_-ExcelRetail- e914ea6e-a5fa-4439-a394-a9bb3293ca09_DMTCJ-KNRKX-26982-JYCKT-P7%f%KB6__16_MondoRetail -9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce_HFTND-W9MK4-8B7MJ-B6C4G-XQ%f%BR2__16_MondoVolume_-O365BusinessRetail-O365EduCloudRetail-O365HomePremRetail-O365ProPlusRetail-O365SmallBusPremRetail- +9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce_HFTND-W9MK4-8B7MJ-B6C4G-XQ%f%BR2__16_MondoVolume_-O365AppsBasicRetail-O365BusinessRetail-O365EduCloudRetail-O365HomePremRetail-O365ProPlusRetail-O365SmallBusPremRetail- 436366de-5579-4f24-96db-3893e4400030_XYNTG-R96FY-369HX-YFPHY-F9%f%CPM__16_OneNoteFreeRetail_[Bypass] d8cace59-33d2-4ac7-9b1b-9b72339c51c8_DR92N-9HTF2-97XKM-XW2WJ-XW%f%3J6__16_OneNoteVolume_-OneNoteRetail-OneNote2021Retail- ec9d9265-9d1e-4ed0-838a-cdc20f2551a1_R69KK-NTPKF-7M3Q4-QYBHW-6M%f%T9B__16_OutlookVolume_-OutlookRetail- From b3aaff5110772927d0c4b6bdcb486d45b730a3aa Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 17:14:27 +0530 Subject: [PATCH 121/132] Update Windows 7 ESU 4-6y info --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 3 ++- MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index a450c44..daccd34 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -4514,7 +4514,8 @@ goto :ts_off if defined esuexistsup ( echo "%tsids%" | find /i "4220f546-f522-46df-8202-4d07afd26454" %nul1% && ( echo "%tsids%" | find /i "7e94be23-b161-4956-a682-146ab291774c" %nul1% || ( -call :dk_color %Gray% "Now update Windows to get Client-ESU-Year6[4-6y] license and activate that using this script." +call :dk_color %Gray% "To get Client-ESU-Year6[4-6y] license, install updates from the below URL." +call :dk_color %Blue% "%mas%tsforge#windows-esu" ) ) goto :ts_off diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 13e9eb0..732ac71 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -902,7 +902,8 @@ goto :ts_off if defined esuexistsup ( echo "%tsids%" | find /i "4220f546-f522-46df-8202-4d07afd26454" %nul1% && ( echo "%tsids%" | find /i "7e94be23-b161-4956-a682-146ab291774c" %nul1% || ( -call :dk_color %Gray% "Now update Windows to get Client-ESU-Year6[4-6y] license and activate that using this script." +call :dk_color %Gray% "To get Client-ESU-Year6[4-6y] license, install updates from the below URL." +call :dk_color %Blue% "%mas%tsforge#windows-esu" ) ) goto :ts_off From 2a806c2e0cb64cd600476261963b8b7a0f59951c Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 17:39:26 +0530 Subject: [PATCH 122/132] Fix ARM32 Office detection --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 40 +++++++++---------- .../Activators/Ohook_Activation_AIO.cmd | 12 +++--- .../Activators/Online_KMS_Activation.cmd | 12 +++--- .../Activators/TSforge_Activation.cmd | 12 +++--- MAS/Separate-Files-Version/Troubleshoot.cmd | 12 +++--- 5 files changed, 44 insertions(+), 44 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index daccd34..2bfd051 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2296,8 +2296,8 @@ set o16uwp= set _68=HKLM\SOFTWARE\Microsoft\Office set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=Office 2010 MSI ) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=Office 2010 MSI ) %nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R %nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R @@ -2730,12 +2730,12 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" % for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_86%\15.0\ClickToRun) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_68%\15.0\ClickToRun) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) exit /b @@ -4590,8 +4590,8 @@ set o14c2r= set _68=HKLM\SOFTWARE\Microsoft\Office set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=Office 2010 MSI ) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=Office 2010 MSI ) %nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R %nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R @@ -5305,10 +5305,10 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" % for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_86%\15.0\ClickToRun) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_68%\15.0\ClickToRun) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) exit /b @@ -16026,12 +16026,12 @@ set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office reg query %_68%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_68=Office 14.0 C2R x86/x64" & set "c2r14repair68=") reg query %_86%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_86=Office 14.0 C2R x86" & set "c2r14repair86=") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_86=Office 14.0 MSI x86" & call :getrepairsetup msi14repair86 14) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_68=Office 14.0 MSI x86/x64" & call :getrepairsetup msi14repair68 14) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_86=Office 15.0 MSI x86" & call :getrepairsetup msi15repair86 15) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_68=Office 15.0 MSI x86/x64" & call :getrepairsetup msi15repair68 15) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_86=Office 16.0 MSI x86" & call :getrepairsetup msi16repair86 16) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & call :getrepairsetup msi16repair68 16) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi14_86=Office 14.0 MSI x86" & call :getrepairsetup msi14repair86 14) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi14_68=Office 14.0 MSI x86/x64" & call :getrepairsetup msi14repair68 14) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi15_86=Office 15.0 MSI x86" & call :getrepairsetup msi15repair86 15) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi15_68=Office 15.0 MSI x86/x64" & call :getrepairsetup msi15repair68 15) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi16_86=Office 16.0 MSI x86" & call :getrepairsetup msi16repair86 16) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & call :getrepairsetup msi16repair68 16) for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_86=Office 15.0 C2R x86" & call :getc2rrepair c2r15repair86 integratedoffice.exe) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_68=Office 15.0 C2R x86/x64" & call :getc2rrepair c2r15repair68 integratedoffice.exe) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index ae020f8..c76640c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -907,12 +907,12 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" % for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_86%\15.0\ClickToRun) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_68%\15.0\ClickToRun) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) exit /b diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index d15779f..1eb8924 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1073,12 +1073,12 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" % for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_86%\15.0\ClickToRun) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_68%\15.0\ClickToRun) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) exit /b diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 732ac71..cbfaa23 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -978,8 +978,8 @@ set o14c2r= set _68=HKLM\SOFTWARE\Microsoft\Office set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=Office 2010 MSI ) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o14msi=Office 2010 MSI ) %nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R %nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R @@ -1693,10 +1693,10 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" % for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_86%\15.0\ClickToRun) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set o15c2r=1&set o15c2r_reg=%_68%\15.0\ClickToRun) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o16msi=1&set o16msi_reg=%_86%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) exit /b diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index bc4d49d..9106452 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -874,12 +874,12 @@ set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office reg query %_68%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_68=Office 14.0 C2R x86/x64" & set "c2r14repair68=") reg query %_86%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_86=Office 14.0 C2R x86" & set "c2r14repair86=") -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_86=Office 14.0 MSI x86" & call :getrepairsetup msi14repair86 14) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi14_68=Office 14.0 MSI x86/x64" & call :getrepairsetup msi14repair68 14) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_86=Office 15.0 MSI x86" & call :getrepairsetup msi15repair86 15) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi15_68=Office 15.0 MSI x86/x64" & call :getrepairsetup msi15repair68 15) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_86=Office 16.0 MSI x86" & call :getrepairsetup msi16repair86 16) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & call :getrepairsetup msi16repair68 16) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi14_86=Office 14.0 MSI x86" & call :getrepairsetup msi14repair86 14) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi14_68=Office 14.0 MSI x86/x64" & call :getrepairsetup msi14repair68 14) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi15_86=Office 15.0 MSI x86" & call :getrepairsetup msi15repair86 15) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi15_68=Office 15.0 MSI x86/x64" & call :getrepairsetup msi15repair68 15) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi16_86=Office 16.0 MSI x86" & call :getrepairsetup msi16repair86 16) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & call :getrepairsetup msi16repair68 16) for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_86=Office 15.0 C2R x86" & call :getc2rrepair c2r15repair86 integratedoffice.exe) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_68=Office 15.0 C2R x86/x64" & call :getc2rrepair c2r15repair68 integratedoffice.exe) From a514a99d0e0e3e8337bae572fafb32d8ebddf37c Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 17:47:27 +0530 Subject: [PATCH 123/132] Update an error message in KMS script --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 2bfd051..26b88fb 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -12471,7 +12471,7 @@ call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 ! call :dk_color %Blue% "Make sure you are using Latest MAS script." ) else ( call :dk_color %Red% "Checking Product In Script [!_prod! MSI Retail is not supported]" -call :dk_color %Blue% "Use Ohook option to activate it." +call :dk_color %Blue% "Use Ohook option to activate it. To activate with %KS%, you need to install Volume version of Office." ) set fixes=%fixes% %mas%genuine-installation-media call :dk_color %_Yellow% "%mas%genuine-installation-media" diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 1eb8924..d1806e3 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1225,7 +1225,7 @@ call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 ! call :dk_color %Blue% "Make sure you are using Latest MAS script." ) else ( call :dk_color %Red% "Checking Product In Script [!_prod! MSI Retail is not supported]" -call :dk_color %Blue% "Use Ohook option to activate it." +call :dk_color %Blue% "Use Ohook option to activate it. To activate with %KS%, you need to install Volume version of Office." ) set fixes=%fixes% %mas%genuine-installation-media call :dk_color %_Yellow% "%mas%genuine-installation-media" From 2b40259b335d6ac42f012fc368370c5e2aa032d8 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 18:09:33 +0530 Subject: [PATCH 124/132] Add fixes for CAS --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 6 +++--- MAS/Separate-Files-Version/Check_Activation_Status.cmd | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 26b88fb..60d09c8 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -14989,8 +14989,8 @@ function PrintLicensesInformation function vNextDiagRun { - $fNUL = ([IO.Directory]::Exists("${env:LOCALAPPDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:LOCALAPPDATA}\Microsoft\Office\Licenses", "*", 1).Length -GE 0) - $fDev = ([IO.Directory]::Exists("${env:PROGRAMDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:PROGRAMDATA}\Microsoft\Office\Licenses", "*", 1).Length -GE 0) + $fNUL = ([IO.Directory]::Exists("${env:LOCALAPPDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:LOCALAPPDATA}\Microsoft\Office\Licenses", "*", 1).Length -GT 0) + $fDev = ([IO.Directory]::Exists("${env:PROGRAMDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:PROGRAMDATA}\Microsoft\Office\Licenses", "*", 1).Length -GT 0) $rPID = $null -NE (GP "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" -EA 0 | select -Expand 'property' -EA 0 | where -Filter {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"}) $rSCA = $null -NE (GP "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" -EA 0 | select -Expand "SharedComputerLicensing" -EA 0) $rSCL = $null -NE (GP "HKLM:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing" -EA 0 | select -Expand "SharedComputerLicensing" -EA 0) @@ -15257,7 +15257,7 @@ function clcGetExpireSys return $null } - $rData = [DateTime]::FromFileTimeUTC($kuser).ToString('yyyy/MM/dd:HH:mm:ss') + $rData = [DateTime]::FromFileTimeUtc($kuser).ToString('yyyy/MM/dd:HH:mm:ss') return $rData } diff --git a/MAS/Separate-Files-Version/Check_Activation_Status.cmd b/MAS/Separate-Files-Version/Check_Activation_Status.cmd index 458b486..728b1a0 100644 --- a/MAS/Separate-Files-Version/Check_Activation_Status.cmd +++ b/MAS/Separate-Files-Version/Check_Activation_Status.cmd @@ -1072,8 +1072,8 @@ function PrintLicensesInformation function vNextDiagRun { - $fNUL = ([IO.Directory]::Exists("${env:LOCALAPPDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:LOCALAPPDATA}\Microsoft\Office\Licenses", "*", 1).Length -GE 0) - $fDev = ([IO.Directory]::Exists("${env:PROGRAMDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:PROGRAMDATA}\Microsoft\Office\Licenses", "*", 1).Length -GE 0) + $fNUL = ([IO.Directory]::Exists("${env:LOCALAPPDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:LOCALAPPDATA}\Microsoft\Office\Licenses", "*", 1).Length -GT 0) + $fDev = ([IO.Directory]::Exists("${env:PROGRAMDATA}\Microsoft\Office\Licenses")) -and ([IO.Directory]::GetFiles("${env:PROGRAMDATA}\Microsoft\Office\Licenses", "*", 1).Length -GT 0) $rPID = $null -NE (GP "HKCU:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing\LicensingNext" -EA 0 | select -Expand 'property' -EA 0 | where -Filter {$_.ToLower() -like "*retail" -or $_.ToLower() -like "*volume"}) $rSCA = $null -NE (GP "HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" -EA 0 | select -Expand "SharedComputerLicensing" -EA 0) $rSCL = $null -NE (GP "HKLM:\SOFTWARE\Microsoft\Office\16.0\Common\Licensing" -EA 0 | select -Expand "SharedComputerLicensing" -EA 0) @@ -1340,7 +1340,7 @@ function clcGetExpireSys return $null } - $rData = [DateTime]::FromFileTimeUTC($kuser).ToString('yyyy/MM/dd:HH:mm:ss') + $rData = [DateTime]::FromFileTimeUtc($kuser).ToString('yyyy/MM/dd:HH:mm:ss') return $rData } From 817bfe84de80b15cc407e423872757ec0a258ec5 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 18:26:33 +0530 Subject: [PATCH 125/132] Don't ask to run SFC scan if malware is found --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 10 ++++++++++ .../Activators/HWID_Activation.cmd | 2 ++ .../Activators/KMS38_Activation.cmd | 2 ++ .../Activators/Ohook_Activation_AIO.cmd | 2 ++ .../Activators/Online_KMS_Activation.cmd | 2 ++ .../Activators/TSforge_Activation.cmd | 2 ++ 6 files changed, 20 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 60d09c8..17472aa 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -662,11 +662,13 @@ if not exist %SysPath%\%%# ( %eline% echo [%SysPath%\%%#] file is missing, aborting... echo: +if not defined results ( call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" +) goto dk_done ) ) @@ -2248,11 +2250,13 @@ if not exist %SysPath%\%_slexe% ( %eline% echo [%SysPath%\%_slexe%] file is missing, aborting... echo: +if not defined results ( call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" +) goto dk_done ) @@ -4110,11 +4114,13 @@ if not exist %SysPath%\%_slexe% ( %eline% echo [%SysPath%\%_slexe%] file is missing, aborting... echo: +if not defined results ( call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" +) goto dk_done ) @@ -10964,11 +10970,13 @@ if defined _fmiss ( %eline% echo [%_fmiss%] file is missing, aborting... echo: +if not defined results ( call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" +) goto dk_done ) @@ -11794,11 +11802,13 @@ if not exist %SysPath%\%_slexe% ( %eline% echo [%SysPath%\%_slexe%] file is missing, aborting... echo: +if not defined results ( call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" +) goto dk_done ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index 49f841e..e6d34f0 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -381,11 +381,13 @@ if not exist %SysPath%\%%# ( %eline% echo [%SysPath%\%%#] file is missing, aborting... echo: +if not defined results ( call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" +) goto dk_done ) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index e4690df..c0fca72 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -421,11 +421,13 @@ if defined _fmiss ( %eline% echo [%_fmiss%] file is missing, aborting... echo: +if not defined results ( call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" +) goto dk_done ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index c76640c..786d239 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -427,11 +427,13 @@ if not exist %SysPath%\%_slexe% ( %eline% echo [%SysPath%\%_slexe%] file is missing, aborting... echo: +if not defined results ( call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" +) goto dk_done ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index d1806e3..bd6446e 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -489,11 +489,13 @@ if not exist %SysPath%\%_slexe% ( %eline% echo [%SysPath%\%_slexe%] file is missing, aborting... echo: +if not defined results ( call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" +) goto dk_done ) diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index cbfaa23..e85078b 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -498,11 +498,13 @@ if not exist %SysPath%\%_slexe% ( %eline% echo [%SysPath%\%_slexe%] file is missing, aborting... echo: +if not defined results ( call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot" +) goto dk_done ) From d47a750badb43077fe13ee87db4464302e14712b Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 19:29:19 +0530 Subject: [PATCH 126/132] Detect Powershell 1.0 on Server 2008 and ask to install Powershell 2.0 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 34 +++---------------- .../Activators/Ohook_Activation_AIO.cmd | 8 ++--- .../Activators/Online_KMS_Activation.cmd | 8 ++--- .../Activators/TSforge_Activation.cmd | 8 ++--- .../Extract_OEM_Folder.cmd | 8 ++--- MAS/Separate-Files-Version/Troubleshoot.cmd | 8 ++--- 6 files changed, 24 insertions(+), 50 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 17472aa..bd8d6aa 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -153,15 +153,15 @@ echo Upgrade to Windows Vista SP1 or SP2. goto dk_done ) -if not exist %ps% ( +if %winbuild% LSS 7600 if not exist "%SysPath%\WindowsPowerShell\v1.0\Modules" ( %nceline% +if not exist %ps% ( echo PowerShell is not installed in your system. -if %winbuild% LSS 7600 ( -echo Install PowerShell using the following URL. +) +echo Install PowerShell 2.0 using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -) goto dk_done ) @@ -2168,32 +2168,6 @@ for %%A in (%_act% %_rem%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== -if %winbuild% LSS 6001 ( -%nceline% -echo Unsupported OS version detected [%winbuild%]. -echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents. -if %winbuild% EQU 6000 ( -echo: -echo Windows Vista RTM is not supported because Powershell cannot be installed. -echo Upgrade to Windows Vista SP1 or SP2. -) -goto dk_done -) - -if not exist %ps% ( -%nceline% -echo PowerShell is not installed in your system. -if %winbuild% LSS 7600 ( -echo Install PowerShell using the following URL. -echo: -echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -) -goto dk_done -) - -::======================================================================================================================================== - if %_rem%==1 goto :oh_uninstall :oh_menu diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 786d239..fd9d75c 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -183,15 +183,15 @@ echo Upgrade to Windows Vista SP1 or SP2. goto dk_done ) -if not exist %ps% ( +if %winbuild% LSS 7600 if not exist "%SysPath%\WindowsPowerShell\v1.0\Modules" ( %nceline% +if not exist %ps% ( echo PowerShell is not installed in your system. -if %winbuild% LSS 7600 ( -echo Install PowerShell using the following URL. +) +echo Install PowerShell 2.0 using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -) goto dk_done ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index bd6446e..646818b 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -214,15 +214,15 @@ echo Upgrade to Windows Vista SP1 or SP2. goto dk_done ) -if not exist %ps% ( +if %winbuild% LSS 7600 if not exist "%SysPath%\WindowsPowerShell\v1.0\Modules" ( %nceline% +if not exist %ps% ( echo PowerShell is not installed in your system. -if %winbuild% LSS 7600 ( -echo Install PowerShell using the following URL. +) +echo Install PowerShell 2.0 using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -) goto dk_done ) diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index e85078b..3a905c7 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -220,15 +220,15 @@ echo Upgrade to Windows Vista SP1 or SP2. goto dk_done ) -if not exist %ps% ( +if %winbuild% LSS 7600 if not exist "%SysPath%\WindowsPowerShell\v1.0\Modules" ( %nceline% +if not exist %ps% ( echo PowerShell is not installed in your system. -if %winbuild% LSS 7600 ( -echo Install PowerShell using the following URL. +) +echo Install PowerShell 2.0 using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -) goto dk_done ) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index 7f6eb25..cd5e205 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -144,15 +144,15 @@ echo Upgrade to Windows Vista SP1 or SP2. goto done2 ) -if not exist %ps% ( +if %winbuild% LSS 7600 if not exist "%SysPath%\WindowsPowerShell\v1.0\Modules" ( %nceline% +if not exist %ps% ( echo PowerShell is not installed in your system. -if %winbuild% LSS 7600 ( -echo Install PowerShell using the following URL. +) +echo Install PowerShell 2.0 using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -) goto done2 ) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 9106452..35768a8 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -145,15 +145,15 @@ echo Upgrade to Windows Vista SP1 or SP2. goto dk_done ) -if not exist %ps% ( +if %winbuild% LSS 7600 if not exist "%SysPath%\WindowsPowerShell\v1.0\Modules" ( %nceline% +if not exist %ps% ( echo PowerShell is not installed in your system. -if %winbuild% LSS 7600 ( -echo Install PowerShell using the following URL. +) +echo Install PowerShell 2.0 using the following URL. echo: echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 -) goto dk_done ) From 93cf3864f5a73e9b8f61487eafcbac18ea1bf2b9 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 19:53:15 +0530 Subject: [PATCH 127/132] Directly go back when asked to press key to ignore opening support page --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 1 + MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 1 + MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 1 + MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd | 1 + MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd | 1 + MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd | 1 + MAS/Separate-Files-Version/Change_Office_Edition.cmd | 1 + MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 1 + MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 1 + MAS/Separate-Files-Version/Troubleshoot.cmd | 1 + 10 files changed, 10 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index bd8d6aa..906a9fc 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -2003,6 +2003,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 exit /b if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index e6d34f0..d68c09e 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1706,6 +1706,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 exit /b if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index c0fca72..a49fe55 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1849,6 +1849,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 exit /b if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index fd9d75c..8d18eb1 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -2367,6 +2367,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 exit /b if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index 646818b..eff4e33 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -3419,6 +3419,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 exit /b if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 3a905c7..00c87f2 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -3034,6 +3034,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 exit /b if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index 951a5b9..e77887e 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1475,6 +1475,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 exit /b if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index 6529adf..bcd09b1 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -1057,6 +1057,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 exit /b if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index cd5e205..dc10cbf 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -731,6 +731,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 exit /b if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 35768a8..76df77f 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1488,6 +1488,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 exit /b if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) From be9215b7284f2666175d7a55fea45ebdfe446e93 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 20:01:06 +0530 Subject: [PATCH 128/132] Fix goback button in change Office edition script --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 1 + MAS/Separate-Files-Version/Change_Office_Edition.cmd | 1 + 2 files changed, 2 insertions(+) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 906a9fc..221183f 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -18242,6 +18242,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 goto :oemenu if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index e77887e..a04e7ad 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1111,6 +1111,7 @@ if defined fixes ( call :dk_color %White% "Follow ALL the ABOVE blue lines. " call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore" choice /C:10 /N +if !errorlevel!==2 goto :oemenu if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) From 2a2352428eb2735ceb973f1d3795948dddf71752 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 22:36:13 +0530 Subject: [PATCH 129/132] 3.2 --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 4 ++-- MAS/Separate-Files-Version/Activators/HWID_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd | 2 +- .../Activators/Ohook_Activation_AIO.cmd | 2 +- .../Activators/Online_KMS_Activation.cmd | 2 +- MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd | 2 +- MAS/Separate-Files-Version/Change_Office_Edition.cmd | 2 +- MAS/Separate-Files-Version/Change_Windows_Edition.cmd | 2 +- MAS/Separate-Files-Version/Extract_OEM_Folder.cmd | 2 +- MAS/Separate-Files-Version/Troubleshoot.cmd | 2 +- README.md | 4 ++-- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index 221183f..be4714c 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1,5 +1,5 @@ -@::de62hd8-random -@set masver=3.1 +@::7f8jhe-random +@set masver=3.2 @setlocal DisableDelayedExpansion @echo off diff --git a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd index d68c09e..7e5bce3 100644 --- a/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/HWID_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=3.1 +@set masver=3.2 @echo off diff --git a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd index a49fe55..4dbf2ca 100644 --- a/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/KMS38_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=3.1 +@set masver=3.2 @echo off diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 8d18eb1..d9dbe1f 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1,4 +1,4 @@ -@set masver=3.1 +@set masver=3.2 @echo off diff --git a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd index eff4e33..0d0bdf8 100644 --- a/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/Online_KMS_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=3.1 +@set masver=3.2 @echo off diff --git a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd index 00c87f2..b5bf9f5 100644 --- a/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd +++ b/MAS/Separate-Files-Version/Activators/TSforge_Activation.cmd @@ -1,4 +1,4 @@ -@set masver=3.1 +@set masver=3.2 @echo off diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd index a04e7ad..6fd6571 100644 --- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Office_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=3.1 +@set masver=3.2 @echo off diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd index bcd09b1..e0fa600 100644 --- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd +++ b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd @@ -1,4 +1,4 @@ -@set masver=3.1 +@set masver=3.2 @echo off diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd index dc10cbf..a896e2b 100644 --- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd +++ b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd @@ -1,4 +1,4 @@ -@set masver=3.1 +@set masver=3.2 @echo off diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd index 76df77f..415ee1a 100644 --- a/MAS/Separate-Files-Version/Troubleshoot.cmd +++ b/MAS/Separate-Files-Version/Troubleshoot.cmd @@ -1,4 +1,4 @@ -@set masver=3.1 +@set masver=3.2 @echo off diff --git a/README.md b/README.md index b3fdf00..61accf5 100644 --- a/README.md +++ b/README.md @@ -71,8 +71,8 @@ or --- ``` -Latest Version: 3.1 -Release date: 29-Apr-2025 +Latest Version: 3.2 +Release date: 6-May-2025 ``` ### [Troubleshooting / Help](https://massgrave.dev/troubleshoot) From bf28e4fbddb9d6362ebe17f5fb890ff5a3c92d35 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 22:37:54 +0530 Subject: [PATCH 130/132] export-ignore --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index 8749e12..de5bd3d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -# MAS export-ignore -# LICENSE export-ignore -# README.md export-ignore +MAS export-ignore +LICENSE export-ignore +README.md export-ignore .gitattributes export-ignore From 2d00dfa704c709b78303191c4b66fe9ae533dced Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 6 May 2025 23:10:58 +0530 Subject: [PATCH 131/132] Revert export-ignore --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index de5bd3d..8749e12 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -MAS export-ignore -LICENSE export-ignore -README.md export-ignore +# MAS export-ignore +# LICENSE export-ignore +# README.md export-ignore .gitattributes export-ignore From a149fc5f2048b135c649a04da89e1b2f3178b449 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sun, 18 May 2025 12:52:40 +0530 Subject: [PATCH 132/132] Change hash --- MAS/All-In-One-Version-KL/MAS_AIO.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAS/All-In-One-Version-KL/MAS_AIO.cmd b/MAS/All-In-One-Version-KL/MAS_AIO.cmd index be4714c..8148441 100644 --- a/MAS/All-In-One-Version-KL/MAS_AIO.cmd +++ b/MAS/All-In-One-Version-KL/MAS_AIO.cmd @@ -1,4 +1,4 @@ -@::7f8jhe-random +@::fh36d7f-random @set masver=3.2 @setlocal DisableDelayedExpansion @echo off