處理應用程式中受保護的內容
[Windows Media DRM 功能已被取代,不應使用。 請改用 Microsoft PlayReady。]
應用程式必須有傳輸憑證,才能處理受DRM保護的內容。 若要瞭解取得此憑證的位置,請參閱 Tools for Development。 若要處理未受保護的內容,您可以使用虛擬憑證,如 驗證應用程式中所述。
使用裝置之前,您的應用程式應該判斷裝置是否支援適用於可攜式裝置的 Windows Media DRM 10,如果是的話,DRM 元件是最新的。 (目前表示安全時鐘正確,且裝置已正確個人化。如果裝置不支援此版本的DRM,或無法更新它,您仍然可以將檔案傳送至裝置,但視授權版本而定,這些檔案可能無法播放。
注意
目前不支援裝置的個別化。
如果您的應用程式會連結至 Windows Media Format SDK 方法,則必須連結到 Windows 媒體格式連結庫 WMStubDRM.lib。 如需在受DRM保護的內容上呼叫 Windows Media Format 方法的詳細資訊,請參閱 Windows 媒體格式 SDK 檔中的<啟用DRM支援>。 請注意,連結至 Mssachlp.lib 和 WMStubDRM.lib 時發生問題。 涵蓋於 MSDN 上的 KB 文章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;
}
相關主題