Protection du contenu DDI
Cette section s’applique uniquement à Windows 7 et versions ultérieures, ainsi qu’à Windows Server 2008 R2 et versions ultérieures du système d’exploitation Windows.
Content Protection DDI est une extension de Direct3D version 9 DDI pour protéger la vidéo. Content Protection DDI se compose des points d’entrée décrits dans cette section.
Fonctions DDI de protection du contenu requises
Si la protection du contenu est implémentée dans le pilote d’affichage en mode utilisateur, le pilote doit prendre en charge les fonctions DDI de protection de contenu suivantes :
La fonction CreateAuthenticatedChannel crée un canal que le runtime Direct3D et le pilote peuvent utiliser pour définir et interroger des protections.
La fonction AuthenticatedChannelKeyExchange négocie la clé de session.
La fonction QueryAuthenticatedChannel interroge un canal authentifié pour obtenir des informations sur la fonctionnalité et l’état.
La fonction ConfigureAuthenticatedChannel définit l’état dans un canal authentifié.
La fonction DestroyAuthenticatedChannel libère des ressources pour un canal authentifié.
La fonction CreateCryptoSession crée une session de chiffrement que le runtime Direct3D utilise pour gérer une clé de session et effectuer des opérations de chiffrement dans et hors de la mémoire protégée.
La fonction CryptoSessionKeyExchange négocie la clé de session.
La fonction DestroyCryptoSession libère des ressources pour une session de chiffrement.
Fonctionnalités de protection du contenu
Le pilote d’affichage en mode utilisateur signale uniquement les fonctionnalités de protection du contenu s’il prend en charge chacune des fonctions DDI de protection de contenu requises précédentes. Les valeurs de D3DDDICAPS_TYPE suivantes sont utilisées par le runtime Direct3D pour récupérer des informations sur les fonctionnalités de protection du contenu prises en charge par le pilote d’affichage en mode utilisateur. Le runtime définit ces valeurs de D3DDDICAPS_TYPE dans le membre Type de la structure D3DDDIARG_GETCAPS vers laquelle pointe le paramètre pData de la fonction GetCaps du pilote lorsque le runtime appelle GetCaps.
D3DDDICAPS_GETCONTENTPROTECTIONCAPS
Le runtime fournit un pointeur vers une structure DDICONTENTPROTECTIONCAPS pour la combinaison de chiffrement et de décodage spécifique que le pilote doit utiliser. Le pilote retourne un pointeur vers une structure D3DCONTENTPROTECTIONCAPS remplie qui décrit les fonctionnalités de protection du contenu du pilote pour la combinaison de chiffrement et de décodage. Pour plus d’informations sur D3DCONTENTPROTECTIONCAPS, consultez la documentation du Kit de développement logiciel (SDK) DirectX.
D3DDDICAPS_GETCERTIFICATESIZE
Le pilote fournit un pointeur vers un nombre qui spécifie la taille, en octets, du certificat du pilote utilisé pour un canal ou un type de chiffrement. Le runtime Direct3D utilise ensuite cette taille pour allouer une mémoire tampon afin de contenir les informations de certificat que le runtime reçoit lorsque le runtime appelle GetCaps avec D3DDDICAPS_GETCERTIFICATE.
D3DDDICAPS_GETCERTIFICATE
Le runtime fournit un pointeur vers une structure DDICERTIFICATEINFO qui décrit le certificat que le pilote doit récupérer.
Pour un canal authentifié, le pilote utilise le certificat OPM existant, qui est un certificat X.509 signé par Microsoft.
Une application peut interroger le certificat du pilote pour déterminer les informations suivantes :
Indique si le pilote est approuvé.
Indique si le pilote est révoqué.
Clé publique du pilote. L’application utilise la clé publique du pilote pour établir une clé de session pour un canal authentifié utilisé pour l’authentification.
Un appel à GetCaps avec D3DDDICAPS_GETCERTIFICATE set échoue s’il est appelé pour le canal authentifié Direct3D 9, car ce canal ne prend pas en charge un certificat ou une authentification.
Pour une session de chiffrement, le pilote retourne son certificat pour le type de chiffrement donné. Selon le type de chiffrement et l’échange de clés utilisés, un certificat peut être utilisé ou non. Il est également possible que différents types de chiffrement utilisent différents certificats.
Fonctions DDI de protection du contenu facultatives
Le pilote peut éventuellement prendre en charge les fonctions DDI de protection de contenu suivantes :
La fonction EncryptionBlt lit les données chiffrées à partir d’une surface protégée.
La fonction GetPitch récupère le tangage d’une surface protégée.
La fonction StartSessionKeyRefresh retourne un nombre aléatoire que le décodeur/application et le pilote/matériel peuvent ensuite utiliser pour effectuer une opération OR exclusive (XOR) avec la clé de session.
La fonction FinishSessionKeyRefresh indique que toutes les mémoires tampons à partir de ce point dans le temps utiliseront la valeur de clé de session mise à jour.
La fonction GetEncryptionBltKey retourne la clé utilisée pour déchiffrer les données retournées par la fonction EncryptionBlt du pilote.
La fonction DecryptionBlt écrit des données sur une surface protégée.
Ressources protégées par le contenu
Les indicateurs de D3DDDI_RESOURCEFLAGS suivants sont utilisés par le runtime Direct3D pour le contenu protégé. Le runtime définit ces indicateurs de D3DDDI_RESOURCEFLAGS dans le membre Flags de la structure D3DDDIARG_CREATERESOURCE vers laquelle pointe le paramètre pResource de la fonction CreateResource du pilote lorsque le runtime appelle CreateResource.
RestrictedContent
La ressource peut contenir du contenu protégé. Une application peut avoir activé explicitement la protection du contenu avant la création d’une ressource par l’application. Le pilote doit s’assurer que le runtime place l’allocation de la ressource dans un pool de mémoire qui peut être protégé. Le pilote doit autoriser la création de ressources protégées verrouillables. Toutefois, le pilote doit échouer explicitement les appels à sa fonction Lock pour verrouiller ces surfaces pendant que la protection du contenu est activée.
RestrictSharedAccess
Seuls des processus spécifiques doivent être autorisés à accéder à la ressource partagée.
Le pilote doit restreindre l’accès partagé à cette ressource. Le runtime peut uniquement appeler la fonction OpenResource du pilote pour ouvrir cette ressource avec des périphériques d’affichage (hDevice) dans le processus qui a créé la ressource ou par les appareils auxquels l’accès a été explicitement accordé via le canal authentifié.