Behandeln geschützter Inhalte in der Anwendung
[Das Windows Media DRM-Feature ist veraltet und sollte nicht verwendet werden. Verwenden Microsoft PlayReady stattdessen .]
Eine Anwendung muss über ein Übertragungszertifikat verfügen, um DRM-geschützte Inhalte verarbeiten zu können. Informationen zum Erhalten dieses Zertifikats finden Sie unter Tools für die Entwicklung. Für die Behandlung von nicht geschütztem Inhalt können Sie ein Dummyzertifikat verwenden, wie unter Authentifizieren der Anwendung beschrieben.
Vor der Verwendung eines Geräts sollte Ihre Anwendung bestimmen, ob das Gerät Windows Media DRM 10 für portable Geräte unterstützt und ob die DRM-Komponenten aktuell sind. (Aktuell bedeutet, dass die sichere Uhr richtig ist und dass das Gerät ordnungsgemäß individualisiert wurde.) Wenn das Gerät diese Version von DRM nicht unterstützt oder nicht aktualisiert werden kann, können Sie weiterhin Dateien an das Gerät senden, aber je nach Lizenzversion sind sie möglicherweise nicht wiedersetzbar.
Hinweis
Die Individualisierung von Geräten wird derzeit nicht unterstützt.
Wenn Ihre Anwendung eine Verknüpfung mit Windows Media Format SDK-Methoden erstellt, muss sie eine Verknüpfung mit der Windows Media Format-Bibliothek WMStubDRM.lib erstellen. Weitere Informationen zum Aufrufen von Windows Media Format-Methoden für DRM-geschützte Inhalte finden Sie unter "Aktivieren der DRM-Unterstützung" in der Windows Media Format SDK-Dokumentation. Beachten Sie, dass ein Problem beim Verknüpfen sowohl mit Mssachlp.lib als auch mit WMStubDRM.lib besteht. Dies wird im KB-Artikel 890079 MSDN behandelt.
Im folgenden C++-Codebeispiel wird bestimmt, ob es sich bei einem Gerät um ein Windows Media DRM 10-Gerät handelt und ob die Uhr auf dem neuesten Stand ist.
HRESULT IsDRMClockUpToDate()
{
HRESULT hr = S_OK;
// Create the DRM handler class.
CComPtr<IWMDRMDeviceApp> pDRM;
hr = pDRM.CoCreateInstance(CLSID_WMDRMDeviceApp, 0, CLSCTX_ALL);
// Find out first if the device is a WMDRM 10 device, and if so,
// whether it requires clock updates.
DWORD status = 0;
hr = pDRM->QueryDeviceStatus(pDevice, &status);
if (FAILED(hr)
|| (!(WMDRM_DEVICE_ISWMDRM & status)) // Device is not WMDRM 10.
|| (status & WMDRM_DEVICE_REVOKED)) // Device is revoked.
{
return E_FAIL;
}
else if (status & WMDRM_DEVICE_NEEDCLOCK ||
status & WMDRM_DEVICE_REFRESHCLOCK)
{
// Attempt update. See following example.
hr = UpdateDRM(status);
}
return hr;
}
Wenn das Gerät Windows Media DRM 10 für portable Geräte unterstützt und aktualisiert werden muss (d. h., wenn der Wert des Status im vorherigen Beispiel nicht einfach WMDM DEVICE ISWMDRM ist), sollte die Anwendung _ _ IWMDRMDeviceApp::AcquireDeviceData aufrufen und den Wert des Status übergeben, um die erforderlichen Updates durchzuführen. Der Desktopcomputer muss mit dem Internet verbunden sein.
Die folgende C++-Beispielfunktion versucht, ein DRM-Gerät zu aktualisieren.
HRESULT UpdateDRM(DWORD status)
{
HRESULT hr = S_OK;
hr = pDRM->AcquireDeviceData(pDevice, this, status, &result);
if (hr != S_OK || result != 0)
{
return E_FAIL;
}
return hr;
}