雑記 - WinPE を使った Vaio Pro 11 の BIOS update Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

Windows をリカバリ領域も含めて含めバッサリ消して消し Linux 機として運用している Vaio Pro 11 の BIOS update を行った。えらく面倒だったので、そのメモを覚えているうちに書いておく。まぁ普通の人は Windows8 で運用しているでしょうから、こんなメモ書きが役立つことはないと思いますが。(細かいことは端折ってます

作業の途中、Windows Wizard の Kero さんのアドバイスを頂きました。どうもありがとうございます。

なお、言うまでもありませんが BIOS update はリスクを伴うので、何をやっているのか分からない方は真似しないでください。「自己責任でよろしく」というやつです。:-)

!Windows PE
ファームウェアアップデートプログラムは、Windows 用のプログラムなので、何らかの Windows 環境が必要です。VAIO Pro 11 上の Windows はバッサリ消去しているので、Windows PE を使ってインストールすることを考えました。(Windows は外部ドライブから起動することができないようです。Windows のミニマム環境である Windows PE であれば USB メモリからでも起動できます。この Win PE があれば、Windows のサルベージ時にも役立つと思います役立つので作っておくと吉かと。)

WinPE の作成方法を説明したページは沢山ありますので、ここでは述べません。私が Windows PE な USB メモりのメモリの作成で参考にしたページをあげておきます。
*[[http://www.atmarkit.co.jp/ait/articles/1007/28/news101.html]]
*[[http://www.atmarkit.co.jp/ait/articles/1008/11/news106.html]]
*[[http://harablo2012.blogspot.jp/2012/12/windowspe-40x64.html]]
上の二つは Windows PE 3.x のもの、下の一つは Windows PE 4.0 のものです。
WinPE には、x86 (32bit) 用と amd64 (64bit) 用があることに注意。(これが結構重要)

!x86 WinPE 上での実行
さて、VAIO Pro の firmware アップデートプログラムを Linux 上で調べてみると、
EP0000306537.exe: PE32 executable (GUI) Intel 80386, for MS Windows
と表示されるので x86 なプログラムのようです。ですので、x86 な WinPE を用意すれば良さそうです。そこで x86 な WinPE 上でこのプログラムを実行していくと、「VAIO のファームウェアが実行できません。アップデートプログラムが破損している可能性があります。云々」というパネルが表示され、アップデートを実行することができません。何かが変です。
(ちなみに、DLL の依存関係等を調べるツール dependancy walker を使ってみると、あれこれ DLL が足りないような表示になってしまいます。)

アップデートプログラムを起動すると
C:\ProgramData\Sony Corporation\Sony Packaging Manager\PackagingTemp\{22F3168E-4765-44D8-A71C-D4A404FA9C4A}
内に、アップデートプログラムの中身が展開されます。この中に、バッチファイル UPDTW64.BAT が存在し、そこから Afuwinx64 というプログラムを使ってアップデートしていることが分かります。ところが調べたところ、名前から推測できるように afuwinx64 は 64bit プログラムであり、x86 な WinPE 上では実行できません。このことから「破損している可能性がある」というエラー表示の意味は、32bit 環境で 64bit プログラムを実行しようとした為と思われます。

整理すると、アップデートプログラム自体は 32bit プログラムなくせに、内部で使われているコアなプログラムは 64bit であるために、64bit。ところが WinPE では 32bit と 64bit を同時に扱うことができない WinPE 上ではうまく扱うことができないのでうまく動作しなかった。ということのようです。(なお通常の Windows には、64bit環境上で32bitを実行するための WOW64(Windows 32-bit On Windows 64-bit)というサブシステムがはいっているそうです

!展開したファイルを amd64(64bit) WinPE 上で実行
ここまで分かると後は簡単。32bit 環境の x86 WinPE もしくは通常の Windows 上で、アップデートプログラムを起動し、展開されたファイル群を保存一旦保存

その後に、64bit な amd64 WinPE 上で、バッチファイルに掛かれているように保存したファイル群に含まれるバッチファイルの通りプログラムを実行するだけです。

(結果)バッチリ、アップデートできました。

!蛇足
64bit (amd64)な WinPE 上で 32bit プログラムを実行すると、
The subsystem needed to support the image type is not present.
と言われてしまいます。ここでいう subsystem とは、32bit プログラムを実行するための DLL 群等を意味しているようです。(それならそう書けばいいと思うのですが、Windows のエラーメッセージは分かりにくいですねぇ)