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


Идентификаторы содержимого и права на содержимое

Идентификатор содержимого — это значение ULONG, которое системный драйвер DRMK создает во время выполнения для идентификации содержимого, защищенного DRM, в потоке аудиоданных, который передается в определенный контакт.

Права на содержимое — это цифровое представление прав, предоставленных поставщиком содержимого пользователю для воспроизведения и копирования содержимого, защищенного DRM. Права на содержимое указываются в виде структуры DRMRIGHTS , которую DRMK передает звуковому драйверу.

DRMRIGHTS содержит два флага: DigitalOutputDisable и CopyProtect. Если установлен флаг DigitalOutputDisable , драйвер должен отключить все цифровые выходы, которые подключаются к внешним устройствам (например, через соединитель S/PDIF). Если установлен флаг CopyProtect , драйвер должен отключить функции, которые могут позволить сохранять постоянную копию защищенного содержимого на диск или в любом другом виде энергонезависимого хранилища. Например, стандартное звуковое оборудование позволяет направлять сигнал воспроизведения через канал захвата. Если этот сигнал находится в цифровой форме, захваченный сигнал может быть идеальной цифровой копией входного сигнала. Если смесь воспроизведения содержит данные из любого потока, для которого установлен флаг CopyProtect , драйвер должен отключить путь воспроизведения и захвата.

Аудиодрайвер, совместимый с DRM, должен поддерживать интерфейс IDrmAudioStream в объектах драйверов-минипортов WaveCyclic и WavePci, которые предоставляют контакты приемников для отрисовки звуковых данных. Чтобы получить ссылку на объект IDrmAudioStream из драйвера, DRMK вызывает метод QueryInterface для закрепления. Контакт имеет интерфейс типа IMiniportWaveCyclicStream или IMiniportWavePciStream. Интерфейс IDrmAudioStream поддерживает только один метод , IDrmAudioStream::SetContentId (в дополнение к трем методам IUnknown ). Когда DRMK вызывает SetContentId, он передает идентификатор содержимого и права на содержимое, которые драйвер связывает с потоком данных пин-кода.

Вместо вызова функций DRM в Drmk.sys напрямую драйвер miniport WaveCyclic или WavePci может получить доступ к функциям DRM через интерфейс IDrmPort2 (IDrmPort2 является производным от базового класса IDrmPort). В Microsoft Windows XP и более поздних версиях драйверы портов WaveCyclic и WavePci поддерживают IDrmPort2. Драйвер мини-порта получает ссылку на интерфейс IDrmPort2 драйвера порта, вызывая метод QueryInterface объекта порта с IID_IDrmPort2 REFIID.

Некоторые аудиодрайверы поддерживают аппаратное смешивание и могут одновременно обрабатывать несколько потоков входных данных. Драйвер этого типа должен отслеживать как идентификаторы содержимого для отдельных потоков, так и права составного содержимого всех потоков. Драйвер вызывает IDrmPort::CreateContentMixed , чтобы определить составные права для смешанного потока и создать идентификатор содержимого для идентификации этого потока. После завершения работы драйвера с идентификатором содержимого он должен вызвать IDrmPort::D eвыслоеконтент , чтобы удалить идентификатор содержимого.

Каждый раз, когда входной поток добавляется в микшер или удаляется из него, драйвер должен удалить идентификатор содержимого для старого набора и создать новый идентификатор содержимого для нового набора. Перед удалением старого идентификатора содержимого драйвер должен сначала успешно перенаправить новый идентификатор содержимого во все потоки, в которые он ранее перенаправил старый идентификатор содержимого. Дополнительные сведения см. в разделе Переадресация идентификаторов содержимого DRM.