第10章 2000/XPでWinPE 3.0を作る

XP/2000は対象外?

WinPE 3.0は、まず始めにWindows7用 自動インストール キット (AIK)をインストールして、そのプログラム付属のコマンドプロンプトを使って作るのが普通のやり方である、この場合の作製環境

のいずれかがインストールされているPCである。XP以前のOSは対象からはずされたわけである。(WinPE2.0ではXPは含まれている。2000は対象外。) もちろん出来上がったWinPE 3.0は、(搭載メモリが許せば)XP・2000はもちろん98やMeがインストールされているPCに対しても、レスキュー用などの目的で十分に使用出来る。

しかしMicrosoftが想定している作製方法とは全く異なる方法をとると、XP/2000でもWinPE 3.0が作れることを確認した。2009年現在ではXPが最大のシェアを占めているし、今後しばらくVista以降のOSに移行するつもりがないユーザーも多いと思う。そして「どうせならば最新のWinPEを作りたい」と希望する人もいるだろう。

また通常WinPE3.0の動作環境は、メモリが512MB以上ないとRAMディスク作成に失敗し起動できないのだが、この方法は第8章タイプの物なので搭載メモリへの要求度が低い。当方の実験ではVirtualPC上ではあるが、Windows ME 128MBメモリ割り当てで起動した。98系ではOSの仕様で上限512MBのメモリ制限があるため、98系に対しては実質上使えないと言っても良いWinPE 3.0が、この方法で使えるようになる。

なお、このページの方法はX86版の作製方法である。

用意するもの

  1. Windows 7 用のWindows 自動インストール キット (AIK)
  2. 7-Zip
  3. msi2file

1のWindows AIKは、(Windows7のサービスパック登場時など)今後定期的に新しいバージョンが出ると予想されるので、MicrosoftダウンロードセンターのホームAIKという用語で検索して、最新版が出ていないか確認して欲しい。

2の7-Zipは、1で入手したISOファイルから、必要なファイルを取り出すのに使う。拡張子がwimのものを扱うので、このソフトが適している。「他のアーカイバを使っているから、あまりインストールしたくないなぁ」とお考えの人がいると思うが、関連付けを勝手に奪うようなことはないので安心できる。お気に入りのアーカイバと問題なく共存できるはずだ。

3のmsi2fileは、7-Zipで取り出したMSIファイルから必要なファイルを抽出するのに使用する。

具体的手順

1.ハードディスク上に作業用のディレクトリを決め、そこにWPEと言う名前の新規フォルダをひとつ作成しておく。あまり階層が深くなく、パスに空白文字を含まない場所が良い。さらにその下にBOOTという名前のフォルダを、更にその下にFONTSという名前のフォルダを作る。いまのところファイルは1つもなく空っぽである。

WPEBOOTFONTS

今回、このページで示している私の例では、C:\Downloadsという場所にWPEフォルダを作っている。

2.Windows 7 用AIKファイルをダウンロードし、保存しておく。(約1.5GB) 

3.7-Zipの配布サイトから、msiあるいはexe形式のファイルをダウンロードしてきて、通法通り7-Zipをインストールする。

4.ダウンロードして保存しておいたAIKのISOファイルを右クリックし、コンテキストメニューの 7-Zip →開く を選ぶ。

7-Zip コンテキストメニュー

すると次のようなウインドウが開くので、Neutral.cabをダブルクリックする。

Neutral.cabをダブルクリック

5.今回のターゲットはF1_imagexF1_oscdimgである。(ちなみに、上の階層に戻る時は、図の赤丸部分をクリックすれば良い。)

F1_imagexとF1_oscdimg

6.この2つのファイルを取り出そう。対象ファイルの上で右クリックして、コピーを選ぶ。(左クリックで反転表示させておいてツールバーの「コピー」でも良い)

7-Zipでコピー

7.すると保存する場所を聞いてくるので、任意のフォルダを選んでOKする。WPEフォルダの親フォルダにしておくとあとがラクである。(私の例ではC:\Downloads\)
この6.7.の操作をF1_imagexF1_oscdimgに関してそれぞれ行い、2個のファイルを取り出す。(Ctrlキーで複数選択しておいてのコピーならば一度で済むのでそれでも良い。お好きなように。)

コピー先確認ダイアログ

8.最初の階層に戻って、今度はWinPE.cabをダブルクリック。

WinPE.cabをダブルクリック

9.F1_WINPE..WIMをダブルクリック。進行ダイアログが出るがそのまま待つ。(WIMを開けるのが7-Zipの特徴である。)

