Compartilhar via


Protegendo arquivos com DRM versão 1

[O recurso associado a esta página, Windows Media Format 11 SDK, é um recurso herdado. Ele foi substituído por Leitor de Origem e Gravador de Coletor. O Leitor de Origem e o Gravador de Coletor foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o Leitor de Origem e o Gravador de Coletor em vez do SDK do Windows Media Format 11, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Quando esse tipo de proteção é aplicado, uma licença drm versão 1 é gerada que é válida somente no computador do qual a solicitação de licença foi feita. Como nenhuma chave ou semente de chave está definida, não há como gerar licenças portáteis para o conteúdo protegido usando essa técnica. No entanto, ao usar o SDK de Formato de Mídia do Windows 7.1 ou posterior, as licenças podem ser recuperadas no serviço de Migração de Licenças da Microsoft.

Para proteger arquivos ASF usando o DRM versão 1, execute as seguintes etapas:

  1. Vincule o arquivo WMStubDRM.lib ao seu projeto e, se necessário, desvincule wmvcore.lib.

  2. Chame a função WMCreateWriter para criar o gravador. O primeiro argumento é reservado e deve ser definido como NULL.

  3. Defina um perfil para o gravador a ser usado chamando IWMWriter::SetProfile ou IWMWriter::SetProfileByID. Você deve definir um perfil no gravador antes de definir quaisquer atributos DRM. O DRM tem suporte apenas para perfis que usam os codecs de Áudio do Windows Media ou Vídeo do Windows Media.

  4. Usando o método IWMHeaderInfo::SetAttribute , defina as seguintes propriedades drm. A propriedade Use_DRM instrui os componentes DRM a proteger o conteúdo usando o DRM versão 1. A propriedade DRM_Flags especifica os direitos a serem incluídos na licença local que será criada para o conteúdo. O valor DRM_LEVEL também é armazenado na licença; especifica o nível mínimo necessário para acessar o conteúdo. 150 é o nível recomendado para conteúdo drm versão 1.

    Atributo Valor
    Use_DRM TRUE
    DRM_Flags WMT_RIGHT_PLAYBACK | WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE | WMT_RIGHT_COPY_TO_CD
    DRM_LEVEL 150

     

O código de exemplo a seguir mostra como criar um gravador habilitado para DRM para DRM versão 1 e definir as propriedades drm. A verificação de erros foi omitida para esclarecer.

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