CDS_RESET フラグと CDS_RESET_EX フラグについて

こんにちは、Platform SDK (Windows SDK) サポートチームです。
Windows Vista および Windows Server 2008 から提供されている CDS_RESET_EX フラグについてご紹介します。

 

概要

Windows Vista および Windows Server 2008 から、ChangeDisplaySettingsEx 関数の第四引数 DWORD dwflags に指定可能なフラグ値として、CDS_RESET_EX (0x20000000) が Windows SDK 同梱のヘッダーファイルに追加されています。

 

詳細

ChangeDisplaySettingsEx 関数の第四引数に指定可能なフラグ値の一つに、CDS_RESET (0x40000000) があります。
この CDS_RESET は、要求された設定が現在の設定と同じであっても、ディスプレイ デバイスの設定を変更する (リセットする) ためのフラグです。

ところが Windows Vista および Windows Server 2008 には、要求された設定が現在の設定と同じである場合は CDS_RESET を指定してもリセット処理が有効にならない問題がありました。
この問題は、Windows 内部でリセット関連処理の一部がバイパスされる設計となっていたことが原因で発生していました。

問題を回避するためには、Windows 内部でリセット関連処理の一部を必ず行うようにする必要がありましたが、既に CDS_RESET を使用しているアプリケーションに対する影響が懸念されたたため、互換性が保たれるように CDS_RESET 自体はそのまま残されました。
その代わりに、新たに CDS_RESET_EX というフラグ値を追加し、ChangeDisplaySettings 関数の第四引数に CDS_RESET_EX が指定された場合は、Windows 内部でリセット関連処理の一部が必ず行われるように、Windows 内部の修正が行われました。

 

使用方法

ChangeDisplaySettingsEx 関数を用いて、現在と同じ設定でディスプレイ デバイスの設定をリセットする場合は、本 API の第四引数に CDS_RESET ではなく CDS_RESET_EX を指定します。