Поделиться через


Метод 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. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.

Код возврата Описание
S_OK
Метод выполнен успешно.
DRM_E_INVALIDARG
Недопустимый входной аргумент.
NS_E_DRM_INVALID_CERTIFICATE
Сертификат устройства, полученный с устройства, является недопустимым.
NS_E_DRM_UNABLE_TO_GET_DEVICE_CERT
Не удалось получить сертификат устройства с устройства.

Комментарии

Этот метод следует вызывать перед выполнением каких-либо ограниченных действий с содержимым 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;    
}

Требования

Требование Значение
Заголовок
WMDRMDeviceApp.h (также требуется Wmdrmdeviceapp_i.c, созданный на основе WMDRMDeviceApp.idl)
Библиотека
Mssachlp.lib

См. также раздел

Обработка защищенного содержимого в приложении

Интерфейс IWMDRMDeviceApp

IWMDRMDeviceApp2::QueryDeviceStatus2