Compartir a través de


Control de eventos de adquisición de licencias

[La característica asociada a esta página, WINDOWS Media Format 11 SDK, es una característica heredada. Se ha reemplazado por lector de origen y escritor receptor. Lector de origen y escritor receptor se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use lector fuente y escritor receptor en lugar del SDK de Windows Media Format 11, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Una aplicación lector habilitada para DRM, en su método de devolución de llamada IWMStatusCallback::OnStatus , controla los cuatro eventos siguientes relacionados con el proceso de adquisición de licencias:

  • WMT_LICENSEURL_SIGNATURE_STATE
  • WMT_NO_RIGHTS
  • WMT_NO_RIGHTS_EX
  • WMT_ACQUIRE_LICENSE

WMT_LICENSEURL_SIGNATURE_STATE

Cuando el componente DRM detecta el contenido protegido por drm versión 7, primero busca una licencia válida en el sistema local. Si no existe ninguno, evalúa la dirección URL de adquisición de licencias en el encabezado DRM del archivo y envía un evento de WMT_LICENSEURL_SIGNATURE_STATE con pValue establecido en uno de los valores de WMT_DRMLA_TRUST , lo que indica si la dirección URL es de confianza, no es de confianza o se ha alterado. Si la dirección URL no es de confianza, la aplicación debe advertir al usuario. Si la dirección URL se ha alterado, el archivo debe considerarse dañado y la aplicación no debe navegar a la dirección URL sin emitir una advertencia fuerte al usuario.

WMT_NO_RIGHTS

El evento WMT_NO_RIGHTS solo se envía para contenido drm versión 1, lo que significa que la licencia debe adquirirse de forma no silenciosa. En otras palabras, el usuario debe navegar a una página web para adquirir una licencia. La dirección URL de la página se recupera como una cadena terminada en null de caracteres anchos del parámetro pValue en el método OnStatus .

Si procede, una aplicación puede facilitar al usuario navegar a la página web, ya sea abriendo Internet Explorer en un proceso independiente o hospedando el control Explorador web. Sin embargo, esto no es necesario. Al menos, una aplicación podría simplemente mostrar la dirección URL al usuario en un cuadro de mensaje y pedirle que la pegue en la barra de direcciones de Internet Explorer. En el ejemplo audioplayer se muestra el control adecuado del evento WMT_NO_RIGHTS , incluido cómo dar formato a la cadena de dirección URL y cómo usar el método CreateProcess para abrir Internet Explorer y navegar a la dirección URL especificada.

Dado que la aplicación no tiene forma de saber cuándo se ha adquirido una licencia drm versión 1, es el usuario el que intenta volver a abrir el archivo después de adquirir la licencia.

Este mismo proceso de adquisición de licencias no silenciosa también se puede usar para las licencias de la versión 7, pero en este caso la aplicación puede llamar primero a IWMDRMReader::MonitorLicenseAcquisition. Este método hará que el almacén de licencias local se compruebe repetidamente hasta que se encuentre la licencia del nuevo archivo. En ese momento, la aplicación recibirá un evento WMT_ACQUIRE_LICENSE . Para todas las licencias de la versión 7, se recomienda que las aplicaciones proporcionen a los usuarios la opción de obtener licencias de forma silenciosa o no silenciosa.

WMT_NO_RIGHTS_EX

El evento WMT_NO_RIGHTS_EX indica que el contenido está protegido por drm versión 7 y, por lo tanto, el proceso de adquisición de licencias puede continuar de forma silenciosa o no silenciosa. En general, la adquisición silenciosa de licencias es más cómoda para los usuarios finales, aunque algunas personas prefieren adquirir todas las licencias de forma no silenciosa. Cuando la adquisición de licencias requiere que el usuario envíe información personal o de pago, el proceso siempre debe realizarse de forma no silenciosa. La adquisición de licencias no silenciosas se describe anteriormente en el encabezado WMT_NO_RIGHTS . La adquisición silenciosa continúa de la siguiente manera:

  1. Convierta el parámetro pValue en una estructura de WM_GET_LICENSE_DATA y almacene la estructura en caso de que sea necesario más adelante para la adquisición de licencias no silenciosa.
  2. Llame a QueryInterface en el objeto lector para obtener la interfaz IWMDRMReader .
  3. Llame a IWMDRMReader::AcquireLicense y especifique 0x1 en el parámetro dwFlags para indicar la adquisición silenciosa del idioma. Se trata de una llamada asincrónica que devuelve inmediatamente.
  4. Espere al evento WMT_ACQUIRE_LICENSE .

WMT_ACQUIRE_LICENSE

El evento WMT_ACQUIRE_LICENSE se envía una vez completado el proceso de adquisición de licencias para una licencia drm versión 7. IWMDRMReader::AcquireLicense hace que este evento se envíe para la adquisición silenciosa y MonitorLicenseAcquisition hace que se envíe para la adquisición no silenciosa. En el controlador de eventos, convierta pValue en un puntero a una estructura de WM_GET_LICENSE_DATA y examine el miembro hr para determinar si la licencia se adquirió correctamente. Si hr es igual a NS_E_DRM_NO_RIGHTS, indica que la licencia debe adquirirse de forma no silenciosa. Las aplicaciones deben permitir a los usuarios cancelar el proceso de adquisición de licencias en cualquier momento. Esto se hace llamando a IWMDRMReader::CancelLicenseAcquisition. Al llamar a este método, se enviará un evento WMT_ACQUIRE_LICENSE con un valor HRESULT de NS_S_DRM_ACQUIRE_CANCELLED.

Si hr es igual a NS_S_DRM_LICENSE_ACQUIRED, se ha adquirido la licencia y la aplicación puede intentar reproducir el archivo, o copiarlo en un dispositivo o realizar cualquier acción para la que haya solicitado derechos.

En Windows XP, se introdujo un nuevo código de error: NS_E_DRM_LICENSE_NOTACQUIRED. Este código de error se genera siempre que los componentes en tiempo de ejecución de Windows Media Format en Windows XP no adquieran una licencia durante la adquisición silenciosa o no silenciosa de licencias. En otras plataformas, NS_E_DRM_LICENSE_STORE_ERROR normalmente se devuelve cuando se produce un error en la adquisición de licencias. El nuevo código de error está pensado para distinguir el error de adquisición de licencias de otras condiciones de error en las que se genera NS_E_DRM_LICENSE_STORE_ERROR.

La manera recomendada de controlar estos errores cuando se devuelven después de un intento silencioso de adquisición de licencias se muestra en el siguiente fragmento de código:

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

Nota

DRM no es compatible con la versión basada en x64 de este SDK.

 

Leer archivos protegidos