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 介面或內容處理程式進行通訊,上游模組會改為呼叫 DrmForwardContentToInterface 或 DrmAddContentHandlers 。)
呼叫端會填入參數 DrmForward 指向之 DRMFORWARD 結構的 DeviceObject、FileObject 和 Context 成員。 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值。
DrmForwardContentToDeviceObject
將這些值複製到要求的屬性值。 DrmForwardContentToDeviceObject
在傳回之後,不會進一步使用裝置物件。
DrmForwardContentToDeviceObject
會執行與 PcForwardContentToDeviceObject 和 IDrmPort2::ForwardContentToDeviceObject 相同的函式。 如需詳細資訊,請參閱 DRM函式和介面。
KSPROPERTY_DRMAUDIOSTREAM_CONTENTID 屬性會將DRM內容識別碼和DRM內容許可權指派給 KS 音訊釘選。
使用量摘要表格
Get | Set | 目標 | 屬性描述元類型 | 屬性值類型 |
---|---|---|---|---|
No | Yes | Pin |
(作業數據) 屬性值是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) 。 如果 IRP 源自使用者模式,處理程式必須失敗 IRP 並傳回狀態代碼INVALID_DEVICE_REQUEST。
DrmForwardContentToDeviceObject 是 DRMK系統驅動程式中的進入點,Drmk.sys。 DRMK 會在 IRQL PASSIVE_LEVEL傳送KSPROPERTY_DRMAUDIOSTREAM_CONTENTID屬性的IOCTL_KS_PROPERTY要求。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | drmk.h (包括Drmk.h) |
程式庫 | Drmk.lib |
IRQL | PASSIVE_LEVEL |
另請參閱
IDrmPort2::ForwardContentToDeviceObject