OPM DDI の使用
Microsoft DirectX グラフィックス カーネル サブシステム (Dxgkrnl.sys) は、OPM DDI を使用して、OPM で保護された出力の作成、OPM で保護された出力の破棄、証明書の取得、保護された出力の構成、保護された出力に関する情報の取得、およびグラフィックス アダプターに関する情報の取得を行います。 DirectX グラフィックス カーネル サブシステムは、ディスプレイ ミニポート ドライバーの DxgkDdiQueryInterface 関数を呼び出して、GUID_DEVINTERFACE_OPM および DXGK_OPM_INTERFACE_VERSION_1 で識別されるインターフェイスを照会するときに、OPM DDI 関数へのポインターを取得します。 次のシーケンスでは、OPM DDI を使用して、OPM で保護された出力を作成、操作、および破棄する方法について説明します。
DirectX グラフィックス カーネル サブシステムは、DxgkDdiOPMCreateProtectedOutput 関数を呼び出して、OPM で保護された出力を作成します。 OPM で保護された出力は、常に 1 つの物理ビデオ出力に対応します。 DxgkDdiOPMCreateProtectedOutput は、新しく作成された出力へのハンドルを返します。
DirectX グラフィックス カーネル サブシステムは、ディスプレイ ミニポート ドライバーの OPM 証明書または COPP 証明書とそのサイズを取得するために、DxgkDdiOPMGetCertificateSize 関数と DxgkDdiOPMGetCertificate 関数を呼び出します。
Note
DxgkDdiOPMCreateProtectedOutput、DxgkDdiOPMGetCertificateSize、DxgkDdiOPMGetCertificate は、DirectX グラフィックス カーネル サブシステムが保護された出力ハンドルを渡さない唯一の OPM DDI 関数です。
DirectX グラフィックス カーネル サブシステムは、DxgkDdiOPMGetRandomNumber 関数を呼び出して、保護された出力の乱数を取得します。
DirectX グラフィックス カーネル サブシステムは、DxgkDdiOPMSetSigningKeyAndSequenceNumbers 関数の 呼び出しで 256 バイトのバッファーを渡します 。 バッファーには、ディスプレイ ミニポート ドライバーの公開キーのいずれかで暗号化されたデータが含まれています。 HFS の詳細については、「出力コンテンツ保護と Windows Vista」の Web サイトから出力コンテンツ保護ドキュメントをダウンロードしてください。 使用される公開キーは、保護された出力のセマンティクスによって異なります。 保護された出力に OPM セマンティクスがある場合は、ディスプレイ ミニポート ドライバーの OPM 証明書の公開キーが使用されます。 保護された出力に COPP セマンティクスがある場合は、ディスプレイ ミニポート ドライバーの COPP 証明書の公開キーが使用されます。 データの暗号化に使用される暗号化スキームは、保護された出力のセマンティクスにも依存します。 保護された出力に COPP セマンティクスがある場合は標準の RSA アルゴリズムを使用し、保護された出力に OPM セマンティクスがある場合は RSAES-OAEP 暗号化スキームを使用してデータが暗号化されます。 RSA、AES、RSAES-OAEP の詳細については、RSA ラボの Web サイトを参照してください。 ディスプレイ ミニポート ドライバーは、適切な秘密キーと復号化メソッドを使用してデータを復号化します。 復号化されたデータには、乱数、2 つのランダム シーケンス番号、128 ビット AES キーが含まれます。 ディスプレイ ミニポート ドライブは、その DxgkDdiOPMGetRandomNumber 関数が呼び出されたときにドライバーが返した乱数と乱数が一致することを確認します。 ドライバーは、2 つのシーケンス番号と 128 ビット AES キーを格納します。
DirectX グラフィックス カーネル サブシステムは、DxgkDdiOPMGetInformation または DxgkDdiOPMGetCOPPCompatibleInformation 関数を呼び出して、保護された出力から情報を取得できるようになりました。 DirectX グラフィックス カーネル サブシステムは、DxgkDdiOPMConfigureProtectedOutput を呼び出して、保護された出力を構成することもできます。 DxgkDdiOPMGetInformation は、出力に OPM セマンティクスがあり、DxgkDdiOPMGetCOPPCompatibleInformation を呼び出すことができるのは、出力に COPP セマンティクスがある場合のみです。 通常、DirectX グラフィックス カーネル サブシステムは、DxgkDdiOPMGetInformation または DxgkDdiOPMGetCOPPCompatibleInformation を呼び出して、出力に関する情報を取得し、DxgkDdiOPMConfigureProtectedOutput を 1 回以上呼び出して出力を構成します。 次いで、DirectX グラフィックス カーネル サブシステムは、DxgkDdiOPMGetInformation または DxgkDdiOPMGetCOPPCompatibleInformation をもう一度呼び出します。 DirectX グラフィックス カーネル サブシステムは、DxgkDdiOPMGetInformation または DxgkDdiOPMGetCOPPCompatibleInformation を呼び出すことによって、次の種類の情報を取得できます。
- 出力のコネクタの種類。
- 出力でサポートされるコンテンツ保護の種類。 現在、出力では次の機能をサポートできます。
- アナログ コピー保護 (ACP)
- コンテンツ生成管理システム アナログ (CGMS-A)
- High-bandwidth Digital Content Protection (HDCP)
- DisplayPort Content Protection (DPCP)
- 特定の保護の種類についての出力の現在の仮想保護レベル。
- 特定の保護の種類についての物理出力の実際の保護レベル。
- 出力で現在使用されている HDCP システム更新可能性メッセージ (SRM) のバージョン。 HDCP SRM の詳細については、「HDCP 仕様リビジョン 1.1」を参照してください。 この情報を取得できるのは DxgkDdiOPMGetInformation のみです。
- 接続された HDCP デバイスのキー選択ベクトル (KSV) と、HDCP デバイスがリピーターであるかどうかを示します。 この情報を取得できるのは DxgkDdiOPMGetCOPPCompatibleInformation のみです。 HDCP リピーターと KSV の詳細については、「HDCP 仕様リビジョン 1.1」を参照してください。
- グラフィックス アダプターが使用する拡張バスの種類。 PCI と AGP は拡張バスの例です。
- 保護された出力に関連付けられている物理コネクタからモニターに送信される画像の形式。
- 保護された出力がサポートする CGMS-A および ACP 信号伝達標準。 この情報を取得できるのは DxgkDdiOPMGetCOPPCompatibleInformation のみです。
- 出力の識別子
- デジタル ビデオ インターフェイス (DVI) 出力コネクタの電気的特性。
DirectX グラフィックス カーネル サブシステムは、DxgkDdiOPMConfigureProtectedOutput を呼び出すことによって、次の設定を変更できます。
- 出力の保護の種類の 1 つの現在の保護レベル。 たとえば、DxgkDdiOPMConfigureProtectedOutput では、HDCP を有効または無効にしたり、ACP 保護をオフにしたり、現在の ACP 保護レベルを変更したりできます。
- 保護された出力が使用する現在の HDCP SRM。
- 保護された出力で使用される現在の信号伝達標準。 この変更は、出力に COPP セマンティクスがある場合にのみ実行できます。
DirectX グラフィックス カーネル サブシステムは、保護された出力オブジェクトの使用が完了したときに DxgkDdiOPMDestroyProtectedOutput を呼び出します。