Compartir a través de


Control del contenido protegido en la aplicación

[La característica DRM de Windows Media está en desuso y no debe usarse. Use Microsoft PlayReady en su lugar.]

Una aplicación debe tener un certificado de transferencia para poder controlar el contenido protegido por DRM. Para obtener información sobre dónde obtener este certificado, consulte Herramientas para el desarrollo. Para controlar el contenido desprotegido, puede usar un certificado ficticio como se describe en Autenticación de la aplicación.

Antes de usar un dispositivo, la aplicación debe determinar si el dispositivo admite DRM 10 de Windows Media para dispositivos portátiles y, si es así, que los componentes DRM están actualizados. (Current significa que el reloj seguro es correcto y que el dispositivo se ha individualizado correctamente). Si el dispositivo no admite esta versión de DRM o si no se puede actualizar, todavía puede enviar archivos al dispositivo, pero es posible que no se puedan reproducir, dependiendo de la versión de licencia.

Nota

Actualmente no se admite la individualización de dispositivos.

 

Si la aplicación se vinculará a los métodos del SDK de Windows Media Format, tendrá que vincular a la biblioteca wmStubDRM.lib de Windows Media Format. Para obtener más información sobre cómo llamar a métodos de Windows Media Format en contenido protegido con DRM, vea "Habilitar compatibilidad con DRM" en la documentación del SDK de Windows Media Format. Tenga en cuenta que hay un problema con la vinculación a Mssachlp.lib y WMStubDRM.lib. Esto se trata en el artículo de KB 890079 en MSDN.

El siguiente ejemplo de código de C++ determina si un dispositivo es un dispositivo DRM 10 de Windows Media y, si es así, que su reloj está actualizado.

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

Si el dispositivo admite DRM 10 de Windows Media para dispositivos portátiles y debe actualizarse (es decir, si el valor del estado en el ejemplo anterior no es simplemente WMDM_DEVICE_ISWMDRM), la aplicación debe llamar a IWMDRMDeviceApp::AcquireDeviceData y pasar el valor de estado para realizar las actualizaciones necesarias. El equipo de escritorio debe estar conectado a Internet.

La siguiente función de ejemplo de C++ intenta actualizar un dispositivo DRM.

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

Creación de una aplicación de Administrador de dispositivos de Windows Media

Control del contenido protegido