Compartir a través de


Método ID3D11VideoContext::D ecryptionBlt (d3d11.h)

Escribe datos cifrados en una superficie protegida.

Sintaxis

void DecryptionBlt(
  [in] ID3D11CryptoSession        *pCryptoSession,
  [in] ID3D11Texture2D            *pSrcSurface,
  [in] ID3D11Texture2D            *pDstSurface,
  [in] D3D11_ENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
  [in] UINT                       ContentKeySize,
  [in] const void                 *pContentKey,
  [in] UINT                       IVSize,
  [in] void                       *pIV
);

Parámetros

[in] pCryptoSession

Puntero a la interfaz ID3D11CryptoSession .

[in] pSrcSurface

Puntero a la superficie que contiene los datos de origen.

[in] pDstSurface

Puntero a la superficie protegida donde se escriben los datos cifrados.

[in] pEncryptedBlockInfo

Puntero a una estructura D3D11_ENCRYPTED_BLOCK_INFO o NULL.

Si el controlador admite búferes parcialmente cifrados, pEncryptedBlockInfo indica qué partes del búfer se cifran. Si toda la superficie está cifrada, establezca este parámetro en NULL.

Para comprobar si el controlador admite búferes parcialmente cifrados, llame a ID3D11VideoDevice::GetContentProtectionCaps y compruebe la marca de funcionalidades de D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION . Si el controlador no admite búferes parcialmente cifrados, establezca este parámetro en NULL.

[in] ContentKeySize

Tamaño de la clave de contenido cifrada, en bytes.

[in] pContentKey

Puntero a un búfer que contiene una clave de cifrado de contenido o NULL. Para consultar si el controlador admite el uso de claves de contenido, llame a ID3D11VideoDevice::GetContentProtectionCaps y compruebe la marca de funcionalidades de D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY .

Si el controlador admite claves de contenido, use la clave de contenido para cifrar la superficie. Cifre la clave de contenido mediante la clave de sesión y coloque el texto cifrado resultante en pContentKey. Si el controlador no admite claves de contenido, use la clave de sesión para cifrar la superficie y establecer pContentKey en NULL.

[in] IVSize

Tamaño del búfer pIV , en bytes.

[in] pIV

Puntero a un búfer que contiene el vector de inicialización (IV).

Para el cifrado AES-CTR de 128 bits, pIV apunta a una estructura de D3D11_AES_CTR_IV . El autor de la llamada asigna la estructura y genera el IV. Al generar el primer IV, inicialice la estructura en un número aleatorio. Para cada IV posterior, simplemente incremente el miembro IV de la estructura, asegurándose de que el valor siempre aumenta. Este procedimiento permite al controlador validar que el mismo IV nunca se usa más de una vez con el mismo par de claves.

En el caso de otros tipos de cifrado, se podría usar una estructura diferente o el cifrado podría no usar un iv.

Valor devuelto

Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.

Comentarios

No todos los controladores o hardware admiten esta funcionalidad para todos los tipos criptográficos. Solo se puede llamar a esta función cuando se notifica el límite de D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT .

Este método no admite la escritura en subctángulos de la superficie.

Si el hardware y el controlador admiten una clave de contenido:

  • El autor de la llamada cifra los datos mediante la clave de contenido.
  • El autor de la llamada cifra la clave de contenido mediante la clave de sesión.
  • La clave de contenido cifrada se pasa al controlador.
De lo contrario, el autor de la llamada cifra los datos mediante la clave de sesión y NULL se pasa como clave de contenido.

Si el controlador y el hardware admiten búferes parcialmente cifrados, pEncryptedBlockInfo indica qué partes del búfer se cifran y cuáles no. Si se cifra todo el búfer, pEncryptedBlockinfo debe ser NULL.

El D3D11_ENCRYPTED_BLOCK_INFO permite a la aplicación indicar qué bytes del búfer están cifrados. Esto se especifica en bytes, por lo que la aplicación debe asegurarse de que los bloques cifrados coincidan con la alineación del bloque criptográfico de la GPU.

Esta función no respeta un predicado D3D11 que se puede haber establecido.

Si la aplicación usa consultas D3D11, es posible que esta función no se tenga en cuenta con D3D11_QUERY_EVENT y D3D11_QUERY_TIMESTAMP cuando se usan niveles de características inferiores a 11. D3D11_QUERY_PIPELINE_STATISTICS no incluirá esta función para ningún nivel de característica.

Requisitos

   
Cliente mínimo compatible Windows 8 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2012 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado d3d11.h

Consulte también

ID3D11VideoContext