0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# 3.Windows Updateは止めず、Intel GPUドライバーだけをブロックした (1/3)

0
Posted at

はじめに

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運用・障害対応経験をもとに、機密情報に配慮して一部を一般化・匿名化しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?