Защита файлов с помощью DRM версии 1
[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Он был заменен средством чтения исходного кода и модуля записи приемника. Средство чтения исходного кода и модуль записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код по возможности использовал средство чтения исходного кода и модуль записи приемника вместо пакета SDK для Windows Media Format 11. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
При применении такого рода защиты создается лицензия DRM версии 1, которая действительна только на компьютере, с которого был сделан запрос лицензии. Так как ключ или начальное значение ключа не задано, невозможно создать переносимые лицензии для содержимого, защищенного с помощью этого метода. Однако при использовании пакета SDK для формата Windows Media версии 7.1 или более поздней версии лицензии можно восстановить в службе Миграции лицензий Майкрософт.
Чтобы защитить ASF-файлы с помощью DRM версии 1, выполните следующие действия.
Свяжите файл WMStubDRM.lib с проектом и при необходимости разорвите связь с wmvcore.lib.
Вызовите функцию WMCreateWriter , чтобы создать модуль записи. Первый аргумент зарезервирован и должен иметь значение NULL.
Задайте профиль для модуля записи, вызвав IWMWriter::SetProfile или IWMWriter::SetProfileByID. Перед настройкой атрибутов DRM необходимо задать профиль в модитере записи. DRM поддерживается только для профилей, использующих кодеки Windows Media Audio или Windows Media Video.
С помощью метода IWMHeaderInfo::SetAttribute задайте следующие свойства DRM. Свойство Use_DRM указывает компонентам DRM защитить содержимое с помощью DRM версии 1. Свойство DRM_Flags указывает права, которые будут включены в локальную лицензию, которая будет создана для содержимого. Значение DRM_LEVEL также хранится в лицензии; он задает минимальный уровень, необходимый для доступа к содержимому. 150 — это рекомендуемый уровень для содержимого DRM версии 1.
attribute Значение Use_DRM TRUE DRM_Flags WMT_RIGHT_PLAYBACK | WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE | WMT_RIGHT_COPY_TO_CD DRM_LEVEL 150
В следующем примере кода показано, как создать модуль записи с поддержкой DRM для DRM версии 1 и задать свойства DRM. Проверка ошибок была опущена для уточнения.
BOOL fUseDRM = TRUE;
// These are the rights we will apply to the file. See WMT_RIGHTS for
// the full set of possible rights.
DWORD dwDRMFlags = WMT_RIGHT_PLAYBACK |
WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE |
WMT_RIGHT_COPY_TO_CD;
// Set the minimum required DRM level low enough
// to allow older players to access the content.
DWORD dwDRMLevel = 150;
IWMDRMWriter* pWMDRMWriter = NULL;
HRESULT hr = S_OK;
// Initialize COM.
hr = CoInitialize(NULL);
// Create a writer object.
hr = WMCreateWriter( NULL, &pWMDRMWriter);
// Obtain the IWMHeaderInfo interface.
hr = pWMDRMWriter -> QueryInterface(IID_IWMHeaderInfo,
(void**) &pWMHeaderInfo);
// Tell the SDK runtime to protect the file using DRM version 1.
hr= pWMHeaderInfo-> SetAttribute(0,
g_wszWMUse_DRM,
WMT_TYPE_BOOL,
(BYTE*)&fUseDRM,
sizeof(BOOL));
// Specify the rights that will be stored in the local license that is
// created automatically for the content.
hr= pWMHeaderInfo->SetAttribute( 0,
g_wszWMDRM_Flags,
WMT_TYPE_DWORD,
(BYTE *)&dwDRMFlags,
sizeof(DWORD) );
// Set the DRM_Level attribute in the file's DRM header.
hr= pWMHeaderInfo->SetAttribute( 0,
g_wszWMDRM_Level,
WMT_TYPE_DWORD,
(BYTE *)&dwDRMLevel,
sizeof(DWORD) );