PFND3DDDI_ENCRYPTIONBLT回调函数 (d3dumddi.h)

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

语法

PFND3DDDI_ENCRYPTIONBLT Pfnd3dddiEncryptionblt;

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

参数

hDevice

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

unnamedParam2

pData [in]

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

返回值

EncryptionBlt 返回以下值之一:

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

注解

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

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

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

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

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

要求

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

另请参阅

D3DDDIARG_ENCRYPTIONBLT

D3DDDI_DEVICEFUNCS