F1_WINPE.WIMをダブルクリック

10.というフォルダをダブルクリック。

1をダブルクリック

11.ここでは、Program FilesWindowsがターゲットになる。

Program FilesとWindows

12.右クリックしてコピーという操作を、Program FilesWindows でそれぞれ行う。 (これも、Ctrlキーで複数選択して一度で済ませても良い。)

Program Filesをコピー

13.Program FilesWindows を保存する時は、項目1で作っておいたWPEフォルダを指定する。(Windowsフォルダはサイズが大きいので多少時間がかかる)

コピー先はWPEフォルダを指定

14.もう1度最初の階層に戻り、wAIKX86.msiをコピーする。これは、WPEフォルダではない任意の場所に保存する。

wAIKX86.msiをコピー

この操作が終わったら、7-Zipを閉じる。

15.項目7の段階で取り出しておいた、F1_imageximagex.exeに、F1_oscdimgoscdimg.exeにそれぞれリネームする。

16.そのimagex.exeを、項目13の段階で取り出しておいたWindowsフォルダのサブフォルダであるSystem32フォルダの中に移動する。


さて、ここまでの操作の確認。

今のところ、WPEフォルダの中に、Program FilesフォルダとWindowsフォルダができている。自分でWPE\Windows\System32の中にimagex.exeを1つ追加した以外は、7-Zipが抽出したままの状態である。BOOTフォルダ以下は最初の空っぽの状態のままである。

WPE BOOT
│ └ FONTSProgram Files Windows

そのほかのファイルとしては、wAIKX86.msioscdimg.exeの2つのファイルがある。

さて第2段階へ行こう。まだ五合目くらいだ。


17.msi2fileを起動する。wAIKX86.msiを指定して、中身を抽出する。

MSI2FILE起動画面

18.抽出先に指定したフォルダに、wAIKX86抽出ファイル群No.1〜No.4という4つのフォルダができたはずである。これらのフォルダの中に多くのファイルが抽出されているが、そのうち私達が必要なファイルは9個だけだ。

19.wAIKX86抽出ファイル群No.2の中からbootmgrを取り出し、WPEフォルダのルートに移動する。

20.おなじくwAIKX86抽出ファイル群No.2の中からboot.sdietfsboot.comを取り出し、WPE\BOOTフォルダの中に移動する。

21.おなじくwAIKX86抽出ファイル群No.2の中からchs_boot.ttfcht_boot.ttfjpn_boot.ttfkor_boot.ttfwgl4_boot.ttfを取り出し、WPE\BOOT\FONTSフォルダに移動する。

22.wAIKX86抽出ファイル群No.3の中からbootfix.binを取り出し、WPE\BOOTフォルダの中に移動する。


ここで、再び確認。

WPEbootmgrBOOT
│ ├ boot.sdi
│ ├ bootfix.bin
│ ├ etfsboot.com
│ ├ FONTS
│ │ ├ chs_boot.ttf
│ │ ├ cht_boot.ttf
│ │ ├ jpn_boot.ttf
│ │ ├ kor_boot.ttf
│ │ └ wgl4_boot.ttfProgram FilesWindows

上のような構造になっているか確認する。(斜体字はファイルを、太字はフォルダを示している)

そのほかに、oscdimg.exeが保存してあれば良い。

いよいよ、あと必要なファイルは1つだけである。これはこちらで用意した。

BCD.zip


23.ダウンロードしたファイルを解凍し、中身のbcdという名前のファイルをWPE\BOOTフォルダに移動する。結果として、次のような階層構造になる。

WPEbootmgrBOOT
│ ├ bcd
│ ├ boot.sdi
│ ├ bootfix.bin
│ ├ etfsboot.com
│ ├ FONTS
│ │ ├ chs_boot.ttf
│ │ ├ cht_boot.ttf
│ │ ├ jpn_boot.ttf
│ │ ├ kor_boot.ttf
│ │ └ wgl4_boot.ttfProgram FilesWindows

24.WPEフォルダをISOファイルに変換する。これには最後まで残しておいたoscdimg.exeを使う。WPEフォルダとoscdimg.exeを同じ階層において、コマンドプロンプトを起動し、oscdimgの階層までcdコマンドで移動して、以下のコマンドを実行する。

oscdimg -n -m -o -bWPE\BOOT\etfsboot.com WPE winpe_x86.iso

oscdimg実行

