windows驱动开发-inf文件(四)

还有几个非常特殊INF节,就是AddReg和CopyFile之类的,它们其实也是非常重要的节;

INF-AddReg

AddReg 指令引用一个或多个用于修改或创建注册表信息的 INF 编写器定义的 add-registry-sections:

每个 add-registry-section 都可以包含用于执行以下操作的条目:

  • 将新项(可能带有初始值条目)添加到注册表;
  • 向现有注册表项添加新的值条目;
  • 修改注册表中特定键的现有值条目;

AddReg 指令引用的每个命名 add-registry-section 具有以下格式:

[add-registry-section]
reg-root,[subkey],[value-entry-name],[flags],[value][,[value]]
reg-root,[subkey],[value-entry-name],[flags],[value][,[value]]
 ...

[[add-registry-section.security]
"security-descriptor-string"]

add-registry-section 可以有任意数量的条目,每个条目位于单独的行中。 INF 还可以包含一个或多个可选的 add-registry-section.security 节,每个节指定一个安全描述符,该描述符应用于命名 add-registry-section 中描述的所有注册表值。

reg-root: 标识此条目中提供的其他值的注册表树的根。 值可以是下列任一值:

  • HKCR: HKEY_CLASSES_ROOT的缩写;
  • HKCU: HKEY_CURRENT_USER的缩写;
  • HKLM: HKEY_LOCAL_MACHINE的缩写;
  • HKU: HKEY_USERS的缩写;
  • HKR: 相对根;

subkey: 此可选值以在 INF 的 Strings 节中定义的 %strkey% 标记形式或给定 reg-root (key1\key2\key3...) 下的注册表路径形式,指定以下项之一:

  • 要在给定注册表路径末尾添加到注册表的新子项。
  • 一个现有子项,其中写入此条目中指定的其他值 (可能替换给定子项) 的现有命名值条目的值。
  • 要添加到注册表的新子项及其初始值条目。

value-entry-name: 此可选值命名给定 (现有) 子项 中的现有值项,或创建要在指定 子项中添加的新值项的名称,无论该值已存在还是要添加到注册表中的新项。 此值可以表示为“带引号的字符串”或 INF 的字符串部分中定义的 %strkey% 标记。 

flag: 此可选的十六进制值表示为系统定义的低字和高字标志值的 ORed 位掩码,定义值条目的数据类型和/或控制 add-registry 操作;

value: 这可以选择为要添加到给定注册表项的指定 value-entry-name 指定一个新值。 此类 值 可以是现有项中现有命名值条目的“替换”值、要追加 (标志 值 的值0x00010008) 到现有项中的现有命名 REG_MULTI_SZ类型值条目、要写入现有项的新值项或要添加到注册表的新 子项 的初始值条目。

此类 值的 表达式取决于为 标志指定的注册表类型,如下所示:

  • 注册表字符串类型值可以表示为“带引号的字符串”,也可以表示为 INF 文件的 Strings 节中定义的 %strkey% 标记。 此类 INF 指定的值不必在每个字符串的末尾包含 NULL 终止符。
  • 注册表数值类型值可以使用 0x 表示法) 或十进制数表示为十六进制 (。

security-descriptor-string: 指定要应用于由命名 add-registry-section 创建的所有注册表项的安全描述符。 security-descriptor-string 是一个包含标记的字符串,用于指示 DACL安全组件。如果未指定 add-registry-section.security 节,注册表项将继承父项的安全设置。

如果指定了 add-registry-section.security 节,则必须包含以下 ACE,以便安装和升级设备和系统 Service Pack:

  • (A;;Ga;;;SY) • 授予对本地系统的所有访问权限。
  • (A;;Ga;;;BA) • 向内置管理员授予所有访问权限。
INF-DelReg

DelReg 指令引用一个或多个 INF 编写器定义的部分,这些节描述要从注册表中删除的键和/或值条目:

[del-registry-section]
reg-root-string,subkey[,value-entry-name][,flags][,value]
reg-root-string,subkey[,value-entry-name][,flags][,value]
...

这部分几乎和AddReg一模一样,所以举一个例子来说明:

[ComPort.NT]
AddReg=ComPort.NT.AddReg
 ... ; more directives omitted here

[ComPort.NT.HW]
DelReg=ComPort.NT.HW.DelReg

[Comport.NT.AddReg]
HKR,,EnumPropPages32,,"MSPorts.dll,SerialPortPropPageProvider"

[ComPort.NT.HW.DelReg]
HKR,,UpperFilters
INF-RenFiles

RenFiles 指令引用 INF 文件中其他位置的 INF 编写器定义的节,这会导致在指定引用 RenFiles 指令的节的操作上下文中重命名该文件列表:

[file-list-section]
 
new-dest-file-name,old-source-file-name 
...
  • ile-list-section 可以包含任意数量的条目,每个条目位于单独的行上;
  • new-dest-file-name:  指定要提供给目标上的文件的新名称;
  • old-source-file-name: 指定文件的旧名称;
INF-DelFiles

DelFiles 指令引用 INF 文件中其他位置的 INF 编写器定义的节,并导致在指定引用 DelFiles 指令的节的操作上下文中删除该文件列表:

[file-list-section]
 
destination-file-name[,,,flag]
...
  • destination-file-name: 指定要从目标中删除的文件的名称。不要指定 CopyFiles 指令中列出的文件。 如果文件同时在 CopyFiles 引用和 DelFiles 引用的部分中列出,并且该文件当前存在于具有有效签名的系统上,则操作系统可能会优化复制操作,但执行删除操作。 这很可能不是 INF 编写器的意图;
  • flag: 此可选值可以是以下值之一,以十六进制表示法表示,如下所示或十进制值:
  • 0x00000001(DELFLG_IN_USE):删除命名文件,可能是在安装过程中使用它之后。在 INF 中设置此标志值会将文件删除操作排入队列,直到系统重新启动,如果给定文件因处理此 INF 时正在使用该文件而无法删除。 否则,不会删除此类文件。
  • 0x00010000 (DELFLG_IN_USE1) (Windows 2000 或更高版本的 Windows):此标志是DELFLG_IN_USE标志的高字版本,具有相同的用途和效果。 此标志应仅用于在基于 NT 的系统上安装。在 INF 中设置此标志值可防止与 INF 中的COPYFLG_WARN_IF_SKIP标志冲突,该标志具有引用同一 file-list-section的 DelFiles 和 CopyFiles 指令;

下面是代码示例:

[DestinationDirs]
DefaultDestDir = 12  ; DIRID_DRIVERS 

; ... 

[AHA154X]
CopyFiles=@AHA154x.MPD
DelFiles=ASPIDEV ; defines delete-files section name
; ... some other directives and sections omitted here

[ASPIDEV]
VASPID.SYS ; name of file to be deleted, if it exists on target 
; ...
INF-CopyINF

CopyINF 指令会导致将指定的 INF 文件复制到目标系统。 CopyINF 指令在 Windows XP 和更高版本的 Windows 中受支持:

[DDInstall]
  
CopyINF=filename1.inf[,filename2.inf]...
INF-CopyFiles 

这个节是用来将文件拷贝到某个目录的: 

[file-list-section]
destination-file-name[,[source-file-name][,[unused][,flag]]]
...

INF 编写器定义的 file-list-section 可以包含任意数量的条目,每个条目位于单独的行上。

每个 file-list-section 都可以具有以下格式的可选关联 file-list-section.security 节:

[file-list-section.security]
"security-descriptor-string"
  • destination-file-name: 指定目标文件的名称。 如果未提供 source-file-name ,则此规范也是源文件的名称;
  • source-file-name:指定源文件的名称。 如果文件复制操作的源文件名和目标文件名相同,则可以省略 source-file-name ;
  • unused:Windows 2000 及更高版本的 Windows 不再支持此项。
  • flag:这些可选标志(以十六进制表示法表示或部分条目中的十进制值表示)可用于控制如何 (或是否将特定源文件) 复制到目标。 可以为以下系统定义标志指定一个或多个 (ORed) 值。 但是,其中一些标志是互斥的:
  • 0x00000001 (COPYFLG_WARN_IF_SKIP):如果用户选择不复制文件,则发送警告。 此标志和下一个标志互斥,两者与经过数字签名的 INF 文件无关;
  • 0x00000002 (COPYFLG_NOSKIP):不允许用户跳过复制文件。 如果 驱动程序包已签名,则此标志是隐含的;
  • 0x00000004 (COPYFLG_NOVERSIONCHECK):忽略文件版本并写入目标目录中的现有文件。 此标志和接下来的两个标志是互斥的。 此标志与数字签名的 INF 文件无关;
  • 0x00000008 (COPYFLG_FORCE_FILE_IN_USE):强制文件使用行为:如果当前打开,则不要复制同名的现有文件。 请改为复制具有临时名称的给定源文件,以便在下次重启时重命名和使用该文件;
  • 0x00000010 (COPYFLG_NO_OVERWRITE):不要将目标目录中的现有文件替换为同名的源文件。 此标志不能与任何其他标志组合使用;
  • 0x00000020 (COPYFLG_NO_VERSION_DIALOG):如果现有文件比源文件新,请不要使用源文件写入目标目录中的文件。较新的检查使用文件版本完成,如从VS_VERSIONINFO文件版本资源中提取的那样。  如果目标文件不是可执行文件或资源映像,或者该文件不包含文件版本信息,则设备安装假定目标文件较旧;
  • 0x00000040 (COPYFLG_OVERWRITE_OLDER_ONLY):仅当目标上的文件被较新版本取代时,才将源文件复制到目标目录。 此标志与数字签名的 INF 文件无关。 版本检查使用上述COPYFLG_NO_VERSION_DIALOG中所述的过程相同;
  • 0x00000400 (COPYFLG_REPLACEONLY):仅当文件已存在于目标目录中时,才将源文件复制到目标目录;
  • 0x00000800 (COPYFLG_NODECOMP) (Windows 7 及更高版本):将源文件复制到目标目录,如果源文件已压缩,则不解压缩源文件;
  • 0x00001000 (COPYFLG_REPLACE_BOOT_FILE):系统加载程序需要此文件。 系统将提示用户重启系统;
  • 0x00002000 (COPYFLG_NOPRUNE):请勿由于优化而删除此操作。例如,Windows 可能会确定文件复制操作没有必要,因为该文件已存在。 但是,INF 的编写者知道该操作是必需的,并指示 Windows 重写其优化并执行文件操作。如果文件也在 INF DelFiles 指令或 INF RenFiles 指令中指定,则此标志可用于确保复制文件;
  • 0x00004000 (COPYFLG_IN_USE_RENAME):如果由于正在使用目标文件而无法复制源文件,请重命名目标文件,然后将源文件复制到目标文件,然后删除重命名的目标文件。 如果无法重命名目标文件,请在下一次系统重启期间完成复制操作。 如果无法删除重命名的目标文件,请在下一次系统重启期间删除重命名的目标文件;
  • security-descriptor-string:指定要应用于由命名 file-list-section 复制的所有文件的安全描述符。 security-descriptor-string 是一个包含标记的字符串,用于指示 安全组件;

下面是一个具体的案例:  

[SourceDisksNames]
1 = %Floppy_Description%,,,\WinNT

[SourceDisksFiles.x86]
aha154x.sys = 2,\x86 ; on distribution disk 2, in subdir \WinNT\x86

[DestinationDirs]
DefaultDestDir = 13

; ... Manufacturer and Models sections omitted here

[AHA154X.NTx86]
CopyFiles=@AHA154x.SYS 
; ... some other directives and sections omitted here
; ...
  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值