Windows 10 のデバイスで使用するユーザー モード ソフトウェアを含める場合は、DCH 準拠ドライバーを作成するための次のオプションがあります。
| メソッド | シナリオ |
|---|---|
| ハードウェア サポート アプリ (HSA) | Microsoft Store から提供およびサービスされる UWP アプリとしてパッケージ化されたデバイス アドオン ソフトウェア。 推奨アプローチ。 |
| ソフトウェアコンポーネント | デバイス アドオン ソフトウェアは、MSI または EXE バイナリ、Win32 サービス、または AddReg と CopyFiles を使用してインストールされたソフトウェアです。 参照バイナリは、デスクトップ エディション (Home、Pro、Enterprise) でのみ実行されます。 参照先のバイナリは、Windows 10 S では実行できません。 |
ソフトウェア コンポーネントは、1 つ以上のソフトウェア モジュールをインストールできる独立したドライバー パッケージです。 インストールされているソフトウェアはデバイスの価値を高めますが、基本的なデバイス機能には必要なく、関連するファンクション ドライバー サービスを必要としません。
このページでは、ソフトウェアコンポーネントの使用に関するガイドラインを提供します。
はじめに
コンポーネントを作成するには、拡張 INF ファイルの INF DDInstall.Components セクションで INF AddComponent ディレクティブ を 1 回以上記述します。 拡張 INF ファイルで参照されるソフトウェア コンポーネントごとに、システムによって仮想的なソフトウェア列挙の子デバイスが作成されます。 複数のドライバー パッケージが同じソフトウェア コンポーネントを参照できます。
仮想デバイスの子は、親デバイスが起動されている限り、他のデバイスと同様に個別に更新できます。 保守の観点から適切な数のグループに機能を分け、各グループごとに 1 つのソフトウェア コンポーネントを作成することをお勧めします。
ソフトウェア コンポーネントごとに INF ファイルを提供する必要があります。
ソフトウェア コンポーネントの INF で AddSoftware ディレクティブ が指定されている場合、コンポーネント INF:
- ユニバーサルINFファイルである必要があります。
- SoftwareComponent セットアップクラスを指定する必要があります。
AddSoftware ディレクティブは 1 回以上指定できます。
注
AddSoftware ディレクティブのタイプ 2 を使用する場合、コンポーネント INF を使用する必要はありません。 ディレクティブは、任意の INF で正常に使用できます。 ただし、種類 1 の AddSoftware ディレクティブは、コンポーネント INF で使用する必要があります。
さらに、ソフトウェア コンポーネント デバイスに一致する INF (コンポーネントかどうかを問わず):
- AddService ディレクティブを使用して Win32 ユーザー サービスを指定できます。
- INF AddReg ディレクティブとINF CopyFiles ディレクティブを使用してソフトウェアをインストールできます。
- ファンクション ドライバー サービスを必要としません。
- 親デバイスとは独立して、ユーザーがアンインストールできます。
ユニバーサル ドライバー向けのドライバー パッケージ インストール ツールキットに、コンポーネント INF の例があります。
注: ソフトウェア列挙コンポーネント デバイスを機能させるには、その親を起動する必要があります。 親デバイスで使用できるドライバーがない場合、ドライバー開発者は独自のドライバーを作成し、必要に応じてパススルー ドライバー "umpass.sys" を利用できます。 このドライバーは Windows に含まれており、実質的にはデバイスを起動する以外に何もしません。 umpass.sys を使用するには、開発者は、INF にそのセクションのディレクティブが指定されているかどうかにかかわらず、以下に示すように、取り得る各 [DDInstall.*] セクションについて、対応する [UmPass.*] セクションへの Include/Needs INF ディレクティブを DDInstall セクションで使用する必要があります。
[DDInstall]
Include=umpass.inf
Needs=UmPass
; also include any existing DDInstall directives
[DDInstall.HW]
Include=umpass.inf
Needs=UmPass.HW
; also include any existing DDInstall.HW directives
[DDInstall.Interfaces]
Include=umpass.inf
Needs=UmPass.Interfaces
; also include any existing DDInstall.Interfaces directives
[DDInstall.Services]
Include=umpass.inf
Needs=UmPass.Services
; also include any existing any DDInstall.Services directives
ソフトウェア コンポーネントからデバイスへアクセスする
ソフトウェア コンポーネントに関連付けられているデバイスのデバイス インスタンス ID を取得するには、INF AddSoftware directive セクションの SoftwareArguments 値を ランタイム コンテキスト変数と共に使用します。
実行可能ファイルは、その受信引数リストからソフトウェア コンポーネントのデバイス インスタンス ID を取得できます。
次に、ソフトウェア コンポーネントがユニバーサル ターゲット プラットフォームを対象としている場合は、次の手順を使用します。
- ソフトウェア コンポーネントのデバイス インスタンス ID を使用して CM_Locate_DevNode を呼び出し、デバイス ハンドルを取得します。
- CM_Get_Parent を呼び出して、そのデバイスの親のハンドルを取得します。 この親デバイスは、INF AddComponent Directive を使用してソフトウェア コンポーネントを追加したデバイスです。
- 次に、親デバイスのデバイス インスタンス ID を取得するには、CM_Get_Parent から取得したハンドルに対して CM_Get_Device_ID を呼び出します。
ソフトウェア コンポーネントが Desktop ターゲット プラットフォーム のみを対象とする場合は、次の手順を使用してください。
- SetupDiCreateDeviceInfoList を呼び出して、空のデバイス情報セットを作成します。
- ソフトウェア コンポーネント デバイスのデバイス インスタンス ID を使用して SetupDiOpenDeviceInfo を呼び出します。
- SetupDiGetDeviceProperty を と共に呼び出して、親のデバイス インスタンス ID を取得します。
例
次の例は、ソフトウェア コンポーネントを使用して、グラフィックス カード用の実行可能ファイルを使用してコントロール パネルをインストールする方法を示しています。
ドライバー パッケージ INF ファイル
[Version]
Signature = "$WINDOWS NT$"
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
Provider = %CONTOSO%
DriverVer = 06/21/2006,1.0.0.0
CatalogFile = ContosoGrfx.cat
PnpLockdown = 1
[Manufacturer]
%CONTOSO%=Contoso,NTx86
[Contoso.NTx86]
%ContosoGrfx.DeviceDesc%=ContosoGrfx, PCI\VEN0001&DEV0001
[ContosoGrfx.NT]
;empty
[ContosoGrfx.NT.Components]
AddComponent = ContosoControlPanel,, Component_Inst
[Component_Inst]
ComponentIDs = VID0001&PID0001&SID0001
[Strings]
CONTOSO = "Contoso Inc."
ContosoGrfx.DeviceDesc = "Contoso Graphics Card Extension"
ソフトウェア コンポーネント INF ファイル
[Version]
Signature = "$WINDOWS NT$"
Class = SoftwareComponent
ClassGuid = {5c4c3332-344d-483c-8739-259e934c9cc8}
Provider = %CONTOSO%
DriverVer = 06/21/2006,1.0.0.0
CatalogFile = ContosoCtrlPnl.cat
PnpLockdown = 1
[SourceDisksNames]
1 = %Disk%,,,""
[SourceDisksFiles]
ContosoCtrlPnl.exe = 1
[DestinationDirs]
DefaultDestDir = 13
[Manufacturer]
%CONTOSO%=Contoso,NTx86
[Contoso.NTx86]
%ContosoCtrlPnl.DeviceDesc%=ContosoCtrlPnl, SWC\VID0001&PID0001&SID0001
[ContosoCtrlPnl.NT]
CopyFiles=ContosoCtrlPnl.NT.Copy
[ContosoCtrlPnl.NT.Copy]
ContosoCtrlPnl.exe
[ContosoCtrlPNl.NT.Services]
AddService = , %SPSVCINST_ASSOCSERVICE%
[ContosoCtrlPnl.NT.Software]
AddSoftware = ContosoGrfx1CtrlPnl,, Software_Inst
[Software_Inst]
SoftwareType = 1
SoftwareBinary = %13%\ContosoCtrlPnl.exe
SoftwareArguments = <<DeviceInstanceID>>
SoftwareVersion = 1.0.0.0
[Strings]
SPSVCINST_ASSOCSERVICE = 0x00000002
CONTOSO = "Contoso"
ContosoCtrlPnl.DeviceDesc = "Contoso Control Panel"
ドライバーの検証と提出プロセスは、コンポーネント INF の場合も通常の INF の場合も同じです。 詳しくは、Windows HLK Getting Startedをご覧ください。
セットアップ クラスの詳細については、ベンダーが使用できるシステム定義デバイス セットアップ クラスを参照してください。
関連項目
INF AddComponent ディレクティブ
INF AddSoftware ディレクティブ
INF DDInstall.Components セクション
INF DDInstall.Software セクション