PFND3DDDI_ENCRYPTIONBLT回调函数 (d3dumddi.h)
EncryptionBlt 函数从受保护的图面读取加密数据。
语法
PFND3DDDI_ENCRYPTIONBLT Pfnd3dddiEncryptionblt;
HRESULT Pfnd3dddiEncryptionblt(
HANDLE hDevice,
const D3DDDIARG_ENCRYPTIONBLT *unnamedParam2
)
{...}
参数
hDevice
显示设备的句柄 (图形上下文) 。
unnamedParam2
pData [in]
指向 D3DDDIARG_ENCRYPTIONBLT 结构的指针,该结构描述加密位块传输 (bitblt) 操作的参数。
返回值
EncryptionBlt 返回以下值之一:
返回代码 | 说明 |
---|---|
S_OK | 已成功执行加密的 bitblt 操作。 |
E_OUTOFMEMORY | EncryptionBlt 无法分配完成所需的内存。 |
D3DDDIERR_NOTAVAILABLE | 驱动程序不支持 EncryptionBlt 函数。 |
注解
硬件和驱动程序可以选择性地支持 EncryptionBlt。 某些硬件可能还需要使用单独的密钥来解密读回的数据。 驱动程序在 pIV 成员 D3DDDIARG_ENCRYPTIONBLT 指向的内存块中返回此密钥。
如果驱动程序和硬件对加密 bitblt 使用单独的密钥,则应用程序必须识别此事实并使用密钥。
如果加密类型为D3DCRYPTOTYPE_AES128_CTR, 则 pIV 指向应用程序分配的D3DAES_CTR_IV结构。 但是,D3DAES_CTR_IV结构的实际内容由驱动程序和硬件填充。 当驱动程序和硬件生成第一个初始化向量时,它们应将D3DAES_CTR_IV结构的 IV 成员初始化为) 不太大的随机数 (。 每个后续初始化向量应仅递增 IV 成员,这可确保 IV 始终增加值。 此事实使应用程序能够验证同一密钥对永远不会多次使用同一 IV 。
EncryptionBlt 无法读回子矩形。 EncryptionBlt 也不能读回部分加密的缓冲区,因为许多基于硬件的解决方案不允许从受保护的内存进行非加密读取。
Direct3D 运行时验证D3DDDIARG_ENCRYPTIONBLT的 DstSubResourceIndex 成员指定的目标图面是否在系统内存中,并且未执行拉伸、颜色空间转换等。 应用程序应确保系统内存缓冲区正确对齐,并且缓冲区的大小与源图面匹配。 驱动程序应验证内存对齐和缓冲区大小 (DstResourceSize 成员D3DDDIARG_ENCRYPTIONBLT) ,如果这些条件不正确,则失败。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从 Windows 7 操作系统开始支持 EncryptionBlt。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |