Procedura: disabilitare la diagnostica grafica nelle app

È possibile impedire il controllo della propria applicazione da parte della diagnostica della grafica e di altri strumenti di profilatura al fine di impedire l'uso da parte di un utente malintenzionato.

Tramite la diagnostica della grafica di Visual Studio quando si sviluppa l'applicazione, è possibile acquisire informazioni dettagliate e analizzarle in modo che sia possibile migliorare l'applicazione prima della pubblicazione.Tuttavia, se non si impedisce alla diagnostica della grafica di acquisire tali informazioni prima della pubblicazione dell'applicazione, un utente malintenzionato potrebbe utilizzare questi strumenti per estrarre gli asset grafici, il codice di shader e altre informazioni e utilizzarle per violare l'applicazione stessa.Ad esempio, un utente malintenzionato potrebbe modificare gli asset grafici e il codice shader per ottenere un vantaggio ingiusto in un gioco online.

Piattaforma e supporto SDK

In Windows SDK per Windows 8 il supporto di Direct3D 10 include flag aggiuntivi per la creazione di dispositivi.In particolare include D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY, utilizzato per impedire agli strumenti di profilatura di elementi di grafica, quale Diagnostica grafica, di collegarsi all'app.Le applicazioni che fanno riferimento ai file di intestazione Direct3D inclusi in Windows SDK per Windows 8 possono utilizzare questi nuovi flag, questo non è possibile per le applicazioni che fanno riferimento ai file di intestazione Direct3D di DirectX SDK del giugno 2010.Ciò vale per le app eseguite in Windows 8 e Windows 7.

In Direct3D 11.1, è possibile utilizzare ID3DUserDefinedAnnotation::GetStatus per impedire agli strumenti di profilatura di grafica di acquisire informazioni sull'app.Poiché questa interfaccia non è disponibile per Windows 7 anche se fa riferimento a Windows SDK per Windows 8, si applicano solo le applicazioni in esecuzione su Windows 8.

Per le applicazioni che non fanno riferimento alle intestazioni aggiornate Direct3D in Windows SDK per Windows 8, è possibile impedire agli strumenti di profilatura della grafica di acquisire le informazioni compilando l'applicazione con Direct3D 9Ex e utilizzando l'API D3DPerf_SetOptions.

Direct3D 11.1 fornisce due modi per impedire agli strumenti di profilatura della grafica come ad esempio la diagnostica della grafica di associarsi a un'applicazione.La prima tecnica consiste nell'utilizzare ID3DUserDefinedAnnotation::GetStatus per rilevare se l'app è osservata da uno strumento di profilatura e, in tal caso chiudere l'app immediatamente.Utilizzare questa tecnica quando si desidera eseguire un'azione prima che l'applicazione venga chiusa.La seconda tecnica consiste nell'impostare il flag appropriato quando si crea il proprio dispositivo Direct3D.

Per impedire la profilatura grafica tramite Direct3D 11 e Windows SDK per Windows 8

  • Nel codice sorgente dell'app, prima che vengano effettuate chiamate Direct3D riservate, chiamare il metodo ID3DUserDefinedAnnotation::GetStatus e scrivere il codice che determina la chiusura immediata dell'app se il valore restituito è diverso da zero.

    - oppure -

    Quando si crea il dispositivo Direct3D 11 nel codice sorgente dell'app, passare il flag D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY.Per informazioni su come creare un dispositivo Direct3D 11, vedere D3D11CreateDevice e D3D11CreateDeviceAndSwapChain.Per informazioni sul flag D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY, vedere la pagina relativa all'Enumerazione D3D11_CREATE_DEVICE_FLAG.

Direct3D 10 fornisce una tecnica simile alla seconda tecnica Direct3D 11 quando si fa riferimento a Windows SDK per i file di intestazione Windows 8.

Per impedire la profilatura grafica tramite Direct3D 10 e Windows SDK per Windows 8

  • Quando si crea il dispositivo Direct3D 10 nel codice sorgente dell'applicazione, passare il flag D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY.Per informazioni su come creare un dispositivo Direct3D 10 o un dispositivo Direct3D 10.1, vedere la sezione di Direct3D 10 relativa alle funzioni principaliPer informazioni sul flag D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY, vedere la pagina relativa all'Enumerazione D3D10_CREATE_DEVICE_FLAG.

È inoltre possibile evitare che gli strumenti di profilatura della grafica quali la diagnostica della grafica si colleghino all'app utilizzando DirectX SDK di giugno 2010 anziché Windows SDK per Windows 8.

Per impedire la profilatura grafica utilizzando DirectX SDK di giugno 2010

  1. Configurare l'applicazione da compilare con i file di intestazione DirectX 9Ex.

  2. Prima di creare il dispositivo Direct3D nel codice sorgente dell'applicazione, chiamare l'API D3DPERF_SetOptions e utilizzare un parametro di 1.Per ulteriori informazioni, vedere la documentazione relativa DirectX SDK giugno 2010.