IDirect3DCryptoSession9::D ecryptionBlt-Methode (d3d9.h)

Schreibt verschlüsselte Daten auf eine geschützte Oberfläche.

Syntax

HRESULT DecryptionBlt(
  IDirect3DSurface9       *pSrcSurface,
  IDirect3DSurface9       *pDstSurface,
  UINT                    SrcSurfaceSize,
  D3DENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
  VOID                    *pContentKey,
  VOID                    *pIV
);

Parameter

pSrcSurface

Ein Zeiger auf die Oberfläche, die die Quelldaten enthält.

pDstSurface

Ein Zeiger auf die geschützte Oberfläche, auf der die verschlüsselten Daten geschrieben werden.

SrcSurfaceSize

Die Größe des Oberflächenspeichers, auf den pSrcSurface verweist, in Bytes. Die Größe muss an dem Wert von BlockAlignmentSize in der Struktur der Treiberfunktionen ausgerichtet werden. siehe Hinweise.

pEncryptedBlockInfo

Ein Zeiger auf eine D3DENCRYPTED_BLOCK_INFO-Struktur oder NULL.

Wenn der Treiber teilweise verschlüsselte Puffer unterstützt, gibt pEncryptedBlockInfo an, welche Teile des Puffers verschlüsselt sind. Wenn die gesamte Oberfläche verschlüsselt ist, legen Sie diesen Parameter auf NULL fest.

Um zu überprüfen, ob der Treiber teilweise verschlüsselte Puffer unterstützt, rufen Sie IDirect3DDevice9Video::GetContentProtectionCaps auf, und suchen Sie nach dem D3DCPCAPS_PARTIALDECRYPTION-Funktionenflag. Wenn der Treiber teilweise verschlüsselte Puffer nicht unterstützt, legen Sie diesen Parameter auf NULL fest.

pContentKey

Ein Zeiger auf einen Puffer, der einen Inhaltsverschlüsselungsschlüssel ( NULL) enthält. Rufen Sie IDirect3DDevice9Video::GetContentProtectionCaps auf, um abzufragen, ob D3DCPCAPS_CONTENTKEY der Treiber die Verwendung von Inhaltsschlüsseln unterstützt.

Wenn der Treiber Inhaltsschlüssel unterstützt, verwenden Sie den Inhaltsschlüssel, um die Oberfläche zu verschlüsseln. Verschlüsseln Sie den Inhaltsschlüssel mithilfe des Sitzungsschlüssels, und platzieren Sie den resultierenden Verschlüsselungstext in pContentKey. Wenn der Treiber keine Inhaltsschlüssel unterstützt, verwenden Sie den Sitzungsschlüssel, um die Oberfläche zu verschlüsseln, und legen Sie pContentKey auf NULL fest.

pIV

Ein Zeiger auf einen Puffer, der den Initialisierungsvektor (IV) enthält.

Wenn der Verschlüsselungstyp D3DCRYPTOTYPE_AES128_CTR ist, ist der Puffer eine D3DAES_CTR_IV-Struktur . Der Aufrufer weist die Struktur zu und generiert die IV. Wenn Sie die erste IV generieren, initialisieren Sie die Struktur als Zufallszahl. Erhöhen Sie für jede nachfolgende IV einfach das IV-Element der Struktur, um sicherzustellen, dass der Wert immer steigt. Mit diesem Verfahren kann der Treiber ü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 keine IV.

Rückgabewert

Wenn diese Methode erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.

Hinweise

Nicht alle Hardware oder Treiber unterstützen diese Funktionalität für alle Kryptografietypen.

Die Quelloberfläche muss eine Systemspeicheroberfläche sein, die mit den richtigen Ausrichtungseinschränkungen erstellt wurde. Der Puffer muss groß genug sein, um die Neigung und Höhe der geschützten Oberfläche aufzunehmen, sowie die Polsterung, um die Ausgangsausrichtungseinschränkungen und die Blockübertragungsgröße zu berücksichtigen.

Insbesondere sollten Sie die Quelloberfläche wie folgt zuordnen:

  1. Rufen Sie IDirect3DCryptoSession9::GetSurfacePitch auf, um den Schritt der geschützten Oberfläche zu erhalten.
  2. Rufen Sie die IDirect3DDevice9Video::GetContentProtectionCaps-Methode auf, um den Wert der Elemente BufferAlignmentStart und BlockAlignmentSize in der D3DCONTENTPROTECTIONCAPS-Struktur abzurufen.
  3. Berechnen Sie die Mindestgröße des Oberflächenspeichers als SysMemSize = protected surface stride × geschützte Oberflächenhöhe.
  4. Fügen Sie padding hinzu, um die Werte von BufferAlignmentStart und BlockAlignmentSize zu berücksichtigen.
  5. Ordnen Sie einen Puffer im Systemspeicher zu, deren Größe gleich SysMemSize (einschließlich Auffüllung) ist.
  6. 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.
  7. Rufen Sie IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx auf, um die Quelloberfläche zu erstellen. Übergeben Sie den speicherorientierten Zeiger als Handle für freigegebene Ressourcen (pSharedHandle).
Wenn Sie die Oberfläche sperren, stimmt der in der D3DLOCKED_RECT-Struktur gemeldete Schritt möglicherweise nicht mit dem Schritt der geschützten Oberfläche überein. Wenn Sie die Daten interpretieren, verwenden Sie jedoch immer den Schritt der geschützten Oberfläche.

Diese Methode unterstützt das Schreiben in Unterrectangles der Oberfläche nicht.

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

Weitere Informationen

GPU-basierter Inhaltsschutz

IDirect3DCryptoSession9