SetupDiInstallDevice 関数 (setupapi.h)

SetupDiInstallDevice 関数は、DIF_INSTALLDEVICEインストール要求の既定のハンドラーです。

構文

WINSETUPAPI BOOL SetupDiInstallDevice(
  [in]      HDEVINFO         DeviceInfoSet,
  [in, out] PSP_DEVINFO_DATA DeviceInfoData
);

パラメーター

[in] DeviceInfoSet

インストールするデバイスを表す デバイス情報 要素を含むローカル システムのデバイス情報セットのハンドル。

[in, out] DeviceInfoData

DeviceInfoSet のデバイス情報要素を指定するSP_DEVINFO_DATA構造体へのポインター。 DeviceInfoData のため、これは IN-OUT パラメーターです。DevInst は、戻り時に新しいハンドル値で更新される場合があります。

戻り値

成功した場合、この関数は TRUE を 返します。 それ以外の場合は FALSE を 返し、ログに記録されたエラーは GetLastError の呼び出しで取得できます。

注釈

SetupDiInstallDevice は、INF ファイルからドライバーをインストールします。 SetupAPI の "driver" の定義は、実際には "ドライバー ノード" です。したがって、この関数は、ドライバーをインストールするときに、次の一覧の項目もインストールします。

  • デバイスのサービス。
  • ドライバー ファイル。
  • デバイス固有の共同インストーラー (存在する場合)。
  • プロパティ ページ プロバイダー (存在する場合)。
  • コントロール パネル アプレット (ある場合)。
この関数は、必要なデバイス インターフェイスも登録します。

正常にインストールされた場合、次の手順が含まれますが、これらに限定されません。

  • レジストリに ドライバー キー を作成し、適切なエントリ ( InfPathProviderName など) を書き込みます。
  • デバイスの INF DDInstall セクション を見つけて処理します。 セクションは、OS/アーキテクチャ固有の場合があります。 DDInstall セクションの AddReg エントリと DelReg エントリは、デバイスのソフトウェア キーに送信されます。 DDInstall を見つけて処理します。AddReg エントリと DelReg エントリがデバイスのハードウェア キーに送信される HW セクション。 INF DDInstall.LogConfigOverride セクション (存在する場合) を見つけて処理し、デバイスのオーバーライド構成を指定します。 INF DDInstall.Services セクションを見つけて処理して、デバイスのサービスを追加します (不要になった古いサービスが削除される可能性があります)。
  • INF ファイルをシステム INF ディレクトリにコピーします。
  • デバイスのインストール パラメーターのフラグ設定に基づいて、他のファイル操作を実行する可能性があります。

    DI_NOFILECOPY フラグとDI_NOVCP フラグが クリアされている場合は、 DDInstall セクションで指定されたファイル操作を実行します。 DI_NOVCP フラグが設定されている場合は、ファイル操作をキューに入れます。

    DI_NOFILECOPY フラグが設定されている場合は、ファイルをコピーしないでください。 このフラグは、たとえば、このデバイスのインストールに 対してDIF_INSTALLDEVICEFILES 操作が既に実行されている場合に設定できます。

  • デバイスのドライバーを読み込みます。 これには、ファンクション ドライバーと、上位または下位のフィルター ドライバーが含まれます。
  • ドライバーの AddDevice ルーチンを呼び出します。
  • IRP_MN_START_DEVICE I/O 要求パケット (IRP) を送信して、デバイスを起動します。
DI_NEEDRESTART、DI_NEEDREBOOT、または DI_DONOTCALLCONFIGMG フラグが SP_DEVINSTALL_PARAMS 構造体に 設定されている場合、Windows はデバイスを起動しません。

クラス インストーラーは、 DIF_INSTALLDEVICE要求を 処理するときに、ERROR_DI_DO_DEFAULTを返すか、この関数を呼び出す必要があります。 この関数は、デバイスのインストールのために多くのタスクを実行し、タスクの一覧が今後のリリースで拡張される可能性があります。 クラス インストーラーがこの関数を呼び出さずにデバイスのインストールを実行する場合、クラス インストーラーがオペレーティング システムの将来のバージョンで正しく動作しない可能性があります。

Windows でデバイスの INF ファイルが見つからない場合は、 null ドライバーをインストールしようとしてDIF_INSTALLDEVICEが送信されます。 SetupDiInstallDevice は 、デバイスが 未加工モード をサポートしているか、PnP 以外のデバイス ( IoReportDetectedDevice によって報告) である場合にのみ、null ドライバーをインストールします。 詳細については、「 DIF_INSTALLDEVICE」を参照してください。

DI_FLAGSEX_SETFAILEDINSTALL フラグが SP_DEVINSTALL_PARAMS 構造体に設定されている場合、 SetupDiInstallDevice は デバイスの ConfigFlags レジストリ値に FAILEDINSTALL フラグを設定するだけです。

メモクラス インストーラーのみが SetupDiInstallDevice を呼び出す必要があり、SetupDiInstallDevice が既定のデバイス インストール操作を完了した後にクラス インストーラーがデバイスのインストール操作を実行する必要がある場合にのみ呼び出す必要があります。 このような状況では、インストーラーがDIF_INSTALLDEVICE要求を処理するときに、クラス インストーラーが SetupDiInstallDevice を直接呼び出す必要があります。 既定のハンドラーの呼び出しの詳細については、「 既定の DIF コード ハンドラーの呼び出し」を参照してください。
 
SetupDiInstallDevice の呼び出し元は、Administrators グループのメンバーである必要があります。

要件

要件
サポートされている最小のクライアント Microsoft Windows 2000 以降のバージョンの Windows で使用できます。
対象プラットフォーム デスクトップ
Header setupapi.h (Setupapi.h を含む)
Library Setupapi.lib
[DLL] Setupapi.dll

こちらもご覧ください

DIF_INSTALLDEVICE

SetupDiCallClassInstaller

SetupDiInstallDriverFiles