Обработка защищенного содержимого в приложении
[Функция УПРАВЛЕНИЯ цифровыми правами Windows Media устарела и не должна использоваться. Вместо этого используйте Microsoft PlayReady.]
Приложение должно иметь сертификат передачи, чтобы иметь возможность обрабатывать содержимое, защищенное DRM. Сведения о том, где получить этот сертификат, см. в статье Средства для разработки. Для обработки незащищенного содержимого можно использовать фиктивный сертификат, как описано в разделе Проверка подлинности приложения.
Перед использованием устройства приложение должно определить, поддерживает ли устройство WINDOWS Media DRM 10 для переносных устройств, и если да, то являются ли компоненты DRM актуальными. (Текущее означает, что безопасные часы верны и что устройство было правильно индивидуализировано.) Если устройство не поддерживает эту версию DRM или его невозможно обновить, вы по-прежнему можете отправлять файлы на устройство, но они могут быть недоступны для воспроизведения в зависимости от версии лицензии.
Примечание
Индивидуализация устройств в настоящее время не поддерживается.
Если приложение будет связываться с методами пакета SDK для формата Windows Media, ему потребуется связать библиотеку форматов Windows Media WMStubDRM.lib. Дополнительные сведения о вызове методов формата Windows Media для содержимого, защищенного DRM, см. в разделе Включение поддержки DRM в документации по пакету SDK для форматов Windows Media. Обратите внимание, что возникла проблема со связыванием с mssachlp.lib и WMStubDRM.lib. Это описано в статье базы знаний 890079 на сайте MSDN.
В следующем примере кода C++ определяется, является ли устройство устройством Windows Media DRM 10, и, если да, его часы обновлены.
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;
}
Если устройство поддерживает Windows Media DRM 10 для переносных устройств и нуждается в обновлении (то есть, если значение состояния в предыдущем примере не просто WMDM_DEVICE_ISWMDRM), приложение должно вызвать IWMDRMDeviceApp::AcquireDeviceData и передать значение состояния для выполнения необходимых обновлений. Настольный компьютер должен быть подключен к Интернету.
Следующий пример функции C++ пытается обновить устройство 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;
}
Связанные темы