次の方法で共有


DIF_SELECTBESTCOMPATDRV

注:

この要求は、Windows 10 バージョン 1703 (Redstone 2) で非推奨となりました。 より新しいバージョンの Windows では、このコールバックは呼び出されなくなりました。

DIF_SELECTBESTCOMPATDRV 要求を使用すると、インストーラーは、デバイス情報要素の互換性のあるドライバーの一覧から最適なドライバーを選択できます。

送信時

オペレーティング システムが新しい PnP デバイスをインストールする準備をしている場合、または PnP デバイスでドライバーの変更操作を実行している場合。

この DIF 要求は通常、PnP 構成中に使用されます。 デバイスが手動でインストールされている場合、Windows は DIF_SELECTDEVICE要求を送信します。

処理するユーザー

クラス共同インストーラー

処理できる

デバイス共同インストーラー

取り扱いなし

クラスインストーラー

処理できる

インストーラーによる入力

DeviceInfoSet
デバイスを格納している デバイス情報セット へのハンドルが提供されます。

DeviceInfoData
デバイス情報セット内のデバイスを識別する SP_DEVINFO_DATA 構造体へのポインターが提供されます。

デバイスインストールパラメーター
DeviceInfoData に関連付けられているデバイス インストール パラメーター (SP_DEVINSTALL_PARAMS) があります。

クラスインストールパラメーター
なし

インストーラーによる出力

デバイスインストールパラメーター
インストーラーによってデバイス インストール パラメーターが変更される場合があります。 ただし、通常、この DIF 要求を処理する場合は行われません。

DeviceInfoData
副次的効果として、インストーラーは DeviceInfoData に関連付けられているドライバーの一覧、特に、SP_DRVINSTALL_PARAMS を変更できます。

インストーラーの戻り値

共同インストーラーは、NO_ERROR、ERROR_DI_POSTPROCESSING_REQUIRED、または Win32 エラー コードを返すことができます。

クラス インストーラーがこの要求を正常に処理し、その後 SetupDiCallClassInstaller が既定のハンドラーを呼び出す必要がある場合、クラス インストーラーは ERROR_DI_DO_DEFAULT を返します。

既定のハンドラーの直接呼び出しを含め、クラス インストーラーがこの要求を正常に処理した場合、クラス インストーラーは NO_ERROR を返す必要があり、その後 SetupDiCallClassInstaller は既定のハンドラーをもう一度呼び出しません。

注: クラス インストーラーは既定のハンドラーを直接呼び出すことができますが、クラス インストーラーは既定のハンドラーの操作を置き換えようとしないでください。

既定のハンドラーの呼び出しの詳細については、「既定の DIF コード ハンドラーの呼び出し」を参照してください。

クラス インストーラーでエラーが見つかった場合、インストーラーは適切な Win32 エラー コードを返す必要があり、SetupDiCallClassInstaller は既定のハンドラーを呼び出しません。

既定の DIF コードハンドラー

SetupDiSelectBestCompatDrv

インストーラー操作

インストーラーは、PnP デバイスのドライバーの選択に参加するために、この DIF 要求を処理します。 インストーラーは通常、次のいずれかの方法でこの DIF 要求に応答します。

  • 何もしない。

    インストーラーに特別な選択要件がない場合、この DIF 要求に応答しても何も行われません。 クラス インストーラーは ERROR_DI_DO_DEFAULT を返し、共同インストーラーは NO_ERROR を返します。

  • ドライバーの一覧で 1 つ以上のドライバーのパラメーターを変更します。

    たとえば、インストーラーは、DNF_BAD_DRIVER をマークすることで、デバイスの考慮事項からドライバーを削除する場合があります。 インストーラーは、次の手順に従ってドライバー パラメーターを変更します。

    1. SetupDiEnumDriverInfoSetupDiGetDriverInstallParams を呼び出すことで、一覧の最初のドライバーに関する情報を取得します。 必要に応じて、ドライバーパラメーターを変更し、SetupDiSetDriverInstallParams を呼び出して変更を適用します。

      ドライバーが最悪の場合は、ドライバー インストール パラメーターでドライバーのランクを 0xFFFF 以上に設定します。 詳細については、「Windows がドライバーを選ぶ方法」を参照してください。

    2. リスト内のすべてのドライバーを処理するまで、前の手順を繰り返します。 その関数の参照ページで 説明されているように、MemberIndex パラメーターを SetupDiEnumDriverInfo にインクリメントしてください。

    クラス インストーラーは、ドライバーの一覧を変更した後、ERROR_DI_DO_DEFAULT を返します。 共同インストーラーがドライバーの一覧を変更する場合は、事前処理で行い、NO_ERROR を返す必要があります。

  • デバイスに最適なドライバーを選びます。

    このアクションはあまり一般的ではありませんが、インストーラーがデバイスに最適なドライバーを選ぶ場合があります。 このようなインストーラーは、各ドライバーのデータを調べ、ドライバーを選び、SetupDiSetSelectedDriver を呼び出してドライバーを設定します。 インストーラーは、選んだドライバーを設定した後、NO_ERROR を返します。

    共同インストーラーがドライバーを選んだ場合は、後処理で選ぶ必要があります。

DIF コードの詳細については、「DIF コードの処理」を参照してください。

要件

バージョン

Microsoft Windows 2000 以降のバージョンの Windows でサポートされています。

ヘッダー

Setupapi.h (Setupapi.h を含む)

関連項目

SetupDiSelectBestCompatDrv

SetupDiSetSelectedDriver

SP_DEVINFO_DATA

SP_DEVINSTALL_PARAMS