Unterscheidung GDR oder LDR Hotfix Version (QFE)

Hallo, hier wieder einmal Rol - heute mit einem Thema zu Hotfix Versionen.Da uns diese Frage scheinbar immer wieder begegnet, habe ich dazu mal was aufbereitet.
Es gibt zu dem Thema zwar grundsätzlich schon einiges an Blogs, aber ich versuche es hier mal mit einer etwas anderen Zusammen- und  Darstellung.

Grundverständnis GDR/LDR:

Das Hotfix Team pflegt zwei Code Trees. Einmal den GDR (General Distribution Release) Tree, welcher (meist aber nicht ausschließlich) Security Patches enthält, die Microsoft für Windows global adressieren möchte, zum anderen den LDR (Limited Distribution Release) Tree welcher funktionelle Hotfixe (auch QFE Quick Fix Engineering genannt) für spezifische Probleme UND die GDR Änderungen enthält. Ein Windows Update Paket enthält immer beide Versionen.

Dazu ein Schaubild mit dem Ablauf:

clip_image002

· Bei der Neuinstallation beginnt das System auf der GDR Branch für die entsprechende Komponente (DLL, EXE, etc).
· Wird nun ein Hotfix installiert bei [1] , wird das System auf die LDR Branch gebracht.
· Nun wird es irgendwann notwendig, z.B. ein Security Patch zu entwickeln. Die Code Änderung wird nun im GDR Tree und gleichzeitig auch im LDR Tree mit einer höheren Version abgebildet. Das Paket von Windows Update enthält nun beide Versionen, einmal die des reinen GDR, sowie die des LDR QFE Hotfix Trees.
· Welche Version nun eingespielt wird, entscheidet die Update.exe des Package Installers. Entdeckt dieser, daß sich das System durch [1] auf der LDR Branch befindet, installiert er bei [2] die LDR Hotfix Version. Ansonsten bleibt er auf der GDR Branch.
· Das gilt kumulativ auch für alle früheren LDR Versionen, sprich wenn das System bei [1] steht, und ich den Security Patch von [4] installiere, bekomme ich automatisch auch die LDR Hotfix Version von [3] installiert. Auf dem gleichen Weg bekomme ich auch die LDR Hotfix Version von [3] , wenn ich zunächst GDR Branch Version [4] habe und dann LDR Hotfix [1] „installiere“.
· Durch das nächste Service Pack (als sogenannter „Cardinal Point“) wird das System wieder auf die GDR Branch gesetzt. Durch das nächste Post-SP LDR Hotfix bringe ich es wieder auf die LDR Branch.
Weitere Informationen dazu finden wir in https://support.microsoft.com/kb/824994/en-us

LDR/GDR Erkennung:

Wie erkenne ich nun, ob eine GDR oder LDR/QFE Version installiert ist?

-W2k3/XP Bei W2k3/XP ist das relativ einfach schon im Windows Explorer zu sehen, und zwar im Version Tab, z.B.:

clip_image004

Die Version Information "5.2.3790.4637" von ntoskrnl.exe gibt uns zunächst nur den Hinweis auf Security Patch “ 977165 MS10-015: Vulnerabilities in Windows kernel could allow elevation of privilege“; https://support.microsoft.com/kb/977165/EN-US.

GDR und QFE Version haben die gleiche Versionsnummer, aus dem KB:

ntoskrnl.exe

5.2.3790.4637

4,518,912

16-Dec-2009

18:51

x64

SP2

SP2GDR

Ntoskrnl.exe

5.2.3790.4637

4,540,416

16-Dec-2009

18:47

x64

SP2

SP2QFE

Hier bringt der KB also für die Unterscheidung keinen Mehrwert!
Jedoch zeigt die Branch Information mit „qfe“, daß es sich um die LDR Branch handelt. Es erübrigt sich damit, ein ntoskrnl.exe Hotfix installieren zu wollen, welches eine Version < 4637 hat.

-Windows Vista+ Seit Windows Vista ist das nun etwas anders. Hier unterscheiden wir schon in der File Version zwischen GDR und LDR/QFE.
Beispiel: Die aktuelle Version der Kerberos.dll kommt mit Windows Update „ 2743555 MS12-069: Vulnerability in Kerberos could allow denial of service: October 9, 2012“; https://support.microsoft.com/kb/2743555/EN-US
Mit der File Version Information „6.1.7601.22084“ für Kerberos.dll sollte ich den Artikel finden können.
Jeder Windows Update Artikel enthält dann einen allgemeinen Version Information Table zur Unterscheidung für SP und GDR sowie LDR:

Windows 7 and Windows Server 2008 R2 file information

The files that apply to a specific product, milestone (RTM, SP n ), and service branch (LDR, GDR) can be identified by examining the file version numbers as shown in the following table:

Version

Product

Milestone

Service branch

6.1.760 0 . 16 xxx

Windows 7 and Windows Server 2008 R2

RTM

GDR

6.1.760 0 . 20 xxx

Windows 7 and Windows Server 2008 R2

RTM

LDR

6.1.760 1 . 17 xxx

Windows 7 and Windows Server 2008 R2

SP1

GDR

6.1.760 1 . 21 xxx

Windows 7 and Windows Server 2008 R2

SP1

LDR

Für meine Kerberos.dll mit „6.1.7601.22084“ bedeutet „6.1.7601“ ich bin auf SP1 und „22084“ daß ich auf Service Branch LDR bin.
Ab Vista sind also die KB Informationen entscheidend!

Alternative:
Über Powershell erhalte ich direkt weitere File Version Information welche auch Branch Informationen wie unter W2k3/XP enthält.
Von meinem Win8 Client:
PS C:\> (Get-Item C:\Windows\System32\kerberos.dll | select –ExpandProperty VersionInfo).FileVersion
6.2.9200.16384 (win8_rtm.120725-1247)

Mehr dazu auch im Blog
https://blogs.technet.com/b/mrsnrub/archive/2010/07/14/gdr-amp-ldr-the-next-generation.aspx

QFE Update Scenario: Ich habe die Win7 GDR Version „6.1.7601.17926“ installiert, benötige aber funktionell z.B. das Kerberos.dll LDR Hotfix aus „2732595 Lsass.exe crashes and error code 255 is generated in Windows Server 2008 R2 or in Windows 7“, mit File Version „6.1.7601.22048“. Diese File Version ist kleiner als die aus Security Patch 2743555 mit „6.1.7601.22084“ und damit kumulativ in der LDR Branch von 2743555 enthalten. Es reicht damit aus, das System auf die LDR Branch zu bringen. Das bewerkstellige ich automatisch über den Update Installer wenn ich (irgend)ein Post SP1 Fix für die Kerberos.dll „installiere“. Der erkennt die Situation und ersetzt die bisherige GDR durch die LDR Branch Version aus dem lokal abgespeicherten Windows Update Paket.

Ich hoffe das hilft etwas zum Verständnis.
Euer Rol