次の方法で共有


ルーチン環境のアンロード

オペレーティング システムは、ドライバーが置き換えられるとき、またはドライバー サービスが削除されたすべてのデバイスのドライバーをアンロードします。 PnP マネージャーは、ドライバーがIRP_MN_REMOVE_DEVICE要求を処理した後、それ以上デバイス オブジェクトがない場合は、PnP ドライバーのアンロード ルーチンを呼び出します。

アンロード シーケンスの開始時に、I/O マネージャーまたは PnP マネージャーは、ドライバー オブジェクトとそのデバイス オブジェクトを "Unload Pending" としてマークします。 ドライバーが "Unload Pending" としてマークされた後、そのドライバーに追加のドライバーをアタッチすることも、ドライバーのデバイス オブジェクトに対して追加の参照を行することもできません。 ドライバーは未処理の IRP を完了できますが、システムはドライバーに新しい IRP を送信しません。

次のすべてが当てはまる場合、I/O マネージャーはドライバーの Unload ルーチンを呼び出します。

  • ドライバーが作成したデバイス オブジェクトへの参照は残っていません。 言い換えると、基になるデバイスに関連付けられているファイルを開くことはなく、ドライバーのデバイス オブジェクトに対してどの IRP も未処理にすることはできません。

  • このドライバーに接続されている他のドライバーはありません。

  • ドライバーは、以前に登録したすべての PnP 通知の登録を解除するために IoUnregisterPlugPlayNotification を呼び出しました。

ドライバーの DriverEntry ルーチンがエラー状態を返す場合、Unload ルーチンは呼び出されないことに注意してください。 この場合、I/O マネージャーは、ドライバーが占有するメモリ領域を解放するだけです。

PnP マネージャーも I/O マネージャーも、システムのシャットダウン時に アンロード ルーチンを呼び出しません。 シャットダウン処理を実行する必要があるドライバーは、 DispatchShutdown ルーチンを登録する必要があります。