Windows 10のデバイスドライバーについて調べていたら、Windows 10Xではデバイスドライバーに条件が課せられ、「Windows Drivers」という新しいルールに沿ったものが必要になることがわかった。となると、Windows 10Xのベースとなる今年のWindows 10は、どこかで“大規模”なアップデートをする必要がある。
なぜなら、デバイスドライバーのバージョンなどに変更がある場合には、Windowsを再インストールするフルアップデートが必要なためだ。しかし、今春のアップデートは、19H2(Windows 10 Ver.1909、November 2019 Update)や20H2(Windows 10 Ver.20H2、October 2020 Update)と同じく「サービステクノロジー」によるアップデートとなることが発表されている。
つまり、今秋登場する21H2は、大規模なアップデートになるしかない。大規模なアップデートでは、カーネルが大きく変わり、ドライバーの機能向上などにより、比較的大きなものを含む新機能が導入されそうだ。
WDDMのバージョンから推測できる今秋の大型アップデート
きっかけは、WDDMのバージョンだった。現在Dev ChannelでプレビューしているWindows 10では、WSL2のGPU利用が可能になっている。これは、昨年後半からDevChannelに登場したもので、Microsoftのブログによれば、WDDM 2.9以上のGPUドライバーが必要になるという。
●DirectX Developer Blog
https://devblogs.microsoft.com/directx/directx-heart-linux/
WDDM(Windows Display Driver Model)は、DirectXに関連して、ディスプレイドライバーの仕様を定めたものだ。DirectXのバージョンアップなどで新機能が提供されると、原則WDDMのバージョンも更新される。そもそも、DirectXは、GPUの新機能に対応したものだからだ。現行の20H1と20H2では、WDDM 2.7までの対応となっている。
WDDMのバージョンは、DirectXの情報を表示するDxDiag.exeというWindowsの付属ツールでGPUドライバーに関連した情報として表示できる。20H2上で動作させるとWDDM 2.7と表示する。もちろんインストールしてあるドライバーのバージョンにも依存する。
Windows Insider ProgramのDev Channelの最新プレビュー版Build 21322では、WDDM 3.0が表示される。
もちろん、そのためにはIntelやNVIDIAのサイトからプレビュー版のドライバーを持ってくる必要がある。現在では、IntelやNVIDIAのGPUドライバーは、1つのパッケージで複数のデバイス、複数のWindowsバージョンに対応している。Build 21322でWDDM 3.0を表示したドライバーを20H2にインストールしてみると、WDDM 2.7と表示される。これにより、20H2はWDDM 2.7までしか対応していないことがわかる。
Dev Channelのプレビュー版は、昨年から今年にかけてのものは、大きく3つの世代に対応する。それぞれ「MN_RELEASE」「FE_RELEASE」「CO_RELEASE」というリリース名がある。これは、Windowsの開発で世代を表していると考えられる。また、このリリースに応じて、ビルド番号も大きく増加する。
WSL2のGPU対応にWDDM 2.9以上のドライバーが必要だとすると、少なくとも、今秋のアップデート(21H2)では、FE_RELEASEと同等のカーネルが採用されるはずだが、少なくとも21H1のカーネルに関しては、20H1や20H2と同程度のサイズしかなく、21H1がサービステクノロジーでのアップデートになることから、WDDM 2.7対応のままと想定される。しかし、WSL2のGPU対応はWDDM 2.7では不可能。となると、秋のアップデートでWDDM 2.9以上を採用するしかない。
さらにデバイスドライバーを調べた
さらに調べると、20H1から大きな変更が加えられたことがわかった。Windows 10のデバイスドライバーは、これまで「ユニバーサルドライバー」(または「ユニバーサルWindowsドライバー」)と呼ばれていた。デバイスドライバーの基本モデルは、WDM(Windows Driver Model)のままで大きく変化していない。しかし、デバイスドライバー開発では、ドライバーの作り方やインストール方法などにルールが定められている。Windows 10のRTM(Windows 10 Ver.1507。最初のバージョン)から始まったルールがユニバーサルドライバーだ。
WDMは、大きくカーネルモードドライバーとユーザーモードドライバーの2つに別れる。これは、カーネル空間で動作するか、一般アプリケーションと同じユーザー空間で動作するかの違いだが、基本的にはユーザーモードドライバーは、最終的にはカーネルモードドライバーを呼び出して処理を完了する。そもそも、ハードウェアをアクセスするか、カーネル内のデータを利用するような場合でなければ、デバイスドライバーを作る必要がない。
この2つのモードでドライバーを作る仕組みがKMDF(Kernel-Mode Driver Framework)とUMDF(User-Mode Driver Framework)だ。これは、ドライバーのひな形となるもの(クラス)で、必要なメソッドやプロパティといった「差分」定義するだけでドライバーを開発できる。実は、このKMDF/UMDFにもバージョンがある。Windowsは、すべて特定のバージョンのKMDF/UMDFに対応していて、Windowsがバージョンアップされると、対応可能なKMDF/UMDFのバージョンが上がる。逆に、過去のWindowsでも動作させるには、特定のバージョンでドライバーを開発する必要がある。
KMDF/UMDFなどを含め、ドライバー開発のための基本的なソフトウェアや組み込む定義や機能などをまとめたのがWindows Driver Kit(WDK)で、これも、Windowsのバージョンに応じてバージョンアップしていく。
ユニバーサルドライバーはRS1で新ルールが適用
RS1(Windows 10 Ver.1603)でドライバー開発にDCHU(DCHユニバーサル)ドライバーというルールが加わった(DCHU原則ともいい、これに従うドライバーをDCHUドライバーと呼ぶ。DCHについては後述する)。RS1からは、Windows 10ファミリーのカーネル部分はOne Coreと呼ばれ、すべて共通になった。これは、
Windows 10 Mobile
Windows 10 Desktop
Windows 10 IoT
Windows 10 SurfaceHub
Windows 10 Holographic
Windows 10S
などで共通のカーネルや関連モジュールを利用する。これはすべてのWindows 10でデバイスドライバーを共用するためだ。
というのも、Windows 10 IoTには、ディスプレイを持たず、Windowsのデスクトップが存在しないバージョンもある。となると、エクスプローラーからインストーラーを起動するといった従来の方法でデバイスドライバーを組み込むわけにはいかなくなる。そこで必要なルールがDCHUなのである。
また、Windows 10Sでは、UWPアプリケーションのみが実行可能で、Win32アプリ(デスクトップアプリ)は動作できない。このため、ドライバーに関連するGUIプログラム(これをHardware Support Application:HSAと呼ぶ)はすべてUWPとして開発しなければならなくなった。そのほかにも、DCHUではインストール方法やそのためのINFファイルなどにも細かい制限が課せられた。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