Méthode IDirect3DCryptoSession9 ::D ecryptionBlt (d3d9.h)
Écrit des données chiffrées dans une surface protégée.
Syntaxe
HRESULT DecryptionBlt(
IDirect3DSurface9 *pSrcSurface,
IDirect3DSurface9 *pDstSurface,
UINT SrcSurfaceSize,
D3DENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
VOID *pContentKey,
VOID *pIV
);
Paramètres
pSrcSurface
Pointeur vers la surface qui contient les données sources.
pDstSurface
Pointeur vers la surface protégée où les données chiffrées sont écrites.
SrcSurfaceSize
Taille de la mémoire de surface vers laquelle pSrcSurface pointe, en octets. La taille doit être alignée sur la valeur de BlockAlignmentSize dans la structure des fonctionnalités du pilote ; voir Remarques.
pEncryptedBlockInfo
Pointeur vers une structure D3DENCRYPTED_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 IDirect3DDevice9Video ::GetContentProtectionCaps et case activée pour l’indicateur de fonctionnalités de D3DCPCAPS_PARTIALDECRYPTION. Si le pilote ne prend pas en charge les mémoires tampons partiellement chiffrées, définissez ce paramètre sur NULL.
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 IDirect3DDevice9Video ::GetContentProtectionCaps et case activée pour l’indicateur de fonctionnalités D3DCPCAPS_CONTENTKEY.
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.
pIV
Pointeur vers une mémoire tampon qui contient le vecteur d’initialisation (IV).
Si le type de chiffrement est D3DCRYPTOTYPE_AES128_CTR, la mémoire tampon est une structure D3DAES_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.
Remarques
Le matériel ou les pilotes ne prennent pas tous en charge cette fonctionnalité pour tous les types de chiffrement.
La surface source doit être une surface de mémoire système créée avec les restrictions d’alignement appropriées. La mémoire tampon doit être suffisamment grande pour prendre en charge l’inclinaison et la hauteur de la surface protégée, ainsi qu’un remplissage pour prendre en charge les restrictions d’alignement de départ et la taille de transfert de bloc.
Plus précisément, vous devez allouer la surface source comme suit :
- Appelez IDirect3DCryptoSession9 ::GetSurfacePitch pour obtenir la foulée de la surface protégée.
- Appelez la méthode IDirect3DDevice9Video ::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 source. Passez le pointeur aligné sur la mémoire comme handle de ressource partagée (pSharedHandle).
Cette méthode ne prend pas en charge l’écriture dans les sous-corrections de la surface.
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 |