INF AddInterface ディレクティブ

INF DDInstall.Interfaces セクション内で 1 つ以上の AddInterface ディレクティブを指定できます。 このディレクティブは、他のドライバーやアプリケーションなどの上位レベルのコンポーネントにエクスポートされた デバイス インターフェイス クラスのデバイス 固有のサポートをインストールします。 ディレクティブは通常、 add-interface-section を参照します。これは、デバイス インターフェイス クラスのデバイス固有のインスタンスのレジストリ情報を設定します。

[DDInstall.Interfaces]
  
AddInterface={InterfaceClassGUID} [,[reference-string] [,[add-interface-section][,flags]]] 

エクスポートされたデバイス インターフェイス クラスには、カーネル ストリーミングで定義されているデバイス インターフェイス クラスや、 INF InterfaceInstall32 セクションで指定された新しいデバイス インターフェイス クラスなど、システム定義のデバイス インターフェイス クラスのいずれかを指定できます。

エントリ

InterfaceClassGUID
デバイス インターフェイス クラスを識別する GUID 値を指定します。 これは、形式 {nnnnnnnn-nnnn nnnn-nnnnnn--} の明示的な GUID 値として、または INF ファイルの Strings セクションで "{nnnnnnnnnn-nnnn nnnn---}" に定義された %strkey% トークンとして表すことができます。

GUID を作成する方法の詳細については、「 ドライバーでの GUID の使用」を参照してください。 システム定義インターフェイス クラス GUID については、カーネル ストリーミング インターフェイス GUID の Ks.h などの適切なヘッダーを参照してください。

reference-string
指定したインターフェイス クラスのデバイス固有のインスタンスに関連付けられているこの省略可能な値は、"引用符で囲まれた文字列" または INF 文字列セクションで定義されている %strkey% トークンとして表すことができます。

PnP 関数とフィルター ドライバーは、通常、INF ファイル内の AddInterface= エントリからこの値を省略します。 参照文字列は、1 つのインターフェイス クラスの複数のインスタンスを使用してオンデマンドで作成されるソフトウェア デバイスのプレースホルダーとして、swenum ドライバーによって使用されます。 同じ InterfaceClassGUID 値は、2 つ以上の一意の 参照文字列を持つ INF エントリで指定できます。 I/O マネージャーは、開かれるたびにインターフェイス インスタンスの名前のパス コンポーネントとして 参照文字列 値を渡すので、インストールされているドライバーは、1 つのデバイスに対して同じクラスのインターフェイス インスタンスを区別できます。

add-interface-section
INF ファイル内の別の場所にあるセクションの名前を参照します。 これには通常、このデバイス インターフェイス クラスのドライバーのサポートをエクスポートするレジストリ エントリを設定するための INF AddReg ディレクティブが含まれています。 詳細については、次の 「解説 」セクションを参照してください。

flags
指定する場合、このエントリは 0 である必要があります。

注釈

指定した {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、または 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-section は、デバイス、ドライバー、インターフェイスのインスタンスに固有です。 エクスポートされたデバイス インターフェイス インスタンスのフレンドリ名を定義する値エントリがある場合があります。そのため、上位レベルのコンポーネントは、ユーザー インターフェイス内のフレンドリ名によってそのインターフェイスを参照できます。

このような add-registry-section セクションで指定された HKR は、デバイス インターフェイスの実行時にアクセス可能な状態レジストリ キーを指定します。 ドライバーは、 IoOpenDeviceInterfaceRegistryKey を 呼び出して状態レジストリ キーへの HANDLE を取得することで、実行時にこのレジストリ キーに格納されている状態にアクセスできます。 ユーザー モード コンポーネントは、CM_Open_Device_Interface_Keyを呼び出すことによって状態 のクエリを実行できます。

この例では、 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" 
; ... 

こちらもご覧ください

AddProperty

AddReg

BitReg

CopyFiles

DDInstall。インターフェイス

DelFiles

DelProperty

DelReg

Ini2Reg

InterfaceInstall32

IoRegisterDeviceInterface

IoSetDeviceInterfaceState

RenFiles

UpdateIniFields

UpdateInis