INF DDInstall.CoInstallers 部分
此部分为可选,用于注册分发介质上提供的一个或多个特定于设备的共同安装程序,以补充现有设备类安装程序的操作。
[install-section-name.CoInstallers] |
[install-section-name.nt.CoInstallers] |
[install-section-name.ntx86.CoInstallers] |
[install-section-name.ntia64.CoInstallers] | (Windows XP and later versions of Windows)
[install-section-name.ntamd64.CoInstallers] | (Windows XP and later versions of Windows)
[install-section-name.ntarm.CoInstallers] | (Windows 8 and later versions of Windows)
[install-section-name.ntarm64.CoInstallers] (Windows 10 version 1709 and later versions of Windows)
AddReg=add-registry-section[,add-registry-section]...
CopyFiles=@filename | file-list-section[,file-list-section]...
[Include=filename.inf[,filename2.inf]...]
[Needs=inf-section-name[,inf-section-name]...]
[DelFiles=file-list-section[,file-list-section]...]
[RenFiles=file-list-section[,file-list-section]...]
[DelReg=del-registry-section[,del-registry-section]...]
[BitReg=bit-registry-section[,bit-registry-section]...]
[UpdateInis=update-ini-section[,update-ini-section]...]
[UpdateIniFields=update-inifields-section[,update-inifields-section]...]
[Ini2Reg=ini-to-registry-section[,ini-to-registry-section]...]
...
条目
AddReg=add-registry-section[,add-registry-section]...
引用一个或多个 INF 编写器定义的 add-registry-section,它们存储了所提供的共同安装程序的注册表信息。
在此类 add-registry 部分中指定的 HKR 指定了正在安装的设备的 "software key" 注册表路径。 因此,对于特定设备的共同安装程序,它会在用户可访问的每个设备/驱动程序“software”键中写入(或修改)一个 CoInstallers32 值项。
对于特定于类的共同安装程序,它会通过修改相应的 ..CoDeviceInstallers\SetupClassGUID 子项的内容来注册新的共同安装程序。 必须在引用的 add-registry 部分中显式指定相应注册表 SetupClassGUID 子项的路径。
有关详细信息,请参阅 INF AddReg 指令。
CopyFiles=@filename | file-list-section*[,file-list-section]...
通常通过引用 INF 文件中其他地方的一个或多个 INF 编写器定义的 file-list-section 来将源共同安装程序文件传输到目标计算机上的目标位置。 此类文件列表部分指定了要从源介质复制到目标上目标目录的共同安装程序文件。
但是,安装共同安装程序的系统 INF 文件绝不会在 DDInstall.CoInstallers 部分中使用此指令。
有关详细信息,请参阅 INF CopyFiles 指令。
Include=filename.inf[,filename2.inf]...
指定一个或多个系统提供的 INF 文件,其中包含为该设备或设备安装程序类安装共同安装程序所需的部分。 带有此条目 INF 文件通常应指定 Needs。
Needs=inf-section-name[,inf-section-name]...
指定安装此设备时必须处理的特定部分。 通常,此类已命名的部分是系统提供的 INF 文件中的 DDInstall.CoInstallers 部分,该文件列在 Include 条目中。 但是,它可以是所含 INF 的 DDInstall.CoInstallers 部分中引用的任何部分。
DelFiles=file-list-section[,file-list-section]...
引用文件列表部分,指定要从目标中删除的文件。 很少用到此指令。
有关详细信息,请参阅 INF DelFiles 指令。
RenFiles=file-list-section[,file-list-section]...
引用文件列表部分,指定在共同合安装程序源文件复制到目标机之前要重命名的目标机上的文件。 此指令也很少使用。
有关详细信息,请参阅 INF RenFiles 指令。
DelReg=del-registry-section[,del-registry-section]...
引用一个或多个 INF-writer-define delete-registry-section。 此部分指定了应从注册表中删除的有关先前安装相同设备的共同安装程序的过时注册表信息。 在此类 delete-registry 部分中指定的 HKR 指定了与 AddReg 条目相同的注册表子项。 此指令很少在 DDInstall.CoInstallers 部分中使用。
有关详细信息,请参阅 INF DelReg 指令。
BitReg=bit-registry-section[,bit-registry-section]...
此条目在本部分中有效,但几乎从未使用过。 在此类 bit-registry 部分中指定的 HKR 指定了与 AddReg 条目相同的注册表子项。
有关详细信息,请参阅 INF BitReg 指令。
UpdateInis=update-ini-section[,update-ini-section]...
此条目在本部分中有效,但几乎从未使用过。
有关详细信息,请参阅 INF UpdateInis 指令。
UpdateIniFields=update-inifields-section[,update-inifields-section]...
此条目在本部分中有效,但几乎从未使用过。
有关详细信息,请参阅 INF UpdateIniFields 指令。
Ini2Reg=ini-to-registry-section[,ini-to-registry-section]...
此条目在本部分中有效,但几乎从未使用过。
有关详细信息,请参阅 INF Ini2Reg 指令。
注解
必须在 INF 文件的每制造商 Models 部分下的设备/模型特定条目中引用指定的 DDInstall 部分。
如果 INF 包含 DDInstall.Coinstallers 部分,则每个平台修饰和未编码的 DDInstall 部分都必须有一个。 例如,如果 INF 包含 [install-section-name.ntx86] 部分和 [install-section-name] 部分,并且它注册了特定于设备的共同安装程序,那么 INF 必须同时包含 [install-section-name.ntx86.Coinstallers] 部分和 [install-section-name.Coinstallers] 部分。 有关如何使用系统定义的 .nt、.ntx86、.ntia64、.ntamd64、.ntarm 和 .ntarm64 扩展的详细信息,请参阅为多个平台和操作系统创建 INF 文件。
DDInstall.CoInstallers 部分中的每个指令都可以引用多个 INF 编写器定义的部分名称。 但是,每个附加的命名部分都必须用逗号 (,) 隔开。
每个指令创建的部分名称在 INF 文件中都必须是唯一的,并且必须遵循定义部分名称的一般规则。 有关这些规则的详细信息,请参阅 INF 文件的常规语法规则。
共同安装程序是一个 Win32 DLL,通常会向注册表写入额外的配置信息,或执行其他安装任务,这些任务需要动态生成的系统特定信息,而这些信息在创建 INF 时是不可用的。 在安装特定设备时,特定设备的共同安装程序会对操作系统设备安装程序或相应类别安装程序的安装操作加以补充。
有关如何编写和使用共同安装程序的详细信息,请参阅编写共同安装程序。
安装共同安装程序映像
必须将所有辅助安装程序文件复制到 %SystemRoot%\system32 目录中。 与任何 INF CopyFiles 操作一样,对于 INF 文件 DestinationDirs 部分中命名的 file-list-section,可以通过 dirid 值 11 或为 DefaultDestDir 条目提供此 dirid 值来显式控制目标。
注册特定于设备的辅助安装程序
注册一个或多个特定于设备的共同安装程序需要在注册表中添加一个 REG_MULTI_SZ 型的值项。 使用以下一般格式,指定由 AddReg 指令引用的 add-registry-section 部分:
[DDInstall.CoInstallers_DeviceAddReg]
HKR,,CoInstallers32,0x00010000,"DevSpecificCoInstall.dll
[,DevSpecificEntryPoint]"[,"DevSpecific2CoInstall.dll
[,DevSpecific2EntryPoint]"...]
HKR 条目在 INF 文件中以单行形式列出,每个提供的特定设备共同安装程序 DLL 必须有一个唯一的名称。 注册列出的共同安装程序后,系统的设备安装程序会在该设备安装过程的每个后续步骤中调用它们。
如果省略了可选的 DevSpecificEntryPoint,则会使用默认的 CoDeviceInstall 例程名称作为共同安装程序 DLL 的入口点。
有关详细信息,请参阅注册特定于设备的共同安装程序。
注册设备类共同安装程序
要在注册表中为一个或多个设备类共同安装程序添加值项(以及安装程序类子项,如果尚不存在),由 AddReg 指令引用的 add-registry-section 的一般形式如下:
[DDInstall.CoInstallers_ClassAddReg]
HKLM,System\CurrentControlSet\Control
\CoDeviceInstallers,{SetupClassGUID},
0x00010008,"DevClssCoInst.dll[,DevClssEntryPoint]"
...
add-registry 部分中的每个条目都在 INF 文件中以单行形式列出,每个提供的类共同安装程序 DLL 都必须有一个唯一的名称。 如果提供的共同安装程序应用于多个设备安装程序类,则此 add-registry 部分可以有多个条目,并且每个条目都有相应的 SetupClassGUID 值。
此类补充设备类共同安装程序不得取代现有类安装程序的任何已注册共同安装程序。 因此,类共同安装程序必须有一个唯一的名称,所提供的 REG_MULTI_SZ 型值必须附加(如 flags 值 0x0010008 中的 8 所示)到 {SetupClassGUID} 子项中已有的特定于类的共同安装程序条目(如有)。
注意
如果已经注册了同名的共同安装程序,则 SetupAPI 函数绝不会在值项中附加重复的 DevClssCoInstall.dll。
补充设备类共同安装程序的 INF 可通过右键单击安装或调用 SetupInstallFromInfSection(由设备安装应用程序调用)来激活。
示例
此示例显示了用于 IrDA 串行网络适配器的 DDInstall.CoInstallers 部分。 系统为这些 IrDA(串行)NIC 提供的 INF 为系统 IrDA 类安装程序提供了一个共同安装程序。
; DDInstall section
[PNP.NT]
AddReg=ISIR.reg, Generic.reg, Serial.reg
PromptForPort=0 ; This is handled by IRCLASS.DLL
LowerFilters=SERIAL ; This is handled by IRCLASS.DLL
BusType=14
Characteristics=0x4 ; NCF_PHYSICAL
; ... PNP.NT.Services section omitted here
[PNP.NT.CoInstallers]
AddReg = ISIR.CoInstallers.reg
; ...
[IRSIR.reg]
HKR, Ndi, HelpText, 0, %IRSIR.Help%
HKR, Ndi, Service, 0, "IRSIR"
HKR, Ndi\Interfaces, DefUpper, 0, "ndisirda"
HKR, Ndi\Interfaces, DefLower, 0, "nolower"
HKR, Ndi\Interfaces, UpperRange, 0, "ndisirda"
HKR, Ndi\Interfaces, LowerRange, 0, "nolower"
[Generic.reg]
HKR,,InfraredTransceiverType,0,"0"
[Serial.reg]
HKR,,SerialBased,0, "0"
[ISIR.CoInstallers.reg]
HKR,,CoInstallers32,0x00010000,"IRCLASS.dll,IrSIRClassCoInstaller"
; ... Services and Event Log registry sections omitted here
[Strings]
; ...
IRSIR.Help = "An IrDA serial infrared device is a built-in COM port or
external transceiver which transmits infrared pulses. This NDIS
miniport driver installs as a network adapter and binds to the FastIR
protocol."
前面的 PNP.NT.CoInstallers 部分只引用了共同安装程序特定的 add-registry 部分。
它没有 CopyFiles 指令,因为系统提供的 INF 安装了一组 IrDA 网络设备。 与所有系统 INF 文件一样,此 INF 文件使用其 Version 部分中的 LayoutFile 条目来将共同安装程序文件传输到目标。
IHV 或 OEM 提供的 INF 中的任何 DDInstall.CoInstallers 部分都需要 CopyFiles 指令和 SourceDisksNames 以及 SourceDisksFiles 部分。