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 錯誤碼。
備註
並非所有硬體或驅動程式都支援所有密碼編譯類型的這項功能。
來源表面必須是使用適當對齊限制所建立的系統記憶體表面。 緩衝區必須夠大,才能容納受保護表面的間距和高度,加上填補以容納開始對齊限制和區塊傳輸大小。
具體來說,您應該配置來源介面,如下所示:
- 呼叫 IDirect3DCryptoSession9::GetSurfacePitch 以取得受保護表面的步幅。
- 呼叫 IDirect3DDevice9Video::GetContentProtectionCaps 方法,以取得 D3DCONTENTPROTECTIONCAPS 結構中的 BufferAlignmentStart 和 BlockAlignmentSize 成員的值。
- 計算表面記憶體的大小下限,因為 SysMemSize = 受保護的表面步進×受保護的表面高度。
- 新增填補以容納 BufferAlignmentStart 和 BlockAlignmentSize 的值。
- 在系統記憶體中配置緩衝區,大小等於 SysMemSize (包括填補) 。
- 如果系統記憶體緩衝區的位址未對齊 BufferAlignmentStart 的值,請計算與緩衝區開頭位移的記憶體對齊指標。
- 呼叫 IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx 以建立來源表面。 將記憶體對齊指標當做共用資源句柄傳遞 (pSharedHandle) 。
這個方法不支援寫入表面的子目錄。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 R2 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | d3d9.h |