Control del contenido protegido en la aplicación

[La característica drm de medios de Windows 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 Windows DRM 10 multimedia 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 Windows métodos del SDK de formato multimedia, deberá vincular a la biblioteca de formato multimedia WMStubDRM.lib de Windows. Para obtener más información sobre cómo llamar a Windows métodos de formato multimedia en contenido protegido con DRM, consulte "Habilitación de la compatibilidad con DRM" en la documentación del SDK de formato multimedia de Windows. 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 Windows DRM 10 multimedia 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 Windows DRM 10 multimedia 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 multimedia de Windows

Control del contenido protegido