ドライバーパッケージからの共同インストーラーの削除
注意事項
2023年1月以降、共同インストーラーを含むドライバーパッケージはHardware Developer Center ポータルによって署名されなくなります。 要件の詳細については、ウィンドウハードウェア互換性プログラムの仕様とポリシー、特にバージョン22H2 ポリシーのセクション Device.DevFund.INF.Declarative を参照。
このページでは、ドライバーパッケージに共同インストーラーが存在する一般的な理由を説明し、共同インストーラーなしで同じタスクを実行するメカニズムを提供します。
WDFおよびWinUSBの共同インストーラー
WDF共同インストーラーとWinUSB共同インストーラーは、Windows 10 以降を実行しているシステムでは必要ありません。 WDF共同インストーラーの参照は、追加の作業を行わずに削除できます。 WinUSB共同インストーラーの参照は削除できます。WinUSBは、Include ディレクティブと Needs ディレクティブを使用してドライバーパッケージ INF から参照される必要があります。
ユーザーインターフェイスを表示するソフトウェアのインストール
インストール中にアプリケーションを起動するのではなく、ドライバーパッケージ INF の DDInstall.Software セクションから AddSoftware ディレクティブを使用してインストールされるユニバーサル Windows プラットフォーム アプリケーションを提供します。
詳細については、ドライバーとユニバーサルウィンドウプラットフォーム (UWP) アプリの組み合わせを参照。 AddSoftwareディレクティブは、Windows 10 バージョン 1703 以降のウィンドウバージョンでサポートされています。
詳細については、以下関連ソフトウェアのインストールを参照。
デバイスのフレンドリ名の設定
INF ファイル
ドライバーパッケージ INF は、次のようにデバイスフレンドリ名を設定できます。
[DDInstall.HW]
AddReg = FriendlyName_AddReg
[FriendlyName_AddReg]
HKR,,FriendlyName,, "Device Friendly Name"
Runtime
フレンドリ名は、次の API のいずれかを使用して DEVPKEY_Device_FriendlyName プロパティを設定することにより、IRP の開始または PrepareHardware フェーズ中にドライバーによって設定できます。
その他のデバイス設定/構成:
可能な場合、ドライバーはドライバーのIRPの開始またはPrepareHardwareフェーズ内でデバイスの設定と構成を変更できます。 実行時に状態を変更する場合、ドライバーはドライバー パッケージの分離要件に従う必要があります。 これらの要件には、ドライバーの構成と状態レイアウトに関するガイダンスが含まれており、ドライバーの外部変更に対する耐性を高め、更新を容易にし、インストールをより簡単にすることでドライバーの将来性を確保するのに役立ちます。
ドライバー自体内で設定できない設定と構成については、ドライバーパッケージには、設定と構成を変更するユーザーモードランタイムコンポーネントが含まれる場合もあります。 これは、ユーザー向けアプリまたは構成を更新するWin32 サービスです。 デバイスで使用するユーザー モード ソフトウェアを組み込む方法については、コンポーネントINFファイルの使用を参照してください。
サービスなどの永続コンポーネントを使用する場合は、その機能が必要であり、ドライバー パッケージ INF 内やドライバー自体内など、リソースをあまり消費しない方法で実行できないことを確認してください。 関連するデバイスが接続されている場合にのみサービスが実行されるようにする方法については、サービス トリガー、デバイスと対話する Win32 サービス、およびデバイス インターフェイス通知の登録を参照してください。 サービスは、APIバリデーターに合格するなど、最新の要件も満たしている必要があります。
関連ソフトウェアのインストール
DCHドライバー要件の「コンポーネント化」部分では、SoftwareComponent と呼ばれる概念が導入されました。これは、デバイスドライバーのインストールを関連ソフトウェアから分離するメカニズムです。 ソフトウェアコンポーネントが INF によって作成されると、ソフトウェアコンポーネントにマップされる子デバイスが自動的に作成されます。 この子デバイスは、親デバイスに関連付けられたソフトウェアをインストールする目的で存在します。 このソフトウェアは、本体デバイスやドライバーとは独立してインストールおよび更新できます。
SoftwareComponentドライバー パッケージ INF内でソフトウェアをインストールする推奨メカニズムは、AddSoftware ディレクティブを使用することです。 これにより、Windows ストアからのソフトウェアのダウンロードとインストールがトリガーされます。
ドライバーとデバイス間の依存関係
デバイスの起動/列挙順序の依存関係
可能な限り、デバイス間の依存関係や開始順序の要件は回避する必要があります。
ACPI 列挙デバイスの場合、ACPI ファームウェアで依存関係オブジェクト (_DEP) を使用して、デバイスの開始順序を強制することができます。 詳細については、デバイス管理名前空間を参照。
ドライバーは、IRP_MN_QUERY_DEVICE_RELATIONS IRP に応答して、デバイス間の関係 (削除関係など) を定義できます。 詳細については、IRP_MN_QUERY_DEVICE_RELATIONSを参照。
ドライバー パッケージのインストールの依存関係
CopyInfディレクティブを使用すると、別のドライバーと同じインストール API 呼び出し中に追加のドライバーパッケージをインストールすることもできます。 インストール API に渡されるドライバー パッケージは、CopyInfで参照されるドライバー パッケージよりも前にインストールされますが、CopyInfで参照されるドライバー パッケージは、特定の順序でインストールされることは保証されません。
複数のベンダーのコンポーネントを単一のドライバーパッケージにバンドルして構成する
ドライバーパッケージは、拡張 INF と呼ばれるタイプのドライバーパッケージ INF をサポートします。 これは、「ベース」ドライバーパッケージ INFの機能を強化および拡張するために特別に設計されたINFファイルです。 拡張機能はデバイスのファンクションドライバーを提供しない場合がありますが、その他のディレクティブを使用したり、デバイスの他の設定を書き込んだりすることはできます。 ドライバーのインストール中、デバイスの機能を提供するドライバーランキングを使用して単一のベースドライバーパッケージ INF が選択され、その後、デバイス用の拡張 INF が選択されます。 詳細については、「拡張 INF ファイルの使用」を参照してください。
拡張ドライバー パッケージ INF を利用するための一般的なパラダイムは、ハードウェアの製造元が基本ドライバー パッケージ INF を提供し、システム内でその部分を出荷する OEM が、そのシステム用にカスタマイズする拡張ドライバー パッケージ INF を作成することです。
ファームウェアアップデートのインストール/調整
更新されるデバイスの性質に応じて、異なるファームウェア更新メカニズムが推奨されます。 次のそれぞれを使用して、Windows Update 経由でファームウェア更新プログラムを配布およびインストールできます。
取り外し不可
UEFIファームウェア アップデートプラットフォームは、システムファームウェアなど、削除できないシステムのコンポーネントをアップデートするように設計されています。 詳細については、UEFIファームウェア更新プラットフォームを参照。
リムーバブル
HID や USB デバイスなどのリムーバブル デバイスの場合、CFU モデルではファームウェアを安全に更新できます。 詳細については、コンポーネントのファームウェアアップデートを参照。
カスタム実装
あるいは、ドライバーの裁量でデバイスのファームウェアを更新するカスタムドライバーを作成することもできます。 詳細については、カスタムファームウェアアップデートドライバーを参照。