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:
- Chiama IDirect3DCryptoSession9::GetSurfacePitch per ottenere lo stride della superficie protetta.
- Chiamare il metodo GetContentProtectionCaps per ottenere il valore dei membri BufferAlignmentStart e BlockAlignmentSize nella struttura D3DCONTENTPROTECTIONCAPS .
- Calcolare le dimensioni minime della memoria della superficie come SysMemSize = stride di superficie protetta × altezza della superficie protetta.
- Aggiungere la spaziatura interna per contenere i valori di BufferAlignmentStart e BlockAlignmentSize.
- Allocare un buffer nella memoria di sistema, con dimensioni uguali a SysMemSize (inclusa la spaziatura interna).
- 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.
- Chiama IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx per creare la superficie di destinazione. Passare il puntatore allineato alla memoria come handle di risorsa condivisa (pSharedHandle).
- 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.
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 |