ich habe mich einmal kurz mit dem Aufbau der CAB+PSF-Updates beschäftigt.
Teil 1: Dateiformat
Letztendlich sieht es wohl so aus, dass in der CAB-Datei alle CAT-/MUM-/MANIFEST-Dateien enthalten sind, die eigentlichen Patches für die Binaries (bislang in den Unterordnern gespeichert) jedoch nicht. Dazu gibt es die PSF-Datei.
In der CAB-Datei ist jedoch eine XML-Datei namens "express.psf.cix.xml" enthalten, welche angibt, wo in der PSF-Datei was zu finden ist.
Beispiel:
- Code: Select all
<File id="1" name="msil_system.management.automation_31bf3856ad364e35_1.0.0.0_none_6340379543bd8a03\f\System.Management.Automation.dll" length="329" time="132751294726499715" attr="128">
<Hash alg="SHA256" value="fbfc446e122c017e76f6033123eb4dfe2cd099a0d8c40b89331992c1fb9df455" />
<Delta>
<Source type="RAW" offset="753664" length="329">
<Hash alg="SHA256" value="fbfc446e122c017e76f6033123eb4dfe2cd099a0d8c40b89331992c1fb9df455" />
</Source>
</Delta>
</File>
Das würde übersetzt bedeuten, dass eine Datei mit der relativen Pfadangabe "msil_system.management.automation_31bf3856ad364e35_1.0.0.0_none_6340379543bd8a03\f\System.Management.Automation.dll" vom Offset "753664" mit der Länge "329" Bytes aus der PSF gelesen und unter oben angegebenem Namen gespeichert werden soll.
Gilt wohl aber auch nicht immer, da es neben dem Typ "RAW" auch den Typ "PA30" gibt, für den ich einmal einen Artikel mit Python-Script gelesen habe, der das erklärte.
Das von abbodi1409 verwendete Programm "PSFExtractor" würde ich ungerne benutzen, da es dotNET vorraussetzt und ich bei wsusou ungerne eine Abhängigkeit zu dotNET herstellen wollte. Bedeutet also Portierung des Algorithmus nach VBScript oder ähnliches.
https://github.com/Secant1006/PSFExtractor
Teil 2: Implementierung
Das ist meines Erachtens jedoch nur ein Teil der Arbeit.
Angenommen, ListMissingUpdateIds.vbs würde auf Windows 11 ausgeführt werden und ein Ergebnis liefern, sähe die resultierende "MissingUpdateIds.txt" vermutlich wie folgt aus:
- Code: Select all
1111111,aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
2222222,bbbbbbbb-cccc-dddd-eeee-ffffffffffff
3333333,cccccccc-dddd-eeee-ffff-gggggggggggg
Nach Übersetzung der IDs mittels "ListUpdatesToInstall.cmd" würde eine "UpdatesToInstall.txt" im für die Verarbeitung schlechtesten Fall wir folgt aussehen (einzelne Updates mittels Absätzen voneinander getrennt):
- Code: Select all
..\w110-x64\glb\windows10.0-kb1111111-x64_sha1.cab
..\w110-x64\glb\windows10.0-kb1111111-x64_sha1.psf
..\w110-x64\glb\windows10.0-kb1111112-x64_sha1.cab
..\w110-x64\glb\windows10.0-kb2222222-x64_sha1.cab
..\w110-x64\glb\windows10.0-kb2222222-x64_sha1.psf
..\w110-x64\glb\windows10.0-kb3333333-x64_sha1.cab
Die Frage, die sich mir jetzt stellt, ist:
Wie kann "InstallListedUpdates.cmd" jetzt sicher die CAB+PSF-Updates zusammenführen, ohne dabei versehentlich falsche Dateien zu matchen, oder auch Dateien nicht zu matchen, oder zu erkennen, wenn zu einer CAB die PSF fehlt (oder umgekehrt). Letzteres ist sicherlich der einfachste Punkt, darf aber nicht vergessen werden.
Viele Grüße