Freigeben über


Behandeln von Lizenzerwerbsereignissen

[Das dieser Seite zugeordnete Feature Windows Media Format 11 SDK ist ein Legacyfeature. Es wurde von Source Reader und Sink Writer abgelöst. Source Reader und Sink Writer wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit quellleser und Senkenschreiber anstelle des Windows Media Format 11 SDK verwendet. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Eine DRM-fähige Leseranwendung verarbeitet in ihrer IWMStatusCallback::OnStatus-Rückrufmethode die folgenden vier Ereignisse im Zusammenhang mit dem Lizenzerwerbsprozess:

  • WMT_LICENSEURL_SIGNATURE_STATE
  • WMT_NO_RIGHTS
  • WMT_NO_RIGHTS_EX
  • WMT_ACQUIRE_LICENSE

WMT_LICENSEURL_SIGNATURE_STATE

Wenn die DRM-Komponente Inhalte erkennt, die durch DRM Version 7 geschützt sind, sucht sie zunächst nach einer gültigen Lizenz auf dem lokalen System. Wenn keine vorhanden ist, wird die Lizenzerwerbs-URL im DRM-Header der Datei ausgewertet und ein WMT_LICENSEURL_SIGNATURE_STATE-Ereignis gesendet, bei dem pValue auf einen der WMT_DRMLA_TRUST-Werte festgelegt ist, was angibt, ob die URL vertrauenswürdig, nicht vertrauenswürdig ist oder manipuliert wurde. Wenn die URL nicht vertrauenswürdig ist, sollte die Anwendung den Benutzer warnen. Wenn die URL manipuliert wurde, sollte die Datei als beschädigt angesehen werden, und die Anwendung sollte nicht zur URL navigieren, ohne eine starke Warnung für den Benutzer auszuzugeben.

WMT_NO_RIGHTS

Das WMT_NO_RIGHTS-Ereignis wird nur für DRM-Inhalte der Version 1 gesendet. Dies bedeutet, dass die Lizenz nicht automatisch erworben werden muss. Anders ausgedrückt: Der Benutzer muss zu einer Webseite navigieren, um eine Lizenz zu erhalten. Die URL für die Seite wird als breitzeichenbasierte NULL-Zeichenfolge aus dem pValue-Parameter in der OnStatus-Methode abgerufen.

Bei Bedarf kann eine Anwendung es dem Benutzer erleichtern, zur Webseite zu navigieren, indem entweder das Internet Explorer in einem separaten Prozess geöffnet wird oder das Webbrowsersteuerelement gehostet wird. Dies ist jedoch nicht erforderlich. Zumindest könnte eine Anwendung die URL für den Benutzer einfach in einem Meldungsfeld anzeigen und ihn auffordern, sie in die Adressleiste von Internet Explorer einzufügen. Das Audioplayer-Beispiel veranschaulicht die ordnungsgemäße Behandlung des WMT_NO_RIGHTS-Ereignisses, einschließlich des Formatierens der URL-Zeichenfolge und der Verwendung der CreateProcess-Methode, um internet Explorer zu öffnen und zur angegebenen URL zu navigieren.

Da die Anwendung keine Möglichkeit hat, zu wissen, wann eine DRM-Version 1-Lizenz erworben wurde, muss der Benutzer versuchen, die Datei nach dem Erwerb der Lizenz erneut zu öffnen.

Dieser nicht unbeaufsichtigte Lizenzerwerbsprozess kann auch für Lizenzen der Version 7 verwendet werden, aber in diesem Fall kann die Anwendung zuerst IWMDRMReader::MonitorLicenseAcquisition aufrufen. Diese Methode bewirkt, dass der lokale Lizenzspeicher wiederholt überprüft wird, bis die Lizenz für die neue Datei gefunden wird. An diesem Punkt empfängt die Anwendung ein WMT_ACQUIRE_LICENSE-Ereignis . Für alle Lizenzen der Version 7 wird empfohlen, dass Anwendungen Benutzern die Möglichkeit bieten, Lizenzen im Hintergrund oder nicht im Hintergrund abzurufen.

WMT_NO_RIGHTS_EX

Das WMT_NO_RIGHTS_EX-Ereignis gibt an, dass der Inhalt durch DRM-Version 7 geschützt ist und daher der Lizenzerwerbsprozess entweder im Hintergrund oder nicht im Hintergrund fortgesetzt werden kann. Im Allgemeinen ist der automatische Lizenzerwerb für Endbenutzer bequemer, obwohl einige Benutzer es vorziehen, alle Lizenzen nicht im Hintergrund zu erwerben. Wenn der Lizenzerwerb erfordert, dass der Benutzer Zahlungs- oder persönliche Informationen übermittelt, sollte der Prozess immer im Hintergrund ausgeführt werden. Der nicht automatische Lizenzerwerb wird oben unter der Überschrift WMT_NO_RIGHTS beschrieben. Der Stille Erwerb ergibt sich wie folgt:

  1. Wandeln Sie den pValue-Parameter in eine WM_GET_LICENSE_DATA-Struktur um, und speichern Sie die Struktur, falls sie später für den nicht automatischen Lizenzerwerb benötigt wird.
  2. Rufen Sie QueryInterface für das Reader-Objekt auf, um die IWMDRMReader-Schnittstelle abzurufen.
  3. Rufen Sie IWMDRMReader::AcquireLicense auf, und geben Sie 0x1 im dwFlags-Parameter an, um den automatischen Spracherwerb anzugeben. Dies ist ein asynchroner Aufruf, der sofort zurückgegeben wird.
  4. Warten Sie auf das ereignis WMT_ACQUIRE_LICENSE .

WMT_ACQUIRE_LICENSE

Das WMT_ACQUIRE_LICENSE-Ereignis wird gesendet, nachdem der Lizenzerwerbsprozess für eine DRM-Version 7-Lizenz abgeschlossen ist. IWMDRMReader::AcquireLicense bewirkt, dass dieses Ereignis für die automatische Erfassung gesendet wird, und MonitorLicenseAcquisition bewirkt, dass es für den nicht automatischen Erwerb gesendet wird. Wandeln Sie in Ihrem Ereignishandler pValue in einen Zeiger auf eine WM_GET_LICENSE_DATA-Struktur um, und untersuchen Sie den hr-Member , um zu ermitteln, ob die Lizenz erfolgreich erworben wurde. Wenn hr gleich NS_E_DRM_NO_RIGHTS ist, bedeutet dies, dass die Lizenz nicht im Hintergrund erworben werden muss. Anwendungen sollten es Benutzern ermöglichen, den Lizenzerwerbsprozess jederzeit abzubrechen. Dazu rufen Sie IWMDRMReader::CancelLicenseAcquisition auf. Wenn Sie diese Methode aufrufen, wird ein WMT_ACQUIRE_LICENSE-Ereignis mit dem HRESULT-Wert NS_S_DRM_ACQUIRE_CANCELLED gesendet.

Wenn hr gleich NS_S_DRM_LICENSE_ACQUIRED ist, wurde die Lizenz erworben, und die Anwendung kann versuchen, die Datei wiederzugeben oder auf ein Gerät zu kopieren oder eine Aktion auszuführen, für die sie Rechte angefordert hat.

Unter Windows XP wurde ein neuer Fehlercode eingeführt: NS_E_DRM_LICENSE_NOTACQUIRED. Dieser Fehlercode wird immer dann generiert, wenn die Windows Media Format-Laufzeitkomponenten unter Windows XP während des automatischen oder nicht automatischen Lizenzerwerbs keine Lizenz erwerben können. Auf anderen Plattformen wird NS_E_DRM_LICENSE_STORE_ERROR in der Regel zurückgegeben, wenn der Lizenzerwerb fehlschlägt. Der neue Fehlercode soll einen Lizenzerwerbsfehler von anderen Fehlerbedingungen unterscheiden, bei denen NS_E_DRM_LICENSE_STORE_ERROR generiert wird.

Die empfohlene Möglichkeit, diese Fehler zu behandeln, wenn sie nach einem automatischen Lizenzerwerbsversuch zurückgegeben werden, wird im folgenden Codeausschnitt gezeigt:

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.
}

Hinweis

DRM wird von der x64-basierten Version dieses SDK nicht unterstützt.

 

Lesen geschützter Dateien