Manipulando conteúdo protegido no aplicativo
[O recurso DRM do Windows Media foi preterido e não deve ser usado. Use Microsoft PlayReady em vez disso.]
Um aplicativo deve ter um certificado de transferência para ser capaz de lidar com conteúdo protegido por DRM. Para saber onde obter esse certificado, consulte Ferramentas para Desenvolvimento. Para lidar com conteúdo desprotegido, você pode usar um certificado fictício, conforme descrito em Autenticando o aplicativo.
Antes de usar um dispositivo, seu aplicativo deve determinar se o dispositivo dá suporte ao DRM 10 do Windows Media para Dispositivos Portáteis e, em caso afirmativo, que os componentes drm são atuais. (Atual significa que o relógio seguro está correto e que o dispositivo foi individualizado corretamente.) Se o dispositivo não der suporte a essa versão do DRM ou se ele não puder ser atualizado, você ainda poderá enviar arquivos para o dispositivo, mas eles podem não ser reproduzíveis, dependendo da versão da licença.
Observação
No momento, não há suporte para a individualização de dispositivos.
Se o aplicativo for vinculado aos métodos do SDK do Windows Media Format, ele precisará vincular à biblioteca WMStubDRM.lib do Windows Media Format. Para obter mais informações sobre como chamar métodos do Windows Media Format em conteúdo protegido por DRM, confira "Como habilitar o suporte a DRM" na documentação do SDK do Windows Media Format. Observe que há um problema com a vinculação a Mssachlp.lib e WMStubDRM.lib. Isso é abordado no artigo de KB 890079 no MSDN.
O exemplo de código C++ a seguir determina se um dispositivo é um dispositivo DRM 10 do Windows Media e, nesse caso, que seu relógio está atualizado.
HRESULT IsDRMClockUpToDate()
{
HRESULT hr = S_OK;
// Create the DRM handler class.
CComPtr<IWMDRMDeviceApp> pDRM;
hr = pDRM.CoCreateInstance(CLSID_WMDRMDeviceApp, 0, CLSCTX_ALL);
// Find out first if the device is a WMDRM 10 device, and if so,
// whether it requires clock updates.
DWORD status = 0;
hr = pDRM->QueryDeviceStatus(pDevice, &status);
if (FAILED(hr)
|| (!(WMDRM_DEVICE_ISWMDRM & status)) // Device is not WMDRM 10.
|| (status & WMDRM_DEVICE_REVOKED)) // Device is revoked.
{
return E_FAIL;
}
else if (status & WMDRM_DEVICE_NEEDCLOCK ||
status & WMDRM_DEVICE_REFRESHCLOCK)
{
// Attempt update. See following example.
hr = UpdateDRM(status);
}
return hr;
}
Se o dispositivo der suporte ao WINDOWS Media DRM 10 para Dispositivos Portáteis e precisar ser atualizado (ou seja, se o valor de status no exemplo anterior não for simplesmente WMDM_DEVICE_ISWMDRM), o aplicativo deverá chamar IWMDRMDeviceApp::AcquireDeviceData e passar o valor de status para executar as atualizações necessárias. O computador desktop deve estar conectado à Internet.
A função de exemplo C++ a seguir tenta atualizar um dispositivo DRM.
HRESULT UpdateDRM(DWORD status)
{
HRESULT hr = S_OK;
hr = pDRM->AcquireDeviceData(pDevice, this, status, &result);
if (hr != S_OK || result != 0)
{
return E_FAIL;
}
return hr;
}
Tópicos relacionados