INF LogConfig 指令

注意

从 Windows 11 版本 22H2 开始,使用此指令的驱动程序包不再有资格从硬件开发人员中心获得签名。

通用驱动程序包Windows 驱动程序 不能使用此指令。

LogConfig 指令引用一个或多个 INF 编写器定义的部分,其中每个部分指定硬件资源的逻辑配置 • 中断请求行、内存范围、I/O 端口和可供设备使用的 DMA 通道。 每个 log-config-section 指定设备可以使用的一组备用的相对于总线的硬件资源。

[DDInstall] | 
[DDInstall.LogConfigOverride] 
  
LogConfig=log-config-section[,log-config-section]...

非 PnP 设备的 INF 文件使用此指令创建基本配置。

PnP 设备的 INF 文件仅使用此指令来创建替代配置。

LogConfig 指令引用的每个命名节具有以下形式:

[log-config-section]
 
ConfigPriority=priority-value[,config-type]
[DMAConfig=[DMAattrs:]DMANum[,DMANum]...]
[IOConfig=io-range[,io-range]...]
[MemConfig=mem-range[,mem-range]...]
[IRQConfig=[IRQattrs:]IRQNum[,IRQNum]...]
[PcCardConfig=ConfigIndex[:[MemoryCardBase1][:MemoryCardBase2]][(attrs)]]
[MfCardConfig=ConfigRegBase:ConfigOptions[:IoResourceIndex][(attrs)]...]
...

ConfigPriority=priority-value
将此逻辑配置的优先级值指定为下列值之一:

期望
软配置,最优化。

NORMAL
软配置,不如 DESIRED 优化。 这是典型的设置。

如果在 DDInstall 中定义了 log-config-section,则应指定 NORMAL。LogConfigOverride 节,不能指定任何配置类型值。

理想
软配置,不如 NORMAL 优化。

HARDRECONFIG
需要更改跳线才能重新配置。

HARDWIRED
无法更改。

RESTART
需要重启才能生效。

REBOOT
这与 RESTART 相同。

POWEROFF
需要电源周期才能生效。

DISABLED
已禁用硬件/设备。

DMAConfig=[DMAattrs:]DMANum[**,**DMANum]...]
如果设备在只有 8 位 DMA 通道的总线上连接,并且设备使用标准系统 DMA,则 DMAattrs 是可选的。 否则,它可以是以下字母之一:

Letter 含义
D 32 位 DMA
W 16 位 DMA
N 8 位 DMA

如果设备使用总线主 DMA,则必须将 M 与以下 (互斥) 字母之一配合使用,这些字母指示所使用的 DMA 通道的类型: ABF。如果未指定 ABF ,则假定使用标准 DMA 通道。

DMANum 将一个或多个相对于总线的 DMA 通道指定为十进制数,每个通道与下一个通道之间用逗号 (,) 分隔。

IOConfig=io-range[io-range]...
以下列形式之一为设备指定一个或多个 I/O 端口范围:

start-end[ ([decode-mask][:alias-offset][:attr]) ] (Type 1 I/O range)

start
将 I/O 端口范围的起始地址指定为 64 位十六进制地址。

end
指定 I/O 端口范围的结束地址,也指定为 64 位十六进制地址。

decode-mask
定义别名类型,可以是以下任一类型:

掩码值 含义 IOR_Alias值
3ff 10 位解码 0x04
fff 12 位解码 0x10
ffff 16 位解码 0x00
0 正解码 0xFF

alias-offset
未使用。

attr
如果给定范围在系统内存中,则指定字母 M 。 如果省略,则给定范围位于 I/O 端口空间中。

大小@min-max[%align-mask][ ([decode-mask][alias-offset][attr]) ] (类型 2 I/O 范围)

size
将 I/O 端口范围所需的字节数指定为 32 位十六进制值。

min
将 I/O 端口范围的最低可能起始地址指定为 64 位十六进制地址。

max
将 I/O 端口范围的最高可能结束地址指定为 64 位十六进制地址。

align-mask
(可选)指定一个 64 位掩码,该掩码用于在按位 AND 操作中对齐 I/O 端口范围的起点,该整数 (通常为 32 位或 64 位) 地址边界。

decode-mask
定义别名类型,可以是以下任一类型:

