Windows Editions Reconstruction Project

Discussion in 'Windows 10' started by whatever127, Jan 10, 2020.

  1. ylx

    ylx MDL Junior Member

    Dec 14, 2014
    74
    37
    0
    #4921 ylx, Sep 28, 2021
    Last edited: Sep 28, 2021
  2. kibkalo

    kibkalo MDL Addicted

    Sep 8, 2009
    578
    226
    30
    For all the buzz around win32calc - and the need of offline custom updates.
    You are a known guru of HKLM\Software\Microsoft\Windows\Current Version\Component Based Servicing\....
    What do I need to remove from PackageDetect (and do I need to uninstall win32calc package after conversion to entS) - so that SFC doesn't check this package - and standard updates apply.
    I bet it's just few strings REG file.
    And weeks of menhours to explore if you don't give a hint :)
     
  3. xinso

    xinso MDL Guru

    Mar 5, 2009
    12,699
    13,702
    340
    #4923 xinso, Sep 28, 2021
    Last edited: Sep 28, 2021
    Wait 'till official release and use original Win32Calc. (I am waiting too.)
     
  4. xinso

    xinso MDL Guru

    Mar 5, 2009
    12,699
    13,702
    340
  5. kibkalo

    kibkalo MDL Addicted

    Sep 8, 2009
    578
    226
    30
    That's not interesting )
    1) I don't use LTSC and don't use Win10 anymore
    2) The how to modify [Packages] and [PackageDetect] is way more usefull. I still am not able to understand, what you conversion script does to CBS when you create Full-UI Hyper-V Server 2019, - and updates are installed online, without reverting to Core as in my case. And I want not just understand, but repeat that on AzureStackHCICor 2022.

    Now I am honest, why I asked :)
    Screw the calculator!
     
  6. xinso

    xinso MDL Guru

    Mar 5, 2009
    12,699
    13,702
    340
    #4926 xinso, Sep 28, 2021
    Last edited: Sep 28, 2021
    I know but I can't.
     
  7. kibkalo

    kibkalo MDL Addicted

    Sep 8, 2009
    578
    226
    30
    Sorry, I had a chance and I tried :)
     
  8. spanishfly

    spanishfly MDL Senior Member

    Dec 5, 2018
    352
    527
    10
    I'm not a guru. More of a punter. I successfully uninstalled win32calc package after conversion to entS in the Windows 10 Enterprise IoT vNext Reconstruction Project (SPP project).
    I tried it offline straight after EntS creation and also online. Nothing I did made any difference. I agree, we must
    Of couse, updating IoT vNext 19043 using easily obtained baseless psf/cab pairs works great! So is there a problem?

    ***You can "play" yourself. Maybe you'll figure out something new??
    If you only install @Horwatt 's calc cabs, then calculator files are only in the WinSxS image folder. This makes image clean-up simplier. To clean WinSxS requires elevated privlidges. I use @BAU 's script.
    This is only "step one." Step two is, as you say, mess with the registry. I did try deleting from the registry all evidence of there ever having been a legacy calculator, but that's a bit brutal and didn't solve the non-baseless update issue.

    Code:
    REG Delete "HKLM\SOFTWARE\Classes\calculator" /f >NUL
    REG Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Calculator/Debug" /f >NUL
    REG Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Calculator/Diagnostic" /f >NUL
    REG Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{75f48521-4131-4ac3-9887-65473224fcb2}" /f >NUL
       
    ::needs elevation
    REG Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellCompatibility\InboxApp" /v "56230F2FD0CC3EB4_Calculator_lnk_amd64.lnk" /f >NUL
    REG Delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\WindowsFeatureCategories" /v "COMMONSTART/Programs/Accessories/Calculator.lnk" /f >NUL
    REG Delete "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Management\WindowsFeatureCategories" /v "COMMONSTART/Programs/Accessories/Calculator.lnk"" /f >NUL
    
    
    REG Delete "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Applets\Calculator\Capabilities" /v "ApplicationName" /t REG_EXPAND_SZ /d "%SystemRoot%\System32\win32calc.exe" /f >NUL
    REG Delete "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Applets\Calculator\Capabilities" /v "ApplicationDescription" /t REG_EXPAND_SZ /d "%SystemRoot%\System32\win32calc.exe,-217" /f >NUL
    REG Delete "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Applets\Calculator\Capabilities\URLAssociations" /v "calculator" /t REG_SZ /d "calculator" /f >NUL

    BAU elevated offline mounted Remove-Package and delete actual apps and mui.cmd
    Code:
    @ECHO OFF
    CHCP 437 >NUL
    COLOR 1F
    
    :: [info] to integrate in .bat files, add this line before main code then RunAsTI snippet on bottom
    whoami|findstr /i /c:"nt authority\system" >nul || ( call :RunAsTI "%~f0" %* & exit/b )
    
    pushd "%~dp0"
    
    DISM /LogLevel:1 /logpath:logs\RemoveCalc-FeaturePack.log /image:mount /Remove-Package /PackageName:Microsoft-Windows-win32calc-Package~31bf3856ad364e35~amd64~~10.0.19041.1
    DISM /LogLevel:1 /logpath:logs\RemoveCalcLanguagePack.log /image:mount /Remove-Package /PackageName:Microsoft-Windows-win32calc-Package~31bf3856ad364e35~amd64~en-US~10.0.19041.1
    
    :: === @@ Delete calculator @@ === ::
    ECHO Delete Win32Calc straggler files
    ECHO:
    
    ::====  x64 - WinSxS - =====
    rmdir /q /s mount\Windows\WinSxS\amd64_microsoft-windows-win32calc_31bf3856ad364e35_10.0.17763.1_none_3a7509176fdfd06a >NUL 2>&1
    
    ::====  x86 - WinSxS - =====
    rmdir /q /s mount\Windows\WinSxS\wow64_microsoft-windows-win32calc_31bf3856ad364e35_10.0.17763.1_none_44c9b369a4409265 >NUL 2>&1
    
    ECHO:
    ECHO Done
    ECHO:
    PAUSE
    
    popd
    
    ::exit
    
    #:RunAsTI: #1 snippet to run as TI/System, with /high priority, /priv ownership, explorer and HKCU load
    set ^ #=& set "0=%~f0"& set 1=%*& powershell -nop -c iex(([io.file]::ReadAllText($env:0)-split':RunAsTI\:.*')[1])& exit/b
    $_CAN_PASTE_DIRECTLY_IN_POWERSHELL='^,^'; function RunAsTI ($cmd) { $id='RunAsTI'; $sid=((whoami /user)-split' ')[-1]; $code=@'
    $ti=(whoami /groups)-like"*1-16-16384*"; $DM=[AppDomain]::CurrentDomain."DefineDynamicAss`embly"(1,1)."DefineDynamicMod`ule"(1)
    $D=@(); 0..5|% {$D+=$DM."DefineT`ype"("M$_",1179913,[ValueType])}; $I=[int32];$P=$I.module.gettype("System.Int`Ptr"); $U=[uintptr]
    $D+=$U; 4..6|% {$D+=$D[$_]."MakeB`yRefType"()};$M=$I.module.gettype("System.Runtime.Interop`Services.Mar`shal");$Z=[uintptr]::size
    $S=[string]; $F="kernel","advapi","advapi",($S,$S,$I,$I,$I,$I,$I,$S,$D[7],$D[8]),($U,$S,$I,$I,$D[9]),($U,$S,$I,$I,[byte[]],$I)
    0..2|% {$9=$D[0]."DefinePInvokeMeth`od"(("CreateProcess","RegOpenKeyEx","RegSetValueEx")[$_],$F[$_]+'32',8214,1,$S,$F[$_+3],1,4)}
    $DF=0,($P,$I,$P),($I,$I,$I,$I,$P,$D[1]),($I,$S,$S,$S,$I,$I,$I,$I,$I,$I,$I,$I,[int16],[int16],$P,$P,$P,$P),($D[3],$P),($P,$P,$I,$I)
    1..5|% {$k=$_;$n=1;$AveYo=1; $DF[$_]|% {$9=$D[$k]."DefineFie`ld"('f'+$n++,$_,6)}}; $T=@(); 0..5|% {$T+=$D[$_]."CreateT`ype"()}
    0..5|% {nv "A$_" ([Activator]::CreateInstance($T[$_])) -force}; function F ($1,$2) {$T[0]."GetMeth`od"($1).invoke(0,$2)};
    if (!$ti) { $g=0; "TrustedInstaller","lsass"|% {if (!$g) {net1 start $_ 2>&1 >$null; $g=@(get-process -name $_ -ea 0|% {$_})[0]}}
     function M($1,$2,$3){$M."GetMeth`od"($1,[type[]]$2).invoke(0,$3)}; $H=@(); $Z,(4*$Z+16)|% {$H+=M "AllocHG`lobal" $I $_};
     M "WriteInt`Ptr" ($P,$P) ($H[0],$g.Handle); $A1.f1=131072;$A1.f2=$Z;$A1.f3=$H[0];$A2.f1=1;$A2.f2=1;$A2.f3=1;$A2.f4=1;$A2.f6=$A1
     $A3.f1=10*$Z+32;$A4.f1=$A3;$A4.f2=$H[1]; M "StructureTo`Ptr" ($D[2],$P,[boolean]) (($A2 -as $D[2]),$A4.f2,$false); $w=0x0E080600
     $out=@($null,"powershell -win 1 -nop -c iex `$env:A",0,0,0,$w,0,$null,($A4 -as $T[4]),($A5 -as $T[5])); F "CreateProcess" $out
    } else { $env:A=''; $PRIV=[uri].module.gettype("System.Diagnostics.Process")."GetMeth`ods"(42) |? {$_.Name -eq "SetPrivilege"}
     "SeSecurityPrivilege","SeTakeOwnershipPrivilege","SeBackupPrivilege","SeRestorePrivilege" |% {$PRIV.Invoke(0, @("$_",2))}
     $HKU=[uintptr][uint32]2147483651; $LNK=$HKU; $reg=@($HKU,"S-1-5-18",8,2,($LNK -as $D[9])); F "RegOpenKeyEx" $reg; $LNK=$reg[4]
     function SYM($1,$2){$b=[Text.Encoding]::Unicode.GetBytes("\Registry\User\$1");@($2,"SymbolicLinkValue",0,6,[byte[]]$b,$b.Length)}
     F "RegSetValueEx" (SYM $(($key-split'\\')[1]) $LNK); $EXP="HKLM:\Software\Classes\AppID\{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}"
     $r="explorer"; if (!$cmd) {$cmd='C:\'}; $dir=test-path -lit ((($cmd -split '^("[^"]+")|^([^\s]+)') -ne'')[0].trim('"')) -type 1
     if (!$dir) {$r="start `"$id`" /high /w"}; sp $EXP RunAs '' -force; start cmd -args ("/q/x/d/r title $id && $r",$cmd) -wait -win 1
     do {sleep 7} while ((gwmi win32_process -filter 'name="explorer.exe"'|? {$_.getownersid().sid -eq "S-1-5-18"}))
     F "RegSetValueEx" (SYM ".Default" $LNK); sp $EXP RunAs "Interactive User" -force } # lean and mean snippet by AveYo, 2018-2021
    '@; $key="Registry::HKEY_USERS\$sid\Volatile Environment"; $a1="`$id='$id';`$key='$key';";$a2="`$cmd='$($cmd-replace"'","''")';`n"
    sp $key $id $($a1,$a2,$code) -type 7 -force; $arg="$a1 `$env:A=(gi `$key).getvalue(`$id)-join'';rp `$key `$id -force; iex `$env:A"
    $_PRESS_ENTER='^,^'; start powershell -args "-win 1 -nop -c $arg" -verb runas }; <#,#>  RunAsTI $env:1;  #:RunAsTI:
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  9. xinso

    xinso MDL Guru

    Mar 5, 2009
    12,699
    13,702
    340
  10. xinso

    xinso MDL Guru

    Mar 5, 2009
    12,699
    13,702
    340
  11. AveYo

    AveYo MDL Expert

    Feb 10, 2009
    1,836
    5,693
    60
    Which I've been saying for a long time. Using .1 builds as a base can be a two edged sword, at least when it comes to migration. dism is simply not doing the addpackage job right at all times. When certain packages have not undergo some intermediary steps, stuff breaks, and instead of a quick 15 minutes at most install / repair, you get whooping hour - when it works. because it fails often and keeps retrying. check the logs.. it's mostly gibberish, but some version numbers do stand out.
    There's no script to blame but microsoft - they're the ones making a joke of these LCU's. it's simply not acceptable for some of these to have upwards of 60% failure rate at times.
    And now they simply gave up, and started limiting updates even more, to a certain SSU (a support package to fix what was broken in the previous LCUs). And they freaking managed to break cab limits and now use different format - what a joke. Just f**kin get back to reliable, compartmentalized updates, not these oversized SP sized monthly crap to shovel bloat together with actual security updates down people's PC's throats.
    It's been many versions already since I've stopped with the latest LCU integration craziness, and just make use of the base - the latest base esd. I find it more reliable overall, both on clean installs and on repairs. Downloading another LCU is gonna happen anyway, so why bother. Instead, it's a test if the configuration is ok.
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  12. xinso

    xinso MDL Guru

    Mar 5, 2009
    12,699
    13,702
    340
    You are right. I second it.
     
  13. kibkalo

    kibkalo MDL Addicted

    Sep 8, 2009
    578
    226
    30
    And what to do with branches where no .1 exist?
    Like ServerTurbineCor2019?
    I have a working 17784.1466 build, which today installed the .1950 LCU (not PSFX) without any questions.
     
  14. xinso

    xinso MDL Guru

    Mar 5, 2009
    12,699
    13,702
    340
    #4934 xinso, Sep 29, 2021
    Last edited: Sep 29, 2021
    As of 17763 - detecting package and update.
    --------------------------------------------------------------------------------
    From 18362 onwards - installing new mum file, and detect and update by the new mum.

    Different Update Technology, can not compare. (even though latest 17763 LCU uses PSFX format.)

    i.e. Update Technology and PSFX format of LCU are NOT the same things.
     
  15. kibkalo

    kibkalo MDL Addicted

    Sep 8, 2009
    578
    226
    30
    #4935 kibkalo, Sep 29, 2021
    Last edited: Sep 29, 2021
    I am not interested in any LTSC or G, as they are boring :)
    I'd love to discuss Server IoT, or Essentials 2022 (have a key, afraid to use it)
    I don't even speak of.. you know which SKU ))
    Actually both cheapest and dumbest client & server SKUs are what I am interested in long dialogs
    And am very interested in possibility of creating a NanoServer VM (2019, 1904x, 20348, 22xxx). Hyper-V of course as that seems easier and more reasonable (yeas, am Hyper-V freak)
    Not in 5am however ))


    P.S. And let me say a word in my excuse - I don't ask for direct answer - build, script or instruction - I usually ask to share experience - if you tried that (and you sure did) - was it success or failure. Is there any value of other tries with less skilled hands. That is what can't be measured. Ability not to spend lot of time for nothing. That is how I try to formulate my questions.
     
  16. kibkalo

    kibkalo MDL Addicted

    Sep 8, 2009
    578
    226
    30
    Btw, by your link after a month I finally downloaded
    10.0.19041.1.vb_release.191206-1406_amd64fre_client-multisku_retail_en-us-CCCOMA_X64FRE_EN-US_DV9
    10.0.19041.1.vb_release.191206-1406_amd64fre_client-multisku_volume_en-us-CPBA_X64FRE_EN-US_DV9.iso
    10.0.19041.1.vb_release.191206-1406_amd64fre_client-server-multisku_retail_en-us-CCOMA_X64FRE_EN-US_DV9.iso

    with all 19041.1 editions. No Starter :(
    All updates by simple LCU.
    And who called last one client-server was a strange person. Nothing of server.
     
  17. xinso

    xinso MDL Guru

    Mar 5, 2009
    12,699
    13,702
    340
    Very good finding about client-server-multisku.
     
  18. kibkalo

    kibkalo MDL Addicted

    Sep 8, 2009
    578
    226
    30
    You really mean that mum files are checked with each LCU install?
    Not just their names in registry?
    I wanted to say that if I remove some vital part about win32calc from ComponentBasedServicing, it won't be detected as "requires update", and that specific MUM won't be read - no SFC error, LCU success...
     
  19. kibkalo

    kibkalo MDL Addicted

    Sep 8, 2009
    578
    226
    30
    I notices some mismatches - missing Wrapper or wrong edition XML in \Windows
    But very good homebrews for - when were they created?
     
  20. xinso

    xinso MDL Guru

    Mar 5, 2009
    12,699
    13,702
    340
    #4940 xinso, Sep 29, 2021
    Last edited: Sep 29, 2021
    Sessions.xml
    Code:
    <Session version="8.0" id="2480_5215828" client="Cbss" options="0" currentPhase="1" lastSuccessfulState="Complete" pendingFollower="false" retry="false" operationCovered="1025" correlationVector="mNUdkLVnyUWMs8cy.0" Queued="2019/12/07/09:03:45" Started="2019/12/07/09:03:45" Complete="2019/12/07/09:18:18" status="0x0">
    
    And in ComponentBasedServicing.