PFND3DDDI_DECRYPTIONBLT回调函数 (d3dumddi.h)
DecryptionBlt 函数将数据写入受保护的图面。
语法
PFND3DDDI_DECRYPTIONBLT Pfnd3dddiDecryptionblt;
HRESULT Pfnd3dddiDecryptionblt(
HANDLE hDevice,
const D3DDDIARG_DECRYPTIONBLT *unnamedParam2
)
{...}
参数
hDevice
显示设备的句柄(图形上下文)。
unnamedParam2
pData [in]
指向描述解密位块传输(bitblt)作参数的 D3DDDIARG_DECRYPTIONBLT 结构的指针。
返回值
DecryptionBlt 返回以下值之一:
返回代码 | 描述 |
---|---|
S_OK | 已成功执行解密的 bitblt作。 |
E_OUTOFMEMORY | DecryptionBlt 无法为其分配完成所需的内存。 |
D3DDDIERR_NOTAVAILABLE | 驱动程序不支持 DecryptionBlt 函数。 |
言论
硬件和驱动程序可以选择支持某些加密类型的 DecryptionBlt。
如果调用应用程序需要使用内容密钥,则应用程序使用内容密钥来加密数据,会话密钥在 pContentKeyD3DDDIARG_DECRYPTIONBLT 指向的内存块中传递内容密钥之前加密内容密钥。 如果 pContentKeyNULL,则表示应用程序使用会话密钥加密数据。
如果驱动程序的 CreateCryptoSession 函数之前创建了加密会话,D3DDDIARG_CREATECRYPTOSESSION 结构的 cryptoType 成员设置为D3DCRYPTOTYPE_AES128_CTR,则 D3DDDIARG_DECRYPTIONBLT 的 pIV 成员指向 DXVADDI_PVP_HW_IV 结构,并包含应用程序用于加密缓冲区的初始化向量。 驱动程序的 DecryptionBlt 函数确定初始化向量以前用于同一内容密钥(如果未使用内容密钥,则会话密钥)应失败。 应用程序应递增应用程序加密的每个缓冲区DXVADDI_PVP_HW_IV结构的 IV 成员。 因此,如果 IV 成员小于或等于传递给 DecryptionBlt的上一个 IV 值,则驱动程序的 DecryptionBlt 函数可能会失败。
如果驱动程序和硬件支持部分加密缓冲区,pEncryptedBlockInfoD3DDDIARG_DECRYPTIONBLT 的成员表示已加密的缓冲区部分以及未加密的部分。 如果加密了整个缓冲区,pEncryptedBlockInfo 应 NULL。
DecryptionBlt 无法写入子矩形。
Direct3D 运行时验证由 SrcSubResourceIndexD3DDDIARG_DECRYPTIONBLT 成员指定的源图面是否位于系统内存中,并且不会执行拉伸、颜色空间转换等。 应用程序应确保系统内存缓冲区正确对齐,并且缓冲区的大小与目标图面匹配。 驱动程序应验证内存对齐方式和缓冲区大小(SrcResourceSize D3DDDIARG_DECRYPTIONBLT 成员),如果这些条件不正确,则失败。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 7作系统开始,支持 DecryptionBlt。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |