Only Neat Thing

たったひとつの冴えたやり方

ユーザ用ツール

サイト用ツール


サイドバー

スタートページ

IBM ThinkPad X20/21

Windows XP

Lenovo ThinkPad X200

Intel DG965WH

Panasonic Let'snote CF-R

SSD

Hyper-V使いこなし

Misc

You are not allowed to perform this action
slp-oembios-activation

アクティベーションの回避(SLP化)

 リテール版のXPはインストールするたびに認証(アクティベーション)が必要になる。何度もインストールし直していると、そのうち電話による認証を求められることもある。これがたいへん面倒なので、できれば認証作業自体を回避したいところだ。そもそもThinkPadにはOEM版のXPがプリインストールされているのだから、その情報をリテール版インストールメディアに反映できれば、アクティベーションを回避できるはずだ。

 プリインストールの事前ライセンス認証に使われているSLPという技術は、メーカー製PCのBIOS情報と、OEM版XPのSLP情報を比較して、一致すればアクティベーションが不要になる仕組みだ。SLP情報は、以下の二つで構成されている。

  1. 専用プロダクトキー
  2. OEMBIOSファイル群

 これをプリインストールされた稼働中のXPから取得する。

プロダクトキーの取得

 まずは、プリインストールされたWindows XPを起動し、そのプロダクトキーを取得する。これはPC本体に貼り付けてあるCOA(Certificate of Authenticity)キーとは別のキーだ。

 COAキーは、PCごとに違ったキーが貼り付けられている。COAキーを使った再インストールも可能だが、2005年以降ネット経由のアクティベーションができなくなり、電話でのアクティベーションしかできなくなった。
 一方、SLP専用プロダクトキーは、メーカーごとに決まっており、そのメーカーのPC全般に適合する。

 Windows Meまで、プロダクトキーはレジストリに平文で保存されていたのだが、XPでは暗号化されている。復号するためのプログラムはネットで多種公開されているが、VBscriptを用意した。

productkey.vbs - プロダクトキーの取得スクリプト

ProductKey.vbsの実行画面

 OKを押すと、マシン名をファイル名にしたテキストファイルに、プロダクトキーなどを保存するようになっている。これで取得できるキーがSLP専用のキーだ。

OEMBIOSファイルの取得

 次に、プリインストールされたXPからOEMBIOSという名のファイルを四つ取得する。

  • %systemroot%\system32\OEMBIOS.BIN
  • %systemroot%\system32\OEMBIOS.DAT
  • %systemroot%\system32\OEMBIOS.SIG
  • %systemroot%\system32\Catroot{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\OEMBIOS.CAT

 OEMBIOS.CATはシステムファイルの属性がついているので、隠しファイルを表示する設定になっていないと表示されないはずだ。コピーするために、スクリプト(BATファイル)を書いた。

copyfrom.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に上記四つのファイルがコピーされる。

CAB圧縮する

 ここまではThinkPad上にプリインストールされたXP上で作業してきたが、ここらか先はXPのインストールイメージを作る作業環境にOEMFILESフォルダをコピーして行う。得られた四つのファイルをCAB圧縮する。makecab.exeコマンドを使う。

caboem.bat
makecab OEMBIOS.BIN
makecab OEMBIOS.DAT
makecab OEMBIOS.SIG
makecab OEMBIOS.CAT

 すると、OEMBIOS.BI_OEMBIOS.DA_OEMBIOS.SI_OEMBIOS.CA_というファイルができる。

SETUPP.INIの修正

 XPのインストールイメージのI386フォルダに、SETUPP.INIというファイルがある。それをハードディスクにコピーして、Pidの行の最終3桁を“OEM”に書き換える。

SETUPP.INI
[Pid]
ExtraData=786F687170637175716954806365EF
Pid=55383OEM

 Pidを書き換えるのは、上記のSLP専用ライセンスキーを受け付けるようにするためだ。詳しくはXPのライセンス判別方法を参照していただきたい。

インストールイメージにコピー

 さて、OEMBIOS.*とSETUPP.INIを、統合インストールISO作成で作ったインストールイメージにコピーしよう。(環境変数SSTARGETを設定しておくように)。

copyoem.bat
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

 コマンドラインから上記のコマンドを実行してみると・・・

msoobe.exe /a の実行結果

 ライセンス認証が済んでいると教えてくれた。

WindowsXP-KB905474-JPN-x86.exeの実行結果

 Windows Updateを実行すると、update.vbsから外してあるKB905474(WGA通知アプリケーション)がインストールされる(正規品と判定される)。

MGAdiag.exeの実行結果

 MGAdiag.exeでもGenuineと判定される。 

 一部の情報によれば、上記のOEMBIOS.*の四つのファイルの他に、以下のファイルもコピーが必要だとされている。

  • %systemroot%\DPCDLL.DLL
  • %systemroot%\PIDGEN.DLL
  • %systemroot%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\NT5IIS.CAT
  • %systemroot%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\NT5INF.CAT

 だが、私の環境ではこれらのファイルのコピーは必要なかった。では、どんな環境ならコピーが必要なのか・・・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)


参考サイト

1)
リテール版XPがアクティベーションの期限を過ぎて機能制限モードになってしまった場合は、Windows Product Key Update Toolは使えない(セーフモードではネットが接続されないため)。その場合には、稼働しているOEM(SLP)版のXPでレジストリ値 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId(およびLicenseInfo)をエクスポートし、セーフモードでインポートしてからcopyto.batを実行する。
slp-oembios-activation.txt · 最終更新: 2019/06/19 01:07 by admin