IWMDRMDeviceApp::QueryDeviceStatus 方法

QueryDeviceStatus 方法查询设备的当前 DRM 状态和功能。

语法

HRESULT QueryDeviceStatus(
  [in]  IWMDMDevice *pDevice,
  [out] DWORD       *pdwStatus
);

参数

pDevice [in]

指向 IWMDMDevice 对象的指针。

pdwStatus [out]

描述设备的 DRM 方面的以下 DWORD 值的零个或多个,并结合按位 OR。 请参阅“备注”。

状态 说明
WMDRM_DEVICE_ISWMDRM 设备支持 Windows Media DRM。
WMDRM_DEVICE_NEEDCLOCK 设备没有安全时钟。
WMDRM_DEVICE_REVOKED 设备已被吊销。
WMDRM_CLIENT_NEEDINDIV DRM 安全性需要个性化。
WMDRM_DEVICE_REFRESHCLOCK 时钟需要刷新。

返回值

该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。

返回代码 说明
S_OK
方法成功。
DRM_E_INVALIDARG
输入参数无效。
NS_E_DRM_INVALID_CERTIFICATE
从设备检索到的设备证书无效。
NS_E_DRM_UNABLE_TO_GET_DEVICE_CERT
无法从设备检索设备证书。

备注

在对 DRM 内容执行任何受限操作(例如将 DRM 内容传输到设备或获取计量信息)之前,应调用此方法。 如果 pdwStatus 检索的值指示需要 (执行某些操作,例如桌面个性化或获取设备) 的时钟,则应用程序应调用 AcquireDeviceData 并将从此函数检索到的 pdwStatus 值传递到 AcquireDeviceData 中的 dwFlags 参数。 如果返回零,则设备不支持适用于可移植设备的 Windows Media DRM 10,并且无需执行任何操作。 有关详细信息 ,请参阅处理应用程序中的受保护内容

示例

以下 C++ 代码示例创建 WMDRMDeviceApp 对象,验证设备是 Windows Media DRM 10 设备,其时钟是否准确,然后请求计量数据。

HRESULT hr = S_OK;
// Create the WMDRMDeviceApp object.
CComPtr<IWMDRMDeviceApp> pDRM;
hr = pDRM.CoCreateInstance(CLSID_WMDRMDeviceApp, 0, CLSCTX_ALL);

// Find out first if the device is a WMDRM 10 device, and if it requires
// any clock updates.
DWORD status = 0;
hr = pDRM->QueryDeviceStatus(pDevice, &status);

if (!(WMDRM_DEVICE_ISWMDRM & status)) // Device is not WMDRM 10. Nothing can be updated,
    return E_FAIL;                   // and metering cannot be performed.
else if (status & WMDRM_DEVICE_REVOKED) // Device is revoked.
    return E_FAIL;
else if (status & WMDRM_DEVICE_NEEDCLOCK || 
    status & WMDRM_CLIENT_NEEDINDIV ||
    status & WMDRM_DEVICE_REFRESHCLOCK)
{
    // Need to update device clock. 
    // Using custom function, which is synchronous.
    hr = myAcquireDeviceData(pDRM, pDevice, this, status, &result);
    if (hr != S_OK || result != 0)    // Couldn't perform the updates.
        return E_FAIL;    
}

要求

要求
标头
WMDRMDeviceApp.h (还需要Wmdrmdeviceapp_i.c,这是从 WMDRMDeviceApp.idl)

Mssachlp.lib

另请参阅

处理应用程序中受保护的内容

IWMDRMDeviceApp 接口

IWMDRMDeviceApp2::QueryDeviceStatus2