HOW TO:在應用程式中停用圖形診斷
您可以防止圖形診斷和其他程式碼剖析工具檢查您的應用程式,防止遭到惡意使用者利用。
使用 Visual Studio 圖形診斷,就可以擷取詳細資訊並加以分析,讓您可以在發行之前改善應用程式。 不過,如果在發行應用程式之前,您沒有防止圖形診斷擷取這項資訊,惡意使用者就可能使用這些工具擷取其圖片資產、著色器程式碼及其他資訊,然後用來入侵應用程式。 例如,惡意使用者可能修改圖片資產和著色器程式碼,在線上遊戲中取得不公平的優勢。
平台和 SDK 支援
在 Windows 8 的 Windows SDK 中,Direct3D 10 支援包括適用於裝置建立作業的其他旗標。 具體而言,包括 D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY,這會用來防止圖形程式碼剖析工具 (例如「圖形診斷」) 攔截應用程式。 參考 Windows 8 的 Windows SDK 內含 Direct3D 標頭檔的應用程式可以使用這些新旗標,但是參考 2010 年 6 月 DirectX SDK 中的 Direct3D 標頭檔的應用程式則無法使用。 這適用於執行於 Windows 8 和 Windows 7 的應用程式。
在 Direct3D 11.1 中,您可以使用 ID3DUserDefinedAnnotation::GetStatus,防止程式碼剖析工具擷取您應用程式的資訊。 因為這個介面即使參考 Windows 8 的 Windows SDK,也無法在 Windows 7 中使用,這只適用於 Windows 8 上執行的應用程式。
對於沒有在 Windows 8 的 Windows SDK 中參考更新的 Direct3D 標頭的應用程式,您可以針對 Direct3D 9Ex 建置應用程式並使用 D3DPerf_SetOptions 應用程式開發介面,防止圖形程式碼剖析工具擷取資訊。
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 列舉型別 (英文)。
您也可以不要讓圖形診斷之類的圖形程式碼剖析工具使用 2010 年 6 月 DirectX SDK 而不是 Windows 8 的 Windows SDK 連結您的應用程式。
使用 2010 年 6 月版的 DirectX SDK 避免圖形剖析
設定應用程式以針對 DirectX 9Ex 標頭檔進行建置。
在您以應用程式的原始程式碼建立 Direct3D 裝置之前,請先呼叫 D3DPERF_SetOptions 應用程式開發介面並使用 1 的參數。 如需詳細資訊,請參閱 2010 年 6 月 DirectX SDK 的文件。