Gestion des événements d’acquisition de licences
[La fonctionnalité associée à cette page, le Kit de développement logiciel (SDK) Windows Media Format 11, est une fonctionnalité héritée. Il a été remplacé par lecteur source et enregistreur récepteur. Le lecteur source et l’enregistreur récepteur ont été optimisés pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise le lecteur source et l’enregistreur récepteur au lieu du Kit de développement logiciel (SDK) Windows Media Format 11, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]
Une application de lecture avec DRM, dans sa méthode de rappel IWMStatusCallback::OnStatus , gère les quatre événements suivants liés au processus d’acquisition de licence :
- WMT_LICENSEURL_SIGNATURE_STATE
- WMT_NO_RIGHTS
- WMT_NO_RIGHTS_EX
- WMT_ACQUIRE_LICENSE
WMT_LICENSEURL_SIGNATURE_STATE
Lorsque le composant DRM détecte du contenu protégé par DRM version 7, il recherche d’abord une licence valide sur le système local. Si aucun n’existe, il évalue ensuite l’URL d’acquisition de licence dans l’en-tête DRM du fichier et envoie un événement WMT_LICENSEURL_SIGNATURE_STATE avec pValue défini sur l’une des valeurs WMT_DRMLA_TRUST , indiquant si l’URL est approuvée, non approuvée ou a été falsifiée. Si l’URL n’est pas approuvée, l’application doit avertir l’utilisateur. Si l’URL a été falsifiée, le fichier doit être considéré comme endommagé et l’application ne doit pas accéder à l’URL sans envoyer un avertissement fort à l’utilisateur.
WMT_NO_RIGHTS
L’événement WMT_NO_RIGHTS est envoyé uniquement pour le contenu DRM version 1, ce qui signifie que la licence doit être acquise en mode non silencieux. En d’autres termes, l’utilisateur doit accéder à une page web pour acquérir une licence. L’URL de la page est récupérée sous la forme d’une chaîne null à caractères larges à partir du paramètre pValue dans la méthode OnStatus .
Si nécessaire, une application peut faciliter la navigation de l’utilisateur vers la page Web, soit en ouvrant Internet Explorer dans un processus distinct, soit en hébergeant le contrôle Navigateur web. Toutefois, cela n’est pas obligatoire. À tout le moins, une application peut simplement afficher l’URL de l’utilisateur dans une boîte de message et l’inviter à la coller dans la barre d’adresse d’Internet Explorer. L’exemple Audioplayer montre une gestion appropriée de l’événement WMT_NO_RIGHTS, notamment comment mettre en forme la chaîne d’URL et comment utiliser la méthode CreateProcess pour ouvrir Internet Explorer et accéder à l’URL spécifiée.
Étant donné que l’application n’a aucun moyen de savoir quand une licence DRM version 1 a été acquise, il incombe à l’utilisateur de tenter à nouveau d’ouvrir le fichier après l’acquisition de la licence.
Ce même processus d’acquisition de licence non silencieux peut également être utilisé pour les licences version 7, mais dans ce cas, l’application peut d’abord appeler IWMDRMReader::MonitorLicenseAcquisition. Cette méthode entraîne la vérification répétée du magasin de licences local jusqu’à ce que la licence du nouveau fichier soit trouvée. À ce stade, l’application recevra un événement WMT_ACQUIRE_LICENSE . Pour toutes les licences version 7, il est recommandé que les applications donnent aux utilisateurs la possibilité d’obtenir des licences en mode silencieux ou non.
WMT_NO_RIGHTS_EX
L’événement WMT_NO_RIGHTS_EX indique que le contenu est protégé par drm version 7. Par conséquent, le processus d’acquisition de licence peut se poursuivre en mode silencieux ou non. En général, l’acquisition de licences en mode silencieux est plus pratique pour les utilisateurs finaux, même si certaines personnes préfèrent acquérir toutes les licences de manière non silencieuse. Lorsque l’acquisition d’une licence nécessite que l’utilisateur envoie des informations personnelles ou de paiement, le processus doit toujours être effectué de manière non silencieuse. L’acquisition de licences non silencieuses est décrite ci-dessus sous le titre WMT_NO_RIGHTS . Le produit de l’acquisition en mode silencieux se présente comme suit :
- Castez le paramètre pValue en structure WM_GET_LICENSE_DATA et stockez la structure au cas où elle est nécessaire ultérieurement pour l’acquisition de licences non silencieuses.
- Appelez QueryInterface sur l’objet lecteur pour obtenir l’interface IWMDRMReader .
- Appelez IWMDRMReader::AcquireLicense et spécifiez 0x1 dans le paramètre dwFlags pour indiquer l’acquisition du langage silencieux. Il s’agit d’un appel asynchrone qui retourne immédiatement.
- Attendez l’événement WMT_ACQUIRE_LICENSE .
WMT_ACQUIRE_LICENSE
L’événement WMT_ACQUIRE_LICENSE est envoyé une fois le processus d’acquisition de licence terminé pour une licence DRM version 7. IWMDRMReader::AcquireLicense entraîne l’envoi de cet événement pour l’acquisition en mode silencieux, et MonitorLicenseAcquisition l’envoie pour une acquisition non silencieuse. Dans votre gestionnaire d’événements, castez pValue en pointeur vers une structure de WM_GET_LICENSE_DATA et examinez le membre hr pour déterminer si la licence a été acquise avec succès. Si hr est égal à NS_E_DRM_NO_RIGHTS, cela indique que la licence doit être acquise en mode non silencieux. Les applications doivent permettre aux utilisateurs d’annuler le processus d’acquisition de licences à tout moment. Pour ce faire, appelez IWMDRMReader::CancelLicenseAcquisition. L’appel de cette méthode envoie un événement WMT_ACQUIRE_LICENSE avec une valeur HRESULT de NS_S_DRM_ACQUIRE_CANCELLED.
Si hr est égal à NS_S_DRM_LICENSE_ACQUIRED, la licence a été acquise et l’application peut tenter de lire le fichier, de le copier sur un appareil ou d’effectuer l’action pour laquelle elle a demandé des droits.
Sur Windows XP, un nouveau code d’erreur a été introduit : NS_E_DRM_LICENSE_NOTACQUIRED. Ce code d’erreur est généré chaque fois que les composants d’exécution au format Windows Media sur Windows XP ne parviennent pas à acquérir une licence lors de l’acquisition de licences en mode silencieux ou non silencieux. Sur d’autres plateformes, NS_E_DRM_LICENSE_STORE_ERROR est généralement retourné lorsque l’acquisition de licence échoue. Le nouveau code d’erreur est destiné à distinguer l’échec d’acquisition de licence des autres conditions d’échec où NS_E_DRM_LICENSE_STORE_ERROR est généré.
La méthode recommandée pour gérer ces erreurs lorsqu’elles sont retournées après une tentative d’acquisition de licence silencieuse s’affiche dans l’extrait de code suivant :
if( hrStatus == NS_E_DRM_LICENSE_NOTACQUIRED ||
hrStatus == NS_E_DRM_LICENSE_STORE_ERROR )
{
// Attempt non-silent license acquisition.
}
else if( hrStatus == NS_E_DRM_NEEDS_INDIVIDUALIZATION )
{
// Individualize and then retry.
}
else if( FAILED(hrStatus) )
{
// Display a helpful error message.
}
else
{
// Success. Play content.
}
Notes
La gestion des droits numériques n’est pas prise en charge par la version x64 de ce Kit de développement logiciel (SDK).
Rubriques connexes