共用方式為


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

呼叫端會填入 DeviceObjectFileObject,以及 ContextDRMFORWARD 結構的成員,DrmForward 指向該參數。 DrmForwardContentToDeviceObject 使用這些值,如下所示:

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

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

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

使用量摘要數據表

獲取 設置 目標 屬性描述項類型 屬性值類型
是的

KSP_DRMAUDIOSTREAM_CONTENTID

KSDRMAUDIOSTREAM_CONTENTID

 

屬性值(作業數據)是一種KSDRMAUDIOSTREAM_CONTENTID結構,可指定數據流的DRM內容識別碼和DRM內容許可權。

傳回值

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 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