다음을 통해 공유


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를 반환합니다. 가능한 값에는 다음 표에 있는 값이 포함되지만, 이에 국한되는 것은 아닙니다.

반환 코드 Description
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 Media DRM 호환 디바이스가 아닙니다.

설명

이 메서드를 호출하기 전에 애플리케이션은 IWMDRMDeviceApp::QueryDeviceStatus 또는 IWMDRMDeviceApp2::QueryDeviceStatus2 를 호출하여 디바이스의 모든 DRM 구성 요소가 최신 상태인지 확인해야 합니다. 이 메서드는 휴대용 디바이스용 Windows Media DRM 10을 지원하는 디바이스에서만 호출할 수 있습니다.

검색된 데이터 pbstrMeterDatapbstrMeterURL에서 지정한 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 인터페이스