drmForwardContentToDeviceObject 函式 (drmk.h)

DrmForwardContentToDeviceObject 式接受裝置物件,代表呼叫端想要轉送受保護內容的裝置。 函式會驗證裝置,並傳送系統指派給受保護內容的內容識別碼和 DRM 許可權。

語法

NTSTATUS DrmForwardContentToDeviceObject(
  [in]           ULONG        ContentId,
  [in, optional] PVOID        Reserved,
  [in]           PCDRMFORWARD DrmForward
);

參數

[in] ContentId

指定 DRM 內容識別碼。 此參數會識別受保護的 KS 音訊資料流程。

[in, optional] Reserved

保留供未來使用。 設定為 Null

[in] DrmForward

DRMFORWARD結構的指標,指定裝置物件和檔案物件,分別識別目標裝置和該裝置上的 KS 音訊釘選。 結構也包含 KSPROPERTY_DRMAUDIOSTREAM_CONTENTIDset-property 要求傳遞給裝置的內容值。

傳回值

DrmForwardContentToDeviceObject 如果呼叫成功,會傳回STATUS_SUCCESS。 否則,它會傳回適當的錯誤碼。

備註

允許受保護的內容流經資料路徑之前,系統會驗證資料路徑是否安全。 若要這樣做,系統會從資料路徑的上游端開始驗證資料路徑中的每個模組,並移動下游。 當每個模組都經過驗證時,該模組會提供資料路徑中下一個模組的系統資訊,以便也可以進行驗證。 若要成功驗證,模組的二進位檔案必須簽署為符合 DRM 規範。

資料路徑中的兩個相鄰模組可以透過數種方式之一彼此通訊。 如果上游模組透過 IoCallDriver呼叫下游模組,下游模組就是 WDM 驅動程式的一部分。 在此情況下,上游模組會呼叫 函 DrmForwardContentToDeviceObject 式,以提供代表下游模組的裝置物件給系統。 (如果兩個模組透過下游模組的 COM 介面或內容處理常式進行通訊,上游模組會改為呼叫 DrmForwardContentToInterfaceDrmAddContentHandlers 。)

呼叫端會填入DrmForward參數所指向之 DRMFORWARD結構的DeviceObjectFileObjectCoNtext成員。 DrmForwardContentToDeviceObject 會使用這些值,如下所示:

  • DeviceObject 會指定代表下游模組 (驅動程式) 的裝置物件。 DrmForwardContentToDeviceObject 會使用裝置物件來驗證驅動程式。 如果成功,函式會將 set-property 要求傳送至裝置上的 KS 針腳,以設定裝置上的 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID 屬性。
  • FileObject 會指定傳送屬性要求的 KS 針腳 DrmForwardContentToDeviceObject
  • CoNtext 指定呼叫端透過屬性要求傳遞至驅動程式的內容值。 DrmForwardContentToDeviceObject 將內容值複製到要求的屬性描述項。 內容值通常是緩衝區的指標,其中包含呼叫端和驅動程式都瞭解的一些自訂格式資料。 依照慣例,如果下游模組是 KS 篩選準則, 則 CoNtext 成員會指向指定函式傳送屬性要求之 KS 針腳 DrmForwardContentToDeviceObject 的檔案物件。 換句話說, CoNtext 成員會指向與 FileObject 成員相同的檔案物件。 USB 音訊驅動程式必須將 CoNtext 參數設定為USBD_PIPE_HANDLE值。
屬性要求也包含 來自 ContentId 參數的 DRM 內容識別碼,以及屬於該內容識別碼的 DRM 內容許可權。 DrmForwardContentToDeviceObject 將這些值複製到要求的 屬性值。 DrmForwardContentToDeviceObject 不會在傳回之後進一步使用裝置物件。

DrmForwardContentToDeviceObject 會執行與 PcForwardContentToDeviceObjectIDrmPort2::ForwardContentToDeviceObject相同的函式。 如需詳細資訊,請參閱 DRM 函式和介面

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID 屬性會將 DRM 內容識別碼和 DRM 內容許可權指派給 KS 音訊釘選。

使用量摘要資料表

Get 集合 目標 屬性描述項類型 屬性值類型
Pin

KSP_DRMAUDIOSTREAM_CONTENTID

KSDRMAUDIOSTREAM_CONTENTID

 

屬性值 (作業資料) 是指定資料流程 DRM 內容識別碼和 DRM 內容許可權的KSDRMAUDIOSTREAM_CONTENTID結構。

傳回值

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID屬性要求會傳回狀態碼,指出 KS 篩選器是否可以強制執行指定的 DRM 內容許可權,如下表所示。
狀態碼 意義
STATUS_SUCCESS KS 音訊篩選器會強制執行指定的 DRM 內容許可權。
STATUS_NOT_IMPLEMENTED KS 篩選器無法強制執行指定的 DRM 內容許可權。
 

DrmForwardContentToDeviceObject函式會使用此屬性來設定音訊資料流程上的 DRM 內容識別碼和內容許可權,輸入屬性要求的目標 KS 針腳。

KS 音訊篩選器會同步處理這個屬性要求。 如果要求傳回STATUS_SUCCESS,則所有下游 KS 音訊節點 (請參閱目標 KS 音訊接腳的 音訊拓撲節點) 也已成功設定具有指定的 DRM 內容識別碼和 DRM 內容許可權。 (請注意,下游節點是流經音訊釘選的音訊內容的直接或間接接收。)

DRM 系統可以在代表 KS 音訊釘選的檔案物件存留期內隨時設定此屬性。 如果要求不成功,則先前設定的 DRM 內容識別碼和 DRM 內容許可權仍會在 KS 音訊串流上生效。

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID 屬性的處理常式必須確認屬性要求 IRP 源自核心模式 (,確認 IRP 的 RequestorMode 欄位等於 KernelMode) 。 如果 IRP 源自使用者模式,處理常式必須失敗 IRP 並傳回狀態碼INVALID_DEVICE_REQUEST。

DrmForwardContentToDeviceObjectDRMK 系統驅動程式中的進入點,Drmk.sys。 DRMK 會在 IRQL PASSIVE_LEVEL傳送KSPROPERTY_DRMAUDIOSTREAM_CONTENTID屬性的IOCTL_KS_PROPERTY要求。

必要條件

   
目標平臺 環球
標頭 drmk.h (包含 Drmk.h)
程式庫 Drmk.lib
IRQL PASSIVE_LEVEL

另請參閱

DRMFORWARD

DrmAddContentHandlers

DrmForwardContentToInterface

IDrmPort2::ForwardContentToDeviceObject

IoCallDriver

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID

PcForwardContentToDeviceObject