共用方式為


IDirect3DCryptoSession9::D ecryptionBlt 方法 (d3d9.h)

將加密的數據寫入受保護的表面。

語法

HRESULT DecryptionBlt(
  IDirect3DSurface9       *pSrcSurface,
  IDirect3DSurface9       *pDstSurface,
  UINT                    SrcSurfaceSize,
  D3DENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
  VOID                    *pContentKey,
  VOID                    *pIV
);

參數

pSrcSurface

包含源數據的介面指標。

pDstSurface

寫入加密數據之受保護介面的指標。

SrcSurfaceSize

pSrcSurface 指向的介面記憶體大小,以位元組為單位。 大小必須對齊驅動程式功能結構中的 BlockAlignmentSize 值;請參閱。

pEncryptedBlockInfo

D3DENCRYPTED_BLOCK_INFO 結構的指標,或 NULL

如果驅動程序支援部分加密的緩衝區, pEncryptedBlockInfo 會指出緩衝區的哪些部分會加密。 如果整個表面已加密,請將此參數設定為 NULL

若要檢查驅動程式是否支援部分加密的緩衝區,請呼叫 IDirect3DDevice9Video::GetContentProtectionCaps 並檢查 D3DCPCAPS_PARTIALDECRYPTION 功能旗標。 如果驅動程式不支援部分加密的緩衝區,請將此參數設定為 NULL

pContentKey

緩衝區的指標,其中包含內容加密密鑰或 NULL。 若要查詢驅動程式是否支援使用內容密鑰,請呼叫 IDirect3DDevice9Video::GetContentProtectionCaps 並檢查 D3DCPCAPS_CONTENTKEY 功能旗標。

如果驅動程式支援內容金鑰,請使用內容金鑰來加密表面。 使用會話金鑰加密內容金鑰,並將產生的加密文字放在 pContentKey 中。 如果驅動程式不支援內容密鑰,請使用會話密鑰來加密介面,並將 pContentKey 設定為 NULL

pIV

緩衝區的指標,其中包含初始化向量 (IV) 。

如果加密類型 D3DCRYPTOTYPE_AES128_CTR,則緩衝區是 D3DAES_CTR_IV 結構。 呼叫端會配置 結構併產生IV。 當您產生第一個 IV 時,請將 結構初始化為隨機數。 針對每個後續的IV,只要遞增結構的 IV 成員,確保值一律增加。 此程式可讓驅動程式驗證同一個 IV 永遠不會使用相同的金鑰組一次以上。

針對其他加密類型,可能會使用不同的結構,或者加密可能不會使用IV。

傳回值

如果此方法成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。

備註

並非所有硬體或驅動程式都支援所有密碼編譯類型的這項功能。

來源表面必須是使用適當對齊限制所建立的系統記憶體表面。 緩衝區必須夠大,才能容納受保護表面的間距和高度,加上填補以容納開始對齊限制和區塊傳輸大小。

具體來說,您應該配置來源介面,如下所示:

  1. 呼叫 IDirect3DCryptoSession9::GetSurfacePitch 以取得受保護表面的步幅。
  2. 呼叫 IDirect3DDevice9Video::GetContentProtectionCaps 方法,以取得 D3DCONTENTPROTECTIONCAPS 結構中的 BufferAlignmentStartBlockAlignmentSize 成員的值。
  3. 計算表面記憶體的大小下限,因為 SysMemSize = 受保護的表面步進×受保護的表面高度。
  4. 新增填補以容納 BufferAlignmentStartBlockAlignmentSize 的值。
  5. 在系統記憶體中配置緩衝區,大小等於 SysMemSize (包括填補) 。
  6. 如果系統記憶體緩衝區的位址未對齊 BufferAlignmentStart 的值,請計算與緩衝區開頭位移的記憶體對齊指標。
  7. 呼叫 IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx 以建立來源表面。 將記憶體對齊指標當做共用資源句柄傳遞 (pSharedHandle) 。
如果您鎖定表面, D3DLOCKED_RECT 結構中回報的步幅可能不符合受保護表面的步幅。 不過,當您解譯數據時,請一律使用受保護表面的步進。

這個方法不支援寫入表面的子目錄。

規格需求

需求
最低支援的用戶端 Windows 7 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 R2 [僅限桌面應用程式]
目標平台 Windows
標頭 d3d9.h

另請參閱

GPU 型內容保護

IDirect3DCryptoSession9