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 :
- Appelez IDirect3DCryptoSession9 ::GetSurfacePitch pour obtenir la foulée de la surface protégée.
- Appelez la méthode GetContentProtectionCaps pour obtenir la valeur des membres BufferAlignmentStart et BlockAlignmentSize dans la structure D3DCONTENTPROTECTIONCAPS .
- 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.
- Ajoutez un remplissage pour prendre en charge les valeurs de BufferAlignmentStart et BlockAlignmentSize.
- Allouez une mémoire tampon dans la mémoire système, dont la taille est égale à SysMemSize (y compris le remplissage).
- 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.
- 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).
- 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.
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 |