Share via


ID3D11VideoContext::D ecryptionBlt, méthode (d3d11.h)

Écrit des données chiffrées dans une surface protégée.

Syntaxe

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
);

Paramètres

[in] pCryptoSession

Pointeur vers l’interface ID3D11CryptoSession .

[in] pSrcSurface

Pointeur vers la surface qui contient les données sources.

[in] pDstSurface

Pointeur vers la surface protégée où les données chiffrées sont écrites.

[in] pEncryptedBlockInfo

Pointeur vers une structure D3D11_ENCRYPTED_BLOCK_INFO ou NULL.

Si le pilote prend en charge les mémoires tampons partiellement chiffrées, pEncryptedBlockInfo indique quelles parties de la mémoire tampon sont chiffrées. Si la surface entière est chiffrée, définissez ce paramètre sur NULL.

Pour case activée si le pilote prend en charge les mémoires tampons partiellement chiffrées, appelez ID3D11VideoDevice::GetContentProtectionCaps et case activée pour l’indicateur de fonctionnalités de D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION. Si le pilote ne prend pas en charge les mémoires tampons partiellement chiffrées, définissez ce paramètre sur NULL.

[in] ContentKeySize

Taille de la clé de contenu chiffrée, en octets.

[in] pContentKey

Pointeur vers une mémoire tampon qui contient une clé de chiffrement de contenu ou NULL. Pour savoir si le pilote prend en charge l’utilisation de clés de contenu, appelez ID3D11VideoDevice::GetContentProtectionCaps et case activée pour l’indicateur de fonctionnalités D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY.

Si le pilote prend en charge les clés de contenu, utilisez la clé de contenu pour chiffrer la surface. Chiffrez la clé de contenu à l’aide de la clé de session et placez le texte de chiffrement résultant dans pContentKey. Si le pilote ne prend pas en charge les clés de contenu, utilisez la clé de session pour chiffrer la surface et définissez pContentKey sur NULL.

[in] IVSize

Taille de la mémoire tampon pIV , en octets.

[in] pIV

Pointeur vers une mémoire tampon qui contient le vecteur d’initialisation (IV).

Pour le chiffrement AES-CTR 128 bits, pIV pointe vers une structure D3D11_AES_CTR_IV . L’appelant alloue la structure et génère l’IV. Lorsque vous générez le premier iv, initialisez la structure en un nombre aléatoire. Pour chaque IV suivant, incrémentez simplement le membre IV de la structure, en veillant à ce que la valeur augmente toujours. Cette procédure permet au pilote de vérifier que le même IV n’est jamais utilisé plus d’une fois avec la même paire de clés.

Pour d’autres types de chiffrement, une structure différente peut être utilisée ou le chiffrement peut ne pas utiliser d’IV.

Valeur retournée

Si cette méthode réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Notes

Le matériel ou les pilotes ne prennent pas tous en charge cette fonctionnalité pour tous les types de chiffrement. Cette fonction ne peut être appelée que lorsque la limite de D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT est signalée.

Cette méthode ne prend pas en charge l’écriture dans les sous-rectangles de la surface.

Si le matériel et le pilote prennent en charge une clé de contenu :

  • Les données sont chiffrées par l’appelant à l’aide de la clé de contenu.
  • La clé de contenu est chiffrée par l’appelant à l’aide de la clé de session.
  • La clé de contenu chiffrée est passée au pilote.
Sinon, les données sont chiffrées par l’appelant à l’aide de la clé de session et NULL est passée comme clé de contenu.

Si le pilote et le matériel prennent en charge des mémoires tampons partiellement chiffrées, pEncryptedBlockInfo indique quelles parties de la mémoire tampon sont chiffrées et lesquelles ne l’est pas. Si la mémoire tampon entière est chiffrée, pEncryptedBlockinfo doit avoir la valeur NULL.

Le D3D11_ENCRYPTED_BLOCK_INFO permet à l’application d’indiquer quels octets de la mémoire tampon sont chiffrés. Comme cela est spécifié en octets, l’application doit s’assurer que les blocs chiffrés correspondent à l’alignement des blocs de chiffrement du GPU.

Cette fonction n’honore pas un prédicat D3D11 qui a peut-être été défini.

Si l’application utilise des requêtes D3D11, cette fonction peut ne pas être prise en compte avec D3D11_QUERY_EVENT et D3D11_QUERY_TIMESTAMP lors de l’utilisation de niveaux de fonctionnalités inférieurs à 11. D3D11_QUERY_PIPELINE_STATISTICS n’incluez pas cette fonction pour n’importe quel niveau de fonctionnalité.

Configuration requise

   
Client minimal pris en charge Windows 8 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête d3d11.h

Voir aussi

ID3D11VideoContext