Share via


Méthode IDirect3DCryptoSession9 ::EncryptionBlt (d3d9.h)

Lit les données chiffrées à partir d’une surface protégée.

Syntaxe

HRESULT EncryptionBlt(
  IDirect3DSurface9 *pSrcSurface,
  IDirect3DSurface9 *pDstSurface,
  UINT              DstSurfaceSize,
  VOID              *pIV
);

Paramètres

pSrcSurface

Pointeur vers la surface protégée.

pDstSurface

Pointeur vers une surface qui reçoit les données chiffrées.

DstSurfaceSize

Taille de la mémoire surface vers laquelle pDstSurface pointe, en octets. La taille doit être alignée sur la valeur de BlockAlignmentSize dans la structure des fonctionnalités du pilote ; voir Remarques.

pIV

Pointeur vers une mémoire tampon qui reçoit le vecteur d’initialisation (IV). L’appelant alloue cette mémoire tampon, mais le pilote génère l’IV.

Si le type de chiffrement est D3DCRYPTOTYPE_AES128_CTR (AES-CTR 128 bits), pIV pointe vers une structure D3DAES_CTR_IV . Lorsque le pilote génère le premier IV, il initialise la structure en un nombre aléatoire. Pour chaque IV suivant, le pilote incrémente simplement le membre IV de la structure, en veillant à ce que la valeur augmente toujours. Cette procédure permet à l’application de vérifier que le même IV n’est jamais utilisé plusieurs 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.

Remarques

Si le pilote prend en charge cette méthode, il définit l’indicateur D3DCPCAPS_ENCRYPTEDREADBACK dans la structure de fonctionnalités retournée par la méthode IDirect3DDevice9Video ::GetContentProtectionCaps .

Si le pilote définit l’indicateur de fonctionnalités D3DCPCAPS_ENCRYPTEDREADBACKKEY , cela signifie qu’il utilise une clé distincte pour chiffrer les données. Pour obtenir cette clé, appelez la méthode IDirect3DCryptoSession9 ::GetEncryptionBltKey . Sinon, le pilote utilise la clé de session pour chiffrer les données.

Allouez la surface de destination (pDstSurface) comme suit :

  1. Appelez IDirect3DCryptoSession9 ::GetSurfacePitch pour obtenir la foulée de la surface protégée.
  2. Appelez la méthode GetContentProtectionCaps pour obtenir la valeur des membres BufferAlignmentStart et BlockAlignmentSize dans la structure D3DCONTENTPROTECTIONCAPS .
  3. Calculez la taille minimale de la mémoire de surface comme SysMemSize = foulée de surface protégée × hauteur de surface protégée.
  4. Ajoutez un remplissage pour prendre en charge les valeurs de BufferAlignmentStart et BlockAlignmentSize.
  5. Allouez une mémoire tampon dans la mémoire système, dont la taille est égale à SysMemSize (y compris le remplissage).
  6. Si l’adresse de la mémoire tampon système n’est pas alignée sur la valeur de BufferAlignmentStart, calculez un pointeur aligné sur la mémoire qui est un décalage par rapport au début de la mémoire tampon.
  7. Appelez IDirect3DDevice9Ex ::CreateOffscreenPlainSurfaceEx pour créer la surface de destination. Passez le pointeur aligné sur la mémoire comme handle de ressource partagée (pSharedHandle).
Cette méthode présente les limitations suivantes :
  • La méthode ne peut pas relire les sous-corrections ou les surfaces partiellement chiffrées.
  • La surface protégée doit être une surface simple hors écran ou une cible de rendu.
  • La surface de destination doit être une surface de mémoire système, créée avec l’alignement approprié, comme décrit précédemment.
  • La surface protégée ne peut pas être multi-échantillonnée.
  • La méthode ne prend pas en charge l’étirement ou la conversion colorspace.
Si vous verrouillez la surface de destination, la foulée signalée dans la structure D3DLOCKED_RECT peut ne pas correspondre à la foulée de la surface protégée. Toutefois, lorsque vous interprétez les données, utilisez toujours la foulée de la surface protégée.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau uniquement]
Plateforme cible Windows
En-tête d3d9.h

Voir aussi

Protection du contenu basée sur GPU

IDirect3DCryptoSession9