掩码值 含义 IOR_Alias值
3ff 10 位解码 0x04
fff 12 位解码 0x10
ffff 16 位解码 0x00
0 正解码 0xFF

alias-offset
未使用。

attr
如果给定范围在系统内存中,则指定字母 M 。 如果省略,则给定范围位于 I/O 端口空间中。

MemConfig=mem-range[mem-range]...
使用以下形式之一为设备指定一个或多个内存范围:

start-end[(attr)] | size@min-max[%align-mask][(attr)]

start
将设备内存范围的起始 (总线相对) 物理地址指定为 64 位十六进制值。

end
指定内存范围的结束物理地址,也指定为 64 位十六进制值。

attr
将内存范围的属性指定为以下一个或多个字母:

Letter 含义
R 只读
W 只写
乌尔曼 读取/写入
C 允许合并写入
H 可缓存
F 可预提取
D 卡片解码寻址为 32 位,而不是 24 位

如果同时指定 了 RW ,或者两者均未指定,则假定为读/写。

size
将内存范围中所需的字节数指定为 32 位十六进制值。

min
将设备内存范围的最低可能起始地址指定为 64 位十六进制值。

max
将内存范围的最高可能结束地址指定为 64 位十六进制值。

align-mask
(可选)指定用于按位 AND 操作的 64 位掩码,以将设备内存范围的起始位置与整型 (通常为 64 位) 地址边界对齐。

如果省略 align-mask,则默认内存对齐方式位于 4K 边界 (FFFFF000) 。

IRQConfig=[IRQattrs:]IRQNum[IRQNum]...
如果设备使用相对于总线的边缘触发 IRQ,则省略 IRQattrs。 否则,如果设备可以共享此条目中列出的 IRQ 行,则指定 L 以指示级别触发的 IRQ 和 LS

IRQNum 指定设备可以使用的一个或多个总线相对 IRQ 作为十进制数,每个 IRQ 与下一个数字之间用逗号 (,) 分隔。

PcCardConfig=ConfigIndex[[MemoryCardBase1][MemoryCardBase2]][ (attrs) ]
配置 CardBus 寄存器和/或创建最多两个映射到设备属性空间的永久内存窗口。 驱动程序可以使用内存窗口从 ISR 访问属性空间。 以十六进制格式指定所有数值。

PcCardConfig 条目的元素如下所示:

ConfigIndex
为 PCMCIA 总线上的设备指定 8 位 PCMCIA 配置索引。

MemoryCardBase1
(可选)为第一个内存窗口指定 32 位基址。

MemoryCardBase2
(可选)为第二个内存窗口指定 32 位基址。

attrs
(可选)指定设备的一个或多个属性,用空格分隔。 无效的属性说明符使整个 PcCardConfig 条目无效。 如果为特定属性提供了多个说明符,则这些属性将应用于设备的单个 I/O 或内存窗口。 如果仅提供一个说明符,则该属性将应用于所有窗口, (请参阅以下示例) 。

具体而言,如果提供了多个说明符,则从左到右读取找到的第一个说明符将应用于第一个窗口,下一个说明符将应用于第二个窗口。 一个 PcCardConfig 条目最多可以控制两个 I/O 窗口和两个内存窗口。 如果设备具有两个以上的内存窗口,则必须包含第二个 PcCardConfig 条目。

这些属性包括:

Attribute 说明
W 16 位 I/O 数据路径。

如果 INF 指定 LogConfig 指令,则默认值为 8 位。 如果未指定 LogConfig 指令,驱动程序将使用 16 位 I/O。
Sn ~IOCS16 源。

如果 n 为 0,则 ~IOCS16 基于 datasize 位的值。 如果 n 为 1,则 ~IOCS16 基于来自设备的 ~IOIS16 信号。 默认值为 S1。
Zn I/O 8 位,零等待状态。

如果 n 为 1,则会发生 8 位 I/O 访问,且没有额外的等待状态。 如果 n 为 0,则访问时会出现其他等待状态。 此标志对 16 位 I/O 没有意义。 默认值为 Z0。
Xln I/O 等待状态。

如果 n 为 1,则 16 位系统访问将发生一个额外的等待状态。 默认值为 Xl1。
M 16 位内存数据路径。 默认值为 8 位。
M8 8 位内存数据路径。
XMn 内存等待状态,其中 n 可以是 0、1、2 或 3。

