======アクティベーションの回避(SLP化)======  リテール版のXPはインストールするたびに認証(アクティベーション)が必要になる。何度もインストールし直していると、そのうち電話による認証を求められることもある。これがたいへん面倒なので、できれば認証作業自体を回避したいところだ。そもそもThinkPadにはOEM版のXPがプリインストールされているのだから、その情報をリテール版インストールメディアに反映できれば、アクティベーションを回避できるはずだ。\\  プリインストールの事前ライセンス認証に使われている**SLP**という技術は、メーカー製PCのBIOS情報と、OEM版XPのSLP情報を比較して、一致すればアクティベーションが不要になる仕組みだ。SLP情報は、以下の二つで構成されている。\\ - **専用プロダクトキー** - **OEMBIOSファイル群**  これをプリインストールされた稼働中のXPから取得する。 ====プロダクトキーの取得====  まずは、__プリインストールされたWindows XP__を起動し、そのプロダクトキーを取得する。これはPC本体に貼り付けてある[[https://www.microsoft.com/ja-jp/howtotell/Hardware.aspx|COA(Certificate of Authenticity)]]キーとは別のキーだ。  COAキーは、PCごとに違ったキーが貼り付けられている。COAキーを使った再インストールも可能だが、2005年以降[[https://japan.cnet.com/article/20080929/|ネット経由のアクティベーションができなくなり]]、電話でのアクティベーションしかできなくなった。\\  一方、SLP専用プロダクトキーは、メーカーごとに決まっており、そのメーカーのPC全般に適合する。  Windows Meまで、プロダクトキーはレジストリに平文で保存されていたのだが、XPでは暗号化されている。復号するためのプログラムはネットで多種公開されているが、VBscriptを用意した。 {{:ProductKey.vbs|}} - **プロダクトキーの取得スクリプト** {{ :productkey.png?nolink |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ファイル)を書いた。 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コマンドを使う。 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"**に書き換える。 [Pid] ExtraData=786F687170637175716954806365EF Pid=55383OEM  Pidを書き換えるのは、上記の**SLP専用ライセンスキー**を受け付けるようにするためだ。詳しくは[[xp-licence]]を参照していただきたい。 ====インストールイメージにコピー====  さて、OEMBIOS.*とSETUPP.INIを、[[slipstream-updates]]で作ったインストールイメージにコピーしよう。(環境変数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\  その後は、[[slipstream-updates]]にあるように、makeiso.batでISOイメージを作り、それを使ってXPをインストールしてみた・・・。 {{ :t-39error.jpg?nolink |致命的なエラーが発生}}  ・・・が、T-39で**致命的なエラーが発生**してしまった。「製品カタログをインストールできませんでした」とな。どうも、ファイルを入れ替えたのがインストーラにバレてしまったようだ。これはどうしたものか。 ====順番が大事====  試行錯誤した結果、サービスパックを適用する前に、OEMBIOS.*ファイルを入れ替えてしまえば良いことがわかった。具体的には、[[slipstream-updates#統合まとめ]] で、\\   **SSINIT.bat → SSSP3.BAT → make.bat**\\  となっていて、その次にcopyoem.batを実行しているのを、\\   SSINIT.bat **→ copyoem.bat** → SSSP3.BAT → make.bat\\  の順で実行する。\\  これでなんとか無事にインストールできた。インストールには、上記で取得した専用プロダクトキーを入力する。 %systemroot%\system32\oobe\msoobe.exe /a  コマンドラインから上記のコマンドを実行してみると・・・ {{ :xp-activated.jpg?nolink |msoobe.exe /a の実行結果}}  ライセンス認証が済んでいると教えてくれた。 {{ :wga-verified.png?nolink |WindowsXP-KB905474-JPN-x86.exeの実行結果}}  Windows Updateを実行すると、[[updates-silent-installer|update.vbs]]から外してあるKB905474(WGA通知アプリケーション)がインストールされる(正規品と判定される)。 {{ ::wga-genuine.png?nolink |MGAdiag.exeの実行結果}}  [[xp-wga#診断ツール_mgadiagexe|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|Windows Product Key Update Tool]]を使う。\\  その上で、__XPをセーフモードで起動__して、OEMBIOS.*ファイル群をコピーする。コピーするためのスクリプト(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  再起動すれば、アクティベーション済みになる。((リテール版XPがアクティベーションの期限を過ぎて[[xp-activation#機能制限モード]]になってしまった場合は、[[windows-product-key-update-tool|Windows Product Key Update Tool]]は使えない(セーフモードではネットが接続されないため)。その場合には、稼働しているOEM(SLP)版のXPでレジストリ値 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId(およびLicenseInfo)をエクスポートし、セーフモードでインポートしてからcopyto.batを実行する。))
---- ===参考サイト=== * [[http://windowstipsclub.blogspot.com/2011/03/slipstreamed-winxpsp3-with-oembios.html|Slipstreamed WinXPSP3 with OEMBIOS Activation]] (Windows Tips Club) * [[http://windowstips.web.fc2.com/XP.html|Windowsのプリインストール認証をクリーンインストールで復元する方法 (XP編)]] (ちょいマニアックなWindowsの教科書) * [[https://technet.microsoft.com/ja-jp/library/bb457078.aspx|Windows XP を再インストールするときの、OEM の事前ライセンス認証の保持]] (technet.microsoft.com)