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

Grava dados criptografados em uma superfície protegida.

Sintaxe

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

Um ponteiro para a interface ID3D11CryptoSession .

[in] pSrcSurface

Um ponteiro para a superfície que contém os dados de origem.

[in] pDstSurface

Um ponteiro para a superfície protegida em que os dados criptografados são gravados.

[in] pEncryptedBlockInfo

Um ponteiro para uma estrutura D3D11_ENCRYPTED_BLOCK_INFO ou NULL.

Se o driver der suporte a buffers parcialmente criptografados, pEncryptedBlockInfo indicará quais partes do buffer serão criptografadas. Se toda a superfície for criptografada, defina esse parâmetro como NULL.

Para marcar se o driver dá suporte a buffers parcialmente criptografados, chame ID3D11VideoDevice::GetContentProtectionCaps e marcar para o sinalizador de recursos D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION. Se o driver não der suporte a buffers parcialmente criptografados, defina esse parâmetro como NULL.

[in] ContentKeySize

O tamanho da chave de conteúdo criptografada, em bytes.

[in] pContentKey

Um ponteiro para um buffer que contém uma chave de criptografia de conteúdo ou NULL. Para consultar se o driver dá suporte ao uso de chaves de conteúdo, chame ID3D11VideoDevice::GetContentProtectionCaps e marcar para o sinalizador de recursos D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY.

Se o driver der suporte a chaves de conteúdo, use a chave de conteúdo para criptografar a superfície. Criptografe a chave de conteúdo usando a chave de sessão e coloque o texto de codificação resultante em pContentKey. Se o driver não der suporte a chaves de conteúdo, use a chave de sessão para criptografar a superfície e defina pContentKey como NULL.

[in] IVSize

O tamanho do buffer pIV , em bytes.

[in] pIV

Um ponteiro para um buffer que contém o IV (vetor de inicialização).

Para criptografia AES-CTR de 128 bits, o pIV aponta para uma estrutura de D3D11_AES_CTR_IV . O chamador aloca a estrutura e gera o IV. Ao gerar o primeiro IV, inicialize a estrutura para um número aleatório. Para cada IV subsequente, basta incrementar o membro IV da estrutura, garantindo que o valor sempre aumente. Esse procedimento permite que o driver valide se o mesmo IV nunca é usado mais de uma vez com o mesmo par de chaves.

Para outros tipos de criptografia, uma estrutura diferente pode ser usada ou a criptografia pode não usar um IV.

Retornar valor

Se o método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

Nem todos os drivers ou hardware dão suporte a essa funcionalidade para todos os tipos criptográficos. Essa função só pode ser chamada quando o limite de D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT é relatado.

Esse método não dá suporte à gravação em sub-retângulos da superfície.

Se o hardware e o driver derem suporte a uma chave de conteúdo:

  • Os dados são criptografados pelo chamador usando a chave de conteúdo.
  • A chave de conteúdo é criptografada pelo chamador usando a chave de sessão.
  • A chave de conteúdo criptografada é passada para o driver.
Caso contrário, os dados são criptografados pelo chamador usando a chave de sessão e NULL é passado como a chave de conteúdo.

Se o driver e o hardware derem suporte a buffers parcialmente criptografados, pEncryptedBlockInfo indicará quais partes do buffer são criptografadas e quais não são. Se todo o buffer for criptografado, pEncryptedBlockinfo deverá ser NULL.

O D3D11_ENCRYPTED_BLOCK_INFO permite que o aplicativo indique quais bytes no buffer são criptografados. Isso é especificado em bytes, portanto, o aplicativo deve garantir que os blocos criptografados correspondam ao alinhamento do bloco de criptografia da GPU.

Essa função não respeita um predicado D3D11 que pode ter sido definido.

Se o aplicativo usar consultas D3D11, essa função poderá não ser contabilizado com D3D11_QUERY_EVENT e D3D11_QUERY_TIMESTAMP ao usar níveis de recursos inferiores a 11. D3D11_QUERY_PIPELINE_STATISTICS não incluirá essa função para nenhum nível de recurso.

Requisitos

   
Cliente mínimo com suporte Windows 8 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho d3d11.h

Confira também

ID3D11VideoContext