DDI protezione del contenuto
Questa sezione si applica solo a Windows 7 e versioni successive e Windows Server 2008 R2 e versioni successive del sistema operativo Windows.
Content Protection DDI è un'estensione per l'DDI direct3D versione 9 per proteggere il video. Content Protection DDI è costituito dai punti di ingresso descritti in questa sezione.
Funzioni DDI DDI necessarie per la protezione del contenuto
Se la protezione del contenuto viene implementata nel driver di visualizzazione in modalità utente, il driver deve supportare le funzioni DDI di Protezione contenuto seguenti:
La funzione CreateAuthenticatedChannel crea un canale che il runtime Direct3D e il driver può usare per impostare e eseguire query di protezione.
La funzione AuthenticationdChannelKeyExchange negozia la chiave di sessione.
La funzione QueryAuthenticatedChannel esegue una query su un canale autenticato per funzionalità e informazioni sullo stato.
La funzione ConfigureAuthenticatedChannel imposta lo stato all'interno di un canale autenticato.
La funzione DestroyAuthenticatedChannel rilascia risorse per un canale autenticato.
La funzione CreateCryptoSession crea una sessione di crittografia usata dal runtime Direct3D per gestire una chiave di sessione e per eseguire operazioni di crittografia in e fuori memoria protetta.
La funzione CryptoSessionKeyExchange negozia la chiave di sessione.
La funzione DestroyCryptoSession rilascia le risorse per una sessione di crittografia.
Funzionalità di protezione dei contenuti
Il driver di visualizzazione in modalità utente segnala solo funzionalità di protezione del contenuto se supporta ognuna delle funzioni DDI necessarie per la protezione dei contenuti precedente. I valori di D3DDDICAPS_TYPE seguenti vengono usati dal runtime Direct3D per recuperare informazioni sulle funzionalità di protezione del contenuto supportate dal driver di visualizzazione in modalità utente. Il runtime imposta questi valori D3DDDICAPS_TYPE nel membro Type della struttura D3DDDIARG_GETCAPS che il parametro pData della funzione GetCaps del driver punta quando il runtime chiama GetCaps.
D3DDDICAPS_GETCONTENTPROTECTIONCAPS
Il runtime fornisce un puntatore a una struttura DDICONTENTPROTECTIONCAPS per la combinazione di crittografia e decodifica specifica che il driver deve usare. Il driver restituisce un puntatore a una struttura D3DCONTENTPROTECTIONCAPS popolata che descrive le funzionalità di protezione del contenuto del driver per la combinazione di crittografia e decodifica. Per altre informazioni su D3DCONTENTPROTECTIONCAPS, vedere la documentazione di DirectX SDK.
D3DDDICAPS_GETCERTIFICATESIZE
Il driver fornisce un puntatore a un numero che specifica le dimensioni, in byte, del certificato del driver utilizzato per un canale o un tipo di crittografia. Il runtime Direct3D usa quindi questa dimensione per allocare un buffer per contenere le informazioni sul certificato ricevute dal runtime quando il runtime chiama GetCaps con D3DDDICAPS_GETCERTIFICATE.
D3DDDICAPS_GETCERTIFICATE
Il runtime fornisce un puntatore a una struttura DDICERTIFICATEINFO che descrive il certificato che il driver deve recuperare.
Per un canale autenticato, il driver usa il certificato OPM esistente, ovvero un certificato X.509 firmato da Microsoft.
Un'applicazione può eseguire query sul certificato del driver per determinare le informazioni seguenti:
Indica se il driver è attendibile.
Se il driver viene revocato.
Chiave pubblica del driver. L'applicazione usa la chiave pubblica del driver per stabilire una chiave di sessione per un canale autenticato usato per l'autenticazione.
Una chiamata a GetCaps con D3DDDICAPS_GETCERTIFICATE set non riesce se viene chiamata per il canale autenticato Direct3D 9 perché questo canale non supporta un certificato o un'autenticazione.
Per una sessione di crittografia, il driver restituisce il relativo certificato per il tipo di crittografia specificato. A seconda del tipo di crittografia e dello scambio di chiavi usato, un certificato potrebbe o non essere usato. È anche possibile che diversi tipi di crittografia possano usare certificati diversi.
Funzioni DDI DDI facoltative per la protezione del contenuto
Il driver può supportare facoltativamente le funzioni DDI di Protezione contenuto seguenti:
La funzione EncryptionBlt legge i dati crittografati da una superficie protetta.
La funzione GetPitch recupera il passo di una superficie protetta.
La funzione StartSessionKeyRefresh restituisce un numero casuale che il decodificatore/applicazione e l'hardware possono successivamente usare per eseguire un'operazione OR esclusiva (XOR) con la chiave di sessione.
La funzione FinishSessionKeyRefresh indica che tutti i buffer di quel momento useranno il valore della chiave di sessione aggiornato.
La funzione GetEncryptionBltKey restituisce la chiave usata per decrittografare i dati restituiti dalla funzione EncryptionBlt del driver.
La funzione DecryptionBlt scrive i dati in una superficie protetta.
Risorse protette dal contenuto
I flag di D3DDDI_RESOURCEFLAGS seguenti vengono usati dal runtime Direct3D per il contenuto protetto. Il runtime imposta questi flag D3DDDI_RESOURCEFLAGS nel membro Flags della struttura D3DDDIARG_CREATERESOURCE a cui punta il parametro pResource della funzione CreateResource del driver quando il runtime chiama CreateResource.
RestrictedContent
La risorsa potrebbe contenere contenuto protetto. Un'applicazione potrebbe o non avere abilitato in modo esplicito la protezione del contenuto prima che l'applicazione crei una risorsa. Il driver deve assicurarsi che il runtime inserisce l'allocazione per la risorsa in un pool di memoria che può essere protetto. Il driver deve consentire la creazione di risorse protette bloccate. Tuttavia, il driver deve eseguire in modo esplicito le chiamate alla funzione Lock per bloccare queste superfici mentre la protezione del contenuto è abilitata.
RestrictSharedAccess
È consigliabile consentire l'accesso solo a processi specifici alla risorsa condivisa.
Il driver deve limitare l'accesso condiviso a questa risorsa. Il runtime può chiamare solo la funzione OpenResource del driver per aprire questa risorsa con dispositivi visualizzati (hDevice) all'interno del processo che ha creato la risorsa o da tali dispositivi che hanno concesso esplicitamente l'accesso tramite il canale autenticato.