Condividi tramite


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:

  1. Chiamare IDirect3DCryptoSession9::GetSurfacePitch per ottenere lo stride dell'area protetta.
  2. Chiamare il metodo IDirect3DDevice9Video::GetContentProtectionCaps per ottenere il valore dei membri BufferAlignmentStart e BlockAlignmentSize nella struttura D3DCONTENTPROTECTIONCAPS.
  3. Calcolare le dimensioni minime della memoria di superficie come SysMemSize = stride di superficie protetta × altezza della superficie protetta.
  4. Aggiungere spaziatura interna per contenere i valori di BufferAlignmentStart e BlockAlignmentSize.
  5. Allocare un buffer in memoria di sistema, con dimensioni uguali a SysMemSize (incluso il riempimento).
  6. 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.
  7. Chiamare IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx per creare la superficie di origine. Passare il puntatore allineato alla memoria come handle di risorse condiviso (pSharedHandle).
Se si blocca la superficie, 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.

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

Vedi anche

Protezione del contenuto basata su GPU

IDirect3DCryptoSession9