カレントフォルダにwinpe_X86.isoというファイルが出来上がっていれば成功である。

25.出来上がったisoファイルを、Imgburnのようなイメージ焼きソフトで、CD-Rなどに焼けば完成である。

USBメモリ版を作るには

まず、上記のCD-R版の作製手順23まで完了させ、WPEフォルダ内に全ての必要なものを用意しておく。(oscdimg.exeの抽出は不必要)

次に、第6章を参考に、USBメモリの初期化を行う。【PeToUSB】を使う方法ならばXP/2000上でも可能である。bootsect.exeによるブートセクタ作成作業にはWPE\Windows\System32に存在するbootsect.exeを使えば良い。

その後、WPEフォルダの中身を全てUSBメモリにコピーする。WPEフォルダごとコピーしてはいけない。bootmgr・BOOTフォルダ・Windowsフォルダ・Program FilesフォルダがUSBメモリのルートになるように、中身だけをコピーする事に注意する。

ただしこのままブートするとストップエラーが出てしまう。もう一工夫、USBメモリの中のWindows\System32\config\SYSTEMを加工することが必要なのだ。

作製環境であるXP/2000においてレジストリエディタを起動し、第9章で紹介した方法と同様に、上記SYSTEMファイルを「ハイブの読み込み」でロードする。やはりaと言うキー名をつけておく。

そしてHKEY_LOCAL_MACHINE\a\ControlSet001\servicesの配下にあるキーのうち、USBで始まる名前のキーを探す。下図のように6個あると思う。

USB関連キー

それぞれのキーにStartというエントリがあるので、値が3になっていたら0に修正する。

3を0に変更

6ヶ所全て修正したら、aをクリックしてアンロードする。

この修正をしておけば、ストップエラーを回避し、USBメモリからWinPE3.0が起動するようになる。(ただし、BIOSやUSBメモリのチップなどによって起動しない場合もある。)

*参考リンク

Windows 7の仮想ハードディスクがスゴイ!─(4)

ストップエラーの対処法については、上記の山市良氏の記事の内容がとても参考になった。

配布したBCDについて(余談)

今回配布しているBCDという名前のファイルは、bcdedit.exeを使って作っている。bcdedit.exeは上記WPEフォルダの中のWindows\system32フォルダの中にある。ただし、bcdedit.exeはWin2000上では実行できないし、XP上ではVista以降の環境で作ったものとは違うファイルが出来上がってしまい少し不安なので、こちらで用意したものを配布することにした。環境さえ用意できれば、誰でも自分で作れるものである。ちょうど2000/XPのboot.iniに相当するものだと思ってもらえば良い。boot.iniはテキスト形式だったのでメモ帳で簡単に作れたが、BCDはバイナリファイルなので、多少面倒ではある。

具体的な作り方は、コマンドプロンプトを開き、bcdedit.exeのある階層に移動する。そして、以下のコマンドを順に打ち込んで実行する。

Bcdedit /createstore BCD

Bcdedit /store BCD -create {bootmgr} /d "Boot Manager"

Bcdedit /store BCD -set {bootmgr} device boot

Bcdedit /store BCD -create /d "WINPE" -application osloader

Bcdedit /store BCD -set <GUID> osdevice boot

Bcdedit /store BCD -set <GUID> device boot

Bcdedit /store BCD -set <GUID> path \windows\system32\winload.exe

Bcdedit /store BCD -set <GUID> systemroot \windows

Bcdedit /store BCD -set <GUID> winpe yes

Bcdedit /store BCD -set <GUID> detecthal yes

Bcdedit /store BCD -displayorder <GUID> -addlast

この11行の命令を順に実行することで、bcdedit.exeと同じ場所にBCDというファイルが完成する。

WinPE2.0の公式ヘルプには、10行目のBcdedit /store BCD -set detecthal yes が載っていたが、WinPE3.0のヘルプでは省略されている。当方の実験では省略すると明らかに起動が早くなるのだが、省略するとエラーが出て起動しない環境があるかもしれないという不安がぬぐいきれず、detecthal yes抜きのバージョンを標準にして、detecthal yesバージョンも同梱した。

気をつけなければいけないのが、上の表で<GUID>と書いてある部分である。実際にはここは4行目のコマンドが返す乱数を打ち込む必要がある。実際のコマンドプロンプト画面を見てもらったほうが分りやすいだろう。

bcdedit実行

<GUID>を何回も打つのが面倒な方は、第8章を参考にバッチファイルを作ればよい。


<目次へ> <前のページへ>