Bagikan melalui


Metode IDirect3DCryptoSession9::D ecryptionBlt (d3d9.h)

Menulis data terenkripsi ke permukaan yang dilindungi.

Sintaks

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

Parameter

pSrcSurface

Penunjuk ke permukaan yang berisi data sumber.

pDstSurface

Penunjuk ke permukaan yang dilindungi tempat data terenkripsi ditulis.

SrcSurfaceSize

Ukuran memori permukaan yang ditunjuk pSrcSurface , dalam byte. Ukuran harus diselaraskan dengan nilai BlockAlignmentSize dalam struktur kemampuan driver; lihat Keterangan.

pEncryptedBlockInfo

Penunjuk ke struktur D3DENCRYPTED_BLOCK_INFO , atau NULL.

Jika driver mendukung buffer yang dienkripsi sebagian, pEncryptedBlockInfo menunjukkan bagian buffer mana yang dienkripsi. Jika seluruh permukaan dienkripsi, atur parameter ini ke NULL.

Untuk memeriksa apakah driver mendukung buffer yang dienkripsi sebagian, panggil IDirect3DDevice9Video::GetContentProtectionCaps dan periksa bendera kemampuan D3DCPCAPS_PARTIALDECRYPTION . Jika driver tidak mendukung buffer yang dienkripsi sebagian, atur parameter ini ke NULL.

pContentKey

Penunjuk ke buffer yang berisi kunci enkripsi konten, atau NULL. Untuk mengkueri apakah driver mendukung penggunaan kunci konten, panggil IDirect3DDevice9Video::GetContentProtectionCaps dan periksa bendera kemampuan D3DCPCAPS_CONTENTKEY .

Jika driver mendukung kunci konten, gunakan kunci konten untuk mengenkripsi permukaan. Enkripsi kunci konten menggunakan kunci sesi, dan letakkan teks sandi yang dihasilkan di pContentKey. Jika driver tidak mendukung kunci konten, gunakan kunci sesi untuk mengenkripsi permukaan dan mengatur pContentKey ke NULL.

pIV

Penunjuk ke buffer yang berisi vektor inisialisasi (IV).

Jika jenis enkripsi D3DCRYPTOTYPE_AES128_CTR, buffer adalah struktur D3DAES_CTR_IV . Penelepon mengalokasikan struktur dan menghasilkan IV. Ketika Anda menghasilkan IV pertama, inisialisasi struktur ke angka acak. Untuk setiap IV berikutnya, cukup tambahkan anggota IV struktur, memastikan bahwa nilai selalu meningkat. Prosedur ini memungkinkan driver untuk memvalidasi bahwa IV yang sama tidak pernah digunakan lebih dari sekali dengan pasangan kunci yang sama.

Untuk jenis enkripsi lainnya, struktur yang berbeda dapat digunakan, atau enkripsi mungkin tidak menggunakan IV.

Mengembalikan nilai

Jika metode ini berhasil, metode ini mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan.

Keterangan

Tidak semua perangkat keras atau driver mendukung fungsionalitas ini untuk semua jenis kriptografi.

Permukaan sumber harus merupakan permukaan memori sistem yang dibuat dengan pembatasan perataan yang tepat. Buffer harus cukup besar untuk mengakomodasi nada dan tinggi permukaan yang dilindungi, ditambah padding untuk mengakomodasi pembatasan perataan awal dan ukuran transfer blok.

Secara khusus, Anda harus mengalokasikan permukaan sumber sebagai berikut:

  1. Panggil IDirect3DCryptoSession9::GetSurfacePitch untuk mendapatkan langkah permukaan yang dilindungi.
  2. Panggil metode IDirect3DDevice9Video::GetContentProtectionCaps untuk mendapatkan nilai anggota BufferAlignmentStart dan BlockAlignmentSize dalam struktur D3DCONTENTPROTECTIONCAPS .
  3. Hitung ukuran minimum memori permukaan sebagai SysMemSize = langkah permukaan yang dilindungi × ketinggian permukaan yang dilindungi.
  4. Tambahkan padding untuk mengakomodasi nilai BufferAlignmentStart dan BlockAlignmentSize.
  5. Alokasikan buffer dalam memori sistem, dengan ukuran yang sama dengan SysMemSize (termasuk padding).
  6. Jika alamat buffer memori sistem tidak selaras dengan nilai BufferAlignmentStart, hitung pointer selaras memori yang merupakan offset dari awal buffer.
  7. Panggil IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx untuk membuat permukaan sumber. Teruskan penunjuk yang selaras dengan memori sebagai handel sumber daya bersama (pSharedHandle).
Jika Anda mengunci permukaan, langkah yang dilaporkan dalam struktur D3DLOCKED_RECT mungkin tidak cocok dengan langkah permukaan yang dilindungi. Namun, saat Anda menafsirkan data, selalu gunakan langkah-langkah permukaan yang dilindungi.

Metode ini tidak mendukung penulisan ke sub-persegi permukaan.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 7 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 R2 [hanya aplikasi desktop]
Target Platform Windows
Header d3d9.h

Lihat juga

Perlindungan Konten Berbasis GPU

IDirect3DCryptoSession9