다음을 통해 공유


DRM 버전 1을 사용하여 파일 보호

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

이러한 종류의 보호가 적용되면 라이선스 요청이 이루어진 컴퓨터에서만 유효한 DRM 버전 1 라이선스가 생성됩니다. 키 또는 키 시드가 설정되지 않으므로 이 기술을 사용하여 보호되는 콘텐츠에 대한 이식 가능한 라이선스를 생성할 수 있는 방법이 없습니다. 그러나 Windows Media Format SDK 7.1 이상을 사용하는 경우 Microsoft 라이선스 마이그레이션 서비스에서 라이선스를 복구할 수 있습니다.

DRM 버전 1을 사용하여 ASF 파일을 보호하려면 다음 단계를 수행합니다.

  1. WMStubDRM.lib 파일을 프로젝트에 연결하고 필요한 경우 wmvcore.lib의 연결을 해제합니다.

  2. WMCreateWriter 함수를 호출하여 작성기를 만듭니다. 첫 번째 인수는 예약되어 있으며 NULL로 설정해야 합니다.

  3. IWMWriter::SetProfile 또는 IWMWriter::SetProfileByID를 호출하여 작성기에서 사용할 프로필을 설정합니다. DRM 특성을 설정하기 전에 작성기에서 프로필을 설정해야 합니다. DRM은 Windows Media 오디오 또는 Windows Media 비디오 코덱을 사용하는 프로필에 대해서만 지원됩니다.

  4. IWMHeaderInfo::SetAttribute 메서드를 사용하여 다음 DRM 속성을 설정합니다. Use_DRM 속성은 DRM 버전 1을 사용하여 콘텐츠를 보호하도록 DRM 구성 요소에 지시합니다. DRM_Flags 속성은 콘텐츠에 대해 생성될 로컬 라이선스에 포함할 권한을 지정합니다. DRM_LEVEL 값도 라이선스에 저장됩니다. 콘텐츠에 액세스하는 데 필요한 최소 수준을 지정합니다. 150은 DRM 버전 1 콘텐츠에 권장되는 수준입니다.

    attribute
    Use_DRM TRUE
    DRM_Flags WMT_RIGHT_PLAYBACK | WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE | WMT_RIGHT_COPY_TO_CD
    DRM_LEVEL 150

     

다음 예제 코드에서는 DRM 버전 1에 대한 DRM 사용 기록기를 만들고 DRM 속성을 설정하는 방법을 보여 줍니다. 명확하게 하기 위해 오류 검사가 생략되었습니다.

BOOL  fUseDRM    = TRUE;
// These are the rights we will apply to the file. See WMT_RIGHTS for
// the full set of possible rights.

DWORD dwDRMFlags = WMT_RIGHT_PLAYBACK | 
                   WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE | 
                   WMT_RIGHT_COPY_TO_CD;

// Set the minimum required DRM level low enough
// to allow older players to access the content.
DWORD dwDRMLevel = 150;

IWMDRMWriter*  pWMDRMWriter  = NULL;
HRESULT hr = S_OK;

// Initialize COM.
hr = CoInitialize(NULL);

// Create a writer object.
hr = WMCreateWriter( NULL, &pWMDRMWriter);

// Obtain the IWMHeaderInfo interface.
hr = pWMDRMWriter -> QueryInterface(IID_IWMHeaderInfo, 
                                   (void**) &pWMHeaderInfo);

// Tell the SDK runtime to protect the file using DRM version 1.
hr= pWMHeaderInfo-> SetAttribute(0,
                                 g_wszWMUse_DRM,
                                 WMT_TYPE_BOOL,
                                 (BYTE*)&fUseDRM,
                                 sizeof(BOOL));

// Specify the rights that will be stored in the local license that is
// created automatically for the content.
hr= pWMHeaderInfo->SetAttribute( 0,
                                 g_wszWMDRM_Flags, 
                                 WMT_TYPE_DWORD,
                                 (BYTE *)&dwDRMFlags,
                                 sizeof(DWORD) );

// Set the DRM_Level attribute in the file's DRM header.
hr= pWMHeaderInfo->SetAttribute( 0,
                                 g_wszWMDRM_Level, 
                                 WMT_TYPE_DWORD,
                                 (BYTE *)&dwDRMLevel,
                                 sizeof(DWORD) );