DrmForwardContentToInterface function (drmk.h)

The DrmForwardContentToInterface function accepts a pointer to the COM interface of an object to which the caller intends to forward protected content. The function authenticates the object and sends the object the content ID and DRM rights that the system has assigned to the protected content.

Syntax

NTSTATUS DrmForwardContentToInterface(
  [in] ULONG    ContentId,
  [in] PUNKNOWN pUnknown,
  [in] ULONG    NumMethods
);

Parameters

[in] ContentId

Specifies the DRM content ID. This parameter identifies a protected KS audio stream.

[in] pUnknown

Pointer to a COM interface that directly receives KS audio stream data for a KS audio filter.

[in] NumMethods

Specifies the total number of methods in the COM interface that pUnknown points to, including all the methods in its base interfaces.

Return value

DrmForwardContentToInterface returns STATUS_SUCCESS if the call was successful. Otherwise, the method returns an appropriate error code. The following table shows some of the possible return status codes.

Return code Description
STATUS_NOT_IMPLEMENTED
Indicates that the KS audio stream that is associated with pUnknown does not support the DRM content rights that are assigned to ContentId.

Remarks

Before allowing protected content to flow through a data path, the system verifies that the data path is secure. To do so, the system authenticates each module in the data path beginning at the upstream end of the data path and moving downstream. As each module is authenticated, that module gives the system information about the next module in the data path so that it can also be authenticated. To be successfully authenticated, a module's binary file must be signed as DRM-compliant.

If two adjacent modules in the data path communicate with each other through the downstream module's COM interface, the upstream module calls the DrmForwardContentToInterface function to provide the system with a pointer to the COM interface. (If the two modules communicate through the IoCallDriver function or the downstream module's content handlers, the upstream module calls DrmForwardContentToDeviceObject or DrmAddContentHandlers instead.)

DrmForwardContentToInterface authenticates the module that implements the methods in the COM interface pointed to by pUnknown. (If the methods are distributed among several modules, the function authenticates all these modules.) This vendor-defined interface must be understood by both the module that calls the interface and the module that implements the interface. DrmForwardContentToInterface makes no assumptions regarding this interface other than that it is derived from IUnknown.

If DrmForwardContentToInterface succeeds in authenticating the driver or library, it does the following:

  • Queries the pUnknown interface for its IDrmAudioStream interface. Note that although the DrmForwardContentToInterface authenticates all the methods in the pUnknown interface, it does not call any methods in the pUnknown interface other than the base IUnknown methods.
  • Calls IDrmAudioStream::SetContentId to set the DRM content ID and DRM content rights on the audio stream. Before returning, DrmForwardContentToInterface releases the IDrmAudioStream interface.
The pUnknown parameter follows the reference-counting conventions for COM objects.

DrmForwardContentToInterface performs the same function as PcForwardContentToInterface and IDrmPort::ForwardContentToInterface. For more information, see DRM Functions and Interfaces.

Requirements

Requirement Value
Target Platform Universal
Header drmk.h (include Drmk.h)
Library Drmk.lib
IRQL PASSIVE_LEVEL

See also

DrmAddContentHandlers

DrmForwardContentToDeviceObject

IDrmAudioStream

IDrmAudioStream::SetContentId

IDrmPort::ForwardContentToInterface

IoCallDriver

PcForwardContentToInterface