Protección de archivos con DRM versión 1
[La característica asociada a esta página, SDK de Windows Media Format 11, es una característica heredada. Se ha reemplazado por lector de origen y escritor receptor. El lector de origen y el sistema de escritura receptor se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use lector de origen 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.
Cuando se aplica este tipo de protección, se genera una licencia drm versión 1 que solo es válida en el equipo desde el que se realizó la solicitud de licencia. Dado que no se establece ninguna clave o inicialización de clave, no hay ninguna manera de generar licencias portátiles para el contenido protegido mediante esta técnica. Sin embargo, cuando se usa windows Media Format SDK 7.1 o posterior, las licencias se pueden recuperar en el servicio de migración de licencias de Microsoft.
Para proteger los archivos ASF mediante DRM versión 1, realice los pasos siguientes:
Vincule el archivo WMStubDRM.lib al proyecto y, si es necesario, desvincule wmvcore.lib.
Llame a la función WMCreateWriter para crear el escritor. El primer argumento está reservado y debe establecerse en NULL.
Establezca un perfil para que el escritor lo use llamando a IWMWriter::SetProfile o IWMWriter::SetProfileByID. Debe establecer un perfil en el escritor antes de establecer los atributos DRM. DRM solo se admite para perfiles que usan los códecs De audio de Windows Media o Vídeo de Windows Media.
Con el método IWMHeaderInfo::SetAttribute , establezca las siguientes propiedades DRM. La propiedad Use_DRM indica a los componentes drm que protejan el contenido mediante DRM versión 1. La propiedad DRM_Flags especifica los derechos que se incluirán en la licencia local que se creará para el contenido. El valor de DRM_LEVEL también se almacena en la licencia; especifica el nivel mínimo necesario para acceder al contenido. 150 es el nivel recomendado para el contenido de DRM versión 1.
Atributo Value Use_DRM TRUE DRM_Flags WMT_RIGHT_PLAYBACK | WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE | WMT_RIGHT_COPY_TO_CD DRM_LEVEL 150
En el código de ejemplo siguiente se muestra cómo crear un escritor habilitado para DRM para DRM versión 1 y establecer las propiedades drm. Se ha omitido la comprobación de errores por motivos de aclaración.
BOOL fUseDRM = TRUE;
// These are the rights we will apply to the file. See WMT_RIGHTS for
// the full set of possible rights.
DWORD dwDRMFlags = WMT_RIGHT_PLAYBACK |
WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE |
WMT_RIGHT_COPY_TO_CD;
// Set the minimum required DRM level low enough
// to allow older players to access the content.
DWORD dwDRMLevel = 150;
IWMDRMWriter* pWMDRMWriter = NULL;
HRESULT hr = S_OK;
// Initialize COM.
hr = CoInitialize(NULL);
// Create a writer object.
hr = WMCreateWriter( NULL, &pWMDRMWriter);
// Obtain the IWMHeaderInfo interface.
hr = pWMDRMWriter -> QueryInterface(IID_IWMHeaderInfo,
(void**) &pWMHeaderInfo);
// Tell the SDK runtime to protect the file using DRM version 1.
hr= pWMHeaderInfo-> SetAttribute(0,
g_wszWMUse_DRM,
WMT_TYPE_BOOL,
(BYTE*)&fUseDRM,
sizeof(BOOL));
// Specify the rights that will be stored in the local license that is
// created automatically for the content.
hr= pWMHeaderInfo->SetAttribute( 0,
g_wszWMDRM_Flags,
WMT_TYPE_DWORD,
(BYTE *)&dwDRMFlags,
sizeof(DWORD) );
// Set the DRM_Level attribute in the file's DRM header.
hr= pWMHeaderInfo->SetAttribute( 0,
g_wszWMDRM_Level,
WMT_TYPE_DWORD,
(BYTE *)&dwDRMLevel,
sizeof(DWORD) );