Kterak Microsoft »aktivně« nepodporuje Windows XP x64
Opáčko
Kdo jste s Windows XP x64 dělali, víte, že bezpečnostní aktualizace, které vyjdou pro Windows XP x64, jsou stejné jako záplaty pro Windows Server 2003 x64. Totéž jméno souboru, tentýž obsah, jen odkazy ke stažení se obvykle liší, ale skutečně šlo celou dobu o identické soubory (na výjimku se mi nepodařilo nikdy narazit).
Je to logické. Oba operační systémy jsou pokrevní příbuzní. Není to tak, že by Windows XP x64 byly jen přeložená klasická XPčka pro x64 platformu. Windows XP x64 (celým jménem Windows XP Professional x64 Edition) jsou klientská (nebo chcete-li workstation) varianta Windows Serveru 2003 x64 (tak jako je Windows Vista klientská varianta Windows Serveru 2008). Samozřejmě se to liší ještě nějakými těmi soubory navíc v serverových verzích, ale základ operačního systému je stejný. 32bitová edice Windows XP je verze Windows 5.1 (build 2600), zatímco Windows XP x64 (stejně jako všechny verze Windows Serveru 2003) jsou verze Windows 5.2 (build 3790). Fakticky tedy jde o novější systém. Ostatně zatímco Windows XP (32bit. edice) dostala až Service Pack 3, pro Windows XP x64 vyšel jako poslední Service Pack 2.
Ještě připomínám, aby se to nepletlo, že existoval systém Windows XP 64-bit Edition. Ten byl určen pro počítače s procesory Intel Itanium a jeho podpora skončila už dávno, krátce poté, co se přestaly prodávat pracovní stanice s procesory Intel Itanium. Vyšly dokonce dvě verze tohoto systému: Windows XP 64-Bit Edition for Itanium systems, Version 2002, která byla postavená na stejném kódu jako klasické 32bitové Windows XP a vyšla v podstatě ve stejnou dobu, a Windows XP 64-Bit Edition, Version 2003, což je stejně jako x64 verze Windows XP pokrevní příbuzný Windows Serveru 2003.
Jak to tedy je s podporou Windows XP x64?
13. května mimo jiné vyšla pro operační systémy Windows bezpečnostní aktualizace KB2962488 v rámci Security Bulletinu MS14-027. Na té jsem si ověřil, že Windows Update aktualizaci pro Windows XP x64 nenabízí, zatímco pro Windows Server 2003 x64 ji nabídne.
Co se stane, když stáhnu ručně aktualizaci pro Windows Server 2003 x64 a pokusím se ji spustit ve Windows XP x64? Možná budete překvapeni, možná ne, ale stane se to, že se aktualizace nenainstaluje s tím, že není určena pro tento systém. Jak překvapivé (v tradičním pojetí i ironickém slova smyslu, jak chcete). Je to jako kdyby najednou přestala být podporována verze Windows 7 Home Premium, ale Windows 7 Ultimate byla nadále podporována.
Ať je to jak chce, aktualizace se odmítá nainstalovat. Pokud aktualizaci vybalíte (třeba jejím spuštěním v příkazovém řádku s parametrem -x) a podíváte se do souboru update_SP2QFE.inf
, najdete tam velmi zajímavou sekci:
[Prerequisite]
Condition=AndOp,Prereq.XPAMDInstallBlock.Section
Ta nám říká, co se má před instalací zkontrolovat a odkazuje nás do sekce XPAMDInstallBlock
. A tam to je:
[Prereq.XPAMDInstallBlock.Section]
PresentOp=CheckReg,HKLM,"SYSTEM\CurrentControlSet\Control\ProductOptions",ProductType,0x00000000
NotEqualOp=CheckReg,HKLM,"SYSTEM\CurrentControlSet\Control\ProductOptions",ProductType,0x00000000,!=,"WinNT"
Display_String="%WrongProductMessage%"
Zkrátka a jednoduše: pokud je v registru v HKLM\System\Curre…\ProductOptions
hodnota ProductType
s obsahem WinNT
, což identifikuje právě klientskou verzi a nikoli serverovou, aktualizace se odmítne nainstalovat.
Microsoft tedy od nynějška do aktualizací pro Windows Server 2003 x64 přidává tyto kontroly navíc. Proto tomu říkám aktivní nepodpora. Pokud by Microsoft x64 XPčka „jen nepodporoval“, vykašlal by se na to, co si s nimi uživatelé udělají a co si do nich nainstalují. Ale on skutečně nechce, aby si uživatelé instalovali záplaty pro Windows Server 2003 x64 do Windows XP x64, přestože tomu v naprosto drtivé většině případů (ne-li ve všech) nic zásadního nebrání. Přitom veselé je, že v tomtéž INF souboru, jehož zmíněná sekce instalaci na XP x64 brání, se klasicky počítá s tím, že se to dá do Windows XP x64 nainstalovat, jsou tam příslušné údaje pro odinstalaci a popisky.
…
SP_TITLE = "Security Update for Windows x64 (KB2926765)"
SP_TITLE_XP = "Security Update for Windows XP (KB2926765)"
SP_TITLE_WS03 = "Security Update for Windows Server 2003 (KB2926765)"
…
Překvapuje mě to o to víc, když zkusím odhadnout, jaký asi podíl na trhu OS má Windows XP x64 a tedy že se Microsoft vůbec obtěžuje těm pár nadšencům házet klacky pod nohy. No, ale dělá to. Prostě no…
Co s tím?
Jednoduché řešení jsem narychlo nenašel. Úprava patřičného INF souboru tak, že se z něj prostě vyhodí ta kontrolní sekce, je slepou uličkou, protože selže kontrola integrity (aktualizace je patřičně podepsána a zabezpečena proti pozměnění).
Úprava příslušné položky ProductType
v registru na ServerNT
(což je to, co identifikuje serverovou verzi OS) je mission imposible, protože systém si to na úrovni jádra hlídá a při pokusu o změnu to ihned vrátí zpátky a ještě vám vynadá, že jste porušili licenci.
A když se o tuto úpravu pokusíte offline (upravíte registr v jiném OS a pak znovu nabootujete), skončíte v modré obrazovce podobného významu.
Asi nejjednodušším řešením je vybalit aktualizaci, zjistit, co dělá, které soubory nahrazuje a jaké registry upravuje a aplikovat tuto změnu ručně v operačním systému (v případě této aktualizace se vlastně jen nahrazují dva soubory). S přepisem systémových souborů novými ze záplaty si obvykle lze nějak poradit, každopádně je to řešení hodně krkolomné, protože co záplata, to jiný postup. Ale řešením by to asi bylo (pro někoho možná i tím nejjednodušším).
Poněkud systémovějším řešením je úprava registru tak, aby si systém myslel, že je serverový a neskončil v modré obrazovce. Jde to, ale pohybujeme se na hranici (spíš za hranicí) legálnosti postupu, takže budu jen naznačovat. Kromě hodnoty ProductType
je třeba upravit i hodnotu SystemPrefix
, umístěnou nepříliš daleko v registru od této, přičemž nápovědou pro úpravu je, že třetí bit posledního bajtu této hodnoty (třetí zprava ;-) označuje serverovou variantu OS, pokud je nastaven (tedy 1
) a klientskou, pokud nastaven není (tedy 0
).
Po této úpravě systém naběhne, ale po přihlášení stejně pyskuje a ihned pak odhlašuje.
Další nápověda: Pokud si systém lehce hacknete tak, aby se místo procesu sethc.exe
spouštěl cmd.exe
(jistě znáte klávesovou objížďku pět shiftů ;-), lze s určitou dávkou úsilí záplatu přeci jen nainstalovat.
Asi není třeba připomínat, že poté je potřeba opět v jiném systému úpravy registru vrátit do původní podoby, aby se systém tvářil opět jako Windows XP x64 bez problémů s licencí. S automatickou aktualizací tradiční klientské verze Windows XP x64 je ale nejspíš skutečně konec, o 32bitové ani nemluvě (ta nemá žádnou nadále podporovanou pokrevně příbuznou variantu, od níž by bylo možné si záplaty vypůjčit). Edit: má a je to neskutečně primitivní, značně jednodušší než s Windowx XP x64.
Více jsem takhle narychlo nezkoumal (ani to, jestli je postup aplikovatelný pro další záplaty, ale předpokládám, že s mnohými to fungovat bude), takže jestli existuje nějaké efektivnější řešení, určitě ho najdete. Strýček Google budiž vaším pomocníkem, případně můžete využít i pár jeho konkurentů, pokud k němu cítíte vrozený odpor.