IDirect3DCryptoSession9::D ecryptionBlt メソッド (d3d9.h)

暗号化されたデータを保護されたサーフェスに書き込みます。

構文

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

パラメーター

pSrcSurface

ソース データを含むサーフェスへのポインター。

pDstSurface

暗号化されたデータが書き込まれる保護されたサーフェスへのポインター。

SrcSurfaceSize

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

pEncryptedBlockInfo

D3DENCRYPTED_BLOCK_INFO構造体 (NULL) へのポインター。

ドライバーが部分的に暗号化されたバッファーをサポートしている場合、 pEncryptedBlockInfo は、バッファーのどの部分が暗号化されているかを示します。 サーフェス全体が暗号化されている場合は、このパラメーターを NULL に設定 します

ドライバーが部分的に暗号化されたバッファーをサポートしているかどうかをチェックするには、IDirect3DDevice9Video::GetContentProtectionCaps を呼び出し、D3DCPCAPS_PARTIALDECRYPTION機能フラグのチェックします。 ドライバーが部分的に暗号化されたバッファーをサポートしていない場合は、このパラメーターを NULL に設定します。

pContentKey

コンテンツ暗号化キー ( NULL) を含むバッファーへのポインター。 ドライバーがコンテンツ キーの使用をサポートしているかどうかを照会するには、IDirect3DDevice9Video::GetContentProtectionCaps を呼び出し、D3DCPCAPS_CONTENTKEY機能フラグのチェックします。

ドライバーがコンテンツ キーをサポートしている場合は、コンテンツ キーを使用してサーフェスを暗号化します。 セッション キーを使用してコンテンツ キーを暗号化し、結果の暗号テキストを pContentKey に配置します。 ドライバーがコンテンツ キーをサポートしていない場合は、セッション キーを使用してサーフェスを暗号化し、 pContentKey を NULL に設定 します

pIV

初期化ベクトル (IV) を含むバッファーへのポインター。

暗号化の種類が D3DCRYPTOTYPE_AES128_CTRの場合、バッファーは D3DAES_CTR_IV 構造体です。 呼び出し元は 構造体を割り当て、IV を生成します。 最初の IV を生成するときは、構造体を乱数に初期化します。 後続の IV ごとに、構造体の IV メンバーをインクリメントするだけで、値が常に増加します。 この手順により、ドライバーは、同じ IV が同じキー ペアで複数回使用されることはないことを検証できます。

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

戻り値

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

注釈

すべてのハードウェアまたはドライバーが、すべての暗号化の種類に対してこの機能をサポートしているわけではありません。

ソース サーフェスは、適切な配置制限を使用して作成されたシステム メモリ サーフェスである必要があります。 バッファーは、保護面のピッチと高さに加えて、開始アライメント制限とブロック転送サイズに対応するためのパディングを収容するのに十分な大きさにする必要があります。

具体的には、次のようにソース サーフェスを割り当てる必要があります。

  1. IDirect3DCryptoSession9::GetSurfacePitch を呼び出して、保護されたサーフェスのストライドを取得します。
  2. IDirect3DDevice9Video::GetContentProtectionCaps メソッドを呼び出して、D3DCONTENTPROTECTIONCAPS構造体の BufferAlignmentStart メンバーと BlockAlignmentSize メンバーの値を取得します。
  3. サーフェス メモリの最小サイズを SysMemSize = 保護されたサーフェス ストライド×保護されたサーフェスの高さとして計算します。
  4. BufferAlignmentStart と BlockAlignmentSize の値に合わせてパディングを追加します
  5. SysMemSize (パディングを含む) と同じサイズのバッファーをシステム メモリに割り当てます。
  6. システム メモリ バッファーのアドレスが BufferAlignmentStart の値に揃っていない場合は、バッファーの先頭からのオフセットであるメモリアラインポインターを計算します。
  7. IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx を呼び出してソース サーフェスを作成します。 メモリアラインポインターを共有リソース ハンドル (pSharedHandle) として渡します。
サーフェスをロックすると、 D3DLOCKED_RECT 構造で報告されるストライドが、保護されたサーフェスのストライドと一致しない可能性があります。 ただし、データを解釈するときは、常に保護されたサーフェスのストライドを使用します。

このメソッドは、サーフェスのサブrectangleへの書き込みをサポートしていません。

要件

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

こちらもご覧ください

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

IDirect3DCryptoSession9