ID3D11VideoContext::D ecryptionBlt 方法 (d3d11.h)

将加密数据写入受保护的图面。

语法

void DecryptionBlt(
  [in] ID3D11CryptoSession        *pCryptoSession,
  [in] ID3D11Texture2D            *pSrcSurface,
  [in] ID3D11Texture2D            *pDstSurface,
  [in] D3D11_ENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
  [in] UINT                       ContentKeySize,
  [in] const void                 *pContentKey,
  [in] UINT                       IVSize,
  [in] void                       *pIV
);

参数

[in] pCryptoSession

指向 ID3D11CryptoSession 接口的 指针。

[in] pSrcSurface

指向包含源数据的图面的指针。

[in] pDstSurface

指向写入加密数据的受保护图面的指针。

[in] pEncryptedBlockInfo

指向 D3D11_ENCRYPTED_BLOCK_INFO 结构的指针,或 NULL

如果驱动程序支持部分加密的缓冲区, pEncryptedBlockInfo 指示已加密缓冲区的哪些部分。 如果整个图面已加密,请将此参数设置为 NULL

若要检查驱动程序是否支持部分加密的缓冲区,请调用 ID3D11VideoDevice::GetContentProtectionCaps 并为D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION功能标志检查。 如果驱动程序不支持部分加密的缓冲区,请将此参数设置为 NULL

[in] ContentKeySize

加密内容密钥的大小(以字节为单位)。

[in] pContentKey

指向包含内容加密密钥的缓冲区的指针,或 NULL。 若要查询驱动程序是否支持使用内容密钥,请调用 ID3D11VideoDevice::GetContentProtectionCaps 并检查获取D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY功能标志。

如果驱动程序支持内容密钥,请使用内容密钥来加密图面。 使用会话密钥加密内容密钥,并将生成的密码文本放在 pContentKey 中。 如果驱动程序不支持内容密钥,请使用会话密钥加密图面,并将 pContentKey 设置为 NULL

[in] IVSize

pIV 缓冲区的大小(以字节为单位)。

[in] pIV

指向包含初始化向量 (IV) 的缓冲区的指针。

对于 128 位 AES-CTR 加密, pIV 指向 D3D11_AES_CTR_IV 结构。 调用方分配结构并生成 IV。 生成第一个 IV 时,将结构初始化为随机数。 对于每个后续 IV,只需递增结构的 IV 成员,确保值始终增加。 此过程使驱动程序能够验证同一个 IV 永远不会使用同一密钥对多次。

对于其他加密类型,可能使用不同的结构,或者加密可能不使用 IV。

返回值

如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

备注

并非所有硬件或驱动程序都支持所有加密类型的此功能。 仅当报告 D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT 上限时,才能调用此函数。

此方法不支持写入图面的子矩形。

如果硬件和驱动程序支持内容密钥:

  • 数据由调用方使用内容密钥进行加密。
  • 内容密钥由调用方使用会话密钥进行加密。
  • 加密的内容密钥将传递给驱动程序。
否则,调用方使用会话密钥加密数据,NULL 作为内容密钥传递。

如果驱动程序和硬件支持部分加密的缓冲区, pEncryptedBlockInfo 会指示缓冲区的哪些部分已加密,哪些部分未加密。 如果整个缓冲区已加密, pEncryptedBlockinfo 应为 NULL

D3D11_ENCRYPTED_BLOCK_INFO允许应用程序指示对缓冲区中的哪些字节进行了加密。 这是以字节为单位指定的,因此应用程序必须确保加密块与 GPU 的加密块对齐方式匹配。

此函数不接受可能已设置的 D3D11 谓词。

如果应用程序使用 D3D11 查询,则使用低于 11 的功能级别时,可能无法考虑 函数D3D11_QUERY_EVENT和 D3D11_QUERY_TIMESTAMP 。 对于任何功能级别,D3D11_QUERY_PIPELINE_STATISTICS不包括此函数。

要求

   
最低受支持的客户端 Windows 8 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 Windows
标头 d3d11.h

另请参阅

ID3D11VideoContext