Fonctions et interfaces DRM
Les composants du pilote système Drmk.sys et Portcls.sys implémentent une collection de fonctions et d’interfaces DRM que les pilotes utilisent pour gérer les droits numériques du contenu audio en streaming du noyau. Le composant Drmk.sys implémente un certain nombre de fonctions DrmXxx et Portcls.sysimplémente un ensemble de fonctions PcXxx spécifiques à DRM, ainsi que les interfaces IDrmPort et IDrmPort2 .
Les fonctions DRM suivantes sont disponibles :
Fournit au système une interface de pilote composée d’une liste de fonctions pour la gestion du contenu protégé. DrmCreateContentMixed
Crée un ID de contenu DRM pour identifier un flux audio KS contenant du contenu mixte provenant de plusieurs flux d’entrée. DrmDestroyContent
Supprime un ID de contenu DRM. DrmForwardContentToDeviceObject
Authentifie un pilote et lui envoie l’ID de contenu DRM et les droits de contenu que le système a attribués à un flux contenant du contenu protégé. DrmForwardContentToFileObject
Fonction obsolète. DrmForwardContentToInterface
Authentifie un objet de pilote et lui envoie l’ID de contenu DRM et les droits de contenu que le système a attribués à un flux contenant du contenu protégé. DrmGetContentRights
Récupère les droits de contenu DRM que le système a attribués à un ID de contenu DRM. Les fonctions de cette liste sont déclarées dans le fichier d’en-tête Drmk.h. Le pilote système DRMK en mode noyau, Drmk.sys, exporte les points d’entrée pour ces fonctions.
Dans Windows XP et versions ultérieures, le pilote système PortCls, Portcls.sys, exporte un ensemble différent de points d’entrée pour le même ensemble de fonctions DRM. Les noms des fonctions PortCls sont similaires à ceux de la liste précédente, sauf qu’ils utilisent le préfixe Pc au lieu de Drm :
PcForwardContentToDeviceObject
Ces noms de fonction sont déclarés dans le fichier d’en-tête Portcls.h. Les points d’entrée dans Portcls.sys ne font rien d’autre que d’appeler les fonctions correspondantes dans Drmk.sys. Les points d’entrée PortCls sont fournis simplement pour des raisons pratiques afin qu’un pilote audio déjà connecté à Portcls.sys n’ait pas besoin de charger explicitement Drmk.sys.
Dans Windows XP et versions ultérieures, le même ensemble de fonctions est également exposé en tant que méthodes dans les interfaces IDrmPort et IDrmPort2 :
IDrmPort2::ForwardContentToDeviceObject
IDrmPort::ForwardContentToFileObject
IDrmPort::ForwardContentToInterface
Les interfaces IDrmPort et IDrmPort2 sont déclarées dans le fichier d’en-tête Portcls.h et sont implémentées dans Portcls.sys. Ces méthodes ne font rien d’autre que d’appeler les fonctions correspondantes dans Drmk.sys. Un pilote miniport obtient une référence à une interface IDrmPortx en interrogeant son pilote de port pour cette interface. L’avantage d’utiliser une interface IDrmPortx au lieu des fonctions DrmXxx ou PcXxx correspondantes est que le pilote peut utiliser cette requête pour déterminer au moment de l’exécution si la version du système d’exploitation prend en charge drm ou non. Cela simplifie la tâche d’écriture d’un seul pilote qui peut s’exécuter à la fois dans les versions plus récentes de Windows qui prennent en charge la gestion des droits numériques et dans les versions antérieures qui ne le font pas. IDrmPort2 est dérivé d’IDrmPort et fournit deux méthodes supplémentaires.
Les pilotes de port WaveCyclique et WavePci utilisent l’interface IDrmAudioStream si elle est prise en charge par le pilote miniport correspondant. Le pilote de port appelle la méthode IDrmAudioStream::SetContentId pour affecter la protection DRM au contenu numérique dans un flux audio.
La macro DEFINE_DRMRIGHTS_DEFAULT , qui est définie dans le fichier d’en-tête Drmk.h, initialise les membres d’une structure DRMRIGHTS à leurs valeurs par défaut.