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:
- Rufen Sie IDirect3DCryptoSession9::GetSurfacePitch auf, um den Schritt der geschützten Oberfläche zu erhalten.
- Rufen Sie die IDirect3DDevice9Video::GetContentProtectionCaps-Methode auf, um den Wert der Elemente BufferAlignmentStart und BlockAlignmentSize in der D3DCONTENTPROTECTIONCAPS-Struktur abzurufen.
- Berechnen Sie die Mindestgröße des Oberflächenspeichers als SysMemSize = protected surface stride × geschützte Oberflächenhöhe.
- Fügen Sie padding hinzu, um die Werte von BufferAlignmentStart und BlockAlignmentSize zu berücksichtigen.
- Ordnen Sie einen Puffer im Systemspeicher zu, deren Größe gleich SysMemSize (einschließlich Auffüllung) ist.
- 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 Quelloberfläche zu erstellen. Übergeben Sie den speicherorientierten Zeiger als Handle für freigegebene Ressourcen (pSharedHandle).
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 |