Metodo IDirect3DCryptoSession9::D ecryptionBlt (d3d9.h)
Scrive i dati crittografati in una superficie protetta.
Sintassi
HRESULT DecryptionBlt(
IDirect3DSurface9 *pSrcSurface,
IDirect3DSurface9 *pDstSurface,
UINT SrcSurfaceSize,
D3DENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
VOID *pContentKey,
VOID *pIV
);
Parametri
pSrcSurface
Puntatore alla superficie contenente i dati di origine.
pDstSurface
Puntatore alla superficie protetta in cui vengono scritti i dati crittografati.
SrcSurfaceSize
Dimensioni della memoria di superficie a cui pSrcSurface punta, in byte. Le dimensioni devono essere allineate al valore di BlockAlignmentSize nella struttura delle funzionalità del driver; vedere Osservazioni.
pEncryptedBlockInfo
Puntatore a una struttura D3DENCRYPTED_BLOCK_INFO o NULL.
Se il driver supporta buffer parzialmente crittografati, pEncryptedBlockInfo indica quali parti del buffer vengono crittografate. Se l'intera superficie è crittografata, impostare questo parametro su NULL.
Per verificare se il driver supporta buffer parzialmente crittografati, chiamare IDirect3DDevice9Video::GetContentProtectionCaps e verificare la presenza del flag di funzionalità D3DCPCAPS_PARTIALDECRYPTION . Se il driver non supporta buffer parzialmente crittografati, impostare questo parametro su NULL.
pContentKey
Puntatore a un buffer contenente una chiave di crittografia del contenuto o NULL. Per verificare se il driver supporta l'uso delle chiavi di contenuto, chiamare IDirect3DDevice9Video::GetContentProtectionCaps e verificare la presenza del flag di funzionalità D3DCPCAPS_CONTENTKEY .
Se il driver supporta chiavi di contenuto, usare la chiave del contenuto per crittografare l'area. Crittografare la chiave del contenuto usando la chiave di sessione e posizionare il testo di crittografia risultante in pContentKey. Se il driver non supporta le chiavi di contenuto, usare la chiave di sessione per crittografare la superficie e impostare pContentKey su NULL.
pIV
Puntatore a un buffer contenente il vettore di inizializzazione (IV).
Se il tipo di crittografia è D3DCRYPTOTYPE_AES128_CTR, il buffer è una struttura D3DAES_CTR_IV . Il chiamante alloca la struttura e genera il IV. Quando si genera il primo IV, inizializzare la struttura in un numero casuale. Per ogni IV successivo, aumentare semplicemente il membro IV della struttura, assicurandosi che il valore aumenti sempre. Questa procedura consente al driver di verificare che lo stesso IV non venga mai usato più di una volta con la stessa coppia di chiavi.
Per altri tipi di crittografia, potrebbe essere usata una struttura diversa oppure 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
Non tutti i driver o hardware supportano questa funzionalità per tutti i tipi di crittografia.
La superficie di origine deve essere una superficie di memoria di sistema creata con le restrizioni di allineamento appropriate. Il buffer deve essere abbastanza grande per ospitare il passo e l'altezza della superficie protetta, oltre alla spaziatura interna per soddisfare le restrizioni di allineamento iniziale e le dimensioni del trasferimento in blocchi.
In particolare, è necessario allocare la superficie di origine come segue:
- Chiamare IDirect3DCryptoSession9::GetSurfacePitch per ottenere lo stride dell'area protetta.
- Chiamare il metodo IDirect3DDevice9Video::GetContentProtectionCaps per ottenere il valore dei membri BufferAlignmentStart e BlockAlignmentSize nella struttura D3DCONTENTPROTECTIONCAPS.
- Calcolare le dimensioni minime della memoria di superficie come SysMemSize = stride di superficie protetta × altezza della superficie protetta.
- Aggiungere spaziatura interna per contenere i valori di BufferAlignmentStart e BlockAlignmentSize.
- Allocare un buffer in memoria di sistema, con dimensioni uguali a SysMemSize (incluso il riempimento).
- Se l'indirizzo del buffer di memoria di sistema non è allineato al valore di BufferAlignmentStart, calcolare un puntatore allineato alla memoria che è un offset dall'inizio del buffer.
- Chiamare IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx per creare la superficie di origine. Passare il puntatore allineato alla memoria come handle di risorse condiviso (pSharedHandle).
Questo metodo non supporta la scrittura in sottorectangles della superficie.
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 |