다음을 통해 공유


라이선스 획득 이벤트 처리

[이 페이지와 연결된 기능인 Windows Media Format 11 SDK는 레거시 기능입니다. 원본 판독기 및 싱크 작성기에 의해 대체되었습니다. 원본 판독기 및 싱크 작성기는 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 Windows Media Format 11 SDK 대신 소스 판독기 및 싱크 기록기를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

DRM 지원 판독기 애플리케이션은 IWMStatusCallback::OnStatus 콜백 메서드에서 라이선스 획득 프로세스와 관련된 다음 네 가지 이벤트를 처리합니다.

  • WMT_LICENSEURL_SIGNATURE_STATE
  • WMT_NO_RIGHTS
  • WMT_NO_RIGHTS_EX
  • WMT_ACQUIRE_LICENSE

WMT_LICENSEURL_SIGNATURE_STATE

DRM 구성 요소가 DRM 버전 7로 보호되는 콘텐츠를 검색하면 먼저 로컬 시스템에서 유효한 라이선스를 찾습니다. 없는 경우 파일의 DRM 헤더에서 라이선스 획득 URL을 평가하고 pValueWMT_DRMLA_TRUST 값 중 하나로 설정된 WMT_LICENSEURL_SIGNATURE_STATE 이벤트를 전송하여 URL이 신뢰할 수 있는지, 신뢰할 수 없는지 또는 변조되었는지 여부를 나타냅니다. URL을 신뢰할 수 없는 경우 애플리케이션은 사용자에게 경고해야 합니다. URL이 변조된 경우 파일이 손상된 것으로 간주되어야 하며, 애플리케이션은 사용자에게 강력한 경고를 표시하지 않고 URL로 이동해서는 안 됩니다.

WMT_NO_RIGHTS

WMT_NO_RIGHTS 이벤트는 DRM 버전 1 콘텐츠에 대해서만 전송됩니다. 즉, 라이선스를 자동으로 취득해야 합니다. 즉, 사용자는 웹 페이지로 이동하여 라이선스를 획득해야 합니다. 페이지의 URL은 OnStatus 메서드의 pValue 매개 변수에서 와이드 문자 null로 끝나는 문자열로 검색됩니다.

적절한 경우 애플리케이션을 사용하면 별도의 프로세스에서 인터넷 Explorer 열거나 웹 브라우저 컨트롤을 호스트하여 사용자가 웹 페이지로 쉽게 이동할 수 있습니다. 그러나 이 작업은 필요하지 않습니다. 최소한 애플리케이션은 메시지 상자에 사용자에게 URL을 표시하고 인터넷 Explorer 주소 표시줄에 붙여넣도록 메시지를 표시할 수 있습니다. Audioplayer 샘플에서는 URL 문자열의 형식을 지정하는 방법 및 CreateProcess 메서드를 사용하여 인터넷 Explorer 열고 지정된 URL로 이동하는 방법을 포함하여 WMT_NO_RIGHTS 이벤트를 적절하게 처리하는 방법을 보여 줍니다.

애플리케이션은 DRM 버전 1 라이선스가 획득된 시기를 알 수 없으므로 라이선스를 획득한 후 파일을 다시 열려고 시도하는 것은 사용자의 달려 있습니다.

이 비사용 라이선스 취득 프로세스는 버전 7 라이선스에도 사용할 수 있지만, 이 경우 애플리케이션은 먼저 IWMDRMReader::MonitorLicenseAcquisition을 호출할 수 있습니다. 이 방법을 사용하면 새 파일에 대한 라이선스가 발견될 때까지 로컬 라이선스 저장소가 반복적으로 검사됩니다. 이 시점에서 애플리케이션은 WMT_ACQUIRE_LICENSE 이벤트를 받게 됩니다. 모든 버전 7 라이선스의 경우 애플리케이션에서 사용자에게 자동으로 또는 자동으로 라이선스를 가져올 수 있는 옵션을 제공하는 것이 좋습니다.

WMT_NO_RIGHTS_EX

WMT_NO_RIGHTS_EX 이벤트는 콘텐츠가 DRM 버전 7에 의해 보호되므로 라이선스 취득 프로세스가 자동으로 또는 자동으로 진행될 수 있음을 나타냅니다. 일반적으로 자동 라이선스 취득은 최종 사용자에게 더 편리하지만 어떤 사람들은 모든 라이선스를 자동으로 취득하는 것을 선호합니다. 라이선스 취득 시 사용자가 결제 또는 개인 정보를 제출해야 하는 경우 프로세스는 항상 자동으로 수행되어야 합니다. 비사일 라이선스 취득은 위에서 WMT_NO_RIGHTS 제목 아래에 설명되어 있습니다. 자동 취득은 다음과 같이 진행됩니다.

  1. pValue 매개 변수를 WM_GET_LICENSE_DATA 구조로 캐스팅하고 나중에 비사일 라이선스 취득에 필요한 경우 구조를 저장합니다.
  2. Reader 개체에서 QueryInterface 를 호출하여 IWMDRMReader 인터페이스를 가져옵니다.
  3. IWMDRMReader::AcquireLicense를 호출하고 dwFlags 매개 변수에 0x1 지정하여 자동 언어 획득을 나타냅니다. 즉시 반환되는 비동기 호출입니다.
  4. WMT_ACQUIRE_LICENSE 이벤트를 기다립니다.

WMT_ACQUIRE_LICENSE

drM 버전 7 라이선스에 대한 라이선스 취득 프로세스가 완료된 후 WMT_ACQUIRE_LICENSE 이벤트가 전송됩니다. IWMDRMReader::AcquireLicense 는 자동 획득을 위해 이 이벤트를 보내도록 하고 MonitorLicenseAcquisition 은 비사음 획득을 위해 전송되도록 합니다. 이벤트 처리기에서 pValueWM_GET_LICENSE_DATA 구조체에 대한 포인터로 캐스팅하고 hr 멤버를 검사하여 라이선스가 성공적으로 획득되었는지 확인합니다. hr이 NS_E_DRM_NO_RIGHTS 같으면 라이선스를 자동으로 취득해야 했음을 나타냅니다. 애플리케이션을 사용하면 사용자가 언제든지 라이선스 취득 프로세스를 취소할 수 있습니다. 이 작업은 IWMDRMReader::CancelLicenseAcquisition을 호출하여 수행됩니다. 이 메서드를 호출하면 HRESULT 값이 NS_S_DRM_ACQUIRE_CANCELLED WMT_ACQUIRE_LICENSE 이벤트를 보냅니다.

hr이 NS_S_DRM_LICENSE_ACQUIRED 경우 라이선스가 획득되고 애플리케이션이 파일을 재생하거나 디바이스에 복사하거나 권한을 요청한 작업을 수행할 수 있습니다.

Windows XP에서는 NS_E_DRM_LICENSE_NOTACQUIRED 새로운 오류 코드가 도입되었습니다. 이 오류 코드는 Windows XP의 Windows Media Format 런타임 구성 요소가 자동 또는 비사일 라이선스 취득 중에 라이선스를 획득하지 못할 때마다 생성됩니다. 다른 플랫폼에서는 일반적으로 라이선스 취득에 실패할 때 NS_E_DRM_LICENSE_STORE_ERROR 반환됩니다. 새 오류 코드는 NS_E_DRM_LICENSE_STORE_ERROR 생성되는 다른 오류 조건과 라이선스 취득 실패를 구분하기 위한 것입니다.

자동 라이선스 취득 시도 후 반환될 때 이러한 오류를 처리하는 권장 방법은 다음 코드 조각에 나와 있습니다.

if( hrStatus == NS_E_DRM_LICENSE_NOTACQUIRED || 
    hrStatus == NS_E_DRM_LICENSE_STORE_ERROR )
{
  // Attempt non-silent license acquisition.
}
else if( hrStatus == NS_E_DRM_NEEDS_INDIVIDUALIZATION )
{
  // Individualize and then retry.
}
else if( FAILED(hrStatus) )
{
  // Display a helpful error message.
}
else
{
  // Success. Play content.
}

참고

DRM은 이 SDK의 x64 기반 버전에서 지원되지 않습니다.

 

보호된 파일 읽기