Windows 媒體DRM-Enabled應用程式的需求
若要建立已啟用 DRM (DRM) 應用程式的 Windows Media Digital Rights Management,您必須擁有本檔之一 般需求 一節中所述的標頭和程式庫。 此外,在開啟裝置時,應用程式必須在用戶端資訊中提供其他屬性。
下表說明啟用 Windows Media DRM 保護內容傳輸所需的兩個額外屬性。
屬性 | Description |
---|---|
WPD_CLIENT_WMDRM_APPLICATION_PRI加值稅E_KEY | 指定應用程式的私密金鑰。 |
WPD_CLIENT_WMDRM_APPLICATION_CERTIFICATE | 指定應用程式的憑證。 |
當裝置以 IPortableDevice::Open 方法開啟時,必須在應用程式的用戶端資訊中提供這些屬性。 提供這些屬性時,WPD API 允許受保護的內容傳輸。 如果應用程式已提供憑證和私密金鑰,API 會建立安全通道,以將受保護的 WMDRM 內容傳輸至裝置。
For information about creating and distributing Windows-based applications that support Windows Media DRM, see "Licensing Windows-based Applications".
傳輸內容
若要傳輸 WMDRM 保護的內容,請使用 IPortableDeviceContent::CreateObjectWithPropertiesAndData。 這個方法可用於受保護和清除的內容,而不需要其他選項。 WPD API 會根據內容是否受到保護或清除,自動選取受保護的或清除通道。 它與 WMDRM 安全內容提供者介面,以處理 WMDRM 授權。
傳輸已知的清除內容
如果您已啟用應用程式來處理受保護的內容,但您知道特定檔案未受到保護,則可以在呼叫IPortableDeviceContent::CreateObjectWithPropertiesAndData以清除內容時,將輸入IPortableDeviceValues中的WPD_API_OPTION_USE_CLEAR_DATA_STREAM選項設定為 TRUE,以略過 DRM 處理。
使用 IWMDRMDeviceApp 存取計量作業
WPD 提供存取 IWMDRMDeviceApp API 的機制,以進行授權更新和計量資料擷取。 若要透過 WPD 存取此 API,請在從IPortableDeviceContent::CreateObjectWithPropertiesAndData傳回的IStreamIID_IWMDRMDeviceApp上呼叫queryInterface。 此 IWMDRMDeviceApp 實例系結至與 WMDRM 相容裝置的 IPortableDevice 連線,而不是 IStream 取得的特定內容。 WPD 會在內部包裝計量 API,並讓它可供您的應用程式存取。 您的應用程式應該針對 IWMDMDevice* 參數使用WMDRMDEVICEAPP_USE_WPD_DEVICE_PTR常數。
下列程式碼片段示範這一點。
IStream* pDataStream = NULL;
IWMDRMDeviceApp* pWMDRMApp = NULL;
// ... Initialization
hr = pPortableDeviceContent->CreateObjectWithPropertiesAndData(pValues,
&pDataStream,
&dwOptimalWriteBufferSize,
NULL);
// ... Transfer the protected WMDRM content
pDataStream->Write(pData, cbData, &cbWritten);
pDataStream->Commit(0);
hr = pDataStream->QueryInterface(IID_IWMDRMDeviceApp,
(void**)&pWMDRMApp);
if (SUCCEEDED(hr))
{
DWORD dwStatus = 0;
// Call metering operations on the current device using the WPD device pointer
hr = pWMDRMApp->QueryDeviceStatus((IWMDMDevice *)WMDRMDEVICEAPP_USE_WPD_DEVICE_PTR,
&dwStatus);
}
應用程式私密金鑰和憑證的相同必要條件也適用于這裡。 如果金鑰/憑證無效,或 WMDRM 系統無法初始化, QueryInferface 呼叫將會失敗。
從IStream指標取得IWMDRMDeviceApp介面的上述方法,只是如果您的應用程式已經執行先前受保護的內容傳輸,再繼續進行計量和授權同步處理作業。
對於需要存取IWMDRMDeviceApp的大部分應用程式,我們建議直接初始化IWMDRMDeviceApp,因為這不需要您的應用程式傳輸受保護的內容或保留傳輸介面,才能進行裝置計量和授權同步處理。此方法需要使用 Windows Media 裝置管理員 (WMDM) API。 如需詳細資料和範例程式碼,請參閱從 WHDC 網站上的 WPD 應用程式白皮書存取 WMDRM API 。
相關主題