Condividi tramite


Metodo IDirect3DCryptoSession9::EncryptionBlt (d3d9.h)

Legge i dati crittografati da una superficie protetta.

Sintassi

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

Parametri

pSrcSurface

Puntatore alla superficie protetta.

pDstSurface

Puntatore a una superficie che riceve i dati crittografati.

DstSurfaceSize

Dimensioni della memoria della superficie a cui pDstSurface punta, in byte. Le dimensioni devono essere allineate al valore di BlockAlignmentSize nella struttura delle funzionalità del driver; vedere Osservazioni.

pIV

Puntatore a un buffer che riceve il vettore di inizializzazione (IV). Il chiamante alloca questo buffer, ma il driver genera l'IV.

Se il tipo di crittografia è D3DCRYPTOTYPE_AES128_CTR (AES-CTR a 128 bit), pIV punta a una struttura D3DAES_CTR_IV . Quando il driver genera il primo IV, inizializza la struttura in un numero casuale. Per ogni IV successivo, il driver incrementa semplicemente il membro IV della struttura, assicurando che il valore aumenti sempre. Questa procedura consente all'applicazione di verificare che lo stesso IV non venga mai usato più volte con la stessa coppia di chiavi.

Per altri tipi di crittografia, potrebbe essere usata una struttura diversa o la crittografia potrebbe non usare un IV.

Valore restituito

Se questo metodo ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .

Commenti

Se il driver supporta questo metodo, imposta il flag D3DCPCAPS_ENCRYPTEDREADBACK nella struttura delle funzionalità restituita dal metodo IDirect3DDevice9Video::GetContentProtectionCaps .

Se il driver imposta il flag delle funzionalità D3DCPCAPS_ENCRYPTEDREADBACKKEY , significa che il driver usa una chiave separata per crittografare i dati. Per ottenere questa chiave, chiamare il metodo IDirect3DCryptoSession9::GetEncryptionBltKey . In caso contrario, il driver usa la chiave di sessione per crittografare i dati.

Allocare la superficie di destinazione (pDstSurface) come segue:

  1. Chiama IDirect3DCryptoSession9::GetSurfacePitch per ottenere lo stride della superficie protetta.
  2. Chiamare il metodo GetContentProtectionCaps per ottenere il valore dei membri BufferAlignmentStart e BlockAlignmentSize nella struttura D3DCONTENTPROTECTIONCAPS .
  3. Calcolare le dimensioni minime della memoria della superficie come SysMemSize = stride di superficie protetta × altezza della superficie protetta.
  4. Aggiungere la spaziatura interna per contenere i valori di BufferAlignmentStart e BlockAlignmentSize.
  5. Allocare un buffer nella memoria di sistema, con dimensioni uguali a SysMemSize (inclusa la spaziatura interna).
  6. Se l'indirizzo del buffer di memoria di sistema non è allineato al valore di BufferAlignmentStart, calcolare un puntatore allineato alla memoria che rappresenta un offset dall'inizio del buffer.
  7. Chiama IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx per creare la superficie di destinazione. Passare il puntatore allineato alla memoria come handle di risorsa condivisa (pSharedHandle).
Questo metodo presenta le limitazioni seguenti:
  • Il metodo non può leggere sottorestri e superfici parzialmente crittografate.
  • La superficie protetta deve essere una superficie fuori schermo o una destinazione di rendering.
  • La superficie di destinazione deve essere una superficie di memoria di sistema, creata con l'allineamento appropriato, come descritto in precedenza.
  • Non è possibile eseguire il multicampionamento della superficie protetta.
  • Il metodo non supporta l'estensione o la conversione dello spazio dei colori.
Se si blocca la superficie di destinazione, lo stride segnalato nella struttura D3DLOCKED_RECT potrebbe non corrispondere allo stride della superficie protetta. Quando si interpretano i dati, tuttavia, usare sempre lo stride della superficie protetta.

Requisiti

Requisito Valore
Client minimo supportato Windows 7 [solo app desktop]
Server minimo supportato Windows Server 2008 R2 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione d3d9.h

Vedi anche

Protezione del contenuto basata su GPU

IDirect3DCryptoSession9