PFND3DDDI_DECRYPTIONBLT回调函数 (d3dumddi.h)

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

语法

PFND3DDDI_DECRYPTIONBLT Pfnd3dddiDecryptionblt;

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

参数

hDevice

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

unnamedParam2

pData [in]

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

返回值

DecryptionBlt 返回以下值之一:

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

注解

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

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

如果驱动程序的 CreateCryptoSession 函数以前创建了加密会话,其中D3DDDIARG_CREATECRYPTOSESSION结构的成员设置为D3DCRYPTOTYPE_AES128_CTR,则D3DDDIARG_DECRYPTIONBLT的 pIV成员指向DXVADDI_PVP_HW_IV结构,并包含应用程序用于加密缓冲区的初始化向量。 如果驱动程序的 DecryptionBlt 函数确定初始化向量以前用于同一内容密钥 (或会话密钥(如果未) 使用内容密钥),则驱动程序的 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。
目标平台 桌面
Header d3dumddi.h (包括 D3dumddi.h)

另请参阅

CreateCryptoSession

D3DDDIARG_CREATECRYPTOSESSION

D3DDDIARG_DECRYPTIONBLT

D3DDDI_DEVICEFUNCS