Partilhar via


Protegendo arquivos com DRM versão 1

[A funcionalidade associada a esta página, Windows Media Format 11 SDK, é uma funcionalidade herdada. Foi substituído por Source Reader e Sink Writer. Source Reader e Sink Writer foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize do Leitor de Origem e do Gravador de Separadores em vez de SDK do Windows Media Format 11, sempre que 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, é gerada uma licença DRM versão 1 que é válida apenas na máquina a partir da qual a solicitação de licença foi feita. Como nenhuma chave ou semente de chave é definida, não há como gerar licenças portáteis para conteúdo protegido usando essa técnica. No entanto, ao usar o Windows Media Format SDK 7.1 ou posterior, as licenças são recuperáveis no serviço de migração de licenças da Microsoft.

Para proteger arquivos ASF usando 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 usar chamando IWMWriter::SetProfile ou IWMWriter::SetProfileByID. Você deve configurar um perfil no software antes de definir quaisquer atributos de DRM. O DRM é suportado apenas para perfis que utilizam os codecs Windows Media Audio ou Windows Media Video.

  4. Usando o método de IWMHeaderInfo::SetAttribute , defina as propriedades de DRM seguintes. 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 aceder ao conteúdo. 150 é o nível recomendado para o conteúdo DRM versão 1.

    Atributo Valor
    Use_DRM VERDADEIRO
    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 versão 1 e definir as propriedades do DRM. A verificação de erros foi omitida para fins de clarificação.

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