目录文件和数字签名
数字签名目录文件 (.cat) 可用作任意文件集合的数字签名。 目录文件包含加密哈希或 指纹的集合。 每个指纹对应于集合中包含的文件。
即插即用 (PnP) 设备安装会将驱动程序包的签名目录文件识别为驱动程序包的数字签名。 目录文件中的每个指纹都对应于驱动程序包安装的文件。 无论预期的操作系统如何,加密技术都用于对目录文件进行数字签名。
如果驱动程序包中的任何文件在驱动程序包签名后更改,PnP 设备安装会将驱动程序包的数字签名视为无效。 此类文件包括 INF 文件、目录文件和 INF CopyFiles 指令复制的所有文件。 例如,即使是单字节更改以更正拼写错误会使数字签名失效。 如果数字签名无效,则必须将驱动程序包重新提交到 Windows 硬件开发人员中心以获取新签名,或为驱动程序包生成新的验证码签名。
同样,对设备硬件或固件的更改需要经过修订 的设备 ID 值,以便系统可以检测更新的设备并安装正确的驱动程序。 由于修改后的设备 ID 值必须出现在 INF 文件中,因此必须将包重新提交到 Windows 硬件开发人员中心以获取新签名或为驱动程序包生成新的验证码签名。 即使驱动程序二进制文件未更改,也必须获取新的设备 ID。
驱动程序 INF 文件的 INF 版本部分中的 CatalogFile 指令指定驱动程序包的目录文件的名称。 在驱动程序安装过程中,操作系统使用 CatalogFile 指令来标识和验证目录文件。 系统将目录文件安装到 GetSystemDirectory 返回的系统目录下的 CatRoot 目录,例如 %SystemRoot%\System32\CatRoot。 不应手动向或从该目录中添加或删除目录文件。 对于驱动程序包,当驱动程序包暂存到驱动程序存储时,目录文件会自动安装到 CatRoot。 从驱动程序存储中删除驱动程序包时,会自动从 CatRoot 卸载目录文件。 如果需要出于驱动程序包之外的原因将目录文件安装到 CatRoot,请参阅 使用 SignTool 安装目录文件并使用 CryptCATAdminAddCatalog 安装目录文件。
目录文件指南
从 Windows 2000 开始,如果 驱动程序包 在所有版本的 Windows 上安装相同的二进制文件,INF 文件可以包含单个未编码 的 CatalogFile 指令。 但是,如果包为不同版本的 Windows 安装不同的二进制文件,INF 文件应包含修饰的 CatalogFile 指令。 有关 CatalogFile 指令的详细信息,请参阅 INF 版本部分。
如果有多个驱动程序包,则应为每个驱动程序包创建单独的目录文件,并为每个目录文件提供唯一的文件名。 两个不相关的驱动程序包无法共享单个目录文件。 但是,提供多个设备的单个驱动程序包只需要一个目录文件。