此值确定对内存窗口进行 16 位访问的其他等待状态数。 默认值为 XM3。
A 要映射为属性内存的内存范围。
C 要映射为公共内存的内存范围 (默认) 。

例如, (WB CA M XM1 XI0 的 attrs 值) 转换为以下内容:

1st I/O window is 16-bit

2nd I/O window 8-bit

1st memory window is common

2nd memory window is attribute

Memory is 16-bit

One wait state on memory windows

Zero wait states on I/O windows

MfCardConfig=ConfigRegBaseConfigOptions[IoResourceIndex][ (attrs) ]...
为多功能设备的一个函数指定配置寄存器集的属性内存位置,如下所示:

ConfigRegBase
为多功能设备的此函数指定配置寄存器的属性偏移量。

ConfigOptions
指定 8 位 PCMCIA 配置选项寄存器。

IoResourceIndex
指定 IOConfig 条目的索引,以便总线驱动程序在对配置 I/O 基寄存器和限制寄存器进行编程时使用。 此索引从零开始,即零指定此 log-config-节中的初始 IOConfig 条目。

attrs
如果设置为字母 A,则指示 PCMCIA 总线驱动程序在配置和状态寄存器中启用音频启用。

每个 MfCardConfig 条目都提供有关多功能设备的单个功能的信息。 当一组 LogConfig 指令分别引用 INF 的 DDInstall 中的一个离散 log-config-section时。LogConfigOverride 节(每个 log-config-section 必须按相同顺序列出其条目,包括 MfCardConfig 条目)。

注解

可以在任何每个制造商、每个型号的 INF DDInstall或 INF DDInstall 下指定 LogConfig 指令。LogConfigOverride 部分

支持多个备用逻辑配置的非 PnP 设备的 INF 通常在 DDInstall 节下定义一组 log-config-section。 每个 log-config-section 指定一组离散的逻辑配置资源。 它还包含一个 ConfigPriority 条目,该条目根据它对设备和驱动程序性能、初始化的简易性等的影响对每个逻辑配置进行排名。

对于 PnP 设备,PnP 管理器将一组逻辑硬件资源分配给每个 PnP 设备。 也就是说,PnP 管理器查询系统总线驱动程序,接收其每个设备正在使用的 I/O 总线配置资源的报告,并分配每设备一组逻辑硬件资源,以实现所有此类资源的使用在系统范围内的最佳平衡。

因此,对于 PnP 设备,将忽略 DDInstall 节下的 LogConfig 指令。 若要替代总线为 PnP 设备报告的资源,请将 LogConfig 指令包含在 DDInstall 下。LogConfigOverride 部分。 在这种情况下,将使用 log-config-section 中指定的资源,而不是总线报告的资源。

可以将平台扩展添加到包含 LogConfig 指令的 DDInstall 节或 DDInstall。LogConfigOverride 部分,用于指定特定于平台或特定于 OS 的逻辑配置。 有关详细信息,请参阅 创建 INF 文件

给定的 log-config-section 名称对于 INF 文件必须是唯一的,但它可由相同设备的其他 INF DDInstall 节中的 LogConfig 指令引用。 INF 编写器创建的每个节名称在 INF 文件中必须是唯一的,并且必须遵循定义节名称的一般规则。 有关这些规则的详细信息,请参阅 INF 文件的一般语法规则

每个 log-config-section 中只能使用一个 ConfigPriority 条目。 根据设备的硬件资源要求,每个条目中可以有多个条目。

一个或多个 MfCardConfig= 条目只能出现在由 DDInstall 中的LogConfig 指令引用的 log-config-节适用于多功能设备的 INF 的 LogConfigOverride 部分。 有关多功能设备的 INF 文件的详细信息,请参阅 支持多功能设备

LogConfig-Referenced 节条目和值

log-config-section 中,系统安装程序生成二进制逻辑配置记录并将其存储在注册表中。

INF 文件可以包含任意数量的每个设备 log-config-节。 但是,每个此类部分都必须包含安装一台设备的完整信息。 通常,INF 应按相同的顺序指定其每个 log-config-节 中的条目。 INF 应按最适合驱动程序初始化其设备的方式的顺序指定每组条目。

如果给定设备存在多个 log-config-section ,则安装期间仅使用其中一个 INF 部分。 此类 INF 文件部分控制哪个此类节与它在每个此类 log-config-section 中提供的 ConfigPriority 值一起使用。 也就是说,系统安装程序会尝试遵循 INF 文件中的任何配置优先级,但如果发现与已安装设备的冲突,可能会选择排名较低的逻辑配置。

在安装过程中,将从给定 log-config-section 中的每个条目中选择一个资源,并且只有一个资源分配给特定设备。 如果特定设备需要多个相同类型的资源,则必须在其 log-config-sections 中使用该类型的一组条目。

例如,为了确保特定设备的两个 I/O 端口范围,必须在该设备的 log-config-section 中指定两个 IOConfig= 条目。 另一方面,如果设备不需要 IRQ,其 INF 可以从 log-config-sections 中省略 IRQConfig 条目。

示例

此示例显示了 PCMCIA 设备的一些有效的 PcCardConfig 条目。

PcCardConfig=0:E0000:F0000(W)
PcCardConfig=0:E0000(M)
PcCardConfig=0::(W)
PcCardConfig=0(W)

此示例演示 IOConfig 条目中的 Type 1 I/O 范围规范。 它指定 I/O 端口区域,大小为 8 个字节,可以从 1F8、2F8 或 3F8 开始。

IOConfig=1F8-1FF, 2F8-2FF, 3F8-3FF

相比之下,此示例显示了 IOConfig 条目中的 Type 2 I/O 范围规范。 它指定 I/O 端口区域,大小为 8 个字节,可以从 300、308、310、318、320 或 328 开始。

IOConfig=8@300-32F%FF8

此示例演示一组四端口设备的 IOConfig 条目,每个条目指定一个 I/O 端口范围,该范围由下一个 0x400 个字节偏移。

IoConfig=0x200-0x21f
IoConfig=0x600-0x61f
IoConfig=0xA00-0xA1f
IoConfig=0xE00-0xE1f

接下来的两个示例显示了典型的 MemConfig 条目。

此示例指定 32K 字节的内存区域,可以从 C0000 或 D0000 开始。

MemConfig=C0000-C7FFF, D0000-D7FFF

此示例指定从 64K 边界开始的 32k 字节的内存区域。

MemConfig=8000@C0000-D7FFF%F0000

此示例演示系统 HDC 类 INF 文件如何为通用 ESDI 硬盘控制器设置多个 log-config-节 并使用 DDInstall。特定 IDE 控制器的 LogConfigOverride 部分。

[MS_HDC] ; per-manufacturer Models section
%FujitsuIdePccard.DeviceDesc% = 
          atapi_fujitsu_Inst, PCMCIA\FUJITSU-IDE-PC_CARD-DDF2
%*PNP0600.DeviceDesc% = atapi_Inst, *PNP0600 ; generic ESDI HDCs

; ... other manufacturers' Models sections omitted

[atapi_Inst]
CopyFiles = @atapi.sys
LogConfig = esdilc1, esdilc2, esdilc3, esdilc4

; ... [atapi_Inst.Services] + service/EventLog-install omitted here

[esdilc1]
ConfigPriority=HARDWIRED
IOConfig=1f0-1f7(3ff::)
IoConfig=3f6-3f6(3ff::)
IRQConfig=14

[esdilc2]
ConfigPriority=HARDWIRED
IOConfig=170-177(3ff::)
IoConfig=376-376(3ff::)
IRQConfig=15

[esdilc3]
ConfigPriority=HARDWIRED
IOConfig=1e8-1ef(3ff::)
IoConfig=3ee-3ee(3ff::)
IRQConfig=11

[esdilc4]
; ...

[atapi_fujitsu_Inst.LogConfigOverride]
LogConfig = fujitsu.LogConfig0

[fujitsu.LogConfig0]
ConfigPriority=NORMAL
IOConfig=10@100-400%fff0
IRQConfig=14,15,5,7,9,11,12,3
PcCardConfig=1:0:0(W)

有关如何使用 MfCardConfig 条目的一些示例,请参阅 支持具有不完整配置注册地址的电脑卡

另请参阅

DDInstall

DDInstall。FactDef