DiInstallDriverW 関数 (newdev.h)

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

構文

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

パラメーター

[in, optional] hwndParent

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

[in] InfPath

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

[in] Flags

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

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

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

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

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

[out, optional] NeedReboot

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

戻り値

関数が指定したドライバー パッケージドライバー ストアに正常にプレインストールした場合、DiInstallDriverTRUE を返します。 また、関数がシステム内の 1 つ以上のデバイスにドライバーを正常にインストールした場合も、DiInstallDriverTRUE を返します。 ドライバー パッケージがドライバー ストアに正常にインストールされていない場合、 DiInstallDriverFALSE を 返し、 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 と等しい場合は、ドライバー パッケージがデバイスに現在インストールされているドライバーよりもデバイスに一致するかどうかに関係なく、デバイスにドライバーをインストールします。
一般に、インストール アプリケーションで NeedRebootNULL に設定して、インストールを完了するために再起動が必要な場合にユーザーにシステムの再起動を求めるメッセージを 表示するように DiInstallDriver に指示する必要があります。 アプリケーションでは、次の場合にのみ NeedReboot ポインターを指定する必要があります。
  • インストールを完了するには 、アプリケーションで DiInstallDriver を複数回呼び出す必要があります。 この場合、アプリケーションは、DiInstallDriver への呼び出しによって TRUENeedReboot 値が返されるかどうかを記録する必要があります。その場合は、DiInstallDriver の最後の呼び出しが返された後にシステムを再起動するようにユーザーに求めます。
  • アプリケーションは、システムの再起動を行う前に、 DiInstallDriver を呼び出す以外の必要な操作を実行する必要があります。 システムの再起動が必要な場合、アプリケーションは必要な操作を完了し、ユーザーにシステムの再起動を求めるメッセージを表示する必要があります。
  • アプリケーションはクラス インストーラーです。その場合、クラス インストーラーは、デバイスのSP_DEVINSTALL_PARAMS構造体の Flags メンバーにDI_NEEDREBOOT フラグを設定する必要があります。
選択したデバイスに選択したドライバーをインストールするには、 DiInstallDevice を呼び出します。 詳細については、「ドライバーの インストールを簡略化する SETUPAPI 関数」を参照してください。

注意

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

要件

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

こちらもご覧ください

DiInstallDevice