Gestione del contenuto protetto nell'applicazione
[La funzionalità DRM di Windows Media è deprecata e non deve essere usata. Usare invece Microsoft PlayReady.]
Un'applicazione deve avere un certificato di trasferimento per poter gestire il contenuto protetto da DRM. Per informazioni su dove ottenere questo certificato, vedere Strumenti per lo sviluppo. Per la gestione del contenuto non protetto, è possibile usare un certificato fittizio come descritto in Autenticazione dell'applicazione.
Prima di usare un dispositivo, l'applicazione deve determinare se il dispositivo supporta Windows Media DRM 10 per dispositivi portatili e, in caso affermativo, che i componenti DRM siano correnti. Il valore corrente indica che l'orologio sicuro è corretto e che il dispositivo è stato correttamente individualizzato. Se il dispositivo non supporta questa versione di DRM o se non può essere aggiornato, è comunque possibile inviare file al dispositivo, ma potrebbero non essere riproducibili, a seconda della versione della licenza.
Nota
L'individualizzazione dei dispositivi non è attualmente supportata.
Se l'applicazione verrà collegato ai metodi di Windows Media Format SDK, sarà necessario collegarsi alla libreria WMStubDRM.lib della libreria windows Media Format. Per altre informazioni sulla chiamata dei metodi di Windows Media Format nel contenuto protetto da DRM, vedere "Abilitazione del supporto DRM" nella documentazione di Windows Media Format SDK. Si noti che si è verificato un problema con il collegamento sia a Mssachlp.lib che a WMStubDRM.lib. Questo argomento è illustrato nell'articolo della Knowledge Base 890079 su MSDN.
L'esempio di codice C++ seguente determina se un dispositivo è un dispositivo WINDOWS Media DRM 10 e, in tal caso, che il suo orologio sia aggiornato.
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 il dispositivo supporta Windows Media DRM 10 per dispositivi portatili e deve essere aggiornato (ovvero, se il valore di stato nell'esempio precedente non è semplicemente WMDM_DEVICE_ISWMDRM), l'applicazione deve chiamare IWMDRMDeviceApp::AcquireDeviceData e passare il valore di stato per eseguire gli aggiornamenti necessari. Il computer desktop deve essere connesso a Internet.
La funzione di esempio C++ seguente tenta di aggiornare un 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;
}
Argomenti correlati