IDs de conteúdo e direitos de conteúdo

Uma ID de conteúdo (identificador) é um valor ULONG que o driver do sistema DRMK gera em runtime para identificar o conteúdo protegido por DRM no fluxo de dados de áudio que alimenta um determinado pino.

Os direitos de conteúdo são uma representação digital dos direitos concedidos pelo provedor de conteúdo ao usuário para reproduzir e copiar conteúdo protegido por DRM. Os direitos de conteúdo são especificados na forma de uma estrutura DRMRIGHTS que o DRMK passa para o driver de áudio.

DRMRIGHTS contém dois sinalizadores: DigitalOutputDisable e CopyProtect. Se o sinalizador DigitalOutputDisable estiver definido, o driver deverá desabilitar quaisquer saídas digitais que se conectem a dispositivos externos (por meio de um conector S/PDIF, por exemplo). Se o sinalizador CopyProtect estiver definido, o driver deverá desabilitar recursos que possam permitir que uma cópia persistente do conteúdo seguro seja salva no disco ou em qualquer outra forma de armazenamento não volátil. Por exemplo, o hardware de áudio típico permite que um sinal de reprodução seja roteado por meio do canal de captura. Se esse sinal estiver em forma digital, o sinal capturado poderá ser uma cópia digital perfeita do sinal de entrada. Se a combinação de reprodução contiver dados de qualquer fluxo que tenha um sinalizador CopyProtect definido, o driver deverá silenciar o caminho de captura de reprodução.

Um driver de áudio compatível com DRM deve dar suporte à interface IDrmAudioStream em seus objetos de driver de miniporto WaveCyclic e WavePci, que expõem pinos de coletor para renderizar dados de áudio. Para obter uma referência a um objeto IDrmAudioStream do driver, o DRMK chama o método QueryInterface no pino. O pin tem uma interface do tipo IMiniportWaveCyclicStream ou IMiniportWavePciStream. A interface IDrmAudioStream dá suporte a apenas um método, IDrmAudioStream::SetContentId (além dos três métodos IUnknown ). Quando o DRMK chama SetContentId, ele passa uma ID de conteúdo e direitos de conteúdo, que o driver associa ao fluxo de dados do pino.

Em vez de chamar as funções DRM em Drmk.sys diretamente, um driver de miniporto WaveCyclic ou WavePci pode acessar as funções DRM por meio da interface IDrmPort2 (IDrmPort2 é derivado da classe base IDrmPort). No Microsoft Windows XP e posterior, os drivers de porta WaveCyclic e WavePci dão suporte a IDrmPort2. O driver de miniporto obtém uma referência à interface IDrmPort2 do driver de porta chamando o método QueryInterface do objeto de porta com IID_IDRMPORT2 REFIID.

Alguns drivers de áudio dão suporte à combinação de hardware e podem lidar com vários fluxos de dados de entrada ao mesmo tempo. Esse tipo de driver deve acompanhar as IDs de conteúdo para os fluxos individuais e os direitos de conteúdo composto de todos os fluxos. O driver chama IDrmPort::CreateContentMixed para determinar os direitos compostos de um fluxo misto e criar uma ID de conteúdo para identificar esse fluxo. Quando o driver terminar de usar a ID de conteúdo, ele deverá chamar IDrmPort::D estroyContent para excluir a ID de conteúdo.

Sempre que um fluxo de entrada é adicionado ou removido de um mixer, o driver deve excluir a ID de conteúdo da mistura antiga e criar uma nova ID de conteúdo para a nova combinação. Antes de excluir uma ID de conteúdo antiga, o driver deve primeiro encaminhar com êxito uma nova ID de conteúdo para todos os fluxos para os quais encaminhou anteriormente a ID de conteúdo antiga. Para obter mais informações, consulte Encaminhando IDs de conteúdo drm.