Content Protection DDI

이 섹션은 Windows 7 이상 및 Windows Server 2008 R2 이상 버전의 Windows 운영 체제에만 적용됩니다.

Content Protection DDI는 비디오를 보호하기 위한 Direct3D 버전 9 DDI 의 확장입니다. Content Protection DDI는 이 섹션에 설명된 진입점으로 구성됩니다.

필수 콘텐츠 보호 DDI 함수

사용자 모드 표시 드라이버에서 콘텐츠 보호가 구현된 경우 드라이버는 다음 Content Protection DDI 함수를 지원해야 합니다.

콘텐츠 보호 기능

사용자 모드 표시 드라이버는 이전의 필수 Content Protection DDI 함수를 각각 지원하는 경우에만 콘텐츠 보호 기능을 보고합니다. 다음 D3DDDICAPS_TYPE 값은 Direct3D 런타임에서 사용자 모드 표시 드라이버가 지원하는 콘텐츠 보호 기능에 대한 정보를 검색하는 데 사용됩니다. 런타임은 런타임이 GetCaps를 호출할 때 드라이버 GetCaps 함수의 pData 매개 변수가 가리키는 D3DDDIARG_GETCAPS 구조체의 Type 멤버에서 이러한 D3DDDICAPS_TYPE 값을 설정합니다.

D3DDDICAPS_GETCONTENTPROTECTIONCAPS
런타임은 드라이버에서 사용해야 하는 특정 암호화 및 디코딩 조합에 대한 DDICONTENTPROTECTIONCAPS 구조체에 대한 포인터를 제공합니다. 드라이버는 암호화 및 디코딩 조합에 대한 드라이버의 콘텐츠 보호 기능을 설명하는 채워진 D3DCONTENTPROTECTIONCAPS 구조체에 대한 포인터를 반환합니다. D3DCONTENTPROTECTIONCAPS에 대한 자세한 내용은 DirectX SDK 설명서를 참조하세요.

D3DDDICAPS_GETCERTIFICATESIZE
드라이버는 채널 또는 암호화 형식에 사용되는 드라이버 인증서의 크기(바이트)를 지정하는 숫자에 대한 포인터를 제공합니다. 그런 다음 Direct3D 런타임은 이 크기를 사용하여 런타임이 D3DDDICAPS_GETCERTIFICATE GetCaps 를 호출할 때 런타임이 수신하는 인증서 정보를 보관하는 버퍼를 할당합니다.

D3DDDICAPS_GETCERTIFICATE
런타임은 드라이버가 검색해야 하는 인증서를 설명하는 DDICERTIFICATEINFO 구조체에 대한 포인터를 제공합니다.

인증된 채널의 경우 드라이버는 Microsoft에서 서명한 루트인 X.509 인증서인 기존 OPM 인증서를 사용합니다.

애플리케이션은 드라이버의 인증서를 쿼리하여 다음 정보를 확인할 수 있습니다.

  • 드라이버를 신뢰할 수 있는지 여부입니다.

  • 드라이버가 해지되었는지 여부입니다.

  • 드라이버의 공개 키입니다. 애플리케이션은 드라이버의 공개 키를 사용하여 인증에 사용되는 인증된 채널에 대한 세션 키를 설정합니다.

이 채널은 인증서 또는 인증을 지원하지 않으므로 Direct3D 9 인증 채널에 대해 호출되는 경우 D3DDDICAPS_GETCERTIFICATE 집합이 있는 GetCaps 에 대한 호출이 실패합니다.

암호화 세션의 경우 드라이버는 지정된 암호화 형식에 대한 인증서를 반환합니다. 암호화 유형 및 사용되는 키 교환에 따라 인증서가 사용되거나 사용되지 않을 수 있습니다. 다른 암호화 유형이 서로 다른 인증서를 사용할 수도 있습니다.

선택적 콘텐츠 보호 DDI 함수

드라이버는 필요에 따라 다음 Content Protection DDI 함수를 지원할 수 있습니다.

  • EncryptionBlt 함수는 보호된 표면에서 암호화된 데이터를 읽습니다.

  • GetPitch 함수는 보호된 표면의 피치를 검색합니다.

  • StartSessionKeyRefresh 함수는 디코더/애플리케이션 및 드라이버/하드웨어가 이후에 세션 키로 XOR(배타적 OR 작업)을 수행하는 데 사용할 수 있는 난수를 반환합니다.

  • FinishSessionKeyRefresh 함수는 해당 시점의 모든 버퍼가 업데이트된 세션 키 값을 사용한다는 것을 나타냅니다.

  • GetEncryptionBltKey 함수는 드라이버의 EncryptionBlt 함수가 반환하는 데이터의 암호를 해독하는 데 사용되는 키를 반환합니다.

  • DecryptionBlt 함수는 보호된 표면에 데이터를 씁니다.

콘텐츠 보호된 리소스

다음 D3DDDI_RESOURCEFLAGS 플래그는 Direct3D 런타임에서 보호된 콘텐츠에 사용됩니다. 런타임은 런타임이 CreateResource를 호출할 때 드라이버의 CreateResource 함수의 pResource 매개 변수가 가리키는 D3DDDIARG_CREATERESOURCE 구조의 Flags 멤버에서 이러한 D3DDDI_RESOURCEFLAGS 플래그를 설정합니다.

RestrictedContent
리소스에 보호된 콘텐츠가 포함될 수 있습니다. 애플리케이션이 리소스를 만들기 전에 명시적으로 콘텐츠 보호를 사용하도록 설정했을 수도 있고 그렇지 않을 수도 있습니다. 드라이버는 런타임에서 보호할 수 있는 메모리 풀에 리소스에 대한 할당을 배치해야 합니다. 드라이버는 잠금 가능한 보호된 리소스 만들기를 허용해야 합니다. 그러나 드라이버가 콘텐츠 보호를 사용하는 동안 이러한 표면을 잠그기 위해 Lock 함수 호출에 명시적으로 실패해야 합니다.

RestrictSharedAccess
특정 프로세스만 공유 리소스에 대한 액세스를 허용해야 합니다.

드라이버는 이 리소스에 대한 공유 액세스를 제한해야 합니다. 런타임은 드라이버의 OpenResource 함수를 호출하여 리소스를 만든 프로세스 내에서 또는 인증된 채널을 통해 명시적으로 액세스 권한이 부여된 디바이스에서 디스플레이 디바이스(hDevice)를 사용하여 이 리소스를 열 수 있습니다.