次の方法で共有


IDirect3DCryptoSession9::EncryptionBlt メソッド (d3d9.h)

保護されたサーフェスから暗号化されたデータを読み取ります。

構文

HRESULT EncryptionBlt(
  IDirect3DSurface9 *pSrcSurface,
  IDirect3DSurface9 *pDstSurface,
  UINT              DstSurfaceSize,
  VOID              *pIV
);

パラメーター

pSrcSurface

保護されたサーフェスへのポインター。

pDstSurface

暗号化されたデータを受け取るサーフェスへのポインター。

DstSurfaceSize

pDstSurface が指すサーフェス メモリのサイズ (バイト単位)。 サイズは、ドライバー機能構造の BlockAlignmentSize の値に合わせる必要があります。「解説」を参照してください。

pIV

初期化ベクトル (IV) を受け取るバッファーへのポインター。 呼び出し元はこのバッファーを割り当てますが、ドライバーは IV を生成します。

暗号化の種類が D3DCRYPTOTYPE_AES128_CTR (128 ビット AES-CTR) の場合、 pIVD3DAES_CTR_IV 構造体を指します。 ドライバーは、最初の IV を生成するときに、構造体を乱数に初期化します。 後続の IV ごとに、ドライバーは構造体の IV メンバーをインクリメントするだけで、値が常に増加します。 この手順により、アプリケーションは、同じ IV が同じキー ペアで複数回使用されることはないことを検証できます。

他の暗号化の種類の場合は、別の構造を使用するか、暗号化で IV を使用しない可能性があります。

戻り値

このメソッドは、成功すると S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。

注釈

ドライバーは、このメソッドをサポートしている場合は、IDirect3DDevice9Video::GetContentProtectionCaps メソッドによって返される機能構造のD3DCPCAPS_ENCRYPTEDREADBACK フラグを設定します。

ドライバーが D3DCPCAPS_ENCRYPTEDREADBACKKEY 機能フラグを設定する場合は、ドライバーが別のキーを使用してデータを暗号化することを意味します。 このキーを取得するには、 IDirect3DCryptoSession9::GetEncryptionBltKey メソッドを呼び出します。 それ以外の場合、ドライバーはセッション キーを使用してデータを暗号化します。

宛先サーフェス (pDstSurface) を次のように割り当てます。

  1. IDirect3DCryptoSession9::GetSurfacePitch を呼び出して、保護されたサーフェスのストライドを取得します。
  2. GetContentProtectionCaps メソッドを呼び出して、D3DCONTENTPROTECTIONCAPS構造体の BufferAlignmentStart メンバーと BlockAlignmentSize メンバーの値を取得します。
  3. サーフェス メモリの最小サイズを SysMemSize = 保護されたサーフェス ストライド×保護されたサーフェスの高さとして計算します。
  4. BufferAlignmentStart と BlockAlignmentSize の値に合わせてパディングを追加します
  5. SysMemSize (パディングを含む) と同じサイズのバッファーをシステム メモリに割り当てます。
  6. システム メモリ バッファーのアドレスが BufferAlignmentStart の値に揃っていない場合は、バッファーの先頭からのオフセットであるメモリアラインポインターを計算します。
  7. IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx を呼び出して、宛先サーフェスを作成します。 メモリアラインポインターを共有リソース ハンドル (pSharedHandle) として渡します。
このメソッドには、次の制限があります。
  • メソッドは、サブrectanglesまたは部分的に暗号化されたサーフェスを読み取ることができません。
  • 保護されたサーフェスは、オフスクリーンプレーンサーフェスまたはレンダーターゲットである必要があります。
  • 先のサーフェスは、前に説明したように、適切な配置で作成されたシステム メモリ サーフェスである必要があります。
  • 保護されたサーフェスをマルチサンプリングすることはできません。
  • メソッドは、ストレッチ変換または色空間変換をサポートしていません。
ターゲット サーフェスをロックすると、 D3DLOCKED_RECT 構造で報告されるストライドが、保護されたサーフェスのストライドと一致しない可能性があります。 ただし、データを解釈するときは、常に保護されたサーフェスのストライドを使用します。

要件

要件
サポートされている最小のクライアント Windows 7 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 R2 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー d3d9.h

こちらもご覧ください

GPU ベースのコンテンツ保護

IDirect3DCryptoSession9