Requisitos para aplicativos do Windows Media DRM-Enabled
Para criar um aplicativo habilitado para DRM (Gerenciamento de Direitos Digitais) do Windows Media, você deve ter os cabeçalhos e bibliotecas descritos na seção Requisitos Gerais para Desenvolvimento de Aplicativos deste documento. Além disso, o aplicativo precisará fornecer propriedades adicionais nas informações do cliente ao abrir o dispositivo.
As duas propriedades adicionais necessárias para habilitar transferências de conteúdo protegidas por DRM do Windows Media são descritas na tabela a seguir.
Propriedade | Descrição |
---|---|
WPD_CLIENT_WMDRM_APPLICATION_PRIVATE_KEY | Especifica a chave privada do aplicativo. |
WPD_CLIENT_WMDRM_APPLICATION_CERTIFICATE | Especifica o certificado do aplicativo. |
Essas propriedades devem ser fornecidas nas informações do cliente do aplicativo quando o dispositivo é aberto com o método IPortableDevice::Open. Quando essas propriedades são fornecidas, a API WPD permite transferências de conteúdo protegido. Se o aplicativo tiver fornecido um certificado e uma chave privada, a API criará um canal seguro para transferir conteúdo WMDRM protegido para o dispositivo.
Para obter informações sobre como criar e distribuir aplicações baseadas no Windows que suportam o Windows Media DRM, consulte "Licenciamento de aplicações baseadas no Windows".
Transferência de conteúdo
Para transferir conteúdo protegido por WMDRM, use IPortableDeviceContent::CreateObjectWithPropertiesAndData. Este método pode ser usado para conteúdo protegido e limpo sem opções adicionais. A API WPD selecionará automaticamente o canal protegido ou limpo, dependendo se o conteúdo está protegido ou limpo. Ele faz interface com o WMDRM Secure Content Provider para processar as licenças WMDRM.
Transferência de conteúdo limpo conhecido
Se você habilitou seu aplicativo para lidar com conteúdo protegido, mas sabe que um arquivo específico não está protegido, você pode dizer ao WPD para ignorar o processamento de DRM definindo WPD_API_OPTION_USE_CLEAR_DATA_STREAM opção como TRUE no IPortableDeviceValues de entrada ao chamar IPortableDeviceContent::CreateObjectWithPropertiesAndData para conteúdo claro.
Acessando operações de medição usando IWMDRMDeviceApp
WPD fornece um mecanismo para acessar o IWMDRMDeviceApp APIs para atualizações de licença e recuperação de dados de medição. Para acessar essa API por meio de WPD, chame QueryInterface no IID_IWMDRMDeviceApp do IStream retornado de IPortableDeviceContent::CreateObjectWithPropertiesAndData. Isso IWMDRMDeviceApp instância vinculada à conexão IPortableDevice ao seu dispositivo compatível com WMDRM, e não ao conteúdo específico onde o IStream foi obtido. O WPD encapsula internamente as APIs de medição e as torna acessíveis ao seu aplicativo. Seu aplicativo deve usar a constante WMDRMDEVICEAPP_USE_WPD_DEVICE_PTR para o parâmetro IWMDMDevice*.
O trecho de código a seguir demonstra isso.
IStream* pDataStream = NULL;
IWMDRMDeviceApp* pWMDRMApp = NULL;
// ... Initialization
hr = pPortableDeviceContent->CreateObjectWithPropertiesAndData(pValues,
&pDataStream,
&dwOptimalWriteBufferSize,
NULL);
// ... Transfer the protected WMDRM content
pDataStream->Write(pData, cbData, &cbWritten);
pDataStream->Commit(0);
hr = pDataStream->QueryInterface(IID_IWMDRMDeviceApp,
(void**)&pWMDRMApp);
if (SUCCEEDED(hr))
{
DWORD dwStatus = 0;
// Call metering operations on the current device using the WPD device pointer
hr = pWMDRMApp->QueryDeviceStatus((IWMDMDevice *)WMDRMDEVICEAPP_USE_WPD_DEVICE_PTR,
&dwStatus);
}
O mesmo pré-requisito com a chave privada e o certificado do aplicativo também se aplica aqui. Se a chave/certificado for inválido ou se o sistema WMDRM falhar ao inicializar, a chamada QueryInferface falhará.
O método acima para adquirir o interface de IWMDRMDeviceApp do ponteiro IStream é apenas uma conveniência se seu aplicativo já estiver fazendo uma transferência de conteúdo protegida anterior, antes de prosseguir para fazer operações de medição e sincronização de licenças.
Nossa recomendação para a maioria dos aplicativos que precisam acessar IWMDRMDeviceApp é inicializar IWMDRMDeviceApp diretamente, pois isso não exige que seu aplicativo transfira conteúdo protegido ou mantenha as interfaces de transferência para fazer a medição de dispositivos e sincronização de licenças. Este método exigirá a utilização de APIs do Gestor de Dispositivos do Windows Media (WMDM). Para obter detalhes e código de exemplo, consulte o whitepaper Acessando APIs WMDRM de um aplicativo WPD no site WHDC.
Tópicos relacionados