Share via


DiRollbackDriver 関数 (newdev.h)

DiRollbackDriver 関数は、指定したデバイスにインストールされているドライバーをロールバックします。

構文

BOOL DiRollbackDriver(
  [in]            HDEVINFO         DeviceInfoSet,
  [in]            PSP_DEVINFO_DATA DeviceInfoData,
  [in, optional]  HWND             hwndParent,
  [in]            DWORD            Flags,
  [out, optional] PBOOL            NeedReboot
);

パラメーター

[in] DeviceInfoSet

ドライバーのロールバックが実行されるデバイスを表すデバイス情報要素を含むデバイス 情報セット へのハンドル。

[in] DeviceInfoData

ドライバーの ロールバックが実行 される、指定したデバイス情報セット内の特定のデバイスを表すSP_DEVINFO_DATA構造体へのポインター。

[in, optional] hwndParent

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

[in] Flags

0 またはROLLBACK_FLAG_NO_UIに設定できる DWORD 型の値。

通常、このフラグは 0 に設定する必要があります。この場合、 DiRollbackDriver はドライバーのロールバックに関連付けられている既定のユーザー インターフェイス コンポーネントを抑制しません。 ただし、このフラグが ROLLBACK_FLAG_NO_UI に設定されている場合、 DiRollbackDriver はドライバーのロールバックに関連付けられているユーザー インターフェイス コンポーネントの表示を抑制します。

[out, optional] NeedReboot

ロールバックを完了するためにシステムの再起動が必要かどうかを示すために DiRollbackDriver が設定する BOOL 型の値へのポインター。 このパラメーターは省略可能であり、 NULL にすることができます

パラメーターを指定し、ロールバックを完了するためにシステムの再起動が必要な場合、 DiRollbackDriver は値を TRUE に設定します。 この場合、呼び出し元はユーザーにシステムの再起動を求める必要があります。 このパラメーターを指定し、インストールを完了するためにシステムの再起動が必要ない場合、 DiRollbackDriver は値を FALSE に設定 します

パラメーターが NULL で、ロールバックを完了するためにシステムの再起動が必要な場合、 DiRollbackDriver はシステム再起動ダイアログ ボックスを表示します。

このパラメーターの詳細については、次の 「解説 」セクションを参照してください。

戻り値

関数がデバイスのドライバーを正常にロールバックした場合、DiRollbackDriverTRUE を返します。それ以外の場合、DiRollbackDriverFALSE を返し、GetLastError を呼び出すことでログに記録されたエラーを取得できます。 GetLastError が返す可能性がある一般的なエラー値の一部は次のとおりです。

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

注釈

以前にインストールしたバックアップ ドライバーがデバイスに対して設定されている場合、デバイスのドライバー ロールバックによって、デバイスに現在インストールされているドライバーがバックアップ ドライバーに置き換えられます。 Windows では、デバイス用に最大 1 つのバックアップ ドライバーが維持されます。 Windows では、ドライバーがデバイスに正常にインストールされた直後に、デバイスのバックアップ ドライバーとしてドライバーが設定され、Windows はデバイスが正しく機能していると判断します。 ただし、ドライバーがデバイスに正常にインストールされない場合、またはインストール後にデバイスが正しく機能しない場合、Windows はドライバーをデバイスのバックアップ ドライバーとして設定しません。 ドライバーのロールバックの詳細については、ヘルプおよびサポート センターのデバイス マネージャーに関する情報を参照してください。

指定したデバイスにバックアップ ドライバーがある場合、 DiRollbackDriver は次の操作を実行します。

  1. フラグが 0 に設定されている場合、DiRollbackDriver は、バックアップ ドライバーをインストールする必要があるかどうかを確認するようにユーザーに求めます。 それ以外の場合、 フラグ が ROLLBACK_FLAG_NO_UI に設定されている場合、 DiRollbackDriver はバックアップ ドライバーのインストールを確認するようにユーザーに求めることなく、バックアップ ドライバーをインストールします。
  2. DiRollbackDriver によってバックアップ ドライバーがインストールされます。 バックアップ ドライバーがデバイスに現在インストールされているドライバーよりもデバイスに適しているかどうかが、ドライバーがインストールされます。
  3. バックアップ ドライバーに置き換えられたドライバーが受信トレイ ドライバーではなく、システム内の他のデバイスにインストールされていない場合、 DiRollbackDriver はシステムからドライバーを削除します。 DiRollbackDriver は、ドライバーに問題がある場合にのみ、ユーザーがドライバーを置き換えると想定されているため、システムからドライバーを削除します。
指定したデバイスにバックアップ ドライバーがない場合、 DiRollbackDriverSetLastError を呼び出してエラー ERROR_NO_MORE_ITEMSを設定し、現在インストールされているドライバーを削除せず、 FALSE を返します。

一般に、インストール アプリケーションは NeedRebootNULL に設定して、ロールバックを完了するために再起動が必要な場合にシステムが自動的にシステムの再起動を開始するようにする必要があります。 アプリケーションでは、次の場合にのみ NeedReboot ポインターを指定する必要があります。

  • インストールを完了するには、アプリケーションで DiRollbackDriver を複数回呼び出す必要があります。 この場合、アプリケーションは、DiRollbackDriver の呼び出しによって TRUENeedReboot 値が返されるかどうかを記録する必要があります。その場合は、DiRollbackDriver の最後の呼び出しが返された後にシステムを再起動するようにユーザーに求めます。
  • アプリケーションは、システムの再起動を行う前に、 DiRollbackDriver を呼び出す以外の必要な操作を実行する必要があります。 システムの再起動が必要な場合、アプリケーションは必要な操作を完了し、ユーザーにシステムの再起動を求めるメッセージを表示する必要があります。
デバイスのドライバーをロールバックする代わりに、デバイスの新しいドライバーをインストールするには、 DiInstallDriver または UpdateDriverForPlugAndPlayDevices を呼び出します。

要件

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

こちらもご覧ください

DiInstallDriver

UpdateDriverForPlugAndPlayDevices