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