處理應用程式中受保護的內容
[Windows Media DRM 功能已被取代,不應使用。 請改用Microsoft PlayReady。]
應用程式必須具有傳輸憑證,才能處理受 DRM 保護的內容。 若要瞭解如何取得此憑證,請參閱 開發工具。 若要處理未受保護的內容,您可以使用虛擬憑證,如 驗證應用程式中所述。
使用裝置之前,您的應用程式應該判斷裝置是否支援適用于可攜式裝置的 Windows Media DRM 10,如果是的話,DRM 元件是最新的。 (Current 表示安全時鐘正確無誤,且裝置已正確個人化。) 如果裝置不支援此版本的 DRM,或者如果無法更新,您仍然可以將檔案傳送至裝置,但可能無法播放,視授權版本而定。
注意
目前不支援裝置的個別化。
如果您的應用程式將連結至 Windows Media Format SDK 方法,則必須連結至 Windows Media Format 程式庫 WMStubDRM.lib。 For more information on calling Windows Media Format methods on DRM-protected content, see "Enabling DRM Support" in the Windows Media Format SDK documentation. 請注意,連結至 Mssachlp.lib 和 WMStubDRM.lib 時發生問題。 這涵蓋在 MSDN 上的知識庫文章890079。
下列 C++ 程式碼範例會判斷裝置是否為 Windows Media DRM 10 裝置,如果是的話,其時鐘是最新的。
HRESULT IsDRMClockUpToDate()
{
HRESULT hr = S_OK;
// Create the DRM handler class.
CComPtr<IWMDRMDeviceApp> pDRM;
hr = pDRM.CoCreateInstance(CLSID_WMDRMDeviceApp, 0, CLSCTX_ALL);
// Find out first if the device is a WMDRM 10 device, and if so,
// whether it requires clock updates.
DWORD status = 0;
hr = pDRM->QueryDeviceStatus(pDevice, &status);
if (FAILED(hr)
|| (!(WMDRM_DEVICE_ISWMDRM & status)) // Device is not WMDRM 10.
|| (status & WMDRM_DEVICE_REVOKED)) // Device is revoked.
{
return E_FAIL;
}
else if (status & WMDRM_DEVICE_NEEDCLOCK ||
status & WMDRM_DEVICE_REFRESHCLOCK)
{
// Attempt update. See following example.
hr = UpdateDRM(status);
}
return hr;
}
如果裝置支援適用于可攜式裝置的 Windows Media DRM 10,而且必須更新 (也就是說,如果先前範例中的 狀態 值不只是WMDM_DEVICE_ISWMDRM) ,應用程式應該呼叫 IWMDRMDeviceApp::AcquireDeviceData ,並傳入 狀態 值以執行必要的更新。 桌上型電腦必須連線到網際網路。
下列 C++ 範例函式會嘗試更新 DRM 裝置。
HRESULT UpdateDRM(DWORD status)
{
HRESULT hr = S_OK;
hr = pDRM->AcquireDeviceData(pDevice, this, status, &result);
if (hr != S_OK || result != 0)
{
return E_FAIL;
}
return hr;
}
相關主題