次の方法で共有


INF AddInterface ディレクティブ

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

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

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

エントリ

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

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

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

PnP 関数とフィルター ドライバーは、通常、INF ファイル内の AddInterface= エントリからこの値を省略します。 参照文字列は、1 つのインターフェイス クラスの複数のインスタンスを使用してオンデマンドで作成されるソフトウェア デバイスのプレースホルダーとして、swenum ドライバーによって使用されます。 2 つ以上の一意の 参照文字列 を持つ INF エントリで、同じ InterfaceClassGUID 値を指定できます。 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 section の各 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 directives を add-interface セクションに含めることで、デバイス インターフェイスのプロパティを設定できます。 追加インターフェイス セクションINF DelProperty directives を含めることで、デバイス インターフェイスのプロパティ を削除することもできます。 ただし、AddProperty ディレクティブまたは DelProperty ディレクティブは、Windows Vista 以降のバージョンの Windows オペレーティング システムを初めて使用するデバイス インターフェイスのプロパティを変更する場合にのみ使用してください。 Windows Server 2003、Windows XP、または Windows 2000 で導入され、対応するレジストリ値エントリを持つデバイス インターフェイス プロパティの場合は、引き続き INF AddReg directivesINF DelReg directives を使用して、デバイス インターフェイスのプロパティを設定および削除する必要があります。 これらのガイドラインは、システム定義のプロパティとカスタム プロパティに適用されます。 AddProperty ディレクティブと DelProperty ディレクティブの使用方法の詳細については、「INF AddProperty ディレクティブと INF DelProperty ディレクティブの使用」を参照してください。

通常、add-interface-section には、1 つの add-registry-section を参照する INF AddReg ディレクティブのみが含まれます。 add-registry セクション は、上位レベルのドライバーとアプリケーションで後で使用するためにデバイス ドライバーでサポートされるインターフェイスに関する情報をレジストリに格納するために使用されます。

add-interface-section 内で参照される add-registry セクションは、デバイス、ドライバー、およびインターフェイスのインスタンスに固有です。 エクスポートされたデバイス インターフェイス インスタンスのフレンドリ名を定義する値エントリがある場合があります。そのため、上位レベルのコンポーネントは、ユーザー インターフェイスでそのフレンドリ名によってそのインターフェイスを参照できます。

このような 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.Interfaces

DelFiles

DelProperty

-delreg

Ini2Reg

InterfaceInstall32

IoRegisterDeviceInterface

IoSetDeviceInterfaceState

RenFiles

UpdateIniFields

UpdateInis