共用方式為


處理應用程式中受保護的內容

[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;
}

建立 Windows 媒體設備管理員應用程式

處理受保護的內容