Requisitos para aplicativos de DRM-Enabled do Windows Media
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 do WPD permite transferências de conteúdo protegidas. Se o aplicativo tiver fornecido um certificado e uma chave privada, a API criará um canal seguro para transferir o conteúdo WMDRM protegido para o dispositivo.
Para obter informações sobre como criar e distribuir aplicativos baseados no Windows que dão suporte ao DRM do Windows Media, consulte "Licenciamento de aplicativos baseados no Windows".
Transferindo conteúdo
Para transferir o conteúdo protegido do WMDRM, use IPortableDeviceContent::CreateObjectWithPropertiesAndData. Esse método pode ser usado para conteúdo protegido e limpo sem opções adicionais. A API do WPD selecionará automaticamente o canal protegido ou desmarcado, dependendo se o conteúdo estiver protegido ou desmarcado. Ele faz interfaces com o Provedor de Conteúdo Seguro WMDRM para processar as licenças WMDRM.
Transferindo conteúdo claro conhecido
Se você tiver habilitado seu aplicativo para lidar com conteúdo protegido, mas souber que um arquivo específico não está protegido, poderá dizer ao WPD para ignorar o processamento de DRM definindo WPD_API_OPTION_USE_CLEAR_DATA_STREAM opção como TRUE na entrada IPortableDeviceValues ao chamar IPortableDeviceContent::CreateObjectWithPropertiesAndData para obter conteúdo claro.
Acessando operações de medição usando IWMDRMDeviceApp
O WPD fornece um mecanismo para acessar as APIs IWMDRMDeviceApp para atualizações de licença e recuperação de dados de medição. Para acessar essa API por meio do WPD, chame QueryInterface no IID_IWMDRMDeviceApp do IStream retornado de IPortableDeviceContent::CreateObjectWithPropertiesAndData. Essa instância IWMDRMDeviceApp vinculada à conexão IPortableDevice ao dispositivo compatível com WMDRM e não ao conteúdo específico em que 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 snippet 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 do aplicativo e o certificado também se aplica aqui. Se a chave/certificado for inválido ou se o sistema WMDRM não for inicializado, a chamada QueryInferface falhará.
O método acima para adquirir a interface IWMDRMDeviceApp do ponteiro IStream é apenas uma conveniência se seu aplicativo já estiver fazendo uma transferência de conteúdo protegida anteriormente, antes de continuar a 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 medição de dispositivo e sincronização de licenças. Esse método exigirá o uso de APIs do WMDM (Windows Media Gerenciador de Dispositivos). Para obter detalhes e código de exemplo, consulte As APIs do WMDRM de acesso de um white paper do Aplicativo WPD no site do WHDC.
Tópicos relacionados