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 |
---|---|
|
El método se ha llevado a cabo de forma correcta. |
|
Uno o varios argumentos no son válidos. |
|
XML tiene un formato incorrecto. |
|
XML tiene un formato incorrecto. |
|
XML tiene un formato incorrecto. |
|
No se pudo encontrar una etiqueta XML necesaria. |
|
Cualquiera de varios errores de dispositivo. |
|
Cualquiera de los errores internos del cliente DRM. |
|
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 |
|
Biblioteca |
|