前書き的なもの
最近仕事で作業用に10インチほどのWindowsタブレットが必要になったため中華メーカーTECLASTのX16というタブレットPCを購入しMicrosoftからダウンロードしたWindows10でクリーンインストールしたのですが、ドライバーが単体で提供されておらずメーカー提供のWindowsインストーラーのOSイメージに組み込まれているのでどうにかWindowsのOSイメージから直接抜き出せないか足掻いた記録です。
まあ普通はOSインストールし直す前にドライバ抽出するだろうし、普通のメーカーならドライバの提供があるので極一部の方向けです。
いきなり結論:「DISM」を利用する
・Windows OSのカスタムイメージ作成ツールである「DISM」を利用してインストールイメージを展開、マウントしてイメージからドライバーを抜き出す。
メーカー提供のWindows OSイメージをインストールしてドライバーを抜くのが一般的ですが、今回はクリーンインストール後にドライバーの提供がOSイメージだけだと気づきました。
そこで、OSインストールイメージに組み込まれてるのなら展開して抜き出せばいいんじゃないかと思い付き調べた結果「DISM」を知りました。
「DISM」はどうやら大規模(数十台、数百台単位)のPCを管理している環境で各種ドライバーや設定、アプリケーション等をプリインストールしてOSイメージとして提供したりするWindows OS用のカスタムイメージ構築ツールのようです。
「DISM」にはWindows OSのカスタムイメージを作成する為にOSイメージを展開、マウントする機能があり、さらにはマウントしたOSイメージからドライバーを抽出する機能まであるのでこれらを利用して行きます。
また、「DISM」はどうやらWindows7辺り以降は各Windows OSに標準インストールされているようなのでWindows10のPCがあればコマンドプロンプトやPowerShellから即利用できます。
「DISM」を利用してドライバーの抽出
まずは今回購入したタブレットPCのメーカーサイトからX16用のOSインストールイメージをダウンロードしておきます。
流れとしては以下の流れ。
・分割イメージ結合(必要に応じて)
・OSイメージマウント
・ドライバ抽出
・OSイメージマウント解除
ありがたいことに必要なすべての機能が「DISM」に備わっているので「DISM」単体で事が済みます。
・OSイメージの展開
今回のメーカーであるTECLASTのX16ではOSインストールイメージがrarの圧縮ファイルでしたので適当なところに展開。
インストールイメージがisoなどのディスクイメージファイルの場合は適当にマウントして中身を適当なところにコピー。
・展開したファイルからOSイメージの本体を見つけ出す
WindowsのOSイメージ本体の拡張子は[.wim]か[.esd]となっています。
また、OSイメージ本体が分割されている場合は[.swm]という拡張子で「install.swm」や「install2.swm」のような感じのファイルに番号が振られた連番のファイルが続きます。
ちなみに、OSイメージは大抵「install.win」という名前になっており「boot.win」などのファイルは[.win]の拡張子になっていますが、何も入っていない素のOSイメージなので注意。(インストール作業のための一時利用の物なのかな?)
今回は「install.swm」の分割ファイルなのでこれをイメージファイルに戻すことから作業を始めます。
・分割OSイメージの結合
PowerShellを"管理者モード"で実行します。
管理者として立ち上げる方法が分からない方は左下の「Windowsアイコン」を右クリックして「Windows PowerShell (管理者)」をクリックしてPowerShellを立ち上げてください。
「DISM」の「Export-Image」を利用して分割ファイルから1つのイメージファイルに戻します。
@DISM /Export-Image コマンド簡易解説
/Export-Image (分割イメージからOSイメージ出力)
/SourceImageFile: (分割ファイルの先頭ファイルを指定)
/SWMFile: (分割ファイル名を指定)
分割ファイルが以下のような名前の場合
-- install.swm
-- install2.swm
-- install3.swm
「SWMFile」の指定は「/SWMFile:install*.swm」になります。
/Sourceindex (インストーラーに含まれるOSエディション指定。基本1で問題ない)
OSインストールイメージには複数のエディション(win10のhomeやproなど)が含まれていることがあり、その管理のためにインデックスとして番号が振られています。
・1つのエディションのみの場合(メーカー製カスタムインストーラーに多い、中華製だと以下のように名前適当で説明なしが大多数)
--インデックス: 1 名前: Drive-C 説明: <未定義>
・複数エディションある場合
--インデックス: 1 名前: Windows 10 Home 説明: (略)
--インデックス: 2 名前: Windows 10 Education 説明: (略)
--インデックス: 3 名前: Windows 10 Pro 説明: (略)
--インデックス: 4 名前: Windows 10 Pro Education 説明: (略)
--インデックス: 5 名前: Windows 10 Pro for Workstation 説明: (略)
Indexを調べるには「dism /Get-WimInfo /WimFile:install.swm」でバージョンとIndexが出力されます。
/DestinationImageFile (OSイメージを出力する場所とファイル名の指定)
今回は以下のコマンドにてデスクトップに展開したOSインストールイメージから分割ファイルを指定してデスクトップに「x16_install.wim」ファイルとして出力します。
PS C:\WINDOWS\system32> dism /Export-Image /SourceImageFile:C:\Users\username\Desktop\images\install.swm /SWMFile:install*.swm /Sourceindex:1 /DestinationImageFile:C:\Users\username\Desktop\x16_install.wim
・OSイメージファイルをマウント
次に「DISM」の「Mount-Wim」を利用してOSイメージの中身を展開します。
@DISM /Mount-Wim コマンド簡易解説
/Mount-Wim (OSイメージのマウント)
/WimFile: (マウントするOSイメージを指定)
/index: (マウントするエディションをインデックスで指定)
/MountDir: (マウント先のフォルダを指定)
適当なところにOSイメージのマウント用フォルダを作ります。(今回はデスクトップに「x16_image」フォルダを作成)
先ほどデスクトップに出力したOSイメージファイル「x16_install.wim」を同じくデスクトップに作成した「x16_image」フォルダに以下のコマンドにてマウントします。
PS C:\WINDOWS\system32> dism /Mount-Wim /WimFile:C:\Users\username\Desktop\x16_install.wim /index:1 /MountDir:C:\Users\username\Desktop\x16_image
・マウントしたOSイメージからドライバの抽出
いよいよ本題のドライバの抽出です。
「DISM」の「Export-Driver」を利用してマウントしたOSイメージ内からドライバを抜いていきます。
@DISM /Export-Driver コマンド簡易解説
/Image: (マウントされたOSイメージのフォルダを指定)
/Export-Driver (マウントしたOSイメージからドライバ抽出)
/Destination: (抽出したドライバの出力先フォルダ指定)
ドライバの出力先として適当なフォルダを作ります。(今回はデスクトップに「export_drivers」フォルダを作成)
1つ前にOSイメージをマウントしたデスクトップの「x16_image」フォルダを指定して、同じくデスクトップの「export_drivers」フォルダに以下のコマンドにてドライバーを抽出。
PS C:\WINDOWS\system32> dism /Image:C:\Users\username\Desktop\x16_image /Export-Driver /Destination:C:\Users\username\Desktop\export_drivers
これでドライバの抽出ができました。
・OSイメージをマウント解除して後始末
ドライバの抽出が終わり、必要なくなったOSイメージを消去するためにマウントの解除から行っていきます。
「DISM」の「Unmount-Wim」でマウントしたOSイメージをマウント解除し消去できるようにします。
@DISM /Unmount-Wim コマンド簡易解説
/Unmount-Wim (マウントされたOSイメージのマウント解除)
/MountDir: (OSイメージがマウントされたフォルダを指定)
/Discard (マウントされたOSイメージに加えられた変更を保存しない様に指定。これを指定しないと時間がかかる)
OSイメージをマウントしたデスクトップの「x16_image」フォルダを指定して以下のコマンドにてマウント解除します。
マウント解除する際にはマウント先フォルダを開いているエクスプローラ等はすべて閉じてください。完全にマウント解除しきれずにフォルダが消去出来ません。
PS C:\WINDOWS\system32> dism /Unmount-Wim /MountDir:C:\Users\username\Desktop\x16_image /Discard
マウント解除出来たらマウント先として作成した「x16_image」フォルダや展開したOSイメージを消去することができるので消去して終了です。
後書き的なもの
「DISM」ではインストールイメージからだけでなく起動中のOSからも「dism /Online /Export-Driver」でドライバー抽出できることが分かったので、今回の件は新規に中華製PCを購入した際の為になりそうです。