IDirect3DCryptoSession9::EncryptionBlt-Methode (d3d9.h)
Liest verschlüsselte Daten von einer geschützten Oberfläche.
Syntax
HRESULT EncryptionBlt(
IDirect3DSurface9 *pSrcSurface,
IDirect3DSurface9 *pDstSurface,
UINT DstSurfaceSize,
VOID *pIV
);
Parameter
pSrcSurface
Zeiger auf die geschützte Oberfläche.
pDstSurface
Zeiger auf eine Oberfläche, die die verschlüsselten Daten empfängt.
DstSurfaceSize
Die Größe des Oberflächenspeichers, auf den pDstSurface in Bytes verweist. Die Größe muss am Wert von BlockAlignmentSize in der Struktur der Treiberfunktionen ausgerichtet werden. siehe Hinweise.
pIV
Zeiger auf einen Puffer, der den Initialisierungsvektor (IV) empfängt. Der Aufrufer ordnet diesen Puffer zu, aber der Treiber generiert den IV.
Wenn der Verschlüsselungstyp D3DCRYPTOTYPE_AES128_CTR (128-Bit-AES-CTR) ist, verweist pIV auf eine D3DAES_CTR_IV-Struktur . Wenn der Treiber den ersten IV generiert, initialisiert er die Struktur in einer Zufallszahl. Für jeden nachfolgenden IV erhöht der Fahrer einfach den IV-Member der Struktur, um sicherzustellen, dass der Wert immer steigt. Mit diesem Verfahren kann die Anwendung überprüfen, ob dieselbe IV nie mehr als einmal mit demselben Schlüsselpaar verwendet wird.
Für andere Verschlüsselungstypen kann eine andere Struktur verwendet werden, oder die Verschlüsselung verwendet möglicherweise keinen IV.
Rückgabewert
Wenn diese Methode erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.
Hinweise
Wenn der Treiber diese Methode unterstützt, wird das D3DCPCAPS_ENCRYPTEDREADBACK-Flag in der Funktionsstruktur festgelegt, die von der IDirect3DDevice9Video::GetContentProtectionCaps-Methode zurückgegeben wird.
Wenn der Treiber das D3DCPCAPS_ENCRYPTEDREADBACKKEY-Funktionsflag festlegt, bedeutet dies, dass der Treiber einen separaten Schlüssel zum Verschlüsseln der Daten verwendet. Rufen Sie zum Abrufen dieses Schlüssels die IDirect3DCryptoSession9::GetEncryptionBltKey-Methode auf. Andernfalls verwendet der Treiber den Sitzungsschlüssel, um die Daten zu verschlüsseln.
Ordnen Sie die Zieloberfläche (pDstSurface) wie folgt zu:
- Rufen Sie IDirect3DCryptoSession9::GetSurfacePitch auf, um den Schritt der geschützten Oberfläche zu erhalten.
- Rufen Sie die GetContentProtectionCaps-Methode auf, um den Wert der BufferAlignmentStart - und BlockAlignmentSize-Member in der D3DCONTENTPROTECTIONCAPS-Struktur abzurufen.
- Berechnen Sie die Mindestgröße des Oberflächenspeichers als SysMemSize = geschützte Oberflächenschritte × geschützte Oberflächenhöhe.
- Fügen Sie eine Auffüllung hinzu, um die Werte von BufferAlignmentStart und BlockAlignmentSize zu berücksichtigen.
- Weisen Sie einen Puffer im Systemspeicher zu, wobei die Größe sysMemSize (einschließlich Auffüllung) entspricht.
- Wenn die Adresse des Systemspeicherpuffers nicht am Wert von BufferAlignmentStart ausgerichtet ist, berechnen Sie einen speicherorientierten Zeiger, der ein Offset vom Anfang des Puffers ist.
- Rufen Sie IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx auf, um die Zieloberfläche zu erstellen. Übergeben Sie den speicherorientierten Zeiger als Handle für freigegebene Ressourcen (pSharedHandle).
- Die -Methode kann keine subrectangles oder teilweise verschlüsselten Oberflächen zurücklesen.
- Die geschützte Oberfläche muss entweder eine Offscreen-Oberfläche oder ein Renderziel sein.
- Die Zieloberfläche muss eine Systemspeicheroberfläche sein, die wie zuvor beschrieben mit der richtigen Ausrichtung erstellt wurde.
- Die geschützte Oberfläche kann nicht mehrfach gesampt werden.
- Die -Methode unterstützt keine Dehnung oder Farbraumkonvertierung.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 7 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 R2 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | d3d9.h |