內容保護 DDI

本節僅適用于 Windows 7 和更新版本,以及 Windows Server 2008 R2 和更新版本的 Windows 作業系統。

內容保護 DDI 是 Direct3D 第 9 版 DDI 的延伸模組,可保護視訊。 內容保護 DDI 是由本節所述的進入點所組成。

必要的內容保護 DDI 函式

如果在使用者模式顯示驅動程式中實作內容保護,驅動程式必須支援下列內容保護 DDI 功能:

內容保護功能

如果使用者模式顯示驅動程式支援上述每個必要的內容保護 DDI 功能,則只會報告內容保護功能。 Direct3D 執行時間會使用下列 D3DDDICAPS_TYPE 值來擷取使用者模式顯示驅動程式支援的內容保護功能相關資訊。 執行時間會在執行時間呼叫GetCaps時,驅動程式GetCaps函式pData參數指向之D3DDDIARG_GETCAPS結構的Type成員中設定這些D3DDDICAPS_TYPE值。

D3DDDICAPS_GETCONTENTPROTECTIONCAPS
執行時間會針對驅動程式應該使用的特定加密和解碼組合,提供 DDICONTENTPROTECTIONCAPS 結構的指標。 驅動程式會傳回已填入之 D3DCONTENTPROTECTIONCAPS 結構的指標,描述加密和解碼組合之驅動程式的內容保護功能。 如需 D3DCONTENTPROTECTIONCAPS 的詳細資訊,請參閱 DirectX SDK 檔。

D3DDDICAPS_GETCERTIFICATESIZE
驅動程式提供數位的指標,指定用於通道或密碼編譯類型之驅動程式憑證的大小,以位元組為單位。 Direct3D 執行時間接著會使用此大小來配置緩衝區,以保存執行時間在執行時間呼叫具有D3DDDICAPS_GETCERTIFICATE的 GetCaps 時所收到的憑證資訊。

D3DDDICAPS_GETCERTIFICATE
執行時間會提供 DDICERTIFICATEINFO 結構的指標,描述驅動程式應該擷取的憑證。

針對已驗證的通道,驅動程式會使用現有的 OPM 憑證,這是 Microsoft 簽署根目錄的 X.509 憑證。

應用程式可以查詢驅動程式的憑證,以判斷下列資訊:

  • 驅動程式是否受信任。

  • 是否撤銷驅動程式。

  • 驅動程式的公開金鑰。 應用程式會使用驅動程式的公開金鑰,為用於驗證的已驗證通道建立工作階段金鑰。

如果針對 Direct3D 9 驗證通道呼叫 getCaps ,且D3DDDICAPS_GETCERTIFICATE集的呼叫會失敗,因為此通道不支援憑證或驗證。

針對密碼編譯會話,驅動程式會針對指定的密碼編譯類型傳回其憑證。 視所使用的密碼編譯類型和金鑰交換而定,可能會使用或可能不會使用憑證。 不同的密碼編譯類型也可以使用不同的憑證。

選擇性內容保護 DDI 函式

驅動程式可以選擇性地支援下列內容保護 DDI 函式:

  • EncryptionBlt函式會從受保護的表面讀取加密的資料。

  • GetPitch函式會擷取受保護表面的傾斜度。

  • StartSessionKeyRefresh函式會傳回亂數,解碼器/應用程式和驅動程式/硬體隨後可以使用來搭配工作階段金鑰執行獨佔 OR 作業 (XOR) 。

  • FinishSessionKeyRefresh函式指出該時間點的所有緩衝區都會使用更新的工作階段金鑰值。

  • GetEncryptionBltKey函式會傳回用來解密驅動程式EncryptionBlt函式所傳回資料的金鑰。

  • DecryptionBlt函式會將資料寫入受保護的表面。

內容保護的資源

Direct3D 執行時間會針對受保護的內容使用下列 D3DDDI_RESOURCEFLAGS 旗標。 執行時間會在執行時間呼叫CreateResource時,驅動程式CreateResource 函式 pResource參數所指向之 D3DDDIARG_CREATERESOURCE結構的Flags成員中設定這些D3DDDI_RESOURCEFLAGS旗標。

RestrictedContent
資源可能包含受保護的內容。 在應用程式建立資源之前,應用程式可能或可能尚未明確啟用內容保護。 驅動程式應該確保執行時間會將資源的配置放在可以保護的記憶體集區中。 驅動程式應該允許建立可鎖定的受保護資源。 不過,驅動程式應該在啟用內容保護時,明確地讓對 Lock 函式的呼叫失敗,以鎖定這些表面。

RestrictSharedAccess
只允許特定進程存取共用資源。

驅動程式應該限制此資源的共用存取。 執行時間只能呼叫驅動程式的 OpenResource 函式,以在建立資源的程式內,或透過已驗證通道明確授與存取權的裝置,開啟此資源的顯示裝置 (hDevice) 。