共用方式為


IWMDRMDeviceApp::GenerateMeterChallenge 方法

GenerateMeterChallenge方法會從裝置取得計量資料。

語法

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

參數

pDevice [in]

IWMDMDevice介面的指標。 如果應用程式傳入 Null,則會使用儲存在電腦上的計量資訊,而不是從連線的裝置計量資訊。

bstrMeterCert [in]

應用程式的計量憑證是 BSTR。 這是從 Microsoft 收到的已簽署憑證。

pbstrMeterURL [out]

應該傳送計量資料的 URL。 這是由 Windows Media 裝置管理員所配置,且必須由使用SysFreeString的呼叫端免費。

pbstrMeterData [out]

要傳送至計量服務的計量資料。 這是由 Windows Media 裝置管理員所配置,且必須由使用SysFreeString的呼叫端免費。

傳回值

方法會傳回 HRESULT。 可能的值包括 (但不限於) 下表中的這些值。

傳回碼 描述
S_OK
此方法已成功。
DRM_E_INVALIDARG
一或多個引數無效。
DRM_E_INVALIDXMLTAG
XML 的格式不正確。
DRM_E_NOXMLCLOSETAG
XML 的格式不正確。
DRM_E_NOXMLOPENTAG
XML 的格式不正確。
DRM_E_XMLNOTFOUND
找不到必要的 XML 標記。
來自裝置的錯誤
任何一些裝置錯誤。
DRM 用戶端的錯誤
任何一些內部 DRM 用戶端錯誤。
NS_E_DEVICE_NOT_WMDRM_DEVICE
指定的裝置不是 Windows 媒體 DRM 相容裝置。

備註

呼叫此方法之前,應用程式應該呼叫 IWMDRMDeviceApp::QueryDeviceStatusIWMDRMDeviceApp2::QueryDeviceStatus2 ,以確認所有裝置的 DRM 元件都是最新的。 這個方法只能在支援 Windows Media DRM 10 for Portable Devices 的裝置上呼叫。

擷取的資料 pbstrMeterData 應該傳送至 pbstrMeterURL指定的 URL。 請務必將擷取的資料 URL 編碼,以便在傳輸期間不會修改。

如需詳細資訊 ,請參閱在應用程式中處理受保護的內容

範例

下列 C++ 程式碼範例會建立 WMDRMDeviceApp 物件、確認裝置是 Windows Media DRM 10 裝置、其時鐘正確無誤,然後要求計量資料。

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

規格需求

需求
標頭
WMDRMDeviceApp.h (也需要從 WMDRMDeviceApp.idl) 建置的 Wmdrmdeviceapp_i.c
程式庫
Mssachlp.lib

另請參閱

處理應用程式中受保護的內容

IWMDMDevice 介面

IWMDRMDeviceApp 介面