Cómo: Deshabilitar los diagnósticos de gráficos en la aplicación

Puede evitar que el motor de diagnóstico de gráficos y otras herramientas de generación de perfiles inspeccionen la aplicación para ayudar a evitar que un usuario malintencionado se aproveche de las vulnerabilidades de seguridad.

Al usar el diagnóstico de gráficos de Visual Studio cuando desarrolla la aplicación, puede recuperar información detallada y analizarla para poder mejorar la aplicación antes de publicarla.Sin embargo, si no evita que el diagnóstico de gráficos capture esta información antes de publicar la aplicación, un usuario malintencionado podría usar estas herramientas para extraer los activos de imagen, el código del sombreador y otra información y, después, usarla para causar daños a la aplicación.Por ejemplo, un usuario malintencionado podría modificar los activos de imagen y el código del sombreador para obtener una ventaja desleal en un juego en línea.

Compatibilidad de la plataforma y del SDK

En Windows SDK para Windows 8, la compatibilidad de Direct3D 10 incluye marcas adicionales para la creación de dispositivos.En particular, incluye D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY, que se usa para evitar que las herramientas de generación de perfiles de gráficos como el diagnóstico de gráficos bloquee una aplicación.Las aplicaciones que hacen referencia a los archivos de encabezado de Direct3D incluidas en Windows SDK para Windows 8 pueden usar estas nuevas marcas, pero las aplicaciones que hacen referencia a los archivos de encabezado en el SDK de Direct3D de junio de 2010 no pueden.Esto se aplica a las aplicaciones que se ejecutan en Windows 8 y Windows 7.

En Direct3D 11.1, puede usar ID3DUserDefinedAnnotation::GetStatus para evitar que las herramientas de generación de perfiles de gráficos obtengan información sobre la aplicación.Dado que esta interfaz no está disponible para Windows 7 incluso cuando haga referencia a Windows SDK para Windows 8, esto solo se aplicará a las aplicaciones que se ejecutan en Windows 8.

Para las aplicaciones que no hacen referencia a los encabezados actualizados de Direct3D en Windows SDK para Windows 8, puede evitar que las herramientas de generación de perfiles de gráficos obtengan información compilando la aplicación respecto a Direct3D 9Ex y usando la API de D3DPerf_SetOptions.

Direct3D 11.1 proporciona dos maneras de evitar que herramientas de generación de perfiles de gráficos como el diagnóstico de gráficos se asocien a una aplicación.La primera técnica es utilizar ID3DUserDefinedAnnotation::GetStatus para detectar si la aplicación está siendo observada por una herramienta de generación de perfiles, y si es así, salir de la aplicación inmediatamente.Utilice esta técnica si desea realizar alguna acción antes de que se cierre la aplicación.La segunda técnica consiste en establecer la marca adecuada al crear el dispositivo Direct3D.

Para evitar la generación de perfiles de gráficos mediante Direct3D 11 y Windows SDK para Windows 8

  • En el código fuente de la aplicación, antes de que se haga cualquier llamada confidencial de Direct3D, llame al método ID3DUserDefinedAnnotation::GetStatus y escriba el código que haga que la aplicación se cierre inmediatamente si el valor devuelto es cero.

    -O bien-

    Al crear el dispositivo de Direct3D 11 en el código fuente de la aplicación, pase la marca de D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY.Para obtener información sobre cómo crear un dispositivo de Direct3D 11, vea D3D11CreateDevice y D3D11CreateDeviceAndSwapChain.Para obtener información sobre la marca D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY, vea Enumeración D3D11_CREATE_DEVICE_FLAG.

Direct3D 10 proporciona una técnica similar a la segunda técnica de Direct3D 11 cuando se hace referencia a Windows SDK para los archivos de encabezado de Windows 8.

Para evitar la generación de perfiles de gráficos mediante Direct3D 10 y Windows SDK para Windows 8

  • Al crear el dispositivo de Direct3D 10 en el código fuente de la aplicación, pase la marca de D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY.Para obtener información sobre cómo crear un dispositivo de Direct3D 10 o un dispositivo de Direct3D 10.1, vea Funciones básicasPara obtener información sobre la marca D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY, vea Enumeración D3D10_CREATE_DEVICE_FLAG.

También puede evitar que las herramientas de generación de perfiles de gráficos, como Diagnóstico de gráficos, enlacen con la aplicación utilizando el SDK de DirectX de junio de 2010 en lugar de Windows SDK para Windows 8.

Para evitar la generación de perfiles de gráficos mediante el SDK de DirectX de junio de 2010

  1. Configure la aplicación para que compile según los archivos de encabezado de DirectX 9Ex.

  2. Antes de crear el dispositivo de Direct3D en el código fuente de la aplicación, llame a la API de D3DPERF_SetOptions y use un parámetro de 1.Para obtener más información, vea la documentación para el SDK de DirectX de junio de 2010.