IWMDRMDeviceApp::GenerateMeterChallenge (método)

El método GenerateMeterChallenge adquiere datos de medición de un dispositivo.

Sintaxis

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

Parámetros

pDevice [in]

Puntero a una interfaz IWMDMDevice . Si la aplicación pasa NULL, se usa la información de medición almacenada en el equipo en lugar de la información de medición de un dispositivo conectado.

bstrMeterCert [in]

El certificado de medición de la aplicación, como BSTR. Se trata de un certificado firmado recibido de Microsoft.

pbstrMeterURL [out]

Dirección URL donde se deben enviar los datos de medición. Esta acción la asigna Windows Media Administrador de dispositivos y el autor de la llamada debe liberarla mediante SysFreeString.

pbstrMeterData [out]

Datos de medición que se van a enviar al servicio de medición. Esta acción la asigna Windows Media Administrador de dispositivos y el autor de la llamada debe liberarla mediante SysFreeString.

Valor devuelto

El método devuelve un valor HRESULT. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.

Código devuelto Descripción
S_OK
El método se ha llevado a cabo de forma correcta.
DRM_E_INVALIDARG
Uno o varios argumentos no son válidos.
DRM_E_INVALIDXMLTAG
XML tiene un formato incorrecto.
DRM_E_NOXMLCLOSETAG
XML tiene un formato incorrecto.
DRM_E_NOXMLOPENTAG
XML tiene un formato incorrecto.
DRM_E_XMLNOTFOUND
No se pudo encontrar una etiqueta XML necesaria.
Errores del dispositivo
Cualquiera de varios errores de dispositivo.
Errores del cliente DRM
Cualquiera de los errores internos del cliente DRM.
NS_E_DEVICE_NOT_WMDRM_DEVICE
El dispositivo especificado no es un dispositivo compatible con DRM de Windows Media.

Observaciones

Antes de llamar a este método, la aplicación debe llamar a IWMDRMDeviceApp::QueryDeviceStatus o IWMDRMDeviceApp2::QueryDeviceStatus2 para comprobar que todos los componentes DRM del dispositivo están actualizados. Este método solo se puede llamar en un dispositivo que admita DRM 10 de Windows Media para dispositivos portátiles.

Los datos recuperados pbstrMeterData deben enviarse a la dirección URL especificada por pbstrMeterURL. Asegúrese de codificar la dirección URL de los datos recuperados para que no se modifiquen durante la transferencia.

Consulte Control de contenido protegido en la aplicación para obtener más información.

Ejemplos

En el siguiente ejemplo de código de C++ se crea un objeto WMDRMDeviceApp , se comprueba que el dispositivo es un dispositivo DRM 10 de Windows Media, que su reloj es preciso y, a continuación, solicita los datos de medición.

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 Value
Encabezado
WMDRMDeviceApp.h (también requiere Wmdrmdeviceapp_i.c, compilado a partir de WMDRMDeviceApp.idl)
Biblioteca
Mssachlp.lib

Vea también

Control del contenido protegido en la aplicación

IWMDMDevice (Interfaz)

IWMDRMDeviceApp (Interfaz)