Partager via


Méthode IWMDRMDeviceApp::GenerateMeterChallenge

La méthode GenerateMeterChallenge acquiert des données de mesure à partir d’un appareil.

Syntaxe

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

Paramètres

pDevice [in]

Pointeur vers une interface IWMDMDevice . Si l’application transmet null, les informations de contrôle stockées sur l’ordinateur sont utilisées au lieu de contrôler les informations d’un appareil connecté.

bstrMeterCert [in]

Certificat de contrôle de l’application, en tant que BSTR. Il s’agit d’un certificat signé reçu de Microsoft.

pbstrMeterURL [out]

URL où les données de contrôle doivent être envoyées. Celui-ci est alloué par Windows Media Gestionnaire de périphériques et doit être gratuit par l’appelant à l’aide de SysFreeString.

pbstrMeterData [out]

Données de contrôle à envoyer au service de contrôle. Celui-ci est alloué par Windows Media Gestionnaire de périphériques et doit être gratuit par l’appelant à l’aide de SysFreeString.

Valeur retournée

Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.

Code de retour Description
S_OK
S_OK
DRM_E_INVALIDARG
Un ou plusieurs arguments ne sont pas valides.
DRM_E_INVALIDXMLTAG
XML n’est pas correctement formé.
DRM_E_NOXMLCLOSETAG
XML n’est pas correctement formé.
DRM_E_NOXMLOPENTAG
XML n’est pas correctement formé.
DRM_E_XMLNOTFOUND
Impossible de trouver une balise XML requise.
Erreurs à partir de l’appareil
N’importe quelle erreur d’appareil.
Erreurs du client DRM
N’importe quelle erreur interne du client DRM.
NS_E_DEVICE_NOT_WMDRM_DEVICE
L’appareil spécifié n’est pas un appareil compatible avec Windows Media DRM.

Notes

Avant d’appeler cette méthode, l’application doit appeler IWMDRMDeviceApp::QueryDeviceStatus ou IWMDRMDeviceApp2::QueryDeviceStatus2 pour vérifier que tous les composants DRM de l’appareil sont à jour. Cette méthode ne peut être appelée que sur un appareil qui prend en charge Windows Media DRM 10 pour les appareils portables.

Les données récupérées pbstrMeterData doivent être envoyées à l’URL spécifiée par pbstrMeterURL. Veillez à encoder les données récupérées par URL afin qu’elles ne soient pas modifiées pendant le transfert.

Pour plus d’informations, consultez Gestion du contenu protégé dans l’application .

Exemples

L’exemple de code C++ suivant crée un objet WMDRMDeviceApp , vérifie que l’appareil est un appareil Windows Media DRM 10, que son horloge est exacte, puis demande les données de mesure.

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

Spécifications

Condition requise Valeur
En-tête
WMDRMDeviceApp.h (nécessite également Wmdrmdeviceapp_i.c, généré à partir de WMDRMDeviceApp.idl)
Bibliothèque
Mssachlp.lib

Voir aussi

Gestion du contenu protégé dans l’application

IWMDMDevice, interface

IWMDRMDeviceApp, interface