Compartilhar via


Método IDirect3DCryptoSession9::EncryptionBlt (d3d9.h)

Lê dados criptografados de uma superfície protegida.

Sintaxe

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

Parâmetros

pSrcSurface

Ponteiro para a superfície protegida.

pDstSurface

Ponteiro para uma superfície que recebe os dados criptografados.

DstSurfaceSize

O tamanho da memória da superfície para a qual pDstSurface aponta, em bytes. O tamanho deve ser alinhado ao valor de BlockAlignmentSize na estrutura de recursos do driver; consulte Comentários.

pIV

Ponteiro para um buffer que recebe o IV (vetor de inicialização). O chamador aloca esse buffer, mas o driver gera o IV.

Se o tipo de criptografia for D3DCRYPTOTYPE_AES128_CTR (AES-CTR de 128 bits), pIV apontará para uma estrutura de D3DAES_CTR_IV . Quando o driver gera o primeiro IV, ele inicializa a estrutura para um número aleatório. Para cada IV subsequente, o driver simplesmente incrementa o membro IV da estrutura, garantindo que o valor sempre aumente. Esse procedimento permite que o aplicativo valide se o mesmo IV nunca é usado mais de uma vez com o mesmo par de chaves.

Para outros tipos de criptografia, uma estrutura diferente pode ser usada ou a criptografia pode não usar um IV.

Retornar valor

Se o método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

Se o driver der suporte a esse método, ele definirá o sinalizador D3DCPCAPS_ENCRYPTEDREADBACK na estrutura de recursos retornada pelo método IDirect3DDevice9Video::GetContentProtectionCaps .

Se o driver definir o sinalizador D3DCPCAPS_ENCRYPTEDREADBACKKEY funcionalidades, isso significa que o driver usa uma chave separada para criptografar os dados. Para obter essa chave, chame o método IDirect3DCryptoSession9::GetEncryptionBltKey . Caso contrário, o driver usará a chave de sessão para criptografar os dados.

Aloque a superfície de destino (pDstSurface) da seguinte maneira:

  1. Chame IDirect3DCryptoSession9::GetSurfacePitch para obter o passo da superfície protegida.
  2. Chame o método GetContentProtectionCaps para obter o valor dos membros BufferAlignmentStart e BlockAlignmentSize na estrutura D3DCONTENTPROTECTIONCAPS .
  3. Calcule o tamanho mínimo da memória da superfície como SysMemSize = avanço da superfície protegida × altura da superfície protegida.
  4. Adicione preenchimento para acomodar os valores de BufferAlignmentStart e BlockAlignmentSize.
  5. Alocar um buffer na memória do sistema, com tamanho igual a SysMemSize (incluindo preenchimento).
  6. Se o endereço do buffer de memória do sistema não estiver alinhado ao valor de BufferAlignmentStart, calcule um ponteiro alinhado à memória que seja um deslocamento do início do buffer.
  7. Chame IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx para criar a superfície de destino. Passe o ponteiro alinhado à memória como o identificador de recurso compartilhado (pSharedHandle).
Esse método tem as seguintes limitações:
  • O método não pode ler subrectangles ou superfícies parcialmente criptografadas.
  • A superfície protegida deve ser uma superfície sem formatação fora da tela ou um destino de renderização.
  • A superfície de destino deve ser uma superfície de memória do sistema, criada com o alinhamento adequado, conforme descrito anteriormente.
  • A superfície protegida não pode ser de várias superfícies.
  • O método não dá suporte à conversão de alongamento ou colorspace.
Se você bloquear a superfície de destino, o passo relatado na estrutura D3DLOCKED_RECT poderá não corresponder ao passo da superfície protegida. No entanto, ao interpretar os dados, sempre use o passo a passo da superfície protegida.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho d3d9.h

Confira também

Proteção de conteúdo baseada em GPU

IDirect3DCryptoSession9