IDirect3DCryptoSession9::D ecryptionBlt 메서드(d3d9.h)
보호된 표면에 암호화된 데이터를 씁니다.
구문
HRESULT DecryptionBlt(
IDirect3DSurface9 *pSrcSurface,
IDirect3DSurface9 *pDstSurface,
UINT SrcSurfaceSize,
D3DENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
VOID *pContentKey,
VOID *pIV
);
매개 변수
pSrcSurface
원본 데이터를 포함하는 표면에 대한 포인터입니다.
pDstSurface
암호화된 데이터가 기록되는 보호된 표면에 대한 포인터입니다.
SrcSurfaceSize
pSrcSurface가 가리키는 표면 메모리의 크기(바이트)입니다. 크기는 드라이버 기능 구조에서 BlockAlignmentSize 값에 맞춰야 합니다. 설명을 참조하세요.
pEncryptedBlockInfo
D3DENCRYPTED_BLOCK_INFO 구조체 또는 NULL에 대한 포인터입니다.
드라이버가 부분적으로 암호화된 버퍼를 지원하는 경우 pEncryptedBlockInfo 는 암호화된 버퍼 부분을 나타냅니다. 전체 표면이 암호화된 경우 이 매개 변수를 NULL로 설정합니다.
드라이버가 부분적으로 암호화된 버퍼를 지원하는지 여부를 검사 D3DCPCAPS_PARTIALDECRYPTION 기능 플래그에 대해 IDirect3DDevice9Video::GetContentProtectionCaps 및 검사 호출합니다. 드라이버가 부분적으로 암호화된 버퍼를 지원하지 않는 경우 이 매개 변수를 NULL로 설정합니다.
pContentKey
콘텐츠 암호화 키 또는 NULL을 포함하는 버퍼에 대한 포인터입니다. 드라이버가 콘텐츠 키 사용을 지원하는지 여부를 쿼리하려면 IDirect3DDevice9Video::GetContentProtectionCaps를 호출하고 D3DCPCAPS_CONTENTKEY 기능 플래그에 대한 검사.
드라이버가 콘텐츠 키를 지원하는 경우 콘텐츠 키를 사용하여 표면을 암호화합니다. 세션 키를 사용하여 콘텐츠 키를 암호화하고 결과 암호 텍스트를 pContentKey에 배치합니다. 드라이버가 콘텐츠 키를 지원하지 않는 경우 세션 키를 사용하여 표면을 암호화하고 pContentKey 를 NULL로 설정합니다.
pIV
IV(초기화 벡터)를 포함하는 버퍼에 대한 포인터입니다.
암호화 유형이 D3DCRYPTOTYPE_AES128_CTR 경우 버퍼는 D3DAES_CTR_IV 구조입니다. 호출자는 구조를 할당하고 IV를 생성합니다. 첫 번째 IV를 생성할 때 구조체를 난수로 초기화합니다. 이후의 각 IV에 대해 단순히 구조체의 IV 멤버를 증가하여 값이 항상 증가하도록 합니다. 이 절차를 통해 드라이버는 동일한 IV가 동일한 키 쌍에서 두 번 이상 사용되지 않는지 확인할 수 있습니다.
다른 암호화 유형의 경우 다른 구조가 사용되거나 암호화가 IV를 사용하지 않을 수 있습니다.
반환 값
메서드가 성공하면 S_OK를 반환하고, 그러지 않으면 HRESULT 오류 코드를 반환합니다.
설명
모든 하드웨어 또는 드라이버가 모든 암호화 유형에 대해 이 기능을 지원하는 것은 아닙니다.
원본 표면은 적절한 맞춤 제한으로 만든 시스템 메모리 표면이어야 합니다. 버퍼는 보호된 표면의 피치 및 높이와 시작 맞춤 제한 및 블록 전송 크기를 수용할 수 있는 패딩을 수용할 수 있을 만큼 커야 합니다.
특히 다음과 같이 원본 표면을 할당해야 합니다.
- IDirect3DCryptoSession9::GetSurfacePitch를 호출하여 보호된 표면의 보폭을 가져옵니다.
- IDirect3DDevice9Video::GetContentProtectionCaps 메서드를 호출하여 D3DCONTENTPROTECTIONCAPS 구조체에서 BufferAlignmentStart 및 BlockAlignmentSize 멤버의 값을 가져옵니다.
- Surface 메모리의 최소 크기를 SysMemSize = 보호된 표면 보폭 × 보호된 표면 높이로 계산합니다.
- BufferAlignmentStart 및 BlockAlignmentSize 값을 수용할 패딩을 추가합니다.
- 크기가 SysMemSize(패딩 포함)와 같은 시스템 메모리에 버퍼를 할당합니다.
- 시스템 메모리 버퍼의 주소가 BufferAlignmentStart 값에 정렬되지 않은 경우 버퍼 시작부터 오프셋인 메모리 정렬 포인터를 계산합니다.
- IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx를 호출하여 원본 표면을 만듭니다. 메모리 정렬 포인터를 공유 리소스 핸들(pSharedHandle)로 전달합니다.
이 메서드는 표면의 하위 사각형에 쓰기를 지원하지 않습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 7 [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 R2 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | d3d9.h |