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:
- Chame IDirect3DCryptoSession9::GetSurfacePitch para obter o passo da superfície protegida.
- Chame o método GetContentProtectionCaps para obter o valor dos membros BufferAlignmentStart e BlockAlignmentSize na estrutura D3DCONTENTPROTECTIONCAPS .
- Calcule o tamanho mínimo da memória da superfície como SysMemSize = avanço da superfície protegida × altura da superfície protegida.
- Adicione preenchimento para acomodar os valores de BufferAlignmentStart e BlockAlignmentSize.
- Alocar um buffer na memória do sistema, com tamanho igual a SysMemSize (incluindo preenchimento).
- 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.
- Chame IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx para criar a superfície de destino. Passe o ponteiro alinhado à memória como o identificador de recurso compartilhado (pSharedHandle).
- 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.
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 |