Share via


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 型の値 (通常 は 0 に設定されます)。

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

注意

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

要件

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

こちらもご覧ください

DiInstallDevice