Condividi tramite


Metodo IWMDRMDeviceApp::GenerateMeterChallenge

Il metodo GenerateMeterChallenge acquisisce i dati di misurazione da un dispositivo.

Sintassi

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

Parametri

pDevice [in]

Puntatore a un'interfaccia IWMDMDevice . Se l'applicazione passa null, le informazioni di misurazione archiviate nel computer vengono usate anziché le informazioni di misurazione da un dispositivo connesso.

bstrMeterCert [in]

Certificato di misurazione dell'applicazione, come BSTR. Si tratta di un certificato firmato ricevuto da Microsoft.

pbstrMeterURL [out]

URL in cui inviare i dati di misurazione. Questa operazione viene allocata da Windows Media Gestione dispositivi e deve essere gratuita dal chiamante usando SysFreeString.

pbstrMeterData [out]

Misurazione dei dati da inviare al servizio di misurazione. Questa operazione viene allocata da Windows Media Gestione dispositivi e deve essere gratuita dal chiamante usando SysFreeString.

Valore restituito

Il metodo restituisce un HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.

Codice restituito Descrizione
S_OK
Il metodo è riuscito.
DRM_E_INVALIDARG
Uno o più argomenti non sono validi.
DRM_E_INVALIDXMLTAG
XML è formato in modo non corretto.
DRM_E_NOXMLCLOSETAG
XML è formato in modo non corretto.
DRM_E_NOXMLOPENTAG
XML è formato in modo non corretto.
DRM_E_XMLNOTFOUND
Impossibile trovare un tag XML obbligatorio.
Errori dal dispositivo
Qualsiasi errore del dispositivo.
Errori dal client DRM
Qualsiasi errore del client DRM interno.
NS_E_DEVICE_NOT_WMDRM_DEVICE
Il dispositivo specificato non è un dispositivo compatibile con WINDOWS Media DRM.

Commenti

Prima di chiamare questo metodo, l'applicazione deve chiamare IWMDRMDeviceApp::QueryDeviceStatus o IWMDRMDeviceApp2::QueryDeviceStatus2 per verificare che tutti i componenti DRM del dispositivo siano aggiornati. Questo metodo può essere chiamato solo in un dispositivo che supporta Windows Media DRM 10 per dispositivi portatili.

I dati recuperati pbstrMeterData devono essere inviati all'URL specificato da pbstrMeterURL. Assicurarsi di codificare url i dati recuperati in modo che non venga modificato durante il trasferimento.

Per altre informazioni, vedere Gestione del contenuto protetto nell'applicazione .

Esempio

L'esempio di codice C++ seguente crea un oggetto WMDRMDeviceApp , verifica che il dispositivo sia un dispositivo WINDOWS Media DRM 10, che il suo orologio sia accurato e quindi richieda i dati di misurazione.

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

Requisiti

Requisito Valore
Intestazione
WMDRMDeviceApp.h (richiede anche Wmdrmdeviceapp_i.c, compilata da WMDRMDeviceApp.idl)
Libreria
Mssachlp.lib

Vedi anche

Gestione del contenuto protetto nell'applicazione

Interfaccia IWMDMDevice

Interfaccia IWMDRMDeviceApp