共用方式為


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) ,如下所示:

  1. 呼叫 IDirect3DCryptoSession9::GetSurfacePitch 以取得受保護表面的步幅。
  2. 呼叫 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