修补文件的选定区域

修补包含可变内容的文件时,可能需要保留目标文件的选定区域以防止丢失关键信息。 例如,某些应用程序在可执行文件中戳记用户信息。 由于目标文件的内容可能取决于安装应用程序的计算机,因此很难确定特定文件是否是修补程序的有效目标。 在目标文件中写入的用户信息还可能被修补程序覆盖。

当使用 Msimsp.exePATCHWIZ.DLL 生成修补程序创建属性 (PCP) 文件时,可以指定要在修补期间忽略目标文件特定区域中的信息。 还可以指定保留目标文件其他区域中的信息,并将其复制到已更新文件中的偏移位置。 在创作 TargetFiles OptionalDataExternalFilesFamilyFileRanges 表时,指定要忽略的目标文件区域以及要保留的区域。

使用 TargetFiles OptionalData 表的 RetainOffsets 列以及 FamilyFileRanges 表的 RetainOffsets 和 RetainLengths 列,将信息范围从目标文件复制到已更新文件中的偏移范围。 将保留此范围内的信息。 使用 FamilyFileRanges 表的 RetainLengths 列指定范围长度。 保留范围的长度在目标文件和已更新文件中是相同的。 使用 TargetFiles OptionalData 表的 RetainOffsets 列指定目标文件中的范围偏移量。 使用 FamilyFileRanges 表的 RetainOffsets 列指定已更新文件中的范围偏移量。 因此,目标文件保留的范围是 TargetFiles OptionalData 表中 RetainOffsets 的值加上 RetainLengths。 此信息将复制到由 FamilyFileRanges 表中的 RetainOffsets 值加上 RetainLengths 后所得出的范围内的更新文件。 可以指定多个范围,但长度顺序必须与偏移顺序相匹配。

使用 TargetFiles OptionalData 表忽略目标文件的范围。 目标文件的此范围内的信息仍可能被修补程序覆盖。 在 IgnoreOffsets 列中指定范围偏移量,在 IgnoreLengths 列中指定范围长度。 可以指定多个范围,但长度顺序必须与偏移顺序相匹配。

长度和偏移量列中的值可以是十进制或十六进制。 PATCHWIZ.DLL 将前缀为“0x”的值视为十六进制值。 这些列是字符串列,因此 PATCHWIZ.DLL 会将值转换为 ULONG。 长度列以字节为单位指定长度。