次の方法で共有


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
1 つ以上の引数が無効です。
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 Media 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...

要件

要件
ヘッダー
WMDRMDeviceApp.h (WMDRMDeviceApp.idl からビルドされたWmdrmdeviceapp_i.c も必要です)
ライブラリ
Mssachlp.lib

関連項目

アプリケーションでの保護されたコンテンツの処理

IWMDMDevice インターフェイス

IWMDRMDeviceApp インターフェイス