はじめに
Windows 11 で、
特定のドライバーだけ、Windows Update から再インストールされないようにしたい
というケースがあります。
今回やりたかったのは、まさにこれでした。
前回の記事では、エッジPCが
Windowsロゴ
↓
ログイン画面直前
↓
ブラックスクリーン
になる問題を切り分けました。
確認したところ、
Intel GPU Driver
↓
Microsoft Basic Display Adapter
へ変更すると症状が改善しました。
しかし、その後もう一つ問題が発生しました。
Microsoft Basic Display Adapter
↓
正常動作
↓
Windows Update
↓
Intel GPU Driver が再インストール
↓
再び不安定化
つまり、
ドライバーを戻すだけではなく、Windows Updateによって再導入されないようにする必要がある
という状態でした。
ただし、Windows Updateそのものを止めるつもりはありません。
今回の目標は、
Windows Update
├─ OS Update → 許可
├─ Network Driver → 許可
├─ Storage Driver → 許可
└─ Intel GPU Driver → 禁止
です。
この記事では、Windowsの Device Installation Restrictions を使って、特定のIntel GPUだけドライバー更新を禁止した方法をまとめます。
結論:DenyDeviceIDsで対象GPUだけブロックする
今回使用したのは、Windowsの
Device Installation Restrictions
です。
グループポリシーでは、
コンピューターの構成
↓
管理用テンプレート
↓
システム
↓
デバイスのインストール
↓
デバイスのインストールの制限
↓
これらのデバイス ID のいずれかに一致する
デバイスのインストールを禁止する
を使用します。
ここへIntel GPUのDevice IDを登録します。
イメージとしては、
Windows Update
↓
Intel GPU Driver をインストールしようとする
↓
GPU の Device ID を確認
↓
DenyDeviceIDs と一致
↓
インストール拒否
です。
ポイントは、
Windows Update全体を止めるのではなく、対象デバイスだけを指定する
ことです。
なぜWindows Updateのドライバー更新を全部止めなかったのか
Windows Updateからドライバーをすべて除外する方法もあります。
しかしPCにはGPU以外にも、
- Network Adapter
- Storage
- USB
- Bluetooth
- その他のデバイス
があります。
今回問題が確認できているのはIntel GPUだけです。
そのため、
全部止める
のではなく、
問題が確認されたGPUだけ固定する
方針にしました。
特に長期間無人運用するエッジPCでは、
必要な更新経路までまとめて閉じない
ことも重要だと考えています。
まずIntel GPUのDevice IDを確認する
PowerShellを管理者権限で起動し、Displayデバイスを確認します。
Get-PnpDevice -Class Display
例えば、
Status Class FriendlyName InstanceId
------ ----- ------------ ----------
OK Display Microsoft Basic Display Adapter PCI\VEN_8086&DEV_5A85...
のように表示されます。
ここで少し分かりにくいポイントがあります。
Microsoft Basic Display AdapterでもIntel GPUは残っている
FriendlyNameが、
Microsoft Basic Display Adapter
になっていても、GPUそのものがMicrosoft製になったわけではありません。
状態としては、
物理GPU
↓
Intel GPU
使用中Driver
↓
Microsoft Basic Display Adapter
です。
そのためInstanceIdを見ると、
PCI\VEN_8086&DEV_...
のようにIntelのVendor IDが残っています。
Hardware IDを確認する
先ほど取得したInstanceIdを使います。
Get-PnpDeviceProperty `
-InstanceId "<InstanceId>" `
-KeyName "DEVPKEY_Device_HardwareIds"
例えば、
PCI\VEN_8086&DEV_5A85&SUBSYS_XXXXXXXX&REV_0D
PCI\VEN_8086&DEV_5A85&SUBSYS_XXXXXXXX
のような値が取得できます。
ここで、
VEN_8086
はIntelを表します。
そして、
DEV_5A85
がデバイスを識別するIDです。
つまり、
PCI\VEN_8086&DEV_5A85
なら、
Intel
+
特定デバイス
という意味になります。
※ DEV_5A85 は例です。実際には自分のPCで確認した値を使用します。
InstanceId / Hardware ID / Compatible IDの違い
Windowsのデバイス情報を確認していると、
InstanceId
Hardware ID
Compatible ID
が出てきます。
最初は少し分かりにくいので、自分は次のように整理しました。
| ID | イメージ | 用途 |
|---|---|---|
| InstanceId | 住所 | このPC上のどのデバイスか |
| Hardware ID | 型番 | 具体的に何のデバイスか |
| Compatible ID | カテゴリ | より広い条件で何系のデバイスか |
今回重要なのは、Hardware IDです。
Compatible IDを広く指定しすぎない
Compatible IDも確認できます。
Get-PnpDeviceProperty `
-InstanceId "<InstanceId>" `
-KeyName "DEVPKEY_Device_CompatibleIds"
例えば、
PCI\VEN_8086&DEV_5A85
PCI\VEN_8086&CC_0300
PCI\CC_0300
などが表示されます。
それぞれ対象範囲が違います。
PCI\VEN_8086&DEV_5A85
↓
Intel製の特定デバイス
PCI\VEN_8086&CC_0300
↓
Intel製のDisplay系デバイス
PCI\CC_0300
↓
メーカーを問わないDisplay系デバイス
下に行くほど対象が広くなります。
今回止めたいのは、
このPCに搭載されている特定のIntel GPU
です。
そのため、
PCI\VEN_8086&DEV_...
のように、できるだけ対象を狭く指定します。
PCI\CC_0300 のような広い条件を指定すると、意図していないDisplayデバイスまで対象になる可能性があるため注意が必要です。
グループポリシーでIntel GPUをブロックする
gpedit.msc を起動します。
Win + R
↓
gpedit.msc
次に、
コンピューターの構成
↓
管理用テンプレート
↓
システム
↓
デバイスのインストール
↓
デバイスのインストールの制限
へ進みます。
そして、
これらのデバイス ID のいずれかに一致する
デバイスのインストールを禁止する
を開きます。
設定を、
有効
にします。
次に、
表示...
を開き、先ほど確認したGPUのIDを登録します。
例:
PCI\VEN_8086&DEV_5A85
これで、このDevice IDに一致するデバイスへのドライバーインストールを制限できます。
「既にインストールされている一致するデバイスにも適用する」はOFFにした
ここは今回かなり重要でした。
Device Installation Restrictionsには、
既にインストールされている一致するデバイスにも適用する
という設定があります。
今回はチェックを入れませんでした。
理由は、すでに
Intel GPU
↓
Microsoft Basic Display Adapter
↓
正常動作
という状態を作れているからです。
今回やりたいのは、
現在の状態
↓
残す
今後のIntel GPU Driverインストール
↓
禁止する
ことです。
既存デバイスにも制限を遡及適用すると、現在正常に動作しているGPUデバイス自体にも影響する可能性があります。
そのため今回は、
現在のMicrosoft Basic Display Adapterは残し、今後のドライバー更新だけを止める
構成にしました。
レジストリではDenyDeviceIDsとして設定される
設定後は、レジストリの
HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions
に、
DenyDeviceIDs
関連の設定が作成されます。
登録したIDは、
HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions\DenyDeviceIDs
配下で確認できます。
PowerShellなら、
Get-ItemProperty `
-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions\DenyDeviceIDs"
で確認できます。
例えば、
1 : PCI\VEN_8086&DEV_5A85
のように表示されます。
ここで、
本当に対象GPUのIDだけが登録されているか
を確認します。
特に、
PCI\CC_0300
のような広すぎるIDを誤って登録していないか確認します。
Windows Updateのドライバー更新全体は止めない
Windowsには、
ExcludeWUDriversInQualityUpdate
という設定もあります。
これを有効にすると、Windows Updateからドライバーを除外できます。
ただし今回の目的とは違います。
今回作りたいのは、
Windows Update
↓
OS Update
→ 許可
Network Driver
→ 許可
Storage Driver
→ 許可
Intel GPU Driver
→ 禁止
です。
そのため、
ExcludeWUDriversInQualityUpdate = 1
にはしません。
未構成、または環境に応じてWindows Updateからドライバーを取得できる状態を維持します。
設定後の確認
まずDevice Installation Restrictionsを確認します。
Get-ItemProperty `
-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions"
続いて、登録したIDを確認します。
Get-ItemProperty `
-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions\DenyDeviceIDs"
さらにWindows Update側も確認します。
Get-ItemProperty `
-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" `
-Name ExcludeWUDriversInQualityUpdate `
-ErrorAction SilentlyContinue
今回確認したいポイントは、
DenyDeviceIDs
↓
対象Intel GPUのみ登録
ExcludeWUDriversInQualityUpdate
↓
全ドライバー除外にはしていない
ことです。
今回の構成
最終的には、次の状態を目指しました。
Windows Update
│
├─ OS Update
│ └─ 許可
│
├─ Network Driver
│ └─ 許可
│
├─ Storage Driver
│ └─ 許可
│
└─ Intel GPU Driver
↓
Hardware ID
↓
DenyDeviceIDs
↓
更新拒否
GPU側は、
Intel GPU
↓
Microsoft Basic Display Adapter
↓
正常動作
↓
その状態を維持
です。
「直す」だけでなく「直った状態を維持する」
今回一番重要だったのは、
障害を直したあと、その状態をどう維持するか
でした。
PCは修正後も、
Windows Update
Driver Update
再起動
設定変更
が続きます。
特に24時間365日、無人で動作させるエッジPCでは、
障害発生
↓
原因調査
↓
修正
↓
正常動作
だけでは十分ではありません。
その後、
半年後や1年後も同じ構成が維持されているか
まで考える必要があります。
今回の場合は、
Windows Update全体を止める
のではなく、
Windows Updateは残す
↓
問題が確認されたIntel GPUだけ固定する
という方法を選びました。
ただし、これだけでは終わらなかった
DenyDeviceIDs を設定したことで、
今後のIntel GPU Driver
↓
インストール/更新を禁止
することはできます。
しかし、Windowsには
DriverStore
があります。
過去にインストールされたIntel Display DriverのINFパッケージが、
C:\Windows\System32\DriverStore\FileRepository
に残っている可能性があります。
つまり、
DenyDeviceIDs
↓
今後のインストールを防ぐ
ことと、
DriverStore
↓
過去のドライバーパッケージを整理する
ことは別の話です。
そこで次は、DriverStoreに残っているIntel GPUドライバーを確認することにしました。
次回 ― DriverStoreに残ったIntel GPUドライバーを整理する (2/3)
次回は、
DriverStoreに残ったIntel GPUドライバーを
pnputilで確認・整理した方法
について書きます。
具体的には、
- DriverStoreとは何か
pnputil /enum-drivers- Intel Display Driverの探し方
-
oemXX.infの確認 - DriverStoreからの削除
- MicrosoftのInbox Driverとの違い
-
DenyDeviceIDsとDriverStore cleanupの役割の違い
を整理します。
注意
Device Installation Restrictionsの設定を誤ると、必要なデバイスドライバーまでインストールできなくなる可能性があります。
実際に設定する場合は、対象PCのHardware ID / Compatible IDを確認し、まず検証環境で動作確認することをおすすめします。
本記事は、実際のエッジPC運用・障害対応経験をもとに、機密情報に配慮して一部を一般化・匿名化しています。