ID contenuto e diritti di contenuto
Un ID contenuto (identificatore) è un valore ULONG generato dal driver di sistema DRMK in fase di esecuzione per identificare il contenuto protetto da DRM nel flusso di dati audio che genera un pin specifico.
I diritti di contenuto sono una rappresentazione digitale dei diritti concessi dal provider di contenuti all'utente per la riproduzione e la copia di contenuti protetti da DRM. I diritti di contenuto vengono specificati sotto forma di struttura DRMRIGHTS che DRMK passa al driver audio.
DRMRIGHTS contiene due flag: DigitalOutputDisable e CopyProtect. Se il flag DigitalOutputDisable è impostato, il driver deve disabilitare eventuali output digitali che si connettono ai dispositivi esterni (ad esempio tramite un connettore S/PDIF). Se il flag CopyProtect è impostato, il driver deve disabilitare le funzionalità che potrebbero consentire il salvataggio di una copia persistente del contenuto sicuro nel disco o in qualsiasi altra forma di archiviazione nonvolatile. Ad esempio, l'hardware audio tipico consente di instradare un segnale di riproduzione tramite il canale di acquisizione. Se questo segnale è in forma digitale, il segnale acquisito può essere una copia digitale perfetta del segnale di input. Se la combinazione di riproduzione contiene dati da qualsiasi flusso con un set di flag CopyProtect , il driver deve disattivare il percorso di acquisizione della riproduzione.
Un driver audio conforme a DRM deve supportare l'interfaccia IDrmAudioStream nei relativi oggetti waveCyclic e WavePci miniport, che espongono i pin sink per il rendering dei dati audio. Per ottenere un riferimento a un oggetto IDrmAudioStream dal driver, DRMK chiama il metodo QueryInterface nel pin. Il pin ha un'interfaccia di tipo IMiniportWaveCyclicStream o IMiniportWavePciStream. L'interfaccia IDrmAudioStream supporta solo un metodo, IDrmAudioStream::SetContentId (oltre ai tre metodi IUnknown ). Quando DRMK chiama SetContentId, passa un ID contenuto e diritti di contenuto, che il driver associa al flusso di dati del pin.
Anziché chiamare direttamente le funzioni DRM in Drmk.sys, un driver miniport WaveCyclic o WavePci può accedere alle funzioni DRM tramite l'interfaccia IDrmPort2 (IDrmPort2 è derivato dalla classe di base IDrmPort). In Microsoft Windows XP e versioni successive, i driver di porta WaveCyclic e WavePci supportano IDrmPort2. Il driver miniport ottiene un riferimento all'interfaccia IDrmPort2 del driver di porta chiamando il metodo QueryInterface dell'oggetto porta con IID_IDrmPort2 REFIID.
Alcuni driver audio supportano la combinazione hardware e possono gestire diversi flussi di dati di input contemporaneamente. Questo tipo di driver deve tenere traccia sia degli ID contenuto per i singoli flussi che dei diritti di contenuto compositi di tutti i flussi. Il driver chiama IDrmPort::CreateContentMixed per determinare i diritti compositi per un flusso misto e per creare un ID contenuto per identificare tale flusso. Al termine dell'uso dell'ID contenuto, il driver deve chiamare IDrmPort::D estroyContent per eliminare l'ID contenuto.
Ogni volta che un flusso di input viene aggiunto o rimosso da un mixer, il driver deve eliminare l'ID contenuto per la combinazione precedente e creare un nuovo ID contenuto per la nuova combinazione. Prima di eliminare un ID contenuto precedente, il driver deve prima inoltrare correttamente un nuovo ID contenuto a tutti i flussi a cui in precedenza ha inoltrato l'ID contenuto precedente. Per altre informazioni, vedere Inoltro degli ID contenuto DRM.