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 Set 目標 屬性描述元類型 屬性值類型
No Yes Pin

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) 。 如果 IRP 源自使用者模式,處理程式必須失敗 IRP 並傳回狀態代碼INVALID_DEVICE_REQUEST。

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

規格需求

需求
目標平台 Universal
標頭 drmk.h (包括Drmk.h)
程式庫 Drmk.lib
IRQL PASSIVE_LEVEL

另請參閱

DRMFORWARD

DrmAddContentHandlers

DrmForwardContentToInterface

IDrmPort2::ForwardContentToDeviceObject

IoCallDriver

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID

PcForwardContentToDeviceObject