Microsoft DirectX 8.0 (C++)

コールバック関数でのアップグレード フラグの使い方

アプリケーションで定義されたコールバック関数 DirectXSetupCallbackFunctionDirectXSetup 関数で呼び出されると、コールバック関数に呼び出し理由を示すパラメータが渡される。理由が DSETUP_CB_MSG_CHECK_DRIVER_UPGRADE の場合、pInfo パラメータは、DirextXSetup 関数が推奨する Microsoft® DirectX® コンポーネントおよびドライバのアップグレード方法をまとめたフラグを保持する DSETUP_CB_UPGRADEINFO 構造体を示す。これらのフラグを格納する構造体メンバは、UpgradeFlags と呼ばれる。

UpgradeFlags には次のようなカテゴリがある。

プライマリ アップグレード フラグ
これらのフラグは互いに排他的である。構造体メンバ UpgradeFlags には常にいずれか 1 つのフラグが存在する。フラグを抽出するには、DSETUP_CB_UPGRADE_TYPE_MASK とのビットごとの AND 処理をとる。

DSETUP_CB_UPGRADE_FORCE

DSETUP_CB_UPGRADE_KEEP

DSETUP_CB_UPGRADE_SAFE

DSETUP_CB_UPGRADE_UNKNOWN

セカンダリ アップグレード フラグ
これらのフラグの 1 つまたは両方を指定することができる。

DSETUP_CB_UPGRADE_CANTBACKUP

DSETUP_CB_UPGRADE_HASWARNINGS

デバイス アクティブ フラグ
ドライバをアップグレード中のデバイスがアクティブな場合に存在するフラグ。ほかのフラグと組み合わせて使用できる。

DSETUP_CB_UPGRADE_DEVICE_ACTIVE

デバイス クラス フラグ
これらのフラグは互いに排他的である。どちらかのフラグが必ず存在する。

DSETUP_CB_UPGRADE_DISPLAY

DSETUP_CB_UPGRADE_MEDIA

つまり、Reason パラメータの値が DSETUP_CB_MSG_CHECK_DRIVER_UPGRADE であれば、pInfo で指定される構造体メンバ UpgradeFlags には、常に 1 つの一次アップグレード フラグ、0 個以上の二次アップグレード フラグ、0 個または 1 つのデバイス アクティブ フラグ、および 1 つのデバイス クラス フラグが含まれる。

UpgradeFlags のメンバに DSETUP_CB_UPGRADE_KEEP が設定されている場合は、Windows® が正常に機能しなくなる恐れがあるため、DirectX コンポーネントやデバイス ドライバをアップグレードすることはできない。DirectXSetup 関数によるコンポーネントまたはドライバのアップグレードは行われない。

UpgradeFlags に DSETUP_CB_UPGRADE_FORCE という値がある場合は、Windows を正常に機能させるため、コンポーネントまたはドライバのアップグレードが必要である。このため、DirectXSetup 関数は、ドライバまたはコンポーネントのアップグレードを行う。ただし、アップグレードによって、システム上の一部のプログラムに悪影響が及ぶ可能性がある。DirectXSetup 関数がこの状態を検出すると、UpgradeFlags のメンバは (DSETUP_CB_UPGRADE_FORCE | DSETUP_CB_UPGRADE_HAS_WARNINGS) に設定される。この場合、DirectXSetup 関数は、アップグレードを実行する一方で、ユーザーに警告を発する。

コンポーネントおよびドライバをインストールしても Windows の動作に悪影響が及ばない場合、そのコンポーネントやドライバは安全にアップグレードできると見なされる。この場合、UpgradeFlags のメンバには DSETUP_CB_UPGRADE_SAFE が設定される。ただし、Windows に対しては安全であっても、システムにインストールされているプログラムに問題が発生する可能性はある。DirectXSetup 関数がこの状態を検出すると、UpgradeFlags のメンバには、値 (DSETUP_CB_UPGRADE_SAFE | DSETUP_CB_UPGRADE_HAS_WARNINGS) が格納される。この場合、DirectXSetup 関数のデフォルト動作では、アップグレードは実行されない。