Поделиться через


Практическое руководство. Отключение диагностики графики в приложении

Можно предотвратить проверку средством диагностики графики и другими средствами профилирования вашего приложения для предотвращения эксплуатирование пользователем-злоумышленником.

С помощью средств диагностики графики Visual Studio можно при разработке приложения собирать подробные сведения и анализировать их, чтобы улучшить приложение перед его публикацией.Однако если захват этой информации диагностикой графики не предотвращается перед публикацией приложения, пользователь-злоумышленник может использовать эти инструменты для извлечения его ресурсов оформления, кода шейдера и другой информации, а затем использовать их для эксплуатации приложения в своих целях.Например, пользователь со злым умыслом может изменить ресурсы оформления и код шейдера для нечестного получения преимущества в онлайн-игре.

Поддержка платформ и SDK

В Windows SDK для Windows 8 поддержка Direct3D 10 включает дополнительные флаги для создания устройств.В частности, сюда относится D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY, не позволяющее средствам профилирования графики (средства диагностики графики) присоединиться к приложению.Приложения, которые ссылаются на файлы заголовков Direct3D, включенные в Windows SDK для Windows 8, могут использовать эти новые флаги, но приложения, которые ссылаются на файлы заголовков Direct3D в DirectX SDK от июня 2010 г., не могут.Это условие применяется к приложениям, которые выполняются на Windows 8 и Windows 7.

В Direct3D 11.1 можно использовать ID3DUserDefinedAnnotation::GetStatus, чтобы не позволить средствам профилирования изображений зафиксировать информацию о приложении.Поскольку этот интерфейс не доступен в Windows 7 даже при ссылке на Windows SDK для Windows 8, это применяется только к приложениям, которые выполняются на Windows 8.

Для приложений, которые не ссылаются на обновленные заголовки Direct3D в Windows SDK для Windows 8, можно предотвратить захват информации средствами профилирования графики путем построения приложения относительно Direct3D 9Ex и с использованием API D3DPerf_SetOptions.

Direct3D 11.1 предоставляет два способа предотвращения прикрепления средств профилирования графики, таких как диагностика графики, к приложению.Первый метод состоит в использовании ID3DUserDefinedAnnotation::GetStatus для выявления того, находится ли приложение под наблюдением средства профилирования и, если находится, немедленного выхода из приложения.Используйте этот метод, если требуется выполнить действие прежде, чем приложение закрыто.Второй метод — задать соответствующий флаг при создании устройства Direct3D.

Чтобы Предотвратить профилирование графики с помощью Direct3D 11 и Windows SDK для Windows 8

  • В исходном коде приложения до выполнения важных вызовов 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.

Direct3D 10 предоставляет метод, который напоминает второй метод Direct3D 11 при ссылке на Windows SDK для файлов заголовков Windows 8.

Предотвратить профилирование графики с помощью Direct3D 10 и Windows SDK для Windows 8

  • При создании устройства Direct3D 10 в исходном коде приложения, перейдите к флажку D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY.Сведения о создании устройства Direct3D 10 или устройства Direct3D 10.1 см. в разделе Direct3D 10 Core FunctionsСведения о флажке D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY см. в разделе Перечисление D3D10_CREATE_DEVICE_FLAG.

Также можно сделать так, чтобы средства профилирования графики, например модуль диагностики графики, не привязали ваше приложение с использованием DirectX SDK июня 2010, вместо Windows SDK для Windows 8.

Чтобы Предотвратить профилирование графики с помощью DirectX SDK, июнь 2010

  1. Настройте приложение для построения на основе файлов заголовка DirectX 9Ex.

  2. Прежде чем можно будет создать устройство Direct3D в исходном коде приложения, вызовите API-интерфейс D3DPERF_SetOptions и используйте параметр 1.Дополнительные сведения см. в документации, посвященной DirectX SDK (июнь 2010 г.).