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 介面或內容處理程序進行通訊,上游模組會改為呼叫 DrmForwardContentToInterface 或 DrmAddContentHandlers。
呼叫端會填入 DeviceObject、FileObject,以及 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值。
DrmForwardContentToDeviceObject 將這些值複製到要求的屬性值。 傳回之後,DrmForwardContentToDeviceObject 不會進一步使用裝置物件。
DrmForwardContentToDeviceObject 會執行與 PcForwardContentToDeviceObject 和 IDrmPort2::ForwardContentToDeviceObject相同的函式。 如需詳細資訊,請參閱 DRM函式和介面。
KSPROPERTY_DRMAUDIOSTREAM_CONTENTID 屬性會將DRM內容識別碼和DRM內容許可權指派給 KS 音訊釘選。
使用量摘要數據表
| 獲取 | 設置 | 目標 | 屬性描述項類型 | 屬性值類型 |
|---|---|---|---|---|
| 不 | 是的 | 針 |
屬性值(作業數據)是一種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。
DrmForwardContentToDeviceObject 是 DRMK 系統驅動程式Drmk.sys的進入點。 DRMK 會在 IRQL PASSIVE_LEVEL傳送KSPROPERTY_DRMAUDIOSTREAM_CONTENTID屬性的IOCTL_KS_PROPERTY要求。
要求
| 要求 | 價值 |
|---|---|
| 目標平臺 | 普遍 |
| 標頭 | drmk.h (包括 Drmk.h) |
| 連結庫 | Drmk.lib |
| IRQL | PASSIVE_LEVEL |
另請參閱
IDrmPort2::ForwardContentToDeviceObject