DIF コードの処理

Note

このセクションで説明する機能はサポートされておらず、それらを含むドライバー パッケージは Microsoft の署名を受けなくなります。 「ユニバーサル INF ファイルの使用」を参照してください。

デバイス インストール アプリケーションは、SetupDiCallClassInstaller を呼び出して、デバイス インストール関数コード (DIF コード) をインストーラーに送信します。 この関数は、インストーラーのエントリ ポイント関数を呼び出します。 インストーラーのエントリ ポイントの説明については、次を参照してください。

共同インストーラーのインターフェイス

各 DIF コードの参照ページには、次のセクションが含まれています。

送信時
デバイス インストール アプリケーションがこの DIF 要求を送信する一般的な時刻とその理由について説明します。

処理するユーザー
この要求の処理を許可するインストーラーを指定します。 インストーラーには、クラス インストーラー、クラス共同インストーラー (セットアップ クラス全体の共同インストーラー)、およびデバイス共同インストーラー (デバイス固有の共同インストーラー) が含まれます。

インストーラーによる入力
DIF コードに加えて、SetupDiCallClassInstaller は特定の要求に関連する追加情報を提供します。 各要求で提供される情報の詳細については、各 DIF コードのリファレンス ページを参照してください。 次の一覧には、追加の入力パラメーターの一般的な説明と、インストーラーがパラメーターを 処理するために呼び出すことができるデバイス インストール関数 (SetupDiXxx 関数) の一覧が含まれています。

DeviceInfoSet
デバイス情報セットへの取り扱いを提供します。

ハンドルは不透明です。 たとえば、このハンドルを使用して、SetupDiXxx 関数の呼び出しで設定されたデバイス情報を識別します。

DeviceInfoSet には、デバイス セットアップ クラスが関連付けられている場合があります。 その場合は、SetupDiGetDeviceInfoListClass を呼び出してクラス GUID を取得します。

DeviceInfoData
デバイスの情報セット内のデバイスを識別する SP_DEVINFO_DATA 構造体へのポインターを必要に応じて提供します。

デバイスインストールパラメーター
これらの間接パラメーターは、SP_DEVINSTALL_PARAMS 構造でのデバイスのインストールに関する情報を提供します。 DeviceInfoDataNULL でない場合、DeviceInfoData に関連付けられているデバイス インストール パラメーターがあります。 DeviceInfoDataNULL の場合、デバイス インストール パラメーターは DeviceInfoSet に関連付けられています。

SetupDiGetDeviceInstallParams を呼び出して、デバイスのインストール パラメーターを取得します。

クラスインストールパラメーター
オプションの間接パラメーターは、特定の DIF 要求に固有です。 これらは基本的に 「DIF 要求パラメーター」 です。たとえば、DIF_REMOVE インストール要求のクラス インストール パラメーターは、SP_REMOVEDEVICE_PARAMS 構造体に含まれています。

各SP_XXX_PARAMS 構造体は、固定サイズの SP_CLASSINSTALL_HEADER 構造体で始まります。

SetupDiGetClassInstallParams を呼び出して、クラスのインストール パラメーターを取得します。

DIF 要求にクラス インストール パラメーターがある場合、DeviceInfoSet に関連付けられているパラメーターのセットと、DeviceInfoData に関連付けられている別のパラメーターのセットがあります (DIF 要求で DeviceInfoData が指定されている場合)。 SetupDiGetClassInstallParams は、使用可能な最も具体的なパラメーターを返します。

Context
共同インストーラーには、省略可能なコンテキスト パラメーターがあります。

インストーラーによる出力
この DIF コードに必要な出力について説明します。

インストーラーがデバイスのインストール パラメーターを変更する場合、インストーラーは SetupDiSetDeviceInstallParams を呼び出して、戻る前に変更を適用する必要があります。 同様に、インストーラーが DIF コードのクラス インストール パラメーターを変更する場合、インストーラーは SetupDiSetClassInstallParams を呼び出す必要があります。

インストーラーの戻り値
DIF コードの適切な戻り値を指定します。 戻り値の詳細については、次の図を参照してください。

既定の DIF コードハンドラー
DIF コードの システム定義の既定の操作を実行する SetupDiXxx 関数を指定します。 すべての DIF コードに既定のハンドラーがあるわけではありません。 共同インストーラーまたはクラス インストーラーが既定のハンドラーが呼び出されないようにする手順を実行しない限り、 SetupDiCallClassInstaller は、クラス インストーラーを呼び出した後 (ただし、後処理用に登録されている共同インストーラーを呼び出す前) に DIF コードの既定のハンドラーを呼び出します。

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

既定のハンドラーの直接呼び出しを含め、クラス インストーラーが DIF コードを正常に処理した場合、クラス インストーラーは NO_ERROR を返す必要があり、その後 SetupDiCallClassInstaller は既定のハンドラーをもう一度呼び出しません。 クラス インストーラーは既定のハンドラーを直接呼び出すことができますが、クラス インストーラーは既定のハンドラーの操作を置き換えようとしないでください。

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

共同インストーラーでは、既定の DIF コード ハンドラーを呼び出さないでください

インストーラー操作
インストーラーが DIF 要求を処理するために実行する一般的な手順について説明します。

参照
関連情報のソースを一覧表示します。

次の図は、DIF コードを処理するための SetupDiCallClassInstaller のイベントのシーケンスを示しています。

diagram illustrating the flow of dif code processing in setupdicallclassinstaller.

オペレーティング システムは、DIF コードごとにいくつかの操作を実行します。 ベンダーが提供する共同インストーラーとクラス インストーラーは、インストール アクティビティに参加できます。 SetupDiCallClassInstaller は、DIF コードが失敗した場合でも、後処理用に登録された共同インストーラーを呼び出します。