転売対策か何かの理由(ライセンスの問題?)で、リカバリディスクは1部しか作れないようになっているようですが、DVDに焼いたものは保存性にどうも疑問があります。以前TVドラマをDVD-Rに焼いていたのですが、ほんの1ヶ月くらいで読めなくなったことがありました。怪しいDVD-Rを使うからだ!と言われればそれまでですが、それ以来DVD-Rよりは保存性がいいと言われているDVD-RW(もちろん国内メーカーのもの)を使うようにしていますが、それでも使えなくなったらと思うと心配です。
話がそれました。
いったんはDVDにリカバリを作ったものの、やはりUSBメモリにリカバリメディアを用意したいと思いました。が、一度作ってしまったらそれを許してくれません。WEBをいろいろ見てみると、リカバリメディアの作成に失敗してしまってもう二度と作れなくってしまった人もいるようなので、そういう人のためにもここに方法を記録しておきたいと思います。
できるだけ簡単な方法として、リカバリメディア作成処理の本体であるrecovburncd.exeにパッチを当てるプログラムを書こうと思ったのですが、このexeはデジタル署名がついていて改造が困難なこととそのプログラムを作る時間がないので、手動での操作手順だけ示したいと思います。
前置きが長いですが、この方法はちょっと面倒且つ難しいです。慣れていない人はそれなりの根気が要るかもしれません。また、この方法が適用できるのは今のところ特定のバージョンのrecovburncd.exeに対してのみです(ファイルサイズ504120byte、更新日時2012年3月22日13:18:54のもの)。他のバージョンでは、下記手順のアドレスを調整しなければいけないでしょう。
では、方法です。
- ここのページからWinDbgをダウンロードしインストールします。
- WinDbgを「管理者として実行」します。
- 「File」→「Open Executable」メニューを押して、c:\Program Files (x86)\Lenovo\Factory Recovery\recovburncd.exeを開きます。
- 「Save information for workspace?」と聞かれたら、Noを押します。
- Commandウィンドウで lm [ENTER] とタイプします。モジュールの一覧が表示されますので、少しスクロールバックしてモジュール名=rec7burncdを探します。そのstartアドレスを控えておきます(通常は00400000hになります)。
- Commandウィンドウで bp 0x40c7fc [ENTER] とタイプします。この0x40c7fcの部分は、前の手順で控えたstartアドレスに+C7FChを加えたものとします。
- g [ENTER]とタイプします。Commandウィンドウの最終行が
0040c7fc e85f0d0000 call rec7burncd+0xd560 (0040d560)
と表示されていればOKです。そうでない人はrecovburncd.exeのバージョンが異なっていると思われます。あきらめるか、何らかの方法でオフセット値を再調査しなければいけません。 - 次に「F10」を1回だけ押してください。しばらく*BUSY*表示となったあと、再びプロンプトに戻ってきます。このとき4行くらい前にeax=00000001と表示されている場合はリカバリ作成済みです。一方、eax=00000000と表示された場合リカバリはまだ作成されていません。このeaxを強制的に00000000に書き換えることでリカバリ作成処理に移ることができるようになります。
- r eax=0 [ENTER]とタイプして、eaxレジスタの値を1→0に書き換えます。
- g [ENTER]とタイプして続きを一気に実行します。
以降は、リカバリメディアの作成を行うダイアログが表示されて処理を進めることができるはずです。
私はこの方法で新たにUSBメモリにリカバリメディアを作成することができました。これで4枚ものかさばるDVDを管理しなくて済みます。
しかし、私の場合このUSBメモリからブートすることができませんでした。調べてみると、USBメモリ上のリカバリ用パーティションがactiveになっていない、MBRにブートコードが書き込まれていないということのようです(リカバリメディア作成中にブートコードを書いてくれない仕様なのかなあ)。
その後もいろいろと検索してみたのですが、書き込み済みのUSBメモリのMBRにブートコードだけを書き込む方法がなかなか見つかりませんでした。仕方ないので、MBMをUSBメモリにインストールしました。幸いネットワークブートできるMBMを用意してあったので、そこからPCをブートしてUSBメモリにMBMをインストールしました(通常はCDブートの方が簡単かも)。ついでに、パーティションもアクティブにしておきました。
ようやくUSBメモリ版リカバリメディアが用意できました。