Directiva AddInterface inf
Se pueden especificar una o varias directivas AddInterface dentro de una sección INF DDInstall.Interfaces. Esta directiva instala compatibilidad específica del dispositivo para las clases de interfaz de dispositivo exportadas a componentes de nivel superior, como otros controladores o aplicaciones. La directiva normalmente hace referencia a una sección add-interface-section , que configura la información del Registro para la instancia específica del dispositivo de la clase de interfaz de dispositivo.
[DDInstall.Interfaces]
AddInterface={InterfaceClassGUID} [,[reference-string] [,[add-interface-section][,flags]]]
Una clase de interfaz de dispositivo exportada puede ser una de las clases de interfaz de dispositivo definidas por el sistema, como las definidas por el streaming de kernel o una nueva clase de interfaz de dispositivo especificada por una sección INF InterfaceInstall32.
Entradas
InterfaceClassGUID
Especifica el valor GUID que identifica la clase de interfaz de dispositivo. Esto se puede expresar como un valor GUID explícito del formulario{nn---- n} o como un token %strkey% definido en "{n---- n n}" en una sección Strings del archivo INF.
Para obtener más información sobre cómo crear un GUID, consulte Uso de GUID en controladores. Para los GUID de la clase de interfaz definida por el sistema, consulte el encabezado adecuado, como Ks.h para los GUID de la interfaz de streaming de kernel.
reference-string
Este valor opcional, asociado a la instancia específica del dispositivo de la clase de interfaz especificada, se puede expresar como una "cadena entre comillas" o como un token %strkey% definido en una sección Cadenas INF.
Los controladores de filtro y función PnP normalmente omiten este valor de las entradas AddInterface= en sus archivos INF. El controlador swenum usa una cadena de referencia como marcador de posición para dispositivos de software creados a petición mediante varias instancias de una sola clase de interfaz. El mismo valor InterfaceClassGUID se puede especificar en entradas INF con dos o más cadenas de referenciaúnicas. Dado que el administrador de E/S pasa el valor de cadena de referencia como componente de ruta de acceso del nombre de la instancia de interfaz cada vez que se abre, el controlador instalado puede discriminar entre las instancias de interfaz de la misma clase para un único dispositivo.
add-interface-section
Hace referencia al nombre de una sección en otra parte del archivo INF. Normalmente, contiene una directiva AddReg inf para configurar las entradas del Registro que exportan la compatibilidad del controlador con esta clase de interfaz de dispositivo. Para obtener más información, vea la siguiente sección Comentarios .
flags
Si se especifica, esta entrada debe ser cero.
Comentarios
Si la clase de interfaz de dispositivo identificada por un {InterfaceClassGUID} especificado aún no está instalada, el código de instalación del sistema instala esa clase en el sistema. Cualquier archivo INF que instale una nueva clase también puede tener una sección INF InterfaceInstall32. Esta sección contiene el {InterfaceClassGUID} especificado y hace referencia a una sección interface-install-section que configura operaciones de instalación específicas de la interfaz para esa clase.
Para habilitar una instancia de una clase de interfaz de dispositivo para el uso en tiempo de ejecución de los componentes de nivel superior, un controlador de dispositivo debe llamar primero a IoRegisterDeviceInterface para recuperar el nombre simbólico del vínculo de la instancia de la interfaz de dispositivo que se va a habilitar. Normalmente, una función PnP o un controlador de filtro realiza esta llamada desde su rutina AddDevice . Para habilitar instancias de interfaces de dispositivo aprovisionadas en INF, el controlador de dispositivo debe proporcionar la cadena {InterfaceClassGUID} y la cadena de referencia especificadas en el INF cuando llama a IoRegisterDeviceInterface. A continuación, el controlador llama a IoSetDeviceInterfaceState para habilitar la interfaz mediante el nombre de vínculo simbólico devuelto por IoRegisterDeviceInterface.
Cada directiva AddInterface de una sección INF DDInstall.Interfaces puede hacer referencia a una sección INF-writer-defined add-interface-section en otra parte del archivo INF. Cada nombre de sección definido por INF-writer debe ser único dentro del archivo INF y debe seguir las reglas generales para definir nombres de sección. Para obtener más información sobre estas reglas, vea Reglas de sintaxis general para archivos INF.
Una sección add-interface-section a la que hace referencia la directiva AddInterface tiene el siguiente formato:
[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] ...]
A partir de Windows Vista, puede establecer propiedades de interfaz de dispositivo mediante la inclusión de directivas AddProperty inf en una sección de interfaz de complemento. También puede eliminar las propiedades de la interfaz de dispositivo mediante la inclusión de directivas INF DelProperty en una sección de interfaz de complemento. Sin embargo, debe usar directivas AddProperty o DelProperty solo para modificar las propiedades de la interfaz de dispositivo que son nuevas en Windows Vista o en una versión posterior de los sistemas operativos Windows. Para las propiedades de la interfaz de dispositivo que se introdujeron en Windows Server 2003, Windows XP o Windows 2000, y que tienen entradas de valor del Registro correspondientes, debe seguir usando directivas AddReg inf y directivas INF DelReg para establecer y eliminar las propiedades de la interfaz de dispositivo. Estas directrices se aplican a las propiedades definidas por el sistema y a las propiedades personalizadas. Para obtener más información sobre cómo usar la directiva AddProperty y la directiva DelProperty , vea Using the INF AddProperty Directive and the INF DelProperty Directive.
Normalmente, una sección add-interface-section contiene solo una directiva AddReg inf que, a su vez, hace referencia a una única sección add-registry-section. La sección add-registry se usa para almacenar información en el registro sobre las interfaces compatibles con el controlador de dispositivo para su uso posterior por controladores y aplicaciones de nivel superior.
Una sección add-registry a la que se hace referencia en una sección add-interface-es específica de las instancias del dispositivo, el controlador y la interfaz. Es posible que tenga una entrada de valor que defina un nombre descriptivo para la instancia de interfaz de dispositivo exportada para que los componentes de nivel aún más altos puedan hacer referencia a esa interfaz por su nombre descriptivo en la interfaz de usuario.
Una HKR especificada en esta sección add-registry-section designa la clave del Registro de estado accesible en tiempo de ejecución para una interfaz de dispositivo. El controlador puede acceder al estado almacenado en esta clave del Registro en tiempo de ejecución llamando a IoOpenDeviceInterfaceRegistryKey para recuperar un IDENTIFICADOR a la clave del Registro de estado. Los componentes del modo de usuario pueden consultar el estado llamando a CM_Open_Device_Interface_Key.
Ejemplos
En este ejemplo se muestra parte de la expansión de DDInstall. Sección interfaces para un dispositivo de audio determinado que admite interfaces de streaming de kernel definidas por el sistema.
; ...
[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"
; ...