カタログ ファイルとデジタル署名
デジタル署名されたカタログ ファイル (.cat) は、ファイルの任意のコレクションのデジタル署名として使用できます。 カタログ ファイルには、暗号法のハッシュまたは拇印のコレクションが含まれています。 各拇印は、コレクションに含まれるファイルに対応します。
プラグ アンド プレイ (PnP) デバイスのインストールでは、ドライバー パッケージのデジタル署名としてドライバー パッケージの署名付きカタログ ファイルを認識します。 カタログ ファイル内の各拇印は、ドライバー パッケージがインストールするファイルに対応します。 目的のオペレーティング システムに関係なく、暗号化テクノロジを使用してカタログ ファイルにデジタル署名します。
PnP デバイスのインストールでは、ドライバー パッケージの署名後にドライバー パッケージ内のファイルが変更された場合、ドライバー パッケージのデジタル署名は無効と見なされます。 このようなファイルには、INF ファイル、カタログ ファイル、および INF CopyFiles ディレクティブによって コピーされるすべてのファイルが含まれます。 たとえば、スペルミスを修正するために 1 バイトの変更を行っても、デジタル署名は無効になります。 デジタル署名が無効な場合は、新しい署名のWindows ハードウェア デベロッパー センターにドライバー パッケージを再送信するか、ドライバー パッケージの新しい Authenticode 署名を生成する必要があります。
同様に、デバイスのハードウェアまたはファームウェアを変更するには、システムが更新されたデバイスを検出して、正しいドライバーをインストールできるように、更新されたデバイス ID 値が必要です。 変更後のデバイス ID の値は INF ファイルに表示される必要があるため、新しい署名のWindows ハードウェア デベロッパー センターにパッケージを再送信するか、ドライバー パッケージの新しい Authenticode 署名を生成する必要があります。 ドライバー バイナリが変更されない場合でも、新しいデバイス ID を取得する必要があります。
ドライバーの INF ファイルの INF Version セクションのCatalogFile ディレクティブは、ドライバー パッケージのカタログ ファイルの名前を指定します。 ドライバーのインストール中、オペレーティング システムは CatalogFile ディレクティブを使用して、カタログ ファイルを識別して検証します。 システムは、カタログ ファイルを、 GetSystemDirectory によって返されるシステム ディレクトリの下の CatRoot ディレクトリ (たとえば、 %SystemRoot%\System32\CatRoot にインストールします。 カタログ ファイルは、そのディレクトリに手動で追加したり、そのディレクトリから削除したりしないでください。 ドライバー パッケージの場合、ドライバー パッケージがドライバー ストアにステージングされると、カタログ ファイルが CatRoot に自動的にインストールされます。 ドライバー パッケージがドライバー ストアから削除されると、カタログ ファイルは CatRoot から自動的にアンインストールされます。 ドライバー パッケージ以外の理由でカタログ ファイルを CatRoot にインストールする必要がある場合は、「SignTool を使用したカタログ ファイルのインストール」と「CryptCATAdminAddCatalog を使用したカタログ ファイルのインストール」 を参照してください。
カタログ ファイルのガイドライン
Windows 2000 以降、ドライバー パッケージによってすべてのバージョンの Windows に同じバイナリがインストールされる場合、INF ファイルは単一の非修飾の CatalogFile ディレクティブを含むことができます。 ただし、パッケージが Windows のバージョンごとに異なるバイナリをインストールする場合、INF ファイルは修飾された CatalogFile ディレクティブを含む必要があります。 CatalogFile ディレクティブの詳細については、「INF Version セクション」を参照してください。
複数のドライバー パッケージがある場合は、ドライバー パッケージごとに個別のカタログ ファイルを作成し、各カタログ ファイルに一意のファイル名を付ける必要があります。 関連付けられていない 2 つのドライバー パッケージは、1 つのカタログ ファイルを共有できません。 ただし、複数のデバイスをサポートする 1 つのドライバー パッケージに必要なカタログ ファイルは 1 つだけです。