PFND3DDDI_DECRYPTIONBLT回调函数 (d3dumddi.h)

DecryptionBlt 函数将数据写入受保护的图面。

语法

PFND3DDDI_DECRYPTIONBLT Pfnd3dddiDecryptionblt;

HRESULT Pfnd3dddiDecryptionblt(
  HANDLE hDevice,
  const D3DDDIARG_DECRYPTIONBLT *unnamedParam2
)
{...}

参数

hDevice

显示设备的句柄 (图形上下文) 。

unnamedParam2

pData [in]

指向 D3DDDIARG_DECRYPTIONBLT 结构的指针,该结构描述解密的位块传输 (bitblt) 操作的参数。

返回值

DecryptionBlt 返回以下值之一:

返回代码 说明
S_OK 已成功执行解密的 bitblt 操作。
E_OUTOFMEMORY DecryptionBlt 无法分配完成所需的内存。
D3DDDIERR_NOTAVAILABLE 驱动程序不支持 DecryptionBlt 函数。

注解

对于某些加密类型,硬件和驱动程序可以选择性地支持 DecryptionBlt

如果调用应用程序需要使用内容密钥,则应用程序使用内容密钥来加密数据,并使用会话密钥来加密内容密钥,然后再在 pContentKey 成员 D3DDDIARG_DECRYPTIONBLT 指向的内存块中传递内容密钥。 如果 pContentKeyNULL,则表示应用程序使用会话密钥来加密数据。

如果驱动程序的 CreateCryptoSession 函数之前创建了加密会话,并且 D3DDDIARG_CREATECRYPTOSESSION 结构的 CryptoType 成员设置为 D3DCRYPTOTYPE_AES128_CTR,则 D3DDDIARG_DECRYPTIONBLTpIV 成员指向DXVADDI_PVP_HW_IV结构,并包含应用程序用于加密缓冲区的初始化向量。 如果驱动程序的 DecryptionBlt 函数确定初始化向量以前用于相同的内容密钥 (或会话密钥(如果未将内容密钥用于) )。 应用程序应递增应用程序加密的每个缓冲区的 DXVADDI_PVP_HW_IV 结构的 IV 成员。 因此,如果 IV 成员小于或等于传递给 DecryptionBlt 的前一个 IV 值,驱动程序的 DecryptionBlt 函数可能会失败。

如果驱动程序和硬件支持部分加密的缓冲区,则 D3DDDIARG_DECRYPTIONBLTpEncryptedBlockInfo 成员指示已加密的缓冲区部分和未加密的部分。 如果整个缓冲区已加密, 则 pEncryptedBlockInfo 应为 NULL

DecryptionBlt 无法写入子矩形。

Direct3D 运行时验证D3DDDIARG_DECRYPTIONBLT结构的 SrcSubResourceIndex 成员指定的源图面是否位于系统内存中,并且未执行拉伸、颜色空间转换等。 应用程序应确保系统内存缓冲区正确对齐,并且缓冲区的大小与目标图面匹配。 驱动程序应验证内存对齐方式和缓冲区大小 (SrcResourceSize 成员D3DDDIARG_DECRYPTIONBLT) ,如果这些条件不正确,则失败。

要求

要求
最低受支持的客户端 从 Windows 7 操作系统开始,支持 DecryptionBlt。
目标平台 桌面
标头 d3dumddi.h (包括 D3dumddi.h)

另请参阅

CreateCryptoSession

D3DDDIARG_CREATECRYPTOSESSION

D3DDDIARG_DECRYPTIONBLT

D3DDDI_DEVICEFUNCS