PFND3DDDI_ENCRYPTIONBLT回调函数 (d3dumddi.h)

EncryptionBlt 函数从受保护的图面读取加密数据。

语法

PFND3DDDI_ENCRYPTIONBLT Pfnd3dddiEncryptionblt;

HRESULT Pfnd3dddiEncryptionblt(
  HANDLE hDevice,
  const D3DDDIARG_ENCRYPTIONBLT *unnamedParam2
)
{...}

参数

hDevice

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

unnamedParam2

pData [in]

指向描述加密位块传输(bitblt)作参数的 D3DDDIARG_ENCRYPTIONBLT 结构的指针。

返回值

EncryptionBlt 返回以下值之一:

返回代码 描述
S_OK 已成功执行加密的 bitblt作。
E_OUTOFMEMORY EncryptionBlt 无法为其分配完成所需的内存。
D3DDDIERR_NOTAVAILABLE 驱动程序不支持 EncryptionBlt 函数。

言论

硬件和驱动程序可以选择支持 EncryptionBlt。 某些硬件可能还需要使用单独的密钥来解密读回的数据。 驱动程序在 pIVD3DDDIARG_ENCRYPTIONBLT 成员指向的内存块中返回此密钥。

如果驱动程序和硬件对加密位使用单独的密钥,则应用程序必须识别此事实并使用密钥。

如果加密类型D3DCRYPTOTYPE_AES128_CTR,pIV 指向应用程序分配的D3DAES_CTR_IV结构。 但是,驱动程序和硬件填充了D3DAES_CTR_IV结构的实际内容。 当驱动程序和硬件生成第一个初始化向量时,它们应将 IV 成员D3DAES_CTR_IV结构的成员初始化为随机数(不是太大)。 每个后续初始化向量应只递增 IV 成员,这可确保 IV 始终增加值。 此事实使应用程序能够验证同一个 IV 是否永远不会多次与同一个密钥对一起使用。

EncryptionBlt 无法读回子矩形。 EncryptionBlt 也不能读取部分加密缓冲区,因为许多基于硬件的解决方案不允许从受保护的内存中读取非加密读取。

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

要求

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

另请参阅

D3DDDIARG_ENCRYPTIONBLT

D3DDDI_DEVICEFUNCS