处理应用程序中受保护的内容
[Windows Media DRM 功能已弃用,不应使用。 请改用 Microsoft PlayReady。]
应用程序必须具有传输证书才能处理受 DRM 保护的内容。 若要了解从何处获取此证书,请参阅 开发工具。 若要处理未受保护的内容,可以使用对 应用程序进行身份验证中所述的虚拟证书。
在使用设备之前,应用程序应确定设备是否支持适用于便携式设备的 Windows Media DRM 10,如果支持,则 DRM 组件是最新的。 (Current 表示安全时钟正确,并且设备已正确个性化。) 如果设备不支持此版本的 DRM,或者无法更新,则仍可以将文件发送到设备,但它们可能不可播放,具体取决于许可证版本。
注意
目前不支持设备个性化。
如果应用程序将链接到 Windows Media Format SDK 方法,则需要链接到 Windows Media Format 库 WMStubDRM.lib。 有关对受 DRM 保护的内容调用 Windows Media Format 方法的详细信息,请参阅 Windows Media Format SDK 文档中的“启用 DRM 支持”。 请注意,链接到 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 并传入 status 的值来执行所需的更新。 台式计算机必须连接到 Internet。
以下 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;
}
相关主题