您可以防止图形诊断和其他分析工具检查您的应用程序帮助防止被恶意用户利用。
使用 Visual Studio 图像诊断,因为您开发应用程序,您可以获取详细信息和分析它,以便可以提高该应用程序,然后才能发布工作项。但是,如果不在发布应用程序之前阻止图形诊断获取此信息,恶意用户可以使用这些工具提取它的美术资产、着色器代码和其他信息,然后使用它们利用该应用程序。例如,恶意用户可以修改美术资源和着色器代码,在在线游戏中获得不公正优势。
平台和 SDK 支持
在 Windows 8 的 Windows SDK 中,Direct3D 10 支持包括设备创建的其他标志。具体而言,它包含 D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY,用于防止图形分析工具如图形诊断从挂钩应用程序中。引用包括在 Windows 8 的 Windows SDK 的 Direct3D 标头文件 的 Apps 可以使用这些新标志,但是引用在 2010 年六月 DirectX SDK 中的标头文件不可以。这适用于在 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 提供了两种阻止图形分析工具(如图像诊断)附加到应用程序的方法。第一种方法将使用 ID3DUserDefinedAnnotation::GetStatus 检测该应用程序是否由分析工具进行观察,并且如果是,然后立即退出该应用程序。当您要在关闭该应用程序之前执行某操作时,请使用此技术。当您创建您的 Direct3D 设备时,第二种技术是设置适当的标志。
使用 Direct3D 11 和 Windows 8的 Windows SDK 的保留图形分析
在应用程序的源代码中,如果返回值不为零,则在任何敏感 Direct3D 进行调用之前,调用会导致应用程序立即关闭的 ID3DUserDefinedAnnotation::GetStatus 方法并编写代码。
- 或 -
在您的应用程序的源代码中创建 Direct3D 11 设备时,请通过在 D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY 标志中。有关如何创建 Direct3D 11 设备的更多信息,请参见 D3D11CreateDevice 和 D3D11CreateDeviceAndSwapChain。有关 D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY 标志的信息,请参见 D3D11_CREATE_DEVICE_FLAG 枚举。
当引用 Windows 8 标头文件的 Windows SDK 时,Direct3D 10 提供了类似于第二个Direct3D 11 技术的一种技术。
使用 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 枚举。
您还可以防止分析工具,如通过使用 June 2010 DirectX SDK 从挂钩应用程序中的图形诊断代替 Windows 8 的 Windows SDK。
使用 2010 年 6 月 DirectX SDK 保留图形分析
配置您的应用程序生成 DirectX 9Ex 标头文件。
可以在您的应用程序的源代码创建 Direct3D 设备之前,调用 D3DPERF_SetOptions API 并使用 1 的参数。有关更多信息,请参见 June 2010 DirectX SDK 的文档。