次の方法で共有


DiInstallDriverA 関数 (newdev.h)

DiInstallDriver 関数は、ドライバー ストア にドライバーをプレインストールし、ドライバーがサポートするシステムに存在するデバイスにドライバーをインストールします。

構文

BOOL DiInstallDriverA(
  [in, optional]  HWND   hwndParent,
  [in]            LPCSTR InfPath,
  [in]            DWORD  Flags,
  [out, optional] PBOOL  NeedReboot
);

パラメーター

[in, optional] hwndParent

DiInstallDriver デバイスのインストールに関連付けられているユーザー インターフェイス コンポーネントを表示するために使用する最上位ウィンドウへのハンドル。 このパラメーターは省略可能であり、NULL設定できます。

[in] InfPath

ドライバー パッケージの INF ファイルの完全修飾パスを提供する NULL で終わる文字列へのポインター。

[in] Flags

ここで説明するように、0 個または 1 つ以上のフラグの組み合わせを指定する DWORD 型の値 (Flags は通常、0 に設定されます)。

フラグ が 0 の場合、DiInstallDriver は、デバイスに現在インストールされているドライバーよりも、ドライバーがデバイスに適している場合にのみ、指定されたドライバーをデバイスにインストールします。 Windows がデバイスのドライバーを選択する方法については、「Windows でドライバーを選択する方法 」を参照してください。

フラグ にDIIRFLAG_FORCE_INFが含まれている場合、DiInstallDriver は、ドライバーがデバイスに現在インストールされているドライバーよりもデバイスに適しているかどうかに関係なく、指定されたドライバーを一致するデバイスにインストールします。 DIIRFLAG_INSTALL_AS_SETも指定されている場合、DIIRFLAG_FORCE_INFは無視されます。

ドライバーのインストールを強制 注意すると、互換性の低いドライバーまたは古いドライバーに、より互換性のあるドライバーまたは新しいドライバーが置き換わる可能性があります。
 

Flags にDIIRFLAG_INSTALL_AS_SET (Windows 10 バージョン 1709 以降でサポート) が含まれている場合、infPath は、INF ファイルへの完全修飾パスではなくディレクトリを指定する必要があります。DiInstallDriver では、特別な動作ですべての INF ファイルがインストールされます。 ドライバー パッケージはすべて、ドライバー ストア にステージングされますが、まだデバイスにインストールすることはできません。 システムの次回のシャットダウン時に、これらのドライバー パッケージは今後デバイスにインストールできるようにされ、デバイスがシステムの次の起動時に準備が整うのに最適なデバイスにインストールされます。

[out, optional] NeedReboot

インストールを完了するためにシステムの再起動が必要かどうかを示すために設定 DiInstallDriver する BOOL 型の値へのポインター。 このパラメーターは省略可能であり、NULLできます。 パラメーターを指定し、インストールを完了するためにシステムの再起動が必要な場合は、DiInstallDriver TRUE値を設定します。 この場合、呼び出し元はユーザーにシステムの再起動を求める必要があります。 このパラメーターを指定し、インストールを完了するためにシステムの再起動が必要ない場合は、DiInstallDriver 、値を FALSE設定します。 パラメーターが NULL で、インストールを完了するためにシステムの再起動が必要な場合は、DiInstallDriver システム再起動ダイアログ ボックスが表示されます。 このパラメーターの詳細については、次の「解説」セクションを参照してください。

戻り値

DiInstallDriver は、関数が指定した ドライバー パッケージドライバー ストアに正常にプレインストールした場合、TRUE を返します。 DiInstallDriver は、関数がシステム内の 1 つ以上のデバイスにドライバーを正常にインストールした場合、TRUE も返します。 ドライバー パッケージがドライバー ストアに正常にインストールされていない場合、DiInstallDriver は FALSE 返します。ログに記録されたエラーは、GetLastError呼び出すことによって取得できます。 GetLastError 返される一般的なエラー値の一部を次に示します。

リターン コード 形容
ERROR_ACCESS_DENIED
呼び出し元には管理者特権がありません。 既定では、Windows では、ドライバー ストアドライバー パッケージ をプレインストールするために、呼び出し元に管理者特権が必要です。
ERROR_FILE_NOT_FOUND
指定した INF ファイルのパスが存在しません。
ERROR_INVALID_FLAGS
Flags に指定された値が 0 またはDIIRFLAG_FORCE_INFと等しくありません。
ERROR_IN_WOW64
呼び出し元のアプリケーションは、許可されていない 64 ビット環境で実行しようとしている 32 ビット アプリケーションです。 詳細については、「64 ビット システムへのデバイスのインストール」を参照してください。

備考

DiInstallDriver は、次の操作を実行します。

  1. ドライバー ストアドライバー パッケージ をプレインストールします。 同じドライバー パッケージのインスタンスが既にドライバー ストアにプレインストールされている場合、DiInstallDriver 最初にそのインスタンスを削除してから、ドライバー パッケージの新しいインスタンスをドライバー ストアに追加します。
  2. システムに存在するデバイスを列挙します。
  3. フラグ が 0 に等しい場合は、指定したドライバーがデバイスに現在インストールされているドライバーよりも適切に一致する場合にのみ、デバイスにドライバーをインストールします。
  4. フラグ がDIIRFLAG_FORCE_INFと等しい場合は、ドライバー パッケージの が、デバイスに現在インストールされているドライバーよりもデバイスに適しているかどうかに関係なく、デバイスにドライバーをインストールします。
一般に、インストール アプリケーションでは、インストールを完了するために再起動が必要な場合 システムの再起動を求めるメッセージ DiInstallDriver に指示する NULL を する NeedReboot を設定する必要があります。 アプリケーションは、次の場合にのみ、NeedReboot ポインターを指定する必要があります。
  • インストールを完了するには、アプリケーション DiInstallDriver を数回呼び出す必要があります。 この場合、アプリケーションは、DiInstallDriver の呼び出しによって TRUENeedReboot 値が返されるかどうかを記録する必要があります。その場合は、diInstallDriver が返 最後の呼び出しの後にシステムを再起動するようにユーザーに求めます。
  • アプリケーションは、システムの再起動を行う前に、DiInstallDriver呼び出す以外の必要な操作を実行する必要があります。 システムの再起動が必要な場合、アプリケーションは必要な操作を完了し、ユーザーにシステムの再起動を求めるメッセージを表示する必要があります。
  • アプリケーションはクラス インストーラーです。その場合、クラス インストーラーは、デバイスのSP_DEVINSTALL_PARAMS構造体の Flags メンバーにDI_NEEDREBOOT フラグを設定する必要があります。
選択したデバイスに選択したドライバーをインストールするには、DiInstallDevice呼び出します。 詳細については、「ドライバーのインストールを簡略化する SetupAPI 関数を する」を参照してください。

手記

newdev.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして DiInstallDriver を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows Vista 以降のバージョンの Windows で使用できます。
ターゲット プラットフォーム の デスクトップ
ヘッダー newdev.h (Newdev.h を含む)
ライブラリ Newdev.lib

関連項目

DiInstallDevice