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 指向的内存块中传递内容密钥。 如果 pContentKey 为 NULL,则表示应用程序使用会话密钥来加密数据。
如果驱动程序的 CreateCryptoSession 函数之前创建了加密会话,并且 D3DDDIARG_CREATECRYPTOSESSION 结构的 CryptoType 成员设置为 D3DCRYPTOTYPE_AES128_CTR,则 D3DDDIARG_DECRYPTIONBLT 的 pIV 成员指向DXVADDI_PVP_HW_IV结构,并包含应用程序用于加密缓冲区的初始化向量。 如果驱动程序的 DecryptionBlt 函数确定初始化向量以前用于相同的内容密钥 (或会话密钥(如果未将内容密钥用于) )。 应用程序应递增应用程序加密的每个缓冲区的 DXVADDI_PVP_HW_IV 结构的 IV 成员。 因此,如果 IV 成员小于或等于传递给 DecryptionBlt 的前一个 IV 值,驱动程序的 DecryptionBlt 函数可能会失败。
如果驱动程序和硬件支持部分加密的缓冲区,则 D3DDDIARG_DECRYPTIONBLT 的 pEncryptedBlockInfo 成员指示已加密的缓冲区部分和未加密的部分。 如果整个缓冲区已加密, 则 pEncryptedBlockInfo 应为 NULL。
DecryptionBlt 无法写入子矩形。
Direct3D 运行时验证D3DDDIARG_DECRYPTIONBLT结构的 SrcSubResourceIndex 成员指定的源图面是否位于系统内存中,并且未执行拉伸、颜色空间转换等。 应用程序应确保系统内存缓冲区正确对齐,并且缓冲区的大小与目标图面匹配。 驱动程序应验证内存对齐方式和缓冲区大小 (SrcResourceSize 成员D3DDDIARG_DECRYPTIONBLT) ,如果这些条件不正确,则失败。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从 Windows 7 操作系统开始,支持 DecryptionBlt。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |