IDirect3DCryptoSession9::EncryptionBlt 메서드(d3d9.h)

보호된 표면에서 암호화된 데이터를 읽습니다.

구문

HRESULT EncryptionBlt(
  IDirect3DSurface9 *pSrcSurface,
  IDirect3DSurface9 *pDstSurface,
  UINT              DstSurfaceSize,
  VOID              *pIV
);

매개 변수

pSrcSurface

보호된 표면에 대한 포인터입니다.

pDstSurface

암호화된 데이터를 수신하는 표면에 대한 포인터입니다.

DstSurfaceSize

pDstSurface가 가리키는 표면 메모리의 크기(바이트)입니다. 크기는 드라이버 기능 구조에서 BlockAlignmentSize 값에 맞춰야 합니다. 설명을 참조하세요.

pIV

IV(초기화 벡터)를 수신하는 버퍼에 대한 포인터입니다. 호출자는 이 버퍼를 할당하지만 드라이버는 IV를 생성합니다.

암호화 유형이 D3DCRYPTOTYPE_AES128_CTR (128비트 AES-CTR)인 경우 pIVD3DAES_CTR_IV 구조를 가리킵니다. 드라이버는 첫 번째 IV를 생성할 때 구조를 난수로 초기화합니다. 이후의 각 IV에 대해 드라이버는 단순히 구조체의 IV 멤버를 증가시켜 값이 항상 증가하도록 합니다. 이 절차를 통해 애플리케이션은 동일한 키 쌍에서 동일한 IV가 두 번 이상 사용되지 않는지 확인할 수 있습니다.

다른 암호화 유형의 경우 다른 구조가 사용되거나 암호화가 IV를 사용하지 않을 수 있습니다.

반환 값

메서드가 성공하면 S_OK를 반환하고, 그러지 않으면 HRESULT 오류 코드를 반환합니다.

설명

드라이버가 이 메서드를 지원하는 경우 IDirect3DDevice9Video::GetContentProtectionCaps 메서드에서 반환된 기능 구조에서 D3DCPCAPS_ENCRYPTEDREADBACK 플래그를 설정합니다.

드라이버가 D3DCPCAPS_ENCRYPTEDREADBACKKEY 기능 플래그를 설정하는 경우 드라이버는 별도의 키를 사용하여 데이터를 암호화합니다. 이 키를 얻으려면 IDirect3DCryptoSession9::GetEncryptionBltKey 메서드를 호출합니다. 그렇지 않으면 드라이버는 세션 키를 사용하여 데이터를 암호화합니다.

다음과 같이 대상 표면(pDstSurface)을 할당합니다.

  1. IDirect3DCryptoSession9::GetSurfacePitch를 호출하여 보호된 표면의 보폭을 가져옵니다.
  2. GetContentProtectionCaps 메서드를 호출하여 D3DCONTENTPROTECTIONCAPS 구조에서 BufferAlignmentStartBlockAlignmentSize 멤버의 값을 가져옵니다.
  3. 표면 메모리의 최소 크기를 SysMemSize = 보호된 표면 보폭 × 보호된 표면 높이로 계산합니다.
  4. BufferAlignmentStartBlockAlignmentSize 값을 수용하도록 안쪽 여백을 추가합니다.
  5. 크기가 SysMemSize(패딩 포함)와 같은 시스템 메모리에 버퍼를 할당합니다.
  6. 시스템 메모리 버퍼의 주소가 BufferAlignmentStart 값에 맞지 않는 경우 버퍼의 시작부터 오프셋인 메모리 정렬 포인터를 계산합니다.
  7. IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx를 호출하여 대상 화면을 만듭니다. 메모리 정렬 포인터를 공유 리소스 핸들(pSharedHandle)으로 전달합니다.
이 메서드에는 다음과 같은 제한 사항이 있습니다.
  • 메서드는 하위 사각형 또는 부분적으로 암호화된 표면을 다시 읽을 수 없습니다.
  • 보호된 표면은 오프스크린 일반 표면 또는 렌더링 대상이어야 합니다.
  • 대상 표면은 앞에서 설명한 대로 적절한 맞춤으로 만든 시스템 메모리 표면이어야 합니다.
  • 보호된 표면은 다중 샘플링할 수 없습니다.
  • 메서드는 늘이기 또는 색 영역 변환을 지원하지 않습니다.
대상 표면을 잠그면 D3DLOCKED_RECT 구조에 보고된 보폭이 보호된 표면의 보폭과 일치하지 않을 수 있습니다. 그러나 데이터를 해석할 때는 항상 보호된 표면의 보폭을 사용합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 R2 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 d3d9.h

추가 정보

GPU 기반 콘텐츠 보호

IDirect3DCryptoSession9