IRP_MN_REMOVE_DEVICE 要求の処理
PnP マネージャーは、デバイスのソフトウェア表現 (デバイス オブジェクトなど) を削除するようドライバーに指示するために、この IRP を使用します。 PnP マネージャーは、デバイスが順序正しく取り外された場合 (たとえば、ユーザーによるプラグの取り外しや、ハードウェア プログラムの取り出し)、不意に外された場合 (ユーザーが事前の警告なしにスロットからデバイスを引っぱった場合)、またはユーザーがドライバーの更新を要求したときに、この IRP を送信します。
Windows 2000 以降のシステムでは、PnP マネージャーは、デバイスデバイス マネージャー無効にするとこの IRP を送信します。 Windows 98/Me では、PnP マネージャーは代わりに停止 IRP を送信します。 詳しくは、「デバイスの停止」をご覧ください。
PnP マネージャーは、デバイスのドライバーにこの IRP を送信する前に、以下の操作を行います。
IRP_MN_REMOVE_DEVICE 要求 (ある場合) をデバイスの子に送信します。
デバイスが削除されていることを通知するよう登録されたユーザー モード コンポーネントとカーネル モード ドライバーに通知します。 PnP マネージャーは、デバイスへのハンドルでターゲット デバイス通知に登録されたすべてのユーザー モード コンポーネントを呼び出し、EventCategoryTargetDeviceChange に登録されたすべてのカーネル モード ドライバーを呼び出します。
(Windows 2000 以降のシステムの場合) ファイル システムがデバイスにマウントされている場合、PnP マネージャーは、ファイル システムとすべてのファイル システム フィルターに削除要求を送信します。 これに対して、ファイル システムは通常ボリュームのマウントを解除します。
デバイス スタックの最上位ドライバーは、削除 IRP を処理し、次の下位ドライバーに渡します。 デバイスの親バス ドライバーは、デバイスの削除操作を実行する最後のドライバーです。 ドライバーは、DispatchPnP ルーチンの IRP の削除を処理します。
ドライバーは、IRP_MN_REMOVE_DEVICE 要求の成功を返す前に、デバイスのすべてのリソースが解放されていることを確認する必要があります。 この IRP は、ドライバーが読み込み解除される前の最後の呼び出しである可能性があります。
1 つのデバイスを削除すると、他の一連のデバイスを削除する必要が生じることがあります。 PnP マネージャーは、最上位レベルからルート デバイス レベルまで、追加のデバイス オブジェクトの削除を調整します。
ここでは、次の内容について説明します。