Метод IWMDRMDeviceApp::QueryDeviceStatus
Метод QueryDeviceStatus запрашивает у устройства текущее состояние и возможности DRM.
Синтаксис
HRESULT QueryDeviceStatus(
[in] IWMDMDevice *pDevice,
[out] DWORD *pdwStatus
);
Параметры
-
pDevice [in]
-
Указатель на объект IWMDMDevice .
-
pdwStatus [out]
-
Ноль или более из следующих значений DWORD , описывающих аспекты DRM устройства, в сочетании с побитовой ИЛИ. См. заметки.
Состояние Описание WMDRM_DEVICE_ISWMDRM Устройство поддерживает Windows Media DRM. WMDRM_DEVICE_NEEDCLOCK Устройство не имеет защищенных часов. WMDRM_DEVICE_REVOKED Устройство отозвано. WMDRM_CLIENT_NEEDINDIV Безопасность DRM должна быть индивидуализирована. WMDRM_DEVICE_REFRESHCLOCK Часы необходимо обновить.
Возвращаемое значение
Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.
Код возврата | Описание |
---|---|
|
Метод выполнен успешно. |
|
Недопустимый входной аргумент. |
|
Сертификат устройства, полученный с устройства, является недопустимым. |
|
Не удалось получить сертификат устройства с устройства. |
Комментарии
Этот метод следует вызывать перед выполнением каких-либо ограниченных действий с содержимым DRM, таких как передача содержимого DRM на устройство или получение сведений о измерении. Если значения, полученные pdwStatus , указывают на то, что необходимо выполнить какое-либо действие (например, индивидуализация для рабочего стола или получение часов для устройства), приложение должно вызвать AcquireDeviceData и передать полученное значение pdwStatus из этой функции в параметр dwFlags в AcquireDeviceData. Если возвращается ноль, устройство не поддерживает 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;
}
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|