Поделиться через


Использование драйвера многофункциональной шины System-Supplied

Если базовая шина устройства поддерживает стандарт многофункциональной шины, например pc Card, поставщик многофункционального устройства на платформе nt-based может использовать системный драйвер многофункциональной шины (mf.sys) для поддержки устройства.

Драйвер mf.sys автобуса обрабатывает перечисление функций устройства PnP и выполняет арбитраж ресурсов, таких как порты ввода-вывода и IRQ, между функциями. Драйвер mf.sys управляет питанием дочерних функций, управляя питанием родительского многофункционального устройства.

Чтобы использовать mf.sys, многофункциональное устройство должно соответствовать следующим требованиям:

  • Базовая шина устройства должна иметь многофункциональный стандарт.

  • DEVICE_CAPABILITIES дочерних функций должны быть идентичными и совпадать с DEVICE_CAPABILITIES родительского устройства. При запросе возможностей устройства дочерней функции (IRP_MN_QUERY_CAPABILITIES) драйвер mf.sys сообщает о возможностях родительского устройства.

  • Драйвер шины, в которой находится многофункциональное устройство, например pcmcia.sys, должен обрабатывать все запросы IRP_MN_READ_CONFIG и IRP_MN_WRITE_CONFIG . Водитель mf.sys просто передает эти irP родительскому водителю автобуса.

  • Функции должны быть независимыми: они не могут иметь зависимости от порядка запуска; требования к ресурсам для одной функции не могут быть выражены с точки зрения ресурсов другой функции (например, функция 1 использует порт ввода-вывода X, а функция 2 — portX + 200); и каждая функция должна работать как отдельное устройство, даже если оно обслуживается теми же драйверами, что и другая функция.

Чтобы использовать mf.sys, поставщик предоставляет inf для многофункционального устройства, который указывает mf.sys в качестве драйвера для устройства. Если устройство полностью и точно соответствует стандарту многофункциональной шины, поставщик такого устройства может использовать поставляемый системой mf.inf. Если устройство не полностью соответствует стандарту, поставщик должен предоставить пользовательский INF-файл.

В любом случае поставщик также предоставляет драйверы и INF-файлы для отдельных функций на устройстве.

Следующий макет пользовательского многофункционального INF-кода иллюстрирует необходимый синтаксис для указания mf.sys в качестве драйвера для многофункционального устройства:

[Version]
; ...
Class = Multifunction   ; the system-defined class for MF devices
ClassGUID  = {4d36e971-e325-11ce-bfc1-08002be10318} ; GUID for MF
; ...
; ...
[ControlFlags]
ExcludeFromSelect = *   ; don't include PnP devices in a displayed list of
                        ; devices available for manual installation
[Manufacturer]
; ...
; ...
[ModelsSection.NTamd64]         ; models section
; ...
; ...
[DDInstall.NT]          ; install section
Include = mf.inf        ; specify that this device requires mf.sys
Needs = MFINSTALL.mf
; ...

[DDinstall.NT.Services]
Include = mf.inf
Needs = MFINSTALL.mf.Services

[DDInstall.NT.HW]
AddReg=DDInstall.RegHW

[DDInstall.RegHW]
; put entries with child function hardware IDs here
; ...

; put override sections here...
; ...

[Strings]
; ...

Рассмотрим комбинированное устройство lan/модем pc card. Без специальной поддержки многофункциональных функций драйвер шины PCMCIA может сообщить о таком устройстве как об одном модеме. При дополнительной поддержке многофункционального INF и драйвера mf.sys автобуса перечисляются обе функции устройства. На следующем рисунке показаны примеры стеков устройств, которые могут быть созданы для такой комбинированной карты ПК с требуемой поддержкой многофункциональной функции.

схема, иллюстрирующая стеки устройств для многофункционального устройства, перечисленного mf.sys.

Как показано на предыдущем рисунке, драйвер для шины, в которой находится многофункциональное устройство, перечисляет одно устройство. Идентификатор оборудования в многофункциональном INF-файле приводит к тому, что диспетчер PnP загружает драйвер mf.sys шины в качестве драйвера функции для устройства. Драйвер mf.sys шины перечисляет два дочерних устройства: локальное устройство и модем.

Диспетчер PnP обрабатывает каждое дочернее устройство как обычное устройство, размещая INF-файлы, загружая соответствующие драйверы, вызывая процедуры AddDevice и т. д., пока для каждого устройства не будет создан стек устройств. Драйвер mf.sys автобуса определяет ресурсы для дочерних устройств и управляет всеми другими многофункциональными аспектами устройства. Поставщик многофункционального карта предоставляет драйверы функций и inFs для нескольких функций (локальной сети и модема), как если бы они были отдельными устройствами.

Иллюстрация посвящена водителям функций и родительским водителям автобусов, а также связанным с ними FDO и PDO. Для простоты все драйверы фильтров (и объекты DO фильтра) опущены.