2012-05-16

「Microsoft Update で Windows XP のセキュリティパッチ KB2686509 適用に失敗する」

Microsoft Update で Windows XP のセキュリティパッチ KB2686509 適用に失敗してしまう。

x インストールに失敗しました 
  エラー コード: 0x8007F0F4  
  更新プログラムをインストールし直すか、次のいずれかのリソースからサポートを利用してください

Microsoft サポートを検索してみた。

[MS12-034] Windows XP および Windows Server 2003 の CVE-2012-0181 のセキュリティ更新プログラム (2012 年 5 月 8 日) について

パッチ適用実行時にキーボードレイアウトについてレジストリと dll ファイルの突き合わせを行い、
キーボードレイアウト情報との間に矛盾があると、パッチ適用処理を中止してしまうようだ。
早速紹介されている回避手順を試してみたが、当方のキーボードは ASCII(HHKB)環境のためか、
解決するには至らなかった。

そこで以下手順でワークアラウンドした(作業メモ)。

−−−−−−−−−−−−−−−−−−−−−−−−−
★★★ ここからは自己責任でお願いします ★★★
−−−−−−−−−−−−−−−−−−−−−−−−−

あらかじめシステム登録されているキーボード情報を確認。
C:\>dir /w %Windir%\System32 | find "101"
kbd101.dll
kbd101a.dll
kbd101b.dll
kbd101c.dll

続いてパッチ適用時に参照しているキーボードエラー情報を特定し、
C:\>type %windir%\Faultykeyboard.log
kbd101n.dll

矛盾があることが分かった。
正:kbd101.dll
誤:kbd101n.dll

キーボードエラーログも強引に修正しておくw(念のため)。
C:\>echo kbd101.dll > %windir%\Faultykeyboard.log
C:\>type %windir%\Faultykeyboard.log
kbd101.dll

キーボード情報の対象レジストリをファイル「kbparm.reg」にバックアップし、
C:\>reg export HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters kbparm.reg

それを元に新たにキーボード情報のレジストリファイル「kblayout.reg」作成し、内容を確認。
C:\>type kblayout.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
"LayerDriver JPN"="kbd101.dll"
"OverrideKeyboardSubtype"=dword:00000000
"OverrideKeyboardIdentifier"="PCAT_101KEY"

最後に修正レジストリをインポートして、
C:\> reg import HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters kblayout.reg

再起動。
その後 Microsoft Update 実施して、無事セキュリティパッチ KB2686509 適用完了した。


−−−−−−−−−−−−−−−−−−−−−−−−−
<参考>
同様のトラブルに見舞われ、ハマっている人は結構いる様子。
いずれもキーボードレイアウト(レジストリ)修正で切り抜けている。

KB2686509 の適用失敗についてのメモ。多分罠は2つ

KB2686509 がインストールできない!失敗する!

KB2686509 - Failure - due to remapping of a key

KB2686509 - Failure due to missing DLL files

ドイツの Christian さん作成した VB スクリプトで一発解決?
ダウンロードした zip を解き、コマンドラインから vbs スクリプト実行
C:\>cscript HotFix4KB2686509.vbs