Директива INF AddInterface
В разделе INF DDInstall.Interfaces можно указать одну или несколько директив AddInterface. Эта директива устанавливает поддержку классов интерфейса устройства , экспортированных в компоненты более высокого уровня, такие как другие драйверы или приложения. Директива обычно ссылается на раздел add-interface-section , который настраивает сведения о реестре для конкретного экземпляра класса интерфейса устройства.
[DDInstall.Interfaces]
AddInterface={InterfaceClassGUID} [,[reference-string] [,[add-interface-section][,flags]]]
Экспортируемый класс интерфейса устройства может быть одним из системных классов интерфейса устройства, таких как классы, определенные потоковой передачей ядра, или новый класс интерфейса устройства, заданный в разделе INF InterfaceInstall32.
Записи
InterfaceClassGUID
Задает значение GUID, идентифицирующее класс интерфейса устройства. Это можно выразить как явное значение GUID в формате {nnnnnn-nnnnnn-nnnnnn-nnnnnnnnnnnnnnnnnn-} или в виде токена %strkey% , определенного для "{nnnnnn-nnnn-nnnn nnnnnnnnnn--}" в разделе Strings INF-файла.
Дополнительные сведения о создании GUID см. в разделе Использование идентификаторов GUID в драйверах. Сведения о guidS класса интерфейса, определяемого системой, см. в соответствующем заголовке, например Ks.h для GUID интерфейса потоковой передачи ядра.
строка ссылки
Это необязательное значение, связанное с конкретным экземпляром устройства указанного класса интерфейса, может быть выражено либо в виде строки в кавычках, либо в виде токена %strkey% , определенного в разделе INF Strings.
Драйверы функций и фильтров PnP обычно пропускают это значение в записях AddInterface= в INF-файлах. Строка ссылки используется драйвером swenum в качестве заполнителя для программных устройств, созданных по требованию с помощью нескольких экземпляров одного класса интерфейса. Одно и то же значение InterfaceClassGUID можно указать в inf-записях с двумя или более уникальными строками ссылок. Так как при открытии диспетчера ввода-вывода значение строки ссылки передается в качестве компонента пути имени экземпляра интерфейса, установленный драйвер может различать экземпляры интерфейса одного класса для одного устройства.
add-interface-section
Ссылается на имя раздела в другом месте INF-файла. Обычно он содержит директиву INF AddReg для настройки записей реестра, экспортируя поддержку драйвера этого класса интерфейса устройства. Дополнительные сведения см. в следующем разделе Примечаний .
flags
Если этот параметр указан, эта запись должна быть равна нулю.
Комментарии
Если класс интерфейса устройства , определенный указанным {InterfaceClassGUID} , еще не установлен, код установки системы устанавливает этот класс в системе. Любой INF-файл, устанавливающий новый класс, также может содержать раздел INF InterfaceInstall32. Этот раздел содержит указанный {InterfaceClassGUID} и ссылается на раздел interface-install-section , который настраивает операции установки для конкретного интерфейса для этого класса.
Чтобы включить экземпляр класса интерфейса устройства для использования во время выполнения компонентами более высокого уровня, драйвер устройства должен сначала вызвать IoRegisterDeviceInterface , чтобы получить символьное имя ссылки экземпляра интерфейса устройства для включения. Как правило, функция или драйвер фильтра PnP выполняет этот вызов из своей процедуры AddDevice . Чтобы включить экземпляры интерфейсов устройств, подготовленных в INF, драйвер устройства должен предоставить {InterfaceClassGUID} и ссылочные строки , указанные в INF при вызове IoRegisterDeviceInterface. Затем драйвер вызывает IoSetDeviceInterfaceState , чтобы включить интерфейс, используя имя символьной ссылки, возвращенное IoRegisterDeviceInterface.
Каждая директива AddInterface в разделе INF DDInstall.Interfaces может ссылаться на раздел add-interface,определяемый INF-writer , в другом месте INF-файла. Каждое имя раздела, определенное inf-writer, должно быть уникальным в INF-файле и соответствовать общим правилам определения имен разделов. Дополнительные сведения об этих правилах см. в статье Общие правила синтаксиса для ФАЙЛОВ INF.
Раздел add-interface, на который ссылается директива AddInterface, имеет следующую форму:
[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 в раздел интерфейса надстройки. Вы также можете удалить свойства интерфейса устройства, включив директивы 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 содержит только директиву INF AddReg , которая, в свою очередь, ссылается на один раздел add-registry-section. Раздел add-registry используется для хранения в реестре сведений об интерфейсах, поддерживаемых драйвером устройства, для последующего использования драйверами и приложениями более высокого уровня.
Раздел add-registry, на который ссылается раздел add-interface-section, зависит от экземпляров устройства, драйвера и интерфейса. В нем может быть запись значения, определяющая понятное имя для экспортированного экземпляра интерфейса устройства, чтобы компоненты еще более высокого уровня могли ссылаться на этот интерфейс по понятному имени в пользовательском интерфейсе.
HKR, указанный в разделе add-registry-section, назначает доступный во время выполнения раздел реестра состояния для интерфейса устройства. Драйвер может получить доступ к состоянию, хранящейся в этом разделе реестра во время выполнения, вызвав 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"
; ...