IDirect3DCryptoSession9::EncryptionBlt 方法 (d3d9.h)
從受保護的表面讀取加密的數據。
語法
HRESULT EncryptionBlt(
IDirect3DSurface9 *pSrcSurface,
IDirect3DSurface9 *pDstSurface,
UINT DstSurfaceSize,
VOID *pIV
);
參數
pSrcSurface
受保護表面的指標。
pDstSurface
接收加密數據的介面指標。
DstSurfaceSize
pDstSurface 指向的介面記憶體大小,以位元組為單位。 大小必須對齊驅動程式功能結構中的 BlockAlignmentSize 值;請參閱。
pIV
接收初始化向量的緩衝區指標, (IV) 。 呼叫端會配置此緩衝區,但驅動程式會產生IV。
如果加密類型 D3DCRYPTOTYPE_AES128_CTR ( 128 位 AES-CTR ) ,pIV 會指向 D3DAES_CTR_IV 結構。 當驅動程式產生第一個IV時,它會將結構初始化為隨機數。 針對每個後續的 IV,驅動程式只會遞增 結構的 IV 成員,以確保值一律增加。 此程式可讓應用程式驗證同一個 IV 永遠不會多次搭配相同的金鑰組使用。
針對其他加密類型,可能會使用不同的結構,或者加密可能不會使用IV。
傳回值
如果此方法成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。
備註
如果驅動程式支援此方法,它會在IDirect3DDevice9Video::GetContentProtectionCaps 方法傳回的功能結構中設定D3DCPCAPS_ENCRYPTEDREADBACK旗標。
如果驅動程式設定 D3DCPCAPS_ENCRYPTEDREADBACKKEY 功能旗標,表示驅動程式會使用個別密鑰來加密數據。 若要取得此密鑰,請呼叫 IDirect3DCryptoSession9::GetEncryptionBltKey 方法。 否則,驅動程式會使用會話密鑰來加密數據。
配置目的地介面 (pDstSurface) ,如下所示:
- 呼叫 IDirect3DCryptoSession9::GetSurfacePitch 以取得受保護表面的步幅。
- 呼叫 GetContentProtectionCaps 方法,以取得 D3DCONTENTPROTECTIONCAPS 結構中的 BufferAlignmentStart 和 BlockAlignmentSize 成員的值。
- 計算表面記憶體的大小下限,因為 SysMemSize = 受保護的表面步進×受保護的表面高度。
- 新增填補以容納 BufferAlignmentStart 和 BlockAlignmentSize 的值。
- 在系統記憶體中配置緩衝區,大小等於 SysMemSize (包括填補) 。
- 如果系統記憶體緩衝區的位址未對齊 BufferAlignmentStart 的值,請計算記憶體對齊指標,該指標是緩衝區開頭的位移。
- 呼叫 IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx 以建立目的地介面。 將記憶體對齊指標當做共用資源句柄傳遞 (pSharedHandle) 。
- 方法無法讀取子物件或部分加密表面。
- 受保護的表面必須是螢幕外純表面或轉譯目標。
- 目的地介面必須是系統記憶體表面,以適當的對齊方式建立,如先前所述。
- 受保護的表面無法多重取樣。
- 方法不支援延展或色彩空間轉換。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 R2 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | d3d9.h |