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。 可能的值包括 (但不限於) 下表中的這些值。
傳回碼 | 描述 |
---|---|
|
此方法已成功。 |
|
一或多個引數無效。 |
|
XML 的格式不正確。 |
|
XML 的格式不正確。 |
|
XML 的格式不正確。 |
|
找不到必要的 XML 標記。 |
|
任何一些裝置錯誤。 |
|
任何一些內部 DRM 用戶端錯誤。 |
|
指定的裝置不是 Windows 媒體 DRM 相容裝置。 |
備註
呼叫此方法之前,應用程式應該呼叫 IWMDRMDeviceApp::QueryDeviceStatus 或 IWMDRMDeviceApp2::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...
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|