方法: アプリケーションのグラフィックス診断を無効にする
グラフィックス診断および他のプロファイリング ツールがご使用のアプリケーションを検査しないようにすることによって、悪意のあるユーザーによる侵入を防ぐことができます。
ご使用のアプリケーションの開発時に Visual Studio のグラフィックス診断を使用することによって、詳細な情報をキャプチャして分析し、発行前にそのアプリケーションの品質を向上させることができます。ただし、アプリケーションを発行する前にグラフィックス診断による情報のキャプチャを停止しないと、悪意のあるユーザーはこれらのツールを使用してアプリケーションのアート アセット、シェーダー コードおよびその他の情報を抽出し、それらを使用してアプリケーションへ侵入することがあります。たとえば、悪意のあるユーザーはアート アセットとシェーダー コードを変更し、オンライン ゲームで不正な利点を得ることができます。
プラットフォームおよび SDK のサポート
Windows 8 の Windows SDK では、Direct3D 10 のサポートにデバイスを作成するための追加のフラグが含まれます。特に、グラフィックス診断などのグラフィックス プロファイリング ツールによるアプリケーションのフックを防止するために使用される、D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY が含まれています。Windows 8 の Windows SDK に含まれる Direct3D のヘッダー ファイルを参照するアプリケーションはこれらの新しいフラグを使用できますが、June 2010 DirectX SDK の Direct3D のヘッダー ファイルを参照するアプリケーションは使用できません。これは Windows 8 と Windows 7 で実行されるアプリケーションに適用されます。
Direct3D 11.1 では、ID3DUserDefinedAnnotation::GetStatus を使用して、グラフィックス プロファイリング ツールによるアプリケーション情報のキャプチャを防ぐことができます。このインターフェイスは Windows 7 で Windows 8 の Windows SDK を参照している場合でも使用できないため、これは Windows 8 で実行されるアプリケーションにのみ適用されます。
Windows 8 の Windows SDK にある更新された Direct3D ヘッダーを参照しないアプリケーションの場合、Direct3D 9Ex を対象としてアプリケーションをビルドし、D3DPerf_SetOptions API を使用することによって、グラフィックス プロファイリング ツールによる情報のキャプチャを防ぐことができます。
Direct3D 11.1 には、グラフィックス診断などのグラフィックス プロファイリング ツールがアプリケーションにアタッチされることを防ぐ方法が 2 つ用意されています。1 つ目は、ID3DUserDefinedAnnotation::GetStatus を使用して、アプリケーションがプロファイリング ツールによって観察されているかどうかを検出し、観察されている場合はアプリケーションを直ちに終了する方法です。この方法は、アプリケーションを終了する前にアクションを実行する場合に使用してください。2 つ目は、Direct3D のデバイスを作成するときに適切なフラグを設定する方法です。
Direct3D 11 および Windows 8 の Windows SDK を使用してグラフィックス プロファイリングを防ぐには
ご使用のアプリケーションのソース コードで、重要な Direct3D 呼び出しが行われる前に、ID3DUserDefinedAnnotation::GetStatus メソッドを呼び出し、戻り値がゼロ以外の場合にはアプリケーションをすぐに終了するコードを記述します。
または
ご使用のアプリケーションのソース コードで Direct3D 11 のデバイスを作成するときに、D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY のフラグを渡します。Direct3D 11 のデバイスを作成する方法の詳細については、「D3D11CreateDevice (D3D11CreateDevice 関数)」および「D3D11CreateDeviceAndSwapChain (D3D11CreateDeviceAndSwapChain 関数)」を参照してください。D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY フラグの詳細については、「D3D11_CREATE_DEVICE_FLAG enumeration (D3D11_CREATE_DEVICE_FLAG 列挙体)」を参照してください。
Direct3D 10 には、Windows 8 の Windows SDK ヘッダー ファイルを参照する際に、Direct3D 11 の 2 つ目の方法に似た方法が用意されています。
Direct3D 10 および Windows 8 の Windows SDK を使用してグラフィックス プロファイリングを防ぐには
- ご使用のアプリケーションのソース コードで Direct3D 10 のデバイスを作成するときに、D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY のフラグを渡します。Direct3D 10 のデバイスまたは Direct3D 10.1 のデバイスを作成する方法の詳細については、Direct3D 10 の「コア関数」を参照してください。D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY フラグの詳細については、「D3D10_CREATE_DEVICE_FLAG enumeration (D3D10_CREATE_DEVICE_FLAG 列挙体)」を参照してください。
また、Windows 8 の Windows SDK の代わりに June 2010 DirectX SDK を使用して、グラフィックス診断などのグラフィックス プロファイリング ツールによるご使用のアプリケーションのフックを防止できます。
June 2010 DirectX SDK を使用してグラフィックス プロファイリングを防ぐには
DirectX 9Ex のヘッダー ファイルを対象としてビルドするように、ご使用のアプリケーションを構成します。
ご使用のアプリケーションのソース コードで、Direct3D デバイスを作成する前に、D3DPERF_SetOptions API を呼び出して、1 のパラメーターを使用します。詳細については、June 2010 DirectX SDK のドキュメントを参照してください。