PFND3DDDI_ENCRYPTIONBLT コールバック関数 (d3dumddi.h)
EncryptionBlt 関数は、保護されたサーフェスから暗号化されたデータを読み取ります。
構文
PFND3DDDI_ENCRYPTIONBLT Pfnd3dddiEncryptionblt;
HRESULT Pfnd3dddiEncryptionblt(
HANDLE hDevice,
const D3DDDIARG_ENCRYPTIONBLT *unnamedParam2
)
{...}
パラメーター
hDevice
ディスプレイ デバイス (グラフィックス コンテキスト) へのハンドル。
unnamedParam2
pData [in]
暗号化されたビット ブロック転送 (bitblt) 操作のパラメーターを記述する D3DDDIARG_ENCRYPTIONBLT構造体への ポインター。
戻り値
EncryptionBlt は 、次のいずれかの値を返します。
リターン コード | 説明 |
---|---|
S_OK | 暗号化されたビットblt操作が正常に実行されます。 |
E_OUTOFMEMORY | EncryptionBlt は、完了するために必要なメモリを割り当てませんでした。 |
D3DDDIERR_NOTAVAILABLE | ドライバーは EncryptionBlt 関数をサポートしていません。 |
注釈
ハードウェアとドライバーは、必要に応じて EncryptionBlt をサポートできます。 一部のハードウェアでは、読み取り戻されるデータの暗号化を解除するために、別のキーを使用する必要がある場合もあります。 ドライバーは、D3DDDIARG_ENCRYPTIONBLTの pIV メンバーが指すメモリ ブロックでこのキー を 返します。
ドライバーとハードウェアが暗号化ビットbltに別のキーを使用する場合、アプリケーションはこの事実を認識し、キーを使用する必要があります。
暗号化の種類がD3DCRYPTOTYPE_AES128_CTR場合、 pIV は、アプリケーションが割り当てるD3DAES_CTR_IV構造体を指します。 ただし、D3DAES_CTR_IV構造体の実際の内容は、ドライバーとハードウェアによって入力されます。 ドライバーとハードウェアが最初の初期化ベクトルを生成する場合、D3DAES_CTR_IV構造体の IV メンバーを乱数 (大きすぎず) に初期化する必要があります。 後続の各初期化ベクトルは、 単に IV メンバーをインクリメントする必要があります。これにより、 IV は常に値が増加します。 この事実により、アプリケーションは、同じ IV が同じキー ペアで複数回使用されることはないことを検証できます。
EncryptionBlt はサブ四角形を読み取ることができません。 また、 ハードウェア ベースのソリューションの多くでは、保護されたメモリからの暗号化されていない読み取りが許可されていないため、暗号化されたバッファーの一部を読み取り戻すことはできません。
Direct3D ランタイムは、D3DDDIARG_ENCRYPTIONBLT の DstSubResourceIndex メンバーによって指定された変換先サーフェスがシステム メモリ内にあり、ストレッチや色空間変換などが実行されていないことを確認します。 アプリケーションでは、システム メモリ バッファーが適切に配置されていること、およびバッファーのサイズがソースサーフェイスと一致していることを確認する必要があります。 ドライバーは、メモリの配置とバッファー サイズ (D3DDDIARG_ENCRYPTIONBLTの DstResourceSize メンバー) を確認し、これらの条件が正しくない場合に失敗する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | EncryptionBlt は、Windows 7 オペレーティング システム以降でサポートされています。 |
対象プラットフォーム | デスクトップ |
Header | d3dumddi.h (D3dumddi.h を含む) |