Método IDirect3DCryptoSession9::D ecryptionBlt (d3d9.h)
Grava dados criptografados em uma superfície protegida.
Sintaxe
HRESULT DecryptionBlt(
IDirect3DSurface9 *pSrcSurface,
IDirect3DSurface9 *pDstSurface,
UINT SrcSurfaceSize,
D3DENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
VOID *pContentKey,
VOID *pIV
);
Parâmetros
pSrcSurface
Um ponteiro para a superfície que contém os dados de origem.
pDstSurface
Um ponteiro para a superfície protegida em que os dados criptografados são gravados.
SrcSurfaceSize
O tamanho da memória de superfície para a qual pSrcSurface aponta, em bytes. O tamanho deve ser alinhado ao valor de BlockAlignmentSize na estrutura de recursos do driver; consulte Comentários.
pEncryptedBlockInfo
Um ponteiro para uma estrutura de D3DENCRYPTED_BLOCK_INFO ou NULL.
Se o driver der suporte a buffers parcialmente criptografados, pEncryptedBlockInfo indicará quais partes do buffer serão criptografadas. Se toda a superfície for criptografada, defina esse parâmetro como NULL.
Para marcar se o driver dá suporte a buffers parcialmente criptografados, chame IDirect3DDevice9Video::GetContentProtectionCaps e marcar para o sinalizador de recursos D3DCPCAPS_PARTIALDECRYPTION. Se o driver não der suporte a buffers parcialmente criptografados, defina esse parâmetro como NULL.
pContentKey
Um ponteiro para um buffer que contém uma chave de criptografia de conteúdo ou NULL. Para consultar se o driver dá suporte ao uso de chaves de conteúdo, chame IDirect3DDevice9Video::GetContentProtectionCaps e marcar para o sinalizador de recursos D3DCPCAPS_CONTENTKEY.
Se o driver der suporte a chaves de conteúdo, use a chave de conteúdo para criptografar a superfície. Criptografe a chave de conteúdo usando a chave de sessão e coloque o texto de codificação resultante em pContentKey. Se o driver não der suporte a chaves de conteúdo, use a chave de sessão para criptografar a superfície e defina pContentKey como NULL.
pIV
Um ponteiro para um buffer que contém o IV (vetor de inicialização).
Se o tipo de criptografia for D3DCRYPTOTYPE_AES128_CTR, o buffer será uma estrutura D3DAES_CTR_IV . O chamador aloca a estrutura e gera o IV. Ao gerar o primeiro IV, inicialize a estrutura para um número aleatório. Para cada IV subsequente, basta incrementar o membro IV da estrutura, garantindo que o valor sempre aumente. Esse procedimento permite que o driver 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
Nem todos os drivers ou hardware dão suporte a essa funcionalidade para todos os tipos criptográficos.
A superfície de origem deve ser uma superfície de memória do sistema criada com as restrições de alinhamento adequadas. O buffer deve ser grande o suficiente para acomodar a inclinação e a altura da superfície protegida, além de preenchimento para acomodar as restrições de alinhamento inicial e o tamanho da transferência de bloco.
Especificamente, você deve alocar a superfície de origem da seguinte maneira:
- Chame IDirect3DCryptoSession9::GetSurfacePitch para obter o passo da superfície protegida.
- Chame o método IDirect3DDevice9Video::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 origem. Passe o ponteiro alinhado à memória como o identificador de recurso compartilhado (pSharedHandle).
Esse método não dá suporte à gravação em subrectangles da superfície.
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 |