Surface Laptop (第1世代) で Windows PE のキーボードが反応しない問題をドライバ追加で解決した話

## 1. はじめに
Windows PE（Preinstallation Environment）は、Windowsのセットアップやトラブル対応時に便利な軽量環境ですが、**Surface Laptop（第1世代）でUSBブートした際、キーボードがまったく反応しない**という現象に遭遇しました。

調査と検証の結果、**ドライバの追加で解決できました**。


## 2. 問題の概要と原因
### 起きたこと
- USBメモリに作成したWindows PEをSurface Laptop（第1世代）で起動
- コマンドプロンプト画面は表示され、**タッチパッドでカーソル移動・クリックは可能**
- しかし、**キーボード入力だけが完全に無反応**

### 原因
標準のWindows PEには、Surface Laptopのキーボードを制御するためのドライバが含まれていないため。  
**Microsoftが提供するSurface向けドライバを追加する必要がある**と判明しました。


## 3. 解決アプローチの概要
Surface Laptop用の公式ドライバ（MSI形式）をMicrosoftサイトからダウンロードし、必要なドライバをWindows PEの`boot.wim`に追加することで解決を図りました。


## 4. 解決手順（詳細）
### ✅ 前提
- Windows ADKとPEアドオンがすでにインストールされている
- `C:\winpe` にWindows PE作成用の作業ディレクトリがある
- `C:\ForDevelop\msi_extract` ディレクトリを作成済み

※ Windows PE作成とドライバ追加にはSurface Laptopとは別のWindows機を使っています。

### ① Surfaceドライバのダウンロード
以下のURLから、Surface Laptop（第1世代）用のドライバを入手します。
- 製品ページ：[Surface のドライバーおよびファームウェアの更新プログラムを管理および展開する](https://learn.microsoft.com/ja-jp/surface/manage-surface-driver-and-firmware-updates)
- ダウンロードページ：[Surface Laptop Drivers and Firmware](https://www.microsoft.com/en-us/download/details.aspx?id=55489)

### ② MSIファイルの展開
ダウンロードしたMSIファイルを以下のコマンドで展開します。（管理者として実行）
```cmd
msiexec /a SurfaceLaptop_Win10_15063_1803509_0.msi /qb TARGETDIR=C:\ForDevelop\msi_extract
```

### ③ ドライバ追加バッチを作成
`make_winpe_add_surfacelaptop_driver.bat` という名前で、以下の内容のバッチファイルを作成します。
```bat
rem Surface Laptop用ドライバをWindows PEに追加するバッチ
set WS_DIR=C:\winpe
set SL_DIR=C:\ForDevelop\msi_extract\SurfaceUpdate

Dism /Mount-Image /Imagefile:"%WS_DIR%\media\sources\boot.wim" /Index:1 /Mountdir:"%WS_DIR%\mount"

dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:"%SL_DIR%\SerialIOGPIO" /Recurse
dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:"%SL_DIR%\SurfaceHidMini" /Recurse
dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:"%SL_DIR%\SurfaceSerialHub" /Recurse
dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:"%SL_DIR%\itouch" /Recurse
dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:"%SL_DIR%\serialioi2c" /Recurse
dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:"%SL_DIR%\SerialIOUART" /Recurse
dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:"%SL_DIR%\SerialIOSPI" /Recurse
dism /Image:"%WS_DIR%\mount" /Add-Driver /Driver:"%SL_DIR%\SurfaceIntegration" /Recurse

Dism /Unmount-Image /Mountdir:"%WS_DIR%\mount" /Commit
```
※ ChatGPT 4o からの提案で、キーボード制御に関連しそうなドライバを重点的に追加しています。

### ④ ドライバの組み込みとUSBメディア作成
1. 「**展開およびイメージング ツール環境**」を**管理者で起動**
1. 上記バッチファイルを実行
1. USB作成コマンドを実行（`E:`はUSBメモリのドライブに合わせて変更）
```cmd
makewinpemedia /ufd "C:\winpe" E:
```

### ⑤ 起動テスト
Surface LaptopにUSBを挿して起動。  
コマンドプロンプト画面で**キーボード入力ができれば成功**です。


## 5. 補足情報
### 🧩 使用した環境
| 項目 | 内容 |
|------|------|
| 検証機 | Surface Laptop 第1世代（モデル 1769） |
| OS | Windows 10 Pro |
| CPU | Intel Core i5-7200U @ 2.50GHz |
| メモリ | 4GB |
| ストレージ | 119GB SSD |

ADKバージョンは`Windows 11 バージョン 22H2 用 ADK`だったと思います。（Windows 11を選択したという記憶はあります。）
[Windows ADK のダウンロードとインストール](https://learn.microsoft.com/ja-jp/windows-hardware/get-started/adk-install)


### 🧩 起動方法の補足
#### 通常起動方法
1. 電源オフ状態で**F5（音量下ボタン）を押しながら電源ボタン押下**
1. Microsoftロゴが出たらキーを離す

#### UEFI画面から起動順変更（うまく起動しない場合）
1. 電源オフ状態で**F6（音量上ボタン）を押しながら電源ボタン押下**
1. UEFI画面が開く
1. 「Boot configuration」からUSBを最優先に設定して保存・再起動


## 6. 参考にしたサイト
- [オフライン Windows イメージへのドライバー パッケージの追加と削除](https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/add-and-remove-drivers-to-an-offline-windows-image?view=windows-11)
- [Windows 展開中に Surface Laptop キーボード、Surface Pro キーボード、または Surface Pro タイプ カバーを有効にする方法](https://learn.microsoft.com/ja-jp/surface/enable-surface-keyboard-for-windows-pe-deployment)
- [日本語版WindowsPEメディアを作成する方法](https://qiita.com/SkyLaptor/items/204245cf6bb4fee5b19d)