Share via


Método IWMDRMDeviceApp::GenerateMeterChallenge

O método GenerateMeterChallenge adquire dados de medição de um dispositivo.

Sintaxe

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

Parâmetros

pDevice [in]

Ponteiro para uma interface IWMDMDevice . Se o aplicativo for aprovado em NULL, as informações de medição armazenadas no computador serão usadas em vez de medir informações de um dispositivo conectado.

bstrMeterCert [in]

O certificado de medição do aplicativo, como um BSTR. Este é um certificado assinado recebido da Microsoft.

pbstrMeterURL [out]

A URL para onde os dados de medição devem ser enviados. Isso é alocado pelo Windows Media Gerenciador de Dispositivos e deve ser gratuito pelo chamador usando SysFreeString.

pbstrMeterData [out]

Medindo dados a serem enviados para o serviço de medição. Isso é alocado pelo Windows Media Gerenciador de Dispositivos e deve ser gratuito pelo chamador usando SysFreeString.

Valor retornado

O método retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.

Código de retorno Descrição
S_OK
O método foi bem-sucedido.
DRM_E_INVALIDARG
Um ou mais argumentos não são válidos.
DRM_E_INVALIDXMLTAG
O XML é formado incorretamente.
DRM_E_NOXMLCLOSETAG
O XML é formado incorretamente.
DRM_E_NOXMLOPENTAG
O XML é formado incorretamente.
DRM_E_XMLNOTFOUND
Falha ao localizar uma marca XML necessária.
Erros do dispositivo
Qualquer um dos vários erros de dispositivo.
Erros do cliente DRM
Qualquer um dos vários erros internos do cliente DRM.
NS_E_DEVICE_NOT_WMDRM_DEVICE
O dispositivo especificado não é um dispositivo compatível com DRM do Windows Media.

Comentários

Antes de chamar esse método, o aplicativo deve chamar IWMDRMDeviceApp::QueryDeviceStatus ou IWMDRMDeviceApp2::QueryDeviceStatus2 para verificar se todos os componentes drm do dispositivo estão atualizados. Esse método só pode ser chamado em um dispositivo que dá suporte ao DRM 10 do Windows Media para Dispositivos Portáteis.

Os dados recuperados pbstrMeterData devem ser enviados para a URL especificada por pbstrMeterURL. Certifique-se de codificar a URL dos dados recuperados para que eles não sejam modificados durante a transferência.

Consulte Manipulando conteúdo protegido no aplicativo para obter mais informações.

Exemplos

O exemplo de código C++ a seguir cria um objeto WMDRMDeviceApp , verifica se o dispositivo é um dispositivo DRM 10 do Windows Media, se seu relógio é preciso e solicita os dados de medição.

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...

Requisitos

Requisito Valor
parâmetro
WMDRMDeviceApp.h (também requer Wmdrmdeviceapp_i.c, criado a partir de WMDRMDeviceApp.idl)
Biblioteca
Mssachlp.lib

Confira também

Manipulando conteúdo protegido no aplicativo

IWMDMDevice Interface

IWMDRMDeviceApp Interface