リテール版のXPはインストールするたびに認証(アクティベーション)が必要になる。何度もインストールし直していると、そのうち電話による認証を求められることもある。これがたいへん面倒なので、できれば認証作業自体を回避したいところだ。そもそもThinkPadにはOEM版のXPがプリインストールされているのだから、その情報をリテール版インストールメディアに反映できれば、アクティベーションを回避できるはずだ。
プリインストールの事前ライセンス認証に使われているSLPという技術は、メーカー製PCのBIOS情報と、OEM版XPのSLP情報を比較して、一致すればアクティベーションが不要になる仕組みだ。SLP情報は、以下の二つで構成されている。
これをプリインストールされた稼働中のXPから取得する。
まずは、プリインストールされたWindows XPを起動し、そのプロダクトキーを取得する。これはPC本体に貼り付けてあるCOA(Certificate of Authenticity)キーとは別のキーだ。
Windows Meまで、プロダクトキーはレジストリに平文で保存されていたのだが、XPでは暗号化されている。復号するためのプログラムはネットで多種公開されているが、VBscriptを用意した。
productkey.vbs - プロダクトキーの取得スクリプト
OKを押すと、マシン名をファイル名にしたテキストファイルに、プロダクトキーなどを保存するようになっている。これで取得できるキーがSLP専用のキーだ。
次に、プリインストールされたXPからOEMBIOSという名のファイルを四つ取得する。
OEMBIOS.CATはシステムファイルの属性がついているので、隠しファイルを表示する設定になっていないと表示されないはずだ。コピーするために、スクリプト(BATファイル)を書いた。
rmdir /s /q .\OEMFILES mkdir .\OEMFILES copy %systemroot%\system32\OEMBIOS.BIN .\OEMFILES copy %systemroot%\system32\OEMBIOS.DAT .\OEMFILES copy %systemroot%\system32\OEMBIOS.SIG .\OEMFILES attrib -S %systemroot%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\OEMBIOS.CAT copy %systemroot%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\OEMBIOS.CAT .\OEMFILES attrib +S %systemroot%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\OEMBIOS.CAT dir .\OEMFILES
カレントフォルダ下のOEMFILESに上記四つのファイルがコピーされる。
ここまではThinkPad上にプリインストールされたXP上で作業してきたが、ここらか先はXPのインストールイメージを作る作業環境にOEMFILESフォルダをコピーして行う。得られた四つのファイルをCAB圧縮する。makecab.exeコマンドを使う。
makecab OEMBIOS.BIN makecab OEMBIOS.DAT makecab OEMBIOS.SIG makecab OEMBIOS.CAT
すると、OEMBIOS.BI_、OEMBIOS.DA_、OEMBIOS.SI_、OEMBIOS.CA_というファイルができる。
XPのインストールイメージのI386フォルダに、SETUPP.INIというファイルがある。それをハードディスクにコピーして、Pidの行の最終3桁を“OEM”に書き換える。
[Pid] ExtraData=786F687170637175716954806365EF Pid=55383OEM
Pidを書き換えるのは、上記のSLP専用ライセンスキーを受け付けるようにするためだ。詳しくはXPのライセンス判別方法を参照していただきたい。
さて、OEMBIOS.*とSETUPP.INIを、統合インストールISO作成で作ったインストールイメージにコピーしよう。(環境変数SSTARGETを設定しておくように)。
copy /y OEMBIOS.BI_ %SSTARGET%\I386\ copy /y OEMBIOS.DA_ %SSTARGET%\I386\ copy /y OEMBIOS.CA_ %SSTARGET%\I386\ copy /y OEMBIOS.SI_ %SSTARGET%\I386\ copy /y SETUPP.INI %SSTARGET%\I386\
その後は、統合インストールISO作成にあるように、makeiso.batでISOイメージを作り、それを使ってXPをインストールしてみた・・・。
・・・が、T-39で致命的なエラーが発生してしまった。「製品カタログをインストールできませんでした」とな。どうも、ファイルを入れ替えたのがインストーラにバレてしまったようだ。これはどうしたものか。
試行錯誤した結果、サービスパックを適用する前に、OEMBIOS.*ファイルを入れ替えてしまえば良いことがわかった。具体的には、統合まとめ で、
SSINIT.bat → SSSP3.BAT → make.bat
となっていて、その次にcopyoem.batを実行しているのを、
SSINIT.bat → copyoem.bat → SSSP3.BAT → make.bat
の順で実行する。
これでなんとか無事にインストールできた。インストールには、上記で取得した専用プロダクトキーを入力する。
%systemroot%\system32\oobe\msoobe.exe /a
コマンドラインから上記のコマンドを実行してみると・・・
ライセンス認証が済んでいると教えてくれた。
Windows Updateを実行すると、update.vbsから外してあるKB905474(WGA通知アプリケーション)がインストールされる(正規品と判定される)。
MGAdiag.exeでもGenuineと判定される。
一部の情報によれば、上記のOEMBIOS.*の四つのファイルの他に、以下のファイルもコピーが必要だとされている。
だが、私の環境ではこれらのファイルのコピーは必要なかった。では、どんな環境ならコピーが必要なのか・・・SP3なら必要だとか、英語版以外のXPなら必要だという話もあったが、真相はわからない(ThinkPadのプリインストールXPはSP2)。
コラム — 稼働しているXPのSLP化
では、既にインストールしてあるリテール版のXPに、SLP情報を適用することはできるのだろうか? 結論から言えば可能だ。SLP用のプロダクトキーに変更した上で、OEMBIOS.*ファイル群をコピーすれば良い。
プロダクトキーの変更は、Windows Product Key Update Toolを使う。
その上で、XPをセーフモードで起動して、OEMBIOS.*ファイル群をコピーする。コピーするためのスクリプト(BATファイル)はこんな感じ。
- copyto.bat
attrib -S %systemroot%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\OEMBIOS.CAT del %systemroot%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\OEMBIOS.CAT copy /y .\OEMFILES\OEMBIOS.BIN %systemroot%\system32 copy /y .\OEMFILES\OEMBIOS.DAT %systemroot%\system32 copy /y .\OEMFILES\OEMBIOS.SIG %systemroot%\system32 copy .\OEMFILES\OEMBIOS.CAT %systemroot%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\ attrib +S %systemroot%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\OEMBIOS.CAT再起動すれば、アクティベーション済みになる。1)