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 |
---|---|
|
메서드가 성공했습니다. |
|
하나 이상의 인수가 잘못되었습니다. |
|
XML이 잘못 구성되었습니다. |
|
XML이 잘못 구성되었습니다. |
|
XML이 잘못 구성되었습니다. |
|
필요한 XML 태그를 찾지 못했습니다. |
|
여러 디바이스 오류 중에서 발생합니다. |
|
여러 가지 내부 DRM 클라이언트 오류 중에서 발생합니다. |
|
지정된 디바이스가 Windows Media DRM 호환 디바이스가 아닙니다. |
설명
이 메서드를 호출하기 전에 애플리케이션은 IWMDRMDeviceApp::QueryDeviceStatus 또는 IWMDRMDeviceApp2::QueryDeviceStatus2 를 호출하여 디바이스의 모든 DRM 구성 요소가 최신 상태인지 확인해야 합니다. 이 메서드는 휴대용 디바이스용 Windows Media DRM 10을 지원하는 디바이스에서만 호출할 수 있습니다.
검색된 데이터 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...
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|