支持具有不完整配置寄存器的电脑卡

如果多功能 16 位电脑卡设备没有每个功能的配置寄存器,则此类设备的供应商可以使用系统提供的多功能总线驱动程序(mf.sys),但必须提供自定义 INF 文件并支持各个函数。

基于 NT 的平台上此类设备的供应商可以使用以下系统提供的组件:

  • 多功能设备的函数驱动程序。 (系统提供)

    设备的自定义 INF 必须将mf.sys指定为设备的函数驱动程序。 然后,系统提供的mf.sys驱动程序将枚举设备的功能。

    有关使用系统提供的mf.sys驱动程序的详细信息,请参阅 使用系统提供的多功能总线驱动程序

此类设备的供应商必须提供以下内容:

  • 多功能设备的自定义 INF 文件。 (供应商提供)

    供应商必须提供一个多功能 INF 文件,该文件将mf.sys指定为多功能总线驱动程序,指定类“MultiFunction”(其关联的 GUID 如 devguid.h 中定义),并提供缺少的配置寄存器信息。 请参阅本部分后面的其他信息。

  • 设备每个函数的 PnP 函数驱动程序。 (供应商提供)

    由于多功能总线驱动程序处理多功能语义,因此函数驱动程序可以是将函数打包为单个设备时使用的相同驱动程序。

  • 设备的每个函数的 INF 文件。 (供应商提供)

    INF 文件可以是将函数打包为单个设备时使用的相同文件。 INF 文件不需要任何特殊的多功能语义。

供应商为此类设备提供的自定义 INF 必须指定:

  • mf.sys作为设备的服务。

    有关详细信息,请参阅 使用系统提供的多功能总线驱动程序

  • 多功能设备的资源要求。

    在 INF DDInstall.LogConfigOverride 节指定资源要求。

  • 设备的每个功能的硬件 ID。

    在 INF DDInstall.HW 节指定硬件 ID。

  • 设备每个函数的资源映射,用于标识每个子函数所需的父资源。

    在 INF DDInstall 中指定资源映射。HW 部分。 有关创建资源映射的详细信息,请参阅为多功能设备创建资源地图。

INF 必须重述设备指定的所有资源要求,因为如果 INF 中存在替代配置,PnP 管理器不会使用设备中的任何设备资源要求。

对于此类设备,可以使用 PcCardConfig 条目对配置选项寄存器进行编程,类似于对单函数设备进行编程。 PcCardConfig 条目包含适用于整个设备的信息。 PcCardConfig 条目记录在 INF LogConfig 指令

多功能设备指定 PcCardConfig 条目时,ConfigIndex 的格式与为单函数设备定义的格式相同。 单函数电脑卡的配置寄存器包含一组在该设备属性中定义的资源的索引。 此指令还可用于使用基于索引的配置选项寄存器格式的某些多功能设备。

以下示例演示了一个 INF 文件,用于安装使用 mf.sys 作为其总线驱动程序的多功能设备,并且配置寄存器不完整。

; MFSupra.inf
; This file installs the Supra Dual 56K modem
; Copyright 1999 Microsoft Corporation

[version]
Signature   = "$Windows NT$"
Provider    = %MSFT%
Class       = MultiFunction              ; system-defined class
ClassGUID   = {4d36e971-e325-11ce-bfc1-08002be10318}
DriverVer   = 05/08/2023,1.0.0.0
CatalogFile = ExampleCat.cat
PnpLockdown = 1

[ControlFlags]
ExcludeFromSelect=*SUP2440  ; don't include PnP devices in lists of
                            ; devices to be manually installed

[Manufacturer]
%M_Supra% = Supra,NTamd64

[Supra.NTamd64]
%Supra1% = Sup2231GoCard.mf, *SUP2440

[Sup2231GoCard.mf.NT]
Include = mf.inf           ; specify that this device needs mf.sys
Needs = MFINSTALL.mf

[Sup2231GoCard.mf.NT.HW]
AddReg=Sup2231.mf.RegHW

[Sup2231.mf.RegHW]
HKR, Child0000, HardwareID,  ,  MF\Shotgun_DEV0  ;modem1
HKR, Child0000, ResourceMap,1,00,02
HKR, Child0001, HardwareID,  ,  MF\Shotgun_DEV1  ;modem2
HKR, Child0001, ResourceMap,1,01,02

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

[Sup2231GoCard.mf.NT.LogConfigOverride]
LogConfig = Sup223x.mf.Override0, Sup223x.mf.Override1, \
 Sup223x.mf.Override2, Sup223x.mf.Override3

[Sup223x.mf.Override0]
ConfigPriority = NORMAL
IOConfig     = 2F8-2FF                  ; Com2
IOConfig     = 20@100-FFFF%FFE0         ; NIC I/O
IRQConfig    = 3,4,5,7,9,10,11,12,15    ; IRQ
MemConfig    = 1000@0-FFFFFFFF%FFFFF000 ; Memory Descriptor
PCCardConfig = 59(W)                    ; ConfigIndex

[Sup223x.mf.Override1]
ConfigPriority = NORMAL
IOConfig     = 3E8-3EF                  ; Com3
IOConfig     = 20@100-FFFF%FFE0         ; NIC I/O
IRQConfig    = 3,4,5,7,9,10,11,12,15    ; IRQ
MemConfig    = 1000@0-FFFFFFFF%FFFFF000 ; Memory Descriptor
PCCardConfig = 69(W)                    ; ConfigIndex

[Sup223x.mf.Override2]
ConfigPriority = NORMAL
IOConfig     = 2E8-2EF                  ; Com4
IOConfig     = 20@100-FFFF%FFE0         ; NIC I/O
IRQConfig    = 3,4,5,7,9,10,11,12,15    ; IRQ
MemConfig    = 1000@0-FFFFFFFF%FFFFF000 ; Memory Descriptor
PCCardConfig = 79(W)                    ; ConfigIndex

[Sup223x.mf.Override3]
ConfigPriority = NORMAL
IOConfig     = 3F8-3FF                  ; Com1
IOConfig     = 20@100-FFFF%FFE0         ; NIC I/O
IRQConfig    = 3,4,5,7,9,10,11,12,15    ; IRQ
MemConfig    = 1000@0-FFFFFFFF%FFFFF000 ; Memory Descriptor
PCCardConfig = 49(W)                    ; ConfigIndex

[Strings]
MSFT = "Microsoft"
M_Supra = "Supra"
Supra1 = "Supra Dual 56K modem"

与上面所示的 INF 一样,会将子函数的 ID 和资源信息复制到注册表。 mf.sys驱动程序在枚举设备的子函数时从注册表中检索信息。