Метод IWMDRMDeviceApp::GenerateMeterChallenge

Метод GenerateMeterChallenge получает данные измерения с устройства.

Синтаксис

HRESULT GenerateMeterChallenge(
  [in]  IWMDMDevice *pDevice,
  [in]  BSTR        bstrMeterCert,
  [out] BSTR        *pbstrMeterURL,
  [out] BSTR        *pbstrMeterData
);

Параметры

pDevice [in]

Указатель на интерфейс IWMDMDevice . Если приложение передает значение NULL, то вместо сведений о измерении с подключенного устройства используются сведения о измерении, хранящиеся на компьютере.

bstrMeterCert [in]

Сертификат измерения приложения в виде BSTR. Это подписанный сертификат, полученный от корпорации Майкрософт.

pbstrMeterURL [out]

URL-адрес, по которому должны отправляться данные измерения. Он выделяется диспетчер устройств Windows Media и должен быть бесплатным вызывающим объектом с помощью SysFreeString.

pbstrMeterData [out]

Данные отслеживания для отправки в службу контроля. Он выделяется диспетчер устройств Windows Media и должен быть бесплатным вызывающим объектом с помощью SysFreeString.

Возвращаемое значение

Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.

Код возврата Описание
S_OK
Метод выполнен успешно.
DRM_E_INVALIDARG
Один или несколько аргументов являются недопустимыми.
DRM_E_INVALIDXMLTAG
XML неправильно сформирован.
DRM_E_NOXMLCLOSETAG
XML неправильно сформирован.
DRM_E_NOXMLOPENTAG
XML неправильно сформирован.
DRM_E_XMLNOTFOUND
Не удалось найти необходимый XML-тег.
Ошибки на устройстве
Любая из нескольких ошибок устройства.
Ошибки клиента DRM
Любая из нескольких внутренних ошибок клиента DRM.
NS_E_DEVICE_NOT_WMDRM_DEVICE
Указанное устройство не является устройством, совместимым с DRM Windows Media.

Комментарии

Перед вызовом этого метода приложение должно вызвать IWMDRMDeviceApp::QueryDeviceStatus или IWMDRMDeviceApp2::QueryDeviceStatus2 , чтобы убедиться, что все компоненты DRM устройства актуальны. Этот метод может вызываться только на устройстве, поддерживающем Windows Media DRM 10 для переносных устройств.

Полученные данные pbstrMeterData должны отправляться на URL-адрес, указанный в pbstrMeterURL. Обязательно закодируйте полученные данные с помощью URL-адреса, чтобы они не изменялись во время передачи.

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

Примеры

В следующем примере кода 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;    
}

// Any updates have been performed. Now get the metering information from the device.
CComBSTR meterCert(METERCERT);
CComBSTR URL;
CComBSTR rawdata;
CComBSTR data;
hr = pDRM->GenerateMeterChallenge(pDevice, meterCert, &URL, &rawdata);
if (hr == S_OK)
    ..... Send to URL...

Требования

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

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

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

Интерфейс IWMDMDevice

Интерфейс IWMDRMDeviceApp