INF DDInstall.Interfaces セクション内で 1 つ以上の AddInterface ディレクティブを指定できます。 このディレクティブは、他のドライバーやアプリケーションなどの上位レベルのコンポーネントにエクスポートされた デバイス インターフェイス クラス に対するデバイス固有のサポートをインストールします。 ディレクティブは通常、デバイス インターフェイス クラスのデバイス固有のインスタンスのレジストリ情報を設定する add-interface-section を参照します。
[DDInstall.Interfaces]
AddInterface={InterfaceClassGUID} [,[reference-string] [,[add-interface-section][,flags]]]
エクスポートされるデバイス インターフェイス クラスには、カーネル ストリーミングで定義されているデバイス インターフェイス クラスなど、システム定義のデバイス インターフェイス クラスの 1 つ、または INF InterfaceInstall32 セクションで指定された新しいデバイス インターフェイス クラスを指定できます。
エントリ
InterfaceClassGUID
デバイス インターフェイス クラスを識別する GUID 値を指定します。 これは、{nnnnnnnnnn-nnnn-nnnn-nnnn} という形式の明示的な GUID 値として、または INF ファイルの Strings セクションで "{nnnn--nnnn-nnnnnnnn-nn}" に定義された %-strkey% トークンとして表すことができます。
GUID を作成する方法の詳細については、「 ドライバーでの GUID の使用」を参照してください。 システム定義インターフェイス クラス GUID については、カーネル ストリーミング インターフェイス GUID の Ks.h などの適切なヘッダーを参照してください。
reference-string
指定したインターフェイス クラスのデバイス固有のインスタンスに関連付けられたこの省略可能な値は、"引用符で囲まれた文字列" として、または INF 文字列セクションで定義された %strkey% トークンとして表すことができます。
PnP 関数とフィルター ドライバーは、通常、INF ファイル内の AddInterface= エントリからこの値を省略します。 参照文字列は、1 つのインターフェイス クラスの複数のインスタンスを使用してオンデマンドで作成されるソフトウェア デバイスのプレースホルダーとして、swenum ドライバーによって使用されます。 2 つ以上の一意の参照文字列を持つ INF エントリで、同じ InterfaceClassGUID 値を指定できます。 I/O マネージャーは、開かれるたびにインターフェイス インスタンスの名前のパス コンポーネントとして 参照文字列 値を渡すので、インストールされているドライバーは、1 つのデバイスの同じクラスのインターフェイス インスタンスを区別できます。
add-interface-section
INF ファイル内の別の場所にあるセクションの名前を参照します。 これには通常、このデバイス インターフェイス クラスのドライバーのサポートをエクスポートするレジストリ エントリを設定する INF AddReg ディレクティブが含まれています。 詳細については、次の 「解説 」セクションを参照してください。
フラグ
指定する場合、このエントリは 0 である必要があります。
Remarks
指定した {InterfaceClassGUID} によって識別されるデバイス インターフェイス クラスがまだインストールされていない場合、システム セットアップ コードはそのクラスをシステムにインストールします。 新しいクラスをインストールする INF ファイルには、 INF InterfaceInstall32 セクションもあります。 このセクションには、指定された {InterfaceClassGUID} が含まれており、そのクラスのインターフェイス固有のインストール操作を設定する interface-install-section を参照します。
上位レベルのコンポーネントで実行時に使用するデバイス インターフェイス クラスのインスタンスを有効にするには、デバイス ドライバーが最初に IoRegisterDeviceInterface を呼び出して、有効にするデバイス インターフェイス インスタンスのシンボリック リンク名を取得する必要があります。 通常、PnP 関数またはフィルター ドライバーは、 その AddDevice ルーチンからこの呼び出しを行います。 INF でプロビジョニングされたデバイス インターフェイスのインスタンスを有効にするには、デバイス ドライバーが IoRegisterDeviceInterface を呼び出すときに、INF で指定された {InterfaceClassGUID} と参照文字列を指定する必要があります。 その後、ドライバーは IoSetDeviceInterfaceState を呼び出して、 IoRegisterDeviceInterface によって返されるシンボリック リンク名を使用してインターフェイスを有効にします。
INF DDInstall.Interfaces セクションの各 AddInterface ディレクティブは、INF ファイル内の別の場所で INF ライター定義の add-interface-section を参照できます。 INF ライターで定義された各セクション名は、INF ファイル内で一意である必要があり、セクション名を定義するための一般的な規則に従う必要があります。 これらの規則の詳細については、「 INF ファイルの一般的な構文規則」を参照してください。
AddInterface ディレクティブによって参照される add-interface-section の形式は次のとおりです。
[add-interface-section]
AddReg=add-registry-section[, add-registry-section]...
[AddProperty=add-property-section[, add-property-section] ...] (Windows Vista and later versions of Windows)
[DelReg=del-registry-section[, del-registry-section] ...]
[DelProperty=del-property-section[, del-property-section] ...] (Windows Vista and later versions of Windows)
[BitReg=bit-registry-section[,bit-registry-section] ...]
[CopyFiles=@filename | file-list-section[,file-list-section]...]
[DelFiles=file-list-section[,file-list-section]...]
[RenFiles=file-list-section[,file-list-section]...]
[UpdateInis=update-ini-section[, update-ini-section] ...]
[UpdateIniFields=update-inifields-section[, update-inifields-section] ...]
[Ini2Reg=ini-to-registry-section[, ini-to-registry-section] ...]
Windows Vista以降では、INF AddProperty ディレクティブを add-interface セクションに含めることで、デバイス インターフェイスのプロパティを設定できます。 追加インターフェイス セクションに INF DelProperty ディレクティブを 含めることで、デバイス インターフェイスのプロパティを削除することもできます。 ただし、AddProperty ディレクティブまたは DelProperty ディレクティブは、Windows Vistaまたはそれ以降のバージョンのオペレーティング システムを初めて使用するデバイス インターフェイスのプロパティWindows変更する場合にのみ使用してください。 Windows Server 2003、Windows XP、または 2000 Windows 2000 で導入されたデバイス インターフェイス プロパティで、対応するレジストリ値エントリがある場合は、引き続き INF AddReg ディレクティブと INF DelReg ディレクティブを使用して、デバイス インターフェイスのプロパティを設定および削除する必要があります。 これらのガイドラインは、システム定義のプロパティとカスタム プロパティに適用されます。 AddProperty ディレクティブと DelProperty ディレクティブの使用方法の詳細については、「INF AddProperty ディレクティブと INF DelProperty ディレクティブの使用」を参照してください。
通常、add-interface-section には、1 つの add-registry-section を参照する INF AddReg ディレクティブのみが含まれます。 add-registry-section は、上位レベルのドライバーとアプリケーションで後で使用するためにデバイス ドライバーでサポートされるインターフェイスに関する情報をレジストリに格納するために使用されます。
add-interface-section 内で参照される add-registry セクションは、デバイス、ドライバー、およびインターフェイスのインスタンスに固有です。 エクスポートされたデバイス インターフェイス インスタンスのフレンドリ名を定義する値エントリがある場合があります。そのため、上位レベルのコンポーネントは、ユーザー インターフェイスのフレンドリ名によってそのインターフェイスを参照できます。
このような add-registry-section セクションで指定された HKR は、デバイス インターフェイスの実行時にアクセス可能な状態レジストリ キーを指定します。 ドライバーは、 IoOpenDeviceInterfaceRegistryKey を呼び出して状態レジストリ キーの HANDLE を取得することで、実行時にこのレジストリ キーに格納されている状態にアクセスできます。 ユーザー モード コンポーネントは、 CM_Open_Device_Interface_Keyを呼び出すことによって状態のクエリを実行できます。
Examples
この例では、 DDInstall の拡張の一部を示します。システム定義のカーネル ストリーミング インターフェイス をサポートする特定のオーディオ デバイスのインターフェイス セクション。
; ...
[ESS6881.Device.Interfaces]
AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_Wave%,ESSAud.Interface.Wave
AddInterface=%KSCATEGORY_RENDER%,%KSNAME_Wave%,ESSAud.Interface.Wave
AddInterface=%KSCATEGORY_CAPTURE%,%KSNAME_Wave%,ESSAud.Interface.Wave
AddInterface=%KSCATEGORY_AUDIO%,%KSNAME_UART%,WDM.Interface.UART
AddInterface=%KSCATEGORY_RENDER%,%KSNAME_UART%,WDM.Interface.UART
AddInterface=%KSCATEGORY_CAPTURE%,%KSNAME_UART%,WDM.Interface.UART
[ESSAud.Interface.Wave]
AddReg=ESSAud.Interface.Wave.AddReg
[ESSAud.Interface.Wave.AddReg]
HKR,,CLSID,,%Proxy.CLSID%
HKR,,FriendlyName,,%ESSAud.Wave.szPname%
; ...
[WDM.Interface.UART]
AddReg=WDM.Interface.UART.AddReg
[WDM.Interface.UART.AddReg]
HKR,,CLSID,,%Proxy.CLSID%
HKR,,FriendlyName,,%WDM.UART.szPname%
; ...
[Strings]
KSCATEGORY_AUDIO="{6994ad04-93ef-11d0-a3cc-00a0c9223196}"
KSCATEGORY_RENDER="{65e8773e-8f56-11d0-a3b9-00a0c9223196}"
KSCATEGORY_CAPTURE="{65e8773d-8f56-11d0-a3b9-00a0c9223196}"
; ...
KSNAME_WAVE="Wave"
KSNAME_UART="UART"
; ...
Proxy.CLSID="{17cca71b-ecd7-11d0-b908-00a0c9223196}"
; ...
ESSAud.Wave.szPname="ESS AudioDrive"
; ...