コンポーネント INF ファイルの使用
Windows 10 のデバイスで使用するユーザー モード ソフトウェアを含める場合は、DCH 準拠ドライバーを作成するための次のオプションがあります。
メソッド | シナリオ |
---|---|
ハードウェア サポート アプリ (HSA) | Microsoft Store から提供およびサービスされる UWP アプリとしてパッケージ化されたデバイス アドオン ソフトウェア。 推奨される方法。 |
ソフトウェア コンポーネント | デバイス アドオン ソフトウェアは、MSI または EXE バイナリ、Win32 サービス、または AddReg と CopyFiles を使用してインストールされたソフトウェアです。 参照バイナリは、デスクトップ エディション (Home、Pro、Enterprise) でのみ実行されます。 参照バイナリは、Windows 10S では動作しません。 |
ソフトウェア コンポーネントは、1 つ以上のソフトウェア モジュールをインストールできる独立したスタンドアロン ドライバー パッケージです。 インストールされているソフトウェアはデバイスの価値を高めますが、基本的なデバイス機能には必要なく、関連するファンクション ドライバー サービスは必要ありません。
このページでは、ソフトウェア コンポーネントの使用に関するガイドラインを示します。
作業の開始
コンポーネントを作成するために、拡張 INF ファイルは INF DDInstall.Components セクションで INF AddComponent ディレクティブを 1 回以上指定します。 拡張 INF ファイルで参照されるソフトウェア コンポーネントごとに、システムによって仮想ソフトウェア列挙子デバイスが作成されます。 複数のドライバー パッケージが同じソフトウェア コンポーネントを参照できます。
仮想デバイスの子は、親デバイスが起動されている限り、他のデバイスと同様に個別に更新できます。 サービスの観点から意味のある数の異なるグループに機能を分離し、グループ化ごとに 1 つのソフトウェア コンポーネントを作成することをお勧めします。
ソフトウェア コンポーネントごとに INF ファイルを提供します。
ソフトウェア コンポーネント INF で AddSoftware ディレクティブが指定されている場合、コンポーネント INF は次のようになります。
- ユニバーサル INF ファイルである必要があります。
- SoftwareComponent セットアップ クラスを指定する必要があります。
AddSoftware ディレクティブは 1 回以上指定できます。
Note
AddSoftware ディレクティブの Type 2 を使用する場合、コンポーネント INF を使用する必要はありません。 ディレクティブは、任意の INF で正常に使用できます。 ただし、種類 1 の AddSoftware ディレクティブは、コンポーネント INF から使用する必要があります。
さらに、ソフトウェア コンポーネント デバイス上の INF (コンポーネントかどうか) が一致します。
- AddService ディレクティブを使用して Win32 ユーザー サービスを指定できます。
- INF AddReg ディレクティブと INF CopyFiles ディレクティブを使用してソフトウェアをインストールできます。
- 関数ドライバー サービスは必要ありません。
- 親デバイスとは別に、ユーザーがアンインストールできます。
コンポーネント INF の例については、「ユニバーサル ドライバーのドライバー パッケージ インストール ツールキット」を参照してください。
注: ソフトウェア列挙コンポーネント デバイスを機能させるには、その親を起動する必要があります。 親デバイスで使用できるドライバーがない場合、ドライバー開発者は独自のドライバーを作成し、必要に応じてパススルー ドライバー "umpass.sys" を利用できます。 このドライバーは Windows に含まれており、実質的にはデバイスを起動する以外に何もしません。 umpass.sys を使用するには、開発者は、取り得るそれぞれのセクションの DDInstall セクションで、INF によってそのセクションで何らかのディレクティブが指定されているかどうかにかかわらず、次に示すように対応する umpass.sys セクションに対して 可能な [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 ディレクティブ セクションの SoftwareArguments 値と<<DeviceInstanceID>>
ランタイム コンテキスト変数を使用します。
実行可能ファイルは、その受信引数リストからソフトウェア コンポーネントのデバイス インスタンス ID を取得できます。
次に、ソフトウェア コンポーネントがユニバーサル ターゲット プラットフォームをターゲットとしている場合は、次の手順を使用します。
- ソフトウェア コンポーネントのデバイス インスタンス ID を使用して CM_Locate_DevNode を呼び出して、デバイス ハンドルを取得します。
- CM_Get_Parent を呼び出して、そのデバイスの親へのハンドルを取得します。 この親は、INF AddComponent ディレクティブを使用してソフトウェア コンポーネントを追加した デバイスです。
- 次に、親のデバイス インスタンス ID を取得するには、CM_Get_Parent からハンドルの CM_Get_Device_ID を呼び出します。
ソフトウェア コンポーネントがデスクトップ ターゲット プラットフォーム のみを対象としている場合は、次の手順を使用します。
- SetupDiCreateDeviceInfoList を呼び出して、空のデバイス情報セットを作成します。
- ソフトウェア コンポーネント デバイスのデバイス インスタンス ID を使用して SetupDiOpenDeviceInfo を呼び出します。
- SetupDiGetDeviceProperty を呼び出して、
DEVPKEY_Device_Parent
親のデバイス インスタンス 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 の概要」をご覧ください。
セットアップ クラスの詳細については、「ベンダーが使用できるシステム定義デバイス セットアップ クラス」を参照してください。