Поделиться через


Обработка защищенного содержимого в приложении

[Функция УПРАВЛЕНИЯ цифровыми правами 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;
}

Создание приложения диспетчер устройств Windows Media

Обработка защищенного содержимого