Dela via


Hantera skyddat innehåll i programmet

[Windows Media DRM-funktionen är inaktuell och bör inte användas. Använd Microsoft PlayReady- i stället.]

Ett program måste ha ett överföringscertifikat för att kunna hantera DRM-skyddat innehåll. Information om var du hämtar det här certifikatet finns i Tools for Development. Om du vill hantera oskyddat innehåll kan du använda ett dummycertifikat enligt beskrivningen i Autentisera programmet.

Innan du använder en enhet bör programmet avgöra om enheten stöder Windows Media DRM 10 för bärbara enheter, och i så fall att DRM-komponenterna är aktuella. (Aktuell innebär att den säkra klockan är korrekt och att enheten har individualiserats korrekt.) Om enheten inte stöder den här versionen av DRM, eller om den inte kan uppdateras, kan du fortfarande skicka filer till enheten, men de kanske inte kan spelas upp, beroende på licensversionen.

Not

Individualisering av enheter stöds inte för närvarande.

 

Om ditt program länkar till SDK-metoder för Windows Media Format måste det länka till Windows Media Format-biblioteket WMStubDRM.lib. Mer information om hur du anropar Windows Media Format-metoder på DRM-skyddat innehåll finns i "Aktivera DRM-stöd" i Windows Media Format SDK-dokumentationen. Observera att det är problem med att länka till både Mssachlp.lib och WMStubDRM.lib. Detta beskrivs i KB-artikel 890079 på MSDN.

Följande C++-kodexempel avgör om en enhet är en Windows Media DRM 10-enhet och i så fall att klockan är uppdaterad.

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

Om enheten stöder Windows Media DRM 10 för bärbara enheter och behöver uppdateras (det vill säga om värdet för status i föregående exempel inte bara är WMDM_DEVICE_ISWMDRM), bör programmet anropa IWMDRMDeviceApp::AcquireDeviceData och skicka värdet för status för att utföra nödvändiga uppdateringar. Skrivbordsdatorn måste vara ansluten till Internet.

Följande C++-exempelfunktion försöker uppdatera en DRM-enhet.

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

Skapa ett Windows Media Device Manager-program

hantering av skyddat innehåll