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 はシステム再起動ダイアログ ボックスを表示します。
このパラメーターの詳細については、次の 「解説 」セクションを参照してください。
戻り値
関数がデバイスのドライバーを正常にロールバックした場合、DiRollbackDriver は TRUE を返します。それ以外の場合、DiRollbackDriver は FALSE を返し、GetLastError を呼び出すことでログに記録されたエラーを取得できます。 GetLastError が返す可能性がある一般的なエラー値の一部は次のとおりです。
リターン コード | 説明 |
---|---|
|
呼び出し元には管理者特権がありません。 既定では、Windows では、呼び出し元が ドライバー パッケージをロールバックするための管理者特権を持っている必要があります。 |
|
呼び出し元のアプリケーションは、64 ビット環境で実行しようとしている 32 ビット アプリケーションです。これは許可されていません。 詳細については、「 64 ビット システムへのデバイスのインストール」を参照してください。 |
|
Flags に指定された値が 0 またはROLLBACK_FLAG_NO_UIと等しくありません。 |
|
デバイスのバックアップ ドライバーが設定されていません。 |
注釈
以前にインストールしたバックアップ ドライバーがデバイスに対して設定されている場合、デバイスのドライバー ロールバックによって、デバイスに現在インストールされているドライバーがバックアップ ドライバーに置き換えられます。 Windows では、デバイス用に最大 1 つのバックアップ ドライバーが維持されます。 Windows では、ドライバーがデバイスに正常にインストールされた直後に、デバイスのバックアップ ドライバーとしてドライバーが設定され、Windows はデバイスが正しく機能していると判断します。 ただし、ドライバーがデバイスに正常にインストールされない場合、またはインストール後にデバイスが正しく機能しない場合、Windows はドライバーをデバイスのバックアップ ドライバーとして設定しません。 ドライバーのロールバックの詳細については、ヘルプおよびサポート センターのデバイス マネージャーに関する情報を参照してください。
指定したデバイスにバックアップ ドライバーがある場合、 DiRollbackDriver は次の操作を実行します。
- フラグが 0 に設定されている場合、DiRollbackDriver は、バックアップ ドライバーをインストールする必要があるかどうかを確認するようにユーザーに求めます。 それ以外の場合、 フラグ が ROLLBACK_FLAG_NO_UI に設定されている場合、 DiRollbackDriver はバックアップ ドライバーのインストールを確認するようにユーザーに求めることなく、バックアップ ドライバーをインストールします。
- DiRollbackDriver によってバックアップ ドライバーがインストールされます。 バックアップ ドライバーがデバイスに現在インストールされているドライバーよりもデバイスに適しているかどうかが、ドライバーがインストールされます。
- バックアップ ドライバーに置き換えられたドライバーが受信トレイ ドライバーではなく、システム内の他のデバイスにインストールされていない場合、 DiRollbackDriver はシステムからドライバーを削除します。 DiRollbackDriver は、ドライバーに問題がある場合にのみ、ユーザーがドライバーを置き換えると想定されているため、システムからドライバーを削除します。
一般に、インストール アプリケーションは NeedReboot を NULL に設定して、ロールバックを完了するために再起動が必要な場合にシステムが自動的にシステムの再起動を開始するようにする必要があります。 アプリケーションでは、次の場合にのみ NeedReboot ポインターを指定する必要があります。
- インストールを完了するには、アプリケーションで DiRollbackDriver を複数回呼び出す必要があります。 この場合、アプリケーションは、DiRollbackDriver の呼び出しによって TRUENeedReboot 値が返されるかどうかを記録する必要があります。その場合は、DiRollbackDriver の最後の呼び出しが返された後にシステムを再起動するようにユーザーに求めます。
- アプリケーションは、システムの再起動を行う前に、 DiRollbackDriver を呼び出す以外の必要な操作を実行する必要があります。 システムの再起動が必要な場合、アプリケーションは必要な操作を完了し、ユーザーにシステムの再起動を求めるメッセージを表示する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降のバージョンの Windows で使用できます。 |
対象プラットフォーム | デスクトップ |
Header | newdev.h (Newdev.h を含む) |
Library | Newdev.lib |
[DLL] | Newdev.